From ce59f6705d9b2bd6df0d3eeadbaf43b25fa58b4f Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Wed, 19 Oct 2011 00:01:18 +0200 Subject: parser caching (-> *great* speedup); generalized the yer-hack --- .../third/transliterator/trans_tables_bg.lua | 31 +++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'tex/context/third/transliterator/trans_tables_bg.lua') 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 -- cgit v1.2.3