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_scntfc.lua | 37 ++++++++++------------ 1 file changed, 17 insertions(+), 20 deletions(-) (limited to 'tex/context/third/transliterator/trans_tables_scntfc.lua') diff --git a/tex/context/third/transliterator/trans_tables_scntfc.lua b/tex/context/third/transliterator/trans_tables_scntfc.lua index f54eb8e..9f92cf5 100644 --- a/tex/context/third/transliterator/trans_tables_scntfc.lua +++ b/tex/context/third/transliterator/trans_tables_scntfc.lua @@ -200,12 +200,13 @@ translit.tables["OCS \\quotation{scientific} transliteration additional uppercas --===========================================================================-- function translit.scientific (mode, text) - local P, R, S, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.Cs - local utfchar = lpeg.patterns.utf8char + local P, Cs = lpeg.P, lpeg.Cs + local utfchar = translit.utfchar + local addrules = translit.addrules local cyr = translit.make_add_dict{} - local cyruk, p_cyruk, p_cyr - local scientific_parser + local cyruk, p_cyruk, p_cyr, scientific_parser + if mode == "iso9_ocs" or mode == "iso9_ocs_hack" then environment.loadluafile("trans_tables_iso9") @@ -222,33 +223,29 @@ function translit.scientific (mode, text) cyr = cyr + translit.ru_jer_hack end - p_cyr = Cs(utfchar) / cyr - scientific_parser = Cs((p_cyr + utfchar)^0) + p_cyr = addrules(cyr, p_cyr) - elseif mode == ("ocs") then + scientific_parser = Cs((p_cyr / cyr + utfchar)^0) - for i,_ in pairs(translit.ocs_uk) do - if cyruk == nil then cyruk = P(i) -- is this The Right Way build patterns from a table? - else cyruk = cyruk + P(i) - end - end + elseif mode == ("ocs") then cyr = translit.ocs_low + translit.ocs_upp - p_cyruk = Cs(P(cyruk)) / translit.ocs_uk - p_cyr = Cs(utfchar) / cyr + p_cyruk = addrules(translit.ocs_uk, cyruk) + p_cyr = addrules(cyr, p_cyr) - scientific_parser = Cs((p_cyruk + p_cyr + utfchar)^0) + scientific_parser = Cs((p_cyruk / translit.ocs_uk + + p_cyr / cyr + + utfchar)^0) elseif mode == ("ocs_gla") then environment.loadluafile( "trans_tables_glag") cyr = translit.ocs_gla_low + translit.ocs_gla_upp - p_cyr = Cs(utfchar) / cyr - scientific_parser = Cs((p_cyr + utfchar)^0) - end - text = scientific_parser:match(text) + p_cyr = addrules(cyr, p_cyr) + scientific_parser = Cs((p_cyr / cyr + utfchar)^0) + end - return text + return scientific_parser:match(text) end -- cgit v1.2.3