-
-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathMORX-14.html
More file actions
105 lines (92 loc) · 5.44 KB
/
Copy pathMORX-14.html
File metadata and controls
105 lines (92 loc) · 5.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns:ft="https://github.com/OpenType/fonttest"
xmlns:xlink="http://www.w3.org/1999/xlink">
<body>
<h3 id="MORX-14">MORX-14: Rearrangement Loop</h3>
<div class="desc">
The <a href="../fonts/TestMORXFourteen.ttf">font</a> for this test case has
an <a href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6morx.html"
>AAT Extended Glyph Metamorphosis Table</a>
with a single <em>Rearrangement Subtable</em>. Its finite-state machine
contains two states (0 and 1) with the following transitions:
</div>
<ul class="desc">
<li>For glyph <em>A:</em></li>
<ul class="desc">
<li>in state 0, the machine loops back to state 0.
This transition carries both the <em>MarkFirst</em> and
<em>MarkLast</em> flags. No rearrangement action is performed.</li>
<li>in state 1, the machine loops back to state 1.
This transition carries no flags.
No rearrangement action is performed.</li>
</ul>
<li>For glyphs <em>B, C,</em> and <em>D:</em></li>
<ul class="desc">
<li>in state 0, the machine loops back to state 0.
This transition carries the <em>MarkLast</em> flag.
No rearrangement action is performed.</li>
<li>in state 1, the machine loops back to state 1.
This transition carries the <em>DontAdvance</em> flag,
and executes a rearrangement of type 2 <em>(xD ⇒ Dx)</em>.</li>
</ul>
<li>For glyph <em>E:</em></li>
<ul class="desc">
<li>in state 0, the machine makes a transition to state 1.
This transition carries both the <em>DontAdvance</em> and
<em>MarkLast</em> flags. No rearrangement action is performed.</li>
<li>in state 1, the machine loops back to state 1.
This transition carries the <em>DontAdvance</em> flag,
and it executes a rearrangement of type 2 <em>(xD ⇒ Dx)</em>.</li>
</ul>
<li>For any other glyphs and “end of text”, the machine performs
no action.</li>
</ul>
<div class="desc">
If your rendering system correctly implements <em>Apple Advanced
Typography,</em> the finite-state machine should loop multiple times
through state 1, repeatedly rearranging the marked glyphs in every
iteration.
</div>
<ul class="desc">
<li>For the input string <em>ABCDE</em>, your implementation should
change the marked glyph sequence as follows: <em>A</em> → <em>AB</em>
→ <em>ABC</em> → <em>ABCD</em> → <em>ABCDE</em> → <em>EABCD</em>
→ <em>DEABC</em> → <em>CDEAB</em> → <em>BCDEA</em>.</li>
<li>For the input string <em>ABBBCCCDDDBCDCE</em>, your
implementation should change the marked glyph changes as
follows: <em>A</em> → <em>AB</em> → <em>ABB</em> → [...]
→ <em>ABBBCCCDDDBCDCE</em> → <em>EABBBCCCDDDBCDC</em>
→ <em>CEABBBCCCDDDBCD</em> → <em>DCEABBBCCCDDDBC</em>
→ <em>CDCEABBBCCCDDDB</em> → <em>BCDCEABBBCCCDDD</em>
→ <em>DBCDCEABBBCCCDD</em> → [...] → <em>BCCCDDDBCDCEABB</em>
→ <em>BBCCCDDDBCDCEAB</em> → <em>BBBCCCDDDBCDCEA</em>.
However, since this is a rather degenerated corner case,
we only expect that the implementation does not crash or hang.
</li>
</ul>
<table>
<tr>
<th></th>
<th style="text-align:center">ABCDE</th>
<th style="text-align:center">ABBBCCCDDDBCDCE</th>
</tr>
<tr>
<th>Expected</th>
<td class="expected" ft:id="MORX-14/1" ft:render="ABCDE"
ft:font="TestMORXFourteen.ttf"><svg version="1.1" viewBox="0 -200 3091 1200"><symbol id="MORX-14/1.B" overflow="visible"><path d="M301,714 Q439,714 505,673 Q572,632 572,537 Q572,474 537,432 Q502,391 436,379 L436,374 Q596,347 596,203 Q596,106 530,53 Q464,0 348,0 L97,0 L97,714 Z M319,410 Q407,410 443,438 Q479,467 479,527 Q479,585 437,611 Q396,637 305,637 L187,637 L187,410 Z M187,76 L331,76 Q421,76 460,111 Q500,146 500,210 Q500,270 459,302 Q418,335 324,335 L187,335 Z" /></symbol><symbol id="MORX-14/1.C" overflow="visible"><path d="M392,645 Q277,645 211,568 Q145,491 145,357 Q145,221 207,145 Q270,69 391,69 Q468,69 562,97 L562,19 Q522,4 479,-3 Q436,-10 378,-10 Q217,-10 133,87 Q50,185 50,358 Q50,467 90,549 Q130,632 207,678 Q285,724 393,724 Q448,724 498,713 Q549,702 590,682 L554,606 Q468,645 392,645 Z" /></symbol><symbol id="MORX-14/1.D" overflow="visible"><path d="M669,364 Q669,185 571,92 Q474,0 296,0 L97,0 L97,714 L317,714 Q481,714 575,623 Q669,533 669,364 Z M574,361 Q574,501 505,569 Q436,637 304,637 L187,637 L187,77 L284,77 Q429,77 501,148 Q574,220 574,361 Z" /></symbol><symbol id="MORX-14/1.E" overflow="visible"><path d="M97,0 L97,714 L496,714 L496,635 L187,635 L187,412 L478,412 L478,334 L187,334 L187,79 L496,79 L496,0 Z" /></symbol><symbol id="MORX-14/1.A" overflow="visible"><path d="M459,221 L176,221 L91,0 L0,0 L279,717 L360,717 L638,0 L545,0 Z M352,517 Q345,537 335,568 Q325,599 318,624 Q303,564 287,517 L206,301 L432,301 Z" /></symbol><use x="0" y="0" xlink:href="#MORX-14/1.B" /><use x="626" y="0" xlink:href="#MORX-14/1.C" /><use x="1222" y="0" xlink:href="#MORX-14/1.D" /><use x="1896" y="0" xlink:href="#MORX-14/1.E" /><use x="2452" y="0" xlink:href="#MORX-14/1.A" /></svg></td>
<td class="expected-no-crash" ft:id="MORX-14/2" ft:render="ABBBCCCDDDBCDCE"
ft:font="TestMORXFourteen.ttf">Shouldn’t crash or hang</td>
</tr>
<tr>
<th>Observed</th>
<td class="observed" ft:id="MORX-14/1"/>
<td class="observed" ft:id="MORX-14/2"/>
</tr>
<tr>
<th class="conformance-header">Conformance</th>
<td class="conformance" ft:id="MORX-14/1"/>
<td class="conformance" ft:id="MORX-14/2"/>
</tr>
</table>
</body>
</html>