summaryrefslogtreecommitdiff
path: root/doc/context/sources/general/manuals/mk/mk-arabic.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/context/sources/general/manuals/mk/mk-arabic.tex')
-rw-r--r--doc/context/sources/general/manuals/mk/mk-arabic.tex324
1 files changed, 324 insertions, 0 deletions
diff --git a/doc/context/sources/general/manuals/mk/mk-arabic.tex b/doc/context/sources/general/manuals/mk/mk-arabic.tex
new file mode 100644
index 000000000..a9f9e52d9
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-arabic.tex
@@ -0,0 +1,324 @@
+% language=uk
+
+\startcomponent mk-arabic
+
+\environment mk-environment
+
+\disablemode[dynamic-arabic] % to be checked, we loose colors
+
+\definefontfeature
+ [arab-none]
+ [mode=node,language=dflt,script=arab]
+
+\definefontfeature
+ [arab-compose]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes]
+
+\definefontfeature
+ [arab-replace]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes]
+
+\definefontfeature
+ [arab-mark]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes]
+
+\definefontfeature
+ [arab-mkmk]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes,mkmk=yes]
+
+\definefontfeature
+ [arab-kern]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes,mkmk=yes,
+ kern=yes]
+
+\definefontfeature[arab-context]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes,mkmk=yes,
+ kern=yes,
+ calt=yes]
+
+\definefontfeature
+ [arab-ligs]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mkmk=yes,mark=yes,
+ kern=yes]
+
+\definefontfeature
+ [arab-curs]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,
+ kern=yes,curs=yes]
+
+\definefontfeature
+ [arab-urdu]
+ [mode=node,language=urd,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,
+ kern=yes,curs=yes]
+
+\definefontfeature
+ [arab-default]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,kern=yes,curs=yes]
+
+% \font \ArabNone = arabtype*arab-none at 48pt
+% \font \ArabCompose = arabtype*arab-compose at 48pt
+% \font \ArabReplace = arabtype*arab-replace at 48pt
+% \font \ArabMark = arabtype*arab-mark at 48pt
+% \font \ArabMkmk = arabtype*arab-mkmk at 48pt
+% \font \ArabKern = arabtype*arab-kern at 48pt
+% \font \ArabContext = arabtype*arab-context at 48pt
+% \font \ArabLigs = arabtype*arab-ligs at 48pt
+% \font \ArabCurs = arabtype*arab-curs at 48pt
+% \font \ArabUrdu = arabtype*arab-urdu at 48pt
+
+% \startbuffer[word]
+% \char1604\char1616\char1604\char1617\char1648\char1607\char1616 % لِلّٰهِ
+% \stopbuffer
+
+\startbuffer[split-word]
+ \def\somechar #1{ \char#1\relax}%
+ \def\somevowel#1{ \char#1\relax}%
+ \dontleavehmode\ignorespaces\getbuffer[word]\removeunwantedspaces
+\stopbuffer
+
+\startbuffer[normal-word]
+ \def\somechar #1{\char#1\relax}%
+ \def\somevowel#1{\char#1\relax}%
+ \ignorespaces\getbuffer[word]\removeunwantedspaces
+\stopbuffer
+
+\startbuffer[word]
+ \somechar {1604}%
+ \somevowel{1616}%
+ \somechar {1604}%
+ \somevowel{1617}%
+ \somevowel{1648}%
+ \somechar {1607}%
+ \somevowel{1616}%
+ % لِلّٰهِ
+\stopbuffer
+
+\startbuffer[word]
+ \somechar {"644}%
+ \somevowel{"650}%
+ \somechar {"644}%
+ \somevowel{"651}%
+ \somevowel{"670}%
+ \somechar {"647}%
+ \somevowel{"650}%
+ % لِلّٰهِ
+\stopbuffer
+
+\startbuffer[paragraph]
+اَلْحَمْدُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ مَجْدِهٖ، بِلِسَانِ
+الثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛ اَلَّذِيْ خَلَقَ الْمَوْتَ وَالْحَيٰوةَ، وَالْخَيْرَ
+وَالشَّرَّ، وَالنَّفْعَ وَالضَّرَّ، وَالسُّكُوْنَ وَالْحَرَكَةَ، وَالْأَرْوَاحَ
+وَالْأَجْسَامَ، وَالذِّكْرَ وَالنِّسْيَانَ.
+\stopbuffer
+
+\def\ArabSampleFont{arabtype}
+
+\def\ShowArabSample#1%
+ {\begingroup
+ \blank
+ \enabletrackers[otf.analyzing]
+ \doifmodeelse{dynamic-arabic}{
+ \font\ArabFont = \ArabSampleFont\space at 48pt
+ }{
+ \font\ArabFont = \ArabSampleFont*#1 at 48pt
+ }
+ \font\ArabFontX = \ArabSampleFont\space at 24pt
+ \startlinecorrection
+ \bTABLE[framecolor=red,rulethickness=1pt,offset=1ex]
+ \bTR
+ \bTD[width=.8\textwidth] % [ny=2]
+ \tttf\fontfeatureslist[#1][, ]%
+ \eTD
+ \bTD[width=.2\textwidth,align={lohi,middle},offset=0pt]%
+ \ArabFont\doifmode{dynamic-arabic}{\setfontfeature{#1}}\textdir TRT\relax
+ \getbuffer[normal-word]%
+ \eTD
+ \eTR
+% \bTR
+% \bTD[width=9em,align={lohi,middle},offset=0pt]%
+% \ArabFontX\textdir TRT\relax
+% \getbuffer[split-word]%
+% \eTD
+% \eTR
+ \eTABLE
+ \stoplinecorrection
+ \blank
+ \doifmodeelse{dynamic-arabic}{
+ \font\ArabFont = \ArabSampleFont\space at 24pt
+ \setfontfeature{#1}%
+ }{
+ \font\ArabFont = \ArabSampleFont*#1 at 24pt
+ }
+ \ArabFont
+ \pardir TRT\relax\textdir TRT\relax\getbuffer[paragraph]\endgraf
+ \disabletrackers[otf.analyzing]
+ \pardir TRT\relax\textdir TRT\relax\getbuffer[paragraph]\endgraf
+ \endgroup}
+
+\chapter{Arabic}
+
+Let's start with admitting that I don't speak or read Arabic, and the sample
+texts used here are part of what we use in the Oriental \TEX\ project for
+exploring advanced Arabic typesetting. This chapter will not discuss arab
+typesetting in much detail, but should be seen as complementing the \quote
+{Onthology on Arabic Typesetting} written by Idris. Here I will only show what
+the consequences are of applying features. Because we see glyphs but often still
+deal with characters when analyzing what to do, we will use these terms mixed.
+
+The font that we use here is the \quote {arabtype} font by MicroSoft. This font
+covers Latin scripts and Arabic and has a rich set of features. It's also a rather
+big font, so it is a nice torture test for \LUATEX.
+
+First we show what \MKIV\ does with a sequence of characters when no features
+are enabled by the user. We have turn on color tracing. This gives us some
+feedback about the how the analyze worked out. Analyzing for Arabic boils down
+to marking the initial, mid, final and isolated forms. We don't need to
+explicitly enable analyzing, it's on by default. The \type {mode} flag is set
+to \type {node} because we cannot use \TEX's default mechanism. When \LUATEX\
+and \MKIV\ are beyond beta stage, we will use that mode by default.
+
+\ShowArabSample {arab-none}
+
+Once these forms are identified, the \type {init}, \type {medi}, \type {fina}
+and \type {isol} features can be applied since they need this information. As
+you can see, different shapes show up. The vowels (marks in \OPENTYPE\ speak)
+are not affected. It may not be entirely clear here, but these vowels don't have
+width.
+
+\ShowArabSample {arab-compose}
+
+We start with some preparations with regards to combinations of marks. This
+is really needed in order to get the right output.
+
+\ShowArabSample {arab-replace}
+
+The order in which features are applied is dictated by the font and users don't
+need to bother about it. In the next example we enable the \type {mark} and
+\type {mkmk} features. As with other positioning related features, these are
+normally applied late in the feature chain.
+
+\ShowArabSample {arab-mark}
+
+The \type {mark} feature positions marks (vowels) relative to characters, also
+known as mark to base. The \type {mkmk} feature positions marks to basemarks.
+
+\ShowArabSample {arab-mkmk}
+
+Kerning depends on the font. Some fonts don't need kerning, others may need
+extensive relative positioning of characters (by now glyphs).
+
+\ShowArabSample {arab-kern}
+
+So far we only had rather straightforward replacements. More sophisticated
+replacements are those driven by the context. In principle all replacements
+can be context driven, but the \type {calt} and \type {clig} features are
+normally dedicated to the real complex ones that take preceding and following
+characters into account.
+
+\ShowArabSample {arab-context}
+
+Ligatures are often used to beautify Arabic typeset documents. Here we enable the
+whole lot.
+
+\ShowArabSample {arab-ligs}
+
+Kerning deals with horizontal displacements, but \type {curs} (cursive) goes one
+step further. As with marks, positioning is based on anchor points and resolving
+them involves a bit of trickery because one needs to take into account that
+characters may have vowels attached to them.
+
+\ShowArabSample {arab-curs}
+
+One script can serve multiple languages so let's see what happens when we switch to
+Urdu.
+
+\ShowArabSample {arab-urdu}
+
+In practice one will enable most of the features. In \MKIV\ one can define feature
+sets as follows:
+
+\starttyping
+\definefontfeature
+ [arab-default]
+ [mode=node,language=dflt,script=arab,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,kern=yes,curs=yes]
+\stoptyping
+
+Applying these features to fonts can be done in several ways, with as most basic
+one:
+
+\starttyping
+\font\ArabFont=arabtype*arab-default at 18pt
+\stoptyping
+
+Normally one will do something like
+
+\starttyping
+\definefont[ArabFont][arabtype*arab-default at 18pt]
+\stoptyping
+
+or use typescripts to set up ap proper font collection, in which case we end
+up with definitions that look like:
+
+\starttyping
+\definefontsynonym[ArabType][name:arabtype][features=arab-default]
+\definefontsynonym[Serif][ArabType]
+\stoptyping
+
+More information about typescripts can be found in manuals and on the
+\CONTEXT\ wiki.
+
+We end this chapter with showing two arabic fonts so that you can get a taste
+if the differences: arabtype by MicroSoft and Palatino which is designed by
+Herman Zapf for Linotype.
+
+\def\ArabSampleFont{arabtype} \ShowArabSample {arab-default}
+
+\def\ArabSampleFont{name:palatinoltarabic} \ShowArabSample {arab-default}
+
+These fonts are quite different in designsize:
+
+\def\Test{test} % (\the\dimexpr1em\relax)}
+
+\starttabulate[|r|c|c|c|]
+\NC \NC \bf arabtype \NC \bf palatino \NC \NR
+\NC \bf 10pt \NC \definedfont[arabtype at 10pt]\Test \NC \definedfont[name:palatinoltarabic at 10pt]\Test \NC \NR
+\NC \bf 12pt \NC \definedfont[arabtype at 12pt]\Test \NC \definedfont[name:palatinoltarabic at 12pt]\Test \NC \NR
+\NC \bf 18pt \NC \definedfont[arabtype at 18pt]\Test \NC \definedfont[name:palatinoltarabic at 18pt]\Test \NC \NR
+\NC \bf 24pt \NC \definedfont[arabtype at 24pt]\Test \NC \definedfont[name:palatinoltarabic at 24pt]\Test \NC \NR
+\stoptabulate
+
+\stopcomponent