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