For those following the work on complex script support, attached is a sample
showing a combination of GSUB (glyph substitution) and GPOS (glyph position)
table functions operating on Arabic text as produced by FOP 1.0 with complex
script features enabled:

In this sample, the following GSUB subtable types are exercised:

   - single
   - ligature

In this sample, the following GPOS subtable types are being exercised:

   - single
   - pair
   - mark to base
   - mark to ligature
   - mark to mark

I am including the IF output file to show the modifications that express the
more general positioning adjustments. If the position adjustments are
equivalent to the older, DX, expression, then they are expressed with a "dx"
attribute; otherwise, with a new "dp" attribute which uses a run-length
encoding to avoid long strings of "0" values, where the syntax of the latter
is:

dp      : count entry+
count   : integer
entry   : integer | 'Z' repeat
repeat  : integer

where count denotes the number of adjustment tuples, and 'Z' *repeat*encodes
*repeat* zeroes. Furthermore, any trailing tuples that are all zeroes are
otherwise truncated (without Z repeats).

For example,

dp="5 Z4 5600 1952 -6432 Z5 608 -9664 -6400 0"

denotes 5 adjustment tuples as follows:

{     0,     0,     0,     0 }
{  5600,  1952, -6432,     0 }
{     0,     0,     0,     0 }
{   608, -9664, -6400,     0 }
{     0,     0,     0,     0 }

where the components of a tuple are:

{ xPlacementAdjust, yPlacementAdjust, xAdvanceAdjust, yAdvanceAdjust }

If a general position adjustment array is such that each xPlacementAdjust is
the same as xAdvanceAdjust for every tuple, and yPlacementAdjust and
yAdvanceAdjust are zero for every tuple, then the adjustments array is
expressed using a dx attribute.

For example, the following dp tuples:

{     0,     0,     0,     0 }
{ -6688,     0, -6688,     0 }

would be expressed using a dx attribute as follows:

dx="0 -6688"

Using this technique allows for backward compatibility for the previous,
more simple kerning only fonts, as opposed to the more general GPOS
adjustments.

Finally, it is useful to show how this change affects the PDF output, which
instead of using only the TJ operator, now uses a combination of the Td and
Tj operators to position each glyph separately in those cases where TJ does
not suffice. Following is a dump of the text object in the attached sample
PDF file, which illustrates the (now) combined usage of TJ and Td/Tj
operators.

q
1 0 0 -1 0 841.889 cm
q
1 0 0 1 70.866 28.346 cm
Q
q
1 0 0 1 70.866 742.678 cm
Q
q
1 0 0 1 70.866 113.385 cm
0 g
BT
/F1 16 Tf
1 0 0 -1 359.04699707 30.08799934 Tm [(Mar) -15 (k to Base)] TJ
1 0 0 -1 378.63101196 87.47200012 Tm /F20 32 Tf
7.168 1.952 Td <0008> Tj
-7.168 -1.952 Td <0007> Tj
/F20 32 Tf
1 0 0 -1 394.24700928 87.47200012 Tm [<0003>] TJ
1 0 0 -1 404.39099121 87.47200012 Tm /F20 32 Tf
0.928 7.424 Td <0008> Tj
-0.928 -7.424 Td <0005> Tj
1 0 0 -1 411.01501465 87.47200012 Tm [<0003>] TJ
1 0 0 -1 421.15899658 87.47200012 Tm /F20 32 Tf
7.968 -12.48 Td <0006> Tj
-7.968 12.48 Td <0007> Tj
1 0 0 -1 436.7749939 87.47200012 Tm [<0003>] TJ
1 0 0 -1 446.91900635 87.47200012 Tm /F20 32 Tf
-0.16 -3.424 Td <0006> Tj
0.16 3.424 Td <0005> Tj
1 0 0 -1 402.56698608 143.47200012 Tm /F20 32 Tf
0 0 Td <0009> Tj
18.784 1.952 Td <0008> Tj
-5.6 -1.952 Td <000B> Tj
17.408 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
7.808 0 Td <0009> Tj
/F1 16 Tf
1 0 0 -1 234.55099487 194.08799744 Tm [(Mar) -15 (k to Ligature) 15 (, Mar)
-15 (k to Base)] TJ
1 0 0 -1 315.07901001 243.47200012 Tm /F20 32 Tf
-0.16 -3.424 Td <0006> Tj
10.144 10.048 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
/F20 32 Tf
1 0 0 -1 342.08700562 243.47200012 Tm [<0003>] TJ
1 0 0 -1 352.23098755 243.47200012 Tm /F20 32 Tf
1.696 7.424 Td <0008> Tj
7.84 -12.096 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
1 0 0 -1 379.23901367 243.47200012 Tm [<0003>] TJ
1 0 0 -1 389.38299561 243.47200012 Tm /F20 32 Tf
1.536 3.904 Td <0008> Tj
8.448 2.72 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
1 0 0 -1 416.39099121 243.47200012 Tm [<0003>] TJ
1 0 0 -1 426.53500366 243.47200012 Tm /F20 32 Tf
-0.64 -0.288 Td <0006> Tj
10.176 -4.384 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
1 0 0 -1 315.07901001 299.47198486 Tm /F20 32 Tf
-0.16 -3.424 Td <0006> Tj
10.144 10.048 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
1 0 0 -1 342.08700562 299.47198486 Tm [<0003>] TJ
1 0 0 -1 352.23098755 299.47198486 Tm /F20 32 Tf
1.696 7.424 Td <0008> Tj
7.84 -12.096 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
1 0 0 -1 379.23901367 299.47198486 Tm [<0003>] TJ
1 0 0 -1 389.38299561 299.47198486 Tm /F20 32 Tf
1.536 3.904 Td <0008> Tj
8.448 2.72 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
1 0 0 -1 416.39099121 299.47198486 Tm [<0003>] TJ
1 0 0 -1 426.53500366 299.47198486 Tm /F20 32 Tf
-0.64 -0.288 Td <0006> Tj
10.176 -4.384 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
/F1 16 Tf
1 0 0 -1 256.32699585 350.0880127 Tm [(Mar) -15 (k to Mar) -15 (k, Mar) -15
(k to Base)] TJ
1 0 0 -1 396.61499023 399.47198486 Tm /F20 32 Tf
0.768 3.904 Td <000E> Tj
0.16 3.52 Td <0008> Tj
-0.928 -7.424 Td <0005> Tj
/F20 32 Tf
1 0 0 -1 403.23901367 399.47198486 Tm [<0003>] TJ
1 0 0 -1 413.38299561 399.47198486 Tm /F20 32 Tf
0.768 1.568 Td <0008> Tj
0.16 5.856 Td <000E> Tj
-0.928 -7.424 Td <0005> Tj
1 0 0 -1 420.00698853 399.47198486 Tm [<0003>] TJ
1 0 0 -1 430.15100098 399.47198486 Tm /F20 32 Tf
-0.64 -0.288 Td <000D> Tj
0.48 -3.136 Td <0006> Tj
0.16 3.424 Td <0005> Tj
1 0 0 -1 436.7749939 399.47198486 Tm [<0003>] TJ
1 0 0 -1 446.91900635 399.47198486 Tm /F20 32 Tf
-0.64 2.528 Td <0006> Tj
0.48 -5.952 Td <000D> Tj
0.16 3.424 Td <0005> Tj
/F1 16 Tf
1 0 0 -1 366.39099121 450.0880127 Tm [(P) 40 (air K) 40 (er) -25 (ning)] TJ
/F20 32 Tf
1 0 0 -1 322.34298706 499.47198486 Tm [<0011> 209 <000F>] TJ
1 0 0 -1 347.4630127 499.47198486 Tm [<0003>] TJ
1 0 0 -1 357.60699463 499.47198486 Tm [<0010> 176 <000F>] TJ
1 0 0 -1 386.21499634 499.47198486 Tm [<0003>] TJ
1 0 0 -1 396.35900879 499.47198486 Tm [<000F> 92 <000F>] TJ
1 0 0 -1 421.06298828 499.47198486 Tm [<0003>] TJ
1 0 0 -1 431.20700073 499.47198486 Tm [<0009> 146 <000F>] TJ
ET
Q
Q

It is also useful to note that this sample illustrates the complex mapping
between characters and glyphs in this script. For example, the following
character sequence (in logical, writing order):

[0] U+0628 ARABIC LETTER BEH
[1] U+064E ARABIC FATHA
[2] U+0644 ARABIC LETTER LAM
[3] U+064E ARABIC FATHA
[4] U+0627 ARABIC LETTER ALEF
[5] U+064E ARABIC FATHA

maps to the following glyphs, here expressed in terms of their equivalent
Unicode presentation variant encodings in presentation, i.e., PDF display
order:

[0] U+064E ARABIC FATHA
[1] U+064E ARABIC FATHA
[2] U+FEFC ARABIC LIGATURE LAM WITH ALEF FINAL FORM
[3] U+064E ARABIC FATHA
[4] U+FE91 ARABIC LETTER BEH INITIAL FORM

If we write the associations between these glyphs and the original character
indices that produced these glyphs, we have the following:

[0] U+064E : [3]
[1] U+064E : [5]
[2] U+FEFC : [2], [4]
[3] U+064E : [1]
[4] U+FE91 : [0]

As one can see, there is a non-isomorphic, non-monotonic mapping between
output glyph indices and associated character indices. Also, we note that
the number of glyphs output for a given input character string may be the
same, fewer, or greater in number than the number of input characters.

In general, prior to this work, the FOP code assumes a one to one, monotonic
mapping from input character indices to output glyph indices. With the
addition of complex script features, this code is generalized. However, this
generalization is done in a way that attempts to reuse existing code and
code paths for the special cases where a one-to-one, monotonic mapping still
holds. In this fashion, there should be little impact on performance when
processing non-complex script content.

Note that the GPOS support demonstrated here is not yet applied to the FOP
Temp_ComplexScripts branch (as of today, 09/12). I expect to submit a patch
to that branch in perhaps a week or so that adds this support. It is,
however, available from my working GIT repo at
http://github.com/skynavga/fop.git.

Regards,
Glenn
q
1 0 0 -1 0 841.889 cm
q
1 0 0 1 70.866 28.346 cm
Q
q
1 0 0 1 70.866 742.678 cm
Q
q
1 0 0 1 70.866 113.385 cm
0 g
BT
/F1 16 Tf
1 0 0 -1 359.04699707 30.08799934 Tm [(Mar) -15 (k to Base)] TJ
1 0 0 -1 378.63101196 87.47200012 Tm /F20 32 Tf
7.168 1.952 Td <0008> Tj
-7.168 -1.952 Td <0007> Tj
/F20 32 Tf
1 0 0 -1 394.24700928 87.47200012 Tm [<0003>] TJ
1 0 0 -1 404.39099121 87.47200012 Tm /F20 32 Tf
0.928 7.424 Td <0008> Tj
-0.928 -7.424 Td <0005> Tj
1 0 0 -1 411.01501465 87.47200012 Tm [<0003>] TJ
1 0 0 -1 421.15899658 87.47200012 Tm /F20 32 Tf
7.968 -12.48 Td <0006> Tj
-7.968 12.48 Td <0007> Tj
1 0 0 -1 436.7749939 87.47200012 Tm [<0003>] TJ
1 0 0 -1 446.91900635 87.47200012 Tm /F20 32 Tf
-0.16 -3.424 Td <0006> Tj
0.16 3.424 Td <0005> Tj
1 0 0 -1 402.56698608 143.47200012 Tm /F20 32 Tf
0 0 Td <0009> Tj
18.784 1.952 Td <0008> Tj
-5.6 -1.952 Td <000B> Tj
17.408 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
7.808 0 Td <0009> Tj
/F1 16 Tf
1 0 0 -1 234.55099487 194.08799744 Tm [(Mar) -15 (k to Ligature) 15 (, Mar) -15 
(k to Base)] TJ
1 0 0 -1 315.07901001 243.47200012 Tm /F20 32 Tf
-0.16 -3.424 Td <0006> Tj
10.144 10.048 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
/F20 32 Tf
1 0 0 -1 342.08700562 243.47200012 Tm [<0003>] TJ
1 0 0 -1 352.23098755 243.47200012 Tm /F20 32 Tf
1.696 7.424 Td <0008> Tj
7.84 -12.096 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
1 0 0 -1 379.23901367 243.47200012 Tm [<0003>] TJ
1 0 0 -1 389.38299561 243.47200012 Tm /F20 32 Tf
1.536 3.904 Td <0008> Tj
8.448 2.72 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
1 0 0 -1 416.39099121 243.47200012 Tm [<0003>] TJ
1 0 0 -1 426.53500366 243.47200012 Tm /F20 32 Tf
-0.64 -0.288 Td <0006> Tj
10.176 -4.384 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.808 -9.664 Td <0006> Tj
-0.608 9.664 Td <000A> Tj
1 0 0 -1 315.07901001 299.47198486 Tm /F20 32 Tf
-0.16 -3.424 Td <0006> Tj
10.144 10.048 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
1 0 0 -1 342.08700562 299.47198486 Tm [<0003>] TJ
1 0 0 -1 352.23098755 299.47198486 Tm /F20 32 Tf
1.696 7.424 Td <0008> Tj
7.84 -12.096 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
1 0 0 -1 379.23901367 299.47198486 Tm [<0003>] TJ
1 0 0 -1 389.38299561 299.47198486 Tm /F20 32 Tf
1.536 3.904 Td <0008> Tj
8.448 2.72 Td <0008> Tj
-9.984 -6.624 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
1 0 0 -1 416.39099121 299.47198486 Tm [<0003>] TJ
1 0 0 -1 426.53500366 299.47198486 Tm /F20 32 Tf
-0.64 -0.288 Td <0006> Tj
10.176 -4.384 Td <0006> Tj
-9.536 4.672 Td <000C> Tj
19.04 3.52 Td <0008> Tj
0.16 -3.52 Td <000A> Tj
/F1 16 Tf
1 0 0 -1 256.32699585 350.0880127 Tm [(Mar) -15 (k to Mar) -15 (k, Mar) -15 (k 
to Base)] TJ
1 0 0 -1 396.61499023 399.47198486 Tm /F20 32 Tf
0.768 3.904 Td <000E> Tj
0.16 3.52 Td <0008> Tj
-0.928 -7.424 Td <0005> Tj
/F20 32 Tf
1 0 0 -1 403.23901367 399.47198486 Tm [<0003>] TJ
1 0 0 -1 413.38299561 399.47198486 Tm /F20 32 Tf
0.768 1.568 Td <0008> Tj
0.16 5.856 Td <000E> Tj
-0.928 -7.424 Td <0005> Tj
1 0 0 -1 420.00698853 399.47198486 Tm [<0003>] TJ
1 0 0 -1 430.15100098 399.47198486 Tm /F20 32 Tf
-0.64 -0.288 Td <000D> Tj
0.48 -3.136 Td <0006> Tj
0.16 3.424 Td <0005> Tj
1 0 0 -1 436.7749939 399.47198486 Tm [<0003>] TJ
1 0 0 -1 446.91900635 399.47198486 Tm /F20 32 Tf
-0.64 2.528 Td <0006> Tj
0.48 -5.952 Td <000D> Tj
0.16 3.424 Td <0005> Tj
/F1 16 Tf
1 0 0 -1 366.39099121 450.0880127 Tm [(P) 40 (air K) 40 (er) -25 (ning)] TJ
/F20 32 Tf
1 0 0 -1 322.34298706 499.47198486 Tm [<0011> 209 <000F>] TJ
1 0 0 -1 347.4630127 499.47198486 Tm [<0003>] TJ
1 0 0 -1 357.60699463 499.47198486 Tm [<0010> 176 <000F>] TJ
1 0 0 -1 386.21499634 499.47198486 Tm [<0003>] TJ
1 0 0 -1 396.35900879 499.47198486 Tm [<000F> 92 <000F>] TJ
1 0 0 -1 421.06298828 499.47198486 Tm [<0003>] TJ
1 0 0 -1 431.20700073 499.47198486 Tm [<0009> 146 <000F>] TJ
ET
Q
Q
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://xmlgraphics.apache.org/fop/intermediate"; xmlns:xlink="http://www.w3.org/1999/xlink"; xmlns:nav="http://xmlgraphics.apache.org/fop/intermediate/document-navigation";>
<header>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";>
<rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/"; rdf:about="">
<xmp:CreateDate>2010-09-12T10:09:10+08:00</xmp:CreateDate>
<xmp:CreatorTool>Apache FOP Version svn-trunk</xmp:CreatorTool>
<xmp:MetadataDate>2010-09-12T10:09:10+08:00</xmp:MetadataDate>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
</header>
<page-sequence xml:space="preserve">
<page index="0" name="1" page-master-name="simple" width="595275" height="841889">
<page-header/>
<content>
<viewport transform="translate(70866,28346)" width="453543" height="85039"/>
<viewport transform="translate(70866,742678)" width="453543" height="42519"/>
<viewport transform="translate(70866,113385)" width="453543" height="671812">
<font family="sans-serif" style="normal" weight="400" variant="normal" size="16000" color="#000000"/>
<text x="359047" y="30088" dx="0 0 0 240">Mark to Base</text>
<font family="Simplified Arabic" size="32000"/>
<text x="378631" y="87472" dp="1 7168 1952 -6432 0">ِر</text>
<text x="394247" y="87472"> </text>
<text x="404391" y="87472" dp="1 928 7424 -6432 0">ِا</text>
<text x="411015" y="87472"> </text>
<text x="421159" y="87472" dp="1 7968 -12480 -6400 0">َر</text>
<text x="436775" y="87472"> </text>
<text x="446919" y="87472" dp="1 -160 -3424 -6400 0">َا</text>
<text x="402567" y="143472" dp="4 Z4 5600 1952 -6432 Z5 608 -9664 -6400 0">ءِنَﺑء</text>
<font family="sans-serif" size="16000"/>
<text x="234551" y="194088" dx="0 0 0 240 0 0 0 0 0 0 0 0 0 0 0 0 -240 0 0 0 0 240">Mark to Ligature, Mark to Base</text>
<font family="Simplified Arabic" size="32000"/>
<text x="315079" y="243472" dp="4 -160 -3424 -6400 0 9984 6624 -6432 Z5 608 -9664 -6400 0">َِﻼَﺑ</text>
<text x="342087" y="243472"> </text>
<text x="352231" y="243472" dp="4 1696 7424 -6432 0 9536 -4672 -6400 Z5 608 -9664 -6400 0">َِﻼَﺑ</text>
<text x="379239" y="243472"> </text>
<text x="389383" y="243472" dp="4 1536 3904 -6432 0 9984 6624 -6432 Z5 608 -9664 -6400 0">ِِﻼَﺑ</text>
<text x="416391" y="243472"> </text>
<text x="426535" y="243472" dp="4 -640 -288 -6400 0 9536 -4672 -6400 Z5 608 -9664 -6400 0">ََﻼَﺑ</text>
<text x="315079" y="299472" dp="4 -160 -3424 -6400 0 9984 6624 -6432 Z5 -160 3520 -6432 0">َِﻼِﺑ</text>
<text x="342087" y="299472"> </text>
<text x="352231" y="299472" dp="4 1696 7424 -6432 0 9536 -4672 -6400 Z5 -160 3520 -6432 0">َِﻼِﺑ</text>
<text x="379239" y="299472"> </text>
<text x="389383" y="299472" dp="4 1536 3904 -6432 0 9984 6624 -6432 Z5 -160 3520 -6432 0">ِِﻼِﺑ</text>
<text x="416391" y="299472"> </text>
<text x="426535" y="299472" dp="4 -640 -288 -6400 0 9536 -4672 -6400 Z5 -160 3520 -6432 0">ََﻼِﺑ</text>
<font family="sans-serif" size="16000"/>
<text x="256327" y="350088" dx="0 0 0 240 0 0 0 0 0 0 0 240 0 0 0 0 0 240">Mark to Mark, Mark to Base</text>
<font family="Simplified Arabic" size="32000"/>
<text x="396615" y="399472" dp="2 768 3904 -6432 0 928 7424 -6432 0">ٍِا</text>
<text x="403239" y="399472"> </text>
<text x="413383" y="399472" dp="2 768 1568 -6432 0 928 7424 -6432 0">ٍِا</text>
<text x="420007" y="399472"> </text>
<text x="430151" y="399472" dp="2 -640 -288 -6432 0 -160 -3424 -6400 0">ًَا</text>
<text x="436775" y="399472"> </text>
<text x="446919" y="399472" dp="2 -640 2528 -6400 0 -160 -3424 -6432 0">ًَا</text>
<font family="sans-serif" size="16000"/>
<text x="366391" y="450088" dx="0 -640 0 0 0 0 -640 0 400">Pair Kerning</text>
<font family="Simplified Arabic" size="32000"/>
<text x="322343" y="499472" dx="0 -6688">جو</text>
<text x="347463" y="499472"> </text>
<text x="357607" y="499472" dx="0 -5632">ئو</text>
<text x="386215" y="499472"> </text>
<text x="396359" y="499472" dx="0 -2944">وو</text>
<text x="421063" y="499472"> </text>
<text x="431207" y="499472" dx="0 -4672">ءو</text>
</viewport>
</content>
<page-trailer/>
</page>
</page-sequence>
<trailer/>
</document>

Attachment: test.pdf
Description: Adobe PDF document

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format";>
  <fo:layout-master-set>
    <fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm">
      <fo:region-body margin-top="3cm"/>
      <fo:region-before extent="3cm"/>
      <fo:region-after extent="1.5cm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="simple" writing-mode="lr">
    <fo:flow flow-name="xsl-region-body">
      <fo:block font-size="16pt" font-family="sans-serif" line-height="48pt" space-after.optimum="0pt" padding="2pt" text-align="right">
Mark to Base
      </fo:block>
      <fo:block font-size="32pt" font-family="Simplified Arabic" line-height="48pt" space-after.optimum="4pt" padding="2pt" text-align="right">
&#x0627;&#x064E; &#x0631;&#x064E; &#x0627;&#x0650; &#x0631;&#x0650;
      </fo:block>
      <fo:block font-size="32pt" font-family="Simplified Arabic" line-height="48pt" space-after.optimum="4pt" padding="2pt" text-align="right">
&#x0621;&#x0628;&#x064E;&#x0646;&#x0650;&#x0621;
      </fo:block>
      <fo:block font-size="16pt" font-family="sans-serif" line-height="48pt" space-after.optimum="-8pt" padding="2pt" text-align="right">
Mark to Ligature, Mark to Base
      </fo:block>
      <fo:block font-size="32pt" font-family="Simplified Arabic" line-height="48pt" space-after.optimum="4pt" padding="2pt" text-align="right">
&#x0628;&#x064E;&#x0644;&#x064E;&#x0627;&#x064E;
&#x0628;&#x064E;&#x0644;&#x0650;&#x0627;&#x0650;
&#x0628;&#x064E;&#x0644;&#x064E;&#x0627;&#x0650;
&#x0628;&#x064E;&#x0644;&#x0650;&#x0627;&#x064E;
      </fo:block>
      <fo:block font-size="32pt" font-family="Simplified Arabic" line-height="48pt" space-after.optimum="4pt" padding="2pt" text-align="right">
&#x0628;&#x0650;&#x0644;&#x064E;&#x0627;&#x064E;
&#x0628;&#x0650;&#x0644;&#x0650;&#x0627;&#x0650;
&#x0628;&#x0650;&#x0644;&#x064E;&#x0627;&#x0650;
&#x0628;&#x0650;&#x0644;&#x0650;&#x0627;&#x064E;
      </fo:block>
      <fo:block font-size="16pt" font-family="sans-serif" line-height="48pt" space-after.optimum="-8pt" padding="2pt" text-align="right">
Mark to Mark, Mark to Base
      </fo:block>
      <fo:block font-size="32pt" font-family="Simplified Arabic" line-height="48pt" space-after.optimum="4pt" padding="2pt" text-align="right">
&#x0627;&#x064B;&#x064E;
&#x0627;&#x064E;&#x064B;
&#x0627;&#x064D;&#x0650;
&#x0627;&#x0650;&#x064D;
      </fo:block>
      <fo:block font-size="16pt" font-family="sans-serif" line-height="48pt" space-after.optimum="-8pt" padding="2pt" text-align="right">
Pair Kerning
      </fo:block>
      <fo:block font-size="32pt" font-family="Simplified Arabic" line-height="48pt" space-after.optimum="4pt" padding="2pt" text-align="right">
&#x0648;&#x0621;
&#x0648;&#x0648;
&#x0648;&#x0626;
&#x0648;&#x062C;
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

Reply via email to