texlive[42791] Master/texmf-dist: arabluatex (25dec16)

commits+karl at tug.org commits+karl at tug.org
Sun Dec 25 23:22:57 CET 2016


Revision: 42791
          http://tug.org/svn/texlive?view=revision&revision=42791
Author:   karl
Date:     2016-12-25 23:22:57 +0100 (Sun, 25 Dec 2016)
Log Message:
-----------
arabluatex (25dec16)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/lualatex/arabluatex/arabluatex.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.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/lualatex/arabluatex/arabluatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/lualatex/arabluatex/arabluatex.dtx	2016-12-25 22:22:20 UTC (rev 42790)
+++ trunk/Master/texmf-dist/source/lualatex/arabluatex/arabluatex.dtx	2016-12-25 22:22:57 UTC (rev 42791)
@@ -27,7 +27,7 @@
 %<package-info>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package-info>\ProvidesPackage{arabluatex}
 %<*package-info>
-    [2016/12/17 v1.6 An ArabTeX-like interface for LuaLaTeX]
+    [2016/12/24 v1.7 An ArabTeX-like interface for LuaLaTeX]
 %</package-info>
 %
 %<*driver>
@@ -145,7 +145,7 @@
 \defaultfontfeatures{RawFeature={+liga}}
 \setmainfont{Old Standard}[SmallCapsFont={Latin Modern Roman Caps},
   RawFeature={+mark;+ccmp;+ss05;+ss06}]
-\usepackage{arabluatex}[2016/12/17]
+\usepackage{arabluatex}[2016/12/24]
 \usepackage[nopar]{quran}
 \usepackage{varioref}
 \usepackage{hypdoc}
@@ -203,7 +203,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{694}
+% \CheckSum{697}
 %
 % \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
@@ -257,7 +257,7 @@
 % \pagebreak
 % \listoftables
 % \normalsize
-%
+% 
 % \begin{abstract}
 %   This package provides for \LuaLaTeX\ an Arab{\TeX}-like interface
 %   to generate Arabic writing from an \textsc{ascii}
@@ -1219,7 +1219,7 @@
 % in which \package{arabluatex} expresses the \arb[trans]{sukUn} and
 % the \arb[trans]{wa.slaT}. \package{arabluatex} will take care of
 % doing that automatically provided that the vowel which is to be
-% absorbed by the final vowel of the preceding word is properly
+% absorbed by the final vowel of the preceding word be properly
 % encoded, like so:---
 % \begin{compactenum}[(a)]
 % \item Definite article at the beginning of a sentence is encoded\\
@@ -1320,6 +1320,7 @@
 % \end{quote}
 %
 % \subparagraph{\arb[trans]{'alif-u 'l-wa.sl-i} preceded by a diphthong}
+% \label{sec:diphthong-alif}
 % The diphthong is resolved into two simple vowels \parencite[i. 21
 % D--22 A]{Wright} viz. \emph{ay}~→ \emph{\u{a}\u{i}} and \emph{aw}~→
 % \emph{\u{a}\u{u}}. \package{arabluatex} detects the cases in which
@@ -1459,8 +1460,8 @@
 %
 % \subsection{Quoting}
 % \label{sec:quoting}
-% It is here referred to \enquote{quoting} after the package
-% \package{arabtex}.\footnote{See \textcite[22]{pkg:arabtex}} The
+% It is here referred to \enquote{quoting} after the \package{arabtex}
+% package.\footnote{See \textcite[22]{pkg:arabtex}} The
 % \enquote{quoting} mechanism of \package{arabluatex} is designed to
 % be very similar in effect to the one of \package{arabtex}.
 %
@@ -1656,6 +1657,75 @@
 % \meta{n} prevents the necessary \arb[trans]{ta^sdId} rule
 % (\cpageref{ref:necessary-tashdid}) from being applied.
 %
+% \subsection{Putting back on broken contextual analysis rules}
+% \label{sec:arbnull}
+% \NEWfeature{v1.7} In complex documents such as critical editions
+% where footnotes and other kind of annotations can be particularly
+% abundant, the contextual analysis rules that are described above may
+% be broken by \LaTeX\ commands. To take an example, consider the
+% following:---%
+% \iffalse
+%<*example>
+% \fi
+\begin{arabluacode}
+  This is wrong:
+  \begin{arab}[fullvoc]
+    fa-lammA ra'aW\LRfootnote{A footnote that interferes with the
+      contextual analysis.} 'l-na^gma...
+  \end{arab}
+\end{arabluacode}
+% \iffalse
+%</example>
+% \fi%
+% According to the rule stated \vpageref{sec:diphthong-alif}, the
+% diphthong in \arb[trans]{ra'aW} must be resolved into two simple
+% vowels before the \arb[trans]{'alif-u 'l-wa.sl-i}, as
+% \arb[fullvoc]{ra'aW 'l-na^gma}.
+%
+% \DescribeMacro{\arbnull} The \cs{arbnull} command is provided so as
+% to put back on contextual analysis rules in such situations. It
+% takes as argument the word that must be brought back for any given
+% rule to be applied as it ought to. Depending on the contexts that
+% have to be restored, \cs{arbnull} may be found just after or before
+% Arabic words.%
+% \iffalse
+%<*example>
+% \fi
+\begin{arabluacode}[text only]
+In any case, \emph{no space must be left} after or before the Arabic
+word that \cs{arbnull} is applied to.
+\end{arabluacode}
+% \iffalse
+%</example>
+% \fi%
+% The following shows how the Arabic should have been written in the
+% preceding example and gives further illustrations of the same
+% technique:---%
+% \iffalse
+%<*example>
+% \fi
+\begin{arabluacode}
+  \begin{arab}[fullvoc]
+    fa-lammA ra'aW\arbnull{'l-na^gma}\LRfootnote{A footnote that
+      interferes with the contextual analysis.} 'l-na^gma...
+
+    qAla\LRfootnote{A footnote that interferes with the contextual
+      analysis.} \arbnull{qAla}uhrub fa-lan tuqtala.
+
+    \cap{z}ayduN\arbnull{ibnu}\LRfootnote{A footnote that interferes
+      with the contextual analysis.} \arbnull{zayduN}ibn-u
+    \cap{`a}mriNU.\LRfootnote{See \vref{fn:zayd-is-son}.}
+  \end{arab}
+  \begin{arab}[trans]
+    \cap{z}ayduN\arbnull{ibnu}\LRfootnote{A footnote that interferes
+      with the contextual analysis.} \arbnull{zayduN}ibn-u
+    \cap{`a}mriNU.\LRfootnote{See \vref{fn:zayd-is-son}.}
+  \end{arab}
+\end{arabluacode}
+% \iffalse
+%</example>
+% \fi%
+%
 % \subsection{\texorpdfstring{Stretching characters: the
 % \arb[trans]{ta.twIl}}{Stretching characters: the taṭwīl}}
 % \label{sec:tatwil}
@@ -1868,7 +1938,7 @@
 % is designed to deal with the various situations that may arise:---
 % \begin{compactenum}[(a)]
 % \item If the two hemistichs be connected with one another by a
-% prominent horizontal flexible stroke, the \arb[trans]{tatwIl} should
+% prominent horizontal flexible stroke, the \arb[trans]{ta.twIl} should
 % be used, like so: |[--]| (see \vref{sec:tatwil}). Of course, the
 % ending word of the \arb[trans]{.sadr} and the word at the
 % commencement of the \arb[trans]{`a^guz} must have the
@@ -1880,7 +1950,7 @@
 \begin{arabluacode}
 \begin{arabverse}[mode=fullvoc, width=.3\linewidth]
   \bayt{lA 'ar_A man `ahidtu fI-hA fa-'abkI 'l---}[--]{---yawma
-    dalhaN wa-mA yu.hIru 'l-bukA'u}\\
+    dalhaN wa-mA yaruddu 'l-bukA'u}\\
 \end{arabverse}
 \end{arabluacode}
 % \iffalse
@@ -1902,7 +1972,7 @@
 \begin{arabluacode}
 \begin{arabverse}[mode=trans, width=.4\linewidth]
   \bayt{lA 'ar_A man `ahidtu fI-hA fa-'abkI 'l---}[--]{---yawma
-    dalhaN wa-mA yu.hIru 'l-bukA'u}\\
+    dalhaN wa-mA yaruddu 'l-bukA'u}\\
 \end{arabverse}
 \end{arabluacode}
 % \iffalse
@@ -1942,11 +2012,12 @@
 % \paragraph{Scaling and distortion of characters}
 % The |arabverse| environment and the \cs{bayt} command are designed
 % to typeset the verses in a two-column, fixed width layout. This may
-% result in somewhat distorted text. Should that happen, one may adapt
-% the layout by modifying the values of the above described |width|
-% and |gutter| named arguments until the visual aspect of the layout
-% be satisfactory. It has to be noted that distortion and warping may
-% be even more perceptible in Roman than in Arabic characters.
+% result in a somewhat distorted text. Should that happen, one may
+% adapt the layout by modifying the values of the above described
+% |width| and |gutter| named arguments until the visual aspect of the
+% layout be satisfactory. It has to be noted that distortion and
+% warping may be even more perceptible in Roman than in Arabic
+% characters.
 %
 % \paragraph{Footnotes}
 % Footnotes are not set by default inside the \cs{bayt} command, but
@@ -1954,8 +2025,8 @@
 %
 % If they are little in number, each footnote may be split into pairs
 % of \cs{footnote\allowbreak{}mark}|{}| (please mind the braces) in
-% either argument of the \cs{bayt} command and \cs{footnotetext}
-% outside the \cs{bayt} command.
+% the argument of the \cs{bayt} command and \cs{footnotetext} outside
+% the \cs{bayt} command.
 %
 % If the footnotes are abundant in number, it is advised to load the
 % \package{footnote} package which \package{arabluatex} will then use
@@ -1976,8 +2047,10 @@
 % 'l-\cap{q}aysi}'s \arb[trans]{\cap{m}u`allaqaT}. In this example,
 % \cs{SetArbDflt*} has been selected so as to mark the
 % \arb[trans]{'id.gAm} that is fit to this declamatory
-% poetry:---\footnote{See \vref{sec:classic-modern-typesetting} for
-% more information.}%
+% poetry:---\footnote{Please note that for the time being only the
+% assimilation rules that are laid on \vref{ref:assimilation} are
+% applied. See \vref{sec:classic-modern-typesetting} for more
+% information.}%
 % \iffalse
 %<*example>
 % \fi
@@ -1990,17 +2063,17 @@
   'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}]
   \SetArbDflt*
   \begin{linenumbers*}
-    \bayt{qifA nabki min _dikr_A .habibiN wa-manzili}{bi-saq.ti
-      'l-liw_A bayna \cap{'l-d}a_hUli wa-\cap{.h}awmali}\\
-    \bayt{fa-\cap{t}Udi.ha fa-'l-\cap{m}iqrATi lam ya`fu
+    \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-saq.ti
+      'l-liw_A bayna \cap{'l-d}a_hUli fa-\cap{.h}awmali}\\
+    \bayt{fa-\cap{t}U.di.ha fa-'l-\cap{m}iqrATi lam ya`fu
       rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\
     \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA
       ka-'anna-hu .habbu fulfuli}\\
-    \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{laday
+    \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A
       samurAti 'l-.hayyi nAqifu .han.zali}\\
     \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA
       tahlik 'asaN_A wa-ta^gammali}\\
-    \bayt{wa-'inna ^sifA'I `abraTuN muhrAqaTuN}{fa-hal `inda rasmiN
+    \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN
       dAsiriN min mu`awwali}\\
   \end{linenumbers*}
 \end{arabverse}
@@ -2016,18 +2089,18 @@
 %  'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.25\linewidth]
 %  \SetArbDflt*
 %   \begin{linenumbers*}
-%     \bayt{qifA nabki min _dikr_A .habibiN wa-manzili}{bi-saq.ti
-%     'l-liw_A bayna \cap{'l-d}a_hUli wa-\cap{.h}awmali}\\
-%     \bayt{fa-\cap{t}Udi.ha fa-'l-\cap{m}iqrATi lam ya`fu
+%     \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-saq.ti
+%     'l-liw_A bayna \cap{'l-d}a_hUli fa-\cap{.h}awmali}\\
+%     \bayt{fa-\cap{t}U.di.ha fa-'l-\cap{m}iqrATi lam ya`fu
 %     rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\
 %     \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA
 %     ka-'anna-hu .habbu fulfuli}\\
-%     \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{laday
+%     \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A
 %     samurAti
 %     'l-.hayyi nAqifu .han.zali}\\
 %     \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA
 %     tahlik 'asaN_A wa-ta^gammali}\\
-%     \bayt{wa-'inna ^sifA'I `abraTuN muhrAqaTuN}{fa-hal `inda rasmiN
+%     \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN
 %     dAsiriN min mu`awwali}\\
 %   \end{linenumbers*}
 % \end{arabverse}
@@ -2040,18 +2113,18 @@
 %  'l-`arU.di 'l-'_Ul_A mina 'l-.tawIli)}, width=.4\linewidth]
 %  \SetArbDflt*
 %   \begin{linenumbers*}
-%     \bayt{qifA nabki min _dikr_A .habibiN wa-manzili}{bi-saq.ti
-%     'l-liw_A bayna \cap{'l-d}a_hUli wa-\cap{.h}awmali}\\
-%     \bayt{fa-\cap{t}Udi.ha fa-'l-\cap{m}iqrATi lam ya`fu
+%     \bayt{qifA nabki min _dikr_A .habIbiN wa-manzili}{bi-saq.ti
+%     'l-liw_A bayna \cap{'l-d}a_hUli fa-\cap{.h}awmali}\\
+%     \bayt{fa-\cap{t}U.di.ha fa-'l-\cap{m}iqrATi lam ya`fu
 %     rasmu-hA}{limA nasa^gat-hA min ^ganUbiN wa-^sam'ali}\\
 %     \bayt{tar_A ba`ara 'l-'ar'Ami fI `ara.sAti-hA}{wa-qI`Ani-hA
 %     ka-'anna-hu .habbu fulfuli}\\
-%     \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{laday
+%     \bayt{ka-'annI .gadATa 'l-bayni yawma ta.hammalUA}{lad_A
 %     samurAti
 %     'l-.hayyi nAqifu .han.zali}\\
 %     \bayt{wuqUfaN bi-hA .sa.hbI `alayya ma.tiyya-hum}{yaqUlUna lA
 %     tahlik 'asaN_A wa-ta^gammali}\\
-%     \bayt{wa-'inna ^sifA'I `abraTuN muhrAqaTuN}{fa-hal `inda rasmiN
+%     \bayt{wa-'inna ^sifA'I `abraTuN muharAqaTuN}{fa-hal `inda rasmiN
 %     dAsiriN min mu`awwali}\\
 %   \end{linenumbers*}
 % \end{arabverse}
@@ -2513,7 +2586,7 @@
 % 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
-% input: none of the options |voc|, |fullvoc|, |novoc| or |trans| will
+% input: none of the |voc|, |fullvoc|, |novoc| or |trans| options will
 % have any effect on plain unicode Arabic for the time being.
 %
 % That said, there are two ways of inserting unicode
@@ -2636,11 +2709,10 @@
 % \DescribeMacro{\FixArbFtnmk} Another solution is to put in the
 % preamble, below the line that loads \package{arabluatex}, the
 % \cs{FixArbFtnmk} command. However, for more control over the layout
-% of footnotes marks, it is advisable to use the package
-% \package{scrextend}.\footnote{See
-% \url{http://ctan.org/pkg/koma-script}; read the documentation of
-% \package{KOMA-script} for details about the \cs{deffootnotemark} and
-% \cs{deffootnote} commands.}
+% of footnotes marks, it is advisable to use the \package{scrextend}
+% package.\footnote{See \url{http://ctan.org/pkg/koma-script}; read
+% the documentation of \package{KOMA-script} for details about the
+% \cs{deffootnotemark} and \cs{deffootnote} commands.}
 %
 % \DescribeMacro{\LRmarginpar} The \cs{LRmarginpar} command does for
 % marginal notes the same as \cs{LRfootnote} does for footnotes. Of
@@ -2778,8 +2850,8 @@
 % viz. |acadian|, |canadien|, |francais|, |frenchb| or |french| all
 % redefine the list environments, which breaks the standard definition
 % file that is used by \package{arabluatex}. Therefore,
-% \package{babel-french} must be loaded with the option
-% |StandardLayout=true|, like so:---
+% \package{babel-french} must be loaded with the |StandardLayout=true|
+% option, like so:---%
 % \iffalse
 %<*example>
 % \fi
@@ -2872,7 +2944,7 @@
 % \vref{sec:unicode-input} for more details). Please note that
 % \package{arabluatex} takes care of formatting the Arabic: therefore,
 % it is recommended to load the \package{quran} package with the
-% option |nopar|, after \package{arabluatex} itself has been loaded,
+% |nopar| option, after \package{arabluatex} itself has been loaded,
 % like so:--- %
 % \iffalse
 %<*example>
@@ -2937,7 +3009,7 @@
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{arabluatex}%
-[2016/12/17 v1.6 An ArabTeX-like interface for LuaLaTeX]
+[2016/12/24 v1.7 An ArabTeX-like interface for LuaLaTeX]
 \RequirePackage{ifluatex}
 %    \end{macrocode}
 % \package{arabluatex} requires \LuaLaTeX\ of course. Issue a warning
@@ -3322,7 +3394,6 @@
   \ifdefined\spewnotes\spewnotes\else\fi%
 }
 %    \end{macrocode}
-%   
 % \end{macro} 
 % \end{environment}
 % \begin{macro}{\abjad} \cs{abjad}\marg{number} expresses its argument
@@ -3343,6 +3414,16 @@
 \fi}
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\arbnull}
+%   \changes{v1.7}{2016/12/24}{New \cs{arbnull} command for putting
+%   back on any contextual analysis rule broken by other commands.}
+%   The \cs{arbnull} command does nothing by itself. It is processed
+%   only if it is found in Arabic context so as to put back on
+%   contextual analysis in case it has been broken by other commands.
+%    \begin{macrocode}
+\NewDocumentCommand{\arbnull}{m}{\relax}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\abraces}
 %   \cs{abraces}\marg{Arabic text} puts its argument between
 %   braces. This macro is written in Lua and is dependent on the

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua	2016-12-25 22:22:20 UTC (rev 42790)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.lua	2016-12-25 22:22:57 UTC (rev 42791)
@@ -128,6 +128,26 @@
    return str
 end
 
+local function processdiscretionary(str)
+   str = string.gsub(str, "\\%-", "\\-{}")
+   return str
+end
+
+local function processarbnull(str, scheme)
+   if scheme == "buckwalter" then
+      str = string.gsub(str, "(\\arbnull.?)(%b{})", function(tag, body)
+			   body = string.sub(body, 2, -2)
+			   return string.format("P%sP", body)
+      end)
+   else
+      str = string.gsub(str, "(\\arbnull.?)(%b{})", function(tag, body)
+			   body = string.sub(body, 2, -2)
+			   return string.format("o%so", body)
+      end)
+   end
+   return str
+end
+
 local function takeoutabjad(str)
    str = string.gsub(str, "(\\abjad.?)(%b{})", function(tag, body)
 			body = string.sub(body, 2, -2)
@@ -487,6 +507,7 @@
 
 function processvoc(str, rules, scheme)
    str = "\\arb{".. str.."}"
+   str = processarbnull(str, scheme)
    str = takeoutcapetc(str)
    str = protectarb(str)
    str = breakcmd(str)
@@ -505,6 +526,7 @@
 
 function processfullvoc(str, rules, scheme)
    str = "\\arb{".. str.."}"
+   str = processarbnull(str, scheme)
    str = takeoutcapetc(str)
    str = protectarb(str)
    str = breakcmd(str)
@@ -525,6 +547,7 @@
 
 function processnovoc(str, rules, scheme)
    str = "\\arb{".. str.."}"
+   str = processarbnull(str, scheme)
    str = takeoutcapetc(str)
    str = protectarb(str)
    str = breakcmd(str)
@@ -543,6 +566,8 @@
 
 function processtrans(str, mode, rules, scheme)
    str = "\\arb{".. str.."}"
+   str = processdiscretionary(str)
+   str = processarbnull(str, scheme)
    str = takeoutabjad(str)
    str = protectarb(str)
    str = breakcmd(str)

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty	2016-12-25 22:22:20 UTC (rev 42790)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex.sty	2016-12-25 22:22:57 UTC (rev 42791)
@@ -41,7 +41,7 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{arabluatex}%
-[2016/12/17 v1.6 An ArabTeX-like interface for LuaLaTeX]
+[2016/12/24 v1.7 An ArabTeX-like interface for LuaLaTeX]
 \RequirePackage{ifluatex}
 \ifluatex\else
  \PackageError{arabluatex}{lualatex needed}{%
@@ -230,6 +230,7 @@
   \NewDocumentCommand{\abjad}{m}%
   {\luadirect{tex.sprint(abjadify(#1))}}
 \fi}
+\NewDocumentCommand{\arbnull}{m}{\relax}
 \NewDocumentCommand{\abraces}{+m}{%
   \luadirect{tex.sprint(abraces(\luastringN{#1}))}}
 \DeclareDocumentCommand{\LRmarginpar}{m}{\marginpar{\textdir TLT #1}}

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_fullvoc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_fullvoc.lua	2016-12-25 22:22:20 UTC (rev 42790)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_fullvoc.lua	2016-12-25 22:22:57 UTC (rev 42791)
@@ -66,7 +66,11 @@
    {a="(A)(')(u)", b="aآؤ%3"}, -- historic madda
    {a="(A)(')", b="aآء"}, -- historic madda
    -- initial (needs both ^ and %W patterns)
-   -- 'aw: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- 'aw: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^('aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^('aw)(o)([%(%[%|%<]?\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)([%(%[%|%<]?\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
    {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
@@ -172,7 +176,11 @@
    {a="(A)(')", b="aاء"}, -- historic madda
    --easy (end)
    -- initial (needs both ^ and %W patterns)
-   -- 'aw: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- 'aw: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^('aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^('aw)(o)([%(%[%|%<]?\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)([%(%[%|%<]?\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
    {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
@@ -233,6 +241,11 @@
 }
 
 tanwinfv = { -- with assimilations (\SetArbDflt*)
+   -- assimilations (begin)
+   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([rlmnwy])", b="%4%4"},
+   {a="(%-?[uai]NU)(%s)([rlmnwy])", b="%1%2%3%3"},
+   -- assimilations (end)
+   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([uai])", b="ٱ"},
    {a="%-?(uNU)(%s)([uai])", b="%1%2ٱ"},
    {a="%-?(aNU)(%s)([uai])", b="%1%2ٱ"},
    {a="%-?(iNU)(%s)([uai])", b="%1%2ٱ"},
@@ -243,6 +256,8 @@
    {a="%-?(aN[%_]?[AY])(%s)([uai])", b="%1%2ٱ"},
    -- assimilations (begin)
    {a="%-?(uN)(%s)([rlmnwy])", b="ٌ%2%3%3"},
+   {a="(o[%S]-)(%-?aN)(_A)(o)([rlmnwy])", b="%5%5"},
+   {a="(o[%S]-)(%-?aN)(Y)(o)([rlmnwy])", b="%5%5"},
    {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"},
@@ -250,6 +265,8 @@
    {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
    {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
    -- assimilations (end)
+   {a="(o[%S]-)(%-?aN)(_A)(o)([uai])", b="ٱ"},
+   {a="(o[%S]-)(%-?aN)(Y)(o)([uai])", b="ٱ"},
    -- quoted tanwīn (begin)
    {a="%-?(\"uN)", b=""},
    {a="(B)%-?(\"aN)", b="%1"},
@@ -271,6 +288,11 @@
 }
 
 tanwinfveasy = { -- no assimilations (see below)
+   -- assimilations (begin)
+--easy   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([rlmnwy])", b="%4%4"},
+--easy   {a="(%-?[uai]NU)(%s)([rlmnwy])", b="%1%2%3%3"},
+   -- assimilations (end)
+   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([uai])", b="ٱ"},
    {a="%-?(uNU)(%s)([uai])", b="%1%2ٱ"},
    {a="%-?(aNU)(%s)([uai])", b="%1%2ٱ"},
    {a="%-?(iNU)(%s)([uai])", b="%1%2ٱ"},
@@ -281,6 +303,8 @@
    {a="%-?(aN[%_]?[AY])(%s)([uai])", b="%1%2ٱ"},
    -- assimilations (begin)
 --easy   {a="%-?(uN)(%s)([rlmnwy])", b="ٌ%2%3%3"},
+--easy   {a="(o[%S]-)(%-?aN)(_A)(o)([rlmnwy])", b="%5%5"},
+--easy   {a="(o[%S]-)(%-?aN)(Y)(o)([rlmnwy])", b="%5%5"},
 --easy   {a="%-?(aN)(_A)(%s)([rlmnwy])", b="ًى%3%4%4"},
 --easy   {a="%-?(aN)(Y)(%s)([rlmnwy])", b="ًى%3%4%4"},
 --easy   {a="(T)%-?(aN)(%s)([rlmnwy])", b="%1ً%3%4%4"},
@@ -288,6 +312,8 @@
 --easy   {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
 --easy   {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
    -- assimilations (end)
+   {a="(o[%S]-)(%-?aN)(_A)(o)([uai])", b="ٱ"},
+   {a="(o[%S]-)(%-?aN)(Y)(o)([uai])", b="ٱ"},
    -- quoted tanwīn (begin)
    {a="%-?(\"uN)", b=""},
    {a="(B)%-?(\"aN)", b="%1"},
@@ -312,7 +338,11 @@
    -- 'llatI / 'llad_I
    {a="^'ll(a)([%_]?[dt])", b="ٱلّ%1%2"},
    {a="([%(%[%|%<%s%-])'ll(a)([%_]?[dt])", b="%1ٱلّ%2%3"}, --p
-   -- law: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- law: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^(law)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
    {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
@@ -319,22 +349,25 @@
    {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"},
    -- al- + lām
    {a="^(a)l%-(l)", b="ا%1ل%2%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-(l)", b="%1ا%2ل%3%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(l)", b="%1ا%2ل%3%3"}, --p
    -- al- + solar consonant
    {a="^(a)l%-([%_%^%.]?[tdrzsn])", b="ا%1ل%2%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3%3"}, --p
    -- assim. art. + solar consonant
    {a="^(a)([%_%^%.]?[tdrzsn])%-", b="ا%1ل%2"},
-   {a="([%(%[%|%<%s%-])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل%3"}, --p
    -- al- + initial unstable hamza
    {a="^(a)l%-(\"?[uai])", b="ا%1ل%2ٱ"},
-   {a="([%(%[%|%<%s%-])(a)l%-(\"?[uai])", b="%1ا%2ل%3ٱ"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(\"?[uai])", b="%1ا%2ل%3ٱ"}, --p
    -- li-/la + art. + initial unstable hamza is a special orthography
    {a="l([ai])%-l%-(\"?[uai])", b="ل%1ل%2ٱ"},
    -- al- + lunar consonant (i.e. what remains)
    {a="^(a)l%-", b="ا%1لْ"},
-   {a="([%(%[%|%<%s%-])(a)l%-", b="%1ا%2لْ"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-", b="%1ا%2لْ"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
+   {a="(aW)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="awuا"},
+   {a="(aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1u"},
+   {a="(ay)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
    {a="(aW)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="awuا%2%3"},
    {a="(aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1u%2%3"},
    {a="(ay)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
@@ -374,7 +407,11 @@
    -- 'llatI / 'llad_I
    {a="^'ll(a)([%_]?[dt])", b="ٱلّ%1%2"},
    {a="([%(%[%|%<%s%-])'ll(a)([%_]?[dt])", b="%1ٱلّ%2%3"}, --p
-   -- law: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- law: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^(law)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
    {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
@@ -381,22 +418,25 @@
    {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"},
    -- al- + lām
    {a="^(a)l%-(l)", b="ا%1ل%2%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-(l)", b="%1ا%2ل%3%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(l)", b="%1ا%2ل%3%3"}, --p
    -- al- + solar consonant
    {a="^(a)l%-([%_%^%.]?[tdrzsn])", b="ا%1ل%2%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3%3"}, --p
    -- assim. art. + solar consonant
    {a="^(a)([%_%^%.]?[tdrzsn])%-", b="ا%1ل%2"},
-   {a="([%(%[%|%<%s%-])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل%3"}, --p
    -- al- + initial unstable hamza
    {a="^(a)l%-(\"?[uai])", b="ا%1ل%2ٱ"},
-   {a="([%(%[%|%<%s%-])(a)l%-(\"?[uai])", b="%1ا%2ل%3ٱ"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(\"?[uai])", b="%1ا%2ل%3ٱ"}, --p
    -- li-/la + art. + initial unstable hamza is a special orthography
    {a="l([ai])%-l%-(\"?[uai])", b="ل%1ل%2ٱ"},
    -- al- + lunar consonant (i.e. what remains)
    {a="^(a)l%-", b="ا%1لْ"},
-   {a="([%(%[%|%<%s%-])(a)l%-", b="%1ا%2لْ"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-", b="%1ا%2لْ"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
+   {a="(aW)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="awuا"},
+   {a="(aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1u"},
+   {a="(ay)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
    {a="(aW)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="awuا%2%3"},
    {a="(aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1u%2%3"},
    {a="(ay)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
@@ -446,14 +486,20 @@
    {a="^\"[uai]", b="ٱ"},
    {a="([%(%[%|%<%s%-])\"[uai]", b="%1ٱ"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
-   {a="(aW)(%s)(\"?[uai])", b="awuا%2ٱ"},
-   {a="(aw)(%s)(\"?[uai])", b="%1u%2ٱ"},
-   {a="(ay)(%s)(\"?[uai])", b="%1i%2ٱ"},
-   {a="([uai]%-)(\"?[uai])", b="%1ٱ"}, -- hyphen + initial alif without hamza
-   -- initial alif without hamza
+   {a="(aW)(o)(\"?[uai])([%S]-o)", b="awuا"},
+   {a="(aW)(%s)([%(%[%|%<]?)(\"?[uai])", b="awuا%2%3ٱ"}, --p
+   {a="(aw)(o)(\"?[uai])([%S]-o)", b="%1u"},
+   {a="(aw)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1u%2%3ٱ"}, --p
+   {a="(ay)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(ay)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1i%2%3ٱ"}, --p
+   -- hyphen + initial alif without hamza
+   --   {a="([uai]%-)(\"?[uai])", b="%1ٱ"},
+   {a="([uai]%-)(\"?[uai])([%^%_%.%`]?)(%a)", b="%1ٱ%3%4"},
+   -- initial alif without hamza (next 4 lines)
+   {a="(o[%S]-)([uaiUAIY])(o)(\"?[uai])", b="ٱ"},
    {a="([%_]?[uaiUAIY])(%s[%(%[%|%<]?)(\"?[uai])", b="%1%2ٱ"}, --p
-   {a="^([%(%[%|%<]?)([uai])", b="%1ا%2"}, -- initial alif without hamza --p
-   {a="(%s)([%(%[%|%<]?)([uai])", b="%1%2ا%3"}, -- initial alif without hamza --p
+   {a="^([%(%[%|%<]?)(\"?[uai])", b="%1ا%2"}, --p
+   {a="(%s)([%(%[%|%<]?)(\"?[uai])", b="%1%2ا%3"}, --p
    {a="%-%-", b="ـ"},
    {a="ؤؤ", b="ؤّ"},
    {a="أأ", b="أّ"},
@@ -548,14 +594,20 @@
    {a="^\"[uai]", b="ٱ"},
    {a="([%(%[%|%<%s%-])\"[uai]", b="%1ٱ"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
-   {a="(aW)(%s)(\"?[uai])", b="awuا%2ٱ"},
-   {a="(aw)(%s)(\"?[uai])", b="%1u%2ٱ"},
-   {a="(ay)(%s)(\"?[uai])", b="%1i%2ٱ"},
-   {a="([uai]%-)(\"?[uai])", b="%1ٱ"}, -- hyphen + initial alif without hamza
-   -- initial alif without hamza
+   {a="(aW)(o)(\"?[uai])([%S]-o)", b="awuا"},
+   {a="(aW)(%s)([%(%[%|%<]?)(\"?[uai])", b="awuا%2%3ٱ"}, --p
+   {a="(aw)(o)(\"?[uai])([%S]-o)", b="%1u"},
+   {a="(aw)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1u%2%3ٱ"}, --p
+   {a="(ay)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(ay)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1i%2%3ٱ"}, --p
+   -- hyphen + initial alif without hamza
+   --   {a="([uai]%-)(\"?[uai])", b="%1ٱ"},
+   {a="([uai]%-)(\"?[uai])([%^%_%.%`]?)(%a)", b="%1ٱ%3%4"},
+   -- initial alif without hamza (next 4 lines)
+   {a="(o[%S]-)([uaiUAIY])(o)(\"?[uai])", b="ٱ"},
    {a="([%_]?[uaiUAIY])(%s[%(%[%|%<]?)(\"?[uai])", b="%1%2ٱ"}, --p
-   {a="^([%(%[%|%<]?)([uai])", b="%1ا%2"}, -- initial alif without hamza --p
-   {a="(%s)([%(%[%|%<]?)([uai])", b="%1%2ا%3"}, -- initial alif without hamza --p
+   {a="^([%(%[%|%<]?)(\"?[uai])", b="%1ا%2"}, --p
+   {a="(%s)([%(%[%|%<]?)(\"?[uai])", b="%1%2ا%3"}, --p
    {a="%-%-", b="ـ"},
    {a="ؤؤ", b="ؤّ"},
    {a="أأ", b="أّ"},
@@ -650,14 +702,20 @@
    {a="^\"[uai]", b="ٱ"},
    {a="([%(%[%|%<%s%-])\"[uai]", b="%1ٱ"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
-   {a="(aW)(%s)(\"?[uai])", b="awuا%2ٱ"},
-   {a="(aw)(%s)(\"?[uai])", b="%1u%2ٱ"},
-   {a="(ay)(%s)(\"?[uai])", b="%1i%2ٱ"},
-   {a="([uai]%-)(\"?[uai])", b="%1ٱ"}, -- hyphen + initial alif without hamza
-   -- initial alif without hamza
+   {a="(aW)(o)(\"?[uai])([%S]-o)", b="awuا"},
+   {a="(aW)(%s)([%(%[%|%<]?)(\"?[uai])", b="awuا%2%3ٱ"}, --p
+   {a="(aw)(o)(\"?[uai])([%S]-o)", b="%1u"},
+   {a="(aw)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1u%2%3ٱ"}, --p
+   {a="(ay)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(ay)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1i%2%3ٱ"}, --p
+   -- hyphen + initial alif without hamza
+   -- {a="([uai]%-)(\"?[uai])", b="%1ٱ"},
+   {a="([uai]%-)(\"?[uai])([%^%_%.%`]?)(%a)", b="%1ٱ%3%4"},
+   -- initial alif without hamza (next 4 lines)
+   {a="(o[%S]-)([uaiUAIY])(o)(\"?[uai])", b="ٱ"},
    {a="([%_]?[uaiUAIY])(%s[%(%[%|%<]?)(\"?[uai])", b="%1%2ٱ"}, --p
-   {a="^([%(%[%|%<]?)([uai])", b="%1ا%2"}, -- initial alif without hamza --p
-   {a="(%s)([%(%[%|%<]?)([uai])", b="%1%2ا%3"}, -- initial alif without hamza --p
+   {a="^([%(%[%|%<]?)(\"?[uai])", b="%1ا%2"}, --p
+   {a="(%s)([%(%[%|%<]?)(\"?[uai])", b="%1%2ا%3"}, --p
    {a="%-%-", b="ـ"},
    {a="ؤؤ", b="ؤّ"},
    {a="أأ", b="أّ"},

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_novoc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_novoc.lua	2016-12-25 22:22:20 UTC (rev 42790)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_novoc.lua	2016-12-25 22:22:57 UTC (rev 42791)
@@ -23,11 +23,17 @@
 --]]
 
 tanwinnv = {
+   -- assimilations (begin). These are good but may not apply here.
+--   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([rlmnwy])", b="%4%4"},
+--   {a="(%-?[uai]NU)(%s)([rlmnwy])", b="%1%2%3%3"},
+   -- assimilations (end)
    {a="%-?uNU", b="و"},
    {a="%-?aNU", b="وا"},
    {a="%-?iNU", b="و"},
    -- assimilations (begin). These are good but may not apply here.
 --   {a="%-?(uN)(%s)([rlmnwy])", b="|%2%3%3"},
+--   {a="(o[%S]-)(%-?aN)(_A)(o)([rlmnwy])", b="%5%5"},
+--   {a="(o[%S]-)(%-?aN)(Y)(o)([rlmnwy])", b="%5%5"},
 --   {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"},

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua	2016-12-25 22:22:20 UTC (rev 42790)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_trans.lua	2016-12-25 22:22:57 UTC (rev 42791)
@@ -30,7 +30,8 @@
 }
 
 nulltr = {
-   {a="%|", b=""}
+   {a="%|", b=""},
+   {a="o[%S]-o", b=""}
 }
 
 -- cap
@@ -95,11 +96,15 @@
    {a="(A)(')(i)", b="%1ʾ%3"}, -- historic madda
    {a="(A)(')", b="%1ʾ"}, -- historic madda
    -- initial (needs both ^ and %W patterns)
-   -- 'aw: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- 'aw: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^('aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^('aw)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
-   {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
-   {a="(%W)('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"},
+   {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"}, --p
+   {a="(%W)('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"}, --p
    -- then the 'initial' rules for the remaining cases
    {a="^(')([ua])", b="ʾ%2"},
    {a="^(')(i)", b="ʾ%2"},
@@ -133,12 +138,20 @@
 }
 
 tanwintrdmg = {
+   {a="%-?([uai]NU)(o)([ui])([%S]-o)", b="\\arbup{un%3}"},
    {a="%-?([uai]NU)(%s)([ui])", b="\\arbup{un%3}%2'"},
+   {a="(o[%S]-)([uai]N[UI])(o)(\"?[ui])", b="'"},
    {a="%-?uNU", b="\\arbup{un}"},
    {a="%-?aNU", b="\\arbup{an}"},
    {a="%-?iNU", b="\\arbup{in}"},
    {a="%-?iNI", b="i\\arbup{n}"},
    -- tanwīn preceding ʾalif conjunctionis
+   {a="%-?(uN)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="\\arbup{uni}"},
+   {a="%-?(aN)(_A)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="ạ\\arbup{ni}"},
+   {a="%-?(aN)(Y)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="ạ\\arbup{ni}"},
+   {a="(T)%-?(aN)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="t\\arbup{ani}"},
+   {a="([^TA])%-?(aN)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1\\arbup{ani}"},
+   {a="%-?(iN)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="\\arbup{ini}"},
    {a="%-?(uN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="\\arbup{uni}%2%3"},
    {a="%-?(aN)(_A)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="ạ\\arbup{ni}%3%4"},
    {a="%-?(aN)(Y)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="ạ\\arbup{ni}%3%4"},
@@ -146,6 +159,12 @@
    {a="([^TA])%-?(aN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1\\arbup{ani}%3%4"},
    {a="%-?(iN)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="\\arbup{ini}%2%3"},
    -- tanwīn preceding 'lla_dI/'llatI
+   {a="%-?(uN)(o)('lla[%_]?[dt])([%S]-o)", b="\\arbup{uni}"},
+   {a="%-?(aN)(_A)(o)('lla[%_]?[dt])([%S]-o)", b="ạ\\arbup{ni}"},
+   {a="%-?(aN)(Y)(o)('lla[%_]?[dt])([%S]-o)", b="ạ\\arbup{ni}"},
+   {a="(T)%-?(aN)(o)('lla[%_]?[dt])([%S]-o)", b="t\\arbup{ani}"},
+   {a="([^TA])%-?(aN)(o)('lla[%_]?[dt])([%S]-o)", b="%1\\arbup{ani}"},
+   {a="%-?(iN)(o)('lla[%_]?[dt])([%S]-o)", b="\\arbup{ini}"},
    {a="%-?(uN)(%s)('lla[%_]?[dt])", b="\\arbup{uni}%2%3"},
    {a="%-?(aN)(_A)(%s)('lla[%_]?[dt])", b="ạ\\arbup{ni}%3%4"},
    {a="%-?(aN)(Y)(%s)('lla[%_]?[dt])", b="ạ\\arbup{ni}%3%4"},
@@ -153,12 +172,19 @@
    {a="([^TA])%-?(aN)(%s)('lla[%_]?[dt])", b="%1\\arbup{ani}%3%4"},
    {a="%-?(iN)(%s)('lla[%_]?[dt])", b="\\arbup{ini}%2%3"},
    -- tanwīn + alif without hamza and kasra (ibn) or dhamma (uhrub)
+   {a="%-?(uN)(o)([ui])([%S]-o)", b="\\arbup{un%3}"},
+   {a="%-?(aN)(_A)(o)([ui])([%S]-o)", b="ạ\\arbup{n%4}"},
+   {a="%-?(aN)(Y)(o)([ui])([%S]-o)", b="ạ\\arbup{n%4}"},
+   {a="(T)%-?(aN)(o)([ui])([%S]-o)", b="t\\arbup{an%4}"},
+   {a="([^TA])%-?(aN)(o)([ui])([%S]-o)", b="%1\\arbup{an%4}"},
+   {a="%-?(iN)(o)([ui])([%S]-o)", b="\\arbup{in%3}"},
+   {a="(o[%S]-)([uai]N)(o)(\"?[ui])", b="'"},
    {a="%-?(uN)(%s)([ui])", b="\\arbup{un%3}%2'"},
-   {a="%-?(aN)(_A)(%s)([ui])", b="ạ\\arbup{n%4}%3%'"},
-   {a="%-?(aN)(Y)(%s)([ui])", b="ạ\\arbup{n%4}%3%'"},
-   {a="(T)%-?(aN)(%s)([ui])", b="t\\arbup{an%4}%3%'"},
-   {a="([^TA])%-?(aN)(%s)([ui])", b="%1\\arbup{an%4}%3%'"},
-   {a="%-?(iN)(%s)([ui])", b="\\arbup{in%3}%2%'"},
+   {a="%-?(aN)(_A)(%s)([ui])", b="ạ\\arbup{n%4}%3'"},
+   {a="%-?(aN)(Y)(%s)([ui])", b="ạ\\arbup{n%4}%3'"},
+   {a="(T)%-?(aN)(%s)([ui])", b="t\\arbup{an%4}%3'"},
+   {a="([^TA])%-?(aN)(%s)([ui])", b="%1\\arbup{an%4}%3'"},
+   {a="%-?(iN)(%s)([ui])", b="\\arbup{in%3}%2'"},
    --
 -- {a="uN", b="\\arbup{un}"}, (now included in the last line of this table)
    {a="%-?(\"?At)%-?([ui])N", b="\\arbup{%1%2n}"},
@@ -173,29 +199,35 @@
    -- 'llatI / 'llad_I
    {a="^'ll(a)([%_]?[dt])", b="'ll%1%2"},
    {a="([%(%[%|%<%s])'ll(a)([%_]?[dt])", b="%1'll%2%3"}, --p
-   -- law: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- law: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^(law)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
-   {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
-   {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"},
+   {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"}, --p
+   {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"}, --p
    -- al- + lām
    {a="^(a)l%-(l)", b="%1l-%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-(l)", b="%1%2l-%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(l)", b="%1%2l-%3"}, --p
    -- al- + solar consonant
    {a="^(a)l%-([%_%^%.]?[tdrzsn])", b="%1%2-%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-([%_%^%.]?[tdrzsn])", b="%1%2%3-%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-([%_%^%.]?[tdrzsn])", b="%1%2%3-%3"}, --p
    -- assim. art. + solar consonant
    {a="^(a)([%_%^%.]?[tdrzsn])%-", b="%1%2-"},
-   {a="([%(%[%|%<%s%-])(a)([%_%^%.]?[tdrzsn])%-", b="%1%2%3-"}, --p
+   {a="([%(%[%|%<%s%-o])(a)([%_%^%.]?[tdrzsn])%-", b="%1%2%3-"}, --p
    -- al- + initial unstable hamza
    {a="^(a)l%-(\"?[uai])", b="%1l-%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-(\"?[uai])", b="%1%2l-%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(\"?[uai])", b="%1%2l-%3"}, --p
    -- li-/la- + art. + initial unstable hamza is a special orthography
    {a="l([ai])%-l%-([uai])", b="l%1-l-%2"},
    -- al- + lunar consonant (i.e. what remains)
    {a="^(a)l%-", b="%1l-"},
-   {a="([%(%[%|%<%s%-])(a)l%-", b="%1%2l-"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-", b="%1%2l-"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
+   {a="(aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1u"},
+   {a="(ay)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
    {a="(aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1u%2%3"},
    {a="(ay)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    -- art. with waṣla + lām
@@ -229,8 +261,9 @@
 
 idghamtrdmg = {
    -- assimilations
-   {a="(n)(}?)(%s)([rlmnwy])", b="%4%2%3%4"}
-} 
+   {a="(n)(}?)(%s)([rlmnwy])", b="%4%2%3%4"},
+   {a="(n)(}?)(o)([rlmnwy])([%S]-o)", b="%4%2"}
+}
 
 digraphstrdmg = {
    {a="([uai]%-)(\"?[uai])", b="%1'"}, -- hyphen + initial alif without hamza
@@ -243,6 +276,19 @@
    {a="(%W)(\"?[uai])", b="%1%2"},      -- initial alif without hamza
    -- this is not necessary, take out for now:
 -- {a="([%_]?[uaiUAIY])(%s)([uai])", b="%1%2'"}, -- initial alif without hamza
+   {a="(aw)(o)(\"?[uai])([%S]-o)", b="%1u"},
+   {a="(aw)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1u%2%3'"}, --p
+   {a="(ay)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(ay)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1i%2%3'"}, --p
+   {a="(aW)(o)(\"?[uai])([%S]-o)", b="awu"},
+   {a="(UA)(o)(\"?[uai])([%S]-o)", b="u"},
+   {a="(%_A)(o)(\"?[uai])([%S]-o)", b="ạ"},
+   {a="(Y)(o)(\"?[uai])([%S]-o)", b="ạ"},
+   {a="(%_a)(o)(\"?[uai])([%S]-o)", b="a"},
+   {a="(A)(o)(\"?[uai])([%S]-o)", b="a"},
+   {a="([%_]?[Uu])(o)(\"?[uai])([%S]-o)", b="u"},
+   {a="([%_]?[Ii])(o)(\"?[uai])([%S]-o)", b="i"},
+   {a="(o[%S]-)([UAIYWuaiyw])(o)(\"?[uai])", b="'"},
    {a="(aW)(%s)([%(%[%|%<]?)(\"?[uai])", b="awu%2%3%4"}, --p
    {a="(UA)(%s)([%(%[%|%<]?)(\"?[uai])", b="u%2%3'"}, --p
    {a="([^%_][uai])(%s)([%(%[%|%<]?)(\"?[uai])", b="%1%2%3'"}, --p
@@ -266,6 +312,13 @@
    -- ʾiʿrāb hyphen (end)
    -- shorten long vowels preceding ʾalif conjunctionis
    {a="(U)(A)", b="U"},
+   {a="(aW)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="awu"},
+   {a="(%_a)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="a"},
+   {a="(%_A)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="ạ"},
+   {a="(A)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="a"},
+   {a="(Y)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="ạ"},
+   {a="([%_]?[Uu])(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="u"},
+   {a="([%_]?[Ii])(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="i"},
    --p (next 7 lines, just after %s)
    {a="(aW)(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="awu%2%3"},
    {a="(%_a)(%s)([%(%[%|%<]?['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="a%2%3"},

Modified: trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua	2016-12-25 22:22:20 UTC (rev 42790)
+++ trunk/Master/texmf-dist/tex/lualatex/arabluatex/arabluatex_voc.lua	2016-12-25 22:22:57 UTC (rev 42791)
@@ -161,6 +161,7 @@
    {a="F", b="aN"},
    {a="K", b="iN"},
    {a="o", b="\""},
+   {a="P", b="o"}, -- pass on to \arbnull
    -- hard-coded connective alif
    {a="%[", b="ٱ"},
    {a="L", b="ٱ"} -- BW safe
@@ -201,11 +202,15 @@
    {a="(A)(')(u)", b="aآؤ%3"}, -- historic madda
    {a="(A)(')", b="aآء"}, -- historic madda
    -- initial (needs both ^ and %W patterns)
-   -- 'aw: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- 'aw: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^('aw)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^('aw)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
-   {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
-   {a="(%W)('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"},
+   {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"}, --p
+   {a="(%W)('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"}, --p
    -- then the 'initial' rules for the remaining cases
    {a="^(')([ua])", b="أ%2"},
    {a="^(')(i)", b="إ%2"},
@@ -298,7 +303,11 @@
    {a="(A)(')", b="aاء"}, -- historic madda
    --easy (end)
    -- initial (needs both ^ and %W patterns)
-   -- 'aw: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- 'aw: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^('aw)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)('[%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^('aw)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)('aw)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)('aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
    {a="^('aw)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
@@ -359,11 +368,18 @@
 }
 
 tanwin = {
+   -- assimilations (begin)
+   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([rlmnwy])", b="%4%4"},
+   {a="(%-?[uai]NU)(%s)([rlmnwy])", b="%1%2%3%3"},
+   -- assimilations (end)
+   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([uai])", b="%4"},
    {a="%-?uNU", b="ٌو"},
    {a="%-?aNU", b="ًوا"},
    {a="%-?iNU", b="ٍو"},
    -- assimilations (begin)
    {a="%-?(uN)(%s)([rlmnwy])", b="ٌ%2%3%3"},
+   {a="(o[%S]-)(%-?aN)(_A)(o)([rlmnwy])", b="%5%5"},
+   {a="(o[%S]-)(%-?aN)(Y)(o)([rlmnwy])", b="%5%5"},
    {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"},
@@ -371,6 +387,8 @@
    {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
    {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
    -- assimilations (end)
+   {a="(o[%S]-)(%-?aN)(_A)(o)([uai])", b="%5"},
+   {a="(o[%S]-)(%-?aN)(Y)(o)([uai])", b="%5"},
    -- quoted tanwīn (begin)
    {a="%-?(\"uN)", b=""},
    {a="(B)%-?(\"aN)", b="%1"},
@@ -392,11 +410,18 @@
 }
 
 tanwineasy = { -- 'easy' requires some lines to be taken out:
+   -- assimilations (begin)
+--   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([rlmnwy])", b="%4%4"},
+--   {a="(%-?[uai]NU)(%s)([rlmnwy])", b="%1%2%3%3"},
+   -- assimilations (end)
+   {a="(o[%S]-)(%-?[uai]N[UI]?)(o)([uai])", b="%4"},
    {a="%-?uNU", b="ٌو"},
    {a="%-?aNU", b="ًوا"},
    {a="%-?iNU", b="ٍو"},
    -- assimilations (begin)
 --   {a="%-?(uN)(%s)([rlmnwy])", b="ٌ%2%3%3"},
+--   {a="(o[%S]-)(%-?aN)(_A)(o)([rlmnwy])", b="%5%5"},
+--   {a="(o[%S]-)(%-?aN)(Y)(o)([rlmnwy])", b="%5%5"},
 --   {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"},
@@ -404,6 +429,8 @@
 --   {a="([^TA])%-?(aN)(%s)([rlmnwy])", b="%1ًا%3%4%4"},
 --   {a="%-?(iNI?)(%s)([rlmnwy])", b="ٍ%2%3%3"},
    -- assimilations (end)
+   {a="(o[%S]-)(%-?aN)(_A)(o)([uai])", b="%5"},
+   {a="(o[%S]-)(%-?aN)(Y)(o)([uai])", b="%5"},
    -- quoted tanwīn (begin)
    {a="%-?(\"uN)", b=""},
    {a="(B)%-?(\"aN)", b="%1"},
@@ -428,32 +455,39 @@
    -- 'llatI / 'llad_I
    {a="^'ll(a)([%_]?[dt])", b="الّ%1%2"},
    {a="([%(%[%|%<%s%-])'ll(a)([%_]?[dt])", b="%1الّ%2%3"}, --p
-   -- law: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- law: the diphthong is to be resolved into 'awi' (next 8 lines)
+   {a="^(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^(law)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
-   {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
-   {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"},
+   {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"}, --p
+   {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"}, --p
    -- al- + lām
    {a="^(a)l%-(l)", b="ا%1ل%2%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-(l)", b="%1ا%2ل%3%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(l)", b="%1ا%2ل%3%3"}, --p
    -- al- + solar consonant
    {a="^(a)l%-([%_%^%.]?[tdrzsn])", b="ا%1ل%2%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3%3"}, --p
    -- assim. art. + solar consonant
    {a="^(a)([%_%^%.]?[tdrzsn])%-", b="ا%1ل%2"},
-   {a="([%(%[%|%<%s%-])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل%3"}, --p
    -- al- + initial unstable hamza
    {a="^(a)l%-(\")([uai])", b="ا%1ل%3ٱ"},
-   {a="([%(%[%|%<%s%-])(a)l%-(\")([uai])", b="%1ا%2ل%4ٱ"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(\")([uai])", b="%1ا%2ل%4ٱ"}, --p
    {a="^(a)l%-([uai])", b="ا%1ل%2ا"},
-   {a="([%(%[%|%<%s%-])(a)l%-([uai])", b="%1ا%2ل%3ا"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-([uai])", b="%1ا%2ل%3ا"}, --p
    -- li-/la- + art. + initial unstable hamza is a special orthography
    {a="l([ai])%-l%-(\")([uai])", b="ل%1ل%3ٱ"},
    {a="l([ai])%-l%-([uai])", b="ل%1ل%2ا"},
    -- al- + lunar consonant (i.e. what remains)
    {a="^(a)l%-", b="ا%1ل"},
-   {a="([%(%[%|%<%s%-])(a)l%-", b="%1ا%2ل"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-", b="%1ا%2ل"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
+   {a="(aW)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="awuا"},
+   {a="(aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1u"},
+   {a="(ay)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
    {a="(aW)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="awuا%2%3"},
    {a="(aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1u%2%3"},
    {a="(ay)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
@@ -489,7 +523,8 @@
 
 idgham = {
    -- assimilations
-   {a="(n)(%s)([rlmnwy])", b="%1%2%3%3"}
+   {a="(n)(%s)([rlmnwy])", b="%1%2%3%3"},
+   {a="(n)(o)([rlmnwy])([%S]-o)", b="%3"}
 }
 
 trigraphseasy = { -- differences marked below with 'easy'
@@ -498,32 +533,39 @@
    -- 'llatI / 'llad_I
    {a="^'ll(a)([%_]?[dt])", b="الّ%1%2"},
    {a="([%(%[%|%<%s%-])'ll(a)([%_]?[dt])", b="%1الّ%2%3"}, --p
-   -- law: the diphthong is to be resoved into 'awi' (next 4 lines)
+   -- law: the diphthong is to be resloved into 'awi' (next 8 lines)
+   {a="^(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1%2i"},
+   {a="^(law)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(%W)(law)(o)(\"?[uai])([%S]-o)", b="%1%2i"},
    {a="^(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
    {a="(%W)(law)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1%2i%3%4"},
-   {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"},
-   {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"},
+   {a="^(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1i%2%3"}, --p
+   {a="(%W)(law)(%s)([%(%[%|%<]?\"?[uai])", b="%1%2i%3%4"}, --p
    -- al- + lām (easy)
    {a="^(a)l%-(l)", b="ا%1ل%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-(l)", b="%1ا%2ل%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(l)", b="%1ا%2ل%3"}, --p
    -- al- + solar consonant (easy)
    {a="^(a)l%-([%_%^%.]?[tdrzsn])", b="ا%1ل%2"},
-   {a="([%(%[%|%<%s%-])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-([%_%^%.]?[tdrzsn])", b="%1ا%2ل%3"}, --p
    -- assim. art. + solar consonant (easy)
    {a="^(a)([%_%^%.]?[tdrzsn])%-", b="ا%1ل"},
-   {a="([%(%[%|%<%s%-])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل"}, --p
+   {a="([%(%[%|%<%s%-o])(a)([%_%^%.]?[tdrzsn])%-", b="%1ا%2ل"}, --p
    -- al- + initial unstable hamza
    {a="^(a)l%-(\")([uai])", b="ا%1ل%3ٱ"},
-   {a="([%(%[%|%<%s%-])(a)l%-(\")([uai])", b="%1ا%2ل%4ٱ"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-(\")([uai])", b="%1ا%2ل%4ٱ"}, --p
    {a="^(a)l%-([uai])", b="ا%1ل%2ا"},
-   {a="([%(%[%|%<%s%-])(a)l%-([uai])", b="%1ا%2ل%3ا"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-([uai])", b="%1ا%2ل%3ا"}, --p
    -- li-/la- + art. + initial unstable hamza is a special orthography
    {a="l([ai])%-l%-(\")([uai])", b="ل%1ل%3ٱ"},
    {a="l([ai])%-l%-([uai])", b="ل%1ل%2ا"},
    -- al- + lunar consonant (i.e. what remains)
    {a="^(a)l%-", b="ا%1ل"},
-   {a="([%(%[%|%<%s%-])(a)l%-", b="%1ا%2ل"}, --p
+   {a="([%(%[%|%<%s%-o])(a)l%-", b="%1ا%2ل"}, --p
    -- diphthongs to be resolved before ʾalif conjunctionis
+   {a="(aW)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="awuا"},
+   {a="(aw)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1u"},
+   {a="(ay)(o)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)([%S]-o)", b="%1i"},
    {a="(aW)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="awuا%2%3"},
    {a="(aw)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1u%2%3"},
    {a="(ay)(%s)(['][%_%^%.]?[l'btjghxdrzs`fqkmnwy]%-)", b="%1i%2%3"},
@@ -573,11 +615,20 @@
    -- initial straight double quote gives a connective ʾalif
    {a="^\"[uai]", b="ٱ"},
    {a="([%(%[%|%<%s%-])\"[uai]", b="%1ٱ"}, --p
-   {a="(aW)(%s)([uai])", b="awuا%2%3"},
+   -- diphthongs to be resolved before ʾalif conjunctionis
+   {a="(aW)(o)(\"?[uai])([%S]-o)", b="awuا"},
+   {a="(aW)(%s)([%(%[%|%<]?)([uai])", b="awuا%2%3%4"}, --p
+   {a="(aw)(o)(\"?[uai])([%S]-o)", b="%1u"},
+   {a="(aw)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1u%2%3ا"}, --p
+   {a="(ay)(o)(\"?[uai])([%S]-o)", b="%1i"},
+   {a="(ay)(%s)([%(%[%|%<]?)(\"?[uai])", b="%1i%2%3ا"}, --p
    -- hyphen + initial alif without hamza:
-   {a="(%-)([uai])([%^%_%.%`]?)(%a)", b="%1ا%3%4"},
-   {a="^([%(%[%|%<]?)([uai])", b="%1ا%2"}, -- initial alif without hamza --p
-   {a="(%s)([%(%[%|%<]?)([uai])", b="%1%2ا"}, -- initial alif without hamza --p
+   {a="([uai]%-)(\"?[uai])([%^%_%.%`]?)(%a)", b="%1ا%3%4"},
+   -- initial alif without hamza
+   {a="^([%(%[%|%<]?)(\"?[uai])", b="%1ا%2"}, --p
+   -- initial alif without hamza
+   {a="(o[%S]-)([uaiUAIY])(o)(\"?[uai])", b="ا"},
+   {a="(%s)([%(%[%|%<]?)(\"?[uai])", b="%1%2ا"}, --p
    {a="%-%-", b="ـ"},
    {a="ؤؤ", b="ؤّ"},
    {a="أأ", b="أّ"},
@@ -715,5 +766,6 @@
 
 null = {
    {a="%|", b=""},
-   {a="([^0-9])(%-)", b="%1"}
+   {a="([^0-9])(%-)", b="%1"},
+   {a="o[%S]-o", b=""}
 }



More information about the tex-live-commits mailing list