From adc06ec6e6e32fafe4e0689bd8a5e9d31000012e Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Tue, 10 May 2011 11:30:45 +0200 Subject: serbian transliteration tables & functions --- .../third/transliterator/trans_tables_sr.lua | 116 +++++++++++++++++++++ .../third/transliterator/transliterator.lua | 11 +- 2 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 tex/context/third/transliterator/trans_tables_sr.lua diff --git a/tex/context/third/transliterator/trans_tables_sr.lua b/tex/context/third/transliterator/trans_tables_sr.lua new file mode 100644 index 0000000..9abe5b2 --- /dev/null +++ b/tex/context/third/transliterator/trans_tables_sr.lua @@ -0,0 +1,116 @@ + +--===========================================================================-- +-- 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, S, V, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.Cs + local utfchar = translit.utfchar + local trl_sr = translit.make_add_dict{} + + trl_sr = t[mode.."_upper"] + t[mode.."_lower"] + + local _p_sr = translit.addrules (trl_sr, _p_sr) + local p_sr = Cs((_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 diff --git a/tex/context/third/transliterator/transliterator.lua b/tex/context/third/transliterator/transliterator.lua index ddda144..d794c05 100644 --- a/tex/context/third/transliterator/transliterator.lua +++ b/tex/context/third/transliterator/transliterator.lua @@ -83,7 +83,8 @@ end -- Generate a rule pattern from hash table. do - local P = lpeg.P + local P, R, V = lpeg.P, lpeg.R, lpeg.V + function translit.addrules (dict, rules) for i, _ in pairs(dict) do if rules == nil then rules = P(i) @@ -92,12 +93,9 @@ do end return rules end -end -- Modified version of Hans’s utf pattern (l-lpeg.lua). -do - local P, R, V = lpeg.P, lpeg.R, lpeg.V translit.utfchar = P{ V"utf8one" + V"utf8two" + V"utf8three" + V"utf8four", @@ -194,6 +192,7 @@ function translit.show_all_tabs () environment.loadluafile ("trans_tables_iso9") environment.loadluafile ("trans_tables_trsc") environment.loadluafile ("trans_tables_scntfc") + environment.loadluafile ("trans_tables_sr") environment.loadluafile ("trans_tables_trsc") environment.loadluafile ("trans_tables_glag") environment.loadluafile ("trans_tables_gr") @@ -227,7 +226,7 @@ end -- corresponding function. -- Those supposedly are the most frequently used so it won’t hurt to preload --- them. +-- them. The rest will be loaded on request. environment.loadluafile ("trans_tables_iso9") function translit.transliterate (method, text) @@ -245,6 +244,8 @@ function translit.transliterate (method, text) method == "ocs" or method == "ocs_gla" then environment.loadluafile ("trans_tables_scntfc") + elseif method:match("^sr_") then + environment.loadluafile ("trans_tables_sr") elseif method == "gr" or method == "gr_n" then environment.loadluafile ("trans_tables_gr") -- cgit v1.2.3