aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arabluatex.lua15
-rw-r--r--arabluatex_trans.lua5
-rw-r--r--arabluatex_voc.lua13
3 files changed, 33 insertions, 0 deletions
diff --git a/arabluatex.lua b/arabluatex.lua
index 80b7aa5..158282d 100644
--- a/arabluatex.lua
+++ b/arabluatex.lua
@@ -147,6 +147,9 @@ local function voc(str)
147 for i = 1,#shortv do 147 for i = 1,#shortv do
148 inside = string.gsub(inside, shortv[i].a, shortv[i].b) 148 inside = string.gsub(inside, shortv[i].a, shortv[i].b)
149 end 149 end
150 for i = 1,#punctuation do
151 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
152 end
150 for i = 1,#null do 153 for i = 1,#null do
151 inside = string.gsub(inside, null[i].a, null[i].b) 154 inside = string.gsub(inside, null[i].a, null[i].b)
152 end 155 end
@@ -180,6 +183,9 @@ local function fullvoc(str)
180 for i = 1,#shortv do 183 for i = 1,#shortv do
181 inside = string.gsub(inside, shortv[i].a, shortv[i].b) 184 inside = string.gsub(inside, shortv[i].a, shortv[i].b)
182 end 185 end
186 for i = 1,#punctuation do
187 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
188 end
183 for i = 1,#null do 189 for i = 1,#null do
184 inside = string.gsub(inside, null[i].a, null[i].b) 190 inside = string.gsub(inside, null[i].a, null[i].b)
185 end 191 end
@@ -213,6 +219,9 @@ local function novoc(str)
213 for i = 1,#shortvnv do 219 for i = 1,#shortvnv do
214 inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b) 220 inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b)
215 end 221 end
222 for i = 1,#punctuation do
223 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
224 end
216 for i = 1,#null do 225 for i = 1,#null do
217 inside = string.gsub(inside, null[i].a, null[i].b) 226 inside = string.gsub(inside, null[i].a, null[i].b)
218 end 227 end
@@ -246,6 +255,9 @@ local function transdmg(str)
246 for i = 1,#shortvtrdmg do 255 for i = 1,#shortvtrdmg do
247 inside = string.gsub(inside, shortvtrdmg[i].a, shortvtrdmg[i].b) 256 inside = string.gsub(inside, shortvtrdmg[i].a, shortvtrdmg[i].b)
248 end 257 end
258 for i = 1,#punctuationtr do
259 inside = string.gsub(inside, punctuationtr[i].a, punctuationtr[i].b)
260 end
249 for i = 1,#nulltr do 261 for i = 1,#nulltr do
250 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) 262 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b)
251 end 263 end
@@ -281,6 +293,9 @@ local function transloc(str)
281 for i = 1,#finaltrloc do 293 for i = 1,#finaltrloc do
282 inside = string.gsub(inside, finaltrloc[i].a, finaltrloc[i].b) 294 inside = string.gsub(inside, finaltrloc[i].a, finaltrloc[i].b)
283 end 295 end
296 for i = 1,#punctuationtr do
297 inside = string.gsub(inside, punctuationtr[i].a, punctuationtr[i].b)
298 end
284 for i = 1,#nulltr do 299 for i = 1,#nulltr do
285 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) 300 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b)
286 end 301 end
diff --git a/arabluatex_trans.lua b/arabluatex_trans.lua
index d253269..fa7c38e 100644
--- a/arabluatex_trans.lua
+++ b/arabluatex_trans.lua
@@ -24,6 +24,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24 24
25-- common 25-- common
26 26
27punctuationtr = {
28 {a="%(%(", b="("},
29 {a="%)%)", b=")"}
30}
31
27nulltr = { 32nulltr = {
28 {a="%|", b=""} 33 {a="%|", b=""}
29} 34}
diff --git a/arabluatex_voc.lua b/arabluatex_voc.lua
index 06d266f..f9f251c 100644
--- a/arabluatex_voc.lua
+++ b/arabluatex_voc.lua
@@ -287,6 +287,19 @@ shortv = {
287 {a="i", b="ِ"} 287 {a="i", b="ِ"}
288} 288}
289 289
290punctuation = {
291 {a="%(%(", b="﴿"},
292 {a="%)%)", b="﴾"},
293 {a="%(", b="+@("},
294 {a="%)", b="-@("},
295 {a="%+%@%(", b=")"},
296 {a="%-%@%(", b="("},
297 {a="%.", b="۔"},
298 {a="%,", b="،"},
299 {a="%?", b="؟"},
300 {a="%;", b="؛"},
301}
302
290null = { 303null = {
291 {a="%|", b=""}, 304 {a="%|", b=""},
292 {a="([^0-9])(%-)([^0-9])", b="%1%3"} 305 {a="([^0-9])(%-)([^0-9])", b="%1%3"}
span> string.sub(bodyvar, 2, -2) return string.format("\\LR{\\%s{%s}{%s}}", tag, bodylem, bodyvar) end) -- \RL str = string.gsub(str, "\\(RL.-)(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("}\\%s{%s}\\arb{", tag, body) end) -- \LR str = string.gsub(str, "\\(LR.-)(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("}\\%s{%s}\\arb{", tag, body) end) -- Footnote str = string.gsub(str, "\\(Footnote.-)(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("}\\%s{%s}\\arb{", tag, body) end) -- Marginpar str = string.gsub(str, "\\(Marginpar.-)(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("}\\%s{%s}\\arb{", tag, body) end) -- Abjad str = string.gsub(str, "\\(abjad.-)(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("}\\aemph{\\%s{%s}}\\arb{", tag, body) end) return str end local function holdcmd(str) str = string.gsub(str, "\\(arb)(%b{})", function(tag, body) 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 return holdcmd(string.format("}\\%s{\\arb{%s}}\\arb{", btag, bbody)) end end) return string.format("\\%s{%s}", tag, body) end) str = string.gsub(str, "\\arb{}", "") return str end local function arbnum(str) str = string.gsub(str, "([0-9%,%-%/]+)", function(num) return string.reverse(num) end) return str end local function indnum(str) str = string.gsub(str, "([0-9%,%-%/]+)", function(num) return string.reverse(num) end) for i = 1,#numbers do str = string.gsub(str, numbers[i].a, numbers[i].b) end 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 takeoutcapetc(str) str = string.gsub(str, "(\\cap.?)(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("%s", body) end) str = string.gsub(str, "\\linebreak", "") return str end local function voc(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamza do inside = string.gsub(inside, hamza[i].a, hamza[i].b) end for i = 1,#tanwin do inside = string.gsub(inside, tanwin[i].a, tanwin[i].b) end for i = 1,#trigraphs do inside = string.gsub(inside, trigraphs[i].a, trigraphs[i].b) end for i = 1,#digraphs do inside = string.gsub(inside, digraphs[i].a, digraphs[i].b) end for i = 1,#single do inside = string.gsub(inside, single[i].a, single[i].b) end for i = 1,#longv do inside = string.gsub(inside, longv[i].a, longv[i].b) end for i = 1,#shortv do inside = string.gsub(inside, shortv[i].a, shortv[i].b) end for i = 1,#punctuation do inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) end for i = 1,#null do inside = string.gsub(inside, null[i].a, null[i].b) end inside = indnum(inside) return string.format("\\txarb{%s}", inside) end) return str end local function voceasy(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzaeasy do inside = string.gsub(inside, hamzaeasy[i].a, hamzaeasy[i].b) end for i = 1,#tanwineasy do inside = string.gsub(inside, tanwineasy[i].a, tanwineasy[i].b) end for i = 1,#trigraphseasy do inside = string.gsub(inside, trigraphseasy[i].a, trigraphseasy[i].b) end for i = 1,#digraphs do inside = string.gsub(inside, digraphs[i].a, digraphs[i].b) end for i = 1,#single do inside = string.gsub(inside, single[i].a, single[i].b) end for i = 1,#longv do inside = string.gsub(inside, longv[i].a, longv[i].b) end for i = 1,#shortv do inside = string.gsub(inside, shortv[i].a, shortv[i].b) end for i = 1,#punctuation do inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) end for i = 1,#null do inside = string.gsub(inside, null[i].a, null[i].b) end inside = indnum(inside) return string.format("\\txarb{%s}", inside) end) return str end local function fullvoc(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzafv do inside = string.gsub(inside, hamzafv[i].a, hamzafv[i].b) end for i = 1,#tanwinfv do inside = string.gsub(inside, tanwinfv[i].a, tanwinfv[i].b) end for i = 1,#trigraphsfv do inside = string.gsub(inside, trigraphsfv[i].a, trigraphsfv[i].b) end for i = 1,#digraphsfv do inside = string.gsub(inside, digraphsfv[i].a, digraphsfv[i].b) end for i = 1,#singlefv do inside = string.gsub(inside, singlefv[i].a, singlefv[i].b) end for i = 1,#longv do inside = string.gsub(inside, longv[i].a, longv[i].b) end for i = 1,#shortv do inside = string.gsub(inside, shortv[i].a, shortv[i].b) end for i = 1,#punctuation do inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) end for i = 1,#null do inside = string.gsub(inside, null[i].a, null[i].b) end inside = indnum(inside) return string.format("\\txarb{%s}", inside) end) return str end local function fullvoceasy(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzafveasy do inside = string.gsub(inside, hamzafveasy[i].a, hamzafveasy[i].b) end for i = 1,#tanwinfveasy do inside = string.gsub(inside, tanwinfveasy[i].a, tanwinfveasy[i].b) end for i = 1,#trigraphsfveasy do inside = string.gsub(inside, trigraphsfveasy[i].a, trigraphsfveasy[i].b) end for i = 1,#digraphsfveasy do inside = string.gsub(inside, digraphsfveasy[i].a, digraphsfveasy[i].b) end for i = 1,#singlefveasy do inside = string.gsub(inside, singlefveasy[i].a, singlefveasy[i].b) end for i = 1,#longv do inside = string.gsub(inside, longv[i].a, longv[i].b) end for i = 1,#shortv do inside = string.gsub(inside, shortv[i].a, shortv[i].b) end for i = 1,#punctuation do inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) end for i = 1,#null do inside = string.gsub(inside, null[i].a, null[i].b) end inside = indnum(inside) return string.format("\\txarb{%s}", inside) end) return str end local function novoc(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamza do inside = string.gsub(inside, hamza[i].a, hamza[i].b) end for i = 1,#tanwinnv do inside = string.gsub(inside, tanwinnv[i].a, tanwinnv[i].b) end for i = 1,#trigraphsnv do inside = string.gsub(inside, trigraphsnv[i].a, trigraphsnv[i].b) end for i = 1,#digraphs do inside = string.gsub(inside, digraphs[i].a, digraphs[i].b) end for i = 1,#single do inside = string.gsub(inside, single[i].a, single[i].b) end for i = 1,#longvnv do inside = string.gsub(inside, longvnv[i].a, longvnv[i].b) end for i = 1,#shortvnv do inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b) end for i = 1,#punctuation do inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) end for i = 1,#null do inside = string.gsub(inside, null[i].a, null[i].b) end inside = indnum(inside) return string.format("\\txarb{%s}", inside) end) return str end local function novoceasy(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzaeasy do inside = string.gsub(inside, hamzaeasy[i].a, hamzaeasy[i].b) end for i = 1,#tanwinnv do inside = string.gsub(inside, tanwinnv[i].a, tanwinnv[i].b) end for i = 1,#trigraphsnv do inside = string.gsub(inside, trigraphsnv[i].a, trigraphsnv[i].b) end for i = 1,#digraphs do inside = string.gsub(inside, digraphs[i].a, digraphs[i].b) end for i = 1,#single do inside = string.gsub(inside, single[i].a, single[i].b) end for i = 1,#longvnv do inside = string.gsub(inside, longvnv[i].a, longvnv[i].b) end for i = 1,#shortvnv do inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b) end for i = 1,#punctuation do inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) end for i = 1,#null do inside = string.gsub(inside, null[i].a, null[i].b) end inside = indnum(inside) return string.format("\\txarb{%s}", inside) end) return str end local function transdmg(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzatrdmg do inside = string.gsub(inside, hamzatrdmg[i].a, hamzatrdmg[i].b) end for i = 1,#tanwintrdmg do inside = string.gsub(inside, tanwintrdmg[i].a, tanwintrdmg[i].b) end for i = 1,#trigraphstrdmg do inside = string.gsub(inside, trigraphstrdmg[i].a, trigraphstrdmg[i].b) end for i = 1,#digraphstrdmg do inside = string.gsub(inside, digraphstrdmg[i].a, digraphstrdmg[i].b) end for i = 1,#singletrdmg do inside = string.gsub(inside, singletrdmg[i].a, singletrdmg[i].b) end for i = 1,#longvtrdmg do inside = string.gsub(inside, longvtrdmg[i].a, longvtrdmg[i].b) end for i = 1,#shortvtrdmg do inside = string.gsub(inside, shortvtrdmg[i].a, shortvtrdmg[i].b) end for i = 1,#punctuationtr do inside = string.gsub(inside, punctuationtr[i].a, punctuationtr[i].b) end for i = 1,#nulltr do inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) end return string.format("\\txtrans{%s}", inside) end) return str end local function transdmgeasy(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzatrdmg do inside = string.gsub(inside, hamzatrdmg[i].a, hamzatrdmg[i].b) end for i = 1,#tanwintrdmg do inside = string.gsub(inside, tanwintrdmg[i].a, tanwintrdmg[i].b) end for i = 1,#trigraphstrdmgeasy do inside = string.gsub(inside, trigraphstrdmgeasy[i].a, trigraphstrdmgeasy[i].b) end for i = 1,#digraphstrdmg do inside = string.gsub(inside, digraphstrdmg[i].a, digraphstrdmg[i].b) end for i = 1,#singletrdmg do inside = string.gsub(inside, singletrdmg[i].a, singletrdmg[i].b) end for i = 1,#longvtrdmg do inside = string.gsub(inside, longvtrdmg[i].a, longvtrdmg[i].b) end for i = 1,#shortvtrdmg do inside = string.gsub(inside, shortvtrdmg[i].a, shortvtrdmg[i].b) end for i = 1,#punctuationtr do inside = string.gsub(inside, punctuationtr[i].a, punctuationtr[i].b) end for i = 1,#nulltr do inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) end return string.format("\\txtrans{%s}", inside) end) return str end local function transloc(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzatrloc do inside = string.gsub(inside, hamzatrloc[i].a, hamzatrloc[i].b) end for i = 1,#tanwintrloc do inside = string.gsub(inside, tanwintrloc[i].a, tanwintrloc[i].b) end for i = 1,#trigraphstrloc do inside = string.gsub(inside, trigraphstrloc[i].a, trigraphstrloc[i].b) end for i = 1,#digraphstrloc do inside = string.gsub(inside, digraphstrloc[i].a, digraphstrloc[i].b) end for i = 1,#singletrloc do inside = string.gsub(inside, singletrloc[i].a, singletrloc[i].b) end for i = 1,#longvtrloc do inside = string.gsub(inside, longvtrloc[i].a, longvtrloc[i].b) end for i = 1,#shortvtrloc do inside = string.gsub(inside, shortvtrloc[i].a, shortvtrloc[i].b) end for i = 1,#finaltrloc do inside = string.gsub(inside, finaltrloc[i].a, finaltrloc[i].b) end for i = 1,#punctuationtr do inside = string.gsub(inside, punctuationtr[i].a, punctuationtr[i].b) end for i = 1,#nulltr do inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) end return string.format("\\txtrans{%s}", inside) end) return str end local function processbuckw(str) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#buckwalter do inside = string.gsub(inside, buckwalter[i].a, buckwalter[i].b) end return string.format("\\arb{%s}", inside) end) return str end function processvoc(str, rules, scheme) str = "\\arb{".. str.."}" str = takeoutcapetc(str) str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then str = processbuckw(str) else end if rules == "easy" then str = voceasy(str) elseif rules == "dflt" then str = voc(str) else end str = unprotectarb(str) return str end function processfullvoc(str, rules, scheme) str = "\\arb{".. str.."}" str = takeoutcapetc(str) str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then str = processbuckw(str) else end if rules == "easy" then str = fullvoceasy(str) elseif rules == "dflt" then str = fullvoc(str) else end str = unprotectarb(str) return str end function processnovoc(str, rules, scheme) str = "\\arb{".. str.."}" str = takeoutcapetc(str) str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then str = processbuckw(str) else end if rules == "easy" then str = novoceasy(str) elseif rules == "dflt" then str = novoc(str) else end str = unprotectarb(str) return str end function processtrans(str, mode, rules, scheme) str = "\\arb{".. str.."}" str = takeoutabjad(str) str = protectarb(str) str = breakcmd(str) str = holdcmd(str) if scheme == "buckwalter" then str = processbuckw(str) else end if mode == "dmg" then if rules == "easy" then str = transdmgeasy(str) elseif rules == "dflt" then str = transdmg(str) else end elseif mode == "loc" then str = transloc(str) else end str = unprotectarb(str) return str end function cap(str) str = string.gsub(str, "(\\txtrans.?)(%b{})", function(tag, body) body = string.sub(body, 2, -2) return string.format("%s", body) end) if string.find(str, "%-['`ʾʿ]") then str = string.gsub(str, "(%-['`])", "%1\\MakeUppercase ") str = string.gsub(str, "(%-ʿ)", "%1\\MakeUppercase ") str = string.gsub(str, "(%-ʾ)", "%1\\MakeUppercase ") elseif string.find(str, "%-[^'`ʾʿ]") then str = string.gsub(str, "(%-)", "%1\\MakeUppercase ") elseif string.find(str, "^['`ʾʿ]") then str = string.gsub(str, "^(['`])", "%1\\MakeUppercase ") str = string.gsub(str, "^(ʿ)", "%1\\MakeUppercase ") str = string.gsub(str, "^(ʾ)", "%1\\MakeUppercase ") else str = "\\MakeUppercase "..str end return "\\txtrans{"..str.."}" end -- this function is adapted from an 'obsolete project' of Khaled -- Hosny's that dates back to 2010. Thanks to him. -- See https://github.com/khaledhosny/lualatex-arabic function abjadify(n) local abjadnum = "" if n >= 1000 then for i=1,math.floor(n/1000) do abjadnum = abjadnum .. abjad[4][1] end n = math.fmod(n,1000) end if n >= 100 then abjadnum = abjadnum .. abjad[3][math.floor(n/100)] n = math.fmod(n, 100) end if n >= 10 then abjadnum = abjadnum .. abjad[2][math.floor(n/10)] n = math.fmod(n, 10) end if n >= 1 then abjadnum = abjadnum .. abjad[1][math.floor(n/1)] end return "\\arb[novoc]{"..abjadnum.."}" end