]> git.phdru.name Git - m_lib.git/blob - m_lib/rus/lat2rus.py
16d82f114d2982ba06f430bb8010a4f44fd08e34
[m_lib.git] / m_lib / rus / lat2rus.py
1 #! /usr/bin/env python
2 # -*- coding: koi8-r -*-
3
4 from __future__ import print_function
5
6 #
7 # Lat -> Rus translation
8 #
9
10 lat2koi_d = {
11    "q": "й",
12    "w": "ц",
13    "e": "у",
14    "r": "к",
15    "t": "е",
16    "y": "н",
17    "u": "г",
18    "i": "ш",
19    "o": "щ",
20    "p": "з",
21    "[": "х",
22    "]": "ъ",
23    "a": "ф",
24    "s": "ы",
25    "d": "в",
26    "f": "а",
27    "g": "п",
28    "h": "р",
29    "j": "о",
30    "k": "л",
31    "l": "д",
32    ";": "ж",
33    "'": "э",
34    "z": "я",
35    "x": "ч",
36    "c": "с",
37    "v": "м",
38    "b": "и",
39    "n": "т",
40    "m": "ь",
41    ",": "б",
42    ".": "ю",
43    "Q": "Й",
44    "W": "Ц",
45    "E": "У",
46    "R": "К",
47    "T": "Е",
48    "Y": "Н",
49    "U": "Г",
50    "I": "Ш",
51    "O": "Щ",
52    "P": "З",
53    "{": "Х",
54    "}": "Ъ",
55    "A": "Ф",
56    "S": "Ы",
57    "D": "В",
58    "F": "А",
59    "G": "П",
60    "H": "Р",
61    "J": "О",
62    "K": "Л",
63    "L": "Д",
64    ":": "Ж",
65    "\"": "Э",
66    "Z": "Я",
67    "X": "Ч",
68    "C": "С",
69    "V": "М",
70    "B": "И",
71    "N": "Т",
72    "M": "Ь",
73    "<": "Б",
74    ">": "Ю",
75    "`": "ё",
76    "~": "Ё",
77    "!": "!",
78    "@": "\"",
79    "#": "#",
80    "$": "*",
81    "%": ":",
82    "^": ",",
83    "&": ".",
84    "*": ";",
85 }
86
87
88 def make_lat2xxx(encoding="cp1251"):
89    d = {}
90    for k, v in lat2koi_d.items():
91       if isinstance(v, bytes):
92          v = v.decode("koi8-r")
93       v = v.encode(encoding)
94       d[k] = v
95    return d
96
97
98 from ..lazy.dict import LazyDictInitFunc
99 lat2win_d = LazyDictInitFunc(make_lat2xxx, encoding="cp1251")
100
101
102 def lat2rus(instr, lat2rus_d = lat2koi_d):
103    out = []
104    for c in instr:
105       c = lat2rus_d.get(c, c)
106       if isinstance(c, bytes):
107          c = c.decode('koi8-r')
108       out.append(c.encode('koi8-r'))
109    return b''.join(out)
110
111
112 lat2koi = lat2rus
113
114 def lat2win(instr):
115    return lat2rus(instr, lat2win_d)
116
117
118 if __name__ == "__main__":
119    Test = "Ghbdtn nt,t^ ghtrhfcysq vbh!"
120    print("Test:", Test)
121    print("Тест:", lat2koi(Test))
122    test = lat2win(Test)
123    if isinstance(test, bytes):
124       test = test.decode("cp1251")
125    print("Тест:", test.encode("koi8-r"))