From 794311265c5b020e8c459c33056e1376b169e27f Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Sun, 2 Jul 2017 20:16:35 +0200 Subject: new command \MkArbBreak{} for inserting user-defined single argument commands in Arabic environments --- arabluatex.dtx | 8 ++++++++ arabluatex.lua | 33 +++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/arabluatex.dtx b/arabluatex.dtx index 887acff..236e95f 100644 --- a/arabluatex.dtx +++ b/arabluatex.dtx @@ -3280,6 +3280,14 @@ wa-ya.sIru ta.hta 'l-jild-i {\NewDocumentCommand{\RL}{m}{\bgroup\textdir TRT#1\rmfamily\egroup}}} % \end{macrocode} % \end{macro} +% \begin{macro}{\MkArbBreak} +% \changes{v1.9}{2017/07/02}{New \cs{MkArbBreak} command for inserting +% user-defined macros in Arabic environments} +% \begin{macrocode} +\DeclareDocumentCommand{\MkArbBreak}{m}{% + \luadirect{mkarbbreak(\luastringN{#1})}} +% \end{macrocode} +% \end{macro} % \begin{macro}{\aemph} Arabic emphasis. Needs to be redefined as well. % \begin{macrocode} \AtBeginDocument{\ifdef{\aemph}% diff --git a/arabluatex.lua b/arabluatex.lua index 3a405a2..d35114d 100644 --- a/arabluatex.lua +++ b/arabluatex.lua @@ -27,13 +27,6 @@ require("arabluatex_fullvoc") require("arabluatex_novoc") require("arabluatex_trans") -function isintable(table, value) - for _, v in pairs(table) do - if v == value then return true end - end - return false -end - local function protectarb(str) str = string.gsub(str, "(\\arb.?)(%[.-%])(%b{})", "\\@arb%2%3") str = string.gsub(str, "(\\begin.?)(%b{})(%b[])", "\\@begin%3%2") @@ -53,9 +46,33 @@ local function unprotectarb(str) return str end -breakcmds = {} +brkcmds = {} + +function mkarbbreak(str) + str = str .."," + str = string.gsub(str, "%s+", "") + local fieldstart = 1 + repeat + local nexti = string.find(str, "%,", fieldstart) + table.insert(brkcmds, string.sub(str, fieldstart, nexti-1)) + fieldstart = nexti +1 + until fieldstart > string.len(str) + return brkcmds +end local function breakcmd(str) + -- user commands + if next(brkcmds) == nil then + -- nothing to do + else + for i = 1,#brkcmds do + str = string.gsub(str, "\\"..brkcmds[i]..".?(%b{})", + function(body) + body = string.sub(body, 2, -2) + return string.format("}\\"..brkcmds[i].."{%s}\\arb{", body) + end) + end + end -- process \item[], then \item[] str = string.gsub(str, "\\(item.?)(%b[])", function(tag, body) -- cgit v1.2.3