comparison mupdf-source/thirdparty/harfbuzz/docs/features.dot @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 digraph {
2 graph [outputorder=edgefirst];
3 node [shape="record", fontname="Noto Sans Mono SemiBold", fontsize=15];
4 edge [fontname="Verdana", fontsize=12,labeldistance=7.5 ];
5 fontname="Verdana";
6 ranksep=0.02; nodesep=0.5;
7
8 subgraph {
9 ranksep="0.02 equally";
10 preprocessing[style=filled,fillcolor="lightgreen",fontname="Verdana",label="Glyph pre-processing"];
11 orthographic[style=filled,fillcolor="lightblue",fontname="Verdana",label="Orthographic Unit Shaping"];
12 reordering[style=filled, fillcolor="lightcoral",fontname="Verdana",label="Reordering group (USE)"];
13 topographic[style=filled,fillcolor="lightgoldenrod",fontname="Verdana",label="Topographical Features‡"];
14 typographic[style=filled,fillcolor="lightpink",fontname="Verdana",label="Typographic Presentation"];
15 positioning[style=filled,fillcolor="lightsalmon",fontname="Verdana",label="Positioning"];
16 preprocessing->reordering->orthographic->topographic->typographic->positioning;
17 }
18
19 decision1 [shape="diamond", label="Script\ndirection?",fontname="Verdana"];
20 rvrn->decision1;
21
22 ltrfeatures [label="{ltra|ltrm}", fillcolor="lightgreen",style="filled"];
23 {
24 rtlfeatures [label="{rtla|rtlm¹}", fillcolor="lightgreen",style="filled"];
25 }
26 {
27 rank=same;
28 fracfeatures [label="frac²|numr³|dnom⁴", fillcolor="lightpink",style="filled"];
29 fracnotes [fontname="Verdana",shape=plaintext,label=<<table border="0" cellborder="0" cellspacing="0">
30 <tr><td align="left">¹ rtlm is scoped to characters with a Unicode mirroring property</td></tr>
31 <tr><td align="left">² frac is scoped to numr + the slash + dnom</td></tr>
32 <tr><td align="left">³ numr is scoped to all decimal numbers before a U+2044 FRACTION SLASH.</td></tr>
33 <tr><td align="left">⁴ dnom is scoped to all decimal numbers after a U+2044 FRACTION SLASH.</td></tr>
34 </table>
35 >];
36
37 }
38 rand [fillcolor="lightpink",style="filled"];
39
40 decision1 -> ltrfeatures [label="Left-to-right"];
41 decision1 -> rtlfeatures [label="Right-to-left"];
42
43 decision1 -> fracfeatures [label="Other"];
44
45 ltrfeatures -> fracfeatures;
46 rtlfeatures -> fracfeatures;
47 fracfeatures->rand;
48
49 decision2 [shape="diamond", label="Script?",fontname="Verdana"];
50
51 {rank=same; HARF [label="{Harf|HARF}"]; notes;}
52 rand -> trak -> HARF -> decision2;
53
54 commonfeatures [shape=none,label=<<table border="0" cellspacing="0">
55 <tr>
56 <td border="1" bgcolor="lightsalmon">abvm</td>
57 <td border="1" bgcolor="lightsalmon">blwm</td>
58 <td border="1" bgcolor="lightgreen">ccmp</td>
59 <td border="1" bgcolor="lightgreen">locl</td>
60 <td border="1" bgcolor="lightsalmon">mark</td>
61 <td border="1" bgcolor="lightsalmon">mkmk</td>
62 <td border="1" bgcolor="lightpink">rlig</td>
63 </tr>
64 </table>>
65 ];
66
67 decision3 [shape="diamond", label="Script\ndirection?",fontname="Verdana"];
68
69 BUZZ [label="{Buzz|BUZZ}"];
70 BUZZ -> commonfeatures -> decision3;
71
72 horizontalfeatures [
73 shape=none,label=<<table border="0" cellspacing="0">
74 <tr><td border="1" bgcolor="lightpink">calt <font face="Verdana">(not Hangul)</font></td></tr>
75 <tr><td border="1" bgcolor="lightpink">clig <font face="Verdana">(not Khmer)</font></td></tr>
76 <tr><td border="1" bgcolor="lightsalmon">curs</td></tr>
77 <tr><td border="1" bgcolor="lightsalmon">dist</td></tr>
78 <tr><td border="1" bgcolor="lightsalmon">kern</td></tr>
79 <tr><td border="1" bgcolor="lightpink">liga <font face="Verdana">(not Khmer)</font></td></tr>
80 <tr><td border="1" bgcolor="lightpink">rclt</td></tr>
81 </table>>
82 ];
83 vert [label="vert",style=filled,fillcolor="lightpink"];
84
85 decision3 -> horizontalfeatures [label="Horizontal"];
86 decision3 -> vert [label="Vertical"];
87
88 discretionary [label="User-selected\ndiscretionary\nfeatures",fontname="Verdana"];
89
90 horizontalfeatures -> discretionary;
91 vert -> discretionary;
92
93 decision2->stch;
94
95 BUZZ;
96
97 subgraph shapers {
98 subgraph cluster_arabic {
99 bgcolor="lightyellow"
100 label="Arabic, Syriac";
101 stch [ style="filled", fillcolor="lightgreen",label="stch"];
102 ccmplocl [ style="filled", label="ccmp|locl", fillcolor="lightgreen"];
103 arabicfeatures [label="isol|fina|fin2|fin3|medi|med2|init", style="filled", fillcolor="lightgoldenrod"];
104 arabicfeatures2 [label="rclt|calt", style="filled",fillcolor="lightpink"];
105 rlig[style="filled",fillcolor="lightpink"];
106 mset [fillcolor="lightpink",style="filled"]
107 stch->ccmplocl->arabicfeatures->rlig->arabicfeatures2->mset;
108 }
109 mset->BUZZ:n;
110
111 subgraph cluster_hangul {
112 bgcolor="lightyellow"
113 label="Hangul";
114 hangulfeatures [label="ljmo|vjmo|tjmo", style="filled",fillcolor="lightgoldenrod"]
115 }
116 hangulfeatures->BUZZ:n;
117
118 subgraph cluster_indic {
119 label="Indic";
120 bgcolor="lightyellow"
121 // Preprocessing
122 loclccmpindic [label="locl†|ccmp†",style=filled,fillcolor="lightgreen"];
123 node[style=filled,fillcolor="lightgreen"];
124 nukt [label="nukt†"];
125 akhn [label="akhn†"];
126 loclccmpindic->indic_reorder_1->nukt->akhn;
127 indic_reorder_1[label="Initial reordering", fontname="Verdana",fillcolor="lightgrey",shape=ellipse,style=filled]
128
129 // Orthographic
130 node[style=filled,fillcolor="lightblue"]
131 rphf [label="rphf⁵"];
132 rkpf [label="rkpf†"];
133 pref [label="pref⁶"];
134 blwf [label="blwf⁷"];
135 abvf [label="abvf⁸"];
136 half [label="half⁹"];
137 pstf [label="pstf⁸"];
138 vatu [label="vatu†"];
139 cjct [label="cjct†"];
140 akhn ->rphf -> rkpf -> pref -> blwf -> abvf -> half -> pstf -> vatu -> cjct;
141 // Typographic presentation
142 indic_typographic[style=filled,fillcolor="lightpink",label="init|pres|abvs|blws|psts|haln"]
143 indic_reorder_2[label="Final reordering",fillcolor="lightgrey",fontname="Verdana", shape=ellipse,style=filled]
144 cjct->indic_reorder_2->indic_typographic;
145
146 notes2 [fontname="Verdana",shape=plaintext,style="",label=<<table border="0" cellborder="0" cellspacing="0">
147 <tr><td align="right">⁵ rphf is scoped to pre-base ra+halant sequences</td></tr>
148 <tr><td align="right">⁶ pref is scoped to the two glyphs after the base; outputs are reordered</td></tr>
149 <tr><td align="right">⁷ blwf is usually scoped to the whole syllable, except in Telugu and Kannada where it is post-base</td></tr>
150 <tr><td align="right">⁸ abvf and pstf are scoped to post-base</td></tr>
151 <tr><td align="right">⁹ half is scoped to pre-base</td></tr>
152 </table>
153 >];
154 indic_typographic -> notes2 [style=invis];
155 }
156
157
158 subgraph cluster_khmer {
159 label="Khmer";
160 bgcolor="lightyellow"
161
162 khmerbasic [style=filled,fillcolor="lightgreen",label="locl†|ccmp†|pref†|bwlf†|abvf†|pstf†|cfar†"]
163 khmerother [style=filled,fillcolor="lightpink",label="pres|abvs|blws|psts"]
164 khmerbasic -> khmerother -> khmerclig;
165 khmerclig [label="clig",style=filled,fillcolor="lightpink"];
166 }
167
168 subgraph cluster_myanmar {
169 label="Myanmar";
170 bgcolor="lightyellow"
171 loclccmpmyanmar [label="locl†|ccmp†",style=filled,fillcolor="lightgreen"];
172 rphfmymr [label="rphf†",style=filled,fillcolor="lightblue"]
173 prefmymr [label="pref†",style=filled,fillcolor="lightblue"]
174 blwfmymr [label="blwf†",style=filled,fillcolor="lightblue"]
175 pstfmymr [label="pstf†",style=filled,fillcolor="lightblue"]
176 myanmarother [label="pres|abvs|blws|psts",style=filled,fillcolor="lightpink"];
177 reorder_myanmar[label="Reordering", shape=ellipse,style=filled,fontname="Verdana"]
178 loclccmpmyanmar -> reorder_myanmar-> rphfmymr -> prefmymr -> blwfmymr -> pstfmymr -> myanmarother;
179 }
180
181 subgraph cluster_use {
182 label="Universal Shaping Engine"
183 bgcolor="lightyellow"
184 use_preprocessing [style=filled, label="locl†|ccmp†|nukt†|akhn†", fillcolor="lightgreen"];
185 // Reoredering
186 rphfuse [label="rphf¹⁰", style=filled, fillcolor="lightcoral"];
187 prefuse [label="pref¹¹", style=filled, fillcolor="lightcoral"];
188 // Orthographic
189 orthographicuse [label="rkrf†|abvf†|blwf†|half†|pstf†|vatu†|cjct†", style="filled", fillcolor="lightblue"];
190 topographicaluse [label="isol|init|medi|fina", style="filled", fillcolor="lightgoldenrod"];
191 typographicaluse [label="abvs|blws|haln|pres|psts", style="filled", fillcolor="lightpink"];
192 reorder_use[label="Reordering", shape=ellipse,style=filled,fontname="Verdana"]
193 use_preprocessing -> rphfuse -> prefuse->orthographicuse ->reorder_use -> topographicaluse -> typographicaluse;
194 notes3 [fontname="Verdana",shape=plaintext,label=<<table border="0" cellborder="0" cellspacing="0">
195 <tr><td align="left">¹⁰ Outputs are reordered as category R</td></tr>
196 <tr><td align="left">¹¹ Outputs are reordered to before base</td></tr>
197 </table>
198 >];
199 typographicaluse -> notes3 [style=invis];
200 }
201
202 }
203
204 indic_typographic->BUZZ:n;
205 typographicaluse->BUZZ:n;
206 khmerclig -> BUZZ:n;
207 myanmarother -> BUZZ:n;
208
209
210 decision2->hangulfeatures;
211 decision2->loclccmpindic;
212 decision2->khmerbasic;
213 decision2->loclccmpmyanmar;
214 decision2->use_preprocessing;
215 decision2->BUZZ [label=" Hebrew, Thai,\n Lao, other"];
216
217 notes [fontname="Verdana",shape=box,label=<<table border="0" cellborder="0" cellspacing="0">
218 <tr><td align="left">
219 <b>Indic</b> scripts are: Bengali, Devanagari,
220 Gujarati, Gurmukhi, Kannada,
221 Malayalam, Oriya, Tamil,
222 Telugu
223 </td></tr>
224
225 <tr><td align="left">
226 <b>USE</b> scripts are:
227 Adlam, Ahom, Balinese, Batak, Bhaiksuki, Brahmi, Buginese,
228 Buhid, Chakma, Cham, Chorasmian, Dives Akuru, Dogra, Duployan,
229 </td></tr>
230 <tr><td align="left">
231 Egyptian hieroglyphs, Elymaic, Grantha, Gunjala Ggondi, Hanifi Rohingya,
232 Hanunoo, Javanese, Kaithi, Kayah li, Kharoshthi, Khojki,
233 </td></tr>
234 <tr><td align="left">
235 Khudawadi, Lepcha, Limbu, Mahajani, Makasar, Mandaic, Manichaean,
236 Marchen, Masaram Gondi, Medefaidrin, Meetei Mayek, Miao, Modi,
237 </td></tr>
238 <tr><td align="left">
239 Mongolian, Multani, Nandinagari, Newa, Nko, Nyiakeng Puachue Hmong,
240 Old Sogdian, Pahawh Hmong, Phags Pa, Psalter Pahlavi, Rejang,
241 </td></tr>
242 <tr><td align="left">
243 Saurashtra, Sharada, Siddham, Sinhala, Sogdian, Soyombo, Sundanese,
244 Syloti Nagri, Tagalog, Tagbanwa, Tai Le, Tai Tham, Tai Viet,
245 </td></tr>
246 <tr><td align="left">
247 Takri, Tibetan, Tifinagh, Tirhuta, Wancho, Zanabazar square,
248 </td></tr>
249
250 </table>>]
251
252
253 footnote[fontname="Verdana",label=<<table border="0" cellborder="0" cellspacing="0">
254 <tr><td align="left">† Feature is scoped to each syllable</td></tr>
255 <tr><td align="left">‡ All topographic features are scoped based on topographic position</td></tr>
256 </table>>];
257 notes3->footnote[style=invis];
258
259 }