diff options
Diffstat (limited to 'tex')
| -rw-r--r-- | tex/context/third/transliterator/trans_tables_bg.lua | 105 | ||||
| -rw-r--r-- | tex/context/third/transliterator/transliterator.lua | 2 | 
2 files changed, 107 insertions, 0 deletions
diff --git a/tex/context/third/transliterator/trans_tables_bg.lua b/tex/context/third/transliterator/trans_tables_bg.lua new file mode 100644 index 0000000..ed1ddc2 --- /dev/null +++ b/tex/context/third/transliterator/trans_tables_bg.lua @@ -0,0 +1,105 @@ +--===========================================================================-- +--                            Bulgarian                                      -- +--===========================================================================-- + +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 + diff --git a/tex/context/third/transliterator/transliterator.lua b/tex/context/third/transliterator/transliterator.lua index b64f888..ac3beb3 100644 --- a/tex/context/third/transliterator/transliterator.lua +++ b/tex/context/third/transliterator/transliterator.lua @@ -259,6 +259,8 @@ function translit.transliterate (method, text)              environment.loadluafile ("trans_tables_scntfc")          elseif  method:match("^sr_") then              environment.loadluafile ("trans_tables_sr") +        elseif  method:match("^bg_") then -- only bg_de for now +            environment.loadluafile ("trans_tables_bg")          elseif  method == "gr"   or                  method == "gr_n" then              environment.loadluafile ("trans_tables_gr")  | 
