From bc16279db68fd63aa1830167e0a635f6526cc1ed Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Sat, 2 Jun 2018 16:55:55 +0200 Subject: use LPeg patterns in holdcmd() as well and get rid of (un)protectarb() --- arabluatex.lua | 53 +++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 24 deletions(-) (limited to 'arabluatex.lua') diff --git a/arabluatex.lua b/arabluatex.lua index 8ba42fd..053fb50 100644 --- a/arabluatex.lua +++ b/arabluatex.lua @@ -35,21 +35,21 @@ local function gsub(s, patt, repl) end local function protectarb(str) - str = string.gsub(str, "(\\arb.?)(%[.-%])(%b{})", "\\@arb%2%3") - str = string.gsub(str, "(\\begin.?)(%b{})(%b[])", "\\@@begin{%2%3}") - str = string.gsub(str, "(\\begin.?)(%b{})", "\\@begin%2") - str = string.gsub(str, "(\\end.?)(%b{})", "\\@end%2") - str = string.gsub(str, "\\par", "\\p@r{}") - str = string.gsub(str, "\\@@par", "\\p@r{}") +-- str = string.gsub(str, "(\\arb%s?)(%[.-%])(%b{})", "\\@arb%2%3") +-- str = string.gsub(str, "(\\begin%s?)(%b{})(%b[])", "\\@@begin{%2%3}") +-- str = string.gsub(str, "(\\begin%s?)(%b{})", "\\@begin%2") +-- str = string.gsub(str, "(\\end%s?)(%b{})", "\\@end%2") +-- str = string.gsub(str, "\\par", "\\p@r{}") +-- str = string.gsub(str, "\\@@par", "\\p@r{}") return str end local function unprotectarb(str) - str = string.gsub(str, "(\\@arb)(%[.-%])(%b{})", "\\arb%2%3") - str = string.gsub(str, "(\\@@begin){(%b{})(%b[])}", "\\begin%2%3") - str = string.gsub(str, "(\\@begin)(%b{})", "\\begin%2") - str = string.gsub(str, "(\\@end)(%b{})", "\\end%2") - str = string.gsub(str, "\\p@r{}", "\\par") +-- str = string.gsub(str, "(\\@arb)(%[.-%])(%b{})", "\\arb%2%3") +-- str = string.gsub(str, "(\\@@begin){(%b{})(%b[])}", "\\begin%2%3") +-- str = string.gsub(str, "(\\@begin)(%b{})", "\\begin%2") +-- str = string.gsub(str, "(\\@end)(%b{})", "\\end%2") +-- str = string.gsub(str, "\\p@r{}", "\\par") return str end @@ -57,6 +57,11 @@ end -- arabluatex. 'albrkcmds' is what is set by default. 'brkcmds' is -- what may be set in the preamble as argument of \MkArbBreak{} local albrkcmds = { + "arb", + "begin", + "end", + "par", + "@@par", "RL", "LR", "RLfootnote", @@ -90,7 +95,7 @@ local bcbraces = lpeg.Cs{ "{" * ((1 - lpeg.S"{}") + lpeg.V(1))^0 * "}" } local spce = lpeg.Cs(" ") local bsqbracketsii = lpeg.Cs(bsqbrackets^-2) local bcbracesii = lpeg.Cs(bcbraces^-2) -local cmdargs = lpeg.Cs(spce * bsqbracketsii * bcbracesii) +local cmdargs = lpeg.Cs(spce * bsqbracketsii * bcbracesii * bsqbrackets^-1) local function breakcmd(str) -- process \item[], then \item[] @@ -133,11 +138,11 @@ local function holdcmd(str) body = string.sub(body, 2, -2) body = string.gsub(body, "\\(.-)(%b{})", function(btag, bbody) bbody = string.sub(bbody, 2, -2) - if string.find(btag, "@") then - return holdcmd(string.format("}\\%s{%s}\\arb{", btag, bbody)) - else +-- if string.find(btag, "@") then +-- return holdcmd(string.format("}\\%s{%s}\\arb{", btag, bbody)) +-- else return holdcmd(string.format("}\\%s{\\arb{%s}}\\arb{", btag, bbody)) - end +-- end end) return string.format("\\%s{%s}", tag, body) end) @@ -589,7 +594,7 @@ function processvoc(str, rules, scheme) str = "\\arb{".. str.."}" str = processarbnull(str, scheme) str = takeoutcapetc(str) - str = protectarb(str) +-- str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then @@ -600,7 +605,7 @@ function processvoc(str, rules, scheme) elseif rules == "dflt" or rules == "idgham" then str = voc(str, rules) else end - str = unprotectarb(str) +-- str = unprotectarb(str) return str end @@ -608,7 +613,7 @@ function processfullvoc(str, rules, scheme) str = "\\arb{".. str.."}" str = processarbnull(str, scheme) str = takeoutcapetc(str) - str = protectarb(str) +-- str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then @@ -621,7 +626,7 @@ function processfullvoc(str, rules, scheme) elseif rules == "dflt" or rules == "idgham" then str = fullvoc(str, rules) else end - str = unprotectarb(str) +-- str = unprotectarb(str) return str end @@ -629,7 +634,7 @@ function processnovoc(str, rules, scheme) str = "\\arb{".. str.."}" str = processarbnull(str, scheme) str = takeoutcapetc(str) - str = protectarb(str) +-- str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then @@ -640,7 +645,7 @@ function processnovoc(str, rules, scheme) elseif rules == "dflt" or rules == "idgham" then str = novoc(str) else end - str = unprotectarb(str) +-- str = unprotectarb(str) return str end @@ -649,7 +654,7 @@ function processtrans(str, mode, rules, scheme) str = processdiscretionary(str) str = processarbnull(str, scheme) str = takeoutabjad(str) - str = protectarb(str) +-- str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then @@ -662,7 +667,7 @@ function processtrans(str, mode, rules, scheme) elseif mode == "arabica" then str = transarabica(str) end - str = unprotectarb(str) +-- str = unprotectarb(str) return str end -- cgit v1.2.3