diff options
-rw-r--r-- | arabluatex.dtx | 100 | ||||
-rw-r--r-- | arabluatex.lua | 15 |
2 files changed, 60 insertions, 55 deletions
diff --git a/arabluatex.dtx b/arabluatex.dtx index 62adc75..27e970e 100644 --- a/arabluatex.dtx +++ b/arabluatex.dtx | |||
@@ -27,7 +27,7 @@ | |||
27 | %<package-info>\NeedsTeXFormat{LaTeX2e}[1999/12/01] | 27 | %<package-info>\NeedsTeXFormat{LaTeX2e}[1999/12/01] |
28 | %<package-info>\ProvidesPackage{arabluatex} | 28 | %<package-info>\ProvidesPackage{arabluatex} |
29 | %<*package-info> | 29 | %<*package-info> |
30 | [2016/03/31 v1.0.1 This is ArabTeX for LuaLaTeX] | 30 | [2016/04/26 v1.1 This is ArabTeX for LuaLaTeX] |
31 | %</package-info> | 31 | %</package-info> |
32 | % | 32 | % |
33 | %<*driver> | 33 | %<*driver> |
@@ -130,12 +130,13 @@ | |||
130 | \usepackage[english]{babel} | 130 | \usepackage[english]{babel} |
131 | \usepackage{dox} | 131 | \usepackage{dox} |
132 | \doxitem{Option}{option}{options} | 132 | \doxitem{Option}{option}{options} |
133 | \def\actualchar{ =} | ||
133 | \usepackage{fontspec,luatextra,realscripts} | 134 | \usepackage{fontspec,luatextra,realscripts} |
134 | \defaultfontfeatures{RawFeature={+liga;+onum;+hlig}} | 135 | \defaultfontfeatures{RawFeature={+liga;+onum;+hlig}} |
135 | \setmainfont{Libertinus Serif} | 136 | \setmainfont{Libertinus Serif} |
136 | \setsansfont{Libertinus Sans} | 137 | \setsansfont{Libertinus Sans} |
137 | \setmonofont[Scale=.9]{Libertinus Mono} | 138 | \setmonofont[Scale=.9]{Libertinus Mono} |
138 | \usepackage{arabluatex}[2016/03/31] | 139 | \usepackage{arabluatex}[2016/04/26] |
139 | \usepackage{varioref} | 140 | \usepackage{varioref} |
140 | \usepackage{hypdoc} | 141 | \usepackage{hypdoc} |
141 | \hypersetup{unicode=true, colorlinks, allcolors=blue, | 142 | \hypersetup{unicode=true, colorlinks, allcolors=blue, |
@@ -176,8 +177,8 @@ | |||
176 | \DeclareIndexFieldFormat{indextitle}{\index{#1=\emph{#1}}} | 177 | \DeclareIndexFieldFormat{indextitle}{\index{#1=\emph{#1}}} |
177 | \addbibresource{arabluatex.bib} | 178 | \addbibresource{arabluatex.bib} |
178 | \EnableCrossrefs | 179 | \EnableCrossrefs |
179 | \CodelineIndex | ||
180 | \RecordChanges | 180 | \RecordChanges |
181 | \CodelineIndex | ||
181 | \begin{document} | 182 | \begin{document} |
182 | \DocInput{arabluatex.dtx} | 183 | \DocInput{arabluatex.dtx} |
183 | \addcontentsline{toc}{section}{Change History} | 184 | \addcontentsline{toc}{section}{Change History} |
@@ -207,8 +208,8 @@ | |||
207 | % Right brace \} Tilde \~} | 208 | % Right brace \} Tilde \~} |
208 | % | 209 | % |
209 | % | 210 | % |
210 | % \changes{1.0}{2016/03/29}{Initial release} | 211 | % \changes{v1.0}{2016/03/29}{Initial release} |
211 | % \changes{1.0.1}{2016/03/31}{Minor update of the documentation} | 212 | % \changes{v1.0.1}{2016/03/31}{Minor update of the documentation} |
212 | % | 213 | % |
213 | % \DoNotIndex{\newcommand,\newenvironment,\renewcommand} | 214 | % \DoNotIndex{\newcommand,\newenvironment,\renewcommand} |
214 | % \DoNotIndex{\~,\AtBeginDocument,\bgroup,\csname} | 215 | % \DoNotIndex{\~,\AtBeginDocument,\bgroup,\csname} |
@@ -216,7 +217,7 @@ | |||
216 | % \DoNotIndex{\else,\endcsname,\endinput,\expandafter,\fi} | 217 | % \DoNotIndex{\else,\endcsname,\endinput,\expandafter,\fi} |
217 | % \DoNotIndex{\ifdef,\ifdefined,\ifx,\MessageBreak,\NeedsTeXFormat} | 218 | % \DoNotIndex{\ifdef,\ifdefined,\ifx,\MessageBreak,\NeedsTeXFormat} |
218 | % \DoNotIndex{\NewDocumentCommand,\newif,\PackageError,\PackageWarning} | 219 | % \DoNotIndex{\NewDocumentCommand,\newif,\PackageError,\PackageWarning} |
219 | % \DoNotIndex{\relax,\RenewDocumentCommand,\string} | 220 | % \DoNotIndex{\relax,\RenewDocumentCommand,\string,\verb} |
220 | % | 221 | % |
221 | % \providecommand*{\url}{\texttt} | 222 | % \providecommand*{\url}{\texttt} |
222 | % \GetFileInfo{arabluatex.dtx} | 223 | % \GetFileInfo{arabluatex.dtx} |
@@ -404,8 +405,7 @@ | |||
404 | % complain if you try to compile your document with another | 405 | % complain if you try to compile your document with another |
405 | % engine. That aside, \package{arabluatex} does not load packages such | 406 | % engine. That aside, \package{arabluatex} does not load packages such |
406 | % as \package{polyglossia} or \package{luabidi}. It can work with | 407 | % as \package{polyglossia} or \package{luabidi}. It can work with |
407 | % \package{polyglossia} though, but does not require it.\footnote{With | 408 | % \package{polyglossia} though, but does not require it. |
408 | % one exception: see \vref{sec:abjad}.} | ||
409 | % | 409 | % |
410 | % \paragraph{Font setup} | 410 | % \paragraph{Font setup} |
411 | % If you wish to use your own Arabic font, you can define it before | 411 | % If you wish to use your own Arabic font, you can define it before |
@@ -1502,42 +1502,37 @@ consonants, though three of them are also used as vowels | |||
1502 | % \arb[trans]{'abjad} numbers are usually distinguished from the | 1502 | % \arb[trans]{'abjad} numbers are usually distinguished from the |
1503 | % surrounding words by a stroke placed over them. | 1503 | % surrounding words by a stroke placed over them. |
1504 | % | 1504 | % |
1505 | % For the time being, \package{arabluatex} inserts those numbers with the | 1505 | % \DescribeMacro{\abjad} \NEWfeature{v.1.1} \arb[trans]{'abjad} |
1506 | % help of \package{polyglossia}. If one wishes to use the | 1506 | % numbers are inserted with the command \cs{abjad}\marg{number} in any |
1507 | % \arb[trans]{abjad} system, he may put in his preamble:--- | 1507 | % of the |voc|, |fullvoc| and |novoc| modes, where \meta{number} may |
1508 | % \iffalse | 1508 | % be any number between 1 and 1999, like so:--- |
1509 | %<*example> | ||
1510 | % \fi | ||
1511 | \begin{arabluaverbatim} | ||
1512 | \usepackage{polyglossia} | ||
1513 | \setdefaultlanguage{english} % please adapt | ||
1514 | \setotherlanguage{arabic} % to enable the 'abjad' numbers | ||
1515 | \end{arabluaverbatim} | ||
1516 | % \iffalse | ||
1517 | %</example> | ||
1518 | % \fi % | ||
1519 | % \DescribeMacro{\abjad} Then one may use the command | ||
1520 | % \cs{abjad}\marg{number} in any of the |voc|, |fullvoc| and |novoc| | ||
1521 | % modes, where \meta{number} may be any number between 1 and 1999, | ||
1522 | % like so:--- | ||
1523 | % \begin{quote} | 1509 | % \begin{quote} |
1524 | % |\abjad{45}| |kitAbu-hu| |fI| |'l-`AdAti| \arb[voc]{\abjad{45} | 1510 | % |\abjad{45}| |kitAbu-hu| |fI| |'l-`AdAti| \arb[voc]{\abjad{45} |
1525 | % kitAbu-hu fI 'l-`AdAti} \arb[trans]{\abjad{45} kitAbu-hu fI | 1511 | % kitAbu-hu fI 'l-`AdAti} \arb[trans]{\abjad{45} kitAbu-hu fI |
1526 | % 'l-`AdAti}. | 1512 | % 'l-`AdAti}. |
1527 | % \end{quote} | 1513 | % \end{quote} |
1514 | % \begin{quoting} | ||
1515 | % \textsc{Rem.}~\emph{a.} As can be seen in the above given example, | ||
1516 | % \package{arabluatex} expresses the \arb[trans]{'abjad} numbers in | ||
1517 | % Roman numerals if it finds the command \cs{abjad} in any of the | ||
1518 | % transliteration modes. | ||
1519 | % | ||
1520 | % \textsc{Rem.}~\emph{b.} \cs{abjad} may also be found outside | ||
1521 | % Arabic environments. In that case, \package{arabluatex} does not | ||
1522 | % print the stroke as a distinctive mark over the number for it is | ||
1523 | % not surrounded by other Arabic words. In case one nonetheless | ||
1524 | % wishes to print the stroke, he can use the \cs{aemph} command that | ||
1525 | % is described below in \vref{sec:emphasis}:--- | ||
1526 | % \begin{quote} | ||
1527 | % |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is| | ||
1528 | % |\abjad{1874}| The \arb[trans]{'abjad} number for 1874 is | ||
1529 | % \abjad{1874}. | ||
1528 | % | 1530 | % |
1529 | % \iffalse | 1531 | % |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is| |
1530 | %<*example> | 1532 | % |\aemph{\abjad{1874}}| The \arb[trans]{'abjad} number for 1874 |
1531 | % \fi | 1533 | % is \aemph{\abjad{1874}}. |
1532 | \begin{arabluacode}[text only] | 1534 | % \end{quote} |
1533 | Apart from this case, \package{arabluatex} makes no use of | 1535 | % \end{quoting} |
1534 | \package{polyglossia}. The support for the \arb[trans]{'abjad} | ||
1535 | numbering system is planned for inclusion in a future version of | ||
1536 | \package{arabluatex}. | ||
1537 | \end{arabluacode} | ||
1538 | % \iffalse | ||
1539 | %</example> | ||
1540 | % \fi | ||
1541 | % | 1536 | % |
1542 | % \subsection{Additional characters} | 1537 | % \subsection{Additional characters} |
1543 | % \label{sec:additional-characters} | 1538 | % \label{sec:additional-characters} |
@@ -1596,7 +1591,7 @@ consonants, though three of them are also used as vowels | |||
1596 | % \begin{quote} | 1591 | % \begin{quote} |
1597 | % |\abjad{45}:| |kitAbu-hu| |\aemph{fI| |'l-`AdAti}| | 1592 | % |\abjad{45}:| |kitAbu-hu| |\aemph{fI| |'l-`AdAti}| |
1598 | % \arb[voc]{\abjad{45}: kitAbu-hu \aemph{fI 'l-`AdAti}} | 1593 | % \arb[voc]{\abjad{45}: kitAbu-hu \aemph{fI 'l-`AdAti}} |
1599 | % \arb[trans]{45: kitAbu-hu fI 'l-\cap{`AdAti}}. | 1594 | % \arb[trans]{\abjad{45}: kitAbu-hu fI 'l-\cap{`AdAti}}. |
1600 | % \end{quote} | 1595 | % \end{quote} |
1601 | % | 1596 | % |
1602 | % \section{Special applications} | 1597 | % \section{Special applications} |
@@ -1741,17 +1736,18 @@ consonants, though three of them are also used as vowels | |||
1741 | % \section{\LaTeX\ Commands in Arabic environments} | 1736 | % \section{\LaTeX\ Commands in Arabic environments} |
1742 | % \label{sec:commands-in-arb} | 1737 | % \label{sec:commands-in-arb} |
1743 | % \paragraph{General principle} \label{ref:cmd-inside-arabic}\LaTeX\ | 1738 | % \paragraph{General principle} \label{ref:cmd-inside-arabic}\LaTeX\ |
1744 | % commands are accepted in | 1739 | % commands are accepted in Arabic environments. The general principle |
1745 | % Arabic environments. The general principle which applies is that | 1740 | % which applies is that single-argument commands |
1746 | % single-argument commands (\cs{command}\marg{arg}) such as | 1741 | % (\cs{command}\marg{arg}) such as \cs{emph}\marg{text}, |
1747 | % \cs{emph}\marg{text}, \cs{textbf}\marg{text} and the like, are | 1742 | % \cs{textbf}\marg{text} and the like, are assumed to have Arabic text |
1748 | % assumed to have Arabic text as their arguments:--- | 1743 | % as their arguments:--- |
1749 | % \begin{quote} | 1744 | % \begin{quote} |
1750 | % |\abjad{45}| |kitAbu-hu| |\emph{fI| |'l-\cap{`AdAti}}| | 1745 | % |\abjad{45}| |kitAbu-hu| |\emph{fI| |'l-\cap{`AdAti}}| |
1751 | % \arb[voc]{\abjad{45} kitAbu-hu \emph{fI l-\cap{`AdAti}}} | 1746 | % \arb[voc]{\abjad{45} kitAbu-hu \emph{fI l-\cap{`AdAti}}} |
1752 | % \arb[trans]{45 kitAbu-hu \emph{fI 'l-\cap{`AdAti}}}.\footnote{This | 1747 | % \arb[trans]{\abjad{45} kitAbu-hu \emph{fI |
1753 | % is odd in Arabic script, but using such features as \cs{emph} or | 1748 | % 'l-\cap{`AdAti}}}.\footnote{This is odd in Arabic script, but |
1754 | % \cs{textbf} is a matter of personal taste.} | 1749 | % using such features as \cs{emph} or \cs{textbf} is a matter of |
1750 | % personal taste.} | ||
1755 | % \end{quote} | 1751 | % \end{quote} |
1756 | % | 1752 | % |
1757 | % The same applies to footnotes:--- | 1753 | % The same applies to footnotes:--- |
@@ -1970,7 +1966,7 @@ wa-ya.sIru ta.hta 'l-jildi | |||
1970 | % \begin{macrocode} | 1966 | % \begin{macrocode} |
1971 | \NeedsTeXFormat{LaTeX2e} | 1967 | \NeedsTeXFormat{LaTeX2e} |
1972 | \ProvidesPackage{arabluatex}% | 1968 | \ProvidesPackage{arabluatex}% |
1973 | [2016/03/31 v1.0.1 ArabTeX-like interface for LuaLaTeX] | 1969 | [2016/04/26 v1.1 ArabTeX-like interface for LuaLaTeX] |
1974 | \RequirePackage{ifluatex} | 1970 | \RequirePackage{ifluatex} |
1975 | % \end{macrocode} | 1971 | % \end{macrocode} |
1976 | % \package{arabluatex} requires \LuaLaTeX\ of course. Issue a warning | 1972 | % \package{arabluatex} requires \LuaLaTeX\ of course. Issue a warning |
@@ -2156,7 +2152,13 @@ wa-ya.sIru ta.hta 'l-jildi | |||
2156 | \else \fi\fi\fi\fi}[\par] | 2152 | \else \fi\fi\fi\fi}[\par] |
2157 | % \end{macrocode} | 2153 | % \end{macrocode} |
2158 | % \end{environment} | 2154 | % \end{environment} |
2159 | % \begin{macro}{\abjad} \cs{abjad} | 2155 | % \begin{macro}{\abjad} \cs{abjad}\marg{number} expresses its argument |
2156 | % in Arabic letters in accordance with the \arb[trans]{'abjad} | ||
2157 | % arrangement of the alphabet. \meta{number} must be between 1 and | ||
2158 | % 1999. It is now coded in Lua so that \package{polyglossia} is no | ||
2159 | % longer needed. See |arabluatex.lua| for more information. | ||
2160 | % \changes{v1.1}{2016/04/26}{New and more flexible \protect\cs{abjad} | ||
2161 | % command.} | ||
2160 | % \begin{macrocode} | 2162 | % \begin{macrocode} |
2161 | \NewDocumentCommand{\abjad}{m}% | 2163 | \NewDocumentCommand{\abjad}{m}% |
2162 | {\luadirect{tex.sprint(abjadify(#1))}} | 2164 | {\luadirect{tex.sprint(abjadify(#1))}} |
diff --git a/arabluatex.lua b/arabluatex.lua index 102974a..0f3984b 100644 --- a/arabluatex.lua +++ b/arabluatex.lua | |||
@@ -388,24 +388,27 @@ local abjad = { | |||
388 | {".g"} | 388 | {".g"} |
389 | } | 389 | } |
390 | 390 | ||
391 | -- this function is adapted from an 'obsolete project' of Khaled | ||
392 | -- Hosny's that dates back to 2010. Thanks to him. | ||
393 | -- See https://github.com/khaledhosny/lualatex-arabic | ||
391 | function abjadify(n) | 394 | function abjadify(n) |
392 | local result = "" | 395 | local abjadnum = "" |
393 | if n >= 1000 then | 396 | if n >= 1000 then |
394 | for i=1,math.floor(n/1000) do | 397 | for i=1,math.floor(n/1000) do |
395 | result = result .. abjad[4][1] | 398 | abjadnum = abjadnum .. abjad[4][1] |
396 | end | 399 | end |
397 | n = math.fmod(n,1000) | 400 | n = math.fmod(n,1000) |
398 | end | 401 | end |
399 | if n >= 100 then | 402 | if n >= 100 then |
400 | result = result .. abjad[3][math.floor(n/100)] | 403 | abjadnum = abjadnum .. abjad[3][math.floor(n/100)] |
401 | n = math.fmod(n, 100) | 404 | n = math.fmod(n, 100) |
402 | end | 405 | end |
403 | if n >= 10 then | 406 | if n >= 10 then |
404 | result = result .. abjad[2][math.floor(n/10)] | 407 | abjadnum = abjadnum .. abjad[2][math.floor(n/10)] |
405 | n = math.fmod(n, 10) | 408 | n = math.fmod(n, 10) |
406 | end | 409 | end |
407 | if n >= 1 then | 410 | if n >= 1 then |
408 | result = result .. abjad[1][math.floor(n/1)] | 411 | abjadnum = abjadnum .. abjad[1][math.floor(n/1)] |
409 | end | 412 | end |
410 | return "\\arb{"..result.."}" | 413 | return "\\arb{"..abjadnum.."}" |
411 | end | 414 | end |