texlive[47226] Master/texmf-dist: arabluatex (2apr18)

commits+karl at tug.org commits+karl at tug.org
Mon Apr 2 00:26:40 CEST 2018


Revision: 47226
          http://tug.org/svn/texlive?view=revision&revision=47226
Author:   karl
Date:     2018-04-02 00:26:39 +0200 (Mon, 02 Apr 2018)
Log Message:
-----------
arabluatex (2apr18)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/lualatex/arabluatex/arabluatex.el
    trunk/Master/texmf-dist/doc/lualatex/arabluatex/arabluatex.pdf
    trunk/Master/texmf-dist/doc/lualatex/arabluatex/samples/al-Jahiz.pdf
    trunk/Master/texmf-dist/doc/lualatex/arabluatex/samples/template-01.pdf
    trunk/Master/texmf-dist/source/lualatex/arabluatex/arabluatex.dtx
    trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua
    trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty
    trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_fullvoc.lua
    trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_novoc.lua
    trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua
    trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua

Modified: trunk/Master/texmf-dist/doc/lualatex/arabluatex/arabluatex.el
===================================================================
--- trunk/Master/texmf-dist/doc/lualatex/arabluatex/arabluatex.el	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/doc/lualatex/arabluatex/arabluatex.el	2018-04-01 22:26:39 UTC (rev 47226)
@@ -81,6 +81,8 @@
     "RLfootnote"
     "FixArbFtnmk"
     "MkArbBreak"
+    "arbmark"
+    '("newarbmark" 3)
     '("setRL" 0)
     '("setLR" 0))
    (LaTeX-add-environments

Modified: trunk/Master/texmf-dist/doc/lualatex/arabluatex/arabluatex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/lualatex/arabluatex/samples/al-Jahiz.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/lualatex/arabluatex/samples/template-01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/lualatex/arabluatex/arabluatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/lualatex/arabluatex/arabluatex.dtx	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/source/lualatex/arabluatex/arabluatex.dtx	2018-04-01 22:26:39 UTC (rev 47226)
@@ -27,7 +27,7 @@
 %<package-info>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package-info>\ProvidesPackage{arabluatex}
 %<*package-info>
-    [2018/02/12 v1.10.3 An ArabTeX-like interface for LuaLaTeX]
+    [2018/03/31 v1.11 An ArabTeX-like interface for LuaLaTeX]
 %</package-info>
 %
 %<*driver>
@@ -155,7 +155,7 @@
 \defaultfontfeatures{RawFeature={+liga}}
 \setmainfont{Old Standard}[SmallCapsFont={Latin Modern Roman Caps},
   RawFeature={+mark;+ccmp;+ss05;+ss06}]
-\usepackage{arabluatex}[2018/02/12]
+\usepackage{arabluatex}[2018/03/31]
 \usepackage[nopar]{quran}
 \usepackage[noindex]{nameauth}
 \usepackage{varioref}
@@ -229,7 +229,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{715}
+% \CheckSum{728}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -1295,7 +1295,7 @@
 %   \arb[voc]{mi'Una} \arb[trans]{mi'Una}, |mi'AtuN|
 %   \arb[voc]{mi'AtuN} \arb[trans]{mi'AtuN}, |mi'aN_A|
 %   \arb[voc]{mi'aN_A} \arb[trans]{mi'aN_A}. Of course, the
-%   \enquote*{pipe} character may be used to prevent this rule from
+%   \enquote*{pipe} character can be used to prevent this rule from
 %   being applied (see \vref{sec:pipe}): \verb+mi'a|TuN+
 %   \arb[voc]{mi'a|TuN} \arb[trans]{mi'a|TuN}.
 % \end{quote}
@@ -1787,7 +1787,7 @@
 % \end{compactenum}
 %
 % \paragraph{\texttt{fullvoc}}
-% In this mode, \enquote{quoting} may be used to take away any short
+% In this mode, \enquote{quoting} can be used to take away any short
 % vowel (or \arb[trans]{tanwIn}, as seen above) or any
 % \arb[trans]{sukUn}:---
 % \begin{quote}\label{ref:qrannun-full}
@@ -1949,7 +1949,7 @@
 % \label{sec:tatwil}
 % A double hyphen \meta{-\,-} stretches the ligature in which one
 % letter is bound to another. Although it is always better to rely on
-% automatic stretching, this technique may be used to a modest extent,
+% automatic stretching, this technique can be used to a modest extent,
 % especially to increase legibility of letters and diacritics which
 % stand one above the other:--
 % \begin{quote}
@@ -2141,7 +2141,7 @@
 % \DescribeOption{utf} |utf|$=$|true|\verb+|+|false|
 % \hfill\arabluaverb{Default: false}\\ As the preceding one, this
 % named argument does not need a value as it defaults to |true| if it
-% is used. If so, unicode Arabic input is expected in the |arabverse|
+% is used. If so, Unicode Arabic input is expected in the |arabverse|
 % environment instead of \textsc{ascii} Arab\TeX\ or Buckwalter input
 % schemes. See \vref{sec:unicode-input} for more details.
 %
@@ -2263,12 +2263,12 @@
 % \package{footnotehyper} package which \package{arabluatex} will then
 % use to typeset any kind of footnote that is called from the
 % arguments of the \cs{bayt} command.\footnote{The \package{footnote}
-% package may also be used for the same effect. However, it must be
+% package can also be used for the same effect. However, it must be
 % loaded \emph{after} \package{arabluatex}.}
 %
 % \paragraph{Line numbering}
 % Inside the |arabverse| environment, the |linenumbers| environment of
-% the \package{lineno} package may be used to have the lines of
+% the \package{lineno} package can be used to have the lines of
 % succeeding verses numbered. Please refer to the documentation of
 % this package for more information or to the example below for a
 % basic implementation of this technique.
@@ -2411,6 +2411,100 @@
 %</example>
 % \fi
 %
+% \paragraph{Additional Arabic marks}
+% In addition to common letters, many symbols and ligatures are
+% encoded in Arabic Unicode standard, such as honorifics consisting of
+% complex ligatures, and annotation signs used in the
+% \arb[trans]{\uc{qur'An}} or in classical poetry.
+%
+% \DescribeMacro{\arbmark}
+% \NEWfeature{v1.11}\cs{arbmark}\marg{shorthand} can be used to insert
+% such characters either in Unicode or in romanized Arabic
+% environments. It takes as argument a shorthand defined beforehand in
+% a default list which consists of the following
+% at the time of writing:---\\
+% \begin{longtable}{llp{.3\linewidth}p{.3\linewidth}}
+% \captionlistentry{Additional Arabic marks}\\[-1em]
+% \toprule
+% Codepoint & Shorthand & Glyph & Transliteration \\ \midrule
+% \endfirsthead
+% \toprule
+% Codepoint & Shorthand & Glyph & Transliteration \\ \midrule
+% \endhead\label{tab:arabtex-additional-marks}%
+% |FDFD| & |bismillah| & \arb{\arbmark{bismillah}} &
+% \arbmark{bismillah} \\
+% |FDF5| & |salam| & \arb{\arbmark{salam}} & \arbmark{salam} \\
+% |FDFA| & |slm| & \arb{\arbmark{slm}} & \arbmark{slm} \\
+% |FDFB| & |jalla| & \arb{\arbmark{jalla}} & \arbmark{jalla} \\
+% \bottomrule
+% \caption*{\Cref*{tab:arabtex-additional-marks}: Additional Arabic
+% marks}
+% \end{longtable}
+% 
+% \DescribeMacro{\newarbmark} \NEWfeature{v1.11} \cs{newarbmark} is
+% also provided should one wish to define new marks in addition to the
+% marks defined above. This command takes three arguments, like so:---
+% \arabluabox{\cs{newarbmark}\marg{shorthand}\marg{RTL
+% codepoint}\marg{LTR rendition}}.
+%
+% As regards the right-to-left codepoint, it may be either typed in
+% Unicode or selected as Unicode codepoint. To that end, the \LaTeX\
+% command \arabluaverb{\symbol{"XYZT}} or its plain \TeX\ variant
+% \arabluaverb{\char"XYZT\relax} may be used, where |XYZT| are
+% uppercase hex digits (|0| to |9| or |A| to |F|).
+%
+% It is also possible to use the so-called `|^^^^| notation' like so:
+% \arabluaverb{^^^^xyzt}, where |xyzt| are lowercase hex digits (|0|
+% to |9| or |a| to |f|).
+%
+% As regards the third argument (left-to-right rendition), it may be
+% either left empty or typed by means of
+% \cs{arb}|[trans]|\marg{arabtex code} so as to have it printed in
+% romanized Arabic.%
+% \iffalse
+%<*example>
+% \fi
+\begin{arabluacode}[text only]
+  It must be noted that \cs{newarbmark} expects Arab\TeX\ input scheme
+  inside \cs{arb}|[trans]{}| to the exclusion of \textsf{buckwalter}
+  input scheme.
+\end{arabluacode}
+% \iffalse
+%</example>
+% \fi%
+% 
+% The example below provides an implementation of this technique. It
+% may be observed that \cs{textcolor} is used so as to have the marks
+% printed in red:---%
+% \iffalse
+%<*example>
+% \fi
+\begin{arabluacode}
+  \SetArbDflt*
+  \newarbmark{sly}{\textcolor{red}{^^^^06d6}}{}
+  \newarbmark{jim}{\textcolor{red}{^^^^06da}}{}
+  \begin{arab}
+    sUraTu 'l-nisA'i, 19:
+  \end{arab}
+  \begin{center}
+    \begin{arab}
+      \arbmark{bismillah}
+    \end{arab}
+  \end{center}
+  \begin{arab}[fullvoc]
+    y_a'ayyuhA 'lla_dIna 'a'manUA lA ya.hillu la-kum 'an tari_tUA
+    'l-nisA'a karhaN\arbmark{sly} wa-lA ta`.dulU-hunna li-ta_dhabUA
+    bi-ba`.di mA 'a'taytumU-hunna 'illA 'an ya'tIna bi-fA.hi^saTiN
+    mubayyinaTiN\arbmark{jim} wa-`A^sirU-hunna
+    bi-'l-ma`rUfi\arbmark{jim} fa-'in karihtumU-hunna fa-`as_A_a
+    'an takrahUA ^say'aN wa-ya^g`ala 'l-l_ahu fI-hi _hayraN
+    ka_tIraN ((19))
+  \end{arab}
+\end{arabluacode}
+% \iffalse
+%</example>
+% \fi
+%
 % \section{Transliteration}
 % \label{sec:transliteration}
 % It may be more appropriate to speak of \enquote{romanization} than
@@ -2475,7 +2569,7 @@
 % the font-selecting commands of the \package{fontspec} or
 % \package{luaotfload} package. Of course, this font must have been
 % defined properly. To take one example, here is how the \emph{Gentium
-% Plus} font may be used for rendering transliterated text:---
+% Plus} font can be used for rendering transliterated text:---
 % \iffalse
 %<*example>
 % \fi
@@ -2618,7 +2712,7 @@
 % any point of the document.
 %
 % \DescribeMacro{\SetArbUp} Finally, \cs{SetArbUp}\marg{formatting
-% directives} may be used to customize the way \arb[trans]{'i`rAb} is
+% directives} can be used to customize the way \arb[trans]{'i`rAb} is
 % displayed. To take one example, here is how Arabic
 % \arb[trans]{'i`rAb} may be rendered as subscript text:---
 % \iffalse
@@ -2936,16 +3030,16 @@
 % \NEWfeature{v1.5} As said above in \vref{sec:buckwalter-scheme}
 % about the Buckwalter input scheme, even though \package{arabluatex}
 % is primarily designed to process the Arab\TeX\ notation, it also
-% accepts unicode Arabic input. It should be noted that
-% \package{arabluatex} does in no way interfere with unicode Arabic
+% accepts Unicode Arabic input. It should be noted that
+% \package{arabluatex} does in no way interfere with Unicode Arabic
 % input: none of the |voc|, |fullvoc|, |novoc| or |trans| options will
-% have any effect on plain unicode Arabic for the time being.
+% have any effect on plain Unicode Arabic for the time being.
 %
-% That said, there are two ways of inserting unicode
+% That said, there are two ways of inserting Unicode
 % Arabic:
 % \begin{compactenum}[(a)] 
-% \item \DescribeMacro{\txarb} The \cs{txarb}\marg{unicode Arabic}
-%   command for inserting unicode Arabic text in paragraphs;
+% \item \DescribeMacro{\txarb} The \cs{txarb}\marg{Unicode Arabic}
+%   command for inserting Unicode Arabic text in paragraphs;
 % \item The \DescribeEnv{txarab} |txarab| environment for inserting
 %   running paragraphs of Arabic text, like so:---\\%
 % \iffalse
@@ -3019,7 +3113,7 @@
 % left-to-right and right-to-left footnotes respectively in Arabic
 % environments. Unlike \cs{footnote}\marg{text}, the arguments of both
 % \cs{LRfootnote} and \cs{RLfootnote} are not expected to be Arabic
-% text. For example, \cs{LRfootnote} may be used to insert English
+% text. For example, \cs{LRfootnote} can be used to insert English
 % footnotes in running Arabic text:---
 % \iffalse
 %<*example>
@@ -3058,7 +3152,7 @@
 % general principle laid \vpageref{ref:cmd-inside-arabic} applies.
 %
 % \DescribeMacro{\setRL} \DescribeMacro{\setLR} \cs{setRL} and
-% \cs{setLR} may be used to change the direction of paragraphs, either
+% \cs{setLR} can be used to change the direction of paragraphs, either
 % form left to right or from right to left. As an example, an
 % easy way to typeset a right-to-left sectional title follows:---
 % \iffalse
@@ -3093,7 +3187,7 @@
 % command |\fvarabic| itself can see it.
 %
 % \DescribeMacro{\MkArbBreak} The \cs{MkArbBreak}\marg{csv list of
-% commands} command may be used in the preamble to give any
+% commands} command can be used in the preamble to give any
 % \emph{single-argument} command---either new or already
 % existing---the precedence over \package{arabluatex} inside Arabic
 % environments. It takes as argument a comma-separated list of
@@ -3181,7 +3275,7 @@
 % \package{paralist}.
 %
 % To take a first example, should one wish to typeset a list of
-% manuscripts, the |description| environment may be used like so:---
+% manuscripts, the |description| environment can be used like so:---
 % \iffalse
 %<*example>
 % \fi
@@ -3245,7 +3339,7 @@
 % \fi%
 % This option will prevent \package{babel-french} from interfering
 % with the layout of the document. Then the package \package{paralist}
-% may be used to make the lists \enquote*{compact} as
+% can be used to make the lists \enquote*{compact} as
 % \package{babel-french} do.
 %
 % \subsection{\package{csquotes}}
@@ -3349,7 +3443,7 @@
 % package} \package{arabluatex} is compatible with the \package{quran}
 % package so that both can be used in conjunction with one another for
 % typesetting the \arb[trans]{\uc{qur'An}}. As \package{quran} draws
-% the text of the \arb[trans]{\uc{qur'An}} from a unicode encoded
+% the text of the \arb[trans]{\uc{qur'An}} from a Unicode encoded
 % database, its commands have to be passed as arguments to the
 % \cs{txarb} command for short insertions in left-to-right paragraphs,
 % or inserted inside the \index{txarab=txarab (environment)}|txarab|
@@ -3423,7 +3517,7 @@
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{arabluatex}%
-[2018/02/12 v1.10.3 An ArabTeX-like interface for LuaLaTeX]
+[2018/03/31 v1.11 An ArabTeX-like interface for LuaLaTeX]
 \RequirePackage{ifluatex}
 %    \end{macrocode}
 % \package{arabluatex} requires \LuaLaTeX\ of course. Issue a warning
@@ -3517,7 +3611,7 @@
 % \begin{macro}{\MkArbBreak}
 % \changes{v1.9}{2017/07/05}{New \cs{MkArbBreak} command for inserting
 % user-defined macros in Arabic environments}
-% The \cs{MkArbBreak}\marg{csv list of commands} command may be used
+% The \cs{MkArbBreak}\marg{csv list of commands} command can be used
 % to give any command---either new or already existing---the
 % precedence over \package{arabluatex} inside Arabic environments. It
 % is actually coded in Lua.
@@ -3546,7 +3640,7 @@
 % \end{macro}
 % \end{macro}
 % \begin{macro}{\SetInputScheme}
-%   \changes{v1.4}{2016/07/05}{\cs{SetInputScheme} may be used to
+%   \changes{v1.4}{2016/07/05}{\cs{SetInputScheme} can be used to
 %   process other input schemes such as \enquote*{Buckwalter}}
 %   \package{arabluatex} is designed for processing Arab\TeX\ input
 %   notation. \cs{SetInputScheme} may be used in the preamble or at
@@ -3616,7 +3710,7 @@
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\SetTranslitConvention}
-%   \cs{SetTranslitConvention}\marg{convention} may be used to change
+%   \cs{SetTranslitConvention}\marg{convention} can be used to change
 %   the transliteration convention, which is |dmg| by default:
 %    \begin{macrocode}
 \def\al at trans@convention{dmg}
@@ -3635,7 +3729,7 @@
 %   either in the preamble or at any point of the document in case one
 %   wishes to have the \arb[trans]{tanwIn} on the line. The default
 %   rule can be set back with \cs{ArbUpDflt} at any point of the
-%   document. Finally \cs{SetArbUp} may be used to customize the way
+%   document. Finally \cs{SetArbUp} can be used to customize the way
 %   \arb[trans]{tanwIn} is displayed: this command takes the
 %   formatting directives as argument, like so:
 %   \cs{SetArbUp}\marg{code}.
@@ -3659,7 +3753,7 @@
   {\luadirect{tex.sprint(uc(\luastringN{#1}))}}
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\Uc} \cs{uc} may be used safely in all of the modes
+% \begin{macro}{\Uc} \cs{uc} can be used safely in all of the modes
 %   that are provided by \package{arabluatex} as any of the |voc|,
 %   |fullvoc| and |novoc| modes discard it on top of any other
 %   functions to be run.  \cs{Uc} does the same as \cs{uc} except
@@ -3692,9 +3786,9 @@
 % Lua functions to insert transliterated Arabic text. Therefore, it is
 % not documented.
 %    \begin{macrocode}
-\DeclareDocumentCommand{\txarb}{+m}{\bgroup\textdir
+\NewDocumentCommand{\txarb}{+m}{\bgroup\textdir
   TRT\arabicfont#1\egroup}
-\DeclareDocumentCommand{\txtrans}{+m}{\bgroup\textdir
+\NewDocumentCommand{\txtrans}{+m}{\bgroup\textdir
   TLT\al at trans@font#1\egroup}
 %    \end{macrocode}
 % \end{macro}
@@ -3701,7 +3795,7 @@
 % \end{macro}
 % \begin{environment}{txarab}
 %   \changes{v1.5}{2016/11/14}{New \texttt{txarab} environment for
-%   typesetting running paragraphs in unicode Arabic} The |txarab|
+%   typesetting running paragraphs in Unicode Arabic} The |txarab|
 %   environment does for paragraphs the same as \cs{txarb} does for
 %   short insertions of |utf8| Arabic text.
 %    \begin{macrocode}
@@ -3716,7 +3810,7 @@
 %   either globally if no option is set, or locally, then passes its
 %   argument to the appropriate Lua function.
 %    \begin{macrocode}
-\DeclareDocumentCommand{\arb}{O{\al at mode} +m}%
+\NewDocumentCommand{\arb}{O{\al at mode} +m}%
 {\edef\@tempa{#1}%
   \ifx\@tempa\al at mode@voc%
   \bgroup\textdir TRT\arabicfont%
@@ -3743,6 +3837,30 @@
   \fi\fi\fi\fi}
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\arbmark}
+% \changes{v1.11}{2018/03/31}{New command for inserting additional
+% marks in Arabic environments} \cs{arbmark} takes one argument from a
+% list of defined elements. This command is coded in Lua.
+%    \begin{macrocode}
+\NewDocumentCommand{\arbmark}{m}{%
+  \bgroup%
+  \SetInputScheme{arabtex}%
+  \luadirect{tex.sprint(processarbmarks(\luastringN{#1}))}%
+  \egroup}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\newarbmark}
+% \changes{v1.11}{2018/03/31}{Allows defining additional sets of Arabic
+% marks} \cs{newarbmark} lets the user define additional Arabic
+% marks. As \cs{arbmark}, this command is coded in Lua.  It takes
+% three arguments: the abbreviated form to be used as argument of
+% \cs{arbmark}, the rendition in Arabic script and the rendition in
+% romanized Arabic.
+%    \begin{macrocode}
+\NewDocumentCommand{\newarbmark}{m m m}{%
+  \luadirect{newarbmark(\luastringN{#1}, \luastringN{#2}, \luastringN{#3})}}
+%    \end{macrocode}
+% \end{macro}
 % \begin{environment}{arab}
 % The |arab| environment does for paragraphs the same as \cs{arb} does
 % for short insertions of Arabic text.
@@ -3821,7 +3939,7 @@
 %   changing the default delimiter between hemistichs} A hemistich
 %   delimiter also may be defined. By default, it is set to the
 %   \enquote*{star} character: |*|. The
-%   \cs{SetHemistichDelim}\marg{delimiter} command may be used at any
+%   \cs{SetHemistichDelim}\marg{delimiter} command can be used at any
 %   point of the document to change this default setting.
 % \end{macro}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua	2018-04-01 22:26:39 UTC (rev 47226)
@@ -124,6 +124,12 @@
 	body = string.sub(body, 2, -2)
 	return string.format("}\\aemph{\\%s{%s}}\\arb{", tag, body)
 	end)
+   -- Arbmark
+   str = string.gsub(str, "\\(arbmark.-)(%b{})",
+	function(tag, body)
+	body = string.sub(body, 2, -2)
+	return string.format("}\\%s{%s}\\arb{", tag, body)
+	end)
    return str
 end
 
@@ -665,6 +671,37 @@
 return str
 end
 
+function newarbmark(abbr, rtlmk, ltrmk)
+   table.insert(arbmarks, {a = abbr, b = rtlmk, c = ltrmk})
+   return true
+end
+
+local function isintable(table, element)
+   for i = 1,#table do
+      if table[i].a == element then
+	 return true
+      end
+   end
+   return false
+end
+
+function processarbmarks(str)
+   if not isintable(arbmarks, str) then
+      str = "\\LR{<??>}"
+   else
+      if tex.textdir == "TLT" then
+	 for i = 1,#arbmarks do
+	    str  = string.gsub(str, arbmarks[i].a, arbmarks[i].c)
+	 end
+      else
+	 for i = 1,#arbmarks do
+	    str  = string.gsub(str, arbmarks[i].a, arbmarks[i].b)
+	 end
+      end
+   end
+   return str
+end
+
 function uc(str)
    str = string.gsub(str, "(\\txtrans.?)(%b{})", function(tag, body)
 			body = string.sub(body, 2, -2)

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty	2018-04-01 22:26:39 UTC (rev 47226)
@@ -41,7 +41,7 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{arabluatex}%
-[2018/02/12 v1.10.3 An ArabTeX-like interface for LuaLaTeX]
+[2018/03/31 v1.11 An ArabTeX-like interface for LuaLaTeX]
 \RequirePackage{ifluatex}
 \ifluatex\else
  \PackageError{arabluatex}{lualatex needed}{%
@@ -123,15 +123,15 @@
 \let\Uc\uc
 \NewDocumentCommand{\prname}{m}{%
   \bgroup\SetTranslitStyle{\relax}\arb[trans]{\uc{#1}}\egroup}
-\DeclareDocumentCommand{\txarb}{+m}{\bgroup\textdir
+\NewDocumentCommand{\txarb}{+m}{\bgroup\textdir
   TRT\arabicfont#1\egroup}
-\DeclareDocumentCommand{\txtrans}{+m}{\bgroup\textdir
+\NewDocumentCommand{\txtrans}{+m}{\bgroup\textdir
   TLT\al at trans@font#1\egroup}
 \NewDocumentEnvironment{txarab}{}{%
   \par%
   \booltrue{al at rlmode}%
   \pardir TRT\textdir TRT\arabicfont}{\par}
-\DeclareDocumentCommand{\arb}{O{\al at mode} +m}%
+\NewDocumentCommand{\arb}{O{\al at mode} +m}%
 {\edef\@tempa{#1}%
   \ifx\@tempa\al at mode@voc%
   \bgroup\textdir TRT\arabicfont%
@@ -156,6 +156,13 @@
     \luastringO{\al at input@scheme}))}\egroup%
   \else%
   \fi\fi\fi\fi}
+\NewDocumentCommand{\arbmark}{m}{%
+  \bgroup%
+  \SetInputScheme{arabtex}%
+  \luadirect{tex.sprint(processarbmarks(\luastringN{#1}))}%
+  \egroup}
+\NewDocumentCommand{\newarbmark}{m m m}{%
+  \luadirect{newarbmark(\luastringN{#1}, \luastringN{#2}, \luastringN{#3})}}
 \NewEnviron{arab}[1][\al at mode]%
 {\par\edef\@tempa{#1}%
   \ifx\@tempa\al at mode@voc%

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_fullvoc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_fullvoc.lua	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_fullvoc.lua	2018-04-01 22:26:39 UTC (rev 47226)
@@ -39,14 +39,14 @@
    {a="i\"'", b="إ"},
    {a="y\"'", b="ئ"},
    {a="ؤ([^uaiUAI])", b="ؤْ%1"},
-   {a="ؤ(%p?)$", b="ؤْ%1"},
-   {a="ؤ(%p?%s)", b="ؤْ%1"},
+   {a="ؤ(%p*)$", b="ؤْ%1"},
+   {a="ؤ(%p*%s)", b="ؤْ%1"},
    {a="أ([^uaiUAI])", b="أْ%1"},
-   {a="أ(%p?)$", b="أْ%1"},
-   {a="أ(%p?%s)", b="أْ%1"},
+   {a="أ(%p*)$", b="أْ%1"},
+   {a="أ(%p*%s)", b="أْ%1"},
    {a="ئ([^uaiUAI])", b="ئْ%1"},
-   {a="ئ(%p?)$", b="ئْ%1"},
-   {a="ئ(%p?%s)", b="ئْ%1"},
+   {a="ئ(%p*)$", b="ئْ%1"},
+   {a="ئ(%p*%s)", b="ئْ%1"},
    -- hamza takes tašdīd too
    {a="''([Uu])", b="ؤؤ%1"},
    {a="''([Aa])", b="أأ%1"},
@@ -69,10 +69,10 @@
    {a="([^uiyUI])\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="%1آ%2"},
    {a="^\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="آ%1"},
    {a="(%W)\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="%1آ%2"},
-   {a="(A)(')(uN?%p?)$", b="aآء%3"},
-   {a="(A)(')(uN?)(%p?%s)", b="aآء%3%4"},
-   {a="(A)(')(iN?%p?)$", b="aآء%3"},
-   {a="(A)(')(iN?)(%p?%s)", b="aآء%3%4"},
+   {a="(A)(')(uN?%p*)$", b="aآء%3"},
+   {a="(A)(')(uN?)(%p*%s)", b="aآء%3%4"},
+   {a="(A)(')(iN?%p*)$", b="aآء%3"},
+   {a="(A)(')(iN?)(%p*%s)", b="aآء%3%4"},
    {a="(A)(')([iI])", b="aآئ%3"}, -- historic madda
    {a="(A)(')(u)", b="aآؤ%3"}, -- historic madda
    {a="(A)(')", b="aآء"}, -- historic madda
@@ -102,31 +102,31 @@
    {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"},
    -- final hamzah is on the line after a letter of prolongation or a
    -- consonant with sukūn
-   {a="([^Auai])(')(\"?[uai]N?)(%p?)$", b="%1ء%3%4"}, --new
-   {a="([^Auai])(')(\"?[uai]N?)(%p?%s)", b="%1ء%3%4"},
+   {a="([^Auai])(')(\"?[uai]N?)(%p*)$", b="%1ء%3%4"}, --new
+   {a="([^Auai])(')(\"?[uai]N?)(%p*%s)", b="%1ء%3%4"},
 -- u
-   {a="(u)(')([uai]N?%p?)$", b="%1ؤ%3"},
-   {a="(u)(')([uai]N?)(%p?%s)", b="%1ؤ%3%4"},
-   {a="(u)(')(%p?)$", b="%1ؤْ%3"},
-   {a="(u)(')(%p?%s)", b="%1ؤْ%3"},
+   {a="(u)(')([uai]N?%p*)$", b="%1ؤ%3"},
+   {a="(u)(')([uai]N?)(%p*%s)", b="%1ؤ%3%4"},
+   {a="(u)(')(%p*)$", b="%1ؤْ%3"},
+   {a="(u)(')(%p*%s)", b="%1ؤْ%3"},
 -- a
-   {a="(a)(')(A%p?)$", b="%1آ"},
-   {a="(a)(')(A)(%p?%s)", b="%1آ%4"},
-   {a="(a)(')([u]N?%p?)$", b="%1أ%3"},
-   {a="(a)(')([u]N?)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(a%p?)$", b="%1أ%3"},
-   {a="(a)(')(a)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(aN%p?)$", b="%1أً"},
-   {a="(a)(')(aN)(%p?%s)", b="%1أً%4"},
-   {a="(a)(')([i]N?%p?)$", b="%1إ%3"},
-   {a="(a)(')([i]N?)(%p?%s)", b="%1إ%3%4"},
-   {a="(a)(')(%p?)$", b="%1أْ%3"},
-   {a="(a)(')(%p?%s)", b="%1أْ%3"},
+   {a="(a)(')(A%p*)$", b="%1آ"},
+   {a="(a)(')(A)(%p*%s)", b="%1آ%4"},
+   {a="(a)(')([u]N?%p*)$", b="%1أ%3"},
+   {a="(a)(')([u]N?)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(a%p*)$", b="%1أ%3"},
+   {a="(a)(')(a)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(aN%p*)$", b="%1أً"},
+   {a="(a)(')(aN)(%p*%s)", b="%1أً%4"},
+   {a="(a)(')([i]N?%p*)$", b="%1إ%3"},
+   {a="(a)(')([i]N?)(%p*%s)", b="%1إ%3%4"},
+   {a="(a)(')(%p*)$", b="%1أْ%3"},
+   {a="(a)(')(%p*%s)", b="%1أْ%3"},
 -- i
-   {a="(i)(')([uai]N?%p?)$", b="%1ئ%3"},
-   {a="(i)(')([uai]N?)(%p?%s)", b="%1ئ%3%4"},
-   {a="(i)(')(%p?)$", b="%1ئْ%3"},
-   {a="(i)(')(%p?%s)", b="%1ئْ%3"},
+   {a="(i)(')([uai]N?%p*)$", b="%1ئ%3"},
+   {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"},
+   {a="(i)(')(%p*)$", b="%1ئْ%3"},
+   {a="(i)(')(%p*%s)", b="%1ئْ%3"},
 --
    -- middle
    {a="([UIwy])(')", b="%1ء"}, --new
@@ -165,14 +165,14 @@
    {a="i\"'", b="إ"},
    {a="y\"'", b="ئ"},
    {a="ؤ([^uaiUAI])", b="ؤْ%1"},
-   {a="ؤ(%p?)$", b="ؤْ%1"},
-   {a="ؤ(%p?%s)", b="ؤْ%1"},
+   {a="ؤ(%p*)$", b="ؤْ%1"},
+   {a="ؤ(%p*%s)", b="ؤْ%1"},
    {a="أ([^uaiUAI])", b="أْ%1"},
-   {a="أ(%p?)$", b="أْ%1"},
-   {a="أ(%p?%s)", b="أْ%1"},
+   {a="أ(%p*)$", b="أْ%1"},
+   {a="أ(%p*%s)", b="أْ%1"},
    {a="ئ([^uaiUAI])", b="ئْ%1"},
-   {a="ئ(%p?)$", b="ئْ%1"},
-   {a="ئ(%p?%s)", b="ئْ%1"},
+   {a="ئ(%p*)$", b="ئْ%1"},
+   {a="ئ(%p*%s)", b="ئْ%1"},
    -- hamza takes tašdīd too
    {a="''([Uu])", b="ؤؤ%1"},
    {a="''([Aa])", b="أأ%1"},
@@ -196,10 +196,10 @@
    {a="^\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="آ%1"},
    {a="(%W)\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="%1آ%2"},
    --easy (begin)
-   {a="(A)(')(uN?%p?)$", b="aاء%3"},
-   {a="(A)(')(uN?)(%p?%s)", b="aاء%3%4"},
-   {a="(A)(')(iN?%p?)$", b="aاء%3"},
-   {a="(A)(')(iN?)(%p?%s)", b="aاء%3%4"},
+   {a="(A)(')(uN?%p*)$", b="aاء%3"},
+   {a="(A)(')(uN?)(%p*%s)", b="aاء%3%4"},
+   {a="(A)(')(iN?%p*)$", b="aاء%3"},
+   {a="(A)(')(iN?)(%p*%s)", b="aاء%3%4"},
    {a="(A)(')([iI])", b="aائ%3"}, -- historic madda
    {a="(A)(')(u)", b="aاؤ%3"}, -- historic madda
    {a="(A)(')", b="aاء"}, -- historic madda
@@ -233,38 +233,38 @@
    -- hamzah alone on the line, so take out the following two lines
    -- (final hamzah is on the line after a letter of prolongation or a
    -- consonant with sukūn)
-   -- {a="([^Auai])(')(\"?[uai]N?)(%p?)$", b="%1ء%3%4"}, --new
-   -- {a="([^Auai])(')(\"?[uai]N?)(%p?%s)", b="%1ء%3%4"},
-   {a="([^Auai])(')(\"?aN)(%p?)$", b="%1ئ%3%4"}, --new
-   {a="([^Auai])(')(\"?aN)(%p?%s)", b="%1ئ%3%4"}, --new
-   {a="([^uai])(')(\"?a)(%p?)$", b="%1ء%3%4"}, --new
-   {a="([^uai])(')(\"?a)(%p?%s)", b="%1ء%3%4"}, --new
-   {a="([^uai])(')(\"?[ui]N?)(%p?)$", b="%1ء%3%4"}, --new
-   {a="([^uai])(')(\"?[ui]N?)(%p?%s)", b="%1ء%3%4"}, --new
+   -- {a="([^Auai])(')(\"?[uai]N?)(%p*)$", b="%1ء%3%4"}, --new
+   -- {a="([^Auai])(')(\"?[uai]N?)(%p*%s)", b="%1ء%3%4"},
+   {a="([^Auai])(')(\"?aN)(%p*)$", b="%1ئ%3%4"}, --new
+   {a="([^Auai])(')(\"?aN)(%p*%s)", b="%1ئ%3%4"}, --new
+   {a="([^uai])(')(\"?a)(%p*)$", b="%1ء%3%4"}, --new
+   {a="([^uai])(')(\"?a)(%p*%s)", b="%1ء%3%4"}, --new
+   {a="([^uai])(')(\"?[ui]N?)(%p*)$", b="%1ء%3%4"}, --new
+   {a="([^uai])(')(\"?[ui]N?)(%p*%s)", b="%1ء%3%4"}, --new
    --easy (end)
 -- u
-   {a="(u)(')([uai]N?%p?)$", b="%1ؤ%3"},
-   {a="(u)(')([uai]N?)(%p?%s)", b="%1ؤ%3%4"},
-   {a="(u)(')(%p?)$", b="%1ؤْ%3"},
-   {a="(u)(')(%p?%s)", b="%1ؤْ%3"},
+   {a="(u)(')([uai]N?%p*)$", b="%1ؤ%3"},
+   {a="(u)(')([uai]N?)(%p*%s)", b="%1ؤ%3%4"},
+   {a="(u)(')(%p*)$", b="%1ؤْ%3"},
+   {a="(u)(')(%p*%s)", b="%1ؤْ%3"},
 -- a
-   {a="(a)(')(A%p?)$", b="%1آ"},
-   {a="(a)(')(A)(%p?%s)", b="%1آ%4"},
-   {a="(a)(')([u]N?%p?)$", b="%1أ%3"},
-   {a="(a)(')([u]N?)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(a%p?)$", b="%1أ%3"},
-   {a="(a)(')(a)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(aN%p?)$", b="%1أً"},
-   {a="(a)(')(aN)(%p?%s)", b="%1أً%4"},
-   {a="(a)(')([i]N?%p?)$", b="%1إ%3"},
-   {a="(a)(')([i]N?)(%p?%s)", b="%1إ%3%4"},
-   {a="(a)(')(%p?)$", b="%1أْ%3"},
-   {a="(a)(')(%p?%s)", b="%1أْ%3"},
+   {a="(a)(')(A%p*)$", b="%1آ"},
+   {a="(a)(')(A)(%p*%s)", b="%1آ%4"},
+   {a="(a)(')([u]N?%p*)$", b="%1أ%3"},
+   {a="(a)(')([u]N?)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(a%p*)$", b="%1أ%3"},
+   {a="(a)(')(a)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(aN%p*)$", b="%1أً"},
+   {a="(a)(')(aN)(%p*%s)", b="%1أً%4"},
+   {a="(a)(')([i]N?%p*)$", b="%1إ%3"},
+   {a="(a)(')([i]N?)(%p*%s)", b="%1إ%3%4"},
+   {a="(a)(')(%p*)$", b="%1أْ%3"},
+   {a="(a)(')(%p*%s)", b="%1أْ%3"},
 -- i
-   {a="(i)(')([uai]N?%p?)$", b="%1ئ%3"},
-   {a="(i)(')([uai]N?)(%p?%s)", b="%1ئ%3%4"},
-   {a="(i)(')(%p?)$", b="%1ئْ%3"},
-   {a="(i)(')(%p?%s)", b="%1ئْ%3"},
+   {a="(i)(')([uai]N?%p*)$", b="%1ئ%3"},
+   {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"},
+   {a="(i)(')(%p*)$", b="%1ئْ%3"},
+   {a="(i)(')(%p*%s)", b="%1ئْ%3"},
 --
    -- middle
    {a="([Uw])(')", b="%1ء"}, --new
@@ -307,7 +307,7 @@
    {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"},
    {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"},
    {a="(T)%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"},
-   {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new
+--   {a="(ء)%-?(aN)(%s)([rlmnwy])", b="%1%2%3%4%4"}, --new
    {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
    {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
    -- assimilations (end)
@@ -446,12 +446,12 @@
    -- art. with waṣla + lunar consonant (i.e. what remains)
    {a="'l%-", b="ٱلْ"},
    -- the silent wāw
-   {a="uU(%p?)$", b="uو%1"},
-   {a="uU(%p?%s)", b="uو%1"},
-   {a="aU(%p?)$", b="aو%1"},
-   {a="aU(%p?%s)", b="aو%1"},
-   {a="iU(%p?)$", b="iو%1"},
-   {a="iU(%p?%s)", b="iو%1"},
+   {a="uU(%p*)$", b="uو%1"},
+   {a="uU(%p*%s)", b="uو%1"},
+   {a="aU(%p*)$", b="aو%1"},
+   {a="aU(%p*%s)", b="aو%1"},
+   {a="iU(%p*)$", b="iو%1"},
+   {a="iU(%p*%s)", b="iو%1"},
    -- words ending in -āT with silent wāw/yāʾ
    {a="(_a)UA", b="%1وا"},
    {a="(_a)U", b="%1و"},
@@ -527,12 +527,12 @@
    -- art. with waṣla + lunar consonant (i.e. what remains)
    {a="'l%-", b="ٱلْ"},
    -- the silent wāw
-   {a="uU(%p?)$", b="uو%1"},
-   {a="uU(%p?%s)", b="uو%1"},
-   {a="aU(%p?)$", b="aو%1"},
-   {a="aU(%p?%s)", b="aو%1"},
-   {a="iU(%p?)$", b="iو%1"},
-   {a="iU(%p?%s)", b="iو%1"},
+   {a="uU(%p*)$", b="uو%1"},
+   {a="uU(%p*%s)", b="uو%1"},
+   {a="aU(%p*)$", b="aو%1"},
+   {a="aU(%p*%s)", b="aو%1"},
+   {a="iU(%p*)$", b="iو%1"},
+   {a="iU(%p*%s)", b="iو%1"},
    -- words ending in -āT with silent wāw/yāʾ
    {a="(_a)UA", b="%1وا"},
    {a="(_a)U", b="%1و"},
@@ -541,16 +541,16 @@
 
 digraphsfvidgham = {
    -- ʾiʿrāb: straight double quote must be discarded
-   {a="(%-)(\"?[UI]na)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[UI]na)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?)$", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?)$", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*)$", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*)$", b="%2%3"},
    -- ʾiʿrāb (end)
    -- initial straight double quote gives a connective ʾalif
    {a="^\"[uai]", b="ٱ"},
@@ -620,8 +620,8 @@
    -- first, take out hyphen if any (next two lines):
    {a="([ai]Y)%-([uaiUAI])", b="%1%2"},
    {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])%-([uaiUAI])", b="%1%2"},
-   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p?)$", b="%1ْ%2"},
-   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p?%s)", b="%1ْ%2"},
+   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p*)$", b="%1ْ%2"},
+   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p*%s)", b="%1ْ%2"},
    {a="([ai]Y)([%_]?[^%_uaiUAIYًٌٍ])", b="%1ْ%2"},
    {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])([%_]?[^%_uaiUAIYًٌٍ])", b="%1ْ%2"},
    -- take out sukūn in cases of assimilation
@@ -668,16 +668,16 @@
 
 digraphsfv = {
    -- iʿrāb: straight double quote must be discarded
-   {a="(%-)(\"?[UI]na)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[UI]na)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?)$", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?)$", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*)$", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*)$", b="%2%3"},
    -- ʾiʿrāb (end)
    -- initial straight double quote gives a connective ʾalif
    {a="^\"[uai]", b="ٱ"},
@@ -747,8 +747,8 @@
    -- first, take out hyphen if any (next two lines):
    {a="([ai]Y)%-([uaiUAI])", b="%1%2"},
    {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])%-([uaiUAI])", b="%1%2"},
-   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p?)$", b="%1ْ%2"},
-   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p?%s)", b="%1ْ%2"},
+   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p*)$", b="%1ْ%2"},
+   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p*%s)", b="%1ْ%2"},
    {a="([ai]Y)([%_]?[^%_uaiUAIYًٌٍ])", b="%1ْ%2"},
    {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])([%_]?[^%_uaiUAIYًٌٍ])", b="%1ْ%2"},
    -- take out sukūn in cases of assimilation
@@ -795,16 +795,16 @@
 
 digraphsfveasy = { -- see the differences under 'easy' marker below
    -- ʾiʿrāb: straight double quote must be discarded
-   {a="(%-)(\"?[UI]na)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[UI]na)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?)$", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?)$", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*)$", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*)$", b="%2%3"},
    -- ʾiʿrāb (end)
    -- initial straight double quote gives a connective ʾalif
    {a="^\"[uai]", b="ٱ"},
@@ -877,8 +877,8 @@
    -- first, take out hyphen if any (next two lines):
 --   {a="([ai]Y)%-([uaiUAI])", b="%1%2"},
 --   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])%-([uaiUAI])", b="%1%2"},
---   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p?)$", b="%1ْ%2"},
---   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p?%s)", b="%1ْ%2"},
+--   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p*)$", b="%1ْ%2"},
+--   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])(%p*%s)", b="%1ْ%2"},
 --   {a="([ai]Y)([%_]?[^%_uaiUAIYًٌٍ])", b="%1ْ%2"},
 --   {a="([%_%^%.]?[Bbtjghxdrzs%`fqklmnwy])([%_]?[^%_uaiUAIYًٌٍ])", b="%1ْ%2"},
    -- take out sukūn in cases of assimilation

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_novoc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_novoc.lua	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_novoc.lua	2018-04-01 22:26:39 UTC (rev 47226)
@@ -121,12 +121,12 @@
    -- art. with waṣla + lunar consonant (i.e. what remains)
    {a="'l%-", b="ال"},
    -- the silent wāw
-   {a="uU(%p?)$", b="uو%1"},
-   {a="uU(%p?%s)", b="uو%1"},
-   {a="aU(%p?)$", b="aو%1"},
-   {a="aU(%p?%s)", b="aو%1"},
-   {a="iU(%p?)$", b="iو%1"},
-   {a="iU(%p?%s)", b="iو%1"},
+   {a="uU(%p*)$", b="uو%1"},
+   {a="uU(%p*%s)", b="uو%1"},
+   {a="aU(%p*)$", b="aو%1"},
+   {a="aU(%p*%s)", b="aو%1"},
+   {a="iU(%p*)$", b="iو%1"},
+   {a="iU(%p*%s)", b="iو%1"},
    -- words ending in -āT with silent wāw/yāʾ
    {a="(_a)UA", b="%1وا"},
    {a="(_a)U", b="%1و"},

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua	2018-04-01 22:26:39 UTC (rev 47226)
@@ -377,16 +377,16 @@
    {a="([%_]?[Uu])(%s)([%(%[%|%<]?)(\"?[uai])", b="u%2%3'"}, --p
    {a="([%_]?[Ii])(%s)([%(%[%|%<]?)(\"?[uai])", b="i%2%3'"}, --p
    -- ʾiʿrāb hyphen (begin)
-   {a="(%-)(\"?[UI]na)(%p?%s)", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?[UI]na)(%p?)$", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?At[ui])(%p?%s)", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?At[ui])(%p?)$", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?Ani)(%p?%s)", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?Ani)(%p?)$", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?ayni)(%p?%s)", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?ayni)(%p?)$", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?[uai])(%p?%s)", b="\\arbup{%2}%3"},
-   {a="(%-)(\"?[uai])(%p?)$", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?[UI]na)(%p*%s)", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?[UI]na)(%p*)$", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?At[ui])(%p*%s)", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?At[ui])(%p*)$", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?Ani)(%p*%s)", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?Ani)(%p*)$", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?ayni)(%p*%s)", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?ayni)(%p*)$", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?[uai])(%p*%s)", b="\\arbup{%2}%3"},
+   {a="(%-)(\"?[uai])(%p*)$", b="\\arbup{%2}%3"},
    -- ʾiʿrāb hyphen (end) shorten long vowels preceding ʾalif
    -- conjunctionis—without forgetting 'lla_dI
    {a="(U)(A)", b="U"},
@@ -406,18 +406,18 @@
    {a="([%_]?[Uu])(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy][%-l])", b="u%2%3"},
    {a="([%_]?[Ii])(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy][%-l])", b="i%2%3"},
    {a="%-%-", b=""},
-   {a="iyyaT(%p?)$", b="īyaT%1"},
-   {a="iyyaT(%p?%s)", b="īyaT%1"},
-   {a="iyy(%p?)$", b="ī%1"},
-   {a="iyy(%p?%s)", b="ī%1"},
+   {a="iyyaT(%p*)$", b="īyaT%1"},
+   {a="iyyaT(%p*%s)", b="īyaT%1"},
+   {a="iyy(%p*)$", b="ī%1"},
+   {a="iyy(%p*%s)", b="ī%1"},
    --   {a="T([^uai])", b="%1"},
    {a="T(\\arbup)", b="t%1"},
    {a="([a%'][%_%^%.]?[tdrzsln]%-)(%S-)T([%(%[%|%<%s])(a[%_%^%.]?[tdrzsln]%-)", b="%1%2h%3%4"}, --p
    {a="T([%(%[%|%<%s])(a[%_%^%.]?[tdrzsln]%-)", b="t%1%2"}, --p
    {a="T([%|\"])", b="t%1"},
-   {a="T(%p?%s)", b="h%1"},
-   {a="T(%p?)$", b="h%1"},
-   {a="T(%p?)(%W)", b="h%1%2"},
+   {a="T(%p*%s)", b="h%1"},
+   {a="T(%p*)$", b="h%1"},
+   {a="T(%p*)(%W)", b="h%1%2"},
    {a="_t", b="ṯ"},
    {a="%^g", b="ǧ"},
    {a="%.h", b="ḥ"},
@@ -651,16 +651,16 @@
 
 digraphstrloc = {
    -- discard the ʾiʿrāb hyphen (begin)
-   {a="(%-)(\"?[UI]na)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[UI]na)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?)$", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?)$", b="%2%3"},
-   {a="(%-)([uai])(%p?%s)", b="%2%3"},
-   {a="(%-)([uai])(%p?)$", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*)$", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*)$", b="%2%3"},
+   {a="(%-)([uai])(%p*%s)", b="%2%3"},
+   {a="(%-)([uai])(%p*)$", b="%2%3"},
    -- discard the ʾiʿrāb hyphen (end)
    {a="(%-)(\"?[uai])", b="%1%2"}, -- hyphen + initial alif without hamza
    {a="^(\"?[uai])", b="%1"},      -- initial alif without hamza
@@ -667,8 +667,8 @@
    {a="(%s)([uai])", b="%1%2"}, -- initial alif without hamza
    {a="%-%-", b=""},
    {a="uww", b="ūw"},
-   {a="iyy(%p?)$", b="ī%1"},
-   {a="iyy(%p?%s)", b="ī%1"},
+   {a="iyy(%p*)$", b="ī%1"},
+   {a="iyy(%p*%s)", b="ī%1"},
    {a="iyy", b="īy"},
    {a="([tkdsg])(h)", b="%1'%2"},
    --   {a="T([^uai])", b="h%1"},
@@ -675,8 +675,8 @@
    {a="([a%']l%-)(%S-)T([%(%[%|%<%s])(al%-)", b="%1%2h%3%4"}, --p
    {a="T([%(%[%|%<%s])(al%-)", b="t%1%2"}, --p
    {a="T([%|\"])", b="t%1"},
-   {a="T(%p?)$", b="h%1"},
-   {a="T(%p?%s)", b="h%1"},
+   {a="T(%p*)$", b="h%1"},
+   {a="T(%p*%s)", b="h%1"},
    {a="_t", b="th"},
    {a="%^g", b="j"},
    {a="%.h", b="ḥ"},
@@ -902,31 +902,32 @@
 digraphstrarabica = {
    {a="([uai]%-)(\"?[uai])", b="%1"}, -- hyphen + initial alif without hamza
    {a="([UAIYuai])(%s)([%(%[%|%<]?)(\"?[uai])", b="%1%2%3"}, --p
+   {a="(o[%S]-)([UAIuai])(o)(\"?[uai])", b=""},
    {a="@", b=""}, -- remove the tag before the former hamza
    -- discard the ʾiʿrāb hyphen (begin)
-   {a="(%-)(\"?[UI]na)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[UI]na)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?)$", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?)$", b="%2%3"},
-   {a="(%-)([uai])(%p?%s)", b="%2%3"},
-   {a="(%-)([uai])(%p?)$", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*)$", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*)$", b="%2%3"},
+   {a="(%-)([uai])(%p*%s)", b="%2%3"},
+   {a="(%-)([uai])(%p*)$", b="%2%3"},
    -- discard the ʾiʿrāb hyphen (end)
    {a="(%-)(\"?[uai])", b="%1%2"}, -- hyphen + initial alif without hamza
    {a="^(\"?[uai])", b="%1"},      -- initial alif without hamza
    {a="(%s)([uai])", b="%1%2"}, -- initial alif without hamza
    {a="%-%-", b=""},
-   {a="iyy(%p?)$", b="ī%1"},
-   {a="iyy(%p?%s)", b="ī%1"},
+   {a="iyy(%p*)$", b="ī%1"},
+   {a="iyy(%p*%s)", b="ī%1"},
    --   {a="T([^uai])", b="h%1"},
    {a="([a%']l%-)(%S-)aT([%(%[%|%<%s])(al%-)", b="%1%2a%3%4"}, --p
    {a="aT([%(%[%|%<%s])(al%-)", b="at%1%2"}, --p
    {a="T([%|\"])", b="t%1"},
-   {a="aT(%p?)$", b="a%1"},
-   {a="aT(%p?%s)", b="a%1"},
+   {a="aT(%p*)$", b="a%1"},
+   {a="aT(%p*%s)", b="a%1"},
    {a="_t", b="ṯ"},
    {a="%^g", b="ǧ"},
    {a="%.h", b="ḥ"},

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua	2018-04-01 22:24:04 UTC (rev 47225)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua	2018-04-01 22:26:39 UTC (rev 47226)
@@ -22,6 +22,13 @@
 <http://www.gnu.org/licenses/>.
 --]]
 
+arbmarks = {
+   {a="bismillah", b="^^^^fdfd", c="\\arb[trans]{bi-ismi \\uc{'l-l_ahi} 'l-ra.hm_ani 'l-ra.hImi}"},
+   {a="salam", b="^^^^fdf5", c="\\arb[trans]{.sall_A\\arbnull{'l-l_ahu} \\uc{'l-l_ahu} `alay-hi wa-sallama}"},
+   {a="slm", b="^^^^fdfa", c="\\arb[trans]{.sall_A\\arbnull{'l-l_ahu} \\uc{'l-l_ahu} `alay-hi wa-sallama}"},
+   {a="jalla", b="^^^^fdfb", c="\\arb[trans]{^galla ^galAla-hu}"}
+}
+
 abjad = {
 {"a\"'", "b", "j", "d", "h", "w", "z", ".h", ".t"},
 {"y", "k", "l", "m", "n", "s", "`", "f", ".s", },
@@ -205,10 +212,10 @@
    {a="([^uiyUI])\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="%1آ%2"},
    {a="^\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="آ%1"},
    {a="(%W)\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="%1آ%2"},
-   {a="(A)(')(uN?%p?)$", b="aآء%3"},
-   {a="(A)(')(uN?)(%p?%s)", b="aآء%3%4"},
-   {a="(A)(')(iN?%p?)$", b="aآء%3"},
-   {a="(A)(')(iN?)(%p?%s)", b="aآء%3%4"},
+   {a="(A)(')(uN?%p*)$", b="aآء%3"},
+   {a="(A)(')(uN?)(%p*%s)", b="aآء%3%4"},
+   {a="(A)(')(iN?%p*)$", b="aآء%3"},
+   {a="(A)(')(iN?)(%p*%s)", b="aآء%3%4"},
    {a="(A)(')([iI])", b="aآئ%3"}, -- historic madda
    {a="(A)(')(u)", b="aآؤ%3"}, -- historic madda
    {a="(A)(')", b="aآء"}, -- historic madda
@@ -238,31 +245,31 @@
    {a="(mi)(%')(aN%_?[AY])", b="%1أ%3"},
    -- final hamzah is on the line after a letter of prolongation or a
    -- consonant with sukūn
-   {a="([^Auai])(')(\"?[uai]N?)(%p?)$", b="%1ء%3%4"}, --new
-   {a="([^Auai])(')(\"?[uai]N?)(%p?%s)", b="%1ء%3%4"},
+   {a="([^Auai])(')(\"?[uai]N?)(%p*)$", b="%1ء%3%4"}, --new
+   {a="([^Auai])(')(\"?[uai]N?)(%p*%s)", b="%1ء%3%4"},
 -- u
-   {a="(u)(')([uai]N?%p?)$", b="%1ؤ%3"},
-   {a="(u)(')([uai]N?)(%p?%s)", b="%1ؤ%3%4"},
-   {a="(u)(')(%p?)$", b="%1ؤ%3"},
-   {a="(u)(')(%p?%s)", b="%1ؤ%3"},
+   {a="(u)(')([uai]N?%p*)$", b="%1ؤ%3"},
+   {a="(u)(')([uai]N?)(%p*%s)", b="%1ؤ%3%4"},
+   {a="(u)(')(%p*)$", b="%1ؤ%3"},
+   {a="(u)(')(%p*%s)", b="%1ؤ%3"},
 -- a
-   {a="(a)(')(A%p?)$", b="%1آ"},
-   {a="(a)(')(A)(%p?%s)", b="%1آ%4"},
-   {a="(a)(')([u]N?%p?)$", b="%1أ%3"},
-   {a="(a)(')([u]N?)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(a%p?)$", b="%1أ%3"},
-   {a="(a)(')(a)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(aN%p?)$", b="%1أً"},
-   {a="(a)(')(aN)(%p?%s)", b="%1أً%4"},
-   {a="(a)(')([i]N?%p?)$", b="%1إ%3"},
-   {a="(a)(')([i]N?)(%p?%s)", b="%1إ%3%4"},
-   {a="(a)(')(%p?)$", b="%1أ%3"},
-   {a="(a)(')(%p?%s)", b="%1أ%3"},
+   {a="(a)(')(A%p*)$", b="%1آ"},
+   {a="(a)(')(A)(%p*%s)", b="%1آ%4"},
+   {a="(a)(')([u]N?%p*)$", b="%1أ%3"},
+   {a="(a)(')([u]N?)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(a%p*)$", b="%1أ%3"},
+   {a="(a)(')(a)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(aN%p*)$", b="%1أً"},
+   {a="(a)(')(aN)(%p*%s)", b="%1أً%4"},
+   {a="(a)(')([i]N?%p*)$", b="%1إ%3"},
+   {a="(a)(')([i]N?)(%p*%s)", b="%1إ%3%4"},
+   {a="(a)(')(%p*)$", b="%1أ%3"},
+   {a="(a)(')(%p*%s)", b="%1أ%3"},
 -- i
-   {a="(i)(')([uai]N?%p?)$", b="%1ئ%3"},
-   {a="(i)(')([uai]N?)(%p?%s)", b="%1ئ%3%4"},
-   {a="(i)(')(%p?)$", b="%1ئ%3"},
-   {a="(i)(')(%p?%s)", b="%1ئ%3"},
+   {a="(i)(')([uai]N?%p*)$", b="%1ئ%3"},
+   {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"},
+   {a="(i)(')(%p*)$", b="%1ئ%3"},
+   {a="(i)(')(%p*%s)", b="%1ئ%3"},
 --
    -- middle
    {a="([UIwy])(')", b="%1ء"}, --new
@@ -323,10 +330,10 @@
    {a="^\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="آ%1"},
    {a="(%W)\'a?A([%_%^%.]?[%`%'btjghxdrzsfqklmnywAY])", b="%1آ%2"},
    --easy (begin)
-   {a="(A)(')(uN?%p?)$", b="aاء%3"},
-   {a="(A)(')(uN?)(%p?%s)", b="aاء%3%4"},
-   {a="(A)(')(iN?%p?)$", b="aاء%3"},
-   {a="(A)(')(iN?)(%p?%s)", b="aاء%3%4"},
+   {a="(A)(')(uN?%p*)$", b="aاء%3"},
+   {a="(A)(')(uN?)(%p*%s)", b="aاء%3%4"},
+   {a="(A)(')(iN?%p*)$", b="aاء%3"},
+   {a="(A)(')(iN?)(%p*%s)", b="aاء%3%4"},
    {a="(A)(')([iI])", b="aائ%3"}, -- historic madda
    {a="(A)(')(u)", b="aاؤ%3"}, -- historic madda
    {a="(A)(')", b="aاء"}, -- historic madda
@@ -360,38 +367,38 @@
    -- hamzah alone on the line, so take out the following two lines
    -- (final hamzah is on the line after a letter of prolongation or a
    -- consonant with sukūn)
-   -- {a="([^Auai])(')(\"?[uai]N?)(%p?)$", b="%1ء%3%4"}, --new
-   -- {a="([^Auai])(')(\"?[uai]N?)(%p?%s)", b="%1ء%3%4"},
-   {a="([^Auai])(')(\"?aN)(%p?)$", b="%1ئ%3%4"}, --new
-   {a="([^Auai])(')(\"?aN)(%p?%s)", b="%1ئ%3%4"}, --new
-   {a="([^uai])(')(\"?a)(%p?)$", b="%1ء%3%4"}, --new
-   {a="([^uai])(')(\"?a)(%p?%s)", b="%1ء%3%4"}, --new
-   {a="([^uai])(')(\"?[ui]N?)(%p?)$", b="%1ء%3%4"}, --new
-   {a="([^uai])(')(\"?[ui]N?)(%p?%s)", b="%1ء%3%4"}, --new
+   -- {a="([^Auai])(')(\"?[uai]N?)(%p*)$", b="%1ء%3%4"}, --new
+   -- {a="([^Auai])(')(\"?[uai]N?)(%p*%s)", b="%1ء%3%4"},
+   {a="([^Auai])(')(\"?aN)(%p*)$", b="%1ئ%3%4"}, --new
+   {a="([^Auai])(')(\"?aN)(%p*%s)", b="%1ئ%3%4"}, --new
+   {a="([^uai])(')(\"?a)(%p*)$", b="%1ء%3%4"}, --new
+   {a="([^uai])(')(\"?a)(%p*%s)", b="%1ء%3%4"}, --new
+   {a="([^uai])(')(\"?[ui]N?)(%p*)$", b="%1ء%3%4"}, --new
+   {a="([^uai])(')(\"?[ui]N?)(%p*%s)", b="%1ء%3%4"}, --new
    --easy (end)
 -- u
-   {a="(u)(')([uai]N?%p?)$", b="%1ؤ%3"},
-   {a="(u)(')([uai]N?)(%p?%s)", b="%1ؤ%3%4"},
-   {a="(u)(')(%p?)$", b="%1ؤ%3"},
-   {a="(u)(')(%p?%s)", b="%1ؤ%3"},
+   {a="(u)(')([uai]N?%p*)$", b="%1ؤ%3"},
+   {a="(u)(')([uai]N?)(%p*%s)", b="%1ؤ%3%4"},
+   {a="(u)(')(%p*)$", b="%1ؤ%3"},
+   {a="(u)(')(%p*%s)", b="%1ؤ%3"},
 -- a
-   {a="(a)(')(A%p?)$", b="%1آ"},
-   {a="(a)(')(A)(%p?%s)", b="%1آ%4"},
-   {a="(a)(')([u]N?%p?)$", b="%1أ%3"},
-   {a="(a)(')([u]N?)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(a%p?)$", b="%1أ%3"},
-   {a="(a)(')(a)(%p?%s)", b="%1أ%3%4"},
-   {a="(a)(')(aN%p?)$", b="%1أً"},
-   {a="(a)(')(aN)(%p?%s)", b="%1أً%4"},
-   {a="(a)(')([i]N?%p?)$", b="%1إ%3"},
-   {a="(a)(')([i]N?)(%p?%s)", b="%1إ%3%4"},
-   {a="(a)(')(%p?)$", b="%1أ%3"},
-   {a="(a)(')(%p?%s)", b="%1أ%3"},
+   {a="(a)(')(A%p*)$", b="%1آ"},
+   {a="(a)(')(A)(%p*%s)", b="%1آ%4"},
+   {a="(a)(')([u]N?%p*)$", b="%1أ%3"},
+   {a="(a)(')([u]N?)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(a%p*)$", b="%1أ%3"},
+   {a="(a)(')(a)(%p*%s)", b="%1أ%3%4"},
+   {a="(a)(')(aN%p*)$", b="%1أً"},
+   {a="(a)(')(aN)(%p*%s)", b="%1أً%4"},
+   {a="(a)(')([i]N?%p*)$", b="%1إ%3"},
+   {a="(a)(')([i]N?)(%p*%s)", b="%1إ%3%4"},
+   {a="(a)(')(%p*)$", b="%1أ%3"},
+   {a="(a)(')(%p*%s)", b="%1أ%3"},
 -- i
-   {a="(i)(')([uai]N?%p?)$", b="%1ئ%3"},
-   {a="(i)(')([uai]N?)(%p?%s)", b="%1ئ%3%4"},
-   {a="(i)(')(%p?)$", b="%1ئ%3"},
-   {a="(i)(')(%p?%s)", b="%1ئ%3"},
+   {a="(i)(')([uai]N?%p*)$", b="%1ئ%3"},
+   {a="(i)(')([uai]N?)(%p*%s)", b="%1ئ%3%4"},
+   {a="(i)(')(%p*)$", b="%1ئ%3"},
+   {a="(i)(')(%p*%s)", b="%1ئ%3"},
 --
    -- middle
    {a="([Uw])(')", b="%1ء"}, --new
@@ -567,12 +574,12 @@
    -- art. with waṣla + lunar consonant (i.e. what remains)
    {a="'l%-", b="ال"},
    -- the silent wāw
-   {a="uU(%p?)$", b="uو%1"},
-   {a="uU(%p?%s)", b="uو%1"},
-   {a="aU(%p?)$", b="aو%1"},
-   {a="aU(%p?%s)", b="aو%1"},
-   {a="iU(%p?)$", b="iو%1"},
-   {a="iU(%p?%s)", b="iو%1"},
+   {a="uU(%p*)$", b="uو%1"},
+   {a="uU(%p*%s)", b="uو%1"},
+   {a="aU(%p*)$", b="aو%1"},
+   {a="aU(%p*%s)", b="aو%1"},
+   {a="iU(%p*)$", b="iو%1"},
+   {a="iU(%p*%s)", b="iو%1"},
    -- words ending in -āT with silent wāw/yāʾ
    {a="(_a)UA", b="%1وا"},
    {a="(_a)U", b="%1و"},
@@ -658,12 +665,12 @@
    -- art. with waṣla + lunar consonant (i.e. what remains)
    {a="'l%-", b="ال"},
    -- the silent wāw
-   {a="uU(%p?)$", b="uو%1"},
-   {a="uU(%p?%s)", b="uو%1"},
-   {a="aU(%p?)$", b="aو%1"},
-   {a="aU(%p?%s)", b="aو%1"},
-   {a="iU(%p?)$", b="iو%1"},
-   {a="iU(%p?%s)", b="iو%1"},
+   {a="uU(%p*)$", b="uو%1"},
+   {a="uU(%p*%s)", b="uو%1"},
+   {a="aU(%p*)$", b="aو%1"},
+   {a="aU(%p*%s)", b="aو%1"},
+   {a="iU(%p*)$", b="iو%1"},
+   {a="iU(%p*%s)", b="iو%1"},
    -- words ending in -āT with silent wāw/yāʾ
    {a="(_a)UA", b="%1وا"},
    {a="(_a)U", b="%1و"},
@@ -672,16 +679,16 @@
 
 digraphs = {
    -- ʾiʿrāb: straight double quote must be discarded
-   {a="(%-)(\"?[UI]na)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[UI]na)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?At[ui])(%p?)$", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?Ani)(%p?)$", b="%2%3"},   
-   {a="(%-)(\"?ayni)(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?ayni)(%p?)$", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?%s)", b="%2%3"},
-   {a="(%-)(\"?[uai])(%p?)$", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[UI]na)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?At[ui])(%p*)$", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?Ani)(%p*)$", b="%2%3"},   
+   {a="(%-)(\"?ayni)(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?ayni)(%p*)$", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*%s)", b="%2%3"},
+   {a="(%-)(\"?[uai])(%p*)$", b="%2%3"},
    -- ʾiʿrāb (end)
    -- initial straight double quote gives a connective ʾalif
    {a="^\"[uai]", b="ٱ"},



More information about the tex-live-commits mailing list