From d6397857b9a28e7a73d6806422dcb03112441711 Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Tue, 26 Apr 2016 13:02:21 +0200 Subject: implementation of abjad numbering in Lua, so that polyglossia no longer be needed (this is much more flexible) --- arabluatex.dtx | 2 ++ arabluatex.lua | 42 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/arabluatex.dtx b/arabluatex.dtx index bd9810c..79d038d 100644 --- a/arabluatex.dtx +++ b/arabluatex.dtx @@ -1967,6 +1967,8 @@ wa-ya.sIru ta.hta 'l-jildi {\NewDocumentCommand{\RL}{m}{\bgroup\textdir TRT#1\rmfamily\egroup}}} % \end{macrocode} % \end{macro} +\NewDocumentCommand{\abjad}{m}% + {\luadirect{tex.sprint(abjadify(#1))}} % \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 f6597e8..102974a 100644 --- a/arabluatex.lua +++ b/arabluatex.lua @@ -72,11 +72,11 @@ local function breakcmd(str) body = string.sub(body, 2, -2) return string.format("}\\%s{%s}\\arb{", tag, body) end) - -- Abjad (Needs polyglossia) + -- Abjad str = string.gsub(str, "\\(abjad.-)(%b{})", function(tag, body) body = string.sub(body, 2, -2) - return string.format("}\\aemph{\\txarb{\\%s{%s}}}\\arb{", tag, body) + return string.format("}\\aemph{\\%s{%s}}\\arb{", tag, body) end) return str end @@ -115,6 +115,14 @@ local function indnum(str) return str end +local function takeoutabjad(str) + str = string.gsub(str, "(\\abjad.?)(%b{})", function(tag, body) + body = string.sub(body, 2, -2) + return string.format("%s", body) + end) + return str +end + local function takeoutcap(str) str = string.gsub(str, "(\\cap.?)(%b{})", function(tag, body) body = string.sub(body, 2, -2) @@ -339,6 +347,7 @@ end function processtrans(str, mode) str = "\\arb{".. str.."}" + str = takeoutabjad(str) str = protectarb(str) str = breakcmd(str) str = holdcmd(str) @@ -371,3 +380,32 @@ function cap(str) end return str end + +local abjad = { +{"a\"'", "b", "j", "d", "h", "w", "z", ".h", ".t"}, +{"y", "k", "l", "m", "n", "s", "`", "f", ".s", }, +{"q", "r", "^s", "t", "_t", "x", "_d", ".d", ".z", }, +{".g"} +} + +function abjadify(n) + local result = "" + if n >= 1000 then + for i=1,math.floor(n/1000) do + result = result .. abjad[4][1] + end + n = math.fmod(n,1000) + end + if n >= 100 then + result = result .. abjad[3][math.floor(n/100)] + n = math.fmod(n, 100) + end + if n >= 10 then + result = result .. abjad[2][math.floor(n/10)] + n = math.fmod(n, 10) + end + if n >= 1 then + result = result .. abjad[1][math.floor(n/1)] + end + return "\\arb{"..result.."}" +end -- cgit v1.2.3