summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/lualatex/arabluatex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-08-27 21:40:31 +0000
committerKarl Berry <karl@freefriends.org>2018-08-27 21:40:31 +0000
commitf1c2e4e8b45c0e7bbdaca6e345c187375d024f6a (patch)
tree860c73f354a94aaca03662a2cddce04ff0063f46 /Master/texmf-dist/tex/lualatex/arabluatex
parentc357ace7563241fac62d6f2a73fc3a1521e628b2 (diff)
arabluatex (27aug18)
git-svn-id: svn://tug.org/texlive/trunk@48499 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/arabluatex')
-rw-r--r--Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua288
-rw-r--r--Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty109
-rw-r--r--Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua12
-rw-r--r--Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua8
4 files changed, 375 insertions, 42 deletions
diff --git a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua
index 823823621c1..4db23a295ed 100644
--- a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua
+++ b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua
@@ -49,10 +49,12 @@ local cmdstar = lpeg.Cs(spce * lpeg.P("*"))
local bsqbracketsii = lpeg.Cs(bsqbrackets^-2)
local bcbracesii = lpeg.Cs(bcbraces^-2)
local cmd = lpeg.Cs(dblbkslash * ascii^1 * cmdstar^-1)
-local cmdargs = lpeg.Cs(spce * bsqbracketsii * bcbracesii * bsqbrackets^-1)
+local cmdargs = lpeg.Cs(spce^-1 * bsqbracketsii * bcbracesii * bsqbrackets^-1)
+local arbargs = lpeg.Cs(spce^-1 * bsqbrackets^-1 * bcbraces)
+local baytargs = lpeg.Cs(spce * bcbraces * bsqbrackets^-1 * bcbraces)
local function protectarb(str)
- str = string.gsub(str, "(\\arb%s?)(%[.-%])(%b{})", "\\@arb%2%3")
+ str = string.gsub(str, "(\\arb%s?)(%[.-%])(%b{})", "\\al@brk{\\arb%2%3}")
str = string.gsub(str, "(\\LR%s?)(%b{})", "\\@LR%2")
str = string.gsub(str, "(\\RL%s?)(%b{})", "\\@RL%2")
return str
@@ -639,6 +641,210 @@ local function processbuckw(str)
return str
end
+-- The following functions produce a copy of the original .tex source
+-- file in which all arabtex strings are replaced with Unicode
+-- equivalents
+local utffilesuffix = "_out"
+local export_utf = "no"
+
+function al_utffilesuffix(str)
+ utffilesuffix = str
+ return true
+end
+
+function al_doexport(str)
+ export_utf = str
+ return true
+end
+
+function al_openstream()
+ local f = io.open(tex.jobname..utffilesuffix.."_tmp.tex", "a+")
+ local preamble = io.open(tex.jobname..".tex", "r")
+ for line in preamble:lines() do
+ f:write(line, "\n")
+ if string.find(line, "^%s-\\begin%s?{document}") then
+ break
+ end
+ end
+ preamble:close()
+ f:close()
+ return true
+end
+
+local function processarbtoutf(str)
+ if export_utf ~= "arabverse" then
+ str = "\\begin{arabexport}"..str
+ else end
+ str = string.gsub(str, "(\\txtrans%s?)(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ body = string.gsub(body, "(\\abjad%s?)(%b{})", function(btag, bbody)
+ bbody = string.sub(bbody, 2, -2)
+ return string.format("%s", bbody)
+ end)
+ return string.format("%s{%s}", tag, body)
+ end)
+
+ str = string.gsub(str, "(\\txarb%s?)(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ body = string.gsub(body, "(\\abjad%s?)(%b{})", function(btag, bbody)
+ bbody = string.sub(bbody, 2, -2)
+ if tonumber(bbody) ~= nil then
+ bbody = abjadify(bbody)
+ return string.format("\\aemph{\\arb[novoc]{%s}}", bbody)
+ else
+ return string.format("%s{%s}", btag, bbody)
+ end
+ end)
+ body = string.gsub(body, "(\\arbmark%s?)(%b{})", function(btag, bbody)
+ bbody = string.sub(bbody, 2, -2)
+ return string.format("%s[rl]{%s}", btag, bbody)
+ end)
+ return string.format("%s{%s}", tag, body)
+ end)
+ str = string.gsub(str, "(\\bayt)%s?(%b{})(%b[])(%b{})", function(tag, argi, argii, argiii)
+ argi = string.sub(argi, 2, -2)
+ argii = string.sub(argii, 2, -2)
+ argiii = string.sub(argiii, 2, -2)
+ return string.format("%s*{\\arb{%s}}[\\arb{%s}]{\\arb{%s}}", tag, argi, argii, argiii)
+ end)
+ str = string.gsub(str, "(\\bayt)%s?(%b{})(%b{})", function(tag, argi, argii)
+ argi = string.sub(argi, 2, -2)
+ argii = string.sub(argii, 2, -2)
+ return string.format("%s*{\\arb{%s}}{\\arb{%s}}", tag, argi, argii)
+ end)
+ str = string.gsub(str, "(\\prname)%s?(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ if string.find(body, "\\uc%s?%b{}") then
+ return string.format("%s*{%s}", tag, body)
+ else
+ return string.format("%s{\\arb[trans]{\\uc{%s}}}", tag, body)
+ end
+ end)
+ str = string.gsub(str, "(\\begin%s?{arab})(%b[])", function(tag, body)
+ if string.find(body, "trans") then
+ return string.format("\\par\\bgroup\\setLR\\arb%s{", body)
+ else
+ return string.format("\\par\\bgroup\\setRL\\arb%s{", body)
+ end
+ end)
+ str = string.gsub(str, "(\\begin%s?{arab})", "\\par\\bgroup\\arbpardir\\arb{")
+ str = string.gsub(str, "\\end%s?{arab}", "}\\egroup\\par")
+ -- This does not work, while the following two do. Look into this later.
+ -- str = gsub(str, lpeg.Cs("\\arb") * spcenc * bsqbrackets^-1 * bcbraces, function(tag, opt, body)
+ -- body = string.sub(body, 2, -2)
+ -- return string.format("%s%s\\@al@pr@ob%s\\@al@pr@cb", tag, opt, body)
+ -- end)
+ str = string.gsub(str, "(\\arb%s?)(%b[])(%b{})", function(tag, opt, body)
+ body = string.sub(body, 2, -2)
+ return string.format("%s%s\\@al@pr@ob%s\\@al@pr@cb", tag, opt, body)
+ end)
+ str = string.gsub(str, "(\\arb)%s?(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ return string.format("%s\\@al@pr@ob%s\\@al@pr@cb", tag, body)
+ end)
+ str = string.gsub(str, "(\\arbmark)%s?(%b[])(%b{})", function(tag, opt, body)
+ body = string.sub(body, 2, -2)
+ return string.format("%s%s\\@al@pr@ob%s\\@al@pr@cb", tag, opt, body)
+ end)
+ str = string.gsub(str, "(\\arbmark)%s?(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ return string.format("%s\\@al@pr@ob%s\\@al@pr@cb", tag, body)
+ end)
+ str = string.gsub(str, "(\\[Uu]c)%s?(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ return string.format("%s\\@al@pr@ob%s\\@al@pr@cb", tag, body)
+ end)
+ str = string.gsub(str, "{", "\\@al@ob")
+ str = string.gsub(str, "} ", "\\@al@cb@sp")
+ str = string.gsub(str, "}", "\\@al@cb")
+ str = string.gsub(str, "\\@al@pr@ob", "{")
+ str = string.gsub(str, "\\@al@pr@cb", "}")
+ str = string.gsub(str, "(%b{})", function(body)
+ body = string.sub(body, 2, -2)
+ body = string.gsub(body, "(%s?)(\\@al@ob)", "%1{")
+ body = string.gsub(body, "(\\@al@cb@sp)", "} ")
+ body = string.gsub(body, "(\\@al@cb)(%s?)", "}%2")
+ return string.format("{%s}", body)
+ end)
+ if export_utf ~= "arabverse" then
+ str = str.."\\end{arabexport}"
+ else end
+ return str
+end
+
+function arbtoutf(str)
+ str = processarbtoutf(str)
+ str = "\\ArbOutFile{"..str.."}"
+ str = string.gsub(str, "(\\ArbOutFile)%s?(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ body = gsub(body, lpeg.Cs("\\arb") * arbargs, "}%1%2\\ArbOutFile{")
+ return string.format("%s{%s}", tag, body)
+ end)
+ str = string.gsub(str, "(\\ArbOutFile)%s?(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ body = string.gsub(body, "(\\[Uu]c)%s?(%b{})", "}%1%2\\ArbOutFile{")
+ return string.format("%s{%s}", tag, body)
+ end)
+ str = string.gsub(str, "(\\ArbOutFile)%s?(%b{})", function(tag, body)
+ body = string.sub(body, 2, -2)
+ body = gsub(body, lpeg.Cs("\\arbmark") * arbargs, "}%1%2\\ArbOutFile{")
+ return string.format("%s{%s}", tag, body)
+ end)
+ return str
+end
+
+function tooutfile(str, nl)
+ local f = io.open(tex.jobname..utffilesuffix.."_tmp.tex", "a+")
+ if nl == "newline" then
+ f:write(str, "\n\n")
+ else
+ f:write(str)
+ end
+ f:close()
+ return str
+end
+
+function al_closestream()
+ local f = io.open(tex.jobname..utffilesuffix.."_tmp.tex", "r")
+ local o = io.open(tex.jobname..utffilesuffix..".tex", "w")
+ local t = f:read("*a")
+ t = string.gsub(t, "\\arabicfont{}", "")
+ t = string.gsub(t, "\\par ", "\n\n")
+ t = string.gsub(t, "(\\@al@ob)", "{")
+ t = string.gsub(t, "(\\@al@cb@sp)", "} ")
+ t = string.gsub(t, "(\\@al@cb)(%s?)", "}")
+ t = gsub(t, lpeg.Cs("\\begin") * spcenc^-1 * bcbraces * cmdargs, "\n%1%2%3\n")
+ t = string.gsub(t, "(\\\\)(%s?)", "%1\n")
+ t = string.gsub(t, "(\\\\)(\n)(\\end%s?)(%b{})", "%1%3%4")
+ t = string.gsub(t, "%s-\n(\\begin%s?)(%b{})", "\n%1%2")
+ t = string.gsub(t, "(\\item)", "\n%1")
+ t = string.gsub(t, "\n\n(\\item)", "\n%1")
+ t = string.gsub(t, "(\\end%s?)(%b{})", "%1%2\n")
+ t = string.gsub(t, "([^\n]%s-)(\\end)%s?(%b{})", "%1\n%2%3")
+ t = string.gsub(t, "\n\n\n", "\n\n")
+ t = string.gsub(t, "(\\txarb%s?%{)(\\txarb%s?)(%b{})(%})", function(tagio, tagii, body, tagic)
+ body = string.sub(body, 2, -2)
+ return string.format("%s%s%s", tagio, body, tagic)
+ end)
+ t = string.gsub(t, "(\\prname%s?%*%{)(\\txtrans%s?)(%b{})(%})", function(tagio, tagii, body, tagic)
+ body = string.sub(body, 2, -2)
+ return string.format("%s%s%s", tagio, body, tagic)
+ end)
+ if string.find(t, "\\begin%s?{document}.-\\arb%s?[%[%{]") or
+ string.find(t, "\\begin%s?{document}.-\\[Uu]c%s?%b{}")
+ then
+ tex.print([[\unexpanded{\PackageWarningNoLine{arabluatex}{There are still 'arabtex' strings to be converted. Please open ]]..tex.jobname..utffilesuffix..".tex"..[[ and compile it one more time}}]])
+ else end
+ t = t.."\n\\end{document}"
+ io.write(t)
+ o:write(t)
+ f:close()
+ o:close()
+ os.remove(tex.jobname..utffilesuffix.."_tmp.tex")
+ return true
+end
+
+-- Process standard arabluatex modes:
function processvoc(str, rules, scheme)
str = takeoutarb(str)
str = processarbnull(str, scheme)
@@ -655,7 +861,16 @@ function processvoc(str, rules, scheme)
str = voc(str, rules)
else end
str = unprotectarb(str)
-return str
+ if export_utf == "yes" then
+ tofile = "\\txarb{"..str.."}"
+ tooutfile(tofile)
+ elseif export_utf == "arabverse" then
+ tofile = "\\txarb{"..str.."}"
+ tooutfile(tofile)
+ else
+ return str
+ end
+ return ""
end
function processfullvoc(str, rules, scheme)
@@ -676,7 +891,16 @@ function processfullvoc(str, rules, scheme)
str = fullvoc(str, rules)
else end
str = unprotectarb(str)
-return str
+ if export_utf == "yes" then
+ tofile = "\\txarb{"..str.."}"
+ tooutfile(tofile)
+ elseif export_utf == "arabverse" then
+ tofile = "\\txarb{"..str.."}"
+ tooutfile(tofile)
+ else
+ return str
+ end
+ return ""
end
function processnovoc(str, rules, scheme)
@@ -695,7 +919,16 @@ function processnovoc(str, rules, scheme)
str = novoc(str)
else end
str = unprotectarb(str)
-return str
+ if export_utf == "yes" then
+ tofile = "\\txarb{"..str.."}"
+ tooutfile(tofile)
+ elseif export_utf == "arabverse" then
+ tofile = "\\txarb{"..str.."}"
+ tooutfile(tofile)
+ else
+ return str
+ end
+ return ""
end
function processtrans(str, mode, rules, scheme)
@@ -717,7 +950,16 @@ function processtrans(str, mode, rules, scheme)
str = transarabica(str)
end
str = unprotectarb(str)
-return str
+ if export_utf == "yes" then
+ tofile = str
+ tooutfile(tofile)
+ elseif export_utf == "arabverse" then
+ tofile = str
+ tooutfile(tofile)
+ else
+ return str
+ end
+ return ""
end
function newarbmark(abbr, rtlmk, ltrmk)
@@ -736,11 +978,19 @@ local function isintable(table, element)
return false
end
-function processarbmarks(str)
+function processarbmarks(str, dir)
if not isintable(arbmarks, str) then
str = "\\LR{<??>}"..atletter.."\\al@wrong@mark{}"..atother
else
- if tex.textdir == "TLT" then
+ if dir == "lr" then
+ for i = 1,#arbmarks do
+ str = string.gsub(str, arbmarks[i].a, arbmarks[i].c)
+ end
+ elseif dir == "rl" then
+ for i = 1,#arbmarks do
+ str = string.gsub(str, arbmarks[i].a, arbmarks[i].b)
+ end
+ elseif tex.textdir == "TLT" then
for i = 1,#arbmarks do
str = string.gsub(str, arbmarks[i].a, arbmarks[i].c)
end
@@ -750,7 +1000,16 @@ function processarbmarks(str)
end
end
end
- return str
+ if export_utf == "yes" then
+ tofile = str
+ tooutfile(tofile)
+ elseif export_utf == "arabverse" then
+ tofile = str
+ tooutfile(tofile)
+ else
+ return str
+ end
+ return ""
end
function uc(str)
@@ -804,7 +1063,16 @@ function uc(str)
for i = 1,#lcuc do
str = string.gsub(str, "(%s[%(%<%[]?)"..lcuc[i].a, "%1"..lcuc[i].b)
end
- return "\\txtrans{"..str.."}"
+ if export_utf == "yes" then
+ tofile = "\\txtrans{"..str.."}"
+ tooutfile(tofile)
+ elseif export_utf == "arabverse" then
+ tofile = "\\txtrans{"..str.."}"
+ tooutfile(tofile)
+ else
+ return "\\txtrans{"..str.."}"
+ end
+ return ""
end
-- this function is adapted from an 'obsolete project' of Khaled
diff --git a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty
index 67485aaf4c3..1e90fdfcddb 100644
--- a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty
+++ b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty
@@ -41,7 +41,7 @@
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{arabluatex}%
-[2018/06/24 v1.12 An ArabTeX-like interface for LuaLaTeX]
+[2018/08/27 v1.13 An ArabTeX-like interface for LuaLaTeX]
\RequirePackage{ifluatex}
\ifluatex\else
\PackageError{arabluatex}{lualatex needed}{%
@@ -55,6 +55,11 @@
\DeclareOptionX{fullvoc}{\def\al@mode{fullvoc}}
\DeclareOptionX{novoc}{\def\al@mode{novoc}}
\DeclareOptionX{trans}{\def\al@mode{trans}}
+\define@boolkey{arabluatex.sty}[@pkg@]{export}[true]{%
+ \AtBeginDocument{\luadirect{al_openstream()}%
+ \MkArbBreak{@al@ob,@al@cb,@al@cb@sp}}
+ \AtEndDocument{\luadirect{al_closestream()}}
+}
\ExecuteOptionsX{voc}
\ProcessOptionsX\relax
\def\al@mode@voc{voc}
@@ -71,11 +76,12 @@
\RequirePackage{xparse}
\RequirePackage{environ}
\RequirePackage{adjustbox}
+\RequirePackage{xstring}
\newbool{al@rlmode}
\luadirect{dofile(kpse.find_file("arabluatex.lua"))}
\AtBeginDocument{\ifdefined\arabicfont\relax\else
-\PackageWarning{arabluatex}{\string\arabicfont\ is not defined.^^JI
- will try to load Amiri}%
+\PackageWarning{arabluatex}{\string\arabicfont\ is not defined.^^J
+ I will try to load Amiri}%
\newfontfamily\arabicfont[Script=Arabic]{Amiri}\fi}%
\AtBeginDocument{\def\setRL{\booltrue{al@rlmode}\pardir TRT\textdir TRT}}
\AtBeginDocument{\def\setLR{\boolfalse{al@rlmode}\pardir TLT\textdir TLT}}
@@ -127,12 +133,13 @@
\NewDocumentCommand{\uc}{m}%
{\luadirect{tex.sprint(uc(\luastringN{#1}))}}
\let\Uc\uc
-\NewDocumentCommand{\prname}{m}{%
- \bgroup\SetTranslitStyle{\relax}\arb[trans]{\uc{#1}}\egroup}
-\NewDocumentCommand{\txarb}{+m}{\bgroup\textdir
- TRT\arabicfont#1\egroup}
-\NewDocumentCommand{\txtrans}{+m}{\bgroup\textdir
- TLT\al@trans@font\al@trans@style#1\egroup}
+\NewDocumentCommand{\prname}{s m}{%
+ \bgroup\SetTranslitStyle{\relax}%
+ \IfBooleanTF{#1}{\txtrans{#2}}{\arb[trans]{\uc{#2}}}\egroup}
+\NewDocumentCommand{\txarb}{+m}{%
+ \bgroup\textdir TRT\arabicfont#1\egroup}
+\NewDocumentCommand{\txtrans}{+m}{%
+ \bgroup\textdir TLT\al@trans@font\al@trans@style#1\egroup}
\NewDocumentEnvironment{txarab}{}{%
\par%
\booltrue{al@rlmode}%
@@ -168,10 +175,11 @@
\luastringO{\al@input@scheme}))}\egroup%
\else%
\fi\fi\fi\fi}
-\NewDocumentCommand{\arbmark}{m}{%
+\NewDocumentCommand{\arbmark}{O{} m}{%
\bgroup%
\SetInputScheme{arabtex}%
- \luadirect{tex.sprint(processarbmarks(\luastringN{#1}))}%
+ \luadirect{tex.sprint(processarbmarks(\luastringN{#2},
+ \luastringN{#1}))}%
\egroup}
\NewDocumentCommand{\newarbmark}{m m m}{%
\luadirect{newarbmark(\luastringN{#1}, \luastringN{#2}, \luastringN{#3})}}
@@ -209,34 +217,61 @@
\define@key[al]{verse}{width}{\setlength{\al@bayt@width}{#1}}
\define@key[al]{verse}{gutter}{\setlength{\al@gutter@width}{#1}}
\define@key[al]{verse}{metre}{\arb{#1}}
+\define@key[al]{verse}{color}[]{\color{#1}}
\define@boolkey[al]{verse}{utf}[true]{}
\define@boolkey[al]{verse}{delim}[true]{}
+\define@boolkey[al]{verse}{export}[true]{}
\define@choicekey[al]{verse}{mode}{fullvoc, voc, novoc,
trans}{\def\al@mode{#1}}
\presetkeys[al]{verse}{metre={}, utf=false,
delim=false}{}
\NewDocumentEnvironment{arabverse}{O{}}%
-{\par\centering\noindent\bgroup\setkeys[al]{verse}[metre]{#1}%
+{\bgroup\setkeys[al]{verse}[width, gutter, color, utf, delim,
+ metre]{#1}%
+ \if@pkg@export\ifal@verse@export%
+ \ArbOutFile{\begin{arabverse}}%
+ \ifx\al@mode\al@mode@trans%
+ \luadirect{tooutfile(\luastringN{[#1]})}%
+ \else%
+ \IfSubStr[1]{#1}{utf}%
+ {\luadirect{tooutfile(\luastringN{[#1]})}}%
+ {\luadirect{tooutfile(\luastringN{[#1, utf]})}}%
+ \fi
+ \else\fi\else\fi\egroup%
+ \par\centering\noindent\bgroup\setkeys[al]{verse}[metre]{#1}%
\ifx\al@mode\al@mode@trans%
- \ifal@verse@utf\setRL\else\setLR\fi%
- \else\setRL\fi}%
-{\hfill\setkeys[al]{verse}[width,gutter,utf,mode]{#1}\egroup}
+ \ifal@verse@utf\setRL\else\setLR\fi%
+ \else\setRL\fi%
+ \arab@v@export{#1}
+ }%
+ {\endarab@v@export
+ \hfill\setkeys[al]{verse}[width, gutter, color, utf, delim, mode,
+ export]{#1}%
+ \egroup\par%
+ \bgroup\setkeys[al]{verse}[width, gutter, color, utf, delim, mode,
+ metre]{#1}%
+ \if@pkg@export\ifal@verse@export%
+ \ArbOutFile{\end{arabverse}}
+ \else\fi\else\fi\egroup}
\NewDocumentCommand{\arb@utf}{m}{%
\ifal@verse@utf\txarb{#1}\else\arb{#1}\fi}
\def\al@hemistich@delim{*}
\NewDocumentCommand{\SetHemistichDelim}{m}{\def\al@hemistich@delim{#1}}
\def\al@verse@stroke{\leavevmode\xleaders\hbox{\arb{--}}\hfill\kern0pt}
-\NewDocumentCommand{\bayt}{m o m}{%
+\NewDocumentCommand{\bayt}{s m o m}{%
+ \IfBooleanTF{#1}{\relax}{\relax}%
+ {^^^^200b}% quick fix to a bug (or a missing feature) in either
+ % luacolor or adjustbox
\ifdefined\savenotes\savenotes\else\fi%
\edef\al@tatweel{--}%
- \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#1}}%
- \IfNoValueTF{#2}{%
+ \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#2}}%
+ \IfNoValueTF{#3}{%
\ifal@verse@delim\makebox[\al@gutter@width][c]{\al@hemistich@delim}%
\else%
\hspace{\al@gutter@width}%
\fi
}{%
- \edef\@tempa{#2}%
+ \edef\@tempa{#3}%
\ifx\@tempa\al@tatweel%
\ifx\al@mode\al@mode@trans%
\hspace{\al@gutter@width}%
@@ -245,11 +280,11 @@
\fi%
\else%
\ifx\al@mode\al@mode@trans%
- \adjustbox{width=\al@gutter@width, height=\Height}{\arb@utf{#2}}%
+ \adjustbox{width=\al@gutter@width, height=\Height}{\arb@utf{#3}}%
\else%
- \makebox[\al@gutter@width][s]{\arb@utf{#2}}%
+ \makebox[\al@gutter@width][s]{\arb@utf{#3}}%
\fi\fi}%
- \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#3}}%
+ \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#4}}%
\ifdefined\spewnotes\spewnotes\else\fi%
}
\AtBeginDocument{%
@@ -280,6 +315,36 @@
{\AtBeginDocument{\deffootnote{2em}{1.6em}{\LR{\thefootnotemark}.\enskip}}}%
{\RequirePackage{scrextend}
\AtBeginDocument{\deffootnote{2em}{1.6em}{\LR{\thefootnotemark}.\enskip}}}}
+\NewDocumentCommand{\SetArbOutSuffix}{m}{
+ \luadirect{al_utffilesuffix(\luastringN{#1})}}
+\NewDocumentCommand{\ArbOutFile}{s O{no} +m}{%
+ \if@pkg@export%
+ \IfBooleanTF{#1}{%
+ #3\luadirect{tooutfile(\luastringN{#3}, "#2")}}{%
+ \luadirect{tooutfile(\luastringN{#3}, "#2")}}%
+ \else\IfBooleanTF{#1}{#3}{}\fi}
+\NewEnviron{arabexport}{%
+ \if@pkg@export%
+ \par
+ \BODY
+ \luadirect{al_doexport("yes")}
+ \luadirect{tex.sprint(arbtoutf(\luastringO{\BODY}))}
+ \luadirect{al_doexport("no")}
+ \else\par\BODY\fi
+ }[\par]
+\NewEnviron{arab@v@export}[1]{%
+ \setkeys[al]{verse}[width, gutter, color, utf, delim, mode,
+ metre]{#1}
+ \if@pkg@export\ifal@verse@export%
+ \par
+ \BODY
+ \luadirect{al_doexport("arabverse")}
+ \luadirect{tex.sprint(arbtoutf(\luastringO{\BODY}))}
+ \luadirect{al_doexport("no")}
+ \else\par\BODY\fi\else\par\BODY\fi
+}[\par]
+\NewDocumentCommand{\arbpardir}{}{%
+ \ifx\al@mode\al@mode@trans\setLR\else\booltrue{al@rlmode}\setRL\fi}
\newcommand{\al@warning}[1]{\PackageWarning{arabluatex}{#1}}
\newcommand{\al@error}[2]{\PackageError{arabluatex}{#1}{#2}}
\newcommand{\al@wrong@nesting}{\al@error{%
diff --git a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua
index 1651418f5ac..775e8207ecf 100644
--- a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua
+++ b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua
@@ -43,7 +43,7 @@ captr = {
{a="b", b="B"},
{a="t", b="T"},
{a="ṯ", b="Ṯ"},
- {a="ǧ", b="Ǧ"},
+ {a="ǧ", b="Ǧ"},
{a="ḥ", b="Ḥ"},
{a="ḫ", b="Ḫ"},
{a="d", b="D"},
@@ -75,7 +75,7 @@ lcuc = {
{a="b", b="B"},
{a="t", b="T"},
{a="ṯ", b="Ṯ"},
- {a="ǧ", b="Ǧ"},
+ {a="ǧ", b="Ǧ"},
{a="j", b="J"},
{a="ḥ", b="Ḥ"},
{a="ḫ", b="Ḫ"},
@@ -427,7 +427,7 @@ digraphstrdmg = {
{a="T(%p*)$", b="h%1"},
{a="T(%p*)(%W)", b="h%1%2"},
{a="_t", b="ṯ"},
- {a="%^g", b="ǧ"},
+ {a="%^g", b="ǧ"},
{a="%.h", b="ḥ"},
{a="_h", b="ḫ"},
{a="_d", b="ḏ"},
@@ -462,7 +462,7 @@ digraphstrdmg = {
singletrdmg = {
{a="b", b="b"},
{a="t", b="t"},
- {a="j", b="ǧ"},
+ {a="j", b="ǧ"},
{a="x", b="ḫ"},
{a="d", b="d"},
{a="r", b="r"},
@@ -949,7 +949,7 @@ digraphstrarabica = {
{a="aT(%p*)$", b="a%1"},
{a="aT(%p*%s)", b="a%1"},
{a="_t", b="ṯ"},
- {a="%^g", b="ǧ"},
+ {a="%^g", b="ǧ"},
{a="%.h", b="ḥ"},
{a="_h", b="ḫ"},
{a="_d", b="ḏ"},
@@ -983,7 +983,7 @@ digraphstrarabica = {
singletrarabica = {
{a="b", b="b"},
{a="t", b="t"},
- {a="j", b="ǧ"},
+ {a="j", b="ǧ"},
{a="x", b="ḫ"},
{a="d", b="d"},
{a="r", b="r"},
diff --git a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua
index 3f4cce960ff..842f42b78ee 100644
--- a/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua
+++ b/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua
@@ -23,10 +23,10 @@ along with this program. If not, see
--]]
arbmarks = {
- {a="bismillah", b="\\arabicfont ^^^^fdfd", c="\\arb[trans]{bi-ismi \\uc{'l-l_ahi} 'l-ra.hm_ani 'l-ra.hImi}"},
- {a="salam", b="\\arabicfont ^^^^fdf5", c="\\arb[trans]{.sall_A\\arbnull{'l-l_ahu} \\uc{'l-l_ahu} `alay-hi wa-sallama}"},
- {a="jalla", b="\\arabicfont ^^^^fdfb", c="\\arb[trans]{^galla ^galAla-hu}"},
- {a="slm", b="\\arabicfont ^^^^fdfa", c="\\arb[trans]{.sall_A\\arbnull{'l-l_ahu} \\uc{'l-l_ahu} `alay-hi wa-sallama}"}
+ {a="bismillah", b="\\arabicfont{}^^^^fdfd", c="\\arb[trans]{bi-ismi \\uc{'l-l_ahi} 'l-ra.hm_ani 'l-ra.hImi}"},
+ {a="salam", b="\\arabicfont{}^^^^fdf5", c="\\arb[trans]{.sall_A\\arbnull{'l-l_ahu} \\uc{'l-l_ahu} `alay-hi wa-sallama}"},
+ {a="jalla", b="\\arabicfont{}^^^^fdfb", c="\\arb[trans]{^galla ^galAla-hu}"},
+ {a="slm", b="\\arabicfont{}^^^^fdfa", c="\\arb[trans]{.sall_A\\arbnull{'l-l_ahu} \\uc{'l-l_ahu} `alay-hi wa-sallama}"}
}
abjad = {