aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS.md8
-rw-r--r--LICENSE17
-rw-r--r--README.md130
-rw-r--r--README.tex81
-rw-r--r--about.html128
-rw-r--r--arabluatex.dtx1389
-rw-r--r--arabluatex.el145
-rw-r--r--arabluatex.ins66
-rw-r--r--arabluatex.lua240
-rw-r--r--arabluatex_fullvoc.lua167
-rw-r--r--arabluatex_novoc.lua45
-rw-r--r--arabluatex_trans.lua203
-rw-r--r--arabluatex_voc.lua84
-rw-r--r--makefile70
-rw-r--r--samples/al-Jahiz.tex5
-rw-r--r--samples/exporting.tex2
16 files changed, 1768 insertions, 1012 deletions
diff --git a/AUTHORS.md b/AUTHORS.md
new file mode 100644
index 0000000..2d8eeae
--- /dev/null
+++ b/AUTHORS.md
@@ -0,0 +1,8 @@
1Author of the `arabluatex` package
2==================================
3
4Robert Alessi
5: Personal email: <alessi@robertalessi.net>
6: Institutional email: <robert.alessi@cnrs.fr>
7: Affiliation: [UMR 8167 Orient & Méditerranée (Paris, France)](https://www.orient-mediterranee.com)
8: More information: <https://ctan.org/pkg/arabluatex> or <https://sr.ht/~ralessi/arabluatex>
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..dc34776
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,17 @@
1arabluatex -- ArabTeX for LuaLaTeX
2----------------------------------
3
4Copyright (c) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
5Robert Alessi <alessi@robertalessi.net>
6
7Permission to use, copy, modify, and distribute this software for any
8purpose with or without fee is hereby granted, provided that the above
9copyright notice and this permission notice appear in all copies.
10
11THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/README.md b/README.md
index c9dec25..eba493f 100644
--- a/README.md
+++ b/README.md
@@ -1,55 +1,47 @@
1--- 1# Overview
2author: 2
3- Robert Alessi 3This package provides for [LuaLaTeX](https://luatex.org) an
4title: 'The arabluatex package – README file' 4[ArabTeX](https://ctan.org/pkg/arabtex)-like interface to generate
5--- 5Arabic writing from an [ascii]{.smallcaps} transliteration. It is
6 6particularly well-suited for complex documents such as technical
7Overview 7documents or critical editions where a lot of left-to-right commands
8======== 8intertwine with Arabic writing. arabluatex is able to process any
9 9ArabTeX input notation. Its output can be set in the same modes of
10This package provides for [LuaLaTeX](http://luatex.org) an 10vocalization as ArabTeX, or in different roman transliterations. It
11[ArabTeX](http://ctan.org/pkg/arabtex)-like interface to generate Arabic 11further allows many typographical refinements. It can also operate with
12writing from an <span style="font-variant:small-caps;">ascii</span> 12the [ekdosis](https://ctan.org/pkg/ekdosis) package to produce from
13transliteration. It is particularly well-suited for complex documents 13`.tex` source files, in addition to printed books, `TEI xml` compliant
14such as technical documents or critical editions where a lot of 14critical editions and/or lexicons that can be searched, analyzed and
15left-to-right commands intertwine with Arabic writing. arabluatex is 15correlated in various ways.
16able to process any ArabTeX input notation. Its output can be set in the 16
17same modes of vocalization as ArabTeX, or in different roman 17# License and disclamer
18transliterations. It further allows many typographical refinements. It 18
19will eventually interact with some other packages yet to come to produce 19ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
20from `.tex` source files, in addition to printed books, `TEI xml` 20
21compliant critical editions and/or lexicons that can be searched, 21Copyright ⓒ 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Robert Alessi
22analyzed and correlated in various ways. 22\<`alessi@robertalessi.net`\>
23 23
24License and disclamer 24Permission to use, copy, modify, and distribute this software for any
25===================== 25purpose with or without fee is hereby granted, provided that the above
26 26copyright notice and this permission notice appear in all copies.
27ArabLuaTeX – Processing ArabTeX notation under LuaLaTeX 27
28 28THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
29Copyright ⓒ 2016–2019 Robert Alessi 29WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
30OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
31FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
32DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
33IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
34OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30 35
31Please send error reports and suggestions for improvements to Robert 36Please send error reports and suggestions for improvements to Robert
32Alessi: 37Alessi:
33 38
34- email: <alessi@robertalessi.net> 39- email: <alessi@robertalessi.net>
35 40
36- website: <http://www.robertalessi.net/arabluatex> 41- website: <https://sr.ht/~ralessi/arabluatex>
37 42
38- comments, feature requests, bug reports: 43- comments, feature requests, bug reports:
39 <https://gitlab.com/ralessi/arabluatex/issues> 44 <https://todo.sr.ht/~ralessi/arabluatex>
40
41This program is free software: you can redistribute it and/or modify it
42under the terms of the GNU General Public License as published by the
43Free Software Foundation, either version 3 of the License, or (at your
44option) any later version.
45
46This program is distributed in the hope that it will be useful, but
47WITHOUT ANY WARRANTY; without even the implied warranty of
48MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
49Public License for more details.
50
51You should have received a copy of the GNU General Public License along
52with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
53 45
54This release of arabluatex consists of the following source files: 46This release of arabluatex consists of the following source files:
55 47
@@ -67,19 +59,7 @@ This release of arabluatex consists of the following source files:
67 59
68- `arabluatex_trans.lua` 60- `arabluatex_trans.lua`
69 61
70License applicable to the documentation 62# Installation
71---------------------------------------
72
73Copyright ⓒ 2016–2019 Robert Alessi
74
75The documentation file `arabluatex.pdf` that is generated from the
76`arabluatex.dtx` source is licensed under the Creative Commons
77Attribution-ShareAlike 4.0 International License. To view a copy of this
78license, visit <http://creativecommons.org/licenses/by-sa/4.0/> or send
79a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
80
81Installation
82============
83 63
841. Run `'lualatex arabluatex.ins'` to produce the `arabluatex.sty` 641. Run `'lualatex arabluatex.ins'` to produce the `arabluatex.sty`
85 file; 65 file;
@@ -104,43 +84,41 @@ Installation
104 84
1053. Additionally, those who use emacs with AUCTeX may copy 853. Additionally, those who use emacs with AUCTeX may copy
106 `arabluatex.el` to their `~/.emacs.d/auctex/auto` local directory. 86 `arabluatex.el` to their `~/.emacs.d/auctex/auto` local directory.
107 This will enable the appropriate hooks for ArabLuaTeX in AUCTeX. 87 This will enable the appropriate hooks for ArabLuaTeX in AUCTeX.
108 88
109Development, Git Repository 89# Development, Git Repository
110===========================
111 90
112Browse the code 91## Browse the code
113---------------
114 92
115You can browse ArabLuaTeX repository on the web: 93You can browse ArabLuaTeX repository on the web:
116<http://git.robertalessi.net/arabluatex> 94<http://git.robertalessi.net/arabluatex>\
95or\
96<https://sr.ht/~ralessi/arabluatex>
117 97
118From this page, you can download all the releases of ArabLuaTeX. For 98From this page, you can download all the releases of ArabLuaTeX. For
119instructions on how to install ArabLuaTeX, please see above. 99instructions on how to install ArabLuaTeX, please see above.
120 100
121Comments, Feature requests, Bug Reports 101## Comments, Feature requests, Bug Reports
122---------------------------------------
123 102
124<https://gitlab.com/ralessi/arabluatex/issues> 103<https://todo.sr.ht/~ralessi/arabluatex>
125 104
126Download the repository 105## Download the repository
127-----------------------
128 106
129ArabLuaTeX development is facilitated by git, a distributed version 107ArabLuaTeX development is facilitated by git, a distributed version
130control system. You will need to install git (most GNU/Linux 108control system. You will need to install git (most Unix/Linux
131distributions package it in their repositories). 109distributions package it in their repositories).
132 110
133Use this command to download the repository 111Use this command to download the repository
134 112
135 git clone http://git.robertalessi.net/arabluatex 113 git clone https://git.sr.ht/~ralessi/arabluatex
136 114
137A new directory named arabluatex will have been created, containing 115A new directory named arabluatex will have been created, containing
138ArabLuaTeX. 116ArabLuaTeX.
139 117
140Git hosting 118## Git hosting
141-----------
142 119
143Make an account on <https://gitlab.com> and navigate (while logged in) 120Make an account on <https://sr.ht> and navigate (while logged in) to
144to <https://gitlab.com/ralessi/arabluatex>. Click *Fork* and you will 121<https://git.sr.ht/~ralessi/arabluatex>. Click *Clone repo to your
145have in your account your own repository of `arabluatex` where you will 122account* and you will have in your account your own repository of
146be able to make whatever changes you like to. 123`arabluatex` where you will be able to make whatever changes you like
124to.
diff --git a/README.tex b/README.tex
index 236dc06..dd413d3 100644
--- a/README.tex
+++ b/README.tex
@@ -1,6 +1,6 @@
1% The arabluatex package -- README file 1% The arabluatex package -- README file
2% Robert Alessi 2% Robert Alessi
3% March 18, 2017 3% January 29, 2023
4\documentclass{article} 4\documentclass{article}
5 5
6\usepackage{fontspec} 6\usepackage{fontspec}
@@ -16,48 +16,47 @@
16 16
17\section*{Overview} 17\section*{Overview}
18\label{sec:overview} 18\label{sec:overview}
19This package provides for \href{http://luatex.org}{Lua\LaTeX} an 19This package provides for \href{https://luatex.org}{Lua\LaTeX}
20\href{http://ctan.org/pkg/arabtex}{Arab\TeX}-like interface to 20an \href{https://ctan.org/pkg/arabtex}{Arab\TeX}-like interface to
21generate Arabic writing from an \textsc{ascii} transliteration. It is 21generate Arabic writing from an \textsc{ascii} transliteration. It is
22particularly well-suited for complex documents such as technical 22particularly well-suited for complex documents such as technical
23documents or critical editions where a lot of left-to-right commands 23documents or critical editions where a lot of left-to-right commands
24intertwine with Arabic writing. arabluatex is able to process any 24intertwine with Arabic writing. arabluatex is able to process any
25Arab\TeX\ input notation. Its output can be set in the same modes of 25Arab\TeX\ input notation. Its output can be set in the same modes of
26vocalization as Arab\TeX, or in different roman transliterations. It 26vocalization as Arab\TeX, or in different roman transliterations. It
27further allows many typographical refinements. It will eventually 27further allows many typographical refinements. It can also operate
28interact with some other packages yet to come to produce from 28with the \href{https://ctan.org/pkg/ekdosis}{ekdosis} package to
29\verb|.tex| source files, in addition to printed books, \texttt{TEI 29produce from \verb|.tex| source files, in addition to printed books,
30 xml} compliant critical editions and/or lexicons that can be 30\texttt{TEI xml} compliant critical editions and/or lexicons that can
31searched, analyzed and correlated in various ways. 31be searched, analyzed and correlated in various ways.
32 32
33\section*{License and disclamer} 33\section*{License and disclamer}
34ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 34ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
35 35
36Copyright ⓒ 2016--2019 Robert Alessi 36Copyright ⓒ 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
37Robert Alessi <\verb|alessi@robertalessi.net|>
38
39Permission to use, copy, modify, and distribute this software for any
40purpose with or without fee is hereby granted, provided that the above
41copyright notice and this permission notice appear in all copies.
42
43THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
44WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
45MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
46ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
47WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
48ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
49OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
37 50
38Please send error reports and suggestions for improvements to Robert 51Please send error reports and suggestions for improvements to Robert
39Alessi: 52Alessi:
40\begin{itemize} 53\begin{itemize}
41\item email: \href{mailto:alessi@robertalessi.net}{alessi@robertalessi.net} 54\item email: \href{mailto:alessi@robertalessi.net}{alessi@robertalessi.net}
42\item website: \url{http://www.robertalessi.net/arabluatex} 55\item website: \url{https://sr.ht/~ralessi/arabluatex}
43\item comments, feature requests, bug reports: 56\item comments, feature requests, bug reports:
44 \url{https://gitlab.com/ralessi/arabluatex/issues} 57 \url{https://todo.sr.ht/~ralessi/arabluatex}
45\end{itemize} 58\end{itemize}
46 59
47This program is free software: you can redistribute it and/or modify
48it under the terms of the GNU General Public License as published by
49the Free Software Foundation, either version 3 of the License, or
50(at your option) any later version.
51
52This program is distributed in the hope that it will be useful, but
53WITHOUT ANY WARRANTY; without even the implied warranty of
54MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
55General Public License for more details.
56
57You should have received a copy of the GNU General Public License
58along with this program. If not, see
59<http://www.gnu.org/licenses/>.
60
61This release of arabluatex consists of the following 60This release of arabluatex consists of the following
62source files: 61source files:
63\begin{itemize} 62\begin{itemize}
@@ -70,17 +69,6 @@ source files:
70\item \verb|arabluatex_trans.lua| 69\item \verb|arabluatex_trans.lua|
71\end{itemize} 70\end{itemize}
72 71
73\subsection*{License applicable to the documentation}
74\label{sec:documentation-license}
75Copyright ⓒ 2016--2019 Robert Alessi
76
77The documentation file \verb|arabluatex.pdf| that is generated from
78the \verb|arabluatex.dtx| source is licensed under the Creative
79Commons Attribution-ShareAlike 4.0 International License. To view a
80copy of this license, visit
81\url{http://creativecommons.org/licenses/by-sa/4.0/} or send a letter
82to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
83
84\section*{Installation} 72\section*{Installation}
85\label{sec:installation} 73\label{sec:installation}
86\begin{enumerate} 74\begin{enumerate}
@@ -111,36 +99,37 @@ to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
111\label{sec:browse-code} 99\label{sec:browse-code}
112 100
113You can browse ArabLua\TeX\ repository on the web: 101You can browse ArabLua\TeX\ repository on the web:
114\url{http://git.robertalessi.net/arabluatex} 102\url{http://git.robertalessi.net/arabluatex}\\
103or\\
104\url{https://sr.ht/~ralessi/arabluatex}
115 105
116From this page, you can download all the releases of ArabLua\TeX. For 106From this page, you can download all the releases of ArabLua\TeX. For
117instructions on how to install ArabLua\TeX, please see above. 107instructions on how to install ArabLua\TeX, please see above.
118 108
119\subsection*{Comments, Feature requests, Bug Reports} 109\subsection*{Comments, Feature requests, Bug Reports}
120\label{sec:comm-feat-requ} 110\label{sec:comm-feat-requ}
121\url{https://gitlab.com/ralessi/arabluatex/issues} 111\url{https://todo.sr.ht/~ralessi/arabluatex}
122 112
123\subsection*{Download the repository} 113\subsection*{Download the repository}
124\label{sec:download-repository} 114\label{sec:download-repository}
125ArabLua\TeX\ development is facilitated by git, a distributed version 115ArabLua\TeX\ development is facilitated by git, a distributed version
126control system. You will need to install git (most GNU/Linux 116control system. You will need to install git (most Unix/Linux
127distributions package it in their repositories). 117distributions package it in their repositories).
128 118
129Use this command to download the repository 119Use this command to download the repository
130\begin{verbatim} 120\begin{verbatim}
131git clone http://git.robertalessi.net/arabluatex 121git clone https://git.sr.ht/~ralessi/arabluatex
132\end{verbatim} 122\end{verbatim}
133 123
134
135A new directory named arabluatex will have been created, containing 124A new directory named arabluatex will have been created, containing
136ArabLuaTeX. 125ArabLuaTeX.
137 126
138\subsection*{Git hosting} 127\subsection*{Git hosting}
139\label{sec:git-hosting} 128\label{sec:git-hosting}
140Make an account on \url{https://gitlab.com} and navigate (while 129Make an account on \url{https://sr.ht} and navigate (while logged in)
141logged in) to \url{https://gitlab.com/ralessi/arabluatex}. Click 130to \url{https://git.sr.ht/~ralessi/arabluatex}. Click \emph{Clone repo
142\emph{Fork} and you will have in your account your own repository of 131 to your account} and you will have in your account your own
143\verb|arabluatex| where you will be able to make whatever changes you 132repository of \verb|arabluatex| where you will be able to make
144like to. 133whatever changes you like to.
145 134
146\end{document} \ No newline at end of file 135\end{document} \ No newline at end of file
diff --git a/about.html b/about.html
index 6442d8a..d5b5236 100644
--- a/about.html
+++ b/about.html
@@ -1,33 +1,47 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 1<h1 class="unnumbered" id="sec:overview">Overview</h1>
2<html xmlns="http://www.w3.org/1999/xhtml"> 2<p>This package provides for <a href="https://luatex.org">LuaLaTeX</a>
3<head> 3an <a href="https://ctan.org/pkg/arabtex">ArabTeX</a>-like interface to
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4generate Arabic writing from an <span class="smallcaps">ascii</span>
5 <meta http-equiv="Content-Style-Type" content="text/css" /> 5transliteration. It is particularly well-suited for complex documents
6 <meta name="generator" content="pandoc" /> 6such as technical documents or critical editions where a lot of
7 <meta name="author" content="Robert Alessi" /> 7left-to-right commands intertwine with Arabic writing. arabluatex is
8 <title>The arabluatex package – README file</title> 8able to process any ArabTeX input notation. Its output can be set in the
9 <style type="text/css">code{white-space: pre;}</style> 9same modes of vocalization as ArabTeX, or in different roman
10</head> 10transliterations. It further allows many typographical refinements. It
11<body> 11can also operate with the <a
12<div id="header"> 12href="https://ctan.org/pkg/ekdosis">ekdosis</a> package to produce from
13<h1 class="title">The arabluatex package – README file</h1> 13<code>.tex</code> source files, in addition to printed books,
14<h2 class="author">Robert Alessi</h2> 14<code>TEI xml</code> compliant critical editions and/or lexicons that
15</div> 15can be searched, analyzed and correlated in various ways.</p>
16<h1 id="sec:overview" class="unnumbered">Overview</h1> 16<h1 class="unnumbered" id="license-and-disclamer">License and
17<p>This package provides for <a href="http://luatex.org">LuaLaTeX</a> an <a href="http://ctan.org/pkg/arabtex">ArabTeX</a>-like interface to generate Arabic writing from an <span style="font-variant: small-caps;">ascii</span> transliteration. It is particularly well-suited for complex documents such as technical documents or critical editions where a lot of left-to-right commands intertwine with Arabic writing. arabluatex is able to process any ArabTeX input notation. Its output can be set in the same modes of vocalization as ArabTeX, or in different roman transliterations. It further allows many typographical refinements. It will eventually interact with some other packages yet to come to produce from <code>.tex</code> source files, in addition to printed books, <code>TEI xml</code> compliant critical editions and/or lexicons that can be searched, analyzed and correlated in various ways.</p> 17disclamer</h1>
18<h1 id="license-and-disclamer" class="unnumbered">License and disclamer</h1>
19<p>ArabLuaTeX – Processing ArabTeX notation under LuaLaTeX</p> 18<p>ArabLuaTeX – Processing ArabTeX notation under LuaLaTeX</p>
20<p>Copyright ⓒ 2016–2019 Robert Alessi</p> 19<p>Copyright ⓒ 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Robert
21<p>Please send error reports and suggestions for improvements to Robert Alessi:</p> 20Alessi &lt;<code>alessi@robertalessi.net</code>&gt;</p>
21<p>Permission to use, copy, modify, and distribute this software for any
22purpose with or without fee is hereby granted, provided that the above
23copyright notice and this permission notice appear in all copies.</p>
24<p>THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
25WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
26OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
27FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
28DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
29IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
30OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
31SOFTWARE.</p>
32<p>Please send error reports and suggestions for improvements to Robert
33Alessi:</p>
22<ul> 34<ul>
23<li><p>email: <a href="mailto:alessi@robertalessi.net">alessi@robertalessi.net</a></p></li> 35<li><p>email: <a
24<li><p>website: <a href="http://www.robertalessi.net/arabluatex" class="uri">http://www.robertalessi.net/arabluatex</a></p></li> 36href="mailto:alessi@robertalessi.net">alessi@robertalessi.net</a></p></li>
25<li><p>comments, feature requests, bug reports: <a href="https://gitlab.com/ralessi/arabluatex/issues" class="uri">https://gitlab.com/ralessi/arabluatex/issues</a></p></li> 37<li><p>website: <a href="https://sr.ht/~ralessi/arabluatex"
38class="uri">https://sr.ht/~ralessi/arabluatex</a></p></li>
39<li><p>comments, feature requests, bug reports: <a
40href="https://todo.sr.ht/~ralessi/arabluatex"
41class="uri">https://todo.sr.ht/~ralessi/arabluatex</a></p></li>
26</ul> 42</ul>
27<p>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 3 of the License, or (at your option) any later version.</p> 43<p>This release of arabluatex consists of the following source
28<p>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.</p> 44files:</p>
29<p>You should have received a copy of the GNU General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</p>
30<p>This release of arabluatex consists of the following source files:</p>
31<ul> 45<ul>
32<li><p><code>arabluatex.ins</code></p></li> 46<li><p><code>arabluatex.ins</code></p></li>
33<li><p><code>arabluatex.dtx</code></p></li> 47<li><p><code>arabluatex.dtx</code></p></li>
@@ -37,13 +51,14 @@
37<li><p><code>arabluatex_novoc.lua</code></p></li> 51<li><p><code>arabluatex_novoc.lua</code></p></li>
38<li><p><code>arabluatex_trans.lua</code></p></li> 52<li><p><code>arabluatex_trans.lua</code></p></li>
39</ul> 53</ul>
40<h2 id="sec:documentation-license" class="unnumbered">License applicable to the documentation</h2> 54<h1 class="unnumbered" id="sec:installation">Installation</h1>
41<p>Copyright ⓒ 2016–2019 Robert Alessi</p>
42<p>The documentation file <code>arabluatex.pdf</code> that is generated from the <code>arabluatex.dtx</code> source is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit <a href="http://creativecommons.org/licenses/by-sa/4.0/" class="uri">http://creativecommons.org/licenses/by-sa/4.0/</a> or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p>
43<h1 id="sec:installation" class="unnumbered">Installation</h1>
44<ol> 55<ol>
45<li><p>Run <code>'lualatex arabluatex.ins'</code> to produce the <code>arabluatex.sty</code> file;</p></li> 56<li><p>Run <code>'lualatex arabluatex.ins'</code> to produce the
46<li><p>To finish the installation you have to move the following files into a directory where LaTeX can find them. See the FAQ on <code>texfaq.org</code> at <a href="https://texfaq.org/FAQ-inst-wlcf" class="uri">https://texfaq.org/FAQ-inst-wlcf</a> for more on this:</p> 57<code>arabluatex.sty</code> file;</p></li>
58<li><p>To finish the installation you have to move the following files
59into a directory where LaTeX can find them. See the FAQ on
60<code>texfaq.org</code> at <a href="https://texfaq.org/FAQ-inst-wlcf"
61class="uri">https://texfaq.org/FAQ-inst-wlcf</a> for more on this:</p>
47<ul> 62<ul>
48<li><p><code>arabluatex.sty</code></p></li> 63<li><p><code>arabluatex.sty</code></p></li>
49<li><p><code>arabluatex-patch.sty</code></p></li> 64<li><p><code>arabluatex-patch.sty</code></p></li>
@@ -53,20 +68,39 @@
53<li><p><code>arabluatex_novoc.lua</code></p></li> 68<li><p><code>arabluatex_novoc.lua</code></p></li>
54<li><p><code>arabluatex_trans.lua</code></p></li> 69<li><p><code>arabluatex_trans.lua</code></p></li>
55</ul></li> 70</ul></li>
56<li><p>Additionally, those who use emacs with AUCTeX may copy <code>arabluatex.el</code> to their <code>~/.emacs.d/auctex/auto</code> local directory. This will enable the appropriate hooks for ArabLuaTeX in AUCTeX.</p></li> 71<li><p>Additionally, those who use emacs with AUCTeX may copy
72<code>arabluatex.el</code> to their <code>~/.emacs.d/auctex/auto</code>
73local directory. This will enable the appropriate hooks for
74ArabLuaTeX in AUCTeX.</p></li>
57</ol> 75</ol>
58<h1 id="sec:devel-git-repos">Development, Git Repository</h1> 76<h1 id="sec:devel-git-repos">Development, Git Repository</h1>
59<h2 id="sec:browse-code" class="unnumbered">Browse the code</h2> 77<h2 class="unnumbered" id="sec:browse-code">Browse the code</h2>
60<p>You can browse ArabLuaTeX repository on the web: <a href="http://git.robertalessi.net/arabluatex" class="uri">http://git.robertalessi.net/arabluatex</a></p> 78<p>You can browse ArabLuaTeX repository on the web: <a
61<p>From this page, you can download all the releases of ArabLuaTeX. For instructions on how to install ArabLuaTeX, please see above.</p> 79href="http://git.robertalessi.net/arabluatex"
62<h2 id="sec:comm-feat-requ" class="unnumbered">Comments, Feature requests, Bug Reports</h2> 80class="uri">http://git.robertalessi.net/arabluatex</a><br />
63<p><a href="https://gitlab.com/ralessi/arabluatex/issues" class="uri">https://gitlab.com/ralessi/arabluatex/issues</a></p> 81or<br />
64<h2 id="sec:download-repository" class="unnumbered">Download the repository</h2> 82<a href="https://sr.ht/~ralessi/arabluatex"
65<p>ArabLuaTeX development is facilitated by git, a distributed version control system. You will need to install git (most GNU/Linux distributions package it in their repositories).</p> 83class="uri">https://sr.ht/~ralessi/arabluatex</a></p>
84<p>From this page, you can download all the releases of ArabLuaTeX. For
85instructions on how to install ArabLuaTeX, please see above.</p>
86<h2 class="unnumbered" id="sec:comm-feat-requ">Comments, Feature
87requests, Bug Reports</h2>
88<p><a href="https://todo.sr.ht/~ralessi/arabluatex"
89class="uri">https://todo.sr.ht/~ralessi/arabluatex</a></p>
90<h2 class="unnumbered" id="sec:download-repository">Download the
91repository</h2>
92<p>ArabLuaTeX development is facilitated by git, a distributed version
93control system. You will need to install git (most Unix/Linux
94distributions package it in their repositories).</p>
66<p>Use this command to download the repository</p> 95<p>Use this command to download the repository</p>
67<pre><code>git clone http://git.robertalessi.net/arabluatex</code></pre> 96<pre><code>git clone https://git.sr.ht/~ralessi/arabluatex</code></pre>
68<p>A new directory named arabluatex will have been created, containing ArabLuaTeX.</p> 97<p>A new directory named arabluatex will have been created, containing
69<h2 id="sec:git-hosting" class="unnumbered">Git hosting</h2> 98ArabLuaTeX.</p>
70<p>Make an account on <a href="https://gitlab.com" class="uri">https://gitlab.com</a> and navigate (while logged in) to <a href="https://gitlab.com/ralessi/arabluatex" class="uri">https://gitlab.com/ralessi/arabluatex</a>. Click <em>Fork</em> and you will have in your account your own repository of <code>arabluatex</code> where you will be able to make whatever changes you like to.</p> 99<h2 class="unnumbered" id="sec:git-hosting">Git hosting</h2>
71</body> 100<p>Make an account on <a href="https://sr.ht"
72</html> 101class="uri">https://sr.ht</a> and navigate (while logged in) to <a
102href="https://git.sr.ht/~ralessi/arabluatex"
103class="uri">https://git.sr.ht/~ralessi/arabluatex</a>. Click <em>Clone
104repo to your account</em> and you will have in your account your own
105repository of <code>arabluatex</code> where you will be able to make
106whatever changes you like to.</p>
diff --git a/arabluatex.dtx b/arabluatex.dtx
index 71dfd1d..3b2f4c2 100644
--- a/arabluatex.dtx
+++ b/arabluatex.dtx
@@ -1,23 +1,22 @@
1% \iffalse meta-comment 1% \iffalse meta-comment
2% ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 2% ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
3% Copyright (C) 2016--2019 Robert Alesssi 3% Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Robert
4%
5% Please send error reports and suggestions for improvements to Robert
6% Alessi <alessi@robertalessi.net> 4% Alessi <alessi@robertalessi.net>
7% 5%
8% This program is free software: you can redistribute it and/or modify 6% Permission to use, copy, modify, and distribute this software for any
9% it under the terms of the GNU General Public License as published by 7% purpose with or without fee is hereby granted, provided that the above
10% the Free Software Foundation, either version 3 of the License, or 8% copyright notice and this permission notice appear in all copies.
11% (at your option) any later version. 9%
12% 10% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13% This program is distributed in the hope that it will be useful, but 11% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14% WITHOUT ANY WARRANTY; without even the implied warranty of 12% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16% General Public License for more details. 14% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17% 17%
18% You should have received a copy of the GNU General Public License 18% Please send error reports and suggestions for improvements to Robert
19% along with this program. If not, see 19% Alessi <alessi@robertalessi.net>
20% <http://www.gnu.org/licenses/>.
21% \fi 20% \fi
22% 21%
23% \iffalse 22% \iffalse
@@ -27,7 +26,7 @@
27%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] 26%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
28%<package>\ProvidesPackage{arabluatex} 27%<package>\ProvidesPackage{arabluatex}
29%<*package> 28%<*package>
30 [2019/03/24 v1.17 An ArabTeX-like interface for LuaLaTeX] 29 [2023/05/21 v1.21-dev ArabTeX for LuaLaTeX]
31%</package> 30%</package>
32% 31%
33%<*driver> 32%<*driver>
@@ -37,24 +36,24 @@
37% This file is part of the `arabluatex' package 36% This file is part of the `arabluatex' package
38% 37%
39% ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 38% ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
40% Copyright (C) 2016--2019 Robert Alessi
41% 39%
42% Please send error reports and suggestions for improvements to Robert 40% Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
43% Alessi <alessi@robertalessi.net> 41% Robert Alessi <alessi@robertalessi.net>
44%
45% This program is free software: you can redistribute it and/or modify
46% it under the terms of the GNU General Public License as published by
47% the Free Software Foundation, either version 3 of the License, or
48% (at your option) any later version.
49% 42%
50% This program is distributed in the hope that it will be useful, but 43% Permission to use, copy, modify, and distribute this software for any
51% WITHOUT ANY WARRANTY; without even the implied warranty of 44% purpose with or without fee is hereby granted, provided that the above
52% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 45% copyright notice and this permission notice appear in all copies.
53% General Public License for more details. 46%
47% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
48% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
49% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
50% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
51% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
52% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
53% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
54% 54%
55% You should have received a copy of the GNU General Public License 55% Please send error reports and suggestions for improvements to Robert
56% along with this program. If not, see 56% Alessi <alessi@robertalessi.net>
57% <http://www.gnu.org/licenses/>.
58 57
59@software{pkg:arabtex, 58@software{pkg:arabtex,
60 author = {Lagally, Klaus}, 59 author = {Lagally, Klaus},
@@ -78,6 +77,15 @@
78 url = {http://www.amirifont.org/} 77 url = {http://www.amirifont.org/}
79} 78}
80 79
80@software{pkg:ekdosis,
81 title = {The Ekdosis package},
82 subtitle = {Typesetting TEI-xml compliant Critical Editions},
83 author = {Alessi, Robert},
84 url = {http://www.ekdosis.org},
85 date = {2021-11-21},
86 version = {1.4}
87}
88
81@Book{Habash, 89@Book{Habash,
82 author = {Habash, Nizar Y.}, 90 author = {Habash, Nizar Y.},
83 title = {Introduction to Arabic Natural Language Processing}, 91 title = {Introduction to Arabic Natural Language Processing},
@@ -88,6 +96,16 @@
88 location = {Toronto} 96 location = {Toronto}
89} 97}
90 98
99@software{pkg:lua-ul,
100 title = {The Lua-ul package},
101 subtitle = {Underlining for LuaLaTeX},
102 author = {Krüger, Marcel},
103 maintainer = {Krüger, Marcel},
104 url = {http://www.ctan.org/pkg/lua-ul},
105 date = {2020-03-12},
106 version = {0.0.1}
107}
108
91@MVBook{Wright, 109@MVBook{Wright,
92 author = {Wright, W. LL.D}, 110 author = {Wright, W. LL.D},
93 title = {A Grammar of the Arabic Language}, 111 title = {A Grammar of the Arabic Language},
@@ -147,40 +165,105 @@
147 location = {London -- Edinburgh} 165 location = {London -- Edinburgh}
148} 166}
149\end{filecontents} 167\end{filecontents}
150\usepackage[english]{babel} 168\usepackage[letterpaper,margin=1.25in,left=50mm,nohead]{geometry}
151\usepackage{dox}
152\doxitem{Option}{option}{options}
153\usepackage{fontspec} 169\usepackage{fontspec}
170\defaultfontfeatures{Renderer=Harfbuzz}
171\usepackage[english]{babel}
172%^^A dox does not work with the latest latex-dev:
173\ifdefined\SpecialMacroIndex
174 \NewDocElement{Option}{option}
175\else
176 \usepackage{dox}
177 \doxitem{Option}{option}{options}
178\fi
154\usepackage{microtype} 179\usepackage{microtype}
155\babelfont{rm}{Old Standard} 180\babelfont{rm}[RawFeature=onum]{Old Standard}
181\babelfont{sf}{NewComputerModernSans10}
182\babelfont{tt}{NewComputerModernMono10}
183\usepackage{manfnt}
184\usepackage{lettrine}
185\newcommand\danger{\lettrine[loversize=-.5]{\textdbend}{\hskip6pt}}
156\usepackage{metalogox} 186\usepackage{metalogox}
157\usepackage{arabluatex}[2019/03/24] 187\usepackage{arabluatex}[2023/05/21]
188\SetTranslitConvention{dmg+}
158\SetArbUp{\textsuperscript{\thinspace#1}} % Old Standard needs this 189\SetArbUp{\textsuperscript{\thinspace#1}} % Old Standard needs this
159\usepackage[nopar]{quran} 190\usepackage[nopar]{quran}
160\usepackage[noindex]{nameauth} 191\usepackage[noindex]{nameauth}
161\usepackage{varioref} 192\usepackage{varioref}
162\usepackage{hyperxmp} 193\usepackage{latexcolors}
163\PassOptionsToPackage{pdfa}{hyperref} 194\PassOptionsToPackage{bookmarks=true}{hyperref}
164\usepackage{hypdoc} 195\usepackage[numbered]{hypdoc}
165\usepackage{uri} 196\newcommand{\phts}{\phantomsection}
197\usepackage[loadlang=en]{metastr}
198\hypersetup{
199 colorlinks,
200 allcolors=cinnamon,
201 linktocpage=true,
202 pdftype={Text}
203}
204\labelformat{section}{sect.~#1}
205\labelformat{subsection}{sect.~#1}
206\labelformat{subsubsection}{sect.~#1}
207\labelformat{figure}{fig.~#1}
208\labelformat{table}{table~#1}
209\metaset{titletext}{%
210 \metapick[#1]{title}%
211 \metacompose[#1]{subtitle}{\metaget[sep]{subtitle}}{}{}}
212\metaset[print]{titletext}{%
213 \metatitleline[print]{title}%
214 \metatitleline[print]{subtitle}%
215 \metatitleline[print]{author}%
216 \metatitleline[print]{contactemail}%
217 \metatitlelinetwo[print]{date}[print]{draft}}
218\metaset[skip]{subtitle}{\vspace{1ex}}
219\metaset[skip]{author}{\vspace{2ex}}
220\metaset[skip]{date}{\vspace{1ex}}
221\metaset[style]{title}{\LARGE}
222\metaset[style]{author}{\large}
223\metaset[sep]{draft}{ -- }
224\metasetlang{en-US}
225\metaset{title}{arabluatex}
226\metaset[print]{title}{\textsf{arabluatex}}
227\metaset{date}{\filedate}
228\metaset{draft}{\fileversion}
229\metaset{subject}{ArabTeX}
230\metaset{subtitle}{ArabTeX for LuaLaTeX}
231\metaset[print]{subtitle}{Arab\TeX\ for Lua\LaTeX}
232\metaset{author}{Robert Alessi}
233\metaset{keywords}{Arabic language, Arabic,
234 arabtex, luatex}
235\metaset{contactemail}{alessi@roberalessi.net}
236\metaset[print]{contactemail}{\mailto[arabluatex]{alessi@robertalessi.net}}
237\metaset{contacturl}{http://www.roberalessi.net}
238\metaset{partof}{The arabluatex Package}
239\metaset[print]{partof}{The \textsf{arabluatex} Package}
240\metaset{copyrightowner}{\metapick[#1]{author}}
241\metaset{copyrightdate}{2016, 2017, 2018, 2019, 2020, 2021, 2022,
242 2023}
243\metaset{licensemessage}{Permission to use, copy, modify, and
244 distribute this software for any purpose with or without fee is
245 hereby granted, provided that the above copyright notice and this
246 permission notice appear in all copies.
247 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
248 WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
249 WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
250 AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
251 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
252 OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
253 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
254 PERFORMANCE OF THIS SOFTWARE.}
255\metaset{licenseurl}{%
256 https://cvsweb.openbsd.org/src/share/misc/license.template?rev=HEAD}
257\metaset[print]{licenseurl}{%
258 \url{https://cvsweb.openbsd.org/src/share/misc/license.template?rev=HEAD}}
259\metawritepdfinfo
260\metawritepdfaux
261\metawritepdfpreamble
262\metawritepdfcontact
263\metawritepdfrights
166\usepackage{bookmark} 264\usepackage{bookmark}
167\usepackage{authblk} 265\usepackage{authblk}
168\usepackage{latexcolors}
169\hypersetup{unicode=true, colorlinks, allcolors=cinnamon,
170 linktocpage=true, pdfauthor={Robert Alessi}, pdftitle={The
171 arabluatex package}, pdfcontactemail={alessi@robertalessi.net},
172 pdfcontacturl={http://www.robertalessi.net/arabluatex},
173 pdfcopyright={Copyright (C) 2016--2019 Robert Alessi
174 <alessi@robertalessi.net>. This document is licensed under the
175 Creative Commons Attribution-ShareAlike 4.0 International
176 License. To view a copy of this license, visit
177 http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
178 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.},
179 pdflicenseurl={https://creativecommons.org/licenses/by-sa/4.0/legalcode},
180 pdfmetalang={en-US}, pdftype={Text}, pdfkeywords={Arabic language,
181 arabtex, luatex}}
182\usepackage[scale=1.5]{ccicons} 266\usepackage[scale=1.5]{ccicons}
183\usepackage[lot]{multitoc}
184\usepackage{enumitem} 267\usepackage{enumitem}
185\setlist{nosep} 268\setlist{nosep}
186\setlist[itemize]{label=\textendash} 269\setlist[itemize]{label=\textendash}
@@ -188,9 +271,11 @@
188\setlist[enumerate,2]{label=\roman*.} 271\setlist[enumerate,2]{label=\roman*.}
189\newlist{enumabjad}{enumerate}{10} 272\newlist{enumabjad}{enumerate}{10}
190\setlist[enumabjad]{label={\abjad{\arabic*}}} 273\setlist[enumabjad]{label={\abjad{\arabic*}}}
191\usepackage{multicol} 274\newlist{remarks}{enumerate}{10}
192\usepackage{cleveref} 275\setlist[remarks]{
193\crefname{footnote}{note}{notes} 276 label*=\textsc{Rem.} \emph{\alph*},
277 left=0.25in,
278 before=\smaller}
194\usepackage{quoting} 279\usepackage{quoting}
195\quotingsetup{noorphans, rightmargin=0pt} 280\quotingsetup{noorphans, rightmargin=0pt}
196\renewcommand*{\quotingfont}{\footnotesize} 281\renewcommand*{\quotingfont}{\footnotesize}
@@ -210,49 +295,66 @@
210 bottom=0mm} 295 bottom=0mm}
211\newtcblisting{example}{minted options={linenos, numbersep=0mm, 296\newtcblisting{example}{minted options={linenos, numbersep=0mm,
212 fontsize=\smaller}} 297 fontsize=\smaller}}
213\newtcblisting{code}{minted options={linenos, numbersep=0mm, 298\newtcblisting{alcode}{minted options={linenos, numbersep=0mm,
214 fontsize=\smaller}, listing only} 299 fontsize=\smaller}, listing only}
300\VerbatimFootnotes
215\newcommand{\package}[1]{\textsf{#1}\index{#1=#1 (package)}} 301\newcommand{\package}[1]{\textsf{#1}\index{#1=#1 (package)}}
216\usepackage[contents]{colordoc} 302\usepackage[contents]{colordoc}
217\usepackage{csquotes} 303\usepackage{csquotes}
218\DeclareQuoteStyle{arabic} 304\DeclareQuoteStyle{arabic}
219{\rmfamily\textquotedblright}{\rmfamily\textquotedblleft} 305{\rmfamily\textquotedblright}{\rmfamily\textquotedblleft}
220{\rmfamily\textquoteright}{\rmfamily\textquoteleft} 306{\rmfamily\textquoteright}{\rmfamily\textquoteleft}
221\usepackage[style=authoryear, indexing=cite]{biblatex} 307\usepackage[style=oxnotes-inote,indexing=cite]{biblatex}
222\DeclareIndexFieldFormat{indextitle}{\index{#1=\emph{#1}}} 308\DeclareIndexFieldFormat{indextitle}{\index{#1=\emph{#1}}}
223\addbibresource{arabluatex.bib} 309\addbibresource{arabluatex.bib}
310\NewDocumentCommand{\newfeature}{o}{%
311 \leavevmode
312 \IfNoValueTF{#1}
313 {\marginpar{\hfill\emph{New feature}}}
314 {\marginpar{\hfill\emph{New feature} #1}}%
315 \ignorespaces
316}
317\usepackage{uri}
318\usepackage[obeyspaces]{xurl}
319\usepackage{multicol}
320\usepackage{tocloft}
321\renewcommand\cftlotprehook{\begin{multicols}{2}}
322\renewcommand\cftlotposthook{\end{multicols}}
323\renewcommand\cftlottitlefont{\Large\bfseries}
224\usepackage{etoc} 324\usepackage{etoc}
225\etocsettocdepth{paragraph} 325\etocsettocdepth{paragraph}
326\makeatletter
226\newcommand{\altableofcontents}{% 327\newcommand{\altableofcontents}{%
227 \begingroup 328 \begingroup
228 \etocsetstyle{section}{}{} 329 \etocsetstyle{section}{}{}
229 {\etocsavedsectiontocline{% 330 {\l@section{%
230 \numberline{\etocnumber}\etocname}{\etocpage}}{} 331 \numberline{\etocnumber}\etocname}{\etocpage}}{}
231 \etocsetstyle{subsection}{}{} 332 \etocsetstyle{subsection}{}{}
232 {\etocsavedsubsectiontocline{% 333 {\l@subsection{%
233 \numberline{\etocnumber}\etocname}{\etocpage}}{}% 334 \numberline{\etocnumber}\etocname}{\etocpage}}{}%
234 \etocsetstyle{subsubsection}{}{} 335 \etocsetstyle{subsubsection}{}{}
235 {\etocsavedsubsubsectiontocline{% 336 {\l@subsubsection{%
236 \numberline{\etocnumber}\etocname}{\etocpage}}{}% 337 \numberline{\etocnumber}\etocname}{\etocpage}}{}%
237 \etocsetstyle{paragraph}{}{\leftskip2cm\rightskip 2.2em \parfillskip 338 \etocsetstyle{paragraph}{}{\leftskip2cm\rightskip 2.2em \parfillskip
238 0pt plus 1fil\relax \nobreak} 339 0pt plus 1fil\relax \nobreak}
239 {\noindent\etocname{} \etocpage{} }{\par}% 340 {\noindent\etocname{} \etocpage{} }{\par}%
240 \etocmulticolstyle[2]{\section*{Contents}} 341 \etocmulticolstyle[2]{\section*{Contents}}
241 \pdfbookmark[1]{Contents}{toc} 342 \pdfbookmark[1]{Contents}{toc}
242 \tableofcontents 343 \etoctoclines
344 \localtableofcontents
243 \endgroup} 345 \endgroup}
346\makeatother
347\setlength\IndexMin{100pt}
244\EnableCrossrefs 348\EnableCrossrefs
245\RecordChanges 349\RecordChanges
246\CodelineIndex 350\CodelineIndex
247\begin{document} 351\begin{document}
248 \DocInput{arabluatex.dtx} 352 \DocInput{arabluatex.dtx}
249 \printbibliography[heading=bibintoc] 353 \printbibliography[heading=bibnumbered]
250 \phantomsection 354 \phantomsection
251 \addcontentsline{toc}{section}{Change History}
252 \PrintChanges 355 \PrintChanges
253 \phantomsection 356 \phantomsection
254 \addcontentsline{toc}{section}{Index} 357 \PrintIndex
255 \PrintIndex
256\end{document} 358\end{document}
257%</driver> 359%</driver>
258% \fi 360% \fi
@@ -304,28 +406,26 @@
304% \DoNotIndex{\relax,\RenewDocumentCommand,\string,\verb,\let} 406% \DoNotIndex{\relax,\RenewDocumentCommand,\string,\verb,\let}
305% \DoNotIndex{\enskip} 407% \DoNotIndex{\enskip}
306% 408%
307% \providecommand*{\url}{\texttt}
308% \GetFileInfo{arabluatex.dtx} 409% \GetFileInfo{arabluatex.dtx}
309% 410%
310% \newcommand*{\NEWfeature}[1]{% 411% \pdfbookmark[1]{\metaterm{title}}{title}
311% \hskip 1sp \marginpar{\small\sffamily\raggedright 412% \begin{tcolorbox}[
312% New feature\\#1}} 413% colframe=black,
313% 414% enhanced,
314% \title{\tcbox[colframe=black, enhanced, tikznode, drop lifted 415% drop lifted shadow,
315% shadow, colback=white, boxrule=.25mm]% 416% colback=white,
316% {The \textsf{arabluatex} package\\ 417% boxrule=.25mm,
317% \fileversion\ -- \filedate}} 418% halign=center,
318% 419% center
319% \author{Robert Alessi \\ 420% ]
320% \href{mailto:alessi@robertalessi.net?Subject=arabluatex package}% 421% \metapick[print]{titletext}
321% {\texttt{alessi@robertalessi.net}}} 422% \end{tcolorbox}
322% \date{}
323% 423%
324% \maketitle
325% \footnotesize 424% \footnotesize
326% \altableofcontents 425% \altableofcontents
327% \listoftables 426% \listoftables
328% \normalsize 427% \normalsize
428% \VerbatimFootnotes
329% 429%
330% \begin{abstract} 430% \begin{abstract}
331% This package provides for {\LuaLaTeX} an Arab{\TeX}-like interface 431% This package provides for {\LuaLaTeX} an Arab{\TeX}-like interface
@@ -337,46 +437,59 @@
337% input notation. Its output can be set in the same modes of 437% input notation. Its output can be set in the same modes of
338% vocalization as Arab\TeX, or in different roman 438% vocalization as Arab\TeX, or in different roman
339% transliterations. It further allows many typographical 439% transliterations. It further allows many typographical
340% refinements. It will eventually interact with some other packages 440% refinements. Furthermore, it can interact with the \pkg{ekdosis}
341% yet to come to produce from \verb|.tex| source files, in addition 441% package to produce from \verb|.tex| source files, in addition to
342% to printed books, \texttt{TEI xml} compliant critical editions 442% printed books, \texttt{TEI xml} compliant critical editions and/or
343% and/or lexicons that can be searched, analyzed and correlated in 443% lexicons that can be searched, analyzed and correlated in various
344% various ways. 444% ways.
345% \end{abstract} 445% \end{abstract}
346% 446%
347% \section*{License and disclamer} 447% \section*{License and Disclaimer}
348% \addcontentsline{toc}{section}{License and disclamer} 448% \addcontentsline{toc}{section}{License and disclamer}
349% \subsection*{License applicable to the software} 449% \leavevmode\marginpar{\hfill\texttt{OpenBSD}} \pkg{arabluatex} is
350% \label{sec:license-software} 450% licensed under the terms of the so-called OpenBSD license, as it is
451% modelled after the ISC copyright, which is functionally equivalent
452% to a two-term BSD copyright with language removed that is made
453% unnecessary by the Berne convention.\footnote{More information about
454% the OpenBSD policy to which \pkg{arabluatex} adheres:
455% \url{https://www.openbsd.org/policy.html}.}
351% 456%
352% \package{arabluatex} --- Processing Arab\TeX\ notation under Lua\LaTeX.\\ 457% \iffalse
353% Copyright \textcopyright\ 2016--2019 Robert Alessi 458%<*example>
459% \fi
460\begin{minted}[linenos=false]{text}
461arabluatex -- ArabTeX for LuaLaTeX
462----------------------------------------------------------
463
464Copyright (c) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
465Robert Alessi <alessi@robertalessi.net>
466
467Permission to use, copy, modify, and distribute this software for any
468purpose with or without fee is hereby granted, provided that the above
469copyright notice and this permission notice appear in all copies.
470
471THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
472WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
473MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
474ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
475WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
476ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
477OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
478\end{minted}
479% \iffalse
480%</example>
481% \fi
354% 482%
355% Please send error reports and suggestions for improvements to Robert 483% Please send error reports and suggestions for improvements to Robert
356% Alessi: 484% Alessi:
357% \begin{itemize} 485% \begin{itemize}
358% \item email: \mailto[arabluatex package]{alessi@roberalessi.net} 486% \item email: \mailto[arabluatex package]{alessi@roberalessi.net}
359% \item website: \url{http://www.robertalessi.net/arabluatex} 487% \item website: \url{https://sr.ht/~ralessi/arabluatex/}
360% \item development: \url{http://git.robertalessi.net/arabluatex} 488% \item development: \url{http://git.robertalessi.net/arabluatex}
361% \item comments, feature requests, bug reports: 489% \item comments, feature requests, bug reports:
362% \url{https://gitlab.com/ralessi/arabluatex/issues} 490% \url{https://todo.sr.ht/~ralessi/arabluatex}
363% \end{itemize} 491% \end{itemize}
364% 492%
365% \marginpar{\texttt{gpl3+}}
366% This program is free software: you can redistribute it and/or modify
367% it under the terms of the GNU General Public License as published by
368% the Free Software Foundation, either version 3 of the License, or
369% (at your option) any later version.
370%
371% This program is distributed in the hope that it will be useful, but
372% WITHOUT ANY WARRANTY; without even the implied warranty of
373% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
374% General Public License for more details.
375%
376% You should have received a copy of the GNU General Public License
377% along with this program. If not, see
378% <http://www.gnu.org/licenses/>.
379%
380% This release of \package{arabluatex} consists of the following 493% This release of \package{arabluatex} consists of the following
381% source files: 494% source files:
382% \begin{itemize} 495% \begin{itemize}
@@ -389,21 +502,9 @@
389% \item |arabluatex_trans.lua| 502% \item |arabluatex_trans.lua|
390% \item |arabluatex.el| 503% \item |arabluatex.el|
391% \end{itemize} 504% \end{itemize}
392%
393% \subsection*{License applicable to this document}
394% \label{sec:documentation-license}
395% Copyright \textcopyright\ 2016--2019 Robert Alessi
396%
397% \ccbysa\marginpar{\texttt{CC BY-SA 4.0}}
398% This document is licensed under the Creative Commons
399% Attribution-ShareAlike 4.0 International License. To view a copy of
400% this license, visit
401% \url{http://creativecommons.org/licenses/by-sa/4.0/} or send a
402% letter to Creative Commons, PO Box 1866, Mountain View, CA 94042,
403% USA.
404% 505%
405% \section{Introduction} 506% \section{Introduction}
406% In comparison to Prof. Lagally's outstanding Arab\TeX,\footnote{See 507% In comparison to Prof.\ Lagally's outstanding Arab\TeX,\footnote{See
407% \url{http://ctan.org/pkg/arabtex}} Arab{\LuaTeX} is at present 508% \url{http://ctan.org/pkg/arabtex}} Arab{\LuaTeX} is at present
408% nothing more than a modest piece of software. Hopefully---if I may 509% nothing more than a modest piece of software. Hopefully---if I may
409% say so---it will eventually provide all of its valuable qualities to 510% say so---it will eventually provide all of its valuable qualities to
@@ -520,21 +621,25 @@
520% issue a warning message and attempt to load the Amiri 621% issue a warning message and attempt to load the Amiri
521% font\footnote{\textcite{pkg:amiri}.} like so:---\\ 622% font\footnote{\textcite{pkg:amiri}.} like so:---\\
522% \tcboxverb{\newfontfamily\arabicfont{Amiri}[Script=Arabic]} 623% \tcboxverb{\newfontfamily\arabicfont{Amiri}[Script=Arabic]}
523% \begin{quoting} 624% \begin{remarks}
524% \textsc{Rem.} By default Amiri places the \arb[trans]{kasraT} in 625% \item By default Amiri places the \arb[trans]{kasraT} in combination
525% combination with the \arb[trans]{ta^sdId} below the consonant, 626% with the \arb[trans]{ta^sdId} below the consonant, like so:
526% like so: \arb{BBi}\,. That is correct, as at least in the oldest 627% \arb{BBi}\,. That is correct, as at least in the oldest
527% manuscripts {\renewfontfamily\arabicfont{Amiri}[Script=Arabic, 628% manuscripts {\renewfontfamily\arabicfont{Amiri}[Script=Arabic,
528% RawFeature={+ss05}]\arb{BBi}} may stand for \arb{BBa} as 629% RawFeature={+ss05}]\arb{BBi}} may stand for \arb{BBa} as well as
529% well as \arb{BBi}\,. See \textcite[i. 14 C--D]{Wright}. The placement 630% \arb{BBi}\,. See \textcite[i. 14 C--D]{Wright}. The placement of
530% of the \arb[trans]{kasraT} above the consonant may be obtained by 631% the \arb[trans]{kasraT} above the consonant may be obtained by
531% selecting the |ss05| feature of the Amiri font, like 632% selecting the |ss05| feature of the Amiri font, like
532% so:---\footnote{See the documentation of \package{amiri}, 633% so:---\footnote{See the documentation of \package{amiri},
533% \textcite[6]{pkg:amiri}.}\\ 634% \textcite[6]{pkg:amiri}.}\\
534% \tcboxverb{\newfontfamily\arabicfont{Amiri}[Script=Arabic,RawFeature={+ss05}]} 635% \tcboxverb{\newfontfamily\arabicfont{Amiri}[Script=Arabic,RawFeature={+ss05}]}
535% 636%
536% Other Arabic fonts may behave differently. 637% Other Arabic fonts may behave differently.
537% \end{quoting} 638%
639% \item \cs{newfontfamily} can be used to have
640% either Indian of Arabic numbers printed. See
641% \vpageref{ref:arabic-numbers} for more information.
642% \end{remarks}
538% 643%
539% \subsection{Options} 644% \subsection{Options}
540% \label{sec:options} 645% \label{sec:options}
@@ -568,8 +673,8 @@
568% standards. At present, three standards are supported (see below 673% standards. At present, three standards are supported (see below
569% \vref{sec:transliteration} for more details): 674% \vref{sec:transliteration} for more details):
570% \begin{description} 675% \begin{description}
571% \item[dmg] \emph{Deutsche Morgenländische Gesellschaft}, which is 676% \item[dmg/dmg+] \emph{Deutsche Morgenländische Gesellschaft} |dmg|
572% selected by default; 677% is selected by default;
573% \item[loc] \emph{Library of Congress}; 678% \item[loc] \emph{Library of Congress};
574% \item[arabica] \emph{Arabica}. 679% \item[arabica] \emph{Arabica}.
575% \end{description} 680% \end{description}
@@ -579,7 +684,7 @@
579% \label{ref:export-global-opt} 684% \label{ref:export-global-opt}
580% \DescribeOption{export} |export|$=$|true|\verb+|+|false| 685% \DescribeOption{export} |export|$=$|true|\verb+|+|false|
581% \hfill\tcboxverb{Default: false}\\ \label{export-mode} 686% \hfill\tcboxverb{Default: false}\\ \label{export-mode}
582% \NEWfeature{v.1.13} This option acts as a named argument and does 687% \newfeature[v.1.13] This option acts as a named argument and does
583% not need a value as it defaults to |true| if it is used. It enables 688% not need a value as it defaults to |true| if it is used. It enables
584% \package{arabluatex} to produce a duplicate of the original |.tex| 689% \package{arabluatex} to produce a duplicate of the original |.tex|
585% source file in which all \textsc{ascii} strings are replaced with 690% source file in which all \textsc{ascii} strings are replaced with
@@ -588,7 +693,7 @@
588% 693%
589% \subsubsection{Classic contrasted with modern typesetting of Arabic} 694% \subsubsection{Classic contrasted with modern typesetting of Arabic}
590% \label{sec:classic-modern-typesetting} 695% \label{sec:classic-modern-typesetting}
591% \NEWfeature{v.1.2} By default, \package{arabluatex} typesets Arabic 696% \newfeature[v.1.2] By default, \package{arabluatex} typesets Arabic
592% in a classic, traditional style the most prominent features of which 697% in a classic, traditional style the most prominent features of which
593% are the following: 698% are the following:
594% \begin{itemize} 699% \begin{itemize}
@@ -627,7 +732,7 @@
627% \fi 732% \fi
628% \end{itemize} 733% \end{itemize}
629% 734%
630% \DescribeMacro{\SetArbEasy} \NEWfeature{v1.4.4} Such refinements as 735% \DescribeMacro{\SetArbEasy} \newfeature[v1.4.4] Such refinements as
631% \enquote*{classic} \arb[trans]{maddaT} may be discarded by the 736% \enquote*{classic} \arb[trans]{maddaT} may be discarded by the
632% \cs{SetArbEasy} command, either globally in the preamble or locally 737% \cs{SetArbEasy} command, either globally in the preamble or locally
633% at any point of the document. The difference between \cs{SetArbEasy} 738% at any point of the document. The difference between \cs{SetArbEasy}
@@ -637,7 +742,7 @@
637% mode, while the latter further takes it away. Default 742% mode, while the latter further takes it away. Default
638% \enquote*{classic} rules may be set back at any point of the 743% \enquote*{classic} rules may be set back at any point of the
639% document with the \DescribeMacro{\SetArbDflt}\cs{SetArbDflt} 744% document with the \DescribeMacro{\SetArbDflt}\cs{SetArbDflt}
640% command. \NEWfeature{v1.6} \DescribeMacro{\SetArbDflt*}Assimilation 745% command. \newfeature[v1.6] \DescribeMacro{\SetArbDflt*}Assimilation
641% rules laid on \vref{ref:assimilation} may also be applied by the 746% rules laid on \vref{ref:assimilation} may also be applied by the
642% \enquote*{starred} version of this command \cs{SetArbDflt*} either 747% \enquote*{starred} version of this command \cs{SetArbDflt*} either
643% in the preamble or at any point of the document.\footnote{For an 748% in the preamble or at any point of the document.\footnote{For an
@@ -712,25 +817,16 @@
712%</example> 817%</example>
713% \fi 818% \fi
714% 819%
715% \paragraph{Caveat} 820% The following example comes from \textcite[i. 213
716% For some reason, left-to-right paragraphs that start with Arabic
717% words lose their indentation. For the time being, this can be
718% circumvented by appending the \cs{indent} command at the
719% commencement of such paragraphs.
720%
721% \label{ref:ltr-lists}%
722% The same remark applies to left-to-right list environments: when
723% items start with Arabic words, the \cs{arb} command must be prefixed
724% with \cs{indent}. The following example comes from \textcite[i. 213
725% C]{Wright}:--- % 821% C]{Wright}:--- %
726% \iffalse 822% \iffalse
727%<*example> 823%<*example>
728% \fi 824% \fi
729\begin{example} 825\begin{example}
730 \begin{enumerate}[label=\Roman*., start=16] 826 \begin{enumerate}[label=\Roman*., start=16]
731 \item \indent\arb{fawA`ilu}*. 827 \item \arb{fawA`ilu}*.
732 \begin{enumerate}[label=\arabic*.] 828 \begin{enumerate}[label=\arabic*.]
733 \item \indent\arb{fA`aluN}; as \arb{_hAtamuN} \emph{a 829 \item \arb{fA`aluN}; as \arb{_hAtamuN} \emph{a
734 signet-ring}, ... 830 signet-ring}, ...
735 \end{enumerate} 831 \end{enumerate}
736 \end{enumerate} 832 \end{enumerate}
@@ -745,11 +841,11 @@
745% \iffalse 841% \iffalse
746%<*example> 842%<*example>
747% \fi 843% \fi
748\begin{code} 844\begin{alcode}
749 \begin{arab} 845 \begin{arab}
750 [...] 846 [...]
751 \end{arab} 847 \end{arab}
752\end{code} 848\end{alcode}
753% \iffalse 849% \iffalse
754%</example> 850%</example>
755% \fi 851% \fi
@@ -800,43 +896,41 @@
800% where \meta{mode} may be any of |voc|, |fullvoc|, |novoc| or 896% where \meta{mode} may be any of |voc|, |fullvoc|, |novoc| or
801% |trans|. 897% |trans|.
802% 898%
803%\section{Standard Arab\TeX\ input} 899% \section{Standard Arab\TeX\ input}
804%\subsection{Consonants} 900% \subsection{Consonants}
805% \Cref{tab:arabtex-consonants} gives the Arab\TeX\ equivalents for 901% \Vref{tab:arabtex-consonants} gives the Arab\TeX\ equivalents for
806% all of the Arabic consonants. 902% all of the Arabic consonants.
807% 903%
808% \addlines[2]
809% \newcommand{\dmg}[1]{% 904% \newcommand{\dmg}[1]{%
810% \SetTranslitConvention{dmg}% 905% \SetTranslitConvention{dmg+}%
811% \arb[trans]{#1}} 906% \arb[trans]{#1}}
812% \newcommand{\loc}[1]{% 907% \newcommand{\loc}[1]{%
813% \SetTranslitConvention{loc}% 908% \SetTranslitConvention{loc}%
814% \arb[trans]{#1}\SetTranslitConvention{dmg}} 909% \arb[trans]{#1}\SetTranslitConvention{dmg+}}
815% \newcommand{\brill}[1]{% 910% \newcommand{\brill}[1]{%
816% \SetTranslitConvention{arabica}% 911% \SetTranslitConvention{arabica}%
817% \arb[trans]{#1}\SetTranslitConvention{dmg}} 912% \arb[trans]{#1}\SetTranslitConvention{dmg+}}
818% \begin{longtable}{lllll} 913% \begin{longtable}{lllll}
819% \bottomrule 914% \bottomrule
820% \caption*{\Cref*{tab:arabtex-consonants}: Standard Arab\TeX\ 915% \caption[]{Standard Arab\TeX\ (consonants)}
821% (consonants)}
822% \endfoot 916% \endfoot
823% \captionlistentry{Arab\TeX\ consonants}\\[-1em]
824% \toprule 917% \toprule
918% \captionlistentry{Standard Arab\TeX\ (consonants)}
825% Letter & \multicolumn{3}{l}{Transliteration\footnotemark} 919% Letter & \multicolumn{3}{l}{Transliteration\footnotemark}
826% & Arab\TeX\ notation \\ 920% & Arab\TeX\ notation \\
827% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 921% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
828% \endfirsthead 922% \endfirsthead
829% \toprule 923% \toprule
830% Letter & \multicolumn{3}{l}{Transliteration} 924% Letter & \multicolumn{3}{l}{Transliteration}
831% & Arab\TeX\ notation \\ 925% & Arab\TeX\ notation \\
832% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 926% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
833% \endhead \footnotetext{See below \vref{sec:transliteration}.} 927% \endhead \footnotetext{See below \vref{sec:transliteration}.}
834% \label{tab:arabtex-consonants} 928% \label{tab:arabtex-consonants}
835% \arb[voc]{'i 'a 'u}\footnote{See below, \emph{Rem{.} a.} For 929% \arb[voc]{'i 'a 'u}\footnote{See below, \emph{Rem{.} a.} For
836% \arb[trans]{'alif} as a consonant, see \textcite[i. 16 930% \arb[trans]{'alif} as a consonant, see \textcite[i. 16
837% D]{Wright}. The \arb[trans]{hamzaT} itself is encoded \texttt{<'>} 931% D]{Wright}. The \arb[trans]{hamzaT} itself is encoded \texttt{<'>}
838% and may be followed by either \meta{u, a} or \meta{i}. See below 932% and may be followed by either \meta{u, a} or \meta{i}. See below
839% \vref{ref:hamza}.} & \dmg{'u 'a 'i} & 933% \vref{ref:hamza}.} & \dmg{|'u, |'a, |'i} &
840% \loc{|'u, |'a, |'i} & \brill{|'u, |'a, |'i} & |'u| or |'a| or |'i| \\ 934% \loc{|'u, |'a, |'i} & \brill{|'u, |'a, |'i} & |'u| or |'a| or |'i| \\
841% \arb[novoc]{b} & \dmg{b} & \loc{b} & \brill{b} & |b| \\ 935% \arb[novoc]{b} & \dmg{b} & \loc{b} & \brill{b} & |b| \\
842% \arb[novoc]{t} & \dmg{t} & \loc{t} & \brill{t} & |t| \\ 936% \arb[novoc]{t} & \dmg{t} & \loc{t} & \brill{t} & |t| \\
@@ -849,6 +943,7 @@
849% \arb[novoc]{r} & \dmg{r} & \loc{r} & \brill{r} & |r| \\ 943% \arb[novoc]{r} & \dmg{r} & \loc{r} & \brill{r} & |r| \\
850% \arb[novoc]{z} & \dmg{z} & \loc{z} & \brill{z} & |z| \\ 944% \arb[novoc]{z} & \dmg{z} & \loc{z} & \brill{z} & |z| \\
851% \arb[novoc]{s} & \dmg{s} & \loc{s} & \brill{s} & |s| \\ 945% \arb[novoc]{s} & \dmg{s} & \loc{s} & \brill{s} & |s| \\
946% \pagebreak[1]
852% \arb[novoc]{^s} & \dmg{^s} & \loc{^s} & \brill{^s} & |^s| \\ 947% \arb[novoc]{^s} & \dmg{^s} & \loc{^s} & \brill{^s} & |^s| \\
853% \arb[novoc]{.s} & \dmg{.s} & \loc{.s} & \brill{.s} & |.s| \\ 948% \arb[novoc]{.s} & \dmg{.s} & \loc{.s} & \brill{.s} & |.s| \\
854% \arb[novoc]{.d} & \dmg{.d} & \loc{.d} & \brill{.d} & |.d| \\ 949% \arb[novoc]{.d} & \dmg{.d} & \loc{.d} & \brill{.d} & |.d| \\
@@ -866,14 +961,14 @@
866% \arb[novoc]{w} & \dmg{w} & \loc{w} & \brill{w} & |w| \\ 961% \arb[novoc]{w} & \dmg{w} & \loc{w} & \brill{w} & |w| \\
867% \arb[novoc]{y} & \dmg{y} & \loc{y} & \brill{y} & |y|\footnote{For 962% \arb[novoc]{y} & \dmg{y} & \loc{y} & \brill{y} & |y|\footnote{For
868% the letter \arb[novoc]{.y} with no diacritical points below, see 963% the letter \arb[novoc]{.y} with no diacritical points below, see
869% \emph{Rem{.} b.} below.} \\ 964% \vref{ref:dotless-ya} below.} \\
870% \arb[novoc]{T} & \dmg{aT} & \loc{aT} & \brill{aT} & |T| \\ 965% \arb[novoc]{T} & \dmg{aT} & \loc{aT} & \brill{aT} & |T| \\
871% \end{longtable} 966% \end{longtable}
872% \begin{quoting} 967% \begin{remarks}
873% \textsc{Rem.}~\emph{a.} Please note that in all cases of elision, 968% \item Please note that in all cases of elision, the
874% the \arb[trans]{'alifu 'l-wa.sli} is expressed only by the vowel 969% \arb[trans]{'alifu 'l-wa.sli} is expressed only by the vowel that
875% that accompanies the omitted \arb[trans]{hamzaT}: \meta{u, a, i} 970% accompanies the omitted \arb[trans]{hamzaT}: \meta{u, a, i} as in
876% as in |wa-inhazama| \arb[fullvoc]{wa-inhazama} 971% |wa-inhazama| \arb[fullvoc]{wa-inhazama}
877% \arb[trans]{wa-inhazama}. For more details on the definite article 972% \arb[trans]{wa-inhazama}. For more details on the definite article
878% and the \arb[trans]{'alifu 'l-wa.sli} see 973% and the \arb[trans]{'alifu 'l-wa.sli} see
879% \vref{ref:definite-article}. 974% \vref{ref:definite-article}.
@@ -887,10 +982,10 @@
887% absence of vowel), |wa-.Aan| \arb{wa-.Aan} \arb[trans]{wa-.Aan}, 982% absence of vowel), |wa-.Aan| \arb{wa-.Aan} \arb[trans]{wa-.Aan},
888% |wa-.Ain| \arb{wa-.Ain} \arb[trans]{wa-.Ain}. 983% |wa-.Ain| \arb{wa-.Ain} \arb[trans]{wa-.Ain}.
889% 984%
890% \textsc{Rem.}~\emph{b.} The letter \arb[novoc]{y} with two points 985% \item \label{ref:dotless-ya}The letter \arb[novoc]{y} with two
891% below, \arb{al-yA'u 'l-mu_tannATu min ta.hti-hA}, may also be 986% points below, \arb{al-yA'u 'l-mu_tannATu min ta.hti-hA}, may also
892% written without diacritical points as \arb[novoc]{Y}. When it is 987% be written without diacritical points as \arb[novoc]{Y}. When it
893% used as a consonant, it is encoded |aY|, where |a| recalls the 988% is used as a consonant, it is encoded |aY|, where |a| recalls the
894% \arb[trans]{fat.haT} placed above the preceding letter in 989% \arb[trans]{fat.haT} placed above the preceding letter in
895% vocalized Arabic, like so: |qaY'uN| \arb{qaY'uN} 990% vocalized Arabic, like so: |qaY'uN| \arb{qaY'uN}
896% \arb[trans]{qaY'uN}, |^saY'uN| \arb{^saY'uN} \arb[trans]{^saY'uN}, 991% \arb[trans]{qaY'uN}, |^saY'uN| \arb{^saY'uN} \arb[trans]{^saY'uN},
@@ -900,30 +995,30 @@
900% like so: |qa.y'uN| \arb{qa.y'uN} \arb[trans]{qa.y'uN}, |^sa.y'uN| 995% like so: |qa.y'uN| \arb{qa.y'uN} \arb[trans]{qa.y'uN}, |^sa.y'uN|
901% \arb{^sa.y'uN} \arb[trans]{^sa.y'uN}, |^sa.y'aN| 996% \arb{^sa.y'uN} \arb[trans]{^sa.y'uN}, |^sa.y'aN|
902% \arb[trans]{^sa.y'aN} \arb{^sa.y'aN}. 997% \arb[trans]{^sa.y'aN} \arb{^sa.y'aN}.
903% \end{quoting} 998% \end{remarks}
904% 999%
905% \subsection{Additional characters} 1000% \subsection{Additional characters}
906% \changes{v1.8.5}{2017/06/20}{Six additional Persian characters are 1001% \changes{v1.8.5}{2017/06/20}{Six additional Persian characters are
907% now available} 1002% now available}
908% \NEWfeature{v1.8.5}\Cref{tab:arabtex-additional-characters} gives 1003% \newfeature[v1.8.5]\Vref{tab:arabtex-additional-characters} gives
909% the Arab\TeX\ equivalents for some additional Persian characters. 1004% the Arab\TeX\ equivalents for some additional Persian characters.
910% 1005%
1006% \enlargethispage{2\baselineskip}
911% \begin{longtable}{lllll} 1007% \begin{longtable}{lllll}
912% \bottomrule 1008% \bottomrule
913% \caption*{\Cref*{tab:arabtex-additional-characters}: Standard 1009% \caption[]{Standard Arab\TeX\ (additional characters)}
914% Arab\TeX\ (additional characters)}
915% \endfoot 1010% \endfoot
916% \captionlistentry{Arab\TeX\ additional characters}\\[-1em]
917% \toprule 1011% \toprule
1012% \captionlistentry{Standard Arab\TeX\ (additional characters)}
918% Letter & \multicolumn{3}{l}{Transliteration\footnotemark} 1013% Letter & \multicolumn{3}{l}{Transliteration\footnotemark}
919% & Arab\TeX\ notation \\ 1014% & Arab\TeX\ notation \\
920% & \texttt{dmg} & \texttt{loc} & \texttt{arabica}\footnotemark 1015% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica}\footnotemark
921% & \\ \midrule 1016% & \\ \midrule
922% \endfirsthead 1017% \endfirsthead
923% \toprule 1018% \toprule
924% Letter & \multicolumn{3}{l}{Transliteration} 1019% Letter & \multicolumn{3}{l}{Transliteration}
925% & Arab\TeX\ notation \\ 1020% & Arab\TeX\ notation \\
926% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 1021% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
927% \endhead 1022% \endhead
928% \addtocounter{footnote}{-1} 1023% \addtocounter{footnote}{-1}
929% \footnotetext{See below \vref{sec:transliteration}.} 1024% \footnotetext{See below \vref{sec:transliteration}.}
@@ -934,40 +1029,40 @@
934% \label{tab:arabtex-additional-characters} 1029% \label{tab:arabtex-additional-characters}
935% \hskip-1em\arb[novoc]{p} & \dmg{p} & \loc{p} & \brill{p} & \verb|p| \\ 1030% \hskip-1em\arb[novoc]{p} & \dmg{p} & \loc{p} & \brill{p} & \verb|p| \\
936% \arb[novoc]{^c} & \dmg{^c} & \loc{^c} & \brill{^c} & \verb|^c| \\ 1031% \arb[novoc]{^c} & \dmg{^c} & \loc{^c} & \brill{^c} & \verb|^c| \\
1032% \pagebreak[1]
937% \arb[novoc]{^z} & \dmg{^z} & \loc{^z} & \brill{^z} & \verb|^z| \\ 1033% \arb[novoc]{^z} & \dmg{^z} & \loc{^z} & \brill{^z} & \verb|^z| \\
938% \arb[novoc]{v}\footnote{\label{fn:not-in-dmg}This character is not found in 1034% \arb[novoc]{v}\footnote{\label{fn:not-in-dmg}This character is not found in
939% \textcite[2]{dmg}. It is taken from the \textcite{din31635} standard.} & 1035% \textcite[2]{dmg}. It is taken from the \textcite{din31635} standard.} &
940% \dmg{v} & \loc{v} & \brill{v} & \verb|v| \\ 1036% \dmg{v} & \loc{v} & \brill{v} & \verb|v| \\
941% \arb[novoc]{g} & \dmg{g} & \loc{g} & \brill{g} & \verb|g| \\ 1037% \arb[novoc]{g} & \dmg{g} & \loc{g} & \brill{g} & \verb|g| \\
942% \arb[novoc]{^n}\footnote{See \cref{fn:not-in-dmg}.} & \dmg{^n} & 1038% \arb[novoc]{^n}\footnote{See \vref{fn:not-in-dmg}.} & \dmg{^n} &
943% \loc{^n} & \brill{^n} & \verb|^n| \\ 1039% \loc{^n} & \brill{^n} & \verb|^n| \\
944% \end{longtable} 1040% \end{longtable}
945% \begin{quoting} 1041% \begin{remarks}
946% \textsc{Rem.} The alveolar consonants \arb[novoc]{^c} and 1042% \item[\textsc{Rem.}] The alveolar consonants \arb[novoc]{^c} and
947% \arb[novoc]{^z} are processed as solar letters by 1043% \arb[novoc]{^z} are processed as solar letters by
948% \package{arabluatex}. 1044% \package{arabluatex}.
949% \end{quoting} 1045% \end{remarks}
950% 1046%
951% \subsection{Vowels} 1047% \subsection{Vowels}
952% \subsubsection{Long vowels} 1048% \subsubsection{Long vowels}
953% \Cref{tab:arabtex-long-vowels} gives the Arab\TeX\ equivalents for 1049% \Vref{tab:arabtex-long-vowels} gives the Arab\TeX\ equivalents for
954% the Arabic long vowels. 1050% the Arabic long vowels.
955% 1051%
956% \begin{longtable}{lllll} 1052% \begin{longtable}{lllll}
957% \bottomrule 1053% \bottomrule
958% \caption*{\Cref*{tab:arabtex-long-vowels}: Standard Arab\TeX\ (long 1054% \caption[]{Standard Arab\TeX\ (long vowels)}
959% vowels)}
960% \endfoot 1055% \endfoot
961% \captionlistentry{Arab\TeX\ long vowels}\\[-1em]
962% \toprule 1056% \toprule
1057% \captionlistentry{Standard Arab\TeX\ (long vowels)}
963% Letter & \multicolumn{3}{l}{Transliteration\footnotemark} 1058% Letter & \multicolumn{3}{l}{Transliteration\footnotemark}
964% & Arab\TeX\ notation \\ 1059% & Arab\TeX\ notation \\
965% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 1060% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
966% \endfirsthead 1061% \endfirsthead
967% \toprule 1062% \toprule
968% Letter & \multicolumn{3}{l}{Transliteration} 1063% Letter & \multicolumn{3}{l}{Transliteration}
969% & Arab\TeX\ notation \\ 1064% & Arab\TeX\ notation \\
970% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 1065% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
971% \endhead \footnotetext{See below \vref{sec:transliteration}.} 1066% \endhead \footnotetext{See below \vref{sec:transliteration}.}
972% \label{tab:arabtex-long-vowels} 1067% \label{tab:arabtex-long-vowels}
973% \arb[novoc]{A} & \dmg{A} & \loc{A} & \brill{A} & \verb|A| \\ 1068% \arb[novoc]{A} & \dmg{A} & \loc{A} & \brill{A} & \verb|A| \\
@@ -982,10 +1077,10 @@
982% \arb[novoc]{B_i} & \dmg{B_i} & \loc{B_i} & \brill{B_i} & \verb|_i| \\ 1077% \arb[novoc]{B_i} & \dmg{B_i} & \loc{B_i} & \brill{B_i} & \verb|_i| \\
983% \end{longtable} 1078% \end{longtable}
984% 1079%
985% \begin{quoting} 1080% \begin{remarks}
986% \textsc{Rem.}~\emph{a.} The long vowels \arb[trans]{A, U, I}, 1081% \item The long vowels \arb[trans]{A, U, I}, otherwise called
987% otherwise called \arb[trans]{.hurUf-u 'l-madd-i}, \emph{the 1082% \arb[trans]{.hurUf-u 'l-madd-i}, \emph{the letters of
988% letters of prolongation}, involve the placing of the short vowels 1083% prolongation}, involve the placing of the short vowels
989% \arb[trans]{Ba, Bu, Bi} before the letters \arb[novoc]{A}, 1084% \arb[trans]{Ba, Bu, Bi} before the letters \arb[novoc]{A},
990% \arb[novoc]{U}, \arb[novoc]{I} respectively. \package{arabluatex} 1085% \arb[novoc]{U}, \arb[novoc]{I} respectively. \package{arabluatex}
991% does that automatically in case any from |voc|, |fullvoc| or 1086% does that automatically in case any from |voc|, |fullvoc| or
@@ -993,43 +1088,42 @@
993% \arb[voc]{qIla} \arb[trans]{qIla}, \arb[voc]{yaqUlu} 1088% \arb[voc]{qIla} \arb[trans]{qIla}, \arb[voc]{yaqUlu}
994% \arb[trans]{yaqUlu}. 1089% \arb[trans]{yaqUlu}.
995% 1090%
996% \textsc{Rem.}~\emph{b.} Defective writings, such as 1091% \item Defective writings, such as \arb[novoc]{B_a},
997% \arb[novoc]{B_a}, \arb[trans]{al-'alif-u 'l-ma.h_dUfaT-u}, or 1092% \arb[trans]{al-'alif-u 'l-ma.h_dUfaT-u}, or defective writings of
998% defective writings of \arb[trans]{B_u} and \arb[trans]{B_i} are 1093% \arb[trans]{B_u} and \arb[trans]{B_i} are encoded |_a| |_u| and
999% encoded |_a| |_u| and |_i| respectively, e.g. |_d_alika| 1094% |_i| respectively, e.g. |_d_alika| \arb[voc]{_d_alika},
1000% \arb[voc]{_d_alika}, |al-mal_a'ikaT-u| |'l-ra.hm_an-u| 1095% |al-mal_a'ikaT-u| |'l-ra.hm_an-u| \arb[voc]{al-mal_a'ikaT-u
1001% \arb[voc]{al-mal_a'ikaT-u 'l-ra.hm_an-u}, |.hu_dayfaT-u| |bn-u| 1096% 'l-ra.hm_an-u}, |.hu_dayfaT-u| |bn-u| |'l-yamAn_i|
1002% |'l-yamAn_i| \arb[fullvoc]{.hu_dayfaT-u bn-u 'l-yamAn_i} for 1097% \arb[fullvoc]{.hu_dayfaT-u bn-u 'l-yamAn_i} for
1003% \arb[trans]{\uc{.hu_dayfaT-u} bn-u 'l-\uc{yamAn_i}}, etc. 1098% \arb[trans]{\uc{.hu_dayfaT-u} bn-u 'l-\uc{yamAn_i}}, etc.
1004% 1099%
1005% \textsc{Rem.}~\emph{c.} The letter \arb[novoc]{y} with two points 1100% \item The letter \arb[novoc]{y} with two points below, \arb{al-yA'u
1006% below, \arb{al-yA'u 'l-mu_tannATu min ta.hti-hA}, may also be 1101% 'l-mu_tannATu min ta.hti-hA}, may also be written without
1007% written without diacritical points as \arb[novoc]{Y}. When it is 1102% diacritical points as \arb[novoc]{Y}. When it is used as a long
1008% used as a long vowel, it is encoded |iY|, where |i| recalls the 1103% vowel, it is encoded |iY|, where |i| recalls the
1009% \arb[trans]{kasraT} placed below the preceding letter in vocalized 1104% \arb[trans]{kasraT} placed below the preceding letter in vocalized
1010% Arabic, like so: |liY| \arb{liY} \arb[trans]{liY}, |yam^siY| 1105% Arabic, like so: |liY| \arb{liY} \arb[trans]{liY}, |yam^siY|
1011% \arb{yam^siY} \arb[trans]{yam^siY}. 1106% \arb{yam^siY} \arb[trans]{yam^siY}.
1012% \end{quoting} 1107% \end{remarks}
1013% 1108%
1014% \subsubsection{Short vowels} 1109% \subsubsection{Short vowels}
1015% \Cref{tab:arabtex-short-vowels} gives the Arab\TeX\ equivalents for 1110% \Vref{tab:arabtex-short-vowels} gives the Arab\TeX\ equivalents for
1016% the Arabic short vowels. 1111% the Arabic short vowels.
1017% 1112%
1018% \begin{longtable}{lllll} 1113% \begin{longtable}{lllll}
1019% \bottomrule 1114% \bottomrule
1020% \caption*{\Cref*{tab:arabtex-short-vowels}: Standard Arab\TeX\ 1115% \caption[]{Standard Arab\TeX\ (short vowels)}
1021% (short vowels)}
1022% \endfoot 1116% \endfoot
1023% \captionlistentry{Arab\TeX\ short vowels}\\[-1em]
1024% \toprule 1117% \toprule
1118% \captionlistentry{Standard Arab\TeX\ (short vowels)}
1025% Letter & \multicolumn{3}{l}{Transliteration\footnotemark} 1119% Letter & \multicolumn{3}{l}{Transliteration\footnotemark}
1026% & Arab\TeX\ notation \\ 1120% & Arab\TeX\ notation \\
1027% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 1121% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
1028% \endfirsthead 1122% \endfirsthead
1029% \toprule 1123% \toprule
1030% Letter & \multicolumn{3}{l}{Transliteration} 1124% Letter & \multicolumn{3}{l}{Transliteration}
1031% & Arab\TeX\ notation \\ 1125% & Arab\TeX\ notation \\
1032% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 1126% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
1033% \endhead \footnotetext{See below \vref{sec:transliteration}.} 1127% \endhead \footnotetext{See below \vref{sec:transliteration}.}
1034% \label{tab:arabtex-short-vowels} 1128% \label{tab:arabtex-short-vowels}
1035% \arb[voc]{Ba} & \dmg{Ba} & \loc{Ba} & \brill{Ba} & \verb|a| \\ 1129% \arb[voc]{Ba} & \dmg{Ba} & \loc{Ba} & \brill{Ba} & \verb|a| \\
@@ -1478,7 +1572,7 @@
1478% |al-.hamd-u| |li-l-l_ah-i| \arb[fullvoc]{al-.hamd-u li-l-l_ah-i} 1572% |al-.hamd-u| |li-l-l_ah-i| \arb[fullvoc]{al-.hamd-u li-l-l_ah-i}
1479% \arb[trans]{al-.hamd-u li-l-l_ah-i}. 1573% \arb[trans]{al-.hamd-u li-l-l_ah-i}.
1480% \end{quote} 1574% \end{quote}
1481% As said above on \cpageref{fullvoc-mode}, |fullvoc| is the mode 1575% As said above on \vpageref{fullvoc-mode}, |fullvoc| is the mode
1482% in which \package{arabluatex} expresses the \arb[trans]{sukUn} and 1576% in which \package{arabluatex} expresses the \arb[trans]{sukUn} and
1483% the \arb[trans]{wa.slaT}. \package{arabluatex} will take care of 1577% the \arb[trans]{wa.slaT}. \package{arabluatex} will take care of
1484% doing that automatically provided that the vowel which is to be 1578% doing that automatically provided that the vowel which is to be
@@ -1660,7 +1754,7 @@
1660% \enquote{pipe} and \vref{sec:transliteration} on |dmg| mode.} 1754% \enquote{pipe} and \vref{sec:transliteration} on |dmg| mode.}
1661% |al-l_ah-u| \arb[fullvoc]{yA| al-l_ah-u} \arb[trans]{yA| 1755% |al-l_ah-u| \arb[fullvoc]{yA| al-l_ah-u} \arb[trans]{yA|
1662% al-l_ah-u}, \verb+'a-fa|+\footnote{\label{fn:pipe-allah-02}See 1756% al-l_ah-u}, \verb+'a-fa|+\footnote{\label{fn:pipe-allah-02}See
1663% \cref{fn:pipe-allah-01}.}|-al-|\allowbreak|l_ah-i| 1757% \vref{fn:pipe-allah-01}.}|-al-|\allowbreak|l_ah-i|
1664% |la-ta.g`alanna| \arb[fullvoc]{'a-fa|-al-l_ah-i la-ta.g`alanna} 1758% |la-ta.g`alanna| \arb[fullvoc]{'a-fa|-al-l_ah-i la-ta.g`alanna}
1665% \arb[trans]{'a-fa|-al-l_ah-i la-ta.g`alanna}, 1759% \arb[trans]{'a-fa|-al-l_ah-i la-ta.g`alanna},
1666% |bi-'l-|\allowbreak|l_ah-i| \arb[fullvoc]{bi-'l-l_ah-i} 1760% |bi-'l-|\allowbreak|l_ah-i| \arb[fullvoc]{bi-'l-l_ah-i}
@@ -1852,27 +1946,26 @@
1852% analysis. \enquote{Quoting} that straight single quote character 1946% analysis. \enquote{Quoting} that straight single quote character
1853% like so: \meta{\texttt{"'}} allows to determine the carrier of the 1947% like so: \meta{\texttt{"'}} allows to determine the carrier of the
1854% \arb[trans]{hamzaT} freely, without any consideration for the 1948% \arb[trans]{hamzaT} freely, without any consideration for the
1855% context. \Cref{tab:quoted-hamza} gives the equivalents for all the 1949% context. \Vref{tab:quoted-hamza} gives the equivalents for all the
1856% possible carriers the \arb[trans]{hamzaT} may take. 1950% possible carriers the \arb[trans]{hamzaT} may take.
1857% 1951%
1858% \begin{longtable}{lllll} 1952% \begin{longtable}{lllll}
1859% \bottomrule 1953% \bottomrule
1860% \caption*{\Cref*{tab:quoted-hamza}: \enquote{Quoted} 1954% \caption[]{\enquote{Quoted} \arb[trans]{hamzaT}}
1861% \arb[trans]{hamzaT}}
1862% \endfoot 1955% \endfoot
1863% \captionlistentry{\enquote{Quoted} \arb[trans]{hamzaT}}\\[-1em] 1956% \toprule
1864% \toprule Letter & \multicolumn{3}{l}{Transliteration\footnotemark} 1957% \captionlistentry{\enquote{Quoted} \arb[trans]{hamzaT}}
1958% Letter & \multicolumn{3}{l}{Transliteration\footnotemark}
1865% & Arab\TeX\ notation \\ 1959% & Arab\TeX\ notation \\
1866% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 1960% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
1867% \endfirsthead 1961% \endfirsthead
1868% \toprule Letter & \multicolumn{3}{l}{Transliteration} 1962% \toprule Letter & \multicolumn{3}{l}{Transliteration}
1869% & Arab\TeX\ notation \\ 1963% & Arab\TeX\ notation \\
1870% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 1964% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
1871% \endhead 1965% \endhead
1872% \footnotetext{See below \vref{sec:transliteration}.} 1966% \footnotetext{See below \vref{sec:transliteration}.}
1873% \label{tab:quoted-hamza} 1967% \label{tab:quoted-hamza}
1874% \arb[novoc]{|"'} & \dmg{|"'} & \loc{|"'} & \brill{|"'} & \verb+|"'+ \\ 1968% \arb[novoc]{|"'} & \dmg{|"'} & \loc{|"'} & \brill{|"'} & \verb+|"'+ \\
1875% \pagebreak[1]
1876% \arb[novoc]{A"'} & \dmg{A"'} & \loc{A"'} & \brill{A"'} & \verb|A"'| \\ 1969% \arb[novoc]{A"'} & \dmg{A"'} & \loc{A"'} & \brill{A"'} & \verb|A"'| \\
1877% \arb[novoc]{a"'} & \dmg{a"'} & \loc{a"'} & \brill{a"'} & \verb|a"'| \\ 1970% \arb[novoc]{a"'} & \dmg{a"'} & \loc{a"'} & \brill{a"'} & \verb|a"'| \\
1878% \arb[novoc]{u"'} & \dmg{u"'} & \loc{u"'} & \brill{u"'} & \verb|u"'| \\ 1971% \arb[novoc]{u"'} & \dmg{u"'} & \loc{u"'} & \brill{u"'} & \verb|u"'| \\
@@ -1900,7 +1993,7 @@
1900% \arb[fullvoc]{'a`daA"'|"'ikum} \arb[trans]{'a`dA|"'ikum}. 1993% \arb[fullvoc]{'a`daA"'|"'ikum} \arb[trans]{'a`dA|"'ikum}.
1901% \end{quote} 1994% \end{quote}
1902% 1995%
1903% \subsection{\texorpdfstring{The \enquote{pipe} character 1996% \subsection{\texorpdfstring{The \enquote*{pipe} character
1904% (\textbar)}{The ‘pipe’ character (\textbar)}} 1997% (\textbar)}{The ‘pipe’ character (\textbar)}}
1905% \label{sec:pipe} 1998% \label{sec:pipe}
1906% In the terminology of Arab\TeX, the \enquote{pipe} character 1999% In the terminology of Arab\TeX, the \enquote{pipe} character
@@ -1923,11 +2016,11 @@
1923% \end{quote} 2016% \end{quote}
1924% As one can see, the \enquote{pipe} character between the two 2017% As one can see, the \enquote{pipe} character between the two
1925% \meta{n} prevents the necessary \arb[trans]{ta^sdId} rule 2018% \meta{n} prevents the necessary \arb[trans]{ta^sdId} rule
1926% (\cpageref{ref:necessary-tashdid}) from being applied. 2019% (\vpageref{ref:necessary-tashdid}) from being applied.
1927% 2020%
1928% \subsection{Putting back on broken contextual analysis rules} 2021% \subsection{Putting back on broken contextual analysis rules}
1929% \label{sec:arbnull} 2022% \label{sec:arbnull}
1930% \NEWfeature{v1.7} In complex documents such as critical editions 2023% \newfeature[v1.7] In complex documents such as critical editions
1931% where footnotes and other kind of annotations can be particularly 2024% where footnotes and other kind of annotations can be particularly
1932% abundant, the contextual analysis rules that are described above may 2025% abundant, the contextual analysis rules that are described above may
1933% be broken by \LaTeX\ commands. To take an example, consider the 2026% be broken by \LaTeX\ commands. To take an example, consider the
@@ -2023,6 +2116,34 @@
2023% |sanaT-i| |1024| \arb[voc]{fI sanaT-i 1024} 2116% |sanaT-i| |1024| \arb[voc]{fI sanaT-i 1024}
2024% \end{quote} 2117% \end{quote}
2025% 2118%
2119% \needspace{2\baselineskip}
2120% \DescribeMacro{\SetArbNumbers}\newfeature[v1.21]
2121% \phts\label{ref:arabic-numbers}
2122% \cs{SetArbNumbers}\verb+{Indian|Arabic}+ %
2123% \hfill\tcboxverb{Default: Indian}\\
2124% As described above, \package{arabluatex} prints Indian numbers by
2125% default. \cs{SetArbNumbers}|{Arabic}| can be used at any point of
2126% the document to have Arabic numbers printed. Furthermore,
2127% \cs{SetArbNumbers}|{Arabic}| gives control over the way numbers are
2128% to be printed by means of the |anum| font feature, like so:---
2129%
2130% \iffalse
2131%<*example>
2132% \fi
2133\begin{alcode}
2134 \usepackage{arabluatex}
2135 \SetArbNumbers{Arabic}
2136 % use '+anum' for Arabic numbers or '-anum' for Indian numbers:
2137 \newfontfamily\arabicfont{Amiri}[Script=Arabic, RawFeature={+anum}]
2138\end{alcode}
2139% \iffalse
2140%</example>
2141% \fi
2142%
2143% \danger \cs{SetArbNumbers} must be used \emph{outside} Arabic
2144% environments. Once used, this commands operates on subsequent Arabic
2145% environments.
2146%
2026% \subsubsection{The \emph{abjad}} 2147% \subsubsection{The \emph{abjad}}
2027% \label{sec:abjad} 2148% \label{sec:abjad}
2028% The numbers may also be expressed with letters from right to left 2149% The numbers may also be expressed with letters from right to left
@@ -2031,7 +2152,7 @@
2031% \arb[trans]{'abjad} numbers are usually distinguished from the 2152% \arb[trans]{'abjad} numbers are usually distinguished from the
2032% surrounding words by a stroke placed over them. 2153% surrounding words by a stroke placed over them.
2033% 2154%
2034% \DescribeMacro{\abjad} \NEWfeature{v.1.1} \arb[trans]{'abjad} 2155% \DescribeMacro{\abjad} \newfeature[v.1.1] \arb[trans]{'abjad}
2035% numbers are inserted with the \cs{abjad}\marg{number} command in any 2156% numbers are inserted with the \cs{abjad}\marg{number} command in any
2036% of the |voc|, |fullvoc| and |novoc| modes, where \meta{number} may 2157% of the |voc|, |fullvoc| and |novoc| modes, where \meta{number} may
2037% be any number between 1 and 1999, like so:--- 2158% be any number between 1 and 1999, like so:---
@@ -2040,35 +2161,35 @@
2040% kitAbu-hu fI 'l-`AdAt-i} \arb[trans]{\abjad{45} kitAbu-hu fI 2161% kitAbu-hu fI 'l-`AdAt-i} \arb[trans]{\abjad{45} kitAbu-hu fI
2041% 'l-`AdAt-i}. 2162% 'l-`AdAt-i}.
2042% \end{quote} 2163% \end{quote}
2043% \begin{quoting} 2164% \begin{remarks}
2044% \textsc{Rem.}~\emph{a.} As can be seen in the above given example, 2165% \item As can be seen in the above given example,
2045% \package{arabluatex} expresses the \arb[trans]{'abjad} numbers in 2166% \package{arabluatex} expresses the \arb[trans]{'abjad} numbers in
2046% Roman numerals if it finds the \cs{abjad} command in any of the 2167% Roman numerals if it finds the \cs{abjad} command in any of the
2047% transliteration modes. 2168% transliteration modes.
2048% 2169%
2049% \textsc{Rem.}~\emph{b.} \cs{abjad} may also be found outside 2170% \item \cs{abjad} may also be found outside Arabic environments. In
2050% Arabic environments. In that case, \package{arabluatex} does not 2171% that case, \package{arabluatex} does not print the stroke as a
2051% print the stroke as a distinctive mark over the number for it is 2172% distinctive mark over the number for it is not surrounded by other
2052% not surrounded by other Arabic words. In case one nonetheless 2173% Arabic words. In case one nonetheless wishes to print the stroke,
2053% wishes to print the stroke, he can either use the \cs{aemph} 2174% he can either use the \cs{aoline*} command that is described below
2054% command that is described below in \vref{sec:emphasis} or insert 2175% in \vref{sec:underlining} or insert the \arb[trans]{'ab^gad}
2055% the \arb[trans]{'ab^gad} number in |\arb[novoc]{}|:--- 2176% number in |\arb[novoc]{}|:---
2056% \begin{quote} 2177% \begin{quote}
2057% |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is| 2178% |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is|
2058% |\abjad{1874}| The \arb[trans]{'abjad} number for 1874 is 2179% |\abjad{1874}| The \arb[trans]{'abjad} number for 1874 is
2059% \abjad{1874}. 2180% \abjad{1874}.
2060% 2181%
2061% |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is| 2182% |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is|
2062% |\aemph*{\abjad{1874}}| The \arb[trans]{'abjad} number for 1874 2183% |\aoline*{\abjad{1874}}| The \arb[trans]{'abjad} number for 1874
2063% is \aemph*{\abjad{1874}}. 2184% is \aoline*{\abjad{1874}}.
2064% 2185%
2065% |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is| 2186% |The| |\arb[trans]{'abjad}| |number| |for| |1874| |is|
2066% |\arb[novoc]{\abjad{1874}}| The \arb[trans]{'abjad} number for 2187% |\arb[novoc]{\abjad{1874}}| The \arb[trans]{'abjad} number for
2067% 1874 is \arb[novoc]{\abjad{1874}}. 2188% 1874 is \arb[novoc]{\abjad{1874}}.
2068% \end{quote} 2189% \end{quote}
2069% \end{quoting} 2190% \end{remarks}
2070% 2191%
2071% \NEWfeature{v1.12}\cs{abjad} may also be used to convert values of 2192% \newfeature[v1.12]\cs{abjad} may also be used to convert values of
2072% counters into \arb[trans]{'ab^gad} numbers, like so:--- % 2193% counters into \arb[trans]{'ab^gad} numbers, like so:--- %
2073% \changes{v1.12}{2018/06/24}{\cs{abjad} can now process \LaTeX\ 2194% \changes{v1.12}{2018/06/24}{\cs{abjad} can now process \LaTeX\
2074% counters}% 2195% counters}%
@@ -2100,19 +2221,18 @@
2100% For the time being, the following is included:--- 2221% For the time being, the following is included:---
2101% \begin{longtable}{lllll} 2222% \begin{longtable}{lllll}
2102% \bottomrule 2223% \bottomrule
2103% \caption*{\Cref*{tab:additional-arabic-codings}: Additional Arabic 2224% \caption[]{Additional Arabic codings}
2104% codings}
2105% \endfoot 2225% \endfoot
2106% \captionlistentry{Additional Arabic codings}\\[-1em]
2107% \toprule 2226% \toprule
2227% \captionlistentry{Additional Arabic codings}
2108% Letter & \multicolumn{3}{l}{Transliteration\footnotemark} 2228% Letter & \multicolumn{3}{l}{Transliteration\footnotemark}
2109% & Arab\TeX\ notation \\ 2229% & Arab\TeX\ notation \\
2110% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 2230% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
2111% \endfirsthead 2231% \endfirsthead
2112% \toprule 2232% \toprule
2113% Letter & \multicolumn{3}{l}{Transliteration} 2233% Letter & \multicolumn{3}{l}{Transliteration}
2114% & Arab\TeX\ notation \\ 2234% & Arab\TeX\ notation \\
2115% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} \\ \midrule 2235% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} \\ \midrule
2116% \endhead \footnotetext{See below \vref{sec:transliteration}.} 2236% \endhead \footnotetext{See below \vref{sec:transliteration}.}
2117% \label{tab:additional-arabic-codings} 2237% \label{tab:additional-arabic-codings}
2118% \arb[novoc]{.b} & \dmg{.b} & \loc{.b} & \brill{.b} & |.b| \\ 2238% \arb[novoc]{.b} & \dmg{.b} & \loc{.b} & \brill{.b} & |.b| \\
@@ -2120,8 +2240,16 @@
2120% \arb[novoc]{.f} & \dmg{.f} & \loc{.f} & \brill{.f} & |.f| \\ 2240% \arb[novoc]{.f} & \dmg{.f} & \loc{.f} & \brill{.f} & |.f| \\
2121% \arb[novoc]{.q} & \dmg{.q} & \loc{.q} & \brill{.q} & |.q| \\ 2241% \arb[novoc]{.q} & \dmg{.q} & \loc{.q} & \brill{.q} & |.q| \\
2122% \arb[novoc]{.k} & \dmg{.k} & \loc{.k} & \brill{.k} & |.k| \\ 2242% \arb[novoc]{.k} & \dmg{.k} & \loc{.k} & \brill{.k} & |.k| \\
2123% \pagebreak[1]
2124% \arb[novoc]{.n} & \dmg{.n} & \loc{.n} & \brill{.n} & |.n| \\ 2243% \arb[novoc]{.n} & \dmg{.n} & \loc{.n} & \brill{.n} & |.n| \\
2244% \arb[novoc]{H} & \dmg{aH} & \loc{aH} & \brill{aH} &
2245% |H|\footnote{This letter can be used to encode the \arb[trans]{tA'
2246% marbUtaT} devoid of diacritical points as it is found in some
2247% manuscripts, with the same \arb[trans]{tanwIn} and the same
2248% short vowels as the standard \arb[trans]{tA' marbUtaT} with two
2249% points above, e. g. |al-madInaHa|, |madInaHaN|, \arb{al-madInaHa},
2250% \arb{madInaHaN}.} \\
2251% \arb[novoc]{.y} & \dmg{.y} & \loc{.y} & \brill{.y} &
2252% |.y|\footnote{See above \vref{ref:dotless-ya}.} \\
2125% \arb[novoc]{((} & \dmg{((} & \loc{((} & \brill{((} & |((| \\ 2253% \arb[novoc]{((} & \dmg{((} & \loc{((} & \brill{((} & |((| \\
2126% \arb[novoc]{))} & \dmg{))} & \loc{))} & \brill{))} & |))| \\ 2254% \arb[novoc]{))} & \dmg{))} & \loc{))} & \brill{))} & |))| \\
2127% \end{longtable} 2255% \end{longtable}
@@ -2148,36 +2276,52 @@
2148% \arb[trans]{\abjad{45}: kitAbu-hu \aemph{fI 'l-\uc{`AdAt-i}}}. 2276% \arb[trans]{\abjad{45}: kitAbu-hu \aemph{fI 'l-\uc{`AdAt-i}}}.
2149% \end{quote} 2277% \end{quote}
2150% 2278%
2151% \begin{quoting} 2279% \begin{remarks}
2152% \textsc{Rem.}~\emph{a.} As the above example shows, 2280% \item As the above example shows, \package{arabluatex} places the
2153% \package{arabluatex} places the horizontal stroke \emph{under} the 2281% horizontal stroke \emph{under} the emphasized words in any of the
2154% emphasized words in any of the transliteration modes. 2282% transliteration modes.
2155% 2283%
2156% \textsc{Rem.}~\emph{b.} \NEWfeature{v1.9.2}\DescribeMacro{\aemph*} 2284% \item \newfeature[v1.9.2]\DescribeMacro{\aemph*} \cs{aemph*} is also
2157% \cs{aemph*} is also provided should one wish to always have the 2285% provided should one wish to always have the horizontal stroke
2158% horizontal stroke printed over the emphasized words, like so: 2286% printed over the emphasized words, like so: |\abjad{45}:|
2159% |\abjad{45}:| |kitAbu-hu| |\aemph*{fI| |'l-`AdAt-i}| 2287% |kitAbu-hu| |\aemph*{fI| |'l-`AdAt-i}| \arb[voc]{\abjad{45}:
2160% \arb[voc]{\abjad{45}: kitAbu-hu \aemph*{fI 'l-`AdAt-i}} 2288% kitAbu-hu \aemph*{fI 'l-`AdAt-i}} \arb[trans]{\abjad{45}:
2161% \arb[trans]{\abjad{45}: kitAbu-hu \aemph*{fI 'l-\uc{`AdAt-i}}}. 2289% kitAbu-hu \aemph*{fI 'l-\uc{`AdAt-i}}}.
2162% \end{quoting} 2290% \end{remarks}
2163% 2291%
2292% \subsubsection{Underlining words or numbers}
2293% \label{sec:underlining}
2294% \DescribeMacro{\aoline}%
2295% \DescribeMacro{\aoline*}%
2296% \DescribeMacro{\auline}%
2297% \newfeature[v1.19]Three additional, non context-sensitive commands
2298% are provided to distinguish words or numbers:---
2299% \begin{enumerate}
2300% \item \cs{aoline}, which is equivalent to \cs{aemph*} described
2301% above.
2302% \item \cs{aoline*}, which is the same as \cs{aoline}, but better
2303% suited for \arb[trans]{'ab^gad} numbers.\footnote{See the example
2304% provided above \vref{sec:abjad}.}
2305% \item \cs{auline}, which can be used to underline Arabic words.
2306% \end{enumerate}
2307%
2164% \section{Arabic poetry} 2308% \section{Arabic poetry}
2165% \label{sec:poetry} 2309% \label{sec:poetry}
2166% \NEWfeature{v1.6} \package{arabluatex} provides a special 2310% \newfeature[v1.6] \package{arabluatex} provides a special
2167% environment for typesetting Arabic poetry. Every line in this 2311% environment for typesetting Arabic poetry. Every line in this
2168% environment must end with |\\|. 2312% environment must end with |\\|.
2169% 2313%
2170% \DescribeEnv{arabverse} The |arabverse| environment may take up to 2314% \DescribeEnv{arabverse} The |arabverse| environment may take up to
2171% six optional \enquote*{named arguments} each of which is set using 2315% eight optional \enquote*{named arguments} each of which is set using
2172% the syntax \meta{key}$=$\meta{value}, like so:---% 2316% the syntax \meta{key}$=$\meta{value}, like so:---%
2173% \iffalse 2317% \iffalse
2174%<*example> 2318%<*example>
2175% \fi 2319% \fi
2176\begin{code} 2320\begin{alcode}
2177 \begin{arabverse}[key1=value1, key2=value2, ...] 2321 \begin{arabverse}[key1=value1, key2=value2, ...]
2178 <verses> 2322 <verses>
2179 \end{arabverse} 2323 \end{arabverse}
2180\end{code} 2324\end{alcode}
2181% \iffalse 2325% \iffalse
2182%</example> 2326%</example>
2183% \fi 2327% \fi
@@ -2226,13 +2370,13 @@
2226% 2370%
2227% \DescribeOption{color} |color|$=$\meta{color name} 2371% \DescribeOption{color} |color|$=$\meta{color name}
2228% \hfill\tcboxverb{Default: not set}\\ 2372% \hfill\tcboxverb{Default: not set}\\
2229% \NEWfeature{v1.13} The color in which lines of poetry are to be 2373% \newfeature[v1.13] The color in which lines of poetry are to be
2230% rendered. 2374% rendered.
2231% 2375%
2232% \label{ref:poetry-export} 2376% \label{ref:poetry-export}
2233% \DescribeOption{export} |export|$=$|true|\verb+|+|false| 2377% \DescribeOption{export} |export|$=$|true|\verb+|+|false|
2234% \hfill\tcboxverb{Default: false}\\ 2378% \hfill\tcboxverb{Default: false}\\
2235% \NEWfeature{v.1.13} This named argument does not need a value as it 2379% \newfeature[v.1.13] This named argument does not need a value as it
2236% defaults to |true| if it is used. If |export| is set as a global 2380% defaults to |true| if it is used. If |export| is set as a global
2237% option as well (see above \vpageref{export-mode}), all the lines 2381% option as well (see above \vpageref{export-mode}), all the lines
2238% will be converted to Unicode and exported to the external selected 2382% will be converted to Unicode and exported to the external selected
@@ -2246,8 +2390,9 @@
2246% when \texttt{export} is set to \texttt{true} to instruct some Lua 2390% when \texttt{export} is set to \texttt{true} to instruct some Lua
2247% functions that lines of poetry have already been processed. That 2391% functions that lines of poetry have already been processed. That
2248% aside, \cs{bayt} and \cs{bayt*} do the same, and only \cs{bayt} 2392% aside, \cs{bayt} and \cs{bayt*} do the same, and only \cs{bayt}
2249% should be used.} Additionally, every \cs{bayt} command \emph{must} 2393% should be used.} Additionally, every \cs{bayt} command \emph{must}
2250% be followed with |\\| like so:---% 2394% be followed with |\\| like so:---
2395%
2251% \iffalse 2396% \iffalse
2252%<*example> 2397%<*example>
2253% \fi 2398% \fi
@@ -2350,6 +2495,20 @@
2350% warping may be even more perceptible in Roman than in Arabic 2495% warping may be even more perceptible in Roman than in Arabic
2351% characters. 2496% characters.
2352% 2497%
2498% \DescribeMacro{\StretchBayt} \cs{StretchBayt}\verb+[true|false]+
2499% \hfill\tcboxverb{Default: true}\\
2500% \newfeature[v1.20] \cs{StretchBayt} takes one optional argument,
2501% either |true| or |false| and can be used to remove the stretching
2502% form lines of Arabic poetry. As a side effect, there will be more
2503% space between words, but this can be compensated by inserting double
2504% hyphens between letters (on this technique, see
2505% \vref{sec:tatwil}). Should it be desired to extend further the
2506% strokes, four hyphens may be inserted (|----|), viz. a multiple of
2507% two. \cs{StretchBayt} may be used at any point of the document, even
2508% between two subsequent lines of poetry. Note that
2509% \cs{StretchBayt}|[false]| may require to carefully adjust the width
2510% of the hemistichs to avoid overlapping.
2511%
2353% \paragraph{Footnotes} 2512% \paragraph{Footnotes}
2354% Footnotes are not set by default inside the \cs{bayt} command, but 2513% Footnotes are not set by default inside the \cs{bayt} command, but
2355% there are two easy ways to have them printed. 2514% there are two easy ways to have them printed.
@@ -2368,6 +2527,16 @@
2368% package can also be used for the same effect. However, it must be 2527% package can also be used for the same effect. However, it must be
2369% loaded \emph{after} \package{arabluatex}.} 2528% loaded \emph{after} \package{arabluatex}.}
2370% 2529%
2530% \needspace{3\baselineskip}
2531% \paragraph{Critical Notes}
2532% \DescribeMacro{\bayt+} \newfeature[v1.21] If the \pkg{ekdosis}
2533% package be loaded,\footcite{pkg:ekdosis} the \cs{bayt} command also
2534% accepts a |+| optional argument that can be used to let critical
2535% notes be inserted in lines of poetry. Details on how to use this
2536% command are provided in the relevant section of the documentation of
2537% the \pkg{ekdosis} package.\footcite[\nopp see \enquote{Arabic
2538% Poetry}]{pkg:ekdosis}
2539%
2371% \paragraph{Line numbering} 2540% \paragraph{Line numbering}
2372% Inside the |arabverse| environment, the |linenumbers| environment of 2541% Inside the |arabverse| environment, the |linenumbers| environment of
2373% the \package{lineno} package can be used to have the lines of 2542% the \package{lineno} package can be used to have the lines of
@@ -2390,7 +2559,7 @@
2390% \iffalse 2559% \iffalse
2391%<*example> 2560%<*example>
2392% \fi 2561% \fi
2393\begin{code} 2562\begin{alcode}
2394 \begin{arab}[fullvoc] 2563 \begin{arab}[fullvoc]
2395 qAla imru'u 'l-\uc{q}aysi fI mu`allaqati-hi: 2564 qAla imru'u 'l-\uc{q}aysi fI mu`allaqati-hi:
2396 \end{arab} 2565 \end{arab}
@@ -2399,7 +2568,7 @@
2399 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}] 2568 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}]
2400 \SetArbDflt* 2569 \SetArbDflt*
2401 \begin{linenumbers*} 2570 \begin{linenumbers*}
2402 \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-saq.ti 2571 \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-siq.ti
2403 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\ 2572 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\
2404 \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`fu 2573 \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`fu
2405 rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\ 2574 rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\
@@ -2410,13 +2579,16 @@
2410 \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna 2579 \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna
2411 lA tahlik 'asaN_A wa-ta^gammali}\\ 2580 lA tahlik 'asaN_A wa-ta^gammali}\\
2412 \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda 2581 \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda
2413 rasmiN dAsiriN min mu`awwali}\\ 2582 rasmiN dArisiN min mu`awwali}\\
2414 \end{linenumbers*} 2583 \end{linenumbers*}
2415 \end{arabverse} 2584 \end{arabverse}
2416\end{code} 2585\end{alcode}
2417% \iffalse 2586% \iffalse
2418%</example> 2587%</example>
2419% \fi% 2588% \fi%
2589%
2590% \medskip
2591% \noindent\textbf{\cs{StretchBayt}|[true]| (Default)}:---
2420% \begin{arab}[fullvoc] 2592% \begin{arab}[fullvoc]
2421% qAla imru'u 'l-\uc{q}aysi fI mu`allaqati-hi: 2593% qAla imru'u 'l-\uc{q}aysi fI mu`allaqati-hi:
2422% \end{arab} 2594% \end{arab}
@@ -2425,19 +2597,18 @@
2425% 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.25\linewidth] 2597% 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.25\linewidth]
2426% \SetArbDflt* 2598% \SetArbDflt*
2427% \begin{linenumbers*} 2599% \begin{linenumbers*}
2428% \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-saq.ti 2600% \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-siq.ti
2429% 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\ 2601% 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\
2430% \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`fu 2602% \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`fu
2431% rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\ 2603% rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\
2432% \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA 2604% \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA
2433% ka-'anna-hu .habbu fulfuli}\\ 2605% ka-'anna-hu .habbu fulfuli}\\
2434% \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A 2606% \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A
2435% samurAti 2607% samurAti 'l-.hayyi nAqifu .han.zali}\\
2436% 'l-.hayyi nAqifu .han.zali}\\
2437% \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA 2608% \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA
2438% tahlik 'asaN_A wa-ta^gammali}\\ 2609% tahlik 'asaN_A wa-ta^gammali}\\
2439% \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN 2610% \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN
2440% dAsiriN min mu`awwali}\\ 2611% dArisiN min mu`awwali}\\
2441% \end{linenumbers*} 2612% \end{linenumbers*}
2442% \end{arabverse} 2613% \end{arabverse}
2443% 2614%
@@ -2451,22 +2622,79 @@
2451% 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.4\linewidth] 2622% 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.4\linewidth]
2452% \SetArbDflt* 2623% \SetArbDflt*
2453% \begin{linenumbers*} 2624% \begin{linenumbers*}
2454% \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-saq.ti 2625% \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-siq.ti
2455% 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\ 2626% 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\
2456% \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`fu 2627% \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`fu
2457% rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\ 2628% rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\
2458% \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA 2629% \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA
2459% ka-'anna-hu .habbu fulfuli}\\ 2630% ka-'anna-hu .habbu fulfuli}\\
2460% \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A 2631% \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A
2461% samurAti 2632% samurAti 'l-.hayyi nAqifu .han.zali}\\
2462% 'l-.hayyi nAqifu .han.zali}\\
2463% \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA 2633% \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA
2464% tahlik 'asaN_A wa-ta^gammali}\\ 2634% tahlik 'asaN_A wa-ta^gammali}\\
2465% \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN 2635% \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN
2466% dAsiriN min mu`awwali}\\ 2636% dArisiN min mu`awwali}\\
2467% \end{linenumbers*} 2637% \end{linenumbers*}
2468% \end{arabverse} 2638% \end{arabverse}
2469% 2639%
2640% \medskip
2641% \noindent\textbf{\cs{StretchBayt}|[false]|}:---
2642% \StretchBayt[false]\\
2643% In what follows, |width| has been set to |0.3\linewidth| and double
2644% hyphens have been inserted between some letters to prolong their
2645% horizontal strokes.
2646% \begin{arab}[fullvoc]
2647% qAla imru'u 'l-\uc{q}aysi fI mu`allaqati-hi:
2648% \end{arab}
2649%
2650% \begin{arabverse}[mode=fullvoc, metre={(al-.darbu 'l-_tAnI mina
2651% 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.3\linewidth]
2652% \SetArbDflt*
2653% \begin{linenumbers*}
2654% \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-siq.ti
2655% 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\
2656% \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`--fu
2657% rasmu---hA}{limA nasa^gat-hA mi--n ^gan----UbiN wa-^sam'ali}\\
2658% \bayt{ta--r_A ba--`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI--`Ani-hA
2659% ka-'anna---hu .ha----bbu fu--{l}--fu----li}\\
2660% \bayt{ka-'annI .ga--dATa 'l-bay--ni ya--wma ta.hammalUA}{lad_A
2661% samurAti 'l-.hayyi nAqifu .han.zali}\\
2662% \bayt{wuq--UfaN bi-hA .sa.hbI `a--layya ma--.tiyya---hu--m}
2663% {ya--q--Ul--Una lA tahli--k 'asaN_A wa-ta^gamma----li}\\
2664% \bayt{wa-'inna ^si----f----A'I `a--{b}----raTuN muharAqa----TuN}
2665% {fa---ha--l `inda rasmiN dArisiN min mu`awwali}\\
2666% \end{linenumbers*}
2667% \end{arabverse}
2668%
2669% \medskip
2670%
2671% In what follows, |width| has been set to |0.375\linewidth| and
2672% |\scriptsize| has been used so as to avoid overlapping.
2673% \begin{arab}[trans]
2674% qAla imru'u 'l-\uc{q}aysi fI mu`allaqati-hi:
2675% \end{arab}
2676%
2677% \begin{arabverse}[mode=trans, metre={(al-.darbu 'l-_tAnI mina
2678% 'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.375\linewidth]
2679% \SetArbDflt*
2680% \scriptsize
2681% \begin{linenumbers*}
2682% \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-siq.ti
2683% 'l-liw_A bayna \uc{'l-d}a_hUli fa-\uc{.h}awmali}\\
2684% \bayt{fa-\uc{t}U.di.ha fa-'l-\uc{m}iqrATi lam ya`fu
2685% rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\
2686% \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA
2687% ka-'anna-hu .habbu fulfuli}\\
2688% \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A
2689% samurAti 'l-.hayyi nAqifu .han.zali}\\
2690% \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA
2691% tahlik 'asaN_A wa-ta^gammali}\\
2692% \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN
2693% dArisiN min mu`awwali}\\
2694% \end{linenumbers*}
2695% \end{arabverse}
2696% \StretchBayt[true]
2697%
2470% \section{Special applications} 2698% \section{Special applications}
2471% \label{sec:special-applications} 2699% \label{sec:special-applications}
2472% \phantomsection 2700% \phantomsection
@@ -2484,7 +2712,7 @@
2484% 2712%
2485% \paragraph{Brackets} 2713% \paragraph{Brackets}
2486% \phantomsection 2714% \phantomsection
2487% \NEWfeature{v1.4.3} The various bracket symbols are useful in 2715% \newfeature[v1.4.3] The various bracket symbols are useful in
2488% technical documents such as critical editions for indicating that 2716% technical documents such as critical editions for indicating that
2489% some words or some letters must be added or 2717% some words or some letters must be added or
2490% removed. \package{arabluatex} will automatically fit those symbols 2718% removed. \package{arabluatex} will automatically fit those symbols
@@ -2522,18 +2750,18 @@
2522% \arb[trans]{\uc{qur'An}} or in classical poetry. 2750% \arb[trans]{\uc{qur'An}} or in classical poetry.
2523% 2751%
2524% \DescribeMacro{\arbmark} 2752% \DescribeMacro{\arbmark}
2525% \NEWfeature{v1.11}\cs{arbmark}\oarg{rl\textbar{}lr}\marg{shorthand} 2753% \newfeature[v1.11]\cs{arbmark}\oarg{rl\textbar{}lr}\marg{shorthand}
2526% can be used to insert such characters either in Unicode or in 2754% can be used to insert such characters either in Unicode or in
2527% romanized Arabic environments. It takes as argument a shorthand 2755% romanized Arabic environments. It takes as argument a shorthand
2528% defined beforehand in a default list which consists of the following 2756% defined beforehand in a default list which consists of the following
2529% at the time of writing:---\\ 2757% at the time of writing:---
2758%
2530% \begin{longtable}{llp{.3\linewidth}p{.3\linewidth}} 2759% \begin{longtable}{llp{.3\linewidth}p{.3\linewidth}}
2531% \bottomrule 2760% \bottomrule
2532% \caption*{\Cref*{tab:arabtex-additional-marks}: Additional Arabic 2761% \caption[]{Additional Arabic marks}
2533% marks}
2534% \endfoot 2762% \endfoot
2535% \captionlistentry{Additional Arabic marks}\\[-1em]
2536% \toprule 2763% \toprule
2764% \captionlistentry{Additional Arabic marks}
2537% Codepoint & Shorthand & Glyph & Transliteration \\ \midrule 2765% Codepoint & Shorthand & Glyph & Transliteration \\ \midrule
2538% \endfirsthead 2766% \endfirsthead
2539% \toprule 2767% \toprule
@@ -2546,12 +2774,12 @@
2546% |FDFB| & |jalla| & \arb{\arbmark{jalla}} & \arbmark{jalla} \\ 2774% |FDFB| & |jalla| & \arb{\arbmark{jalla}} & \arbmark{jalla} \\
2547% \end{longtable} 2775% \end{longtable}
2548% 2776%
2549% \NEWfeature{v1.13} 2777% \newfeature[v1.13]
2550% The mark to be inserted is determined by contextual analysis, or by 2778% The mark to be inserted is determined by contextual analysis, or by
2551% an optional argument, either |rl| to have the Arabic glyph printed, 2779% an optional argument, either |rl| to have the Arabic glyph printed,
2552% or |lr| to print the tranliterated equivalent. 2780% or |lr| to print the tranliterated equivalent.
2553% 2781%
2554% \DescribeMacro{\newarbmark} \NEWfeature{v1.11} \cs{newarbmark} is 2782% \DescribeMacro{\newarbmark} \newfeature[v1.11] \cs{newarbmark} is
2555% also provided should one wish to define new marks in addition to the 2783% also provided should one wish to define new marks in addition to the
2556% marks defined above. This command takes three arguments, like so:--- 2784% marks defined above. This command takes three arguments, like so:---
2557% \arabluabox{\cs{newarbmark}\marg{shorthand}\marg{RTL 2785% \arabluabox{\cs{newarbmark}\marg{shorthand}\marg{RTL
@@ -2615,6 +2843,44 @@
2615%</example> 2843%</example>
2616% \fi 2844% \fi
2617% 2845%
2846% \paragraph{\texorpdfstring{The \enquote*{Zero width joiner}
2847% character (\texttt{U+200D})}%
2848% {The ‘Zero width joiner’ character (\texttt{U+200D})}}
2849% \phantomsection%
2850% \newfeature[v1.18]%
2851% The \enquote*{Zero width joiner} character (|U+200D|) belongs to the
2852% \enquote*{General Punctuation} block (range |2000|--|206F|) of the
2853% Unicode standard. It is a non-printing character which, when it is
2854% placed between two characters that would for some reason not be
2855% connected, causes them to be printed in their connected forms.
2856%
2857% It is encoded |&| in Arab\TeX\ scheme.
2858%
2859% In elegantly printed books where many of the letters are interwoven
2860% with one another so as to form ligatures, it may be convenient to
2861% bring the letters into line in some instances. In the following
2862% example, the \enquote*{zero width joiner} is used to prevent two
2863% adjacent letters, viz.\ \arb[novoc]{s} and \arb[novoc]{.h}, from
2864% standing one above the other in the name of \prname{'is.h_aq}
2865% (\arb[fullvoc]{'is.h_aq"}):\footnote{\cs{underLine} and
2866% \cs{highLight} are taken from the \package{lua-ul} package which is
2867% loaded by \package{arabluatex}. See \textcite{pkg:lua-ul}.}---
2868% \iffalse
2869%<*example>
2870% \fi
2871\begin{example}
2872 \begin{arab}[fullvoc]
2873 huwa 'abU zaydiN .hunaynu bnu 'is&\underLine{&.h_a}qa
2874 'l-`a\underLine{bA}diyyu bi-fat.hi 'l-`ayni wa-ta_hfIfi 'l-bA'i.
2875
2876 huwa 'abU zaydiN .hunaynu bnu 'is&\highLight{&.h_a}qa
2877 'l-`a\highLight{bA}diyyu bi-fat.hi 'l-`ayni wa-ta_hfIfi 'l-bA'i.
2878 \end{arab}
2879\end{example}
2880% \iffalse
2881%</example>
2882% \fi
2883%
2618% \subsection{\texorpdfstring{The \prname{qur'An}}{The Qurʾān}} 2884% \subsection{\texorpdfstring{The \prname{qur'An}}{The Qurʾān}}
2619% \label{sec:the-quran} 2885% \label{sec:the-quran}
2620% This sub-part is destined to become a part of its own, as fine 2886% This sub-part is destined to become a part of its own, as fine
@@ -2623,7 +2889,7 @@
2623% new Arabic modes will be available as \package{arabluatex} will 2889% new Arabic modes will be available as \package{arabluatex} will
2624% mature. 2890% mature.
2625% 2891%
2626% \DescribeMacro{\ayah}\NEWfeature{v1.15}For the time being, 2892% \DescribeMacro{\ayah}\newfeature[v1.15]For the time being,
2627% \cs{ayah}\marg{3-digit number} is provided so as to typeset the 2893% \cs{ayah}\marg{3-digit number} is provided so as to typeset the
2628% number of the \arb[trans]{'AyaT} that it is referred to inside the 2894% number of the \arb[trans]{'AyaT} that it is referred to inside the
2629% dedicated mark---Unicode |U+06DD|: \txarb{^^^^06dd}---in Arabic 2895% dedicated mark---Unicode |U+06DD|: \txarb{^^^^06dd}---in Arabic
@@ -2679,7 +2945,7 @@
2679% 2945%
2680% \section{Color} 2946% \section{Color}
2681% \label{sec:color} 2947% \label{sec:color}
2682% \NEWfeature{v1.12}\package{arabluatex} is able to render in color 2948% \newfeature[v1.12]\package{arabluatex} is able to render in color
2683% either words, parts of words or diacritics. As the techniques 2949% either words, parts of words or diacritics. As the techniques
2684% implemented in this section may lead to some complexity, the reader 2950% implemented in this section may lead to some complexity, the reader
2685% should first become well acquainted with the following 2951% should first become well acquainted with the following
@@ -2730,6 +2996,7 @@
2730% shape of the letters while coloring them:--- 2996% shape of the letters while coloring them:---
2731% \begin{quote}\textbf{\enquote*{voc} mode}:\\ 2997% \begin{quote}\textbf{\enquote*{voc} mode}:\\
2732% |i^stara\arbcolor[brown]{y}tu-hu| |bi-_tama\arbcolor[red]{niN}| 2998% |i^stara\arbcolor[brown]{y}tu-hu| |bi-_tama\arbcolor[red]{niN}|
2999% \\
2733% |'a`\arbcolor[blue]{^ga}ba-ka| 3000% |'a`\arbcolor[blue]{^ga}ba-ka|
2734% \arb{i^stara\arbcolor[brown]{y}tu-hu bi-_tama\arbcolor[red]{niN} 3001% \arb{i^stara\arbcolor[brown]{y}tu-hu bi-_tama\arbcolor[red]{niN}
2735% 'a`\arbcolor[blue]{^ga}ba-ka} 3002% 'a`\arbcolor[blue]{^ga}ba-ka}
@@ -2738,6 +3005,7 @@
2738% \end{quote} 3005% \end{quote}
2739% \begin{quote}\textbf{\enquote*{fullvoc} mode}:\\ 3006% \begin{quote}\textbf{\enquote*{fullvoc} mode}:\\
2740% |i^stara\arbcolor[brown]{y}tu-hu| |bi-_tama\arbcolor[red]{niN}| 3007% |i^stara\arbcolor[brown]{y}tu-hu| |bi-_tama\arbcolor[red]{niN}|
3008% \\
2741% |'a`\arbcolor[blue]{^ga}ba-ka| 3009% |'a`\arbcolor[blue]{^ga}ba-ka|
2742% \arb[fullvoc]{i^stara\arbcolor[brown]{y}tu-hu 3010% \arb[fullvoc]{i^stara\arbcolor[brown]{y}tu-hu
2743% bi-_tama\arbcolor[red]{niN} 'a`\arbcolor[blue]{^ga}ba-ka} 3011% bi-_tama\arbcolor[red]{niN} 'a`\arbcolor[blue]{^ga}ba-ka}
@@ -2760,29 +3028,26 @@
2760% applying colors to bare diacritics requires them to have specific 3028% applying colors to bare diacritics requires them to have specific
2761% encodings. 3029% encodings.
2762% 3030%
2763% \Cref{tab:arbcolor-diacritics} gives the Arab\TeX\ equivalents for 3031% \Vref{tab:arbcolor-diacritics} gives the Arab\TeX\ equivalents for
2764% the diacritics to be printed inside or just after \cs{arbcolor}. 3032% the diacritics to be printed inside or just after \cs{arbcolor}.
2765% 3033%
2766% \needspace{7\baselineskip}
2767% \begin{longtable}{lllll} 3034% \begin{longtable}{lllll}
2768% \bottomrule 3035% \bottomrule
2769% \caption*{\Cref*{tab:arbcolor-diacritics}: Arab\TeX\ diacritics 3036% \caption[]{Arab\TeX\ diacritics for \cs{arbcolor}}
2770% for \cs{arbcolor}}
2771% \endfoot 3037% \endfoot
2772% \captionlistentry{Arab\TeX\ diacritics for \cs{arbcolor}}\\[-1em]
2773% \toprule 3038% \toprule
3039% \captionlistentry{Arab\TeX\ diacritics for \cs{arbcolor}}
2774% Diacritic & \multicolumn{3}{l}{Transliteration\footnotemark} 3040% Diacritic & \multicolumn{3}{l}{Transliteration\footnotemark}
2775% & Arab\TeX\ notation \\ 3041% & Arab\TeX\ notation \\
2776% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 3042% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
2777% \endfirsthead 3043% \endfirsthead
2778% \toprule 3044% \toprule
2779% Diacritic & \multicolumn{3}{l}{Transliteration} 3045% Diacritic & \multicolumn{3}{l}{Transliteration}
2780% & Arab\TeX\ notation \\ 3046% & Arab\TeX\ notation \\
2781% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & \\ \midrule 3047% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & \\ \midrule
2782% \endhead \footnotetext{See below \vref{sec:transliteration}.} 3048% \endhead \footnotetext{See below \vref{sec:transliteration}.}
2783% \label{tab:arbcolor-diacritics} 3049% \label{tab:arbcolor-diacritics}
2784% \arb{B.a} & \dmg{.a} & \loc{.a} & \brill{.a} & \verb|.a| \\ 3050% \arb{B.a} & \dmg{.a} & \loc{.a} & \brill{.a} & \verb|.a| \\
2785% \pagebreak[1]
2786% \arb{B.u} & \dmg{.u} & \loc{.u} & \brill{.u} & \verb|.u| \\ 3051% \arb{B.u} & \dmg{.u} & \loc{.u} & \brill{.u} & \verb|.u| \\
2787% \arb{B.i} & \dmg{.i} & \loc{.i} & \brill{.i} & \verb|.i| \\ \midrule 3052% \arb{B.i} & \dmg{.i} & \loc{.i} & \brill{.i} & \verb|.i| \\ \midrule
2788% \arb{Bo} & \dmg{o} & \loc{o} & \brill{o} & \verb|o| \\ 3053% \arb{Bo} & \dmg{o} & \loc{o} & \brill{o} & \verb|o| \\
@@ -2807,7 +3072,7 @@
2807% 'a`\arbcolor[red]{^g}.aba-ka}. 3072% 'a`\arbcolor[red]{^g}.aba-ka}.
2808% 3073%
2809% |i^staraytu-hu| |bi-_tama\arbcolor[red]{n}\arbcolor[blue]{iN}| 3074% |i^staraytu-hu| |bi-_tama\arbcolor[red]{n}\arbcolor[blue]{iN}|
2810% \allowbreak 3075% \\
2811% |'a`\arbcolor[red]|\allowbreak|{^g}\arbcolor[blue]{.a}ba-ka| 3076% |'a`\arbcolor[red]|\allowbreak|{^g}\arbcolor[blue]{.a}ba-ka|
2812% \arb{i^staraytu-hu bi-_tama\arbcolor[red]{n}\arbcolor[blue]{iN} 3077% \arb{i^staraytu-hu bi-_tama\arbcolor[red]{n}\arbcolor[blue]{iN}
2813% 'a`\arbcolor[red]{^g}\arbcolor[blue]{.a}ba-ka} \linebreak 3078% 'a`\arbcolor[red]{^g}\arbcolor[blue]{.a}ba-ka} \linebreak
@@ -2818,14 +3083,15 @@
2818% 3083%
2819% \begin{quote}\textbf{\enquote*{fullvoc} mode}:\\ 3084% \begin{quote}\textbf{\enquote*{fullvoc} mode}:\\
2820% |i^staray"\arbcolor[red]{o}tu-hu| |bi-_taman"\arbcolor[red]{iN}| 3085% |i^staray"\arbcolor[red]{o}tu-hu| |bi-_taman"\arbcolor[red]{iN}|
3086% \\
2821% |'a`^g"\arbcolor[red]{.a}ba-ka| 3087% |'a`^g"\arbcolor[red]{.a}ba-ka|
2822% \arb[fullvoc]{i^staray"\arbcolor[red]{o}tu-hu 3088% \arb[fullvoc]{i^staray"\arbcolor[red]{o}tu-hu
2823% bi-_taman"\arbcolor[red]{iN} 'a`^g"\arbcolor[red]{.a}ba-ka} 3089% bi-_taman"\arbcolor[red]{iN} 'a`^g"\arbcolor[red]{.a}ba-ka}
2824% \arb[trans]{i^staray"\arbcolor[red]{o}tu-hu 3090% \arb[trans]{i^staray"\arbcolor[red]{o}tu-hu
2825% bi-_taman"\arbcolor[red]{iN} 3091% bi-_taman"\arbcolor[red]{iN} 'a`^g"\arbcolor[red]{.a}ba-ka}.
2826% \linebreak 'a`^g"\arbcolor[red]{.a}ba-ka}.
2827% 3092%
2828% |i^stara\arbcolor[red]{y"}otu-hu| |bi-_tama\arbcolor[red]{n"}iN| 3093% |i^stara\arbcolor[red]{y"}otu-hu| |bi-_tama\arbcolor[red]{n"}iN|
3094% \\
2829% |'a`\arbcolor[red]|\allowbreak|{^g"}.aba-ka| 3095% |'a`\arbcolor[red]|\allowbreak|{^g"}.aba-ka|
2830% \arb[fullvoc]{i^stara\arbcolor[red]{y"}otu-hu 3096% \arb[fullvoc]{i^stara\arbcolor[red]{y"}otu-hu
2831% bi-_tama\arbcolor[red]{n"}iN 'a`\arbcolor[red]{^g"}.aba-ka} 3097% bi-_tama\arbcolor[red]{n"}iN 'a`\arbcolor[red]{^g"}.aba-ka}
@@ -2833,8 +3099,9 @@
2833% bi-_tama\arbcolor[red]{n"}iN 'a`\arbcolor[red]{^g"}.aba-ka}. 3099% bi-_tama\arbcolor[red]{n"}iN 'a`\arbcolor[red]{^g"}.aba-ka}.
2834% 3100%
2835% |i^stara\arbcolor[red]{y"}\arbcolor[blue]{o}tu-hu| 3101% |i^stara\arbcolor[red]{y"}\arbcolor[blue]{o}tu-hu|
3102% \\
2836% |bi-_tama\arb|\allowbreak|color[red]{n"}\arbcolor[blue]{iN}| 3103% |bi-_tama\arb|\allowbreak|color[red]{n"}\arbcolor[blue]{iN}|
2837% |'a`\arbcolor[red]|\allowbreak|{^g"}\arb|\allowbreak% 3104% |'a`\arbcolor[red]|\\|{^g"}\arb|
2838% |color[blue]{.a}ba-ka| 3105% |color[blue]{.a}ba-ka|
2839% \arb[fullvoc]{i^stara\arbcolor[red]{y"}\arbcolor[blue]{o}tu-hu 3106% \arb[fullvoc]{i^stara\arbcolor[red]{y"}\arbcolor[blue]{o}tu-hu
2840% bi-_tama\arbcolor[red]{n"}\arbcolor[blue]{iN} 3107% bi-_tama\arbcolor[red]{n"}\arbcolor[blue]{iN}
@@ -2866,8 +3133,8 @@
2866% \arb{^gAmi`aT|\arbcolor[red]{\arbnull{T}aN}} 3133% \arb{^gAmi`aT|\arbcolor[red]{\arbnull{T}aN}}
2867% \arb[trans]{^gAmi`aT|\arbcolor[red]{\arbnull{T}aN}}. 3134% \arb[trans]{^gAmi`aT|\arbcolor[red]{\arbnull{T}aN}}.
2868% \end{quote} 3135% \end{quote}
2869% \begin{quoting} 3136% \begin{remarks}
2870% \textsc{Rem.} Note that in the last example 3137% \item[\textsc{Rem.}] Note that in the last example
2871% (\arb[trans]{^gAmi`aT|\arbcolor[red]{\arbnull{T}aN}}), the 3138% (\arb[trans]{^gAmi`aT|\arbcolor[red]{\arbnull{T}aN}}), the
2872% \enquote*{pipe} character has been inserted before 3139% \enquote*{pipe} character has been inserted before
2873% \cs{arbcolor}. Otherwise, the |dmg| mode of the transliteration 3140% \cs{arbcolor}. Otherwise, the |dmg| mode of the transliteration
@@ -2876,7 +3143,7 @@
2876% \txtrans{t}).\footnote{See also \vpageref{ref:ta-marbutah-pipe} 3143% \txtrans{t}).\footnote{See also \vpageref{ref:ta-marbutah-pipe}
2877% \enquote{Discarding the \arb[trans]{'i`rAb}} for more 3144% \enquote{Discarding the \arb[trans]{'i`rAb}} for more
2878% information.} 3145% information.}
2879% \end{quoting} 3146% \end{remarks}
2880% 3147%
2881% The \arb[trans]{tanwIn} preceding a \arb[novoc]{_A} conveys even 3148% The \arb[trans]{tanwIn} preceding a \arb[novoc]{_A} conveys even
2882% more intricate business to the rendering with the utmost accuracy in 3149% more intricate business to the rendering with the utmost accuracy in
@@ -2906,9 +3173,8 @@
2906% the knowledge of the writer, the \arb[trans]{wa.slaT} alone is not 3173% the knowledge of the writer, the \arb[trans]{wa.slaT} alone is not
2907% part of the Arabic Unicode block.}. 3174% part of the Arabic Unicode block.}.
2908% 3175%
2909% |fI| |"al".i-\arbcolor[red]{\arbnull{'l-}i}btidA'i| 3176% |fI| |"al".i-\arbcolor[red]{\arbnull{'l-}i}btidA'i|\\
2910% \arb[fullvoc]{fI "al".i-\arbcolor[red]{\arbnull{'l-}i}btidA'i} 3177% \arb[fullvoc]{fI "al".i-\arbcolor[red]{\arbnull{'l-}i}btidA'i}
2911% \linebreak
2912% \arb[trans]{fI "al".i-\arbcolor[red]{\arbnull{'l-}i}btidA'i}. 3178% \arb[trans]{fI "al".i-\arbcolor[red]{\arbnull{'l-}i}btidA'i}.
2913% 3179%
2914% |\arbcolor[red]{'a'\arbnull{k}}kulu| 3180% |\arbcolor[red]{'a'\arbnull{k}}kulu|
@@ -2934,10 +3200,10 @@
2934%</example> 3200%</example>
2935% \fi% 3201% \fi%
2936% 3202%
2937% \begin{quoting} 3203% \begin{remarks}
2938% \textsc{Rem.} In the preceding example, any consonant could have 3204% \item[\textsc{Rem.}] In the preceding example, any consonant could
2939% been passed as argument to the \cs{arbnull} command. 3205% have been passed as argument to the \cs{arbnull} command.
2940% \end{quoting} 3206% \end{remarks}
2941% 3207%
2942% \paragraph{\texorpdfstring{\arb[trans]{^sad\-daT}}{šaddah}} 3208% \paragraph{\texorpdfstring{\arb[trans]{^sad\-daT}}{šaddah}}
2943% In the following example, it is assumed that the 3209% In the following example, it is assumed that the
@@ -2991,18 +3257,19 @@
2991% \paragraph{\texorpdfstring{\arb[trans]{hamzaT}}{hamzah}} 3257% \paragraph{\texorpdfstring{\arb[trans]{hamzaT}}{hamzah}}
2992% The \enquote*{quoting} technique provides an easy way to determine 3258% The \enquote*{quoting} technique provides an easy way to determine
2993% the carrier of the \arb[trans]{hamzaT}, as shown in 3259% the carrier of the \arb[trans]{hamzaT}, as shown in
2994% \vref{tab:quoted-hamza}---: 3260% \vref{tab:quoted-hamza}:---
2995% \begin{quote} 3261% \begin{quote}
2996% \verb+yatasA\arbnull{'a}\arbcolor[red]{|"'}.alUna+ 3262% \verb+yatasA\arbnull{'a}\arbcolor[red]{|"'}.alUna+
2997% \arb{yatasA\arbnull{'a}\arbcolor[red]{|"'}.alUna} 3263% \arb{yatasA\arbnull{'a}\arbcolor[red]{|"'}.alUna}
2998% \arb[trans]{yatasA\arbnull{'a}\-\arbcolor[red]{|"'}.a\-lUna}, 3264% \arb[trans]{yatasA\arbnull{'a}\-\arbcolor[red]{|"'}.a\-lUna},
3265% \\
2999% \verb+^say\arbcolor[red]{|"'}\arbnull{'}aN+ 3266% \verb+^say\arbcolor[red]{|"'}\arbnull{'}aN+
3000% \arb{^say\arbcolor[red]{|"'}\arbnull{'}aN} 3267% \arb{^say\arbcolor[red]{|"'}\arbnull{'}aN}
3001% \arb[trans]{^say\arbcolor[red]{|"'}\arbnull{'}aN}, 3268% \arb[trans]{^say\arbcolor[red]{|"'}\arbnull{'}aN},
3002% \verb+^say\ar+\allowbreak\verb+bcolor[red]{|"'}iN+ 3269% \verb+^say\arbcolor[red]+\\\verb+{|"'}iN+
3003% \arb{^say\arbcolor[red]{|"'}iN} 3270% \arb{^say\arbcolor[red]{|"'}iN}
3004% \arb[trans]{^say\arbcolor[red]{|"'}iN}, 3271% \arb[trans]{^say\arbcolor[red]{|"'}iN},
3005% |\arbcolor[red]{a"'}.as\arbcolor|\allowbreak|[red]{y"'}.ilaTuN| 3272% |\arbcolor[red]{a"'}.as\arbcolor[red]{y"'}.ilaTuN|
3006% \arb{\arbcolor[red]{a"'}.as\arbcolor[red]{y"'}.ilaTuN} 3273% \arb{\arbcolor[red]{a"'}.as\arbcolor[red]{y"'}.ilaTuN}
3007% \arb[trans]{\arbcolor[red]{a"'}.as\arbcolor[red]{y"'}.ilaTuN}. 3274% \arb[trans]{\arbcolor[red]{a"'}.as\arbcolor[red]{y"'}.ilaTuN}.
3008% \end{quote} 3275% \end{quote}
@@ -3012,7 +3279,7 @@
3012% \label{sec:transliteration} 3279% \label{sec:transliteration}
3013% It may be more appropriate to speak of \enquote{romanization} than 3280% It may be more appropriate to speak of \enquote{romanization} than
3014% \enquote{transliteration} of Arabic. As seen above in 3281% \enquote{transliteration} of Arabic. As seen above in
3015% \cref{sec:options} \vpagerefrange{sec:options}{sec:local-options}, 3282% \vref{sec:options} \vpagerefrange{sec:options}{sec:local-options},
3016% the \enquote{transliteration mode} may be selected globally or locally. 3283% the \enquote{transliteration mode} may be selected globally or locally.
3017% 3284%
3018% This mode transliterates the Arab\TeX\ input into one of the 3285% This mode transliterates the Arab\TeX\ input into one of the
@@ -3023,6 +3290,9 @@
3023% adopted by the International Convention of Orientalist Scholars in 3290% adopted by the International Convention of Orientalist Scholars in
3024% Rome in 1935.\footnote{See \textcite{dmg}.} |dmg| transliteration 3291% Rome in 1935.\footnote{See \textcite{dmg}.} |dmg| transliteration
3025% convention is selected by default; 3292% convention is selected by default;
3293% \item[dmg+] This is the same as above, with the difference that the
3294% hamza is always printed, even in words preceded by the definite
3295% article, as in \arb[trans]{al-'asadu}.
3026% \item[loc] \emph{Library of Congress}: this standard is part of a 3296% \item[loc] \emph{Library of Congress}: this standard is part of a
3027% large set of standards for romanization of non-roman scripts 3297% large set of standards for romanization of non-roman scripts
3028% adopted by the American Library Association and the Library of 3298% adopted by the American Library Association and the Library of
@@ -3030,7 +3300,7 @@
3030% \url{http://www.loc.gov/catdir/cpso/roman.html} for the 3300% \url{http://www.loc.gov/catdir/cpso/roman.html} for the
3031% \href{http://www.loc.gov/catdir/cpso/romanization/arabic.pdf}{source 3301% \href{http://www.loc.gov/catdir/cpso/romanization/arabic.pdf}{source
3032% document concerning Arabic language}.} 3302% document concerning Arabic language}.}
3033% \item[arabica] \NEWfeature{v1.8} 3303% \item[arabica] \newfeature[v1.8]
3034% \changes{v1.8}{2017/03/30}{\texttt{arabica} transliteration 3304% \changes{v1.8}{2017/03/30}{\texttt{arabica} transliteration
3035% standard is now supported} \emph{Journal of Arabic and Islamic 3305% standard is now supported} \emph{Journal of Arabic and Islamic
3036% Studies}/\emph{Revue d'études arabes et islamiques}: this standard 3306% Studies}/\emph{Revue d'études arabes et islamiques}: this standard
@@ -3045,16 +3315,16 @@
3045% transliteration mode, which is set to |dmg| by default, may be 3315% transliteration mode, which is set to |dmg| by default, may be
3046% changed at any point of the document by the 3316% changed at any point of the document by the
3047% \cs{SetTranslitConvention}\marg{mode} command , where \meta{mode} 3317% \cs{SetTranslitConvention}\marg{mode} command , where \meta{mode}
3048% may be either |dmg|, |loc| or |arabica|. This command is also 3318% may be either |dmg|, |dmg+|, |loc| or |arabica|. This command is also
3049% accepted in the preamble should one wish to set the transliteration 3319% accepted in the preamble should one wish to set the transliteration
3050% mode globally, e.g.:---% 3320% mode globally, e.g.:---%
3051% \iffalse 3321% \iffalse
3052%<*example> 3322%<*example>
3053% \fi 3323% \fi
3054\begin{code} 3324\begin{alcode}
3055 \usepackage{arabluatex} 3325 \usepackage{arabluatex}
3056 \SetTranslitConvention{loc} 3326 \SetTranslitConvention{loc}
3057\end{code} 3327\end{alcode}
3058% \iffalse 3328% \iffalse
3059%</example> 3329%</example>
3060% \fi 3330% \fi
@@ -3066,7 +3336,7 @@
3066% command, where \meta{style} may be any font shape selection 3336% command, where \meta{style} may be any font shape selection
3067% command, e.g. \cs{upshape}, \cs{itshape}, \cs{slshape}, and so forth. 3337% command, e.g. \cs{upshape}, \cs{itshape}, \cs{slshape}, and so forth.
3068% 3338%
3069% \paragraph{Font} \NEWfeature{v1.4} \DescribeMacro{\SetTranslitFont} 3339% \paragraph{Font} \newfeature[v1.4] \DescribeMacro{\SetTranslitFont}
3070% \cs{SetTranslitFont}\marg{font selection command} allows any 3340% \cs{SetTranslitFont}\marg{font selection command} allows any
3071% specific font to be selected for rendering transliterated text with 3341% specific font to be selected for rendering transliterated text with
3072% the font-selecting commands of the \package{fontspec} or 3342% the font-selecting commands of the \package{fontspec} or
@@ -3076,10 +3346,10 @@
3076% \iffalse 3346% \iffalse
3077%<*example> 3347%<*example>
3078% \fi 3348% \fi
3079\begin{code} 3349\begin{alcode}
3080 \newfontfamily\translitfont{Gentium Plus}[Ligatures=TeX] 3350 \newfontfamily\translitfont{Gentium Plus}[Ligatures=TeX]
3081 \SetTranslitFont{\translitfont} 3351 \SetTranslitFont{\translitfont}
3082\end{code} 3352\end{alcode}
3083% \iffalse 3353% \iffalse
3084%</example> 3354%</example>
3085% \fi 3355% \fi
@@ -3138,7 +3408,7 @@
3138% 3408%
3139% \paragraph{\texorpdfstring{\enquote*{Long} pro\-per 3409% \paragraph{\texorpdfstring{\enquote*{Long} pro\-per
3140% names}{‘Long’ proper names}} 3410% names}{‘Long’ proper names}}
3141% \NEWfeature{v1.10} \cs{uc} is also able to process proper names 3411% \newfeature[v1.10] \cs{uc} is also able to process proper names
3142% consisting of several subsequent words:--- 3412% consisting of several subsequent words:---
3143% \begin{quote} 3413% \begin{quote}
3144% |\arb[trans]{\uc{'abU| |zaydiN| |.hunaynu| |bnu| |'is.h_aqa| 3414% |\arb[trans]{\uc{'abU| |zaydiN| |.hunaynu| |bnu| |'is.h_aqa|
@@ -3148,7 +3418,7 @@
3148% 3418%
3149% \paragraph{Proper names outside Arabic environments} 3419% \paragraph{Proper names outside Arabic environments}
3150% \changes{v1.10}{2018/01/03}{\cs{uc} supersedes \cs{cap}} 3420% \changes{v1.10}{2018/01/03}{\cs{uc} supersedes \cs{cap}}
3151% \DescribeMacro{\prname}\NEWfeature{v1.10} Transliterated proper 3421% \DescribeMacro{\prname}\newfeature[v1.10] Transliterated proper
3152% names inserted in paragraphs of English text should be printed in 3422% names inserted in paragraphs of English text should be printed in
3153% the same typeface as the surrounding text. \cs{prname}\marg{Arabic 3423% the same typeface as the surrounding text. \cs{prname}\marg{Arabic
3154% proper name} is provided to that effect:\footnote{Just as \cs{uc}, 3424% proper name} is provided to that effect:\footnote{Just as \cs{uc},
@@ -3192,18 +3462,19 @@
3192%</example> 3462%</example>
3193% \fi 3463% \fi
3194% 3464%
3195% \begin{quoting}\label{ref:prname-star} 3465% \begin{remarks}
3196% \textsc{Rem.} \DescribeMacro{\prname*} \package{arabluatex} also 3466% \item[\textsc{Rem.}] \label{ref:prname-star}
3197% provides \cs{prname*} which only renders in upright roman style 3467% \DescribeMacro{\prname*} \package{arabluatex} also provides
3198% already transliterated proper names without applying any further 3468% \cs{prname*} which only renders in upright roman style already
3469% transliterated proper names without applying any further
3199% processing. It is mostly used internally and applied to proper 3470% processing. It is mostly used internally and applied to proper
3200% names exported in Unicode to an external selected 3471% names exported in Unicode to an external selected
3201% file.\footnote{See below \vref{sec:arabtex2utf} for more details.} 3472% file.\footnote{See below \vref{sec:arabtex2utf} for more details.}
3202% \end{quoting} 3473% \end{remarks}
3203% 3474%
3204% \subsection{Additional note on \texttt{dmg} convention} 3475% \subsection{Additional note on \texttt{dmg} convention}
3205% \label{sec:additional-note-dmg} 3476% \label{sec:additional-note-dmg}
3206% \NEWfeature{v1.3} According to \textcite[6]{dmg}, Arabic 3477% \newfeature[v1.3] According to \textcite[6]{dmg}, Arabic
3207% \arb[trans]{'i`rAb} may be rendered into |dmg| in three different 3478% \arb[trans]{'i`rAb} may be rendered into |dmg| in three different
3208% ways: 3479% ways:
3209% \begin{enumerate} 3480% \begin{enumerate}
@@ -3270,29 +3541,29 @@
3270% \arb[voc]{al-.zulm-Atu} \arb[trans]{al-.zulm-Atu}. 3541% \arb[voc]{al-.zulm-Atu} \arb[trans]{al-.zulm-Atu}.
3271% \end{quote} 3542% \end{quote}
3272% 3543%
3273% \begin{quoting} 3544% \begin{remarks}
3274% \textsc{Rem.}~\emph{a.} As the \arb[trans]{tanwIn} is passed over 3545% \item As the \arb[trans]{tanwIn} is passed over in pronunciation
3275% in pronunciation when it is followed by the letters 3546% when it is followed by the letters \arb[novoc]{r}, \arb[novoc]{l},
3276% \arb[novoc]{r}, \arb[novoc]{l}, \arb[novoc]{m}, \arb[novoc]{w}, 3547% \arb[novoc]{m}, \arb[novoc]{w}, \arb[novoc]{y} (see
3277% \arb[novoc]{y} (see \vref{ref:assimilation}), it may be desirable 3548% \vref{ref:assimilation}), it may be desirable to further
3278% to further distinguish it by putting it above the line, but not to 3549% distinguish it by putting it above the line, but not to do the
3279% do the same for \arb[trans]{.gayr mun.sarif} terminations. This 3550% same for \arb[trans]{.gayr mun.sarif} terminations. This can be
3280% can be achieved by simply omitting the hyphen before any 3551% achieved by simply omitting the hyphen before any
3281% \arb[trans]{.gayr mun.sarif} termination:---\\ 3552% \arb[trans]{.gayr mun.sarif} termination:---\\
3282% |kAna| |.ganiyyaN| |l_akinna-hu| |labisa| |^gubbaTaN| |mumazzaqaN| 3553% |kAna| |.ganiyyaN| |l_akinna-hu| |labisa| |^gubbaTaN| |mumazzaqaN|
3283% |'aydu-hA| \arb[voc]{kAna .ganiyyaN l_akinna-hu labisa ^gubbaTaN 3554% |'aydu-hA| \arb[voc]{kAna .ganiyyaN l_akinna-hu labisa ^gubbaTaN
3284% mumazzaqaN 'aydu-hA} \arb[trans]{kAna .ganiyyaN l_akinna-hu labisa 3555% mumazzaqaN 'aydu-hA} \arb[trans]{kAna .ganiyyaN l_akinna-hu labisa
3285% ^gubbaTaN mumazzaqaN 'aydu-hA}. 3556% ^gubbaTaN mumazzaqaN 'aydu-hA}.
3286% 3557%
3287% \textsc{Rem.}~\emph{b.} Although the hyphen before the 3558% \item Although the hyphen before the \arb[trans]{tanwIn} is optional
3288% \arb[trans]{tanwIn} is optional as \package{arabluatex} always 3559% as \package{arabluatex} always parses nouns with such termination,
3289% parses nouns with such termination, it may also be used to mark 3560% it may also be used to mark
3290% better the inflectional endings:---\\ 3561% better the inflectional endings:---\\
3291% |mana`a| |'l-nAs-a| |kAffaT-aN| |min| |mu_hA.tabati-hi| 3562% |mana`a| |'l-nAs-a| |kAffaT-aN| |min| |mu_hA.tabati-hi|
3292% |'a.had-uN| |bi-sayyidi-nA| \arb[voc]{mana`a 'l-nAs-a kAffaT-aN 3563% |'a.had-uN| |bi-sayyidi-nA| \arb[voc]{mana`a 'l-nAs-a kAffaT-aN
3293% min mu_hA.tabati-hi 'a.had-uN bi-sayyidi-nA} \arb[trans]{mana`a 3564% min mu_hA.tabati-hi 'a.had-uN bi-sayyidi-nA} \arb[trans]{mana`a
3294% 'l-nAs-a kAffaT-aN min mu_hA.tabati-hi 'a.had-uN bi-sayyidi-nA}. 3565% 'l-nAs-a kAffaT-aN min mu_hA.tabati-hi 'a.had-uN bi-sayyidi-nA}.
3295% \end{quoting} 3566% \end{remarks}
3296% 3567%
3297% \paragraph{\texorpdfstring{Discar\-ding the 3568% \paragraph{\texorpdfstring{Discar\-ding the
3298% \arb[trans]{'i`rAb}}{Discarding the ʾiʿrāb}} 3569% \arb[trans]{'i`rAb}}{Discarding the ʾiʿrāb}}
@@ -3310,17 +3581,17 @@
3310% state): |.hikmaT| |al-l_ah| \arb[trans]{.hikmaT| \uc{al-l_ah}}, 3581% state): |.hikmaT| |al-l_ah| \arb[trans]{.hikmaT| \uc{al-l_ah}},
3311% |fi.d.daT| |al-darAhim| \arb[trans]{fi.d.daT al-darAhim}. 3582% |fi.d.daT| |al-darAhim| \arb[trans]{fi.d.daT al-darAhim}.
3312% \end{enumerate} 3583% \end{enumerate}
3313% \begin{quoting} 3584% \begin{remarks}
3314% \textsc{Rem.} It may so happen, as in the absence of the article 3585% \item[\textsc{Rem.}] It may so happen, as in the absence of the
3315% before the annexed word, that \package{arabluatex} be unable to 3586% article before the annexed word, that \package{arabluatex} be
3316% determine which of the above two cases the word ending with 3587% unable to determine which of the above two cases the word ending
3317% \arb[trans]{tA' marbU.taT} falls into. The \enquote*{pipe} 3588% with \arb[trans]{tA' marbU.taT} falls into. The \enquote*{pipe}
3318% character (see \vref{sec:pipe}) may be appended to that word to 3589% character (see \vref{sec:pipe}) may be appended to that word to
3319% indicate that what follows is in the construct state: 3590% indicate that what follows is in the construct state:
3320% |\uc{r}isAlaT| |fI| |tartIb| \verb+qirA'aT|+ |kutub| 3591% |\uc{r}isAlaT| |fI| |tartIb| \verb+qirA'aT|+ |kutub|
3321% |\uc{^g}AlInUs| \arb[trans]{\uc{r}isAlaT fI tartIb qirA'aT| 3592% |\uc{^g}AlInUs| \arb[trans]{\uc{r}isAlaT fI tartIb qirA'aT| kutub
3322% kutub \uc{^g}AlInUs}. 3593% \uc{^g}AlInUs}.
3323% \end{quoting} 3594% \end{remarks}
3324% 3595%
3325% 3596%
3326% \paragraph{Uncertain short vowels} 3597% \paragraph{Uncertain short vowels}
@@ -3337,9 +3608,9 @@
3337% \arb[trans]{\uc{ju.hA}} and his donkey (\arb[voc]{\uc{ju.hA 3608% \arb[trans]{\uc{ju.hA}} and his donkey (\arb[voc]{\uc{ju.hA
3338% wa-.himAru-hu}}). See the code \vpageref{ref:juha-code}:--- 3609% wa-.himAru-hu}}). See the code \vpageref{ref:juha-code}:---
3339% 3610%
3340% \SetTranslitConvention{dmg} 3611% \SetTranslitConvention{dmg+}
3341% \begin{arab}[trans] 3612% \begin{arab}[trans]
3342% \LR{\textbf{\emph{\enquote*{dmg}} standard:}} 'at_A .sadIquN 'il_A 3613% \LR{\textbf{\emph{\enquote*{dmg+}} standard:}} 'at_A .sadIquN 'il_A
3343% \uc{ju.hA} ya.tlubu min-hu .himAra-hu li-yarkaba-hu fI safraTiN 3614% \uc{ju.hA} ya.tlubu min-hu .himAra-hu li-yarkaba-hu fI safraTiN
3344% qa.sIraTiN fa-qAla la-hu: \enquote{sawfa 'u`Idu-hu 'ilay-ka fI 3615% qa.sIraTiN fa-qAla la-hu: \enquote{sawfa 'u`Idu-hu 'ilay-ka fI
3345% 'l-masA'-i wa-'adfa`u la-ka 'ujraTaN.} fa-qAla \uc{ju.hA}: 3616% 'l-masA'-i wa-'adfa`u la-ka 'ujraTaN.} fa-qAla \uc{ju.hA}:
@@ -3366,7 +3637,7 @@
3366% \enquote{.garIbuN 'amru-ka yA .sadIqI 'a-tu.saddiqu 'l-.himAr-a 3637% \enquote{.garIbuN 'amru-ka yA .sadIqI 'a-tu.saddiqu 'l-.himAr-a
3367% wa-tuka_d_diba-nI?} 3638% wa-tuka_d_diba-nI?}
3368% \end{arab} 3639% \end{arab}
3369% \SetTranslitConvention{dmg} 3640% \SetTranslitConvention{dmg+}
3370% 3641%
3371% \SetTranslitConvention{arabica} 3642% \SetTranslitConvention{arabica}
3372% \begin{arab}[trans] 3643% \begin{arab}[trans]
@@ -3382,11 +3653,11 @@
3382% \uc{ju.hA}: \enquote{.garIbuN 'amru-ka yA .sadIqI 'a-tu.saddiqu 3653% \uc{ju.hA}: \enquote{.garIbuN 'amru-ka yA .sadIqI 'a-tu.saddiqu
3383% 'l-.himAr-a wa-tuka_d_diba-nI?} 3654% 'l-.himAr-a wa-tuka_d_diba-nI?}
3384% \end{arab} 3655% \end{arab}
3385% \SetTranslitConvention{dmg} 3656% \SetTranslitConvention{dmg+}
3386% 3657%
3387% \section{Buckwalter input scheme} 3658% \section{Buckwalter input scheme}
3388% \label{sec:buckwalter-scheme} 3659% \label{sec:buckwalter-scheme}
3389% \NEWfeature{v1.4} Even though \package{arabluatex} is primarily 3660% \newfeature[v1.4] Even though \package{arabluatex} is primarily
3390% designed to process the Arab\TeX\ notation, it can also process the 3661% designed to process the Arab\TeX\ notation, it can also process the
3391% Buckwalter input scheme to a large extent.\footnote{See 3662% Buckwalter input scheme to a large extent.\footnote{See
3392% \url{http://www.qamus.org/transliteration.htm}} The Buckwalter 3663% \url{http://www.qamus.org/transliteration.htm}} The Buckwalter
@@ -3406,10 +3677,10 @@
3406% \iffalse 3677% \iffalse
3407%<*example> 3678%<*example>
3408% \fi 3679% \fi
3409\begin{code} 3680\begin{alcode}
3410 \usepackage{arabluatex} 3681 \usepackage{arabluatex}
3411 \SetInputScheme{buckwalter} 3682 \SetInputScheme{buckwalter}
3412\end{code} 3683\end{alcode}
3413% \iffalse 3684% \iffalse
3414%</example> 3685%</example>
3415% \fi 3686% \fi
@@ -3429,32 +3700,30 @@
3429% It is therefore recommended to use the Buckwalter \enquote*{safe} 3700% It is therefore recommended to use the Buckwalter \enquote*{safe}
3430% scheme. 3701% scheme.
3431% 3702%
3432% \Cref{tab:buckwalter-scheme} gives the Buckwalter equivalents that 3703% \Vref{tab:buckwalter-scheme} gives the Buckwalter equivalents that
3433% are currently used by \package{arabluatex}. The additional 3704% are currently used by \package{arabluatex}. The additional
3434% characters that are defined in \vref{tab:additional-arabic-codings} 3705% characters that are defined in \vref{tab:additional-arabic-codings}
3435% are also available. 3706% are also available.
3436% 3707%
3437% \enlargethispage{\baselineskip}
3438% \begin{longtable}{llllll} 3708% \begin{longtable}{llllll}
3439% \bottomrule 3709% \bottomrule
3440% \caption*{\Cref*{tab:buckwalter-scheme}: Buckwalter scheme} 3710% \caption[]{Buckwalter input scheme}
3441% \endfoot 3711% \endfoot
3442% \captionlistentry{Buckwalter scheme}\\[-1em]
3443% \toprule 3712% \toprule
3713% \captionlistentry{Buckwalter input scheme}
3444% Letter & \multicolumn{3}{l}{Transliteration\footnotemark} 3714% Letter & \multicolumn{3}{l}{Transliteration\footnotemark}
3445% & \multicolumn{2}{l}{Buckwalter notation} \\ 3715% & \multicolumn{2}{l}{Buckwalter notation} \\
3446% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & |base/xml| & 3716% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & |base/xml| &
3447% |safe| \\ \midrule 3717% |safe| \\ \midrule
3448% \endfirsthead 3718% \endfirsthead
3449% \toprule 3719% \toprule
3450% Letter & \multicolumn{3}{l}{Transliteration} 3720% Letter & \multicolumn{3}{l}{Transliteration}
3451% & \multicolumn{2}{l}{Buckwalter notation} \\ 3721% & \multicolumn{2}{l}{Buckwalter notation} \\
3452% & \texttt{dmg} & \texttt{loc} & \texttt{arabica} & |base/xml| & 3722% & \texttt{dmg+} & \texttt{loc} & \texttt{arabica} & |base/xml| &
3453% |safe| \\ \midrule 3723% |safe| \\ \midrule
3454% \endhead \footnotetext{See \vref{sec:transliteration}.} 3724% \endhead \footnotetext{See \vref{sec:transliteration}.}
3455% \label{tab:buckwalter-scheme} 3725% \label{tab:buckwalter-scheme}
3456% \arb[novoc]{a} & \dmg{a} & \loc{a} & \brill{a} & |A| & |A| \\ 3726% \arb[novoc]{a} & \dmg{a} & \loc{a} & \brill{a} & |A| & |A| \\
3457% \pagebreak[1]
3458% \arb[novoc]{b} & \dmg{b} & \loc{b} & \brill{b} & |b| & |b| \\ 3727% \arb[novoc]{b} & \dmg{b} & \loc{b} & \brill{b} & |b| & |b| \\
3459% \arb[novoc]{t} & \dmg{t} & \loc{t} & \brill{t} & |t| & |t| \\ 3728% \arb[novoc]{t} & \dmg{t} & \loc{t} & \brill{t} & |t| & |t| \\
3460% \arb[novoc]{_t} & \dmg{_t} & \loc{_t} & \brill{_t} & |v| & |v| \\ 3729% \arb[novoc]{_t} & \dmg{_t} & \loc{_t} & \brill{_t} & |v| & |v| \\
@@ -3546,7 +3815,7 @@
3546% 3815%
3547% \section{Unicode Arabic input} 3816% \section{Unicode Arabic input}
3548% \label{sec:unicode-input} 3817% \label{sec:unicode-input}
3549% \NEWfeature{v1.5} As said above in \vref{sec:buckwalter-scheme} 3818% \newfeature[v1.5] As said above in \vref{sec:buckwalter-scheme}
3550% about the Buckwalter input scheme, even though \package{arabluatex} 3819% about the Buckwalter input scheme, even though \package{arabluatex}
3551% is primarily designed to process the Arab\TeX\ notation, it also 3820% is primarily designed to process the Arab\TeX\ notation, it also
3552% accepts Unicode Arabic input. It should be noted that 3821% accepts Unicode Arabic input. It should be noted that
@@ -3564,17 +3833,16 @@
3564% \iffalse 3833% \iffalse
3565%<*example> 3834%<*example>
3566% \fi 3835% \fi
3567\begin{code} 3836\begin{alcode}
3568 \begin{txarab} 3837 \begin{txarab}
3569 <Unicode Arabic text> 3838 <Unicode Arabic text>
3570 \end{txarab} 3839 \end{txarab}
3571\end{code} 3840\end{alcode}
3572% \iffalse 3841% \iffalse
3573%</example> 3842%</example>
3574% \fi 3843% \fi
3575% \end{enumerate} 3844% \end{enumerate}
3576% 3845%
3577% \needspace{4\baselineskip}
3578% \section{\LaTeX\ Commands in Arabic environments} 3846% \section{\LaTeX\ Commands in Arabic environments}
3579% \label{sec:commands-in-arb} 3847% \label{sec:commands-in-arb}
3580% \paragraph{General principle} \label{ref:cmd-inside-arabic}\LaTeX\ 3848% \paragraph{General principle} \label{ref:cmd-inside-arabic}\LaTeX\
@@ -3668,6 +3936,7 @@
3668% for that, but should it happen, it may be necessary to redefine in 3936% for that, but should it happen, it may be necessary to redefine in
3669% the preamble the \LaTeX\ macro \cs{thefootnote} like so:---\\ 3937% the preamble the \LaTeX\ macro \cs{thefootnote} like so:---\\
3670% \tcboxverb{\renewcommand*{\thefootnote}{\textsuperscript{\LR{\arabic{footnote}}}}} 3938% \tcboxverb{\renewcommand*{\thefootnote}{\textsuperscript{\LR{\arabic{footnote}}}}}
3939%
3671% \DescribeMacro{\FixArbFtnmk} Another solution is to put in the 3940% \DescribeMacro{\FixArbFtnmk} Another solution is to put in the
3672% preamble, below the line that loads \package{arabluatex}, the 3941% preamble, below the line that loads \package{arabluatex}, the
3673% \cs{FixArbFtnmk} command. However, for more control over the layout 3942% \cs{FixArbFtnmk} command. However, for more control over the layout
@@ -3706,7 +3975,7 @@
3706% 3975%
3707% \subsection{New commands} 3976% \subsection{New commands}
3708% \label{sec:declare-new-commands} 3977% \label{sec:declare-new-commands}
3709% \NEWfeature{v1.9}% 3978% \newfeature[v1.9]%
3710% In some particular cases, it may be useful to define new commands to 3979% In some particular cases, it may be useful to define new commands to
3711% be inserted in Arabic environments. From the general principle laid 3980% be inserted in Arabic environments. From the general principle laid
3712% \vpageref{ref:cmd-inside-arabic}, it follows that any command that 3981% \vpageref{ref:cmd-inside-arabic}, it follows that any command that
@@ -3752,7 +4021,7 @@
3752% of commands declared with \cs{MkArbBreak} are not to be processed by 4021% of commands declared with \cs{MkArbBreak} are not to be processed by
3753% \package{arabluatex}. Therefore, as in the previous example, any of 4022% \package{arabluatex}. Therefore, as in the previous example, any of
3754% their argument to be rendered in Arabic must be inserted again in 4023% their argument to be rendered in Arabic must be inserted again in
3755% \cs{arb}. \NEWfeature{v1.12}These commands themselves may have up to 4024% \cs{arb}. \newfeature[v1.12]These commands themselves may have up to
3756% two optional and/or mandatory arguments followed by one optional 4025% two optional and/or mandatory arguments followed by one optional
3757% argument, like so:--- 4026% argument, like so:---
3758% \begin{enumerate} 4027% \begin{enumerate}
@@ -3768,7 +4037,7 @@
3768% (uppermost combination) 4037% (uppermost combination)
3769% \end{enumerate} 4038% \end{enumerate}
3770% 4039%
3771% \DescribeMacro{\MkArbBreak*}\NEWfeature{v1.12} As said above, 4040% \DescribeMacro{\MkArbBreak*}\newfeature[v1.12] As said above,
3772% \cs{MkArbBreak} prevents \package{arabluatex} from processing the 4041% \cs{MkArbBreak} prevents \package{arabluatex} from processing the
3773% arguments of \enquote*{declared} commands as Arabic text. This 4042% arguments of \enquote*{declared} commands as Arabic text. This
3774% technique proves sufficient in most cases. However, a 4043% technique proves sufficient in most cases. However, a
@@ -3795,20 +4064,20 @@
3795% \label{sec:environments} 4064% \label{sec:environments}
3796% \changes{v1.5}{2016/11/14}{Environments may be nested inside the 4065% \changes{v1.5}{2016/11/14}{Environments may be nested inside the
3797% \texttt{arab} environment} 4066% \texttt{arab} environment}
3798% \NEWfeature{v1.5} Environments such as 4067% \newfeature[v1.5] Environments such as
3799% \tcboxverb{\begin{quote} ... \end{quote}} may be nested inside the 4068% \tcboxverb{\begin{quote} ... \end{quote}} may be nested inside the
3800% |arab| environment. Up to one optional argument may be passed to 4069% |arab| environment. Up to one optional argument may be passed to
3801% each nested environment, like so:--- 4070% each nested environment, like so:---
3802% \iffalse 4071% \iffalse
3803%<*example> 4072%<*example>
3804% \fi 4073% \fi
3805\begin{code} 4074\begin{alcode}
3806 \begin{arab} 4075 \begin{arab}
3807 \begin{<environment>}[<options>] 4076 \begin{<environment>}[<options>]
3808 <Arabic text> 4077 <Arabic text>
3809 \end{<environment>} 4078 \end{<environment>}
3810 \end{arab} 4079 \end{arab}
3811\end{code} 4080\end{alcode}
3812% \iffalse 4081% \iffalse
3813%</example> 4082%</example>
3814% \fi 4083% \fi
@@ -3905,13 +4174,13 @@
3905% \iffalse 4174% \iffalse
3906%<*example> 4175%<*example>
3907% \fi 4176% \fi
3908\begin{code} 4177\begin{alcode}
3909 % preamble:--- 4178 % preamble:---
3910 \usepackage{enumitem} 4179 \usepackage{enumitem}
3911 \newlist{enumabjad}{enumerate}{10} 4180 \newlist{enumabjad}{enumerate}{10}
3912 \setlist[enumabjad]{nosep, label={\abjad{\arabic*}}} 4181 \setlist[enumabjad]{nosep, label={\abjad{\arabic*}}}
3913 \usepackage{multicol} 4182 \usepackage{multicol}
3914\end{code} 4183\end{alcode}
3915\begin{example} 4184\begin{example}
3916 From \textcite[i. 29 B--C]{Wright}:--- The derived forms of the 4185 From \textcite[i. 29 B--C]{Wright}:--- The derived forms of the
3917 triliteral verb are usually reckoned fifteen in number, but the 4186 triliteral verb are usually reckoned fifteen in number, but the
@@ -3954,10 +4223,10 @@
3954% \iffalse 4223% \iffalse
3955%<*example> 4224%<*example>
3956% \fi 4225% \fi
3957\begin{code} 4226\begin{alcode}
3958 \usepackage[french]{babel} 4227 \usepackage[french]{babel}
3959 \frenchsetup{StandardLists=true} 4228 \frenchsetup{StandardLists=true}
3960\end{code} 4229\end{alcode}
3961% \iffalse 4230% \iffalse
3962%</example> 4231%</example>
3963% \fi% 4232% \fi%
@@ -3975,12 +4244,12 @@
3975% \iffalse 4244% \iffalse
3976%<*example> 4245%<*example>
3977% \fi 4246% \fi
3978\begin{code} 4247\begin{alcode}
3979 \usepackage{csquotes} 4248 \usepackage{csquotes}
3980 \DeclareQuoteStyle{arabic} 4249 \DeclareQuoteStyle{arabic}
3981 {\textquotedblright}{\textquotedblleft} 4250 {\textquotedblright}{\textquotedblleft}
3982 {\textquoteright}{\textquoteleft} 4251 {\textquoteright}{\textquoteleft}
3983\end{code} 4252\end{alcode}
3984% \iffalse 4253% \iffalse
3985%</example> 4254%</example>
3986% \fi 4255% \fi
@@ -3999,11 +4268,11 @@
3999% \iffalse 4268% \iffalse
4000%</example> 4269%</example>
4001% \fi 4270% \fi
4002% \begin{quoting} 4271% \begin{remarks}
4003% \textsc{Rem.} Do not forget to set back the quoting style to its 4272% \item[\textsc{Rem.}] Do not forget to set back the quoting style to
4004% initial state once the Arabic environment is closed. See the last 4273% its initial state once the Arabic environment is closed. See the
4005% line in the code above. 4274% last line in the code above.
4006% \end{quoting} 4275% \end{remarks}
4007% 4276%
4008% \subsection{Two-argument special commands} 4277% \subsection{Two-argument special commands}
4009% \label{sec:two-arg-cmds} 4278% \label{sec:two-arg-cmds}
@@ -4052,7 +4321,7 @@
4052% \iffalse 4321% \iffalse
4053%<*example> 4322%<*example>
4054% \fi 4323% \fi
4055\begin{code} 4324\begin{alcode}
4056 \beginnumbering 4325 \beginnumbering
4057 \pstart 4326 \pstart
4058 \begin{arab} 4327 \begin{arab}
@@ -4061,7 +4330,7 @@
4061 \end{arab} 4330 \end{arab}
4062 \pend 4331 \pend
4063 \endnumbering 4332 \endnumbering
4064\end{code} 4333\end{alcode}
4065% \iffalse 4334% \iffalse
4066%</example> 4335%</example>
4067% \fi 4336% \fi
@@ -4086,10 +4355,10 @@
4086% \iffalse 4355% \iffalse
4087%<*example> 4356%<*example>
4088% \fi 4357% \fi
4089\begin{code} 4358\begin{alcode}
4090 \usepackage{arabluatex} 4359 \usepackage{arabluatex}
4091 \usepackage[nopar]{quran} 4360 \usepackage[nopar]{quran}
4092\end{code} 4361\end{alcode}
4093% \iffalse 4362% \iffalse
4094%</example> 4363%</example>
4095% \fi 4364% \fi
@@ -4110,7 +4379,7 @@
4110% 4379%
4111% \section{Exporting Unicode Arabic to an external file} 4380% \section{Exporting Unicode Arabic to an external file}
4112% \label{sec:arabtex2utf} 4381% \label{sec:arabtex2utf}
4113% \NEWfeature{v.1.13}\package{arabluatex} is able to produce a 4382% \newfeature[v.1.13]\package{arabluatex} is able to produce a
4114% duplicate of the original |.tex| source file in which all |arabtex| 4383% duplicate of the original |.tex| source file in which all |arabtex|
4115% or |buckwalter| strings will have been replaced with Unicode 4384% or |buckwalter| strings will have been replaced with Unicode
4116% equivalents, either in Arabic script or in any accepted standard of 4385% equivalents, either in Arabic script or in any accepted standard of
@@ -4128,12 +4397,12 @@
4128% \iffalse 4397% \iffalse
4129%<*example> 4398%<*example>
4130% \fi 4399% \fi
4131\begin{code} 4400\begin{alcode}
4132 % preamble 4401 % preamble
4133 \usepackage[export]{arabluatex} 4402 \usepackage[export]{arabluatex}
4134 % or: 4403 % or:
4135 \usepackage[export=true]{arabluatex} 4404 \usepackage[export=true]{arabluatex}
4136\end{code} 4405\end{alcode}
4137% \iffalse 4406% \iffalse
4138%</example> 4407%</example>
4139% \fi 4408% \fi
@@ -4153,11 +4422,11 @@
4153% \iffalse 4422% \iffalse
4154%<*example> 4423%<*example>
4155% \fi 4424% \fi
4156\begin{code} 4425\begin{alcode}
4157 \begin{arabexport} 4426 \begin{arabexport}
4158 <Running paragraphs of either Arabic or non-Arabic text> 4427 <Running paragraphs of either Arabic or non-Arabic text>
4159 \end{arabexport} 4428 \end{arabexport}
4160\end{code} 4429\end{alcode}
4161% \iffalse 4430% \iffalse
4162%</example> 4431%</example>
4163% \fi 4432% \fi
@@ -4215,11 +4484,11 @@
4215% \iffalse 4484% \iffalse
4216%<*example> 4485%<*example>
4217% \fi 4486% \fi
4218\begin{code} 4487\begin{alcode}
4219 Package arabluatex Warning: There are still 'arabtex' strings 4488 Package arabluatex Warning: There are still 'arabtex' strings
4220 to be converted. Please open <jobname><suffix>.tex and compile 4489 to be converted. Please open <jobname><suffix>.tex and compile
4221 it one more time. 4490 it one more time.
4222\end{code} 4491\end{alcode}
4223% \iffalse 4492% \iffalse
4224%</example> 4493%</example>
4225% \fi 4494% \fi
@@ -4237,9 +4506,9 @@
4237% \iffalse 4506% \iffalse
4238%<*example> 4507%<*example>
4239% \fi 4508% \fi
4240\begin{code} 4509\begin{alcode}
4241 pandoc file_out.tex -s -o file_out.odt 4510 pandoc file_out.tex -s -o file_out.odt
4242\end{code} 4511\end{alcode}
4243% \iffalse 4512% \iffalse
4244%</example> 4513%</example>
4245% \fi 4514% \fi
@@ -4251,7 +4520,7 @@
4251% \iffalse 4520% \iffalse
4252%<*example> 4521%<*example>
4253% \fi 4522% \fi
4254\begin{code} 4523\begin{alcode}
4255 % preamble: 4524 % preamble:
4256 \usepackage{arabluatex} % note that 'export' has been removed 4525 \usepackage{arabluatex} % note that 'export' has been removed
4257 \renewcommand{\txarb}[1]{#1} 4526 \renewcommand{\txarb}[1]{#1}
@@ -4261,7 +4530,7 @@
4261 % be safe to say: 4530 % be safe to say:
4262 \renewcommand{\prname}[2]{#2} 4531 \renewcommand{\prname}[2]{#2}
4263 % &c 4532 % &c
4264\end{code} 4533\end{alcode}
4265% \iffalse 4534% \iffalse
4266%</example> 4535%</example>
4267% \fi 4536% \fi
@@ -4302,18 +4571,12 @@
4302% functions and tables. Read the |.lua| files that accompany 4571% functions and tables. Read the |.lua| files that accompany
4303% \package{arabluatex} for more information. 4572% \package{arabluatex} for more information.
4304% \begin{macrocode} 4573% \begin{macrocode}
4305\RequirePackage{ifluatex} 4574\RequirePackage{iftex}
4306% \end{macrocode} 4575% \end{macrocode}
4307% \package{arabluatex} requires {\LuaLaTeX} of course. Issue a warning 4576% \package{arabluatex} requires {\LuaLaTeX} of course. Issue a warning
4308% if the document is processed with another engine. 4577% if the document is processed with another engine.
4309% \begin{macrocode} 4578% \begin{macrocode}
4310\ifluatex\else 4579\RequireLuaTeX
4311 \PackageError{arabluatex}{lualatex needed}{%
4312 Package `arabluatex' needs LuaTeX.\MessageBreak
4313 So you should use `lualatex' to process your document.\MessageBreak
4314 See documentation of `arabluatex' for further information.}%
4315 \expandafter\expandafter\expandafter\csname endinput\endcsname
4316\fi
4317% \end{macrocode} 4580% \end{macrocode}
4318% Declare the global options, and define them: 4581% Declare the global options, and define them:
4319% \begin{macrocode} 4582% \begin{macrocode}
@@ -4346,8 +4609,7 @@
4346\RequirePackage{xparse} 4609\RequirePackage{xparse}
4347\RequirePackage{adjustbox} 4610\RequirePackage{adjustbox}
4348\RequirePackage{xstring} 4611\RequirePackage{xstring}
4349\PassOptionsToPackage{normalem}{ulem} 4612\RequirePackage{lua-ul}
4350\RequirePackage{ulem}
4351% \end{macrocode} 4613% \end{macrocode}
4352% The following boolean will be set to |true| in |RL| mode: 4614% The following boolean will be set to |true| in |RL| mode:
4353% \begin{macrocode} 4615% \begin{macrocode}
@@ -4361,9 +4623,10 @@
4361% and attempt to load the Amiri font which is included in \TeX{}live: 4623% and attempt to load the Amiri font which is included in \TeX{}live:
4362% \begin{macrocode} 4624% \begin{macrocode}
4363\AtBeginDocument{\ifdefined\arabicfont\relax\else 4625\AtBeginDocument{\ifdefined\arabicfont\relax\else
4364\PackageWarning{arabluatex}{\string\arabicfont\ is not defined.^^J 4626 \PackageInfo{arabluatex}{%
4365 I will try to load Amiri}% 4627 \string\arabicfont\ is not defined.\MessageBreak
4366\newfontfamily\arabicfont[Script=Arabic]{Amiri}\fi}% 4628 arabluatex will try to load Amiri}%
4629 \newfontfamily\arabicfont{Amiri}[Script=Arabic]\fi}%
4367% \end{macrocode} 4630% \end{macrocode}
4368% \begin{macro}{\setRL} 4631% \begin{macro}{\setRL}
4369% This neutralizes what may be defined by other packages: 4632% This neutralizes what may be defined by other packages:
@@ -4384,8 +4647,16 @@
4384% it to suit our purpose: 4647% it to suit our purpose:
4385% \begin{macrocode} 4648% \begin{macrocode}
4386\AtBeginDocument{\ifdef{\LR}% 4649\AtBeginDocument{\ifdef{\LR}%
4387 {\RenewDocumentCommand{\LR}{m}{\bgroup\textdir TLT\rmfamily#1\egroup}} 4650 {\RenewDocumentCommand{\LR}{m}{\bgroup\textdir TLT\reset@font#1\egroup}}
4388 {\NewDocumentCommand{\LR}{m}{\bgroup\textdir TLT\rmfamily#1\egroup}}} 4651 {\NewDocumentCommand{\LR}{m}{\bgroup\textdir TLT\reset@font#1\egroup}}}
4652% \end{macrocode}
4653% \end{macro}
4654% \begin{macro}{\SetArbNumbers}
4655% \changes{v1.21}{2023/05/21}{selects Indian or Arabic numbers}
4656% \begin{macrocode}
4657\NewDocumentCommand{\SetArbNumbers}{m}{%
4658 \luadirect{arabluatex.setnums(\luastringN{#1})}%
4659}
4389% \end{macrocode} 4660% \end{macrocode}
4390% \end{macro} 4661% \end{macro}
4391% \begin{macro}{\RL} This one typesets its argument from right to 4662% \begin{macro}{\RL} This one typesets its argument from right to
@@ -4422,16 +4693,28 @@
4422% \begin{macro}{\aemph} Arabic emphasis. Needs to be redefined as 4693% \begin{macro}{\aemph} Arabic emphasis. Needs to be redefined as
4423% well. The function is actually coded in Lua. 4694% well. The function is actually coded in Lua.
4424% \changes{v1.16}{2018/11/06}{Now uses \textsf{ulem}} 4695% \changes{v1.16}{2018/11/06}{Now uses \textsf{ulem}}
4696% \changes{v1.19}{2020/03/15}{Now uses \textsf{lua-ul}}
4425% \begin{macro}{\aemph*} The \enquote*{starred} version of this 4697% \begin{macro}{\aemph*} The \enquote*{starred} version of this
4426% command alway puts the stroke over its argument. 4698% command alway puts the stroke over its argument.
4427% \changes{v1.9.2}{2017/10/24}{Starred version which always puts the 4699% \changes{v1.9.2}{2017/10/24}{Starred version which always puts the
4428% stroke over its argument}As of v1.16 \package{arabluatex} uses 4700% stroke over its argument}As of v1.19, \package{arabluatex} uses
4429% \package{ulem} to render the strokes, thus allowing line breaks 4701% \package{lua-ul} to render the strokes, thus allowing line breaks
4430% and manual hyphenation for transliterated Arabic. 4702% and manual hyphenation for transliterated Arabic.
4703% \begin{macro}{\aoline}
4704% \begin{macro}{\aoline*}
4705% \begin{macro}{\auline}
4706% \changes{v1.19}{2020/03/15}{Non context-sensitive command to
4707% underline Arabic words is provided}\cs{aoline} and \cs{auline}
4708% derive from \cs{newunderlinetype} provided by the \package{lua-ul}
4709% package whereas \cs{aoline*}, which uses \cs{overline} in math-mode,
4710% is better suited for so-called \arb[trans]{'ab^gad} numbers.
4431% \begin{macrocode} 4711% \begin{macrocode}
4432\def\oline{\@ifstar\@oline\@@oline} 4712\newunderlinetype\@aoverLine{\leaders\vrule height 3ex depth -2.9ex}
4433\def\@oline#1{\ensuremath{\overline{\mbox{#1}}}} 4713\def\aoline{\@ifstar\@aoline\@@aoline}
4434\def\@@oline{\bgroup \ULdepth=-3ex \ULset} 4714\def\@aoline#1{\ensuremath{\overline{\mbox{#1}}}}
4715\def\@@aoline#1{{\@aoverLine#1}}
4716\newunderlinetype\@aunderLine{\leaders\vrule height -.65ex depth .75ex}
4717\def\auline#1{{\@aunderLine#1}}
4435\AtBeginDocument{\ifdef{\aemph}% 4718\AtBeginDocument{\ifdef{\aemph}%
4436 {\RenewDocumentCommand{\aemph}{s m}{% 4719 {\RenewDocumentCommand{\aemph}{s m}{%
4437 \IfBooleanTF{#1}{% 4720 \IfBooleanTF{#1}{%
@@ -4448,6 +4731,9 @@
4448% \end{macrocode} 4731% \end{macrocode}
4449% \end{macro} 4732% \end{macro}
4450% \end{macro} 4733% \end{macro}
4734% \end{macro}
4735% \end{macro}
4736% \end{macro}
4451% \begin{macro}{\arbcolor}\changes{v1.12}{2018/06/24}{Standard color 4737% \begin{macro}{\arbcolor}\changes{v1.12}{2018/06/24}{Standard color
4452% command for Arabic environments} 4738% command for Arabic environments}
4453% \cs{arbcolor}\oarg{color}\marg{Arabic text} takes the Arabic text to 4739% \cs{arbcolor}\oarg{color}\marg{Arabic text} takes the Arabic text to
@@ -4528,6 +4814,16 @@
4528\NewDocumentCommand{\SetTranslitStyle}{m}{\def\al@trans@style{#1}} 4814\NewDocumentCommand{\SetTranslitStyle}{m}{\def\al@trans@style{#1}}
4529% \end{macrocode} 4815% \end{macrocode}
4530% \end{macro} 4816% \end{macro}
4817% \begin{macro}{\altrfont}
4818% \changes{v1.21}{2023/05/21}{new command \cs{altrfont} to store
4819% font and shape information (trans mode)} Finally \cs{altrfont}
4820% is used internally by \package{arabluatex} to store family and
4821% shape information about the font to be used for transliterated
4822% Arabic.
4823% \begin{macrocode}
4824\def\altrfont{\al@trans@font\al@trans@style}
4825% \end{macrocode}
4826% \end{macro}
4531% \begin{macro}{\SetTranslitConvention} 4827% \begin{macro}{\SetTranslitConvention}
4532% \cs{SetTranslitConvention}\marg{convention} can be used to change 4828% \cs{SetTranslitConvention}\marg{convention} can be used to change
4533% the transliteration convention, which is |dmg| by default: 4829% the transliteration convention, which is |dmg| by default:
@@ -4618,7 +4914,7 @@
4618 \ifvmode\leavevmode\fi% 4914 \ifvmode\leavevmode\fi%
4619 \bgroup\textdir TRT\arabicfont#1\egroup} 4915 \bgroup\textdir TRT\arabicfont#1\egroup}
4620\NewDocumentCommand{\txtrans}{+m}{% 4916\NewDocumentCommand{\txtrans}{+m}{%
4621 \bgroup\textdir TLT\al@trans@font\al@trans@style#1\egroup} 4917 \bgroup\textdir TLT\altrfont#1\egroup}
4622% \end{macrocode} 4918% \end{macrocode}
4623% \end{macro} 4919% \end{macro}
4624% \end{macro} 4920% \end{macro}
@@ -4642,7 +4938,7 @@
4642\NewDocumentEnvironment{txarabtr}{}{% 4938\NewDocumentEnvironment{txarabtr}{}{%
4643 \par% 4939 \par%
4644 \pardir TLT\textdir TLT% 4940 \pardir TLT\textdir TLT%
4645 \al@trans@font\al@trans@style}{\par} 4941 \altrfont}{\par}
4646% \end{macrocode} 4942% \end{macrocode}
4647% \end{environment} 4943% \end{environment}
4648% \begin{macro}{\arb} 4944% \begin{macro}{\arb}
@@ -4671,7 +4967,7 @@
4671 \luastringO{\al@arb@rules}, \luastringO{\al@input@scheme}))}\egroup% 4967 \luastringO{\al@arb@rules}, \luastringO{\al@input@scheme}))}\egroup%
4672 \else% 4968 \else%
4673 \ifx\@tempa\al@mode@trans% 4969 \ifx\@tempa\al@mode@trans%
4674 \bgroup\textdir TLT\al@trans@font\al@trans@style% 4970 \bgroup\textdir TLT%
4675 \luadirect{tex.sprint(arabluatex.processtrans(\luastringN{#2}, 4971 \luadirect{tex.sprint(arabluatex.processtrans(\luastringN{#2},
4676 \luastringO{\al@trans@convention}, 4972 \luastringO{\al@trans@convention},
4677 \luastringO{\al@arb@rules}, 4973 \luastringO{\al@arb@rules},
@@ -4715,7 +5011,7 @@
4715% The |arab| environment does for paragraphs the same as \cs{arb} does 5011% The |arab| environment does for paragraphs the same as \cs{arb} does
4716% for short insertions of Arabic text. 5012% for short insertions of Arabic text.
4717% \begin{macrocode} 5013% \begin{macrocode}
4718\NewDocumentEnvironment{arab}{O{\al@mode} +b}% 5014\NewDocumentEnvironment{arab}{!O{\al@mode} +b}%
4719{\par\edef\@tempa{#1}% 5015{\par\edef\@tempa{#1}%
4720 \ifx\@tempa\al@mode@voc% 5016 \ifx\@tempa\al@mode@voc%
4721 \booltrue{al@rlmode}% 5017 \booltrue{al@rlmode}%
@@ -4736,7 +5032,7 @@
4736 \luastringO{\al@arb@rules}, \luastringO{\al@input@scheme}))}\egroup% 5032 \luastringO{\al@arb@rules}, \luastringO{\al@input@scheme}))}\egroup%
4737 \else% 5033 \else%
4738 \ifx\@tempa\al@mode@trans% 5034 \ifx\@tempa\al@mode@trans%
4739 \bgroup\pardir TLT\textdir TLT\al@trans@font\al@trans@style% 5035 \bgroup\pardir TLT\textdir TLT%
4740 \luadirect{tex.sprint(arabluatex.processtrans(\luastringN{#2}, 5036 \luadirect{tex.sprint(arabluatex.processtrans(\luastringN{#2},
4741 \luastringO{\al@trans@convention}, 5037 \luastringO{\al@trans@convention},
4742 \luastringO{\al@arb@rules}, 5038 \luastringO{\al@arb@rules},
@@ -4756,55 +5052,63 @@
4756% \begin{macrocode} 5052% \begin{macrocode}
4757\newlength{\al@bayt@width} 5053\newlength{\al@bayt@width}
4758\newlength{\al@gutter@width} 5054\newlength{\al@gutter@width}
5055\newlength{\al@verse@twidth}
4759\setlength{\al@bayt@width}{.3\textwidth} 5056\setlength{\al@bayt@width}{.3\textwidth}
4760\setlength{\al@gutter@width}{.15\al@bayt@width} 5057\setlength{\al@gutter@width}{.15\al@bayt@width}
4761\define@key[al]{verse}{width}{\setlength{\al@bayt@width}{#1}} 5058\define@key[al]{verse}{width}{\setlength{\al@bayt@width}{#1}}
4762\define@key[al]{verse}{gutter}{\setlength{\al@gutter@width}{#1}} 5059\define@key[al]{verse}{gutter}{\setlength{\al@gutter@width}{#1}}
4763\define@key[al]{verse}{metre}{\arb{#1}} 5060\define@key[al]{verse}{metre}{\def\al@verse@metre@value{\arb{#1}}}
4764\define@key[al]{verse}{color}[]{\color{#1}} 5061\define@key[al]{verse}{color}[]{\color{#1}}
4765\define@boolkey[al]{verse}{utf}[true]{} 5062\define@boolkey[al]{verse}{utf}[true]{}
4766\define@boolkey[al]{verse}{delim}[true]{} 5063\define@boolkey[al]{verse}{delim}[true]{}
4767\define@boolkey[al]{verse}{export}[true]{} 5064\define@boolkey[al]{verse}{export}[true]{}
4768\define@choicekey[al]{verse}{mode}{fullvoc, voc, novoc, 5065\define@choicekey[al]{verse}{mode}{fullvoc, voc, novoc,
4769 trans}{\def\al@mode{#1}} 5066 trans}{\def\al@mode{#1}}
4770\presetkeys[al]{verse}{metre={}, utf=false, 5067\presetkeys[al]{verse}{utf=false, delim=false}{}
4771 delim=false}{}
4772% \end{macrocode} 5068% \end{macrocode}
4773% Then follows the environment itself: 5069% Then follows the environment itself:
4774% \begin{macrocode} 5070% \begin{macrocode}
4775\NewDocumentEnvironment{arabverse}{O{}}% 5071\NewDocumentEnvironment{arabverse}{!O{}}%
4776{\bgroup\setkeys[al]{verse}[width, gutter, color, utf, delim, 5072{\bgroup\setkeys[al]{verse}[width, gutter, color, utf, delim,
4777 metre]{#1}% 5073 metre]{#1}%
4778 \if@pkg@export\ifal@verse@export% 5074 \if@pkg@export
4779 \ArbOutFile{\begin{arabverse}}% 5075 \ifal@verse@export
4780 % \ifx\al@mode\al@mode@trans% 5076 \ArbOutFile{\begin{arabverse}}%
4781 % \luadirect{arabluatex.tooutfile(\luastringN{[#1]})}% 5077 % \ifx\al@mode\al@mode@trans%
4782 % \else% 5078 % \luadirect{arabluatex.tooutfile(\luastringN{[#1]})}%
4783 \IfSubStr[1]{#1}{utf}% 5079 % \else%
5080 \IfSubStr[1]{#1}{utf}%
4784 {\luadirect{arabluatex.tooutfile(\luastringN{[#1]})}}% 5081 {\luadirect{arabluatex.tooutfile(\luastringN{[#1]})}}%
4785 {\luadirect{arabluatex.tooutfile(\luastringN{[#1, utf]})}}% 5082 {\luadirect{arabluatex.tooutfile(\luastringN{[#1, utf]})}}%
4786 % \fi 5083 % \fi
4787 \else\fi\else\fi\egroup% 5084 \else
4788 \par\centering\noindent\bgroup\setkeys[al]{verse}[metre]{#1}% 5085 \fi
4789 % \ifx\al@mode\al@mode@trans% 5086 \else
4790 % \ifal@verse@utf\setRL\else\setLR\fi% 5087 \fi
4791 % \else\setRL\fi% 5088 \egroup
4792 \ifal@verse@utf% 5089 \centering\noindent\bgroup\setkeys[al]{verse}[metre]{#1}%
4793 \ifx\al@mode\al@mode@trans\setLR\else\setRL\fi% 5090 % \ifx\al@mode\al@mode@trans%
4794 \else% 5091 % \ifal@verse@utf\setRL\else\setLR\fi%
4795 \ifx\al@mode\al@mode@trans\setLR\else\setRL\fi% 5092 % \else\setRL\fi%
4796 \fi% 5093 \ifal@verse@utf
4797 \arab@v@export[#1] 5094 \ifx\al@mode\al@mode@trans\setLR\else\setRL\fi
5095 \else
5096 \ifx\al@mode\al@mode@trans\setLR\else\setRL\fi
5097 \fi
5098 \addtolength{\al@verse@twidth}{2\al@bayt@width}%
5099 \addtolength{\al@verse@twidth}{\al@gutter@width}%
5100 \arab@v@export[#1]
4798 }% 5101 }%
4799 {\endarab@v@export 5102 {\endarab@v@export
4800 \hfill\setkeys[al]{verse}[width, gutter, color, utf, delim, mode, 5103 \setkeys[al]{verse}[width, gutter, color, utf, delim, mode,
4801 export]{#1}% 5104 export]{#1}%
4802 \egroup\par% 5105 \ifdefined\al@verse@metre@value\hfill\al@verse@metre@value\fi
5106 \egroup
4803 \bgroup\setkeys[al]{verse}[width, gutter, color, utf, delim, mode, 5107 \bgroup\setkeys[al]{verse}[width, gutter, color, utf, delim, mode,
4804 metre]{#1}% 5108 metre]{#1}%
4805 \if@pkg@export\ifal@verse@export% 5109 \if@pkg@export\ifal@verse@export
4806 \ArbOutFile{\end{arabverse}} 5110 \ArbOutFile{\end{arabverse}}%
4807 \else\fi\else\fi\egroup} 5111 \else\fi\else\fi\egroup}
4808% \end{macrocode} 5112% \end{macrocode}
4809% \begin{macro}{\bayt} 5113% \begin{macro}{\bayt}
4810% \changes{v1.6}{2016/12/17}{New macro \cs{bayt} for typesetting 5114% \changes{v1.6}{2016/12/17}{New macro \cs{bayt} for typesetting
@@ -4816,6 +5120,14 @@
4816% \arb[trans]{tadwIr}. In some of these cases, the hemistichs may be 5120% \arb[trans]{tadwIr}. In some of these cases, the hemistichs may be
4817% connected by a prominent horizontal flexible stroke which is drawn 5121% connected by a prominent horizontal flexible stroke which is drawn
4818% by the \cs{al@verse@stroke} command. 5122% by the \cs{al@verse@stroke} command.
5123% \begin{macro}{\StretchBayt}
5124% \changes{v1.20}{2020/03/23}{Optionally removes stretching from lines
5125% of poetry} \cs{StretchBayt}\oarg{true\textbar false} Allows to
5126% remove stretching and undesirable warping effect from Arabic lines of
5127% poetry. This command accepts one fixed optional argument, either
5128% |true| or |false|, and may be used either in the preamble or at any
5129% point of the document. By default, it is set to |true|.
5130% \end{macro}
4819% \begin{macro}{\SetHemistichDelim} 5131% \begin{macro}{\SetHemistichDelim}
4820% \changes{v1.6}{2016/12/17}{New \cs{SetHemistichDelim} command for 5132% \changes{v1.6}{2016/12/17}{New \cs{SetHemistichDelim} command for
4821% changing the default delimiter between hemistichs} A hemistich 5133% changing the default delimiter between hemistichs} A hemistich
@@ -4825,23 +5137,53 @@
4825% point of the document to change this default setting. 5137% point of the document to change this default setting.
4826% \end{macro} 5138% \end{macro}
4827% \begin{macrocode} 5139% \begin{macrocode}
5140\newif\ifal@warp@bayt
5141\al@warp@bayttrue
5142\NewDocumentCommand{\StretchBayt}{O{true}}{
5143 \edef\oarg@true{true}
5144 \edef\oarg@false{false}
5145 \edef\@tempa{#1}
5146 \ifx\@tempa\oarg@true\al@warp@bayttrue
5147 \else
5148 \ifx\@tempa\oarg@false\al@warp@baytfalse
5149 \else
5150 \PackageError{arabluatex}{\string\StretchBayt\space must be
5151 either 'true' or 'false'}{}
5152 \fi
5153 \fi
5154}
4828\NewDocumentCommand{\arb@utf}{m}{% 5155\NewDocumentCommand{\arb@utf}{m}{%
4829 \ifal@verse@utf\txarb{#1}\else\arb{#1}\fi} 5156 \ifal@verse@utf\txarb{#1}\else\arb{#1}\fi}
4830\def\al@hemistich@delim{*} 5157\def\al@hemistich@delim{*}
4831\NewDocumentCommand{\SetHemistichDelim}{m}{\def\al@hemistich@delim{#1}} 5158\NewDocumentCommand{\SetHemistichDelim}{m}{\def\al@hemistich@delim{#1}}
4832\def\al@verse@stroke{\leavevmode\xleaders\hbox{\arb{--}}\hfill\kern0pt} 5159\def\al@verse@stroke{\leavevmode\xleaders\hbox{\arb{--}}\hfill\kern0pt}
4833\NewDocumentCommand{\bayt}{s m o m}{% 5160\providebool{ekd@state}
4834 \IfBooleanTF{#1}{\relax}{\relax}% 5161\NewDocumentCommand{\bayt}{t+ s m o m}{%
5162 \IfBooleanTF{#1}{%
5163 \ifekd@state
5164 \leavevmode
5165 \stepcounter{ekd@lab}%
5166 \zlabel{ekd:\theekd@lab}%
5167 \luadirect{ekdosis.storeabspg(
5168 \luastring{\zref@extract{ekd:\theekd@lab}{abspage}})}%
5169 \add@apparatus
5170 \fi
5171 }{\relax}%
5172 \IfBooleanTF{#2}{\relax}{\relax}%
4835 \ifdefined\savenotes\savenotes\else\fi% 5173 \ifdefined\savenotes\savenotes\else\fi%
4836 \edef\al@tatweel{--}% 5174 \edef\al@tatweel{--}%
4837 \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#2}}% 5175 \ifal@warp@bayt%
4838 \IfNoValueTF{#3}{% 5176 \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#3}}%
5177 \else%
5178 \makebox[\al@bayt@width][s]{\arb@utf{#3}}%
5179 \fi%
5180 \IfNoValueTF{#4}{%
4839 \ifal@verse@delim\makebox[\al@gutter@width][c]{\al@hemistich@delim}% 5181 \ifal@verse@delim\makebox[\al@gutter@width][c]{\al@hemistich@delim}%
4840 \else% 5182 \else%
4841 \hspace{\al@gutter@width}% 5183 \hspace{\al@gutter@width}%
4842 \fi 5184 \fi
4843 }{% 5185 }{%
4844 \edef\@tempa{#3}% 5186 \edef\@tempa{#4}%
4845 \ifx\@tempa\al@tatweel% 5187 \ifx\@tempa\al@tatweel%
4846 \ifx\al@mode\al@mode@trans% 5188 \ifx\al@mode\al@mode@trans%
4847 \hspace{\al@gutter@width}% 5189 \hspace{\al@gutter@width}%
@@ -4850,16 +5192,98 @@
4850 \fi% 5192 \fi%
4851 \else% 5193 \else%
4852 \ifx\al@mode\al@mode@trans% 5194 \ifx\al@mode\al@mode@trans%
4853 \adjustbox{width=\al@gutter@width, height=\Height}{\arb@utf{#3}}% 5195 \ifal@warp@bayt%
5196 \adjustbox{width=\al@gutter@width, height=\Height}{\arb@utf{#4}}%
4854 \else% 5197 \else%
4855 \makebox[\al@gutter@width][s]{\arb@utf{#3}}% 5198 \makebox[\al@gutter@width][s]{\arb@utf{#4}}%
5199 \fi%
5200 \else%
5201 \makebox[\al@gutter@width][s]{\arb@utf{#4}}%
4856 \fi\fi}% 5202 \fi\fi}%
4857 \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#4}}% 5203 \ifal@warp@bayt%
5204 \adjustbox{width=\al@bayt@width, height=\Height}{\arb@utf{#5}}%
5205 \else%
5206 \makebox[\al@bayt@width][s]{\arb@utf{#5}}%
5207 \fi%
4858 \ifdefined\spewnotes\spewnotes\else\fi% 5208 \ifdefined\spewnotes\spewnotes\else\fi%
4859} 5209}
4860% \end{macrocode} 5210% \end{macrocode}
4861% \end{macro} 5211% \end{macro}
4862% \end{environment} 5212% \end{environment}
5213% \begin{macro}{\arind}
5214% \changes{v1.18}{2020/02/29}{New command \cs{arind} for building
5215% indexes}
5216% \cs{arind}\marg{root} is a command specialized in the contruction of
5217% indexes. As a mandadory argument, it takes the Arabic root under
5218% which a given word is to be indexed. Additionally, it may receive
5219% three optional \enquote*{named} arguments: |index|, |root| and
5220% |form|.
5221% \begin{macrocode}
5222\NewDocumentCommand{\SetDefaultIndex}{m}{
5223 \edef\@tempa{#1}
5224 \ifx\@tempa\empty
5225 \def\al@default@index{\jobname}
5226 \else
5227 \def\al@default@index{#1}
5228 \fi
5229}
5230% \end{macrocode}
5231% \begin{macrocode}
5232\def\al@index@mode{\al@mode}
5233\NewDocumentCommand{\SetIndexMode}{m}{
5234 \def\al@index@mode{#1}
5235}
5236% \end{macrocode}
5237% \begin{macrocode}
5238\define@cmdkeys[al]{index}[alind@]{index,root,form,pipe}
5239\NewDocumentCommand{\arind}{o m}{%
5240 \IfNoValueTF{#1}{%
5241 \ifdefined\al@default@index%
5242 \csname index\endcsname[\al@default@index]{#2}%
5243 \else%
5244 \csname index\endcsname{#2}%
5245 \fi%
5246 }{%
5247 \bgroup
5248 \setkeys[al]{index}{#1}%
5249 \def\al@one{%
5250 \ifdefined\alind@root
5251 \ifnum\alind@root < 10%
5252 !\LR{0\alind@root}%
5253 \else
5254 !\LR{\alind@root}%
5255 \fi
5256 \else
5257 !\LR{01}%
5258 \fi}%
5259 \def\al@two{%
5260 \ifdefined\alind@form @\arb[\al@index@mode]{\alind@form}\else\fi}%
5261 \ifdefined\alind@index%
5262 \ifdefined\alind@pipe
5263 \csname index\endcsname[\alind@index]{#2\al@one\al@two|\alind@pipe}%
5264 \else
5265 \csname index\endcsname[\alind@index]{#2\al@one\al@two}%
5266 \fi
5267 \else%
5268 \ifdefined\al@default@index%
5269 \ifdefined\alind@pipe
5270 \csname index\endcsname[\al@default@index]{%
5271 #2\al@one\al@two|\alind@pipe}%
5272 \else
5273 \csname index\endcsname[\al@default@index]{%
5274 #2\al@one\al@two}%
5275 \fi
5276 \else%
5277 \ifdefined\alind@pipe
5278 \csname index\endcsname{#2\al@one\al@two|\alind@pipe}%
5279 \else
5280 \csname index\endcsname{#2\al@one\al@two}%
5281 \fi
5282 \fi%
5283 \fi%
5284 \egroup}}
5285% \end{macrocode}
5286% \end{macro}
4863% \begin{macro}{\abjad} \cs{abjad}\marg{number} expresses its argument 5287% \begin{macro}{\abjad} \cs{abjad}\marg{number} expresses its argument
4864% in Arabic letters in accordance with the \arb[trans]{'abjad} 5288% in Arabic letters in accordance with the \arb[trans]{'abjad}
4865% arrangement of the alphabet. \meta{number} must be between 1 and 5289% arrangement of the alphabet. \meta{number} must be between 1 and
@@ -4872,13 +5296,13 @@
4872 \ifdefined\abjad% 5296 \ifdefined\abjad%
4873 \RenewDocumentCommand{\abjad}{m}% 5297 \RenewDocumentCommand{\abjad}{m}%
4874 {\ifbool{al@rlmode}% 5298 {\ifbool{al@rlmode}%
4875 {\oline*{% 5299 {\aoline*{%
4876 \luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}} 5300 \luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}}
4877 {\luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}} 5301 {\luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}}
4878 \else% 5302 \else%
4879 \NewDocumentCommand{\abjad}{m}% 5303 \NewDocumentCommand{\abjad}{m}%
4880 {\ifbool{al@rlmode}% 5304 {\ifbool{al@rlmode}%
4881 {\oline*{% 5305 {\aoline*{%
4882 \luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}} 5306 \luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}}
4883 {\luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}} 5307 {\luadirect{tex.sprint(arabluatex.abjadify(\luastring{#1}))}}}
4884 \fi} 5308 \fi}
@@ -5016,14 +5440,37 @@
5016\NewDocumentEnvironment{arab@v@export}{O{} +b}{% 5440\NewDocumentEnvironment{arab@v@export}{O{} +b}{%
5017 \setkeys[al]{verse}[width, gutter, color, utf, delim, mode, 5441 \setkeys[al]{verse}[width, gutter, color, utf, delim, mode,
5018 metre]{#1} 5442 metre]{#1}
5019 \if@pkg@export\ifal@verse@export% 5443 \if@pkg@export
5020 \par 5444 \ifal@verse@export
5021 #2 5445 \ifekd@state
5022 \luadirect{arabluatex.doexport("arabverse")} 5446 \begin{ekdverse}[width=\al@verse@twidth]
5023 \luadirect{tex.sprint(arabluatex.arbtoutf(\luastringN{#2}))} 5447 #2
5024 \luadirect{arabluatex.doexport("no")} 5448 \end{ekdverse}
5025 \else\par#2\fi\else\par#2\fi 5449 \else
5026}{\par} 5450 #2
5451 \fi
5452 \luadirect{arabluatex.doexport("arabverse")}%
5453 \luadirect{tex.sprint(arabluatex.arbtoutf(\luastringN{#2}))}%
5454 \luadirect{arabluatex.doexport("no")}%
5455 \else
5456 \ifekd@state
5457 \begin{ekdverse}[width=\al@verse@twidth]
5458 #2
5459 \end{ekdverse}
5460 \else
5461 #2
5462 \fi
5463 \fi
5464 \else
5465 \ifekd@state
5466 \begin{ekdverse}[width=\al@verse@twidth]
5467 #2
5468 \end{ekdverse}
5469 \else
5470 #2
5471 \fi
5472 \fi
5473}{}
5027% \end{macrocode} 5474% \end{macrocode}
5028% \end{environment} 5475% \end{environment}
5029% \begin{macro}{\arbpardir} 5476% \begin{macro}{\arbpardir}
diff --git a/arabluatex.el b/arabluatex.el
index 73bfcd6..5007675 100644
--- a/arabluatex.el
+++ b/arabluatex.el
@@ -1,29 +1,33 @@
1;;; arabluatex.el --- AUCTeX style for `arabluatex.sty' 1;;; arabluatex.el --- AUCTeX style for `arabluatex.sty'
2;; This file is part of the `arabluatex' package 2;; This file is part of the `arabluatex' package
3 3
4;; ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 4;; arabluatex -- ArabTeX for LuaLaTeX
5;; Copyright (C) 2016--2019 Robert Alessi 5;; Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
6;; Robert Alessi <alessi@robertalessi.net>
6 7
7;; Please send error reports and suggestions for improvements to Robert 8;; Permission to use, copy, modify, and distribute this software for
8;; Alessi <alessi@robertalessi.net> 9;; any purpose with or without fee is hereby granted, provided that
10;; the above copyright notice and this permission notice appear in all
11;; copies.
9 12
10;; This program is free software: you can redistribute it and/or modify 13;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11;; it under the terms of the GNU General Public License as published by 14;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12;; the Free Software Foundation, either version 3 of the License, or 15;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13;; (at your option) any later version. 16;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
17;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
18;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
19;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
20;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14 21
15;; This program is distributed in the hope that it will be useful, but 22;; The author would like to express his grateful thanks to Arash
16;; WITHOUT ANY WARRANTY; without even the implied warranty of 23;; Esbati <arash@gnu.org> whose comments helped to improve this file
17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24;; immensely.
18;; General Public License for more details.
19 25
20;; You should have received a copy of the GNU General Public License 26;; Please send error reports and suggestions for improvements to Robert
21;; along with this program. If not, see 27;; Alessi <alessi@robertalessi.net>
22;; <http://www.gnu.org/licenses/>.
23 28
24(defvar LaTeX-arabluatex-preamble-options 29(defvar LaTeX-arabluatex-preamble-options
25 '(;; 30 '(("voc")
26 ("voc")
27 ("fullvoc") 31 ("fullvoc")
28 ("novoc") 32 ("novoc")
29 ("trans") 33 ("trans")
@@ -32,21 +36,17 @@
32 36
33(defun LaTeX-arabluatex-package-options () 37(defun LaTeX-arabluatex-package-options ()
34 "Prompt for package options for arabluatex package." 38 "Prompt for package options for arabluatex package."
35 (TeX-read-key-val t 39 (TeX-read-key-val t LaTeX-arabluatex-preamble-options))
36 (append LaTeX-arabluatex-preamble-options)))
37 40
38(defvar LaTeX-arabluatex-mode-options 41(defvar LaTeX-arabluatex-mode-options
39 '(;; 42 '(("voc")
40 ("voc")
41 ("fullvoc") 43 ("fullvoc")
42 ("novoc") 44 ("novoc")
43 ("trans") 45 ("trans"))
44 ) 46 "List of local options for arabluatex macros.")
45 "Local options.")
46 47
47(defvar LaTeX-arabluatex-key-val-options 48(defvar LaTeX-arabluatex-key-val-options
48 '(;; 49 '(("mode" ("voc" "fullvoc" "novoc" "trans"))
49 ("mode" ("voc" "fullvoc" "novoc" "trans"))
50 ("width") 50 ("width")
51 ("gutter") 51 ("gutter")
52 ("metre") 52 ("metre")
@@ -56,23 +56,31 @@
56 ("export" ("true" "false"))) 56 ("export" ("true" "false")))
57 "Key=value options for arabverse environment.") 57 "Key=value options for arabverse environment.")
58 58
59(defvar LaTeX-arabluatex-color-options
60 '(()))
61
62(defvar LaTeX-arabluatex-outfile-options 59(defvar LaTeX-arabluatex-outfile-options
63 '(;; 60 '(("newline"))
64 ("newline")) 61 "List of options for outfile command.")
65 "Option for outfile command.")
66 62
67(defvar LaTeX-arabluatex-arbmark-options 63(defvar LaTeX-arabluatex-arbmark-options
68 '(;; 64 '(("rl")
69 ("rl")
70 ("lr")) 65 ("lr"))
71 "Option for arbmark command.") 66 "List of options for arbmark command.")
67
68(defvar LaTeX-arabluatex-arind-options
69 '(("index")
70 ("root"
71 ("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15"))
72 ("form")
73 ("pipe"))
74 "Option for arind command.")
72 75
73(TeX-add-style-hook 76(TeX-add-style-hook
74 "arabluatex" 77 "arabluatex"
75 (lambda () 78 (lambda ()
79 ;; Run the style hook for loaded packages:
80 (TeX-run-style-hooks "xcolor")
81 ;; Folding features:
82 (add-to-list (make-local-variable 'LaTeX-fold-macro-spec-list)
83 '("[i]" ("arind")) t)
76 ;; This package relies on lualatex, so check for it: 84 ;; This package relies on lualatex, so check for it:
77 (TeX-check-engine-add-engines 'luatex) 85 (TeX-check-engine-add-engines 'luatex)
78 (TeX-add-symbols 86 (TeX-add-symbols
@@ -93,45 +101,78 @@
93 "uc" 101 "uc"
94 "prname" 102 "prname"
95 "txarb" 103 "txarb"
96 '("arb" [ (TeX-arg-eval completing-read "Mode: " 104 '("arb" [ TeX-arg-eval completing-read
97 LaTeX-arabluatex-mode-options) ] 105 (TeX-argument-prompt nil nil "Mode")
106 LaTeX-arabluatex-mode-options ]
98 t) 107 t)
99 '("arbcolor" [ (TeX-arg-eval completing-read "Color: " 108 '("arbcolor" [ TeX-arg-eval completing-read
100 LaTeX-arabluatex-color-options) ] 109 (TeX-argument-prompt nil nil "Color")
110 (LaTeX-xcolor-definecolor-list) ]
101 t) 111 t)
102 '("arbmark" [ (TeX-arg-eval completing-read "Option: " 112 '("arbmark" [ TeX-arg-eval completing-read
103 LaTeX-arabluatex-arbmark-options) ] 113 (TeX-argument-prompt nil nil "Option")
114 LaTeX-arabluatex-arbmark-options ]
104 t) 115 t)
105 '("ArbOutFile" [ (TeX-arg-eval completing-read "Color: " 116 '("ArbOutFile" [ TeX-arg-eval completing-read
106 LaTeX-arabluatex-outfile-options) ] 117 (TeX-argument-prompt nil nil "Option")
118 LaTeX-arabluatex-outfile-options ]
107 t) 119 t)
108 '("ArbOutFile*" [ (TeX-arg-eval completing-read "Option: " 120 '("ArbOutFile*" [ TeX-arg-eval completing-read
109 LaTeX-arabluatex-outfile-options) ] 121 (TeX-argument-prompt nil nil "Option")
122 LaTeX-arabluatex-outfile-options ]
110 t) 123 t)
124 '("arind" [ TeX-arg-key-val LaTeX-arabluatex-arind-options ]
125 TeX-arg-index)
111 "SetHemistichDelim" 126 "SetHemistichDelim"
112 '("bayt" 2) 127 '("bayt" 2)
128 '("bayt+" 2)
113 "abjad" 129 "abjad"
130 '("SetArbNumbers" "Indian or Arabic")
114 "arbnull" 131 "arbnull"
115 "abraces" 132 "abraces"
116 "LR" 133 "LR"
117 "RL" 134 "RL"
118 "LRmarginpar" 135 '("LRmarginpar" [ "Left margin text" ] "Text")
119 "LRfootnote" 136 '("LRfootnote"
120 "RLfootnote" 137 (TeX-arg-conditional TeX-arg-footnote-number-p ([ "Number" ]) nil)
138 t)
139 '("RLfootnote"
140 (TeX-arg-conditional TeX-arg-footnote-number-p ([ "Number" ]) nil)
141 t)
121 "FixArbFtnmk" 142 "FixArbFtnmk"
122 "MkArbBreak" 143 "MkArbBreak"
123 '("newarbmark" 3) 144 '("newarbmark" 3)
124 '("setRL" 0) 145 '("setRL" 0)
125 '("setLR" 0)) 146 '("setLR" 0))
147
126 (LaTeX-add-environments 148 (LaTeX-add-environments
127 '("arab" LaTeX-env-args 149 '("arab" LaTeX-env-args
128 [ (TeX-arg-eval completing-read "Mode: " 150 [ TeX-arg-eval completing-read
129 LaTeX-arabluatex-mode-options) ] 151 (TeX-argument-prompt nil nil "Mode")
130 0) 152 LaTeX-arabluatex-mode-options ]
153 )
131 "txarab" 154 "txarab"
132 "arabexport" 155 "arabexport"
133 '("arabverse" LaTeX-env-args 156 '("arabverse" LaTeX-env-args
134 [ TeX-arg-key-val LaTeX-arabluatex-key-val-options ] 0)) 157 [ TeX-arg-key-val LaTeX-arabluatex-key-val-options ] ))
158
159 ;; Fontification
160 (when (and (featurep 'font-latex)
161 (eq TeX-install-font-lock 'font-latex-setup))
162 (font-latex-add-keywords '(("aemph" "{"))
163 'italic-command)
164 (font-latex-add-keywords '(("LRmarginpar" "[{")
165 ("LRfootnote" "[{")
166 ("RLfootnote" "[{")
167 ("arind" "[{"))
168 'reference)
169 (font-latex-add-keywords '(("SetTranslitFont" "{")
170 ("SetTranslitStyle" "{")
171 ("SetTranslitConvention" "{"))
172 'function))
173 ;; RefTeX support
174 (when (fboundp 'reftex-add-index-macros)
175 (reftex-add-index-macros '(("\\arind[]{*}" "" ?a "" nil t))))
135 ) 176 )
136 LaTeX-dialect) 177 LaTeX-dialect)
137 178
diff --git a/arabluatex.ins b/arabluatex.ins
index ea5a73e..a8c65c6 100644
--- a/arabluatex.ins
+++ b/arabluatex.ins
@@ -1,24 +1,23 @@
1%% This file is part of the `arabluatex' package 1%% This file is part of the `arabluatex' package
2%% 2%%
3%% ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 3%% ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
4%% Copyright (C) 2016--2019 Robert Alessi 4%% Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
5%%
6%% Please send error reports and suggestions for improvements to
7%% Robert Alessi <alessi@robertalessi.net> 5%% Robert Alessi <alessi@robertalessi.net>
8%% 6%%
9%% This program is free software: you can redistribute it and/or 7%% Permission to use, copy, modify, and distribute this software for any
10%% modify it under the terms of the GNU General Public License 8%% purpose with or without fee is hereby granted, provided that the above
11%% as published by the Free Software Foundation, either version 3 9%% copyright notice and this permission notice appear in all copies.
12%% of the License, or (at your option) any later version. 10%%
13%% 11%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14%% This program is distributed in the hope that it will be useful, 12%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15%% but WITHOUT ANY WARRANTY; without even the implied warranty of 13%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17%% GNU General Public License for more details. 15%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18%% 18%%
19%% You should have received a copy of the GNU General Public License 19%% Please send error reports and suggestions for improvements to
20%% along with this program. If not, see 20%% Robert Alessi <alessi@robertalessi.net>
21%% <http://www.gnu.org/licenses/>.
22%% 21%%
23%% This release of 'arabluatex' consists of the following source files: 22%% This release of 'arabluatex' consists of the following source files:
24%% - arabluatex.ins 23%% - arabluatex.ins
@@ -28,8 +27,6 @@
28%% - arabluatex_fullvoc.lua 27%% - arabluatex_fullvoc.lua
29%% - arabluatex_novoc.lua 28%% - arabluatex_novoc.lua
30%% - arabluatex_trans.lua 29%% - arabluatex_trans.lua
31%%
32
33 30
34\input docstrip.tex 31\input docstrip.tex
35\keepsilent 32\keepsilent
@@ -43,24 +40,23 @@ This is a generated file.
43This file is part of the `arabluatex' package 40This file is part of the `arabluatex' package
44 41
45ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 42ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
46Copyright (C) 2016--2019 Robert Alessi 43Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
47 44Robert Alessi <alessi@robertalessi.net>
48Please send error reports and suggestions for improvements to Robert 45
49Alessi <alessi@robertalessi.net> 46Permission to use, copy, modify, and distribute this software for any
50 47purpose with or without fee is hereby granted, provided that the above
51This program is free software: you can redistribute it and/or modify 48copyright notice and this permission notice appear in all copies.
52it under the terms of the GNU General Public License as published by 49
53the Free Software Foundation, either version 3 of the License, or 50THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
54(at your option) any later version. 51WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
55 52MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
56This program is distributed in the hope that it will be useful, but 53ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
57WITHOUT ANY WARRANTY; without even the implied warranty of 54WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
58MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 55ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
59General Public License for more details. 56OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
60 57
61You should have received a copy of the GNU General Public License 58Please send error reports and suggestions for improvements to
62along with this program. If not, see 59Robert Alessi <alessi@robertalessi.net>
63<http://www.gnu.org/licenses/>.
64 60
65This release of 'arabluatex' consists of the following source files: 61This release of 'arabluatex' consists of the following source files:
66- arabluatex.ins 62- arabluatex.ins
diff --git a/arabluatex.lua b/arabluatex.lua
index a91e211..114a569 100644
--- a/arabluatex.lua
+++ b/arabluatex.lua
@@ -2,24 +2,23 @@
2This file is part of the `arabluatex' package 2This file is part of the `arabluatex' package
3 3
4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
5Copyright (C) 2016--2019 Robert Alessi 5Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
6Robert Alessi <alessi@robertalessi.net>
6 7
7Please send error reports and suggestions for improvements to Robert 8Permission to use, copy, modify, and distribute this software for any
8Alessi <alessi@robertalessi.net> 9purpose with or without fee is hereby granted, provided that the above
10copyright notice and this permission notice appear in all copies.
9 11
10This program is free software: you can redistribute it and/or modify 12THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11it under the terms of the GNU General Public License as published by 13WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12the Free Software Foundation, either version 3 of the License, or 14MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13(at your option) any later version. 15ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14 19
15This program is distributed in the hope that it will be useful, but 20Please send error reports and suggestions for improvements to Robert
16WITHOUT ANY WARRANTY; without even the implied warranty of 21Alessi <alessi@robertalessi.net>
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with this program. If not, see
22<http://www.gnu.org/licenses/>.
23--]] 22--]]
24 23
25arabluatex = {} 24arabluatex = {}
@@ -54,11 +53,26 @@ local cmd = lpeg.Cs(dblbkslash * ascii^1 * cmdstar^-1)
54local rawcmd = lpeg.Cs(dblbkslash * ascii^1) 53local rawcmd = lpeg.Cs(dblbkslash * ascii^1)
55local aftercmd = lpeg.Cs(lpeg.S("*[{,.?;:'`\"") + dblbkslash) 54local aftercmd = lpeg.Cs(lpeg.S("*[{,.?;:'`\"") + dblbkslash)
56local cmdargs = lpeg.Cs(spce^-1 * bsqbracketsii * bcbracesii * bsqbrackets^-1) 55local cmdargs = lpeg.Cs(spce^-1 * bsqbracketsii * bcbracesii * bsqbrackets^-1)
56local cmdargsnobs = lpeg.Cs(spce^-1 * bcbracesii)
57local arbargs = lpeg.Cs(spce^-1 * bsqbrackets^-1 * bcbraces) 57local arbargs = lpeg.Cs(spce^-1 * bsqbrackets^-1 * bcbraces)
58local baytargs = lpeg.Cs(spce * bcbraces * bsqbrackets^-1 * bcbraces) 58local baytargs = lpeg.Cs(spce * bcbraces * bsqbrackets^-1 * bcbraces)
59local arind = lpeg.Cs(dblbkslash * lpeg.P("arind") * spce^-1 * bsqbracketsii) 59local arind = lpeg.Cs(dblbkslash * lpeg.P("arind") * spce^-1 * bsqbracketsii)
60 60
61local function protectarb(str) 61local function protectarb(str)
62 -- \App[]{}{}
63 str = string.gsub(str, "(\\App%s?)(%b{})(%b{})", "%1[]%2%3")
64 str = gsub(str, lpeg.P("\\App") * spcenc^-1 * bsqbrackets * bcbraces * bcbraces,
65 function(opt, lem, rdg)
66 opt = string.sub(opt, 2, -2)
67 lem = string.sub(lem, 2, -2)
68 rdg = string.sub(rdg, 2, -2)
69 if opt == ""
70 then
71 return string.format("\\app{%s%s}", lem, rdg)
72 else
73 return string.format("\\app[%s]{%s%s}", opt, lem, rdg)
74 end
75 end)
62 str = string.gsub(str, "(\\arb%s?)(%[.-%])(%b{})", "\\al@brk{\\arb%2%3}") 76 str = string.gsub(str, "(\\arb%s?)(%[.-%])(%b{})", "\\al@brk{\\arb%2%3}")
63 str = string.gsub(str, "(\\LR%s?)(%b{})", "\\@LR%2") 77 str = string.gsub(str, "(\\LR%s?)(%b{})", "\\@LR%2")
64 str = string.gsub(str, "(\\RL%s?)(%b{})", "\\@RL%2") 78 str = string.gsub(str, "(\\RL%s?)(%b{})", "\\@RL%2")
@@ -90,11 +104,11 @@ local outofarb = {
90local albrkcmds = { 104local albrkcmds = {
91 "begin", 105 "begin",
92 "end", 106 "end",
93 "par",
94 "LRmarginpar", 107 "LRmarginpar",
95 "arbmark", 108 "arbmark",
96 "abjad", 109 "abjad",
97 "ayah" 110 "ayah",
111 "SetArbNumbers"
98} 112}
99local brkcmds = {} 113local brkcmds = {}
100 114
@@ -120,13 +134,15 @@ function arabluatex.mkarbbreak(str, opt)
120end 134end
121 135
122local function breakcmd(str) 136local function breakcmd(str)
137 -- \par
138 str = gsub(str, dblbkslash * lpeg.Cs("par") * cmdargsnobs, "\\al@brk{%1%2%3}")
123 -- process \item[], then \item[] 139 -- process \item[], then \item[]
124 str = string.gsub(str, "\\(item.?)(%b[])", 140 str = string.gsub(str, "\\(item.?)(%b[])",
125 function(tag, body) 141 function(tag, body)
126 body = string.sub(body, 2, -2) 142 body = string.sub(body, 2, -2)
127 return string.format("\\al@brk{\\item[\\arb{%s}] }", body) 143 return string.format("\\al@brk{\\item[\\arb{%s}] }", body)
128 end) 144 end)
129 str = string.gsub(str, "(\\item)(%s+)", "%1{}%2") 145 str = string.gsub(str, "(\\item)(%s+)", "%1{}%2")
130 -- \textcolor 146 -- \textcolor
131 str = string.gsub(str, "\\(textcolor%s?)(%b{})(%b{})", 147 str = string.gsub(str, "\\(textcolor%s?)(%b{})(%b{})",
132 function(tag, bodycolor, bodytext) 148 function(tag, bodycolor, bodytext)
@@ -170,19 +186,38 @@ local function holdcmd(str)
170 return str 186 return str
171end 187end
172 188
173local function arbnum(str) 189local indorarbnum = "Indian"
190
191function arabluatex.setnums(opt)
192 if opt == "Indian"
193 then
194 indorarbnum = "Indian"
195 else
196 indorarbnum = "Arabic"
197 end
198end
199
200local function arbnum(str) -- not used, see below
174 str = string.gsub(str, "([0-9%,%-%/]+)", function(num) 201 str = string.gsub(str, "([0-9%,%-%/]+)", function(num)
175 return string.reverse(num) 202 return string.reverse(num)
176 end) 203 end)
177 return str 204 return str
178end 205end
179 206
180local function indnum(str) 207local function indnum(str, dir)
181 str = string.gsub(str, "([0-9%,%-%/]+)", function(num) 208 if dir == "ltr"
182 return string.reverse(num) 209 then
183 end) 210 -- do nothing
184 for i = 1,#numbers do 211 else
185 str = string.gsub(str, numbers[i].a, numbers[i].b) 212 str = string.gsub(str, "([0-9%,%-%/]+)", function(num)
213 return string.reverse(num)
214 end)
215 end
216 if indorarbnum == "Indian"
217 then
218 for i = 1,#numbers do
219 str = string.gsub(str, numbers[i].a, numbers[i].b)
220 end
186 end 221 end
187 return str 222 return str
188end 223end
@@ -269,13 +304,23 @@ local function takeoutarb(str)
269 end 304 end
270 str = string.gsub(str, "(\\arb%s?)(%b{})", function(tag, body) 305 str = string.gsub(str, "(\\arb%s?)(%b{})", function(tag, body)
271 body = string.sub(body, 2, -2) 306 body = string.sub(body, 2, -2)
272 return string.format("%s", body) 307 return string.format("\\al@brk{%s{%s}}", tag, body)
273 end) 308 end)
274 str = string.gsub(str, "\\@rb", "\\arb") 309 str = string.gsub(str, "\\@rb", "\\arb")
275 str = "\\arb{"..str.."}" 310 str = "\\arb{"..str.."}"
276 return str 311 return str
277end 312end
278 313
314-- I owe this function to M. Krüger and U. Fischer. Thank to them both.
315local function getrenderer()
316 local a = nil
317 if font.getfont(font.current()).specification
318 then
319 a=font.getfont(font.current()).specification.features.normal.mode
320 end
321 return a
322end
323
279local function voc(str, rules) 324local function voc(str, rules)
280 str = string.gsub(str, "\\arb(%b{})", function(inside) 325 str = string.gsub(str, "\\arb(%b{})", function(inside)
281 inside = string.sub(inside, 2, -2) 326 inside = string.sub(inside, 2, -2)
@@ -311,8 +356,16 @@ local function voc(str, rules)
311 for i = 1,#shortv do 356 for i = 1,#shortv do
312 inside = string.gsub(inside, shortv[i].a, shortv[i].b) 357 inside = string.gsub(inside, shortv[i].a, shortv[i].b)
313 end 358 end
314 for i = 1,#punctuation do 359 if getrenderer() == "harf"
315 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) 360 then
361 for i = 1,#punctuationhb do
362 inside = string.gsub(inside, punctuationhb[i].a,
363 punctuationhb[i].b)
364 end
365 else
366 for i = 1,#punctuation do
367 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
368 end
316 end 369 end
317 for i = 1,#null do 370 for i = 1,#null do
318 inside = string.gsub(inside, null[i].a, null[i].b) 371 inside = string.gsub(inside, null[i].a, null[i].b)
@@ -347,8 +400,16 @@ local function voceasy(str)
347 for i = 1,#shortv do 400 for i = 1,#shortv do
348 inside = string.gsub(inside, shortv[i].a, shortv[i].b) 401 inside = string.gsub(inside, shortv[i].a, shortv[i].b)
349 end 402 end
350 for i = 1,#punctuation do 403 if getrenderer() == "harf"
351 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) 404 then
405 for i = 1,#punctuationhb do
406 inside = string.gsub(inside, punctuationhb[i].a,
407 punctuationhb[i].b)
408 end
409 else
410 for i = 1,#punctuation do
411 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
412 end
352 end 413 end
353 for i = 1,#null do 414 for i = 1,#null do
354 inside = string.gsub(inside, null[i].a, null[i].b) 415 inside = string.gsub(inside, null[i].a, null[i].b)
@@ -400,8 +461,16 @@ local function fullvoc(str, rules)
400 for i = 1,#shortv do 461 for i = 1,#shortv do
401 inside = string.gsub(inside, shortv[i].a, shortv[i].b) 462 inside = string.gsub(inside, shortv[i].a, shortv[i].b)
402 end 463 end
403 for i = 1,#punctuation do 464 if getrenderer() == "harf"
404 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) 465 then
466 for i = 1,#punctuationhb do
467 inside = string.gsub(inside, punctuationhb[i].a,
468 punctuationhb[i].b)
469 end
470 else
471 for i = 1,#punctuation do
472 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
473 end
405 end 474 end
406 for i = 1,#null do 475 for i = 1,#null do
407 inside = string.gsub(inside, null[i].a, null[i].b) 476 inside = string.gsub(inside, null[i].a, null[i].b)
@@ -448,8 +517,16 @@ local function fullvoceasy(str, rules)
448 for i = 1,#shortv do 517 for i = 1,#shortv do
449 inside = string.gsub(inside, shortv[i].a, shortv[i].b) 518 inside = string.gsub(inside, shortv[i].a, shortv[i].b)
450 end 519 end
451 for i = 1,#punctuation do 520 if getrenderer() == "harf"
452 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) 521 then
522 for i = 1,#punctuationhb do
523 inside = string.gsub(inside, punctuationhb[i].a,
524 punctuationhb[i].b)
525 end
526 else
527 for i = 1,#punctuation do
528 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
529 end
453 end 530 end
454 for i = 1,#null do 531 for i = 1,#null do
455 inside = string.gsub(inside, null[i].a, null[i].b) 532 inside = string.gsub(inside, null[i].a, null[i].b)
@@ -484,8 +561,16 @@ local function novoc(str)
484 for i = 1,#shortvnv do 561 for i = 1,#shortvnv do
485 inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b) 562 inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b)
486 end 563 end
487 for i = 1,#punctuation do 564 if getrenderer() == "harf"
488 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) 565 then
566 for i = 1,#punctuationhb do
567 inside = string.gsub(inside, punctuationhb[i].a,
568 punctuationhb[i].b)
569 end
570 else
571 for i = 1,#punctuation do
572 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
573 end
489 end 574 end
490 for i = 1,#null do 575 for i = 1,#null do
491 inside = string.gsub(inside, null[i].a, null[i].b) 576 inside = string.gsub(inside, null[i].a, null[i].b)
@@ -520,8 +605,16 @@ local function novoceasy(str)
520 for i = 1,#shortvnv do 605 for i = 1,#shortvnv do
521 inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b) 606 inside = string.gsub(inside, shortvnv[i].a, shortvnv[i].b)
522 end 607 end
523 for i = 1,#punctuation do 608 if getrenderer() == "harf"
524 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b) 609 then
610 for i = 1,#punctuationhb do
611 inside = string.gsub(inside, punctuationhb[i].a,
612 punctuationhb[i].b)
613 end
614 else
615 for i = 1,#punctuation do
616 inside = string.gsub(inside, punctuation[i].a, punctuation[i].b)
617 end
525 end 618 end
526 for i = 1,#null do 619 for i = 1,#null do
527 inside = string.gsub(inside, null[i].a, null[i].b) 620 inside = string.gsub(inside, null[i].a, null[i].b)
@@ -532,11 +625,19 @@ local function novoceasy(str)
532 return str 625 return str
533end 626end
534 627
535local function transdmg(str, rules) 628local function transdmg(str, mode, rules)
536 str = string.gsub(str, "\\arb(%b{})", function(inside) 629 str = string.gsub(str, "\\arb(%b{})", function(inside)
537 inside = string.sub(inside, 2, -2) 630 inside = string.sub(inside, 2, -2)
538 for i = 1,#hamzatrdmg do 631 if mode == "dmg"
539 inside = string.gsub(inside, hamzatrdmg[i].a, hamzatrdmg[i].b) 632 then
633 for i = 1,#hamzatrnoinitialdmg do
634 inside = string.gsub(inside, hamzatrnoinitialdmg[i].a, hamzatrnoinitialdmg[i].b)
635 end
636 elseif mode == "dmg+"
637 then
638 for i = 1,#hamzatrdmg do
639 inside = string.gsub(inside, hamzatrdmg[i].a, hamzatrdmg[i].b)
640 end
540 end 641 end
541 for i = 1,#tanwintrdmg do 642 for i = 1,#tanwintrdmg do
542 inside = string.gsub(inside, tanwintrdmg[i].a, tanwintrdmg[i].b) 643 inside = string.gsub(inside, tanwintrdmg[i].a, tanwintrdmg[i].b)
@@ -567,7 +668,7 @@ local function transdmg(str, rules)
567 for i = 1,#nulltr do 668 for i = 1,#nulltr do
568 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) 669 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b)
569 end 670 end
570 return string.format("%s", inside) 671 return string.format("\\altrfont{}%s", inside)
571 end) 672 end)
572 return str 673 return str
573end 674end
@@ -605,7 +706,7 @@ local function transloc(str)
605 for i = 1,#nulltr do 706 for i = 1,#nulltr do
606 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) 707 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b)
607 end 708 end
608 return string.format("%s", inside) 709 return string.format("\\altrfont{}%s", inside)
609 end) 710 end)
610 return str 711 return str
611end 712end
@@ -640,7 +741,7 @@ local function transarabica(str)
640 for i = 1,#nulltr do 741 for i = 1,#nulltr do
641 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b) 742 inside = string.gsub(inside, nulltr[i].a, nulltr[i].b)
642 end 743 end
643 return string.format("%s", inside) 744 return string.format("\\altrfont{}%s", inside)
644 end) 745 end)
645 return str 746 return str
646end 747end
@@ -660,11 +761,11 @@ local function processarind(str, mode)
660 str = gsub(str, arind * bcbraces, function(tag, arg) 761 str = gsub(str, arind * bcbraces, function(tag, arg)
661 arg = string.sub(arg, 2, -2) 762 arg = string.sub(arg, 2, -2)
662 if mode == "trans" then 763 if mode == "trans" then
663 return string.format("%s{\\txtrans{%s}}", tag, arg) 764 return string.format("%s{%s@\\txtrans{%s}}", tag, arg, arg)
664 else 765 else
665 arg = novoc(arg) 766 arg = novoc(arg)
666 arg = string.gsub(arg, "\\arabicfont%s?{}", "") 767 arg = string.gsub(arg, "\\arabicfont%s?{}", "")
667 return string.format("%s{\\txarb{%s}}", tag, arg) 768 return string.format("%s{%s@\\txarb{%s}}", tag, arg, arg)
668 end 769 end
669 end) 770 end)
670 return str 771 return str
@@ -724,7 +825,7 @@ local function processarbtoutf(str)
724 bbody = string.sub(bbody, 2, -2) 825 bbody = string.sub(bbody, 2, -2)
725 if tonumber(bbody) ~= nil then 826 if tonumber(bbody) ~= nil then
726 bbody = arabluatex.abjadify(bbody) 827 bbody = arabluatex.abjadify(bbody)
727 return string.format("\\oline*{\\arb[novoc]{%s}}", bbody) 828 return string.format("\\aoline*{\\arb[novoc]{%s}}", bbody)
728 else 829 else
729 return string.format("%s{%s}", btag, bbody) 830 return string.format("%s{%s}", btag, bbody)
730 end 831 end
@@ -739,16 +840,16 @@ local function processarbtoutf(str)
739 end) 840 end)
740 return string.format("%s{%s}", tag, body) 841 return string.format("%s{%s}", tag, body)
741 end) 842 end)
742 str = string.gsub(str, "(\\bayt)%s?(%b{})(%b[])(%b{})", function(tag, argi, argii, argiii) 843 str = string.gsub(str, "(\\bayt)%s?(%+?)(%b{})(%b[])(%b{})", function(tag, plus, argi, argii, argiii)
743 argi = string.sub(argi, 2, -2) 844 argi = string.sub(argi, 2, -2)
744 argii = string.sub(argii, 2, -2) 845 argii = string.sub(argii, 2, -2)
745 argiii = string.sub(argiii, 2, -2) 846 argiii = string.sub(argiii, 2, -2)
746 return string.format("%s*{\\arb{%s}}[\\arb{%s}]{\\arb{%s}}", tag, argi, argii, argiii) 847 return string.format("%s%s*{\\arb{%s}}[\\arb{%s}]{\\arb{%s}}", tag, argi, argii, argiii)
747 end) 848 end)
748 str = string.gsub(str, "(\\bayt)%s?(%b{})(%b{})", function(tag, argi, argii) 849 str = string.gsub(str, "(\\bayt)%s?(%+?)(%b{})(%b{})", function(tag, plus, argi, argii)
749 argi = string.sub(argi, 2, -2) 850 argi = string.sub(argi, 2, -2)
750 argii = string.sub(argii, 2, -2) 851 argii = string.sub(argii, 2, -2)
751 return string.format("%s*{\\arb{%s}}{\\arb{%s}}", tag, argi, argii) 852 return string.format("%s%s*{\\arb{%s}}{\\arb{%s}}", tag, plus, argi, argii)
752 end) 853 end)
753 str = string.gsub(str, "(\\prname)%s?(%b{})", function(tag, body) 854 str = string.gsub(str, "(\\prname)%s?(%b{})", function(tag, body)
754 body = string.sub(body, 2, -2) 855 body = string.sub(body, 2, -2)
@@ -841,6 +942,7 @@ function arabluatex.closestream()
841 local o = io.open(tex.jobname..utffilesuffix..".tex", "w") 942 local o = io.open(tex.jobname..utffilesuffix..".tex", "w")
842 local t = f:read("*a") 943 local t = f:read("*a")
843 t = string.gsub(t, "\\arabicfont{}", "") 944 t = string.gsub(t, "\\arabicfont{}", "")
945 t = string.gsub(t, "\\altrfont{}", "")
844 t = string.gsub(t, "\\par ", "\n\n") 946 t = string.gsub(t, "\\par ", "\n\n")
845 t = string.gsub(t, "(\\@al@ob)", "{") 947 t = string.gsub(t, "(\\@al@ob)", "{")
846 t = string.gsub(t, "(\\@al@cb@sp)", "} ") 948 t = string.gsub(t, "(\\@al@cb@sp)", "} ")
@@ -1003,8 +1105,8 @@ function arabluatex.processtrans(str, mode, rules, scheme)
1003 if scheme == "buckwalter" then 1105 if scheme == "buckwalter" then
1004 str = processbuckw(str) 1106 str = processbuckw(str)
1005 end 1107 end
1006 if mode == "dmg" then 1108 if mode == "dmg" or mode == "dmg+" then
1007 str = transdmg(str, rules) 1109 str = transdmg(str, mode, rules)
1008 elseif mode == "loc" then 1110 elseif mode == "loc" then
1009 str = transloc(str) 1111 str = transloc(str)
1010 elseif mode == "arabica" then 1112 elseif mode == "arabica" then
@@ -1080,6 +1182,7 @@ function arabluatex.uc(str)
1080 body = string.sub(body, 2, -2) 1182 body = string.sub(body, 2, -2)
1081 return string.format("%s", body) 1183 return string.format("%s", body)
1082 end) 1184 end)
1185 str = string.gsub(str, "\\altrfont%s?{}", "")
1083 str = string.gsub(str, "{", "\\@al@ob") 1186 str = string.gsub(str, "{", "\\@al@ob")
1084 str = string.gsub(str, "} ", "\\@al@cb@sp ") 1187 str = string.gsub(str, "} ", "\\@al@cb@sp ")
1085 str = string.gsub(str, "}", "\\@al@cb") 1188 str = string.gsub(str, "}", "\\@al@cb")
@@ -1134,6 +1237,7 @@ function arabluatex.uc(str)
1134 str = string.gsub(str, "\\@al@ob", "{") 1237 str = string.gsub(str, "\\@al@ob", "{")
1135 str = string.gsub(str, "\\@al@cb@sp ", "} ") 1238 str = string.gsub(str, "\\@al@cb@sp ", "} ")
1136 str = string.gsub(str, "\\@al@cb", "}") 1239 str = string.gsub(str, "\\@al@cb", "}")
1240 str = "\\altrfont{}"..str
1137 if export_utf == "yes" then 1241 if export_utf == "yes" then
1138 tofile = str 1242 tofile = str
1139 arabluatex.tooutfile(tofile) 1243 arabluatex.tooutfile(tofile)
@@ -1173,8 +1277,14 @@ function arabluatex.abjadify(n)
1173end 1277end
1174 1278
1175function arabluatex.abraces(str) 1279function arabluatex.abraces(str)
1176 if tex.textdir == "TRT" then 1280 if tex.textdir == "TRT"
1177 str = "\\}"..str.."\\{" 1281 then
1282 if getrenderer() == "harf"
1283 then
1284 str = "\\{"..str.."\\}"
1285 else
1286 str = "\\}"..str.."\\{"
1287 end
1178 elseif tex.textdir == "TLT" then 1288 elseif tex.textdir == "TLT" then
1179 str = "\\{"..str.."\\}" 1289 str = "\\{"..str.."\\}"
1180 end 1290 end
@@ -1183,12 +1293,12 @@ end
1183 1293
1184function arabluatex.aemph(str, opt) 1294function arabluatex.aemph(str, opt)
1185 if tex.textdir == "TRT" then 1295 if tex.textdir == "TRT" then
1186 str = "\\oline{\\textdir TRT{}"..str.."}" 1296 str = "\\aoline{\\textdir TRT{}"..str.."}"
1187 elseif tex.textdir == "TLT" then 1297 elseif tex.textdir == "TLT" then
1188 if opt == "over" then 1298 if opt == "over" then
1189 str = "\\oline{"..str.."}" 1299 str = "\\aoline{"..str.."}"
1190 else 1300 else
1191 str = "\\uline{"..str.."}" 1301 str = "\\auline{"..str.."}"
1192 end 1302 end
1193 end 1303 end
1194 return str 1304 return str
@@ -1197,7 +1307,9 @@ end
1197function arabluatex.ayah(str) 1307function arabluatex.ayah(str)
1198 if tonumber(str) ~= nil and str.len(str) < 4 then 1308 if tonumber(str) ~= nil and str.len(str) < 4 then
1199 if tex.textdir == "TRT" then 1309 if tex.textdir == "TRT" then
1200 str = indnum(str).."^^^^06dd" 1310 -- end of ayah is typeset LTR and the number comes after the
1311 -- sign (see https://github.com/aliftype/amiri/issues/263#issuecomment-1872979252)
1312 str = "{\\textdir TLT ".."^^^^06dd"..indnum(str, "ltr").."}"
1201 elseif tex.textdir == "TLT" then 1313 elseif tex.textdir == "TLT" then
1202 str = "\\arb[trans]{("..str..")}" 1314 str = "\\arb[trans]{("..str..")}"
1203 end 1315 end
diff --git a/arabluatex_fullvoc.lua b/arabluatex_fullvoc.lua
index d5ca11a..7483734 100644
--- a/arabluatex_fullvoc.lua
+++ b/arabluatex_fullvoc.lua
@@ -2,24 +2,23 @@
2This file is part of the `arabluatex' package 2This file is part of the `arabluatex' package
3 3
4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
5Copyright (C) 2016--2019 Robert Alessi 5Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
6Robert Alessi <alessi@robertalessi.net>
6 7
7Please send error reports and suggestions for improvements to Robert 8Permission to use, copy, modify, and distribute this software for any
8Alessi <alessi@robertalessi.net> 9purpose with or without fee is hereby granted, provided that the above
10copyright notice and this permission notice appear in all copies.
9 11
10This program is free software: you can redistribute it and/or modify 12THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11it under the terms of the GNU General Public License as published by 13WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12the Free Software Foundation, either version 3 of the License, or 14MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13(at your option) any later version. 15ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14 19
15This program is distributed in the hope that it will be useful, but 20Please send error reports and suggestions for improvements to Robert
16WITHOUT ANY WARRANTY; without even the implied warranty of 21Alessi <alessi@robertalessi.net>
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with this program. If not, see
22<http://www.gnu.org/licenses/>.
23--]] 22--]]
24 23
25hamzafv = { 24hamzafv = {
@@ -39,18 +38,18 @@ hamzafv = {
39 {a="i\"'", b="إ"}, 38 {a="i\"'", b="إ"},
40 {a="y\"'", b="ئ"}, 39 {a="y\"'", b="ئ"},
41 -- moved below (end of 'final' section) 40 -- moved below (end of 'final' section)
42 -- {a="ؤ([^uaiUAI])", b="ؤْ%1"}, 41 {a="ؤ([^uaiUAI])", b="ؤْ%1"},
43 -- {a="ؤ(%p*)$", b="ؤْ%1"}, 42 {a="ؤ(%p*)$", b="ؤْ%1"},
44 -- {a="ؤ(%p*%s)", b="ؤْ%1"}, 43 {a="ؤ(%p*%s)", b="ؤْ%1"},
45 -- {a="أ([^uaiUAI])", b="أْ%1"}, 44 {a="أ([^uaiUAI])", b="أْ%1"},
46 -- {a="أ(%p*)$", b="أْ%1"}, 45 {a="أ(%p*)$", b="أْ%1"},
47 -- {a="أ(%p*%s)", b="أْ%1"}, 46 {a="أ(%p*%s)", b="أْ%1"},
48 -- {a="ئ([^uaiUAI])", b="ئْ%1"}, 47 {a="ئ([^uaiUAI])", b="ئْ%1"},
49 -- {a="ئ(%p*)$", b="ئْ%1"}, 48 {a="ئ(%p*)$", b="ئْ%1"},
50 -- {a="ئ(%p*%s)", b="ئْ%1"}, 49 {a="ئ(%p*%s)", b="ئْ%1"},
51 -- {a="ء([^uaiUAI])", b="ءْ%1"}, 50 {a="ء([^uaiUAI])", b="ءْ%1"},
52 -- {a="ء(%p*)$", b="ءْ%1"}, 51 {a="ء(%p*)$", b="ءْ%1"},
53 -- {a="ء(%p*%s)", b="ءْ%1"}, 52 {a="ء(%p*%s)", b="ءْ%1"},
54 -- hamza takes tašdīd too 53 -- hamza takes tašdīd too
55 {a="''([Uu])", b="ؤؤ%1"}, 54 {a="''([Uu])", b="ؤؤ%1"},
56 {a="''([Aa])", b="أأ%1"}, 55 {a="''([Aa])", b="أأ%1"},
@@ -104,7 +103,7 @@ hamzafv = {
104 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN): 103 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN):
105 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new 104 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new
106 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new 105 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new
107 {a="(mi)(%')(a[Tt])", b="%1ائ%3"}, 106 {a="(mi)(%')(a[TtH])", b="%1ائ%3"},
108 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"}, 107 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"},
109 -- final hamzah is on the line after a letter of prolongation or a 108 -- final hamzah is on the line after a letter of prolongation or a
110 -- consonant with sukūn 109 -- consonant with sukūn
@@ -133,19 +132,21 @@ hamzafv = {
133 {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"}, 132 {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"},
134 {a="(i)(')(%p*)$", b="%1ئْ%3"}, 133 {a="(i)(')(%p*)$", b="%1ئْ%3"},
135 {a="(i)(')(%p*%s)", b="%1ئْ%3"}, 134 {a="(i)(')(%p*%s)", b="%1ئْ%3"},
135-- the following was wrong for it broke the taḫfīfu 'l-hamzati
136-- (look into this later):
136-- moved here from above: 137-- moved here from above:
137 {a="ؤ([^uaiUAI])", b="ؤْ%1"}, 138 -- {a="ؤ([^uaiUAI])", b="ؤْ%1"},
138 {a="ؤ(%p*)$", b="ؤْ%1"}, 139 -- {a="ؤ(%p*)$", b="ؤْ%1"},
139 {a="ؤ(%p*%s)", b="ؤْ%1"}, 140 -- {a="ؤ(%p*%s)", b="ؤْ%1"},
140 {a="أ([^uaiUAI])", b="أْ%1"}, 141 -- {a="أ([^uaiUAI])", b="أْ%1"},
141 {a="أ(%p*)$", b="أْ%1"}, 142 -- {a="أ(%p*)$", b="أْ%1"},
142 {a="أ(%p*%s)", b="أْ%1"}, 143 -- {a="أ(%p*%s)", b="أْ%1"},
143 {a="ئ([^uaiUAI])", b="ئْ%1"}, 144 -- {a="ئ([^uaiUAI])", b="ئْ%1"},
144 {a="ئ(%p*)$", b="ئْ%1"}, 145 -- {a="ئ(%p*)$", b="ئْ%1"},
145 {a="ئ(%p*%s)", b="ئْ%1"}, 146 -- {a="ئ(%p*%s)", b="ئْ%1"},
146 {a="ء([^uaiUAI])", b="ءْ%1"}, 147 -- {a="ء([^uaiUAI])", b="ءْ%1"},
147 {a="ء(%p*)$", b="ءْ%1"}, 148 -- {a="ء(%p*)$", b="ءْ%1"},
148 {a="ء(%p*%s)", b="ءْ%1"}, 149 -- {a="ء(%p*%s)", b="ءْ%1"},
149 -- middle 150 -- middle
150 {a="([UIwy])(')", b="%1ء"}, --new 151 {a="([UIwy])(')", b="%1ء"}, --new
151 -- {a="([Iy])(')", b="%1ئ"}, --included in the above line 152 -- {a="([Iy])(')", b="%1ئ"}, --included in the above line
@@ -187,18 +188,18 @@ hamzafveasy = { -- differences marked below with 'easy'
187 {a="i\"'", b="إ"}, 188 {a="i\"'", b="إ"},
188 {a="y\"'", b="ئ"}, 189 {a="y\"'", b="ئ"},
189 -- moved below (end of 'final' section) 190 -- moved below (end of 'final' section)
190 -- {a="ؤ([^uaiUAI])", b="ؤْ%1"}, 191 {a="ؤ([^uaiUAI])", b="ؤْ%1"},
191 -- {a="ؤ(%p*)$", b="ؤْ%1"}, 192 {a="ؤ(%p*)$", b="ؤْ%1"},
192 -- {a="ؤ(%p*%s)", b="ؤْ%1"}, 193 {a="ؤ(%p*%s)", b="ؤْ%1"},
193 -- {a="أ([^uaiUAI])", b="أْ%1"}, 194 {a="أ([^uaiUAI])", b="أْ%1"},
194 -- {a="أ(%p*)$", b="أْ%1"}, 195 {a="أ(%p*)$", b="أْ%1"},
195 -- {a="أ(%p*%s)", b="أْ%1"}, 196 {a="أ(%p*%s)", b="أْ%1"},
196 -- {a="ئ([^uaiUAI])", b="ئْ%1"}, 197 {a="ئ([^uaiUAI])", b="ئْ%1"},
197 -- {a="ئ(%p*)$", b="ئْ%1"}, 198 {a="ئ(%p*)$", b="ئْ%1"},
198 -- {a="ئ(%p*%s)", b="ئْ%1"}, 199 {a="ئ(%p*%s)", b="ئْ%1"},
199 -- {a="ء([^uaiUAI])", b="ءْ%1"}, 200 {a="ء([^uaiUAI])", b="ءْ%1"},
200 -- {a="ء(%p*)$", b="ءْ%1"}, 201 {a="ء(%p*)$", b="ءْ%1"},
201 -- {a="ء(%p*%s)", b="ءْ%1"}, 202 {a="ء(%p*%s)", b="ءْ%1"},
202 -- hamza takes tašdīd too 203 -- hamza takes tašdīd too
203 {a="''([Uu])", b="ؤؤ%1"}, 204 {a="''([Uu])", b="ؤؤ%1"},
204 {a="''([Aa])", b="أأ%1"}, 205 {a="''([Aa])", b="أأ%1"},
@@ -254,7 +255,7 @@ hamzafveasy = { -- differences marked below with 'easy'
254 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN) 255 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN)
255 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new 256 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new
256 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new 257 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new
257 {a="(mi)(%')(a[Tt])", b="%1ائ%3"}, 258 {a="(mi)(%')(a[TtH])", b="%1ائ%3"},
258 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"}, 259 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"},
259 -- easy (begin) 260 -- easy (begin)
260 -- The Munjid says that such words as radI'aN do not have the 261 -- The Munjid says that such words as radI'aN do not have the
@@ -293,19 +294,21 @@ hamzafveasy = { -- differences marked below with 'easy'
293 {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"}, 294 {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"},
294 {a="(i)(')(%p*)$", b="%1ئْ%3"}, 295 {a="(i)(')(%p*)$", b="%1ئْ%3"},
295 {a="(i)(')(%p*%s)", b="%1ئْ%3"}, 296 {a="(i)(')(%p*%s)", b="%1ئْ%3"},
297-- the following was wrong for it broke the taḫfīfu 'l-hamzati
298-- (look into this later):
296-- moved here from above: 299-- moved here from above:
297 {a="ؤ([^uaiUAI])", b="ؤْ%1"}, 300 -- {a="ؤ([^uaiUAI])", b="ؤْ%1"},
298 {a="ؤ(%p*)$", b="ؤْ%1"}, 301 -- {a="ؤ(%p*)$", b="ؤْ%1"},
299 {a="ؤ(%p*%s)", b="ؤْ%1"}, 302 -- {a="ؤ(%p*%s)", b="ؤْ%1"},
300 {a="أ([^uaiUAI])", b="أْ%1"}, 303 -- {a="أ([^uaiUAI])", b="أْ%1"},
301 {a="أ(%p*)$", b="أْ%1"}, 304 -- {a="أ(%p*)$", b="أْ%1"},
302 {a="أ(%p*%s)", b="أْ%1"}, 305 -- {a="أ(%p*%s)", b="أْ%1"},
303 {a="ئ([^uaiUAI])", b="ئْ%1"}, 306 -- {a="ئ([^uaiUAI])", b="ئْ%1"},
304 {a="ئ(%p*)$", b="ئْ%1"}, 307 -- {a="ئ(%p*)$", b="ئْ%1"},
305 {a="ئ(%p*%s)", b="ئْ%1"}, 308 -- {a="ئ(%p*%s)", b="ئْ%1"},
306 {a="ء([^uaiUAI])", b="ءْ%1"}, 309 -- {a="ء([^uaiUAI])", b="ءْ%1"},
307 {a="ء(%p*)$", b="ءْ%1"}, 310 -- {a="ء(%p*)$", b="ءْ%1"},
308 {a="ء(%p*%s)", b="ءْ%1"}, 311 -- {a="ء(%p*%s)", b="ءْ%1"},
309-- 312--
310 -- middle 313 -- middle
311 {a="([Uw])(')", b="%1ء"}, --new 314 {a="([Uw])(')", b="%1ء"}, --new
@@ -347,9 +350,9 @@ tanwinfv = { -- with assimilations (\SetArbDflt*)
347 {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"}, 350 {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"},
348 {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"}, 351 {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"},
349 {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"}, 352 {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"},
350 {a="(T)%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"}, 353 {a="([TH])%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"},
351-- {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new 354-- {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new
352 {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"}, 355 {a="([^TAH])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
353 {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"}, 356 {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
354 -- assimilations (end) 357 -- assimilations (end)
355 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="ٱ"}, 358 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="ٱ"},
@@ -359,9 +362,9 @@ tanwinfv = { -- with assimilations (\SetArbDflt*)
359 {a="(B)%-?(\"aN)", b="%1"}, 362 {a="(B)%-?(\"aN)", b="%1"},
360 {a="%-?(\"aN)(_A)", b="ى"}, 363 {a="%-?(\"aN)(_A)", b="ى"},
361 {a="%-?(\"aN)(Y)", b="ى"}, 364 {a="%-?(\"aN)(Y)", b="ى"},
362 {a="(T)%-?(\"aN)", b="%1"}, 365 {a="([TH])%-?(\"aN)", b="%1"},
363 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new 366 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new
364 {a="([^TA])%-?(\"aN)", b="%1ا"}, 367 {a="([^TAH])%-?(\"aN)", b="%1ا"},
365 {a="%-?(\"iNI?)", b=""}, 368 {a="%-?(\"iNI?)", b=""},
366 -- quoted tanwīn (end) 369 -- quoted tanwīn (end)
367 {a="%-?(uN)", b="ٌ"}, 370 {a="%-?(uN)", b="ٌ"},
@@ -369,15 +372,15 @@ tanwinfv = { -- with assimilations (\SetArbDflt*)
369 -- needed by \arbcolor: 372 -- needed by \arbcolor:
370 {a="%-?(aN)(O[%S]-%_AO)", b="ً"}, 373 {a="%-?(aN)(O[%S]-%_AO)", b="ً"},
371 {a="%-?(aN)(O[%S]-YO)", b="ً"}, 374 {a="%-?(aN)(O[%S]-YO)", b="ً"},
372 {a="(O[%S]-TO)%-?(aN)", b="ً"}, 375 {a="(O[%S]-[TH]O)%-?(aN)", b="ً"},
373 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new 376 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new
374 {a="(O[%S]-[^TA]O)%-?(aN)", b="ًا"}, 377 {a="(O[%S]-[^TAH]O)%-?(aN)", b="ًا"},
375 -- 378 --
376 {a="%-?(aN)(_A)", b="ًى"}, 379 {a="%-?(aN)(_A)", b="ًى"},
377 {a="%-?(aN)(Y)", b="ًى"}, 380 {a="%-?(aN)(Y)", b="ًى"},
378 {a="(T)%-?(aN)", b="%1ً"}, 381 {a="([TH])%-?(aN)", b="%1ً"},
379 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new 382 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new
380 {a="([^TA])%-?(aN)", b="%1ًا"}, 383 {a="([^TAH])%-?(aN)", b="%1ًا"},
381 {a="%-?(iNI?)", b="ٍ"} 384 {a="%-?(iNI?)", b="ٍ"}
382} 385}
383 386
@@ -401,9 +404,9 @@ tanwinfveasy = { -- no assimilations (see below)
401--easy {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"}, 404--easy {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"},
402--easy {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"}, 405--easy {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"},
403--easy {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"}, 406--easy {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"},
404--easy {a="(T)%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"}, 407--easy {a="([TH])%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"},
405--easy {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new 408--easy {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new
406--easy {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"}, 409--easy {a="([^TAH])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
407--easy {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"}, 410--easy {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
408 -- assimilations (end) 411 -- assimilations (end)
409 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="ٱ"}, 412 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="ٱ"},
@@ -413,9 +416,9 @@ tanwinfveasy = { -- no assimilations (see below)
413 {a="(B)%-?(\"aN)", b="%1"}, 416 {a="(B)%-?(\"aN)", b="%1"},
414 {a="%-?(\"aN)(_A)", b="ى"}, 417 {a="%-?(\"aN)(_A)", b="ى"},
415 {a="%-?(\"aN)(Y)", b="ى"}, 418 {a="%-?(\"aN)(Y)", b="ى"},
416 {a="(T)%-?(\"aN)", b="%1"}, 419 {a="([TH])%-?(\"aN)", b="%1"},
417 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new 420 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new
418 {a="([^TA])%-?(\"aN)", b="%1ا"}, 421 {a="([^TAH])%-?(\"aN)", b="%1ا"},
419 {a="%-?(\"iNI?)", b=""}, 422 {a="%-?(\"iNI?)", b=""},
420 -- quoted tanwīn (end) 423 -- quoted tanwīn (end)
421 {a="%-?(uN)", b="ٌ"}, 424 {a="%-?(uN)", b="ٌ"},
@@ -423,15 +426,15 @@ tanwinfveasy = { -- no assimilations (see below)
423 -- needed by \arbcolor: 426 -- needed by \arbcolor:
424 {a="%-?(aN)(O[%S]-%_AO)", b="ً"}, 427 {a="%-?(aN)(O[%S]-%_AO)", b="ً"},
425 {a="%-?(aN)(O[%S]-YO)", b="ً"}, 428 {a="%-?(aN)(O[%S]-YO)", b="ً"},
426 {a="(O[%S]-TO)%-?(aN)", b="ً"}, 429 {a="(O[%S]-[TH]O)%-?(aN)", b="ً"},
427 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new 430 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new
428 {a="(O[%S]-[^TA]O)%-?(aN)", b="ًا"}, 431 {a="(O[%S]-[^TAH]O)%-?(aN)", b="ًا"},
429 -- 432 --
430 {a="%-?(aN)(_A)", b="ًى"}, 433 {a="%-?(aN)(_A)", b="ًى"},
431 {a="%-?(aN)(Y)", b="ًى"}, 434 {a="%-?(aN)(Y)", b="ًى"},
432 {a="(T)%-?(aN)", b="%1ً"}, 435 {a="([TH])%-?(aN)", b="%1ً"},
433 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new 436 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new
434 {a="([^TA])%-?(aN)", b="%1ًا"}, 437 {a="([^TAH])%-?(aN)", b="%1ًا"},
435 {a="%-?(iNI?)", b="ٍ"} 438 {a="%-?(iNI?)", b="ٍ"}
436} 439}
437 440
@@ -1003,6 +1006,7 @@ singlefv = {
1003 {a="w", b="و"}, 1006 {a="w", b="و"},
1004 {a="y", b="ي"}, 1007 {a="y", b="ي"},
1005 {a="T", b="ة"}, 1008 {a="T", b="ة"},
1009 {a="H", b="ه"},
1006 -- additional characters (begin) 1010 -- additional characters (begin)
1007 {a="p", b="پ"}, 1011 {a="p", b="پ"},
1008 {a="v", b="ڤ"}, 1012 {a="v", b="ڤ"},
@@ -1038,6 +1042,7 @@ singlefveasy = { -- see the differences under 'easy' tag below
1038 {a="y", b="ي"}, 1042 {a="y", b="ي"},
1039 {a="T", b="ة"}, 1043 {a="T", b="ة"},
1040 -- additional characters (begin) 1044 -- additional characters (begin)
1045 {a="H", b="ه"},
1041 {a="p", b="پ"}, 1046 {a="p", b="پ"},
1042 {a="v", b="ڤ"}, 1047 {a="v", b="ڤ"},
1043 {a="g", b="گ"}, 1048 {a="g", b="گ"},
diff --git a/arabluatex_novoc.lua b/arabluatex_novoc.lua
index 5141861..1800655 100644
--- a/arabluatex_novoc.lua
+++ b/arabluatex_novoc.lua
@@ -2,24 +2,23 @@
2This file is part of the `arabluatex' package 2This file is part of the `arabluatex' package
3 3
4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
5Copyright (C) 2016--2019 Robert Alessi 5Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
6Robert Alessi <alessi@robertalessi.net>
6 7
7Please send error reports and suggestions for improvements to Robert 8Permission to use, copy, modify, and distribute this software for any
8Alessi <alessi@robertalessi.net> 9purpose with or without fee is hereby granted, provided that the above
9 10copyright notice and this permission notice appear in all copies.
10This program is free software: you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation, either version 3 of the License, or
13(at your option) any later version.
14 11
15This program is distributed in the hope that it will be useful, but 12THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16WITHOUT ANY WARRANTY; without even the implied warranty of 13WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18General Public License for more details. 15ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 19
20You should have received a copy of the GNU General Public License 20Please send error reports and suggestions for improvements to Robert
21along with this program. If not, see 21Alessi <alessi@robertalessi.net>
22<http://www.gnu.org/licenses/>.
23--]] 22--]]
24 23
25tanwinnv = { 24tanwinnv = {
@@ -36,9 +35,9 @@ tanwinnv = {
36-- {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"}, 35-- {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"},
37-- {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ى%3%4%4"}, 36-- {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ى%3%4%4"},
38-- {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ى%3%4%4"}, 37-- {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ى%3%4%4"},
39-- {a="(T)%-?(aN)(%s)([rlmnwy])", b="%1%3%4%4"}, 38-- {a="([TH])%-?(aN)(%s)([rlmnwy])", b="%1%3%4%4"},
40-- {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%3%4%4"}, 39-- {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%3%4%4"},
41-- {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ا%3%4%4"}, 40-- {a="([^TAH])%-?(aN)(%s)([rlmnwy])", b="%1ا%3%4%4"},
42-- {a="%-?(iNI?)(%s)([rlmnwy])", b="|%2%3%3"}, 41-- {a="%-?(iNI?)(%s)([rlmnwy])", b="|%2%3%3"},
43 -- assimilations (end) 42 -- assimilations (end)
44 -- "quoted" tanwīn (begin) 43 -- "quoted" tanwīn (begin)
@@ -46,9 +45,9 @@ tanwinnv = {
46 {a="(B)%-?(\"aN)", b="%1ً"}, 45 {a="(B)%-?(\"aN)", b="%1ً"},
47 {a="%-?(\"aN)(_A)", b="ًى"}, 46 {a="%-?(\"aN)(_A)", b="ًى"},
48 {a="%-?(\"aN)(Y)", b="ًى"}, 47 {a="%-?(\"aN)(Y)", b="ًى"},
49 {a="(T)%-?(\"aN)", b="%1ً"}, 48 {a="([TH])%-?(\"aN)", b="%1ً"},
50 {a="([اآ])(ء)%-?(\"aN)", b="%1%2ً"}, --new 49 {a="([اآ])(ء)%-?(\"aN)", b="%1%2ً"}, --new
51 {a="([^TA])%-?(\"aN)", b="%1ًا"}, 50 {a="([^TAH])%-?(\"aN)", b="%1ًا"},
52 {a="%-?(\"iNI?)", b="ٍ"}, 51 {a="%-?(\"iNI?)", b="ٍ"},
53 -- "quoted" tanwīn (end) 52 -- "quoted" tanwīn (end)
54 {a="%-?(uN)", b=""}, 53 {a="%-?(uN)", b=""},
@@ -56,15 +55,15 @@ tanwinnv = {
56 -- needed by \arbcolor: 55 -- needed by \arbcolor:
57 {a="%-?(aN)(O[%S]-%_AO)", b=""}, 56 {a="%-?(aN)(O[%S]-%_AO)", b=""},
58 {a="%-?(aN)(O[%S]-YO)", b=""}, 57 {a="%-?(aN)(O[%S]-YO)", b=""},
59 {a="(O[%S]-TO)%-?(aN)", b=""}, 58 {a="(O[%S]-[TH]O)%-?(aN)", b=""},
60 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b=""}, --new 59 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b=""}, --new
61 {a="(O[%S]-[^TA]O)%-?(aN)", b=""}, 60 {a="(O[%S]-[^TAH]O)%-?(aN)", b=""},
62 -- 61 --
63 {a="%-?(aN)(_A)", b="ى"}, 62 {a="%-?(aN)(_A)", b="ى"},
64 {a="%-?(aN)(Y)", b="ى"}, 63 {a="%-?(aN)(Y)", b="ى"},
65 {a="(T)%-?(aN)", b="%1"}, 64 {a="([TH])%-?(aN)", b="%1"},
66 {a="([اآ])(ء)%-?(aN)", b="%1%2"}, --new 65 {a="([اآ])(ء)%-?(aN)", b="%1%2"}, --new
67 {a="([^TA])%-?(aN)", b="%1ا"}, 66 {a="([^TAH])%-?(aN)", b="%1ا"},
68 {a="%-?(iNI?)", b=""}, 67 {a="%-?(iNI?)", b=""},
69 -- ʾalif al-waṣl: put it back on with \arbnull 68 -- ʾalif al-waṣl: put it back on with \arbnull
70 {a="(O[%S]-)([%'a]l%-)(O)(\"?[uai])", b="%4"}, 69 {a="(O[%S]-)([%'a]l%-)(O)(\"?[uai])", b="%4"},
diff --git a/arabluatex_trans.lua b/arabluatex_trans.lua
index 63a1956..c3c21e1 100644
--- a/arabluatex_trans.lua
+++ b/arabluatex_trans.lua
@@ -2,24 +2,23 @@
2This file is part of the `arabluatex' package 2This file is part of the `arabluatex' package
3 3
4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
5Copyright (C) 2016--2019 Robert Alessi 5Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
6Robert Alessi <alessi@robertalessi.net>
6 7
7Please send error reports and suggestions for improvements to Robert 8Permission to use, copy, modify, and distribute this software for any
8Alessi <alessi@robertalessi.net> 9purpose with or without fee is hereby granted, provided that the above
9 10copyright notice and this permission notice appear in all copies.
10This program is free software: you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation, either version 3 of the License, or
13(at your option) any later version.
14 11
15This program is distributed in the hope that it will be useful, but 12THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16WITHOUT ANY WARRANTY; without even the implied warranty of 13WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18General Public License for more details. 15ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 19
20You should have received a copy of the GNU General Public License 20Please send error reports and suggestions for improvements to Robert
21along with this program. If not, see 21Alessi <alessi@robertalessi.net>
22<http://www.gnu.org/licenses/>.
23--]] 22--]]
24 23
25-- common 24-- common
@@ -202,6 +201,91 @@ hamzatrdmg = {
202 {a="(i)(')([^uaiUAI])", b="%1ʾ%3"} 201 {a="(i)(')([^uaiUAI])", b="%1ʾ%3"}
203} 202}
204 203
204hamzatrnoinitialdmg = {
205 -- next lines for ʾalif alone
206 {a="(%.A)l%-(%^n)", b=".|l-%2"}, --additional (^n is lunar)
207 {a="([%(%[%|%<%s%-O])(%.A)l%-(%^n)", b="%1.|l-%3"}, --additional (^n is lunar) --p
208 {a="(%.A)l%-([%_%^%.]?[tdrzsnc])", b=".|%2-%2"},
209 {a="([%(%[%|%<%s%-O])(%.A)l%-([%_%^%.]?[tdrzsnc])", b="%1.|%3-%3"}, --p
210 {a="(%.A)([uai])l%-(%^n)", b="||%2l-%3"}, --additional (^n is lunar)
211 {a="([%(%[%|%<%s%-O])(%.A)([uai])l%-(%^n)", b="%1||%3l-%4"}, --additional (^n is lunar) --p
212 {a="(%.A)([uai])l%-([%_%^%.]?[tdrzsnc])", b="||%2%3-%3"},
213 {a="([%(%[%|%<%s%-O])(%.A)([uai])l%-([%_%^%.]?[tdrzsnc])", b="%1||%3%4-%4"}, --p
214 {a="(%.A)([^uai])", b=".|%2"},
215 {a="(%.A)([uai])", b="||%2"},
216 -- hard coded hamza
217 {a="|\"'", b="ʾ"},
218 {a="A\"'", b="ʾA"},
219 {a="[au]\"'", b="ʾ"},
220 {a="w\"'", b="ʾ"},
221 {a="i\"'", b="ʾ"},
222 {a="y\"'", b="ʾ"},
223 -- hamza takes tašdīd too
224 {a="''([Uu])", b="ʾʾ%1"},
225 {a="''([Aa])", b="ʾʾ%1"},
226 {a="''([Ii])", b="ʾʾ%1"},
227 -- initial long u and i (for a, see below)
228 {a="%'%_U", b="||U"},
229 {a="%'%_I", b="||I"},
230 -- taḫfīfu 'l-hamza
231 {a="'u'([^uaiUAI])", b="|U%1"},
232 {a="'i'([^uaiUAI])", b="|I%1"},
233 {a="^u'([^uaiUAI])", b="U%1"},
234 {a="([^uaiUAIYN][%s%(%[%<])u'([^uaiUAI])", b="%1U%2"},
235 {a="^i'([^uaiUAI])", b="I%1"},
236 {a="([^uaiUAIYN][%s%(%[%<])i'([^uaiUAI])", b="%1I%2"},
237 -- madda (historic writing below)
238 {a="'a'([^uaiUAI])", b="ʾA%1"},
239 {a="'a?A", b="ʾA"},
240 {a="(A)(')(i)$", b="%1ʾ%3"},
241 {a="(A)(')(i)(%W)", b="%1ʾ%3%4"},
242 {a="(A)(')(i)", b="%1ʾ%3"}, -- historic madda
243 {a="(A)(')", b="%1ʾ"}, -- historic madda
244 -- initial (needs both ^ and %W patterns)
245 -- 'aw: the diphthong is to be resolved into 'awi' (next 8 lines)
246 {a="^('aw)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="%1i"},
247 {a="(%W)('aw)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="%1%2i"},
248 {a="^('aw)(O)(\"?[uai])([%S]-O)", b="%1i"},
249 {a="(%W)('aw)(O)(\"?[uai])([%S]-O)", b="%1%2i"},
250 {a="^('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
251 {a="(%W)('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
252 {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"}, --p
253 {a="(%W)('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"}, --p
254 -- then the 'initial' rules for the remaining cases
255 {a="^(')([ua])", b="||%2"},
256 {a="^(')(i)", b="||%2"},
257 -- consider replacing initial %W with [%s%(%[%<%-]:
258 -- {a="(%W)(')([ua])", b="%1||%3"},
259 -- {a="(%W)(')(i)", b="%1||%3"},
260 {a="([%s%(%[%<%-])(')([ua])", b="%1||%3"},
261 {a="([%s%(%[%<%-])(')(i)", b="%1||%3"},
262 -- final
263 {a="([Iy])(')(aN)$", b="%1ʾ%3"},
264 {a="([Iy])(')(aN)(%W)", b="%1ʾ%3%4"},
265 {a="([^uai])(')([uai]N?)$", b="%1ʾ%3"},
266 {a="([^uai])(')([uai]N?)(%W)", b="%1ʾ%3%4"},
267 {a="([UI])(')([uai])$", b="%1ʾ%3"},
268 {a="([UI])(')([uai])(%W)", b="%1ʾ%3%4"},
269 -- middle
270 {a="(U)(')", b="%1ʾ"},
271 {a="([Iy])(')", b="%1ʾ"},
272 {a="([^uai])(')([uU])", b="%1ʾ%3"},
273 {a="([^uai])(')(%_?[aAY])", b="%1ʾ%3"},
274 {a="([^uai])(')([iI])", b="%1ʾ%3"},
275 {a="(u)(')([uU])", b="%1ʾ%3"},
276 {a="(u)(')(%_?[aAY])", b="%1ʾ%3"},
277 {a="(u)(')([iI])", b="%1ʾ%3"},
278 {a="(a)(')(%_?[aAY])", b="%1ʾ%3"},
279 {a="(a)(')([uU])", b="%1ʾ%3"},
280 {a="(a)(')([iI])", b="%1ʾ%3"},
281 {a="(i)(')(%_?[aAY])", b="%1ʾ%3"},
282 {a="(i)(')([uU])", b="%1ʾ%3"},
283 {a="(i)(')([iI])", b="%1ʾ%3"},
284 {a="(a)(')([^uaiUAI])", b="%1ʾ%3"},
285 {a="(u)(')([^uaiUAI])", b="%1ʾ%3"},
286 {a="(i)(')([^uaiUAI])", b="%1ʾ%3"}
287}
288
205tanwintrdmg = { 289tanwintrdmg = {
206 {a="%-?([uai]NU)(O)([ui])([%S]-O)", b="\\arbup{un%3}"}, 290 {a="%-?([uai]NU)(O)([ui])([%S]-O)", b="\\arbup{un%3}"},
207 {a="%-?([uai]NU)(%s)([ui])", b="\\arbup{un%3}%2'"}, 291 {a="%-?([uai]NU)(%s)([ui])", b="\\arbup{un%3}%2'"},
@@ -216,41 +300,41 @@ tanwintrdmg = {
216 {a="%-?(uN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="\\arbup{uni}"}, 300 {a="%-?(uN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="\\arbup{uni}"},
217 {a="%-?(aN)(_A)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="ạ\\arbup{ni}"}, 301 {a="%-?(aN)(_A)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="ạ\\arbup{ni}"},
218 {a="%-?(aN)(Y)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="ạ\\arbup{ni}"}, 302 {a="%-?(aN)(Y)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="ạ\\arbup{ni}"},
219 {a="(T)%-?(aN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="t\\arbup{ani}"}, 303 {a="([TH])%-?(aN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="t\\arbup{ani}"},
220 {a="([^TA])%-?(aN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="%1\\arbup{ani}"}, 304 {a="([^TAH])%-?(aN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="%1\\arbup{ani}"},
221 {a="%-?(iN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="\\arbup{ini}"}, 305 {a="%-?(iN)(O)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-O)", b="\\arbup{ini}"},
222 {a="%-?(uN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="\\arbup{uni}%2%3"}, 306 {a="%-?(uN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="\\arbup{uni}%2%3"},
223 {a="%-?(aN)(_A)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="ạ\\arbup{ni}%3%4"}, 307 {a="%-?(aN)(_A)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="ạ\\arbup{ni}%3%4"},
224 {a="%-?(aN)(Y)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="ạ\\arbup{ni}%3%4"}, 308 {a="%-?(aN)(Y)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="ạ\\arbup{ni}%3%4"},
225 {a="(T)%-?(aN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="t\\arbup{ani}%3%4"}, 309 {a="([TH])%-?(aN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="t\\arbup{ani}%3%4"},
226 {a="([^TA])%-?(aN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1\\arbup{ani}%3%4"}, 310 {a="([^TAH])%-?(aN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1\\arbup{ani}%3%4"},
227 {a="%-?(iN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="\\arbup{ini}%2%3"}, 311 {a="%-?(iN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="\\arbup{ini}%2%3"},
228 -- tanwīn preceding 'lla_dI/'llatI 312 -- tanwīn preceding 'lla_dI/'llatI
229 {a="%-?(uN)(O)('lla[%_]?[dt])([%S]-O)", b="\\arbup{uni}"}, 313 {a="%-?(uN)(O)('lla[%_]?[dt])([%S]-O)", b="\\arbup{uni}"},
230 {a="%-?(aN)(_A)(O)('lla[%_]?[dt])([%S]-O)", b="ạ\\arbup{ni}"}, 314 {a="%-?(aN)(_A)(O)('lla[%_]?[dt])([%S]-O)", b="ạ\\arbup{ni}"},
231 {a="%-?(aN)(Y)(O)('lla[%_]?[dt])([%S]-O)", b="ạ\\arbup{ni}"}, 315 {a="%-?(aN)(Y)(O)('lla[%_]?[dt])([%S]-O)", b="ạ\\arbup{ni}"},
232 {a="(T)%-?(aN)(O)('lla[%_]?[dt])([%S]-O)", b="t\\arbup{ani}"}, 316 {a="([TH])%-?(aN)(O)('lla[%_]?[dt])([%S]-O)", b="t\\arbup{ani}"},
233 {a="([^TA])%-?(aN)(O)('lla[%_]?[dt])([%S]-O)", b="%1\\arbup{ani}"}, 317 {a="([^TAH])%-?(aN)(O)('lla[%_]?[dt])([%S]-O)", b="%1\\arbup{ani}"},
234 {a="%-?(iN)(O)('lla[%_]?[dt])([%S]-O)", b="\\arbup{ini}"}, 318 {a="%-?(iN)(O)('lla[%_]?[dt])([%S]-O)", b="\\arbup{ini}"},
235 {a="%-?(uN)(%s)('lla[%_]?[dt])", b="\\arbup{uni}%2%3"}, 319 {a="%-?(uN)(%s)('lla[%_]?[dt])", b="\\arbup{uni}%2%3"},
236 {a="%-?(aN)(_A)(%s)('lla[%_]?[dt])", b="ạ\\arbup{ni}%3%4"}, 320 {a="%-?(aN)(_A)(%s)('lla[%_]?[dt])", b="ạ\\arbup{ni}%3%4"},
237 {a="%-?(aN)(Y)(%s)('lla[%_]?[dt])", b="ạ\\arbup{ni}%3%4"}, 321 {a="%-?(aN)(Y)(%s)('lla[%_]?[dt])", b="ạ\\arbup{ni}%3%4"},
238 {a="(T)%-?(aN)(%s)('lla[%_]?[dt])", b="t\\arbup{ani}%3%4"}, 322 {a="([TH])%-?(aN)(%s)('lla[%_]?[dt])", b="t\\arbup{ani}%3%4"},
239 {a="([^TA])%-?(aN)(%s)('lla[%_]?[dt])", b="%1\\arbup{ani}%3%4"}, 323 {a="([^TAH])%-?(aN)(%s)('lla[%_]?[dt])", b="%1\\arbup{ani}%3%4"},
240 {a="%-?(iN)(%s)('lla[%_]?[dt])", b="\\arbup{ini}%2%3"}, 324 {a="%-?(iN)(%s)('lla[%_]?[dt])", b="\\arbup{ini}%2%3"},
241 -- tanwīn + alif without hamza and kasra (ibn) or dhamma (uhrub) 325 -- tanwīn + alif without hamza and kasra (ibn) or dhamma (uhrub)
242 {a="%-?(uN)(O)([ui])([%S]-O)", b="\\arbup{un%3}"}, 326 {a="%-?(uN)(O)([ui])([%S]-O)", b="\\arbup{un%3}"},
243 {a="%-?(aN)(_A)(O)([ui])([%S]-O)", b="ạ\\arbup{n%4}"}, 327 {a="%-?(aN)(_A)(O)([ui])([%S]-O)", b="ạ\\arbup{n%4}"},
244 {a="%-?(aN)(Y)(O)([ui])([%S]-O)", b="ạ\\arbup{n%4}"}, 328 {a="%-?(aN)(Y)(O)([ui])([%S]-O)", b="ạ\\arbup{n%4}"},
245 {a="(T)%-?(aN)(O)([ui])([%S]-O)", b="t\\arbup{an%4}"}, 329 {a="([TH])%-?(aN)(O)([ui])([%S]-O)", b="t\\arbup{an%4}"},
246 {a="([^TA])%-?(aN)(O)([ui])([%S]-O)", b="%1\\arbup{an%4}"}, 330 {a="([^TAH])%-?(aN)(O)([ui])([%S]-O)", b="%1\\arbup{an%4}"},
247 {a="%-?(iN)(O)([ui])([%S]-O)", b="\\arbup{in%3}"}, 331 {a="%-?(iN)(O)([ui])([%S]-O)", b="\\arbup{in%3}"},
248 {a="(O[%S]-)([uai]N)(O)(\"?[ui])", b="'"}, 332 {a="(O[%S]-)([uai]N)(O)(\"?[ui])", b="'"},
249 {a="%-?(uN)(%s)([ui])", b="\\arbup{un%3}%2'"}, 333 {a="%-?(uN)(%s)([ui])", b="\\arbup{un%3}%2'"},
250 {a="%-?(aN)(_A)(%s)([ui])", b="ạ\\arbup{n%4}%3'"}, 334 {a="%-?(aN)(_A)(%s)([ui])", b="ạ\\arbup{n%4}%3'"},
251 {a="%-?(aN)(Y)(%s)([ui])", b="ạ\\arbup{n%4}%3'"}, 335 {a="%-?(aN)(Y)(%s)([ui])", b="ạ\\arbup{n%4}%3'"},
252 {a="(T)%-?(aN)(%s)([ui])", b="t\\arbup{an%4}%3'"}, 336 {a="([TH])%-?(aN)(%s)([ui])", b="t\\arbup{an%4}%3'"},
253 {a="([^TA])%-?(aN)(%s)([ui])", b="%1\\arbup{an%4}%3'"}, 337 {a="([^TAH])%-?(aN)(%s)([ui])", b="%1\\arbup{an%4}%3'"},
254 {a="%-?(iN)(%s)([ui])", b="\\arbup{in%3}%2'"}, 338 {a="%-?(iN)(%s)([ui])", b="\\arbup{in%3}%2'"},
255 -- 339 --
256-- {a="uN", b="\\arbup{un}"}, (now included in the last line of this table) 340-- {a="uN", b="\\arbup{un}"}, (now included in the last line of this table)
@@ -258,13 +342,13 @@ tanwintrdmg = {
258 -- needed by \arbcolor: 342 -- needed by \arbcolor:
259 {a="%-?(aN)(O[%S]-%_AO)", b="ạ\\arbup{n}"}, 343 {a="%-?(aN)(O[%S]-%_AO)", b="ạ\\arbup{n}"},
260 {a="%-?(aN)(O[%S]-YO)", b="ạ\\arbup{n}"}, 344 {a="%-?(aN)(O[%S]-YO)", b="ạ\\arbup{n}"},
261 {a="(O[%S]-TO)%-?(\"?aN)", b="\\arbup{an}"}, 345 {a="(O[%S]-[TH]O)%-?(\"?aN)", b="\\arbup{an}"},
262 {a="(O[%S]-[^TA]O)%-?(\"?aN)", b="\\arbup{an}"}, 346 {a="(O[%S]-[^TAH]O)%-?(\"?aN)", b="\\arbup{an}"},
263 -- 347 --
264 {a="%-?(aN)(_A)", b="ạ\\arbup{n}"}, 348 {a="%-?(aN)(_A)", b="ạ\\arbup{n}"},
265 {a="%-?(aN)(Y)", b="ạ\\arbup{n}"}, 349 {a="%-?(aN)(Y)", b="ạ\\arbup{n}"},
266 {a="(T)%-?(\"?aN)", b="t\\arbup{an}"}, 350 {a="([TH])%-?(\"?aN)", b="t\\arbup{an}"},
267 {a="([^TA])%-?(\"?aN)", b="%1\\arbup{an}"}, 351 {a="([^TAH])%-?(\"?aN)", b="%1\\arbup{an}"},
268 {a="%-?([ui])N", b="\\arbup{%1n}"} 352 {a="%-?([ui])N", b="\\arbup{%1n}"}
269} 353}
270 354
@@ -414,18 +498,20 @@ digraphstrdmg = {
414 {a="([%_]?[Uu])(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy][%-l])", b="u%2%3"}, 498 {a="([%_]?[Uu])(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy][%-l])", b="u%2%3"},
415 {a="([%_]?[Ii])(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy][%-l])", b="i%2%3"}, 499 {a="([%_]?[Ii])(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy][%-l])", b="i%2%3"},
416 {a="%-%-", b=""}, 500 {a="%-%-", b=""},
417 {a="iyyaT(%p*)$", b="īyaT%1"}, 501-- {a="iyyaT(%p*)$", b="īyaT%1"}, -- previously. is now:
418 {a="iyyaT(%p*%s)", b="īyaT%1"}, 502 {a="iyya([TH])(%p*)$", b="īya%1%2"},
503-- {a="iyyaT(%p*%s)", b="īyaT%1"}, -- previously. is now:
504 {a="iyya([TH])(%p*%s)", b="īya%1%2"},
419 {a="iyy(%p*)$", b="ī%1"}, 505 {a="iyy(%p*)$", b="ī%1"},
420 {a="iyy(%p*%s)", b="ī%1"}, 506 {a="iyy(%p*%s)", b="ī%1"},
421 -- {a="T([^uai])", b="%1"}, 507 -- {a="[TH]([^uai])", b="%1"},
422 {a="T(\\arbup)", b="t%1"}, 508 {a="[TH](\\arbup)", b="t%1"},
423 {a="([a%'][%_%^%.]?[tdrzsln]%-)(%S-)T([%(%[%|%<%s])(a[%_%^%.]?[tdrzsln]%-)", b="%1%2h%3%4"}, --p 509 {a="([a%'][%_%^%.]?[tdrzsln]%-)(%S-)[TH]([%(%[%|%<%s])(a[%_%^%.]?[tdrzsln]%-)", b="%1%2h%3%4"}, --p
424 {a="T([%(%[%|%<%s])(a[%_%^%.]?[tdrzsln]%-)", b="t%1%2"}, --p 510 {a="[TH]([%(%[%|%<%s])(a[%_%^%.]?[tdrzsln]%-)", b="t%1%2"}, --p
425 {a="T([%|\"])", b="t%1"}, 511 {a="[TH]([%|\"])", b="t%1"},
426 {a="T(%p*%s)", b="h%1"}, 512 {a="[TH](%p*%s)", b="h%1"},
427 {a="T(%p*)$", b="h%1"}, 513 {a="[TH](%p*)$", b="h%1"},
428 {a="T(%p*)(%W)", b="h%1%2"}, 514 {a="[TH](%p*)(%W)", b="h%1%2"},
429 {a="_t", b="ṯ"}, 515 {a="_t", b="ṯ"},
430 {a="%^g", b="ǧ"}, 516 {a="%^g", b="ǧ"},
431 {a="%.h", b="ḥ"}, 517 {a="%.h", b="ḥ"},
@@ -480,6 +566,7 @@ singletrdmg = {
480 {a="y", b="y"}, 566 {a="y", b="y"},
481 {a="T", b="t"}, 567 {a="T", b="t"},
482 -- additional characters (begin) 568 -- additional characters (begin)
569 {a="H", b="t"},
483 {a="p", b="p"}, 570 {a="p", b="p"},
484 {a="v", b="v"}, 571 {a="v", b="v"},
485 {a="g", b="g"}, 572 {a="g", b="g"},
@@ -595,13 +682,13 @@ tanwintrloc = {
595 -- needed by \arbcolor: 682 -- needed by \arbcolor:
596 {a="%-?(aN)(O[%S]-%_AO)", b="an"}, 683 {a="%-?(aN)(O[%S]-%_AO)", b="an"},
597 {a="%-?(aN)(O[%S]-YO)", b="an"}, 684 {a="%-?(aN)(O[%S]-YO)", b="an"},
598 {a="(O[%S]-TO)%-?(\"?aN)", b="an"}, 685 {a="(O[%S]-[TH]O)%-?(\"?aN)", b="an"},
599 {a="(O[%S]-[^TA]O)%-?(\"?aN)", b="an"}, 686 {a="(O[%S]-[^TAH]O)%-?(\"?aN)", b="an"},
600 -- 687 --
601 {a="%-?(aN)(_A)", b="an"}, 688 {a="%-?(aN)(_A)", b="an"},
602 {a="%-?(aN)(Y)", b="an"}, 689 {a="%-?(aN)(Y)", b="an"},
603 {a="(T)%-?(\"?aN)", b="tan"}, 690 {a="([TH])%-?(\"?aN)", b="tan"},
604 {a="([^TA])%-?(\"?aN)", b="%1an"} 691 {a="([^TAH])%-?(\"?aN)", b="%1an"}
605} 692}
606 693
607trigraphstrloc = { -- trigraphs or more 694trigraphstrloc = { -- trigraphs or more
@@ -688,12 +775,12 @@ digraphstrloc = {
688 {a="iyy(%p*%s)", b="ī%1"}, 775 {a="iyy(%p*%s)", b="ī%1"},
689 {a="iyy", b="īy"}, 776 {a="iyy", b="īy"},
690 {a="([tkdsg])(h)", b="%1'%2"}, 777 {a="([tkdsg])(h)", b="%1'%2"},
691 -- {a="T([^uai])", b="h%1"}, 778 -- {a="[TH]([^uai])", b="h%1"},
692 {a="([a%']l%-)(%S-)T([%(%[%|%<%s])(al%-)", b="%1%2h%3%4"}, --p 779 {a="([a%']l%-)(%S-)[TH]([%(%[%|%<%s])(al%-)", b="%1%2h%3%4"}, --p
693 {a="T([%(%[%|%<%s])(al%-)", b="t%1%2"}, --p 780 {a="[TH]([%(%[%|%<%s])(al%-)", b="t%1%2"}, --p
694 {a="T([%|\"])", b="t%1"}, 781 {a="[TH]([%|\"])", b="t%1"},
695 {a="T(%p*)$", b="h%1"}, 782 {a="[TH](%p*)$", b="h%1"},
696 {a="T(%p*%s)", b="h%1"}, 783 {a="[TH](%p*%s)", b="h%1"},
697 {a="_t", b="th"}, 784 {a="_t", b="th"},
698 {a="%^g", b="j"}, 785 {a="%^g", b="j"},
699 {a="%.h", b="ḥ"}, 786 {a="%.h", b="ḥ"},
@@ -747,6 +834,7 @@ singletrloc = {
747 {a="y", b="y"}, 834 {a="y", b="y"},
748 {a="T", b="t"}, 835 {a="T", b="t"},
749 -- additional characters (begin) 836 -- additional characters (begin)
837 {a="H", b="t"},
750 {a="p", b="p"}, 838 {a="p", b="p"},
751 {a="v", b="v"}, 839 {a="v", b="v"},
752 {a="g", b="g"}, 840 {a="g", b="g"},
@@ -942,12 +1030,12 @@ digraphstrarabica = {
942 {a="%-%-", b=""}, 1030 {a="%-%-", b=""},
943 {a="iyy(%p*)$", b="ī%1"}, 1031 {a="iyy(%p*)$", b="ī%1"},
944 {a="iyy(%p*%s)", b="ī%1"}, 1032 {a="iyy(%p*%s)", b="ī%1"},
945 -- {a="T([^uai])", b="h%1"}, 1033 -- {a="[TH]([^uai])", b="h%1"},
946 {a="([a%']l%-)(%S-)aT([%(%[%|%<%s])(al%-)", b="%1%2a%3%4"}, --p 1034 {a="([a%']l%-)(%S-)a[TH]([%(%[%|%<%s])(al%-)", b="%1%2a%3%4"}, --p
947 {a="aT([%(%[%|%<%s])(al%-)", b="at%1%2"}, --p 1035 {a="a[TH]([%(%[%|%<%s])(al%-)", b="at%1%2"}, --p
948 {a="T([%|\"])", b="t%1"}, 1036 {a="[TH]([%|\"])", b="t%1"},
949 {a="aT(%p*)$", b="a%1"}, 1037 {a="a[TH](%p*)$", b="a%1"},
950 {a="aT(%p*%s)", b="a%1"}, 1038 {a="a[TH](%p*%s)", b="a%1"},
951 {a="_t", b="ṯ"}, 1039 {a="_t", b="ṯ"},
952 {a="%^g", b="ǧ"}, 1040 {a="%^g", b="ǧ"},
953 {a="%.h", b="ḥ"}, 1041 {a="%.h", b="ḥ"},
@@ -1001,6 +1089,7 @@ singletrarabica = {
1001 {a="y", b="y"}, 1089 {a="y", b="y"},
1002 {a="T", b="t"}, 1090 {a="T", b="t"},
1003 -- additional characters (begin) 1091 -- additional characters (begin)
1092 {a="H", b="t"},
1004 {a="p", b="p"}, 1093 {a="p", b="p"},
1005 {a="v", b="v"}, 1094 {a="v", b="v"},
1006 {a="g", b="g"}, 1095 {a="g", b="g"},
diff --git a/arabluatex_voc.lua b/arabluatex_voc.lua
index 9b2a31c..6211b4b 100644
--- a/arabluatex_voc.lua
+++ b/arabluatex_voc.lua
@@ -2,24 +2,23 @@
2This file is part of the `arabluatex' package 2This file is part of the `arabluatex' package
3 3
4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX 4ArabLuaTeX -- Processing ArabTeX notation under LuaLaTeX
5Copyright (C) 2016--2019 Robert Alessi 5Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
6Robert Alessi <alessi@robertalessi.net>
6 7
7Please send error reports and suggestions for improvements to Robert 8Permission to use, copy, modify, and distribute this software for any
8Alessi <alessi@robertalessi.net> 9purpose with or without fee is hereby granted, provided that the above
9 10copyright notice and this permission notice appear in all copies.
10This program is free software: you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation, either version 3 of the License, or
13(at your option) any later version.
14 11
15This program is distributed in the hope that it will be useful, but 12THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16WITHOUT ANY WARRANTY; without even the implied warranty of 13WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18General Public License for more details. 15ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 19
20You should have received a copy of the GNU General Public License 20Please send error reports and suggestions for improvements to Robert
21along with this program. If not, see 21Alessi <alessi@robertalessi.net>
22<http://www.gnu.org/licenses/>.
23--]] 22--]]
24 23
25arbmarks = { 24arbmarks = {
@@ -202,7 +201,7 @@ hamza = {
202 -- taḫfīfu 'l-hamza 201 -- taḫfīfu 'l-hamza
203 {a="'u'([^uaiUAI])", b="أU%1"}, 202 {a="'u'([^uaiUAI])", b="أU%1"},
204 {a="'i'([^uaiUAI])", b="إI%1"}, 203 {a="'i'([^uaiUAI])", b="إI%1"},
205 {a="([wf]a)%-\'([^uaiUAIl][^%-])", b="%1أْ%2"}, 204 {a="([wf]a)%-\'([^uaiUAIl][^%-])", b="%1أ%2"},
206 {a="^u'([^uaiUAI])", b="اU%1"}, 205 {a="^u'([^uaiUAI])", b="اU%1"},
207 {a="([^uaiUAIYN][%s%(%[%<])u'([^uaiUAI])", b="%1اU%2"}, 206 {a="([^uaiUAIYN][%s%(%[%<])u'([^uaiUAI])", b="%1اU%2"},
208 {a="^i'([^uaiUAI])", b="اI%1"}, 207 {a="^i'([^uaiUAI])", b="اI%1"},
@@ -243,7 +242,7 @@ hamza = {
243 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN): 242 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN):
244 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new 243 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new
245 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new 244 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new
246 {a="(mi)(%')(a[Tt])", b="%1ائ%3"}, 245 {a="(mi)(%')(a[TtH])", b="%1ائ%3"},
247 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"}, 246 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"},
248 -- final hamzah is on the line after a letter of prolongation or a 247 -- final hamzah is on the line after a letter of prolongation or a
249 -- consonant with sukūn 248 -- consonant with sukūn
@@ -325,7 +324,7 @@ hamzaeasy = { -- differences marked below with 'easy'
325 -- taḫfīfu 'l-hamza 324 -- taḫfīfu 'l-hamza
326 {a="'u'([^uaiUAI])", b="أU%1"}, 325 {a="'u'([^uaiUAI])", b="أU%1"},
327 {a="'i'([^uaiUAI])", b="إI%1"}, 326 {a="'i'([^uaiUAI])", b="إI%1"},
328 {a="([wf]a)%-\'([^uaiUAIl][^%-])", b="%1أْ%2"}, 327 {a="([wf]a)%-\'([^uaiUAIl][^%-])", b="%1أ%2"},
329 {a="^u'([^uaiUAI])", b="اU%1"}, 328 {a="^u'([^uaiUAI])", b="اU%1"},
330 {a="([^uaiUAIYN][%s%(%[%<])u'([^uaiUAI])", b="%1اU%2"}, 329 {a="([^uaiUAIYN][%s%(%[%<])u'([^uaiUAI])", b="%1اU%2"},
331 {a="^i'([^uaiUAI])", b="اI%1"}, 330 {a="^i'([^uaiUAI])", b="اI%1"},
@@ -368,7 +367,7 @@ hamzaeasy = { -- differences marked below with 'easy'
368 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN) 367 -- mi'aT is special orthography (unlike ^say'aN and .zim'aN)
369 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new 368 -- {a="(%^sa%.?[yY])(\"?%|?)(%')(aN)", b="%1%2ئ%4"}, --new
370 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new 369 -- {a="(.zi?m)(%')(aN)", b="%1ئ%3"}, --new
371 {a="(mi)(%')(a[Tt])", b="%1ائ%3"}, 370 {a="(mi)(%')(a[TtH])", b="%1ائ%3"},
372 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"}, 371 {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"},
373 -- easy (begin) 372 -- easy (begin)
374 -- The Munjid says that such words as radI'aN do not have the 373 -- The Munjid says that such words as radI'aN do not have the
@@ -443,9 +442,9 @@ tanwin = {
443 {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"}, 442 {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"},
444 {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"}, 443 {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"},
445 {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"}, 444 {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"},
446 {a="(T)%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"}, 445 {a="([TH])%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"},
447 {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new 446 {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new
448 {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"}, 447 {a="([^TAH])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
449 {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"}, 448 {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
450 -- assimilations (end) 449 -- assimilations (end)
451 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="%5"}, 450 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="%5"},
@@ -455,9 +454,9 @@ tanwin = {
455 {a="(B)%-?(\"aN)", b="%1"}, 454 {a="(B)%-?(\"aN)", b="%1"},
456 {a="%-?(\"aN)(_A)", b="ى"}, 455 {a="%-?(\"aN)(_A)", b="ى"},
457 {a="%-?(\"aN)(Y)", b="ى"}, 456 {a="%-?(\"aN)(Y)", b="ى"},
458 {a="(T)%-?(\"aN)", b="%1"}, 457 {a="([TH])%-?(\"aN)", b="%1"},
459 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new 458 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new
460 {a="([^TA])%-?(\"aN)", b="%1ا"}, 459 {a="([^TAH])%-?(\"aN)", b="%1ا"},
461 {a="%-?(\"iNI?)", b=""}, 460 {a="%-?(\"iNI?)", b=""},
462 -- quoted tanwīn (end) 461 -- quoted tanwīn (end)
463 {a="%-?(uN)", b="ٌ"}, 462 {a="%-?(uN)", b="ٌ"},
@@ -465,15 +464,15 @@ tanwin = {
465 -- needed by \arbcolor: 464 -- needed by \arbcolor:
466 {a="%-?(aN)(O[%S]-%_AO)", b="ً"}, 465 {a="%-?(aN)(O[%S]-%_AO)", b="ً"},
467 {a="%-?(aN)(O[%S]-YO)", b="ً"}, 466 {a="%-?(aN)(O[%S]-YO)", b="ً"},
468 {a="(O[%S]-TO)%-?(aN)", b="ً"}, 467 {a="(O[%S]-[TH]O)%-?(aN)", b="ً"},
469 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new 468 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new
470 {a="(O[%S]-[^TA]O)%-?(aN)", b="ًا"}, 469 {a="(O[%S]-[^TAH]O)%-?(aN)", b="ًا"},
471 -- 470 --
472 {a="%-?(aN)(_A)", b="ًى"}, 471 {a="%-?(aN)(_A)", b="ًى"},
473 {a="%-?(aN)(Y)", b="ًى"}, 472 {a="%-?(aN)(Y)", b="ًى"},
474 {a="(T)%-?(aN)", b="%1ً"}, 473 {a="([TH])%-?(aN)", b="%1ً"},
475 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new 474 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new
476 {a="([^TA])%-?(aN)", b="%1ًا"}, 475 {a="([^TAH])%-?(aN)", b="%1ًا"},
477 {a="%-?(iNI?)", b="ٍ"} 476 {a="%-?(iNI?)", b="ٍ"}
478} 477}
479 478
@@ -492,9 +491,9 @@ tanwineasy = { -- 'easy' requires some lines to be taken out:
492-- {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"}, 491-- {a="(O[%S]-)(%-?aN)(Y)(O)([rlmnwy])", b="%5%5"},
493-- {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"}, 492-- {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"},
494-- {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"}, 493-- {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"},
495-- {a="(T)%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"}, 494-- {a="([TH])%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"},
496-- {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new 495-- {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new
497-- {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"}, 496-- {a="([^TAH])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
498-- {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"}, 497-- {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
499 -- assimilations (end) 498 -- assimilations (end)
500 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="%5"}, 499 {a="(O[%S]-)(%-?aN)(_A)(O)([uai])", b="%5"},
@@ -504,9 +503,9 @@ tanwineasy = { -- 'easy' requires some lines to be taken out:
504 {a="(B)%-?(\"aN)", b="%1"}, 503 {a="(B)%-?(\"aN)", b="%1"},
505 {a="%-?(\"aN)(_A)", b="ى"}, 504 {a="%-?(\"aN)(_A)", b="ى"},
506 {a="%-?(\"aN)(Y)", b="ى"}, 505 {a="%-?(\"aN)(Y)", b="ى"},
507 {a="(T)%-?(\"aN)", b="%1"}, 506 {a="([TH])%-?(\"aN)", b="%1"},
508 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new 507 {a="([اآ])(ء)%-?(\"aN)", b="%1%2"}, --new
509 {a="([^TA])%-?(\"aN)", b="%1ا"}, 508 {a="([^TAH])%-?(\"aN)", b="%1ا"},
510 {a="%-?(\"iNI?)", b=""}, 509 {a="%-?(\"iNI?)", b=""},
511 -- quoted tanwīn (end) 510 -- quoted tanwīn (end)
512 {a="%-?(uN)", b="ٌ"}, 511 {a="%-?(uN)", b="ٌ"},
@@ -514,15 +513,15 @@ tanwineasy = { -- 'easy' requires some lines to be taken out:
514 -- needed by \arbcolor: 513 -- needed by \arbcolor:
515 {a="%-?(aN)(O[%S]-%_AO)", b="ً"}, 514 {a="%-?(aN)(O[%S]-%_AO)", b="ً"},
516 {a="%-?(aN)(O[%S]-YO)", b="ً"}, 515 {a="%-?(aN)(O[%S]-YO)", b="ً"},
517 {a="(O[%S]-TO)%-?(aN)", b="ً"}, 516 {a="(O[%S]-[TH]O)%-?(aN)", b="ً"},
518 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new 517 {a="(O[%S]-)([اآ])(ء)(O)%-?(aN)", b="ً"}, --new
519 {a="(O[%S]-[^TA]O)%-?(aN)", b="ًا"}, 518 {a="(O[%S]-[^TAH]O)%-?(aN)", b="ًا"},
520 -- 519 --
521 {a="%-?(aN)(_A)", b="ًى"}, 520 {a="%-?(aN)(_A)", b="ًى"},
522 {a="%-?(aN)(Y)", b="ًى"}, 521 {a="%-?(aN)(Y)", b="ًى"},
523 {a="(T)%-?(aN)", b="%1ً"}, 522 {a="([TH])%-?(aN)", b="%1ً"},
524 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new 523 {a="([اآ])(ء)%-?(aN)", b="%1%2ً"}, --new
525 {a="([^TA])%-?(aN)", b="%1ًا"}, 524 {a="([^TAH])%-?(aN)", b="%1ًا"},
526 {a="%-?(iNI?)", b="ٍ"} 525 {a="%-?(iNI?)", b="ٍ"}
527} 526}
528 527
@@ -836,6 +835,7 @@ single = {
836 {a="y", b="ي"}, 835 {a="y", b="ي"},
837 {a="T", b="ة"}, 836 {a="T", b="ة"},
838 -- additional characters (begin) 837 -- additional characters (begin)
838 {a="H", b="ه"},
839 {a="p", b="پ"}, 839 {a="p", b="پ"},
840 {a="v", b="ڤ"}, 840 {a="v", b="ڤ"},
841 {a="g", b="گ"}, 841 {a="g", b="گ"},
@@ -873,6 +873,19 @@ shortv = {
873 {a="i", b="ِ"} 873 {a="i", b="ِ"}
874} 874}
875 875
876punctuationhb = {
877 {a="%(%(", b="﴿"},
878 {a="%)%)", b="﴾"},
879 {a="%.", b="."},
880 -- replaced with the next two rules to make the Arabic comma work
881 -- after \abraces{}
882-- {a="([^0-9])%,", b="%1،"},
883 {a="%,", b="،"},
884 {a="([%d])%،", b="%1,"},
885 {a="%?", b="؟"},
886 {a="%;", b="؛"},
887}
888
876punctuation = { 889punctuation = {
877 {a="%(%(", b="﴿"}, 890 {a="%(%(", b="﴿"},
878 {a="%)%)", b="﴾"}, 891 {a="%)%)", b="﴾"},
@@ -899,6 +912,7 @@ punctuation = {
899} 912}
900 913
901null = { 914null = {
915 {a="%&", b="‍"}, -- That is ^^^^200d, the zero-width joiner
902 {a="%|", b=""}, 916 {a="%|", b=""},
903 {a="^%-", b=""}, 917 {a="^%-", b=""},
904 {a="([^0-9])(%-)", b="%1"}, 918 {a="([^0-9])(%-)", b="%1"},
diff --git a/makefile b/makefile
index 5fde0a0..d88512f 100644
--- a/makefile
+++ b/makefile
@@ -1,21 +1,24 @@
1pkg := arabluatex 1pkg := arabluatex
2ver := $(shell ltxfileinfo -v $(pkg).dtx|sed -e 's/^v//') 2#VERS := $(shell ltxfileinfo -v $(pkg).dtx|sed -e 's/^v//')
3VERS := $(shell typeoutfileinfo $(pkg).dtx | egrep -o '\+.*$$' | awk '{ print $$6 }' | sed -e 's/^v//')
3TEXMFDIR := $(shell kpsewhich -expand-var='$$TEXMFHOME') 4TEXMFDIR := $(shell kpsewhich -expand-var='$$TEXMFHOME')
4HOMEDIR := $$HOME 5HOMEDIR := $$HOME
6CMP = lualatex-dev
7SHELL = bash
5 8
6sty: clean 9sty: clean
7 lualatex $(pkg).ins 10 $(CMP) $(pkg).ins
8 11
9doc: clean sty 12doc: clean sty
10 lualatex --shell-escape $(pkg).dtx 13 $(CMP) --shell-escape $(pkg).dtx
11 biber arabluatex 14 biber arabluatex
12 lualatex --shell-escape $(pkg).dtx 15 $(CMP) --shell-escape $(pkg).dtx
13 makeindex -s gind.ist -o $(pkg).ind $(pkg).idx 16 makeindex -s gind.ist -o $(pkg).ind $(pkg).idx
14 makeindex -s gglo.ist -o $(pkg).gls $(pkg).glo 17 makeindex -s gglo.ist -o $(pkg).gls $(pkg).glo
15 lualatex --shell-escape $(pkg).dtx 18 $(CMP) --shell-escape $(pkg).dtx
16 lualatex --shell-escape $(pkg).dtx 19 $(CMP) --shell-escape $(pkg).dtx
17 for i in samples/*.tex; \ 20 for i in samples/*.tex; \
18 do latexmk -outdir=TMP -lualatex -e '$$lualatex=q/lualatex %O --shell-escape %S/' $$i; \ 21 do latexmk -outdir=TMP -lualatex -e '$$lualatex=q/$(CMP) %O --shell-escape %S/' $$i; \
19 done 22 done
20 mv TMP/*.pdf samples/ 23 mv TMP/*.pdf samples/
21 24
@@ -26,20 +29,43 @@ local: clean sty
26 mkdir -p $(TEXMFDIR)/tex/lualatex/arabluatex; \ 29 mkdir -p $(TEXMFDIR)/tex/lualatex/arabluatex; \
27 fi 30 fi
28 cp $(pkg)*.{sty,lua} $(TEXMFDIR)/tex/lualatex/arabluatex 31 cp $(pkg)*.{sty,lua} $(TEXMFDIR)/tex/lualatex/arabluatex
29 if [ ! -d "$(HOMEDIR)/.emacs.d/auctex/auto" ]; then \ 32 if [ ! -d "$(HOMEDIR)/.emacs.d/auctex/style" ]; then \
30 mkdir -p $(HOMEDIR)/.emacs.d/auctex/auto; \ 33 mkdir -p $(HOMEDIR)/.emacs.d/auctex/style; \
31 fi 34 fi
32 cp $(pkg)*.el $(HOMEDIR)/.emacs.d/auctex/auto 35 cp $(pkg)*.el $(HOMEDIR)/.emacs.d/auctex/style
36
37inst: doc
38 if [ ! -d "$(TEXMFDIR)/tex/lualatex/arabluatex" ]; then \
39 mkdir -p $(TEXMFDIR)/tex/lualatex/arabluatex; \
40 fi
41 cp $(pkg)*.{sty,lua} $(TEXMFDIR)/tex/lualatex/arabluatex
42 if [ ! -d "$(HOMEDIR)/.emacs.d/auctex/style" ]; then \
43 mkdir -p $(HOMEDIR)/.emacs.d/auctex/style; \
44 fi
45 cp $(pkg)*.el $(HOMEDIR)/.emacs.d/auctex/style
46 if [ ! -d "$(TEXMFDIR)/doc/lualatex/arabluatex" ]; then \
47 mkdir -p $(TEXMFDIR)/doc/lualatex/arabluatex; \
48 fi
49 cp $(pkg).pdf $(TEXMFDIR)/doc/lualatex/arabluatex
50 cp -r samples/ $(TEXMFDIR)/doc/lualatex/arabluatex
33 51
34auctex: clean 52auctex: clean
35 if [ ! -d "$(HOMEDIR)/.emacs.d/auctex/auto" ]; then \ 53 if [ ! -d "$(HOMEDIR)/.emacs.d/auctex/style" ]; then \
36 mkdir -p $(HOMEDIR)/.emacs.d/auctex/auto; \ 54 mkdir -p $(HOMEDIR)/.emacs.d/auctex/style; \
37 fi 55 fi
38 cp $(pkg)*.el $(HOMEDIR)/.emacs.d/auctex/auto 56 cp $(pkg)*.el $(HOMEDIR)/.emacs.d/auctex/style
57
58zip: all
59 ln -sf . $(pkg)
60 zip -Drq $(PWD)/$(pkg)-$(VERS).zip $(pkg)/{samples,README.md,$(pkg)*.{pdf,sty,lua,el}}
61 rm $(pkg)
62
63hal: clean
64 zip -Drq $(PWD)/$(pkg)-$(VERS).zip *
39 65
40package: clean all 66package: clean all
41 mkdir -p arabluatex/samples/ 67 mkdir -p arabluatex/samples/
42 cp *.lua *.ins *.dtx *.md *.pdf arabluatex/ # .bib is in dtx 68 cp *.{lua,ins,dtx,md,pdf} makefile README.tex arabluatex/ # .bib is in dtx
43 cp samples/*.{tex,pdf} arabluatex/samples/ 69 cp samples/*.{tex,pdf} arabluatex/samples/
44 mkdir -p tex/lualatex/arabluatex/ 70 mkdir -p tex/lualatex/arabluatex/
45 cp *.lua *.sty tex/lualatex/arabluatex/ 71 cp *.lua *.sty tex/lualatex/arabluatex/
@@ -47,23 +73,23 @@ package: clean all
47 cp *.{pdf,el} doc/lualatex/arabluatex/ 73 cp *.{pdf,el} doc/lualatex/arabluatex/
48 cp samples/*.{tex,pdf} doc/lualatex/arabluatex/samples 74 cp samples/*.{tex,pdf} doc/lualatex/arabluatex/samples
49 mkdir -p source/lualatex/arabluatex/ 75 mkdir -p source/lualatex/arabluatex/
50 cp *.ins *.dtx *.tex source/lualatex/arabluatex/ # .bib is in dtx 76 cp *.{ins,dtx,tex,md} makefile source/lualatex/arabluatex/ # .bib is in dtx
51 zip -r arabluatex.tds.zip tex doc source 77 zip -r arabluatex.tds.zip tex doc source
52 tar czf arabluatex-$(ver).tar.gz arabluatex.tds.zip arabluatex/ 78 tar czf arabluatex-$(VERS).tar.gz arabluatex.tds.zip arabluatex/
53 79
54clean: 80clean:
55 rm -rf $(TEXMFDIR)/tex/lualatex/arabluatex/ 81 rm -rf $(TEXMFDIR)/{tex,doc}/lualatex/arabluatex/
56 rm -rf $(HOMEDIR)/.emacs.d/auctex/auto/arabluatex*.el 82 rm -rf $(HOMEDIR)/.emacs.d/auctex/style/arabluatex*.{el,elc}
57 rm -rf tex/ doc/ source/ auto/ 83 rm -rf tex/ doc/ source/ auto/
58 rm -rf arabluatex/ 84 rm -rf arabluatex/
59 rm -rf saved/ TMP/ _minted-arabluatex/ 85 rm -rf saved/ TMP/ _minted-arabluatex/
60 find ./samples/ | grep -v "\./samples/$$" | grep -v ".*tex$$" | xargs rm -rf 86 find ./samples/ | grep -v "\./samples/$$" | grep -v ".*tex$$" | xargs rm -rf
61 mkdir saved 87 mkdir saved
62 cp *.{lua,ins,dtx,tex,el} makefile saved # .bib is in dtx 88 cp *.{lua,ins,dtx,tex,el} AUTHORS.md LICENSE makefile saved # .bib is in dtx
63 rm *.* 89 rm *.*
64 cp saved/* . 90 cp saved/* .
65 rm -rf saved/ 91 rm -rf saved/
66 pandoc -s README.tex -o README.md && sed -i 's/{#.*}//g' README.md 92 pandoc README.tex -o README.md && sed -i 's/{#.*}//g' README.md
67 pandoc -s README.tex -o about.html 93 pandoc README.tex -o about.html
68 94
69.PHONY: sty doc all local auctex package clean 95.PHONY: sty doc all local inst auctex zip package clean
diff --git a/samples/al-Jahiz.tex b/samples/al-Jahiz.tex
index 49a52f8..d7dd3f7 100644
--- a/samples/al-Jahiz.tex
+++ b/samples/al-Jahiz.tex
@@ -4,8 +4,9 @@
4% 'lualatex --shell-escape al-Jahiz' 4% 'lualatex --shell-escape al-Jahiz'
5% 5%
6\documentclass[fontsize=12pt, paper=letter, DIV=classic]{scrartcl} 6\documentclass[fontsize=12pt, paper=letter, DIV=classic]{scrartcl}
7\usepackage[english]{babel}
8\usepackage{fontspec} 7\usepackage{fontspec}
8\usepackage[default]{fontsetup}
9\usepackage[english]{babel}
9\babelfont{rm}{Old Standard} 10\babelfont{rm}{Old Standard}
10\usepackage{filecontents} 11\usepackage{filecontents}
11 12
@@ -27,9 +28,9 @@
27\SetArbEasy 28\SetArbEasy
28 29
29\PassOptionsToPackage{pdfa}{hyperref} 30\PassOptionsToPackage{pdfa}{hyperref}
30\usepackage{hyperxmp}
31\usepackage{hyperref} 31\usepackage{hyperref}
32\hypersetup{colorlinks, linkcolor=blue, pdfauthor={Robert Alessi}} 32\hypersetup{colorlinks, linkcolor=blue, pdfauthor={Robert Alessi}}
33\usepackage{hyperxmp}
33 34
34\begin{document} 35\begin{document}
35\begin{filecontents*}{dajaja.tex} 36\begin{filecontents*}{dajaja.tex}
diff --git a/samples/exporting.tex b/samples/exporting.tex
index 7f22c2c..16066f0 100644
--- a/samples/exporting.tex
+++ b/samples/exporting.tex
@@ -134,10 +134,10 @@
134{\textquoteright}{\textquoteleft} 134{\textquoteright}{\textquoteleft}
135 135
136\PassOptionsToPackage{pdfa}{hyperref} 136\PassOptionsToPackage{pdfa}{hyperref}
137\usepackage{hyperxmp}
138\usepackage{hyperref} 137\usepackage{hyperref}
139\hypersetup{colorlinks, linkcolor=blue, pdfauthor={Robert 138\hypersetup{colorlinks, linkcolor=blue, pdfauthor={Robert
140 Alessi}} 139 Alessi}}
140\usepackage{hyperxmp}
141 141
142\title{\large Exporting Unicode Arabic to an external 142\title{\large Exporting Unicode Arabic to an external
143 .tex source file} 143 .tex source file}