summaryrefslogtreecommitdiff
path: root/tex/context/third/transliterator/trans_tables_bg.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/third/transliterator/trans_tables_bg.lua')
-rw-r--r--tex/context/third/transliterator/trans_tables_bg.lua31
1 files changed, 19 insertions, 12 deletions
diff --git a/tex/context/third/transliterator/trans_tables_bg.lua b/tex/context/third/transliterator/trans_tables_bg.lua
index c20e0c8..b319666 100644
--- a/tex/context/third/transliterator/trans_tables_bg.lua
+++ b/tex/context/third/transliterator/trans_tables_bg.lua
@@ -2,7 +2,9 @@
-- Bulgarian --
--===========================================================================--
-local translit = thirddata.translit
+local translit = thirddata.translit
+local pcache = translit.parser_cache
+local lpegmatch = lpeg.match
if not translit.done_bg then
---------------------------------------------------------------------------
@@ -84,24 +86,29 @@ if not translit.done_bg then
translit.done_bg = true
end
-local P, Cs, lmatch = lpeg.P, lpeg.Cs, lpeg.match
-local addrules = translit.addrules
-local utfchar = translit.utfchar
+local P, Cs = lpeg.P, lpeg.Cs
+local addrules = translit.addrules
+local utfchar = translit.utfchar
-local memo = { }
-local function bulgarian (mode, text)
+local function bulgarian (mode)
local bulgarian_parser
- if memo[mode] then
- return lmatch(memo[mode], text)
- end
if mode == "de" then
local bg = translit.bg_upp + translit.bg_low
local p_bg = addrules(bg)
bulgarian_parser = Cs((p_bg / bg + utfchar)^0)
+ else
+ return nil
end
- memo[mode] = bulgarian_parser
- return bulgarian_parser and lmatch(bulgarian_parser, text) or ""
+ return bulgarian_parser
end
-translit.methods["bg_de"] = function (text) return bulgarian("de", text) end
+translit.methods["bg_de"] = function (text)
+ local p = pcache["bg_de"]
+ if not p then
+ p = bulgarian("de")
+ pcache["bg_de"] = p
+ end
+ return p and lpegmatch(p, text) or ""
+end
+-- vim:ft=lua:sw=4:ts=4