summaryrefslogtreecommitdiff
path: root/tex/context/third/transliterator/trans_tables_sr.lua
blob: 84319b02c464e2959025146bb4015b872eb67f06 (plain)
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

--===========================================================================--
--                               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))

    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 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_macro + (_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