diff --git a/docs/features.dot b/docs/features.dot index 2d4eab7ec..f791f01b4 100644 --- a/docs/features.dot +++ b/docs/features.dot @@ -1,6 +1,6 @@ digraph { graph [outputorder=edgefirst]; - node [shape="record", fontname="Courier-Bold", fontsize=15]; + node [shape="record", fontname="Noto Sans Mono SemiBold", fontsize=15]; edge [fontname="Verdana", fontsize=12,labeldistance=7.5 ]; fontname="Verdana"; ranksep=0.02; nodesep=0.5; @@ -10,7 +10,7 @@ subgraph { preprocessing[style=filled,fillcolor="lightgreen",fontname="Verdana",label="Glyph pre-processing"]; orthographic[style=filled,fillcolor="lightblue",fontname="Verdana",label="Orthographic Unit Shaping"]; reordering[style=filled, fillcolor="lightcoral",fontname="Verdana",label="Reordering group (USE)"]; - topographic[style=filled,fillcolor="lightgoldenrod",fontname="Verdana",label="Topographical Features"]; + topographic[style=filled,fillcolor="lightgoldenrod",fontname="Verdana",label="Topographical Features‡"]; typographic[style=filled,fillcolor="lightpink",fontname="Verdana",label="Typographic Presentation"]; positioning[style=filled,fillcolor="lightsalmon",fontname="Verdana",label="Positioning"]; preprocessing->reordering->orthographic->topographic->typographic->positioning; @@ -20,8 +20,21 @@ subgraph { rvrn->decision1; ltrfeatures [label="{ltra|ltrm}", fillcolor="lightgreen",style="filled"]; - rtlfeatures [label="{rtla|rtlm}", fillcolor="lightgreen",style="filled"]; - fracfeatures [label="frac|numr|dnom", fillcolor="lightpink",style="filled"]; + { + rtlfeatures [label="{rtla|rtlm¹}", fillcolor="lightgreen",style="filled"]; + } + { + rank=same; + fracfeatures [label="frac²|numr³|dnom⁴", fillcolor="lightpink",style="filled"]; + fracnotes [fontname="Verdana",shape=plaintext,label=< + + + + +
¹ rtlm is scoped to characters with a Unicode mirroring property
² frac is scoped to numr + the slash + dnom
³ numr is scoped to all decimal numbers before a U+2044 FRACTION SLASH.
⁴ dnom is scoped to all decimal numbers after a U+2044 FRACTION SLASH.
+ >]; + + } rand [fillcolor="lightpink",style="filled"]; decision1 -> ltrfeatures [label="Left-to-right"]; @@ -35,7 +48,7 @@ subgraph { decision2 [shape="diamond", label="Script?",fontname="Verdana"]; -{rank=same; HARF; notes;} +{rank=same; HARF [label="{Harf|HARF}"]; notes;} rand -> trak -> HARF -> decision2; commonfeatures [shape=none,label=< @@ -50,7 +63,10 @@ subgraph {
> ]; + decision3 [shape="diamond", label="Script\ndirection?",fontname="Verdana"]; + + BUZZ [label="{Buzz|BUZZ}"]; BUZZ -> commonfeatures -> decision3; horizontalfeatures [ @@ -82,7 +98,7 @@ subgraph complexshapers { subgraph cluster_arabic { bgcolor="lightyellow" label="Arabic, Syriac"; - stch [ style="filled", fillcolor="lightgreen",label="ccmp|locl"]; + stch [ style="filled", fillcolor="lightgreen",label="stch"]; ccmplocl [ style="filled", label="ccmp|locl", fillcolor="lightgreen"]; arabicfeatures [label="isol|fina|fin2|fin3|medi|med2|init", style="filled", fillcolor="lightgoldenrod"]; arabicfeatures2 [label="rclt|calt", style="filled",fillcolor="lightpink"]; @@ -95,7 +111,7 @@ mset [fillcolor="lightpink",style="filled"] subgraph cluster_hangul { bgcolor="lightyellow" label="Hangul"; - hangulfeatures [label="ljmo|vjmo|tjmo", style="filled",fillcolor="lightblue"] + hangulfeatures [label="ljmo|vjmo|tjmo", style="filled",fillcolor="lightgoldenrod"] } hangulfeatures->BUZZ:n; @@ -103,25 +119,47 @@ mset [fillcolor="lightpink",style="filled"] label="Indic"; bgcolor="lightyellow" // Preprocessing - loclccmpindic [label="locl|ccmp",style=filled,fillcolor="lightgreen"]; + loclccmpindic [label="locl†|ccmp†",style=filled,fillcolor="lightgreen"]; node[style=filled,fillcolor="lightgreen"]; + nukt [label="nukt†"]; + akhn [label="akhn†"]; loclccmpindic->indic_reorder_1->nukt->akhn; indic_reorder_1[label="Initial reordering", fontname="Verdana",fillcolor="lightgrey",shape=ellipse,style=filled] // Orthographic node[style=filled,fillcolor="lightblue"] + rphf [label="rphf⁵"]; + rkpf [label="rkpf†"]; + pref [label="pref⁶"]; + blwf [label="blwf⁷"]; + abvf [label="abvf⁸"]; + half [label="half⁹"]; + pstf [label="pstf⁸"]; + vatu [label="vatu†"]; + cjct [label="cjct†"]; akhn ->rphf -> rkpf -> pref -> blwf -> abvf -> half -> pstf -> vatu -> cjct; // Typographic presentation indic_typographic[style=filled,fillcolor="lightpink",label="init|pres|abvs|blws|psts|haln"] indic_reorder_2[label="Final reordering",fillcolor="lightgrey",fontname="Verdana", shape=ellipse,style=filled] cjct->indic_reorder_2->indic_typographic; + + notes2 [fontname="Verdana",shape=plaintext,style="",label=< + + + + + +
⁵ rphf is scoped to pre-base ra+halant sequences
⁶ pref is scoped to the two glyphs after the base; outputs are reordered
⁷ blwf is usually scoped to the whole syllable, except in Telugu and Kannada where it is post-base
⁸ abvf and pstf are scoped to post-base
⁹ half is scoped to pre-base
+>]; + indic_typographic -> notes2 [style=invis]; } + subgraph cluster_khmer { label="Khmer"; bgcolor="lightyellow" - khmerbasic [style=filled,fillcolor="lightgreen",label="locl|ccmp|pref|bwlf|abvf|pstf|cfar"] + khmerbasic [style=filled,fillcolor="lightgreen",label="locl†|ccmp†|pref†|bwlf†|abvf†|pstf†|cfar†"] khmerother [style=filled,fillcolor="lightpink",label="pres|abvs|blws|psts"] khmerbasic -> khmerother -> khmerclig; khmerclig [label="clig",style=filled,fillcolor="lightpink"]; @@ -130,11 +168,11 @@ mset [fillcolor="lightpink",style="filled"] subgraph cluster_myanmar { label="Myanmar"; bgcolor="lightyellow" - loclccmpmyanmar [label="locl|ccmp",style=filled,fillcolor="lightgreen"]; - rphfmymr [label="rphf",style=filled,fillcolor="lightblue"] - prefmymr [label="pref",style=filled,fillcolor="lightblue"] - blwfmymr [label="blwf",style=filled,fillcolor="lightblue"] - pstfmymr [label="pstf",style=filled,fillcolor="lightblue"] + loclccmpmyanmar [label="locl†|ccmp†",style=filled,fillcolor="lightgreen"]; + rphfmymr [label="rphf†",style=filled,fillcolor="lightblue"] + prefmymr [label="pref†",style=filled,fillcolor="lightblue"] + blwfmymr [label="blwf†",style=filled,fillcolor="lightblue"] + pstfmymr [label="pstf†",style=filled,fillcolor="lightblue"] myanmarother [label="pres|abvs|blws|psts",style=filled,fillcolor="lightpink"]; reorder_myanmar[label="Reordering", shape=ellipse,style=filled,fontname="Verdana"] loclccmpmyanmar -> reorder_myanmar-> rphfmymr -> prefmymr -> blwfmymr -> pstfmymr -> myanmarother; @@ -143,16 +181,22 @@ mset [fillcolor="lightpink",style="filled"] subgraph cluster_use { label="Universal Shaping Engine" bgcolor="lightyellow" - use_preprocessing [style=filled, label="locl|ccmp|nukt|akhn", fillcolor="lightgreen"]; + use_preprocessing [style=filled, label="locl†|ccmp†|nukt†|akhn†", fillcolor="lightgreen"]; // Reoredering - rphfuse [label="rphf", style=filled, fillcolor="lightcoral"]; - prefuse [label="pref", style=filled, fillcolor="lightcoral"]; + rphfuse [label="rphf¹⁰", style=filled, fillcolor="lightcoral"]; + prefuse [label="pref¹¹", style=filled, fillcolor="lightcoral"]; // Orthographic - orthographicuse [label="rkrf|abvf|blwf|half|pstf|vatu|cjct", style="filled", fillcolor="lightblue"]; + orthographicuse [label="rkrf†|abvf†|blwf†|half†|pstf†|vatu†|cjct†", style="filled", fillcolor="lightblue"]; topographicaluse [label="isol|init|medi|fina", style="filled", fillcolor="lightgoldenrod"]; typographicaluse [label="abvs|blws|haln|pres|psts", style="filled", fillcolor="lightpink"]; reorder_use[label="Reordering", shape=ellipse,style=filled,fontname="Verdana"] use_preprocessing -> rphfuse -> prefuse->orthographicuse ->reorder_use -> topographicaluse -> typographicaluse; + notes3 [fontname="Verdana",shape=plaintext,label=< + + +
¹⁰ Outputs are reordered as category R
¹¹ Outputs are reordered to before base
+ >]; + typographicaluse -> notes3 [style=invis]; } } @@ -170,7 +214,6 @@ mset [fillcolor="lightpink",style="filled"] decision2->use_preprocessing; decision2->BUZZ [label=" Hebrew, Thai,\n Lao, other"]; - notes [fontname="Verdana",shape=box,label=<
Indic scripts are: Bengali, Devanagari, @@ -205,4 +248,12 @@ Takri, Tibetan, Tifinagh, Tirhuta, Wancho, Zanabazar square,
>] + + + footnote[fontname="Verdana",label=< + + +
† Feature is scoped to each syllable
‡ All topographic features are scoped based on topographic position
>]; + notes3->footnote[style=invis]; + }