Для ref: http://en.wikipedia.org/wiki/Arabic_alphabet и http://en.wikipedia.org/wiki/Arabic_characters_in_Unicode
Во-первых, я не очень разбираюсь в арабских словоформах, и я просто прочитал в нем документ из Википедии (ссылка выше). Спасибо, что дали мне повод прочитать об этом, но простите, если я полностью испортил это: -) ...
Проблема, похоже, заключается в том, что символ отображается в его правильном "падеже" на основе его положения в слове, верно? Я основываю это на изменениях, которые вы показали в своих примерах. Во всяком случае, по-английски это было бы как прописная буква первой буквы. На арабском языке, по-видимому, есть 4 варианта символов (начальный, средний, конечный и изолированный). Если это правильно, вот пример в C #, который выполняет это отображение:
class ArabicMapper
{
enum CaseMap{End=0, Middle=1, Beginning=2, Isolated=3};
Dictionary<char, char[]> charMap; // This maps base letters to one of their four cases.
public ArabicMapper()
{
//Create the char map for each letter in the alphabet. {BaseLetter, {End, Middle, Beginning, Isolated}}
charMap = new Dictionary<char, char[]>();
charMap.Add(0627, new char[] { FE8D, 0627, 0627, FE8E }); // ʾalif : Not sure of the rules for middle/beginning, so just using the isolated...
charMap.Add(0628, new char[] { FE90, FE92, FE91, FE8F }); // bāʾ :
//... and so on for each char ...
}
public string charsToWord(char[] word)
{
if (word.Length >= 2)
{
StringBuilder finalWord = new StringBuilder();
for(int i=0; i<word.Length; i++)
{
if (i == 0)
finalWord.Append((charMap[word[i]])[CaseMap.Beginning]);
else if(i == word.Length-1)
finalWord.Append((charMap[word[i]])[CaseMap.End]);
else
finalWord.Append((charMap[word[i]])[CaseMap.Middle]);
}
return finalWord.ToString();
}
else
{
(charMap[word[0]])[CaseMap.Isolated].ToString();
}
}
}
P.S. Я не тестировал этот код, поэтому он может не работать. Считайте это псевдокодом, пожалуйста.