diff options
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua')
-rw-r--r-- | Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua new file mode 100644 index 00000000000..f6597e8abb0 --- /dev/null +++ b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua @@ -0,0 +1,373 @@ +--[[ +This file is part of the `arabluatex' package + +Copyright (C) 2016 Robert Alessi + +Please send error reports and suggestions for improvements to +Robert Alessi <alessi@robertalessi.net> + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +--]] + +require("arabluatex_voc") +require("arabluatex_fullvoc") +require("arabluatex_novoc") +require("arabluatex_trans") + +local function protectarb(str) + str = string.gsub(str, "(\\arb.?)(%[.-%])(%b{})", "\\@arb%2%3") + str = string.gsub(str, "\\par", "\\p@r{}") + str = string.gsub(str, "\\@@par", "\\p@r{}") +return str +end + +local function unprotectarb(str) + str = string.gsub(str, "(\\@arb)(%[.-%])(%b{})", "\\arb%2%3") + str = string.gsub(str, "\\p@r{}", "\\par") +return str +end + +local function breakcmd(str) + -- \edtext + str = string.gsub(str, "\\(edtext.-)(%b{})(%b{})", + function(tag, bodylem, bodyvar) + bodylem = string.sub(bodylem, 2, -2) + bodyvar = 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 (Needs polyglossia) + 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) + 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 takeoutcap(str) + str = string.gsub(str, "(\\cap.?)(%b{})", function(tag, body) + body = string.sub(body, 2, -2) + return string.format("%s", body) + end) + 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 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 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 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 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 + +function processvoc(str) + str = "\\arb{".. str.."}" + str = takeoutcap(str) + str = protectarb(str) + str = breakcmd(str) + str = holdcmd(str) + str = voc(str) + str = unprotectarb(str) +return str +end + +function processfullvoc(str) + str = "\\arb{".. str.."}" + str = takeoutcap(str) + str = protectarb(str) + str = breakcmd(str) + str = holdcmd(str) + str = fullvoc(str) + str = unprotectarb(str) +return str +end + +function processnovoc(str) + str = "\\arb{".. str.."}" + str = takeoutcap(str) + str = protectarb(str) + str = breakcmd(str) + str = holdcmd(str) + str = novoc(str) + str = unprotectarb(str) +return str +end + +function processtrans(str, mode) + str = "\\arb{".. str.."}" + str = protectarb(str) + str = breakcmd(str) + str = holdcmd(str) + if mode == "dmg" then + str = transdmg(str) + 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 str +end |