From 07ec135217f9cf9c2cf4117ec5a6d65b8e1a4236 Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Wed, 30 Nov 2016 17:32:18 +0100 Subject: new option \SetArbDflt* for applying the assimilation rules for these are not applied by default anymore --- arabluatex.lua | 108 +++++++++++++++++++++++++++------------------------------ 1 file changed, 51 insertions(+), 57 deletions(-) (limited to 'arabluatex.lua') diff --git a/arabluatex.lua b/arabluatex.lua index 38fe87b..07968c0 100644 --- a/arabluatex.lua +++ b/arabluatex.lua @@ -146,18 +146,29 @@ local function takeoutcapetc(str) return str end -local function voc(str) +local function voc(str, rules) 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) + if rules == "idgham" then + for i = 1,#tanwin do + inside = string.gsub(inside, tanwin[i].a, tanwin[i].b) + end + else + for i = 1,#tanwineasy do + inside = string.gsub(inside, tanwineasy[i].a, tanwineasy[i].b) + end end for i = 1,#trigraphs do inside = string.gsub(inside, trigraphs[i].a, trigraphs[i].b) end + if rules == "idgham" then + for i = 1,#idgham do + inside = string.gsub(inside, idgham[i].a, idgham[i].b) + end + end for i = 1,#digraphs do inside = string.gsub(inside, digraphs[i].a, digraphs[i].b) end @@ -218,20 +229,37 @@ local function voceasy(str) return str end -local function fullvoc(str) +local function fullvoc(str, rules) 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) + if rules == "idgham" then + for i = 1,#tanwinfv do + inside = string.gsub(inside, tanwinfv[i].a, tanwinfv[i].b) + end + else + for i = 1,#tanwinfveasy do + inside = string.gsub(inside, tanwinfveasy[i].a, tanwinfveasy[i].b) + end 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) + if rules == "idgham" then + for i = 1,#idgham do + inside = string.gsub(inside, idgham[i].a, idgham[i].b) + end + end + if rules == "idgham" then + for i = 1,#digraphsfvidgham do + inside = string.gsub(inside, digraphsfvidgham[i].a, digraphsfvidgham[i].b) + end + else + for i = 1,#digraphsfv do + inside = string.gsub(inside, digraphsfv[i].a, digraphsfv[i].b) + end end for i = 1,#singlefv do inside = string.gsub(inside, singlefv[i].a, singlefv[i].b) @@ -254,7 +282,7 @@ local function fullvoc(str) return str end -local function fullvoceasy(str, opt) +local function fullvoceasy(str, rules) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzafveasy do @@ -266,7 +294,7 @@ local function fullvoceasy(str, opt) for i = 1,#trigraphsfveasy do inside = string.gsub(inside, trigraphsfveasy[i].a, trigraphsfveasy[i].b) end - if opt == "nosukun" then + if rules == "nosukun" then for i = 1,#digraphsfveasy do inside = string.gsub(inside, digraphsfveasy[i].a, digraphsfveasy[i].b) end @@ -368,7 +396,7 @@ local function novoceasy(str) return str end -local function transdmg(str) +local function transdmg(str, rules) str = string.gsub(str, "\\arb(%b{})", function(inside) inside = string.sub(inside, 2, -2) for i = 1,#hamzatrdmg do @@ -380,40 +408,10 @@ local function transdmg(str) 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) + if rules == "idgham" then + for i = 1,#idghamtrdmg do + inside = string.gsub(inside, idghamtrdmg[i].a, idghamtrdmg[i].b) + end end for i = 1,#digraphstrdmg do inside = string.gsub(inside, digraphstrdmg[i].a, digraphstrdmg[i].b) @@ -498,8 +496,8 @@ function processvoc(str, rules, scheme) else end if rules == "easy" or rules == "easynosukun" then str = voceasy(str) - elseif rules == "dflt" then - str = voc(str) + elseif rules == "dflt" or rules == "idgham" then + str = voc(str, rules) else end str = unprotectarb(str) return str @@ -518,8 +516,8 @@ function processfullvoc(str, rules, scheme) str = fullvoceasy(str, "sukun") elseif rules == "easynosukun" then str = fullvoceasy(str, "nosukun") - elseif rules == "dflt" then - str = fullvoc(str) + elseif rules == "dflt" or rules == "idgham" then + str = fullvoc(str, rules) else end str = unprotectarb(str) return str @@ -536,7 +534,7 @@ function processnovoc(str, rules, scheme) else end if rules == "easy" or rules == "easynosukun" then str = novoceasy(str) - elseif rules == "dflt" then + elseif rules == "dflt" or rules == "idgham" then str = novoc(str) else end str = unprotectarb(str) @@ -551,16 +549,12 @@ function processtrans(str, mode, rules, scheme) str = holdcmd(str) if scheme == "buckwalter" then str = processbuckw(str) - else end + end if mode == "dmg" then - if rules == "easy" or rules == "easynosukun" then - str = transdmgeasy(str) - elseif rules == "dflt" then - str = transdmg(str) - else end + str = transdmg(str, rules) elseif mode == "loc" then str = transloc(str) - else end + end str = unprotectarb(str) return str end -- cgit v1.2.3