%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{\} % short arabic use \< .. > % \section{\} % 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{\} % % \startarabic % mu.hammad 'i_d q"aAm zay"d" + i_d yaqUm zyd + A_d zyd q"aAm % \stoparabic % % \stoptext