Wikipedia:Projekt DotNetWikiBot Framework/Lsjbot/Cyrillic

Från Wikipedia

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");
        
    }