From 85b7bc695629926641c7cb752fd478adfdf374f3 Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Sun, 4 Jul 2010 15:32:09 +0300
Subject: stable 2010-05-24 13:10

---
 tex/context/base/m-arabtex.tex | 450 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 450 insertions(+)
 create mode 100644 tex/context/base/m-arabtex.tex

(limited to 'tex/context/base/m-arabtex.tex')

diff --git a/tex/context/base/m-arabtex.tex b/tex/context/base/m-arabtex.tex
new file mode 100644
index 000000000..61e56e93a
--- /dev/null
+++ b/tex/context/base/m-arabtex.tex
@@ -0,0 +1,450 @@
+%D \module
+%D   [       file=m-arabtex,  % was font-arb,
+%D        version=2003.02.22, % 1999.11.06,
+%D          title=\CONTEXT\ Modules,
+%D       subtitle=Arabic,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% I still need to hook in some features into the setup
+% macro. I also have to (re)define farsi etc. in ways
+% similar to arab, so that we have dedicated environments.
+%
+% keywords needed: vocalize transscribe
+%
+% \startarabic[option=vocalize] % or vocalize=yes
+% ......
+% \stoparabic
+
+\writestatus{loading}{ConTeXt Font Macros / ArabTeX support}
+
+%D At the \NTG\ 10\high{th} anniversary meeting Klaus Lagally
+%D introduced the audience to arabic typesetting, and after
+%D that I knew that some day I really had to look into his
+%D generic package. And then, sort of simultaniously Maarten
+%D Wisse and Imran Ahsan Nyazee asked me if \CONTEXT\ could
+%D support \ARABTEX, a package that provides right to left
+%D typesetting of (several variants of) arab and hebrew.
+%D Having implemented support for chinese a few weeks before,
+%D I could not resist to build in support for arab and hebrew
+%D too. Writing support for languages that don't give me any
+%D cue on how to pronounce their script, is kind of special.
+
+%D This is a beta version, since I still have to take care of some
+%D macros that conflict with existing stuff.
+
+\unprotect
+
+\definesystemvariable{ARABTEX}
+
+\def\setupARABTEX
+  {\getparameters[\??ARABTEX]}
+
+\setupARABTEX
+  [\s!rscale=1.2,
+   \c!before=,
+   \c!after=,
+   \c!inner=\setarab,
+   \c!style=\setarabicfont\fontstylesuffix]
+
+%D A few (maybe too) simple hooks into the font mechanism. The
+%D hook into the language module is not yet done.
+
+% \unexpanded\def\setarabicfont#1% rscale
+%   {\scratchdimen\@@ARABTEXrscale\bodyfontsize
+%    \font\arbfont\truefontname{Arabic#1} at \currentfontscale\scratchdimen
+%    \setx@skels
+%    \newfonttrue
+%    \arbfont}
+%
+% more modern
+%
+% \unexpanded\def\setarabicfont#1% rscale
+%   {\definefont[arbfont][Arabic#1 sa \@@ARABTEXrscale]%
+%    \setx@skels
+%    \newfonttrue
+%    \arbfont}
+%
+% more efficient
+
+\unexpanded\def\setarabicfont#1%
+  {\setx@skels
+   \newfonttrue
+   \definedfont[Arabic#1 sa \ARABTEXparameter\s!rscale]}
+
+%D Just to be compatible with Arab\TEX\ we define:
+
+\unexpanded\def\nash   {\setarabicfont\s!Regular}
+\unexpanded\def\nashbf {\setarabicfont\s!Bold   }
+\unexpanded\def\pnash  {\setarabicfont\s!Regular}
+\unexpanded\def\pnashbf{\setarabicfont\s!Bold   }
+\unexpanded\def\xnash  {\setarabicfont\s!Regular}
+\unexpanded\def\xnashbf{\setarabicfont\s!Bold   }
+
+%D The display arabic environment (will be an installable
+%D object) uses a few conditionals. Let's do it the
+%D \CONTEXT\ way and define an anvironment that we later can
+%D adapt.
+
+\newif\if@ignore
+\newif\if@endpe
+
+\def\setupARABTEXalternative[#1]%
+  {\dodoubleempty\getparameters[\??ARABTEX#1]}
+
+\def\defineARABTEXalternative
+  {\dodoubleempty\dodefineARABTEXalternative}
+
+\def\dodefineARABTEXalternative[#1][#2]%
+  {\iffirstargument % \startarab is defined but used already
+     \getparameters
+       [\??ARABTEX#1]
+       [\c!before=\@@ARABTEXbefore,
+        \c!after=\@@ARABTEXafter,
+        \c!inner=\@@ARABTEXinner,
+        \c!style=\@@ARABTEXstyle,
+        \s!rscale=\@@ARABTEXrscale,
+        #2]%
+     \setvalue   {\e!start#1}{\displayARABTEXalternative{#1}}%
+     \unexpanded\setvalue{#1}{\inlineARABTEXalternative {#1}}%
+     \unexpanded\def\RL{\getvalue{#1}}%
+     \unexpanded\def\LR{\a@LR}%
+     \let\R=\RL
+     \let\L=\LR
+     \expandafter\all@wcmd\csname\e!stop#1\endcsname
+   \else
+     \defineARABTEXalternative[arabic]%
+   \fi}
+
+\def\initializeARABTEXinternals
+  {\ARABTEXparameter\c!inner
+   \the\everyARABTEXpreset}
+
+\newtoks \everyARABTEXpreset
+
+\let\currentARABTEXalternative\empty
+
+\def\ARABTEXparameter#1%
+  {\csname\??ARABTEX\currentARABTEXalternative#1\endcsname}
+
+\def\inlineARABTEXalternative#1#2%
+  {\bgroup
+   \edef\currentARABTEXalternative{#1}%
+   \initializeARABTEXinternals
+   \a@RL{#2}%
+   \egroup}
+
+\def\displayARABTEXalternative#1%
+  {\dodoubleempty\dostartARABTEXalternative[#1]}
+
+\def\dostartARABTEXalternative[#1][#2]%
+  {\begingroup
+   \edef\currentARABTEXalternative{#1}%
+   \getparameters[\??ARABTEX\currentARABTEXalternative][#2]%
+   \ifnum1<0\ARABTEXparameter\c!n\relax
+     \startcolumns
+   \else
+     \ARABTEXparameter\c!before
+   \fi
+   \initializeARABTEXinternals
+   \initializeARABTEXend
+   \arabtext
+   \initializeARABTEXalternative}
+
+\def\initializeARABTEXalternative
+  {\ARABTEXparameter\c!style}
+
+\def\initializeARABTEXend% \CONTEXT\ does use \end quite differently
+  {\long\def\end##1%
+     {\endarabtext
+      \ifnum1<0\ARABTEXparameter\c!n\relax
+        \stopcolumns
+      \else
+        \ARABTEXparameter\c!after
+      \fi
+      \endgroup}%
+   \let\a@l@end\end
+   \letvalue{\e!stop\currentARABTEXalternative}=\end
+   \long\def\end##1%
+     {\endarabtext
+      \endgroup
+      \if@ignore\global\@ignorefalse\expandafter\ignorespaces\fi}}
+
+%D Arabic verbatim.
+
+\def\typearab{\a@@verb}
+
+%D Some \LATEX\ macros.
+
+\def \makeatletter{\unprotect}
+\def \makeatother {\protect}
+\def \typeout     {\writestatus{arabtex}}
+
+%D We have to save some macros.
+
+\let\ARABTEXversion=\empty
+
+\def\startloadingARABTEX% ugly hacks
+  {\catcode`!=12
+   \catcode`?=12
+   \pushmacro\output        \let \output        \scratchtoks
+   \pushmacro\LaTeX         \let \LaTeX         \undefined
+   \pushmacro\CJK           \let \CJK           \undefined
+%    \pushmacro\peek@token    \let \peek@token    \undefined
+%    \pushmacro\edmacloaded   \let \edmacloaded   \undefined
+   \pushmacro\year          \let \year          \normalyear
+   \pushmacro\month         \let \month         \normalmonth
+   \pushmacro\day           \let \day           \normalday
+   \pushmacro\input         \def \input    ##1 {\normalinput ##1 }
+   \pushmacro\linewidth
+   \pushmacro\datum         \def\datum         {\toks0}
+   \pushmacro\version       \def\version       {\toks2}
+   \pushmacro\theversion    \let\theversion     \ARABTEXversion
+   \pushmacro\emphasize
+   \pushmacro\cap}
+
+\def\stoploadingARABTEX
+  {\catcode`!=11
+   \catcode`?=11
+   \popmacro\cap
+   \popmacro\emphasize
+   \popmacro\theversion
+   \popmacro\version
+   \popmacro\datum
+   \popmacro\linewidth
+   \popmacro\input
+   \popmacro\day
+   \popmacro\month
+   \popmacro\year
+%    \popmacro\edmacloaded
+%    \popmacro\peek@token
+   \popmacro\CJK
+   \popmacro\LaTeX
+   \popmacro\output}
+
+%D We save some macros:
+
+\startloadingARABTEX
+
+%D When loading \ARABTEX\ we have to set back the~! and~?.
+
+\input arabtex.sty
+
+%D Since \ARABTEX\ has its own \type {\cap}, we save the
+%D new meaning. We also redefine some \PLAIN\ macros, which
+%D happen to have a different meaning in \LATEX.
+
+\let\ARABTEXversion\theversion
+\let\ARABTEXcap    \cap
+
+\appendtoks
+  \let\cap\ARABTEXcap
+\to \everyARABTEXpreset
+
+\def\ARABTEXsh@ft#1%
+  {\dimen@.00#1ex
+   \multiply\dimen@\slantperpoint
+   \kern-.0156\dimen@}
+
+\appendtoks
+  \let\sh@ft\ARABTEXsh@ft
+\to \everyARABTEXpreset
+
+\def\ARABTEXd#1%
+  {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}%
+    .\hidewidth}}}
+
+\def\ARABTEXb#1%
+  {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%
+    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}
+
+\appendtoks
+  \let\b\ARABTEXb
+  \let\d\ARABTEXd
+\to \everyARABTEXpreset
+
+\def \ARABTEXbreakA {\hfill\break}
+\def \ARABTEXbreakB {\break}
+\edef\ARABTEXbar    {\string|}
+\def \ARABTEXcomma  {\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
+
+\appendtoks
+  \let\\=\ARABTEXbreakA
+  \let\|=\ARABTEXbreakB
+  \let |=\ARABTEXbar
+  \let\,=\ARABTEXcomma
+\to \everyARABTEXpreset
+
+\let\ARABTEXprotect\relax
+
+\appendtoks
+  \let\protect\ARABTEXprotect
+\to \everyARABTEXpreset
+
+%D Now we can pop the saved macros.
+
+\stoploadingARABTEX
+
+%D Ah, we have to get rid of some \type {\protect} stuff but
+%D to permit testing we add it in the \CONTEXT\ way.
+
+% \bgroup
+% \catcode`\<=\@other
+% \unexpanded\gdef\a@ins
+%   {\ifmmode
+%      \expandafter<%
+%    \else
+%      \dontleavehmode \bgroup
+%      \arab@codes \set@arabfont \@waslafalse \@wasfalse
+%      \expandafter\arab@insert
+%    \fi}
+% \unexpanded\gdef\<{\a@ins}
+% \catcode`\<=\active
+% \global\let<=\a@ins
+% \egroup
+%
+% cleaner:
+
+\defineactivecharacter < {\a@ins}  \unexpanded\gdef\<{\a@ins}%
+
+\def\normal@a@ins
+  {\dontleavehmode % context prefers this instead of \leavevmode
+   \bgroup
+   \arab@codes
+   \set@arabfont
+   \@waslafalse
+   \@wasfalse
+   \arab@insert}
+
+\unexpanded\gdef\a@ins
+  {\mathortext<\normal@a@ins}
+
+%D We also need to register a few macros:
+
+\all@wcmd\initializeARABTEXalternative % no argument, internal command
+\all@wcmd\tx                           % no argument, small font
+\all@wcmd\txx                          % no argument, smaller font
+
+%D We also hook it into the presetter.
+
+\appendtoks
+  \let\normaltx \tx \def\tx {\normaltx \setarabicfont\fontstylesuffix}%
+  \let\normaltxx\txx\def\txx{\normaltxx\setarabicfont\fontstylesuffix}%
+\to \everyARABTEXpreset
+
+%D The main definitions are:
+
+\definefontsynonym [ArabicRegular] [xnsh14]
+\definefontsynonym [ArabicBold]    [xnsh14bf]
+
+\defineARABTEXalternative
+  [arabic]
+  [\c!inner=\setarab,
+   \c!style=\setarabicfont\fontstylesuffix]
+
+\defineARABTEXalternative
+  [farsi]
+  [\c!inner=\setfarsi,
+   \c!style=\setarabicfont\fontstylesuffix]
+
+\defineARABTEXalternative
+  [urdu]
+  [\c!inner=\seturdu,
+   \c!style=\setarabicfont\fontstylesuffix]
+
+\defineARABTEXalternative
+  [maghribi]
+  [\c!inner=\setmaghribi,
+   \c!style=\setarabicfont\fontstylesuffix]
+
+%D Apart from such definitions, one can adapt the settings
+%D using \type {\setupARABTEXalternative}.
+%D
+%D A few years ago at the Holland Festivities, I attended {\em
+%D The Cave}, one of the most impressive combinations of music
+%D and video I know. This composition of Steve Reich (music)
+%D and .. (video) concentrates on the common grounds of arabs
+%D and jews: their ancestor Abram. Listening to the \CDROM's
+%D of {\em The Cave}, provided me the right ambiance for
+%D filling in the details of this module. In {\em The Cave},
+%D interviews, music, and |<|believe it or not|>| rhythmic
+%D typography are the cornerstones. Remembering those big
+%D screens, it strikes me that like music, \TEX\ too is a
+%D perfect instrument to cross cultural and linguistic
+%D borders. So, let's load Hebrew support as well:
+
+\unexpanded\def\sethebrewfont#1%
+  {\setx@skels
+   \newfonttrue
+   \definedfont[Hebrew#1 sa \ARABTEXparameter\s!rscale]}
+
+% \let \setheb \sethebrew
+
+\unexpanded\def\pheb  {\sethebrewfont\s!Regular}
+\unexpanded\def\phebbf{\sethebrewfont\s!Bold}
+
+% \startloadingARABTEX
+
+%   \ReadFile{hebtex.sty}
+%   \ReadFile{apatch.sty}
+%   \ReadFile{hepatch.sty}
+
+% \stoploadingARABTEX
+
+\definefontsynonym [HebrewRegular] [hclassic]
+\definefontsynonym [HebrewBold]    [hcaption]
+
+\defineARABTEXalternative
+  [hebrew]
+  [\c!inner=\sethebrew,
+   \c!style=\sethebrewfont\fontstylesuffix]
+
+%D Now we're done:
+
+\protect \endinput
+
+% everyoutput : \charsubdefmax \arab@charsubdefmax
+
+% \defineconversion [abjad] [\abj@d]
+%
+% voetnoten verbatim lijsten indexen tabellen uitlijnen
+%
+% \v!hoofdstuk=al-fa.slu
+%    \v!inhoud=al-mu.htawayAtu
+%   \v!figuren=qA'imaTu al-.suwaru
+%  \v!tabellen=qA'imaTu al-^gadAwilu
+% \v!grafieken=qA'imaTu al-rusUmu
+%     \v!index=al-fihrisu
+%   \v!bijlage=al-mul.haqu
+
+% \usemodule[arabtex]
+%
+% \usetypescript[postscript] \switchtotypeface[postscript]
+%
+% \setarab \novocalize
+%
+% \starttext
+%
+% \placecontent
+%
+% \section{\<mu.hammad>} % short arabic use \< .. >
+% \section{\<mu.hammad>} % short arabic use \< .. >
+%
+% \startarabic
+% mu.hammad 'i_d q"aAm zay"d" + i_d yaqUm zyd + A_d zyd q"aAm
+%
+% mu.hammad 'i_d q"aAm zay"d" + i_d yaqUm zyd + A_d zyd q"aAm
+% \stoparabic
+%
+% \section{\<al-maq.sad>}
+%
+% \startarabic
+% mu.hammad 'i_d q"aAm zay"d" + i_d yaqUm zyd + A_d zyd q"aAm
+% \stoparabic
+%
+% \stoptext
-- 
cgit v1.2.3

