Wikipedia:Projekt DotNetWikiBot Framework/Lsjbot/Cyrillic
Utseende
Kod för svensk translitterering från kyrilliska.
Anropas med cyrillic.Transliterate(string name,string lang), där första parametern är en kyrillisk sträng, och andra är språkkod (iso2) för strängens språk ("ru", "bg", etc.).
public class transliterationclass
{
private string defaultlang = "ru";
private string badreturn = "?";
private string contextdependent = "*";
private List<char> vowels = new List<char>();
public List<char> badlist = new List<char>();
private Dictionary<string, Dictionary<char, string>> tldict = new Dictionary<string, Dictionary<char, string>>();
public void Addchar(char fromchar, string tochars)
{
Addchar(fromchar, tochars, defaultlang, false);
}
public void Addchar(char fromchar, string tochars, bool isvowel)
{
Addchar(fromchar, tochars, defaultlang, isvowel);
}
public void Addchar(char fromchar, string tochars, string lang)
{
Addchar(fromchar, tochars, lang, false);
}
public void Addchar(char fromchar, string tochars, string lang, bool isvowel)
{
if (!tldict.ContainsKey(lang))
{
Dictionary<char, string> csdict = new Dictionary<char, string>();
tldict.Add(lang, csdict);
}
if (!tldict[lang].ContainsKey(fromchar))
{
tldict[lang].Add(fromchar, tochars);
if (isvowel)
if (!vowels.Contains(fromchar))
vowels.Add(fromchar);
}
}
private string Transchar(char fromchar, char contextbefore, char contextafter, string langparam)
{
if (Convert.ToInt32(fromchar) <= 0x0041) //punctuation etc.
return fromchar.ToString();
string lang = langparam;
if (!tldict.ContainsKey(lang)) //russian default language
lang = defaultlang;
if ( !tldict[lang].ContainsKey(fromchar))
lang = defaultlang;
if (!tldict[lang].ContainsKey(fromchar))
{
if (is_latin(fromchar.ToString()))
return fromchar.ToString();
if (!badlist.Contains(fromchar))
badlist.Add(fromchar);
return badreturn;
}
if (tldict[lang][fromchar] != contextdependent)
return tldict[lang][fromchar];
else //context-dependent:
{
List<char> tszlist = new List<char> {'С','с','Т','т','З','з'};
List<char> jlist = new List<char> {'Ж','ж','Љ','љ','Ш','ш','Щ','щ'};
if (fromchar == 'Е')
{
if ((contextbefore == '#') || (vowels.Contains(contextbefore)))
return "Je";
else
return "E";
}
else if (fromchar == 'е')
{
if ((contextbefore == '#') || (vowels.Contains(contextbefore)))
return "je";
else
return "e";
}
else if (fromchar == 'Ё')
{
if (tszlist.Contains(contextbefore))
return "Io";
else if (jlist.Contains(contextbefore))
return "O";
else
return "Jo";
}
else if ((fromchar == 'ë') || (fromchar == 'ё'))
{
if (tszlist.Contains(contextbefore))
return "io";
else if (jlist.Contains(contextbefore))
return "o";
else
return "jo";
}
else if (fromchar == 'Ю')
{
if (tszlist.Contains(contextbefore))
return "Iu";
else if (jlist.Contains(contextbefore))
return "U";
else
return "Ju";
}
else if (fromchar == 'ю')
{
if (tszlist.Contains(contextbefore))
return "iu";
else if (jlist.Contains(contextbefore))
return "u";
else
return "ju";
}
else if (fromchar == 'Я')
{
if (tszlist.Contains(contextbefore))
return "Ia";
else if (jlist.Contains(contextbefore))
return "A";
else
return "Ja";
}
else if (fromchar == 'я')
{
if (tszlist.Contains(contextbefore))
return "ia";
else if (jlist.Contains(contextbefore))
return "a";
else
return "ja";
}
else
{
if (!badlist.Contains(fromchar))
badlist.Add(fromchar);
return badreturn;
}
}
}
public string Transliterate(string name,string lang)
{
char[] letters = name.ToCharArray();
string result = "";
for (int ic = 0; ic < letters.Length; ic++)
{
char contextbefore = '#';
if ( ic > 0 )
contextbefore = letters[ic-1];
char contextafter = '#';
if ( ic < letters.Length-1 )
contextafter = letters[ic+1];
result += Transchar(letters[ic],contextbefore,contextafter,lang);
}
return result;
}
}
public static transliterationclass cyrillic = new transliterationclass();
public static void fill_cyrillic()
{
//Swedish transliteration!
cyrillic.Addchar('А', "A", true);
cyrillic.Addchar('а', "a", true);
cyrillic.Addchar('Б', "B");
cyrillic.Addchar('б', "b");
cyrillic.Addchar('В', "V");
cyrillic.Addchar('в', "v");
cyrillic.Addchar('Г', "H", "uk");
cyrillic.Addchar('г', "h", "uk");
cyrillic.Addchar('Г', "H", "be");
cyrillic.Addchar('г', "h", "be");
cyrillic.Addchar('Г', "G");
cyrillic.Addchar('г', "g");
cyrillic.Addchar('Ѓ', "Ǵ");
cyrillic.Addchar('ѓ', "ǵ");
cyrillic.Addchar('Ґ', "G");
cyrillic.Addchar('ґ', "g");
cyrillic.Addchar('Д', "D");
cyrillic.Addchar('д', "d");
cyrillic.Addchar('Ђ', "D");
cyrillic.Addchar('ђ', "đ");
cyrillic.Addchar('Ђ', "Dj","sr");
cyrillic.Addchar('ђ', "dj","sr");
cyrillic.Addchar('Е', "*", true);
cyrillic.Addchar('е', "*", true);
cyrillic.Addchar('Е', "E", "uk", true);
cyrillic.Addchar('е', "e", "uk", true);
cyrillic.Addchar('Е', "E", "bg", true);
cyrillic.Addchar('е', "e", "bg", true);
cyrillic.Addchar('Ё', "*", true);
cyrillic.Addchar('ë', "*", true);
cyrillic.Addchar('ё', "*", true);
cyrillic.Addchar('Є', "Je", true);//є
cyrillic.Addchar('є', "je", true);
cyrillic.Addchar('Ж', "Zj");
cyrillic.Addchar('ж', "zj");
cyrillic.Addchar('Ж', "Ž", "sr");
cyrillic.Addchar('ж', "Ž".ToLower(), "sr");
cyrillic.Addchar('Ж', "Ž", "mk");
cyrillic.Addchar('ж', "Ž".ToLower(), "mk");
cyrillic.Addchar('З', "Z");
cyrillic.Addchar('з', "z");
cyrillic.Addchar('Ѕ', "Dz", "mk");
cyrillic.Addchar('ѕ', "dz", "mk");
cyrillic.Addchar('И', "Y", "uk", true);
cyrillic.Addchar('и', "y", "uk", true);
cyrillic.Addchar('И', "Y", "be", true);
cyrillic.Addchar('и', "y", "be", true);
cyrillic.Addchar('И', "I", true);
cyrillic.Addchar('и', "i", true);
cyrillic.Addchar('Й', "J");
cyrillic.Addchar('й', "j");
cyrillic.Addchar('І', "I", true);
cyrillic.Addchar('і', "і", true);
cyrillic.Addchar('Ї', "Ji", true);
cyrillic.Addchar('ї', "ji", true);
cyrillic.Addchar('J', "J");
cyrillic.Addchar('j', "j");
cyrillic.Addchar('К', "K");//seemingly identical
cyrillic.Addchar('K', "K");//but different unicodes
cyrillic.Addchar('к', "k");
cyrillic.Addchar('Ќ', "Ḱ");
cyrillic.Addchar('ќ', "ḱ");
cyrillic.Addchar('Л', "L");
cyrillic.Addchar('л', "l");
cyrillic.Addchar('Љ', "Lj");
cyrillic.Addchar('љ', "lj");
cyrillic.Addchar('М', "M");
cyrillic.Addchar('м', "m");
cyrillic.Addchar('Н', "N");
cyrillic.Addchar('н', "n");
cyrillic.Addchar('Њ', "Nj");
cyrillic.Addchar('њ', "nj");
cyrillic.Addchar('О', "O", true);
cyrillic.Addchar('о', "o", true);
cyrillic.Addchar('o', "o", true);
cyrillic.Addchar('П', "P");
cyrillic.Addchar('п', "p");
cyrillic.Addchar('Р', "R");
cyrillic.Addchar('р', "r");
cyrillic.Addchar('С', "S");//seemingly identical
cyrillic.Addchar('C', "S");//but different unicodes
cyrillic.Addchar('с', "s");
cyrillic.Addchar('Т', "T");
cyrillic.Addchar('т', "t");
cyrillic.Addchar('Ћ', "Ć");
cyrillic.Addchar('ћ', "ć");
cyrillic.Addchar('У', "U", true);
cyrillic.Addchar('у', "u", true);
cyrillic.Addchar('Ў', "Ŭ", true);
cyrillic.Addchar('ў', "ŭ", true);
cyrillic.Addchar('Ф', "F");
cyrillic.Addchar('ф', "f");
cyrillic.Addchar('Х', "H", "sr");
cyrillic.Addchar('х', "h", "sr");
cyrillic.Addchar('Х', "H", "mk");
cyrillic.Addchar('х', "h", "mk");
cyrillic.Addchar('Х', "Ch");
cyrillic.Addchar('х', "ch");
cyrillic.Addchar('Ц', "Ts");
cyrillic.Addchar('ц', "ts");
cyrillic.Addchar('Ц', "C","sr");
cyrillic.Addchar('ц', "c","sr");
cyrillic.Addchar('Ц', "C","mk");
cyrillic.Addchar('ц', "c","mk");
cyrillic.Addchar('Ч', "Tj");
cyrillic.Addchar('ч', "tj");
cyrillic.Addchar('Ч', "Č","sr");
cyrillic.Addchar('ч', "Č".ToLower(),"sr");
cyrillic.Addchar('Ч', "Č","mk");
cyrillic.Addchar('ч', "Č".ToLower(),"mk");
cyrillic.Addchar('Џ', "Dž");
cyrillic.Addchar('џ', "dž");
cyrillic.Addchar('Ш', "Sj");
cyrillic.Addchar('ш', "sj");
cyrillic.Addchar('Ш', "Š","sr");
cyrillic.Addchar('ш', "Š".ToLower(),"sr");
cyrillic.Addchar('Ш', "Š", "mk");
cyrillic.Addchar('ш', "Š".ToLower(), "mk");
cyrillic.Addchar('Щ', "Sjt", "bg");
cyrillic.Addchar('щ', "sjt", "bg");
cyrillic.Addchar('Щ', "Sjtj");
cyrillic.Addchar('щ', "sjtj");
cyrillic.Addchar('Ъ', "", true);
cyrillic.Addchar('ъ', "", true);
cyrillic.Addchar('Ъ', "", true);
cyrillic.Addchar('ъ', "", true);
cyrillic.Addchar('Ы', "Y", true);
cyrillic.Addchar('ы', "y", true);
cyrillic.Addchar('Ь', "", true);
cyrillic.Addchar('ь', "", true);
cyrillic.Addchar('Ѣ', "", true);
cyrillic.Addchar('ѣ', "", true);
cyrillic.Addchar('Э', "E", true);
cyrillic.Addchar('э', "e", true);
cyrillic.Addchar('Ю', "*", true);
cyrillic.Addchar('ю', "*", true);
cyrillic.Addchar('Я', "*", true);
cyrillic.Addchar('я', "*", true);
cyrillic.Addchar('Ө', "Ḟ");
cyrillic.Addchar('ө', "ḟ");
cyrillic.Addchar('Ѵ', "Ẏ");
cyrillic.Addchar('ѵ', "ẏ");
cyrillic.Addchar('Ѫ', "A", true);
cyrillic.Addchar('ѫ', "a", true);//“”
cyrillic.Addchar('“', "“");
cyrillic.Addchar('”', "”");
cyrillic.Addchar('«', "«");
cyrillic.Addchar('»', "»");
cyrillic.Addchar('’', "’");
cyrillic.Addchar('„', "„");
cyrillic.Addchar('´', "");//
cyrillic.Addchar('Ғ', "Gh","kk");
cyrillic.Addchar('ғ', "gh");
cyrillic.Addchar('Ə', "Ä","kk",true);
cyrillic.Addchar('ə', "ä","kk",true);
cyrillic.Addchar('İ', "I","kk",true);
cyrillic.Addchar('і', "i","kk",true);
cyrillic.Addchar('Қ', "Q","kk");
cyrillic.Addchar('қ', "q", "kk");
cyrillic.Addchar('қ', "q");
cyrillic.Addchar('Ң', "Ng", "kk");
cyrillic.Addchar('ң', "ng","kk");
cyrillic.Addchar('Ө', "Ö","kk",true);
cyrillic.Addchar('ө', "ö","kk",true);
cyrillic.Addchar('Ү', "Ü","kk",true);
cyrillic.Addchar('ү', "ü","kk",true);
cyrillic.Addchar('Ұ', "U","kk",true);
cyrillic.Addchar('ұ', "u","kk",true);
cyrillic.Addchar('Һ', "H","kk");
cyrillic.Addchar('һ', "h","kk");
cyrillic.Addchar('Ң', "Ng","ky");
cyrillic.Addchar('ң', "ng","ky");
cyrillic.Addchar('Ө', "Ö","ky",true);
cyrillic.Addchar('ө', "ö","ky",true);
cyrillic.Addchar('Ү', "Ü","ky",true);
cyrillic.Addchar('ү', "ü", "ky", true);
cyrillic.Addchar('γ', "ü", true);
cyrillic.Addchar('Ғ', "Gh","tg");
cyrillic.Addchar('ғ', "gh","tg");
cyrillic.Addchar('Ӣ', "Y","tg",true);
cyrillic.Addchar('ӣ', "y","tg",true);
cyrillic.Addchar('Қ', "Q","tg");
cyrillic.Addchar('қ', "q","tg");
cyrillic.Addchar('Ӯ', "Ö","tg",true);
cyrillic.Addchar('ӯ', "ö","tg",true);
cyrillic.Addchar('Ҳ', "H","tg");
cyrillic.Addchar('ҳ', "h","tg");
cyrillic.Addchar('Ҷ', "Dzj","tg");
cyrillic.Addchar('ҷ', "dzj","tg");
cyrillic.Addchar('ж', "j","mn");
cyrillic.Addchar('Ж', "J","mn");
cyrillic.Addchar('З', "Dz","mn");
cyrillic.Addchar('з', "dz","mn");
cyrillic.Addchar('Ы', "Ij","mn");
cyrillic.Addchar('ы', "ij","mn");
cyrillic.Addchar('Ө', "Ö", "mn", true);
cyrillic.Addchar('ө', "ö", "mn", true);
cyrillic.Addchar('Ү', "Ü", "mn", true);
cyrillic.Addchar('ү', "ü", "mn", true);//
cyrillic.Addchar('ј', "j");
cyrillic.Addchar('Ј', "J");
cyrillic.Addchar('ј', "j");
cyrillic.Addchar('ј', "j");
cyrillic.Addchar('ј', "j");
}