Mercurial > hgrepos > Python2 > PyMuPDF
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 } |
