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