From c799c8d68ac88a340328d9f26e480a1811753e46 Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Thu, 23 Aug 2018 13:14:38 +0200 Subject: arabtex2utf: \abjad and \arbmark now work --- arabluatex.lua | 59 +++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 19 deletions(-) (limited to 'arabluatex.lua') diff --git a/arabluatex.lua b/arabluatex.lua index 23ed8a6..8bb9572 100644 --- a/arabluatex.lua +++ b/arabluatex.lua @@ -675,6 +675,27 @@ local function processarbtoutf(str) if export_utf ~= "arabverse" then str = "\\begin{arabexport}"..str else end + str = string.gsub(str, "(\\txtrans%s?)(%b{})", function(tag, body) + body = string.sub(body, 2, -2) + body = string.gsub(body, "(\\abjad%s?)(%b{})", function(btag, bbody) + bbody = string.sub(bbody, 2, -2) + return string.format("%s", bbody) + end) + return string.format("%s{%s}", tag, body) + end) + str = string.gsub(str, "(\\txarb%s?)(%b{})", function(tag, body) + body = string.sub(body, 2, -2) + body = string.gsub(body, "(\\abjad%s?)(%b{})", function(btag, bbody) + bbody = string.sub(bbody, 2, -2) + bbody = abjadify(bbody) + return string.format("\\aemph{\\arb[novoc]{%s}}", bbody) + end) + body = string.gsub(body, "(\\arbmark%s?)(%b{})", function(btag, bbody) + bbody = string.sub(bbody, 2, -2) + return string.format("%s[rl]{%s}", btag, bbody) + end) + return string.format("%s{%s}", tag, body) + end) str = string.gsub(str, "(\\bayt)%s?(%b{})(%b[])(%b{})", function(tag, argi, argii, argiii) argi = string.sub(argi, 2, -2) argii = string.sub(argii, 2, -2) @@ -703,11 +724,6 @@ local function processarbtoutf(str) end) str = string.gsub(str, "(\\begin%s?{arab})", "\\par\\bgroup\\arbpardir\\arb{") str = string.gsub(str, "\\end%s?{arab}", "}\\egroup\\par") - str = string.gsub(str, "(\\abjad)%s?(%b{})", function(tag, body) - body = string.sub(body, 2, -2) - body = abjadify(body) - return string.format("\\aemph{\\arb[novoc]{%s}}", body) - end) -- This does not work, while the following two do. Look into this later. -- str = gsub(str, lpeg.Cs("\\arb") * spcenc * bsqbrackets^-1 * bcbraces, function(tag, opt, body) -- body = string.sub(body, 2, -2) @@ -721,6 +737,10 @@ local function processarbtoutf(str) body = string.sub(body, 2, -2) return string.format("%s\\@al@pr@ob%s\\@al@pr@cb", tag, body) end) + str = string.gsub(str, "(\\arbmark)%s?(%b[])(%b{})", function(tag, opt, body) + body = string.sub(body, 2, -2) + return string.format("%s%s\\@al@pr@ob%s\\@al@pr@cb", tag, opt, body) + end) str = string.gsub(str, "(\\arbmark)%s?(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("%s\\@al@pr@ob%s\\@al@pr@cb", tag, body) @@ -761,9 +781,9 @@ function arbtoutf(str) return string.format("%s{%s}", tag, body) end) str = string.gsub(str, "(\\ArbOutFile)%s?(%b{})", function(tag, body) - body = string.sub(body, 2, -2) - body = string.gsub(body, "(\\arbmark)%s?(%b{})", "}%1%2\\ArbOutFile{") - return string.format("%s{%s}", tag, body) + body = string.sub(body, 2, -2) + body = gsub(body, lpeg.Cs("\\arbmark") * arbargs, "}%1%2\\ArbOutFile{") + return string.format("%s{%s}", tag, body) end) return str end @@ -945,11 +965,19 @@ local function isintable(table, element) return false end -function processarbmarks(str) +function processarbmarks(str, dir) if not isintable(arbmarks, str) then str = "\\LR{}"..atletter.."\\al@wrong@mark{}"..atother else - if tex.textdir == "TLT" then + if dir == "lr" then + for i = 1,#arbmarks do + str = string.gsub(str, arbmarks[i].a, arbmarks[i].c) + end + elseif dir == "rl" then + for i = 1,#arbmarks do + str = string.gsub(str, arbmarks[i].a, arbmarks[i].b) + end + elseif tex.textdir == "TLT" then for i = 1,#arbmarks do str = string.gsub(str, arbmarks[i].a, arbmarks[i].c) end @@ -963,7 +991,7 @@ function processarbmarks(str) tofile = str tooutfile(tofile) elseif export_utf == "arabverse" then - tofile = "\\txarb{"..str.."}" + tofile = str tooutfile(tofile) else return str @@ -1057,14 +1085,7 @@ function abjadify(n) if n >= 1 then abjadnum = abjadnum .. abjad[1][math.floor(n/1)] end - if export_utf == "yes" then - return abjadnum - elseif export_utf == "arabverse" then - return abjadnum - else - return "\\arb[novoc]{"..abjadnum.."}" - end - return "" + return "\\arb[novoc]{"..abjadnum.."}" end function abraces(str) -- cgit v1.2.3