1digraph { 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 8subgraph { 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 97subgraph 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"]; 105rlig[style="filled",fillcolor="lightpink"]; 106mset [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 217notes [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"> 231Egyptian hieroglyphs, Elymaic, Grantha, Gunjala Ggondi, Hanifi Rohingya, 232 Hanunoo, Javanese, Kaithi, Kayah li, Kharoshthi, Khojki, 233</td></tr> 234 <tr><td align="left"> 235Khudawadi, Lepcha, Limbu, Mahajani, Makasar, Mandaic, Manichaean, 236 Marchen, Masaram Gondi, Medefaidrin, Meetei Mayek, Miao, Modi, 237</td></tr> 238 <tr><td align="left"> 239Mongolian, 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"> 243Saurashtra, 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"> 247Takri, 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} 260