1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
--===========================================================================--
-- Serbian --
--===========================================================================--
if not translit.done_serbian then
--------------------------------------------
-- Lowercase Serbian (Cyrillic -> Latin) --
--------------------------------------------
translit.sr_tolt_lower = translit.make_add_dict{
["А"] = "A",
["Б"] = "B",
["В"] = "V",
["Г"] = "G",
["Д"] = "D",
["Ђ"] = "Đ",
["Е"] = "E",
["Ж"] = "Ž",
["З"] = "Z",
["И"] = "I",
["Ј"] = "J",
["К"] = "K",
["Л"] = "L",
["Љ"] = "Lj",
["М"] = "M",
["Н"] = "N",
["Њ"] = "Nj",
["О"] = "O",
["П"] = "P",
["Р"] = "R",
["С"] = "S",
["Т"] = "T",
["Ћ"] = "Ć",
["У"] = "U",
["Ф"] = "F",
["Х"] = "H",
["Ц"] = "C",
["Ч"] = "Č",
["Џ"] = "Dž",
["Ш"] = "Š",
}
translit.tables["Serbian Cyr->Lat Transliteration lowercase"] = translit.sr_tolt_lower
--------------------------------------------
-- Uppercase Serbian (Cyrillic -> Latin) --
--------------------------------------------
translit.sr_tolt_upper = translit.make_add_dict{
["а"] = "a",
["б"] = "b",
["в"] = "v",
["г"] = "g",
["д"] = "d",
["ђ"] = "đ",
["е"] = "e",
["ж"] = "ž",
["з"] = "z",
["и"] = "i",
["ј"] = "j",
["к"] = "k",
["л"] = "l",
["љ"] = "lj",
["м"] = "m",
["н"] = "n",
["њ"] = "nj",
["о"] = "o",
["п"] = "p",
["р"] = "r",
["с"] = "s",
["т"] = "t",
["ћ"] = "ć",
["у"] = "u",
["ф"] = "f",
["х"] = "h",
["ц"] = "c",
["ч"] = "č",
["џ"] = "dž",
["ш"] = "š",
}
translit.tables["Serbian Cyr->Lat Transliteration uppercase"] = translit.sr_tolt_upper
local function __inverse_tab (t)
local result = { }
for k,v in next,t do result[v] = k end
return result
end
translit.sr_tocy_lower = translit.make_add_dict(__inverse_tab(translit.sr_tolt_lower))
translit.sr_tocy_upper = translit.make_add_dict(__inverse_tab(translit.sr_tolt_upper))
local except = {
["nadživ"] = "надћив", -- nadživeti and derivatives
}
local P = lpeg.P
local sub, upper = unicode.utf8.sub, unicode.utf8.upper
local sre, srei, p_sre, p_sre_i = { }, { }
for lat, cyr in next, except do
local Lat = upper(sub(lat, 1, 1)) .. sub(lat, 2)
local Cyr = upper(sub(cyr, 1, 1)) .. sub(cyr, 2)
local LAT, CYR = upper(lat), upper(cyr)
local p_lat = P" " * (P(lat) + Lat + LAT)
p_sre_i = p_sre_i and p_sre_i + P(lat) + Lat + LAT or P(lat) + Lat + LAT
p_sre = p_sre and p_sre + p_lat or p_lat
srei[lat], srei[Lat], srei[LAT] = cyr, Cyr, CYR
sre[" "..lat], sre[" "..Lat], sre[" "..LAT] = " "..cyr, " "..Cyr, " "..CYR
end
translit.serbian_exceptions = sre
translit.serbian_exceptions_init = srei
translit.p_serbian_exceptions = p_sre
translit.p_serbian_exceptions_init = p_sre_i
translit.done_serbian = true
end
--===========================================================================--
-- End Of Tables --
--===========================================================================--
local t = translit
local function sr (mode, text)
local P, R, Cs = lpeg.P, lpeg.R, lpeg.Cs
local utfchar = translit.utfchar
local _p_sre = translit.p_serbian_exceptions / translit.serbian_exceptions
local _p_sre_i = translit.p_serbian_exceptions_init / translit.serbian_exceptions_init
local trl_sr = translit.make_add_dict{}
trl_sr = t[mode.."_upper"] + t[mode.."_lower"]
-- transliteration from latin script requires macro handling …
local _p_macro = P[[\]] * R("az", "AZ")^1
local _p_sr = translit.addrules (trl_sr, _p_sr)
local p_sr = Cs(_p_sre_i^-1 * (_p_macro + _p_sre + (_p_sr / trl_sr) + utfchar)^0)
return p_sr:match(text)
end
translit.methods ["sr_tolt"] = function (text) return sr( "sr_tolt", text ) end
translit.methods ["sr_tocy"] = function (text) return sr( "sr_tocy", text ) end
|