summaryrefslogtreecommitdiff
path: root/tex/context/third/transliterator/trans_tables_gr.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/third/transliterator/trans_tables_gr.lua')
-rw-r--r--tex/context/third/transliterator/trans_tables_gr.lua46
1 files changed, 27 insertions, 19 deletions
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