From 8f57b0ace4826104e586e289d0977b55570f0c8b Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Fri, 24 Dec 2010 16:05:30 +0100 Subject: utf character handling; optimized iso9 parser code --- .../third/transliterator/trans_tables_gr.lua | 46 +++++++++++++--------- 1 file changed, 27 insertions(+), 19 deletions(-) (limited to 'tex/context/third/transliterator/trans_tables_gr.lua') diff --git a/tex/context/third/transliterator/trans_tables_gr.lua b/tex/context/third/transliterator/trans_tables_gr.lua index 084478d..a2167ee 100644 --- a/tex/context/third/transliterator/trans_tables_gr.lua +++ b/tex/context/third/transliterator/trans_tables_gr.lua @@ -643,34 +643,42 @@ translit.tables["Greek transliteration archaic characters"] = translit.gr_other --===========================================================================-- function translit.dogreek (mode, text) - local P, R, S, V, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.Cs + local P, V, Cs = lpeg.P, lpeg.V, lpeg.Cs local addrules = translit.addrules - local utfchar = lpeg.patterns.utf8char + local utfchar = translit.utfchar if mode == "gr" or mode == "gr_n" then local gr_di_in, gr_in, gr_di, gr = translit.make_add_dict{}, translit.make_add_dict{}, translit.make_add_dict{}, translit.make_add_dict{} - gr_di_in = gr_di_in + translit.gr_di_in_low + translit.gr_di_in_upp - gr_in = gr_in + translit.gr_in_low + translit.gr_in_upp - gr_di = gr_di + translit.gr_di_low + translit.gr_di_upp - gr = gr + translit.gr_low + translit.gr_upp + translit.gr_other + gr_di_in = gr_di_in + translit.gr_di_in_low + translit.gr_di_in_upp + gr_in = gr_in + translit.gr_in_low + translit.gr_in_upp + gr_di = gr_di + translit.gr_di_low + translit.gr_di_upp + gr = gr + translit.gr_low + translit.gr_upp + translit.gr_other - if mode == "gr_n" then gr_di = gr_di + translit.gr_nrule end + if mode == "gr_n" then gr_di = gr_di + translit.gr_nrule end local p_di_in, p_in, p_di, p - p_di_in = addrules( gr_di_in, p_di_in ) - p_in = addrules( gr_in, p_in ) - p_di = addrules( gr_di, p_di ) - p = addrules( gr, p ) - - local init_diph = Cs(p_di_in / gr_di_in ) - local init = Cs(p_in / gr_in ) - local diph = Cs(p_di / gr_di ) - local other = Cs(p / gr ) - - local g = Cs((init_diph + init + diph + other + utfchar)^0) - + p_di_in = addrules( gr_di_in, p_di_in ) + p_in = addrules( gr_in, p_in ) + p_di = addrules( gr_di, p_di ) + p = addrules( gr, p ) + + local g = P{ -- 2959 rules + Cs((V"init_diph" + + V"init" + + V"diph" + + V"other" + + utfchar + )^0), + + init_diph = Cs(p_di_in / gr_di_in ), + init = Cs(p_in / gr_in ), + diph = Cs(p_di / gr_di ), + other = Cs(p / gr ), + } + + --g:print() text = g:match(text) return text end -- cgit v1.2.3