summaryrefslogtreecommitdiff
path: root/tex/context/third/transliterator/trans_tables_bg.lua
blob: c20e0c81654bf32e716b9a18c8953f1afadb41d4 (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
--===========================================================================--
--                            Bulgarian                                      --
--===========================================================================--

local translit = thirddata.translit

if not translit.done_bg then
    ---------------------------------------------------------------------------
    -- Uppercase Bulgarian -> „scientific“ transliteration                   --
    ---------------------------------------------------------------------------

    translit.bg_upp = translit.make_add_dict{
        ["А"] = "A",
        ["Б"] = "B",
        ["В"] = "V",
        ["Г"] = "G",
        ["Д"] = "D",
        ["Е"] = "E",
        ["Ж"] = "Ž",
        ["З"] = "Z",
        ["И"] = "I",
        ["Й"] = "J",
        ["К"] = "K",
        ["Л"] = "L",
        ["М"] = "M",
        ["Н"] = "N",
        ["О"] = "O",
        ["П"] = "P",
        ["Р"] = "R",
        ["С"] = "S",
        ["Т"] = "T",
        ["У"] = "U",
        ["Ф"] = "F",
        ["Х"] = "Ch",
        ["Ц"] = "C",
        ["Ч"] = "Č",
        ["Ш"] = "Š",
        ["Щ"] = "Št",
        ["Ъ"] = "Ă",
        ["Ь"] = "′",
        ["Ю"] = "Ju",
        ["Я"] = "Ja",
    }
    translit.tables["Bulgarian \\quotation{scientific} transliteration uppercase"] = translit.bg_upp

    ---------------------------------------------------------------------------
    -- Lowercase Bulgarian -> „scientific“ transliteration                   --
    ---------------------------------------------------------------------------
    translit.bg_low = translit.make_add_dict{
        ["а"] = "a",
        ["б"] = "b",
        ["в"] = "v",
        ["г"] = "g",
        ["д"] = "d",
        ["е"] = "e",
        ["ж"] = "ž",
        ["з"] = "z",
        ["и"] = "i",
        ["й"] = "j",
        ["к"] = "k",
        ["л"] = "l",
        ["м"] = "m",
        ["н"] = "n",
        ["о"] = "o",
        ["п"] = "p",
        ["р"] = "r",
        ["с"] = "s",
        ["т"] = "t",
        ["у"] = "u",
        ["ф"] = "f",
        ["х"] = "ch",
        ["ц"] = "c",
        ["ч"] = "č",
        ["ш"] = "š",
        ["щ"] = "št",
        ["ъ"] = "ă",
        ["ь"] = "′",
        ["ю"] = "ju",
        ["я"] = "ja",
    }

    translit.tables["Bulgarian \\quotation{scientific} transliteration lowercase"] = translit.bg_low

    translit.done_bg = true
end

local P, Cs, lmatch = lpeg.P, lpeg.Cs, lpeg.match
local addrules      = translit.addrules
local utfchar       = translit.utfchar

local memo = { }
local function bulgarian (mode, text)
    local bulgarian_parser
    if memo[mode] then
        return lmatch(memo[mode], text)
    end
    if mode == "de" then
        local bg = translit.bg_upp + translit.bg_low
        local p_bg = addrules(bg)
        bulgarian_parser = Cs((p_bg / bg + utfchar)^0)
    end
    memo[mode] = bulgarian_parser
    return bulgarian_parser and lmatch(bulgarian_parser, text) or ""
end

translit.methods["bg_de"] = function (text) return bulgarian("de", text) end