]> git.phdru.name Git - m_lib.git/blob - m_lib/rus/rus2lat.py
dda03dab0a52de89add34af7948a407a01e05ea9
[m_lib.git] / m_lib / rus / rus2lat.py
1 #! /usr/bin/env python
2 # -*- coding: koi8-r -*-
3
4 #
5 # Rus -> Lat transliteration (koi2lat and win2lat)
6 # Written by Broytman. Copyright (C) 1997-2002 PhiloSoft Design
7 #
8
9 koi2lat_d = {
10    "А": "A",
11    "Б": "B",
12    "В": "V",
13    "Г": "G",
14    "Д": "D",
15    "Е": "E",
16    "Ж": "Zh",
17    "З": "Z",
18    "И": "I",
19    "Й": "Y",
20    "К": "K",
21    "Л": "L",
22    "М": "M",
23    "Н": "N",
24    "О": "O",
25    "П": "P",
26    "Р": "R",
27    "С": "S",
28    "Т": "T",
29    "У": "U",
30    "Ф": "F",
31    "Х": "H",
32    "Ц": "Ts",
33    "Ч": "Ch",
34    "Ш": "Sh",
35    "Щ": "Sh",
36    "Ъ": "'",
37    "Ь": "'",
38    "Ы": "Y",
39    "Э": "E",
40    "Ю": "Yu",
41    "Я": "Ya",
42    "а": "a",
43    "б": "b",
44    "в": "v",
45    "г": "g",
46    "д": "d",
47    "е": "e",
48    "ж": "zh",
49    "з": "z",
50    "и": "i",
51    "й": "y",
52    "к": "k",
53    "л": "l",
54    "м": "m",
55    "н": "n",
56    "о": "o",
57    "п": "p",
58    "р": "r",
59    "с": "s",
60    "т": "t",
61    "у": "u",
62    "ф": "f",
63    "х": "h",
64    "ц": "ts",
65    "ч": "ch",
66    "ш": "sh",
67    "щ": "sh",
68    "ъ": "'",
69    "ь": "'",
70    "ы": "y",
71    "э": "e",
72    "ю": "yu",
73    "я": "ya"
74 }
75
76 def make_xxx2lat(encoding="cp1251"):
77    d = {}
78    for k, v in koi2lat_d.items():
79       k = unicode(k, "koi8-r").encode(encoding)
80       d[k] = v
81    return d
82
83
84 from m_lib.lazy.dict import LazyDictInitFunc
85 win2lat_d = LazyDictInitFunc(make_xxx2lat, encoding="cp1251")
86
87
88 def rus2lat(instr, rus2lat_d = koi2lat_d):
89    out = []
90    for c in instr:
91       out.append(rus2lat_d.get(c, c))
92    return ''.join(out)
93
94
95 koi2lat = rus2lat
96
97 def win2lat(instr):
98    return rus2lat(instr, win2lat_d)
99
100
101 if __name__ == "__main__":
102    Test = "Щербаков Игорь Григорьевич. АБВ xyz абв ЬЬЭЮЯ ъьэюя"
103    print "Test:", Test
104    print "Тест:", koi2lat(Test)
105    print "Тест:", win2lat(unicode(Test, "koi8-r").encode("cp1251"))