Updated some fonts and added python script to create plist files.

This commit is contained in:
Michael Griebling
2024-10-06 17:56:24 -04:00
parent 99dc4ad8de
commit de4484382d
6 changed files with 875 additions and 288 deletions

View File

@@ -2506,8 +2506,22 @@
<integer>276</integer>
<key>ocirc</key>
<integer>-220</integer>
<key>overleftarrow</key>
<integer>-268</integer>
<key>overleftharpoon</key>
<integer>-268</integer>
<key>overleftrightarrow</key>
<integer>-335</integer>
<key>overrightarc</key>
<integer>-275</integer>
<key>overrightarrow</key>
<integer>-268</integer>
<key>overrightharpoon</key>
<integer>-268</integer>
<key>widebreve</key>
<integer>-220</integer>
<key>widebreve.h0</key>
<integer>-120</integer>
<key>widecheck</key>
<integer>-220</integer>
<key>widecheck.h0</key>
@@ -2534,7 +2548,7 @@
<key>DisplayOperatorMinHeight</key>
<integer>1500</integer>
<key>FlattenedAccentBaseHeight</key>
<integer>670</integer>
<integer>650</integer>
<key>FractionDenomDisplayStyleGapMin</key>
<integer>150</integer>
<key>FractionDenominatorDisplayStyleShiftDown</key>
@@ -2568,15 +2582,15 @@
<key>OverbarVerticalGap</key>
<integer>150</integer>
<key>RadicalDegreeBottomRaisePercent</key>
<integer>55</integer>
<integer>60</integer>
<key>RadicalDisplayStyleVerticalGap</key>
<integer>170</integer>
<key>RadicalExtraAscender</key>
<integer>50</integer>
<key>RadicalKernAfterDegree</key>
<integer>-560</integer>
<integer>-600</integer>
<key>RadicalKernBeforeDegree</key>
<integer>280</integer>
<integer>300</integer>
<key>RadicalRuleThickness</key>
<integer>50</integer>
<key>RadicalVerticalGap</key>
@@ -2642,8 +2656,73 @@
</dict>
<key>h_variants</key>
<dict>
<key>Leftarrow</key>
<array>
<string>Leftarrow</string>
<string>Longleftarrow</string>
</array>
<key>Leftrightarrow</key>
<array>
<string>Leftrightarrow</string>
<string>Longleftrightarrow</string>
</array>
<key>Mapsfrom</key>
<array>
<string>Mapsfrom</string>
<string>Longmapsfrom</string>
</array>
<key>Mapsto</key>
<array>
<string>Mapsto</string>
<string>Longmapsto</string>
</array>
<key>Rightarrow</key>
<array>
<string>Rightarrow</string>
<string>Longrightarrow</string>
</array>
<key>equal</key>
<array/>
<key>equiv</key>
<array/>
<key>hookleftarrow</key>
<array/>
<key>hookrightarrow</key>
<array/>
<key>leftarrow</key>
<array>
<string>leftarrow</string>
<string>longleftarrow</string>
</array>
<key>leftarrowtail</key>
<array/>
<key>leftharpoondown</key>
<array/>
<key>leftharpoonup</key>
<array/>
<key>leftrightarrow</key>
<array>
<string>leftrightarrow</string>
<string>longleftrightarrow</string>
</array>
<key>leftrightarrows</key>
<array/>
<key>leftrightharpoons</key>
<array/>
<key>mapsfrom</key>
<array>
<string>mapsfrom</string>
<string>longmapsfrom</string>
</array>
<key>mapsto</key>
<array>
<string>mapsto</string>
<string>longmapsto</string>
</array>
<key>mathunderbar</key>
<array/>
<key>minus</key>
<array/>
<key>overbrace</key>
<array>
<string>overbrace</string>
@@ -2663,6 +2742,10 @@
<array/>
<key>overleftharpoon</key>
<array/>
<key>overleftrightarrow</key>
<array>
<string>overleftrightarrow.h1</string>
</array>
<key>overparen</key>
<array>
<string>overparen</string>
@@ -2686,6 +2769,25 @@
<array/>
<key>overrightharpoon</key>
<array/>
<key>rightarrow</key>
<array>
<string>rightarrow</string>
<string>longrightarrow</string>
</array>
<key>rightarrowtail</key>
<array/>
<key>rightharpoondown</key>
<array/>
<key>rightharpoonup</key>
<array/>
<key>rightleftarrows</key>
<array/>
<key>rightleftharpoons</key>
<array/>
<key>twoheadleftarrow</key>
<array/>
<key>twoheadrightarrow</key>
<array/>
<key>underbrace</key>
<array>
<string>underbrace</string>
@@ -2737,6 +2839,7 @@
<key>widebreve</key>
<array>
<string>widebreve</string>
<string>widebreve.h0</string>
<string>widebreve.h1</string>
<string>widebreve.h2</string>
<string>widebreve.h3</string>
@@ -4909,27 +5012,27 @@
<array>
<dict>
<key>advance</key>
<integer>1200</integer>
<integer>2700</integer>
<key>endConnector</key>
<integer>400</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>Vert.v2</string>
<string>Vert.v4</string>
<key>startConnector</key>
<integer>400</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>472</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>157</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>Vert.ex</string>
<key>startConnector</key>
<integer>157</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -4941,27 +5044,27 @@
<array>
<dict>
<key>advance</key>
<integer>1200</integer>
<integer>2700</integer>
<key>endConnector</key>
<integer>400</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>Vvert.v2</string>
<string>Vvert.v4</string>
<key>startConnector</key>
<integer>400</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>472</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>157</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>Vvert.ex</string>
<key>startConnector</key>
<integer>157</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5049,39 +5152,39 @@
<array>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lBrack.bt</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>346</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>115</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>lBrack.ex</string>
<key>startConnector</key>
<integer>115</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lBrack.tp</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5093,63 +5196,63 @@
<array>
<dict>
<key>advance</key>
<integer>737</integer>
<integer>800</integer>
<key>endConnector</key>
<integer>246</integer>
<integer>70</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lbrace.bt</string>
<key>startConnector</key>
<integer>246</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>200</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>70</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>vbrace.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>777</integer>
<integer>1500</integer>
<key>endConnector</key>
<integer>259</integer>
<integer>70</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lbracemid</string>
<key>startConnector</key>
<integer>259</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>200</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>70</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>vbrace.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>737</integer>
<integer>800</integer>
<key>endConnector</key>
<integer>246</integer>
<integer>70</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lbrace.tp</string>
<key>startConnector</key>
<integer>246</integer>
<integer>70</integer>
</dict>
</array>
</dict>
@@ -5161,39 +5264,39 @@
<array>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lbrack.bt</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>lbrack.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lbrack.tp</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5205,27 +5308,27 @@
<array>
<dict>
<key>advance</key>
<integer>480</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>160</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>lceil.ex</string>
<key>startConnector</key>
<integer>160</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>1531</integer>
<integer>2700</integer>
<key>endConnector</key>
<integer>510</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lceil.tp</string>
<string>lceil.v4</string>
<key>startConnector</key>
<integer>510</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5237,27 +5340,27 @@
<array>
<dict>
<key>advance</key>
<integer>1531</integer>
<integer>2700</integer>
<key>endConnector</key>
<integer>510</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lfloor.bt</string>
<string>lfloor.v4</string>
<key>startConnector</key>
<integer>510</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>480</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>160</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>lceil.ex</string>
<key>startConnector</key>
<integer>160</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5269,39 +5372,103 @@
<array>
<dict>
<key>advance</key>
<integer>897</integer>
<integer>1700</integer>
<key>endConnector</key>
<integer>299</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lparen.bt</string>
<key>startConnector</key>
<integer>299</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>lparen.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>897</integer>
<integer>1700</integer>
<key>endConnector</key>
<integer>299</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>lparen.tp</string>
<key>startConnector</key>
<integer>299</integer>
<integer>133</integer>
</dict>
</array>
</dict>
<key>mid</key>
<dict>
<key>italic</key>
<integer>0</integer>
<key>parts</key>
<array>
<dict>
<key>advance</key>
<integer>925</integer>
<key>endConnector</key>
<integer>308</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>mid</string>
<key>startConnector</key>
<integer>308</integer>
</dict>
<dict>
<key>advance</key>
<integer>925</integer>
<key>endConnector</key>
<integer>308</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>mid</string>
<key>startConnector</key>
<integer>308</integer>
</dict>
</array>
</dict>
<key>parallel</key>
<dict>
<key>italic</key>
<integer>0</integer>
<key>parts</key>
<array>
<dict>
<key>advance</key>
<integer>925</integer>
<key>endConnector</key>
<integer>308</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>parallel</string>
<key>startConnector</key>
<integer>308</integer>
</dict>
<dict>
<key>advance</key>
<integer>925</integer>
<key>endConnector</key>
<integer>308</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>parallel</string>
<key>startConnector</key>
<integer>308</integer>
</dict>
</array>
</dict>
@@ -5313,39 +5480,39 @@
<array>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rBrack.bt</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>rBrack.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rBrack.tp</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5357,63 +5524,63 @@
<array>
<dict>
<key>advance</key>
<integer>737</integer>
<integer>800</integer>
<key>endConnector</key>
<integer>246</integer>
<integer>70</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rbrace.bt</string>
<key>startConnector</key>
<integer>246</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>200</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>70</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>vbrace.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>777</integer>
<integer>1500</integer>
<key>endConnector</key>
<integer>259</integer>
<integer>70</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rbracemid</string>
<key>startConnector</key>
<integer>259</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>200</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>70</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>vbrace.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>70</integer>
</dict>
<dict>
<key>advance</key>
<integer>737</integer>
<integer>800</integer>
<key>endConnector</key>
<integer>246</integer>
<integer>70</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rbrace.tp</string>
<key>startConnector</key>
<integer>246</integer>
<integer>70</integer>
</dict>
</array>
</dict>
@@ -5425,39 +5592,39 @@
<array>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rbrack.bt</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>rbrack.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>895</integer>
<integer>1550</integer>
<key>endConnector</key>
<integer>298</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rbrack.tp</string>
<key>startConnector</key>
<integer>298</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5469,27 +5636,27 @@
<array>
<dict>
<key>advance</key>
<integer>480</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>160</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>rceil.ex</string>
<key>startConnector</key>
<integer>160</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>1531</integer>
<integer>2700</integer>
<key>endConnector</key>
<integer>510</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rceil.tp</string>
<string>rceil.v4</string>
<key>startConnector</key>
<integer>510</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5501,27 +5668,27 @@
<array>
<dict>
<key>advance</key>
<integer>1531</integer>
<integer>2700</integer>
<key>endConnector</key>
<integer>510</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rfloor.bt</string>
<string>rfloor.v4</string>
<key>startConnector</key>
<integer>510</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>480</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>160</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>rceil.ex</string>
<key>startConnector</key>
<integer>160</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5533,39 +5700,39 @@
<array>
<dict>
<key>advance</key>
<integer>897</integer>
<integer>1700</integer>
<key>endConnector</key>
<integer>299</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rparen.bt</string>
<key>startConnector</key>
<integer>299</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>326</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>109</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>rparen.ex</string>
<key>startConnector</key>
<integer>109</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>897</integer>
<integer>1700</integer>
<key>endConnector</key>
<integer>299</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>rparen.tp</string>
<key>startConnector</key>
<integer>299</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5697,27 +5864,27 @@
<array>
<dict>
<key>advance</key>
<integer>1200</integer>
<integer>2700</integer>
<key>endConnector</key>
<integer>400</integer>
<integer>133</integer>
<key>extender</key>
<false/>
<key>glyph</key>
<string>vert.v2</string>
<string>vert.v4</string>
<key>startConnector</key>
<integer>400</integer>
<integer>133</integer>
</dict>
<dict>
<key>advance</key>
<integer>472</integer>
<integer>400</integer>
<key>endConnector</key>
<integer>157</integer>
<integer>133</integer>
<key>extender</key>
<true/>
<key>glyph</key>
<string>vert.ex</string>
<key>startConnector</key>
<integer>157</integer>
<integer>133</integer>
</dict>
</array>
</dict>
@@ -5730,9 +5897,13 @@
<string>Bbbsum.v1</string>
</array>
<key>Downarrow</key>
<array/>
<array>
<string>Downarrow</string>
</array>
<key>Uparrow</key>
<array/>
<array>
<string>Uparrow</string>
</array>
<key>Updownarrow</key>
<array/>
<key>Vert</key>
@@ -5740,12 +5911,16 @@
<string>Vert</string>
<string>Vert.v1</string>
<string>Vert.v2</string>
<string>Vert.v3</string>
<string>Vert.v4</string>
</array>
<key>Vvert</key>
<array>
<string>Vvert</string>
<string>Vvert.v1</string>
<string>Vvert.v2</string>
<string>Vvert.v3</string>
<string>Vvert.v4</string>
</array>
<key>awint</key>
<array>
@@ -5846,7 +6021,9 @@
<string>coprodsans.v1</string>
</array>
<key>downarrow</key>
<array/>
<array>
<string>downarrow</string>
</array>
<key>fint</key>
<array>
<string>fint</string>
@@ -5991,6 +6168,10 @@
<string>slash.v3</string>
<string>slash.v4</string>
</array>
<key>mid</key>
<array>
<string>mid</string>
</array>
<key>oiiint</key>
<array>
<string>oiiint</string>
@@ -6066,6 +6247,10 @@
<string>ointcw</string>
<string>ointcw.v1</string>
</array>
<key>parallel</key>
<array>
<string>parallel</string>
</array>
<key>prod</key>
<array>
<string>prod</string>
@@ -6201,7 +6386,9 @@
<string>sumsans.v1</string>
</array>
<key>uparrow</key>
<array/>
<array>
<string>uparrow</string>
</array>
<key>updownarrow</key>
<array/>
<key>varidotsint</key>
@@ -6304,6 +6491,8 @@
<string>vert</string>
<string>vert.v1</string>
<string>vert.v2</string>
<string>vert.v3</string>
<string>vert.v4</string>
</array>
</dict>
<key>version</key>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,205 @@
#!/usr/local/bin/python3
import plistlib
import sys
from fontTools.ttLib import TTFont
def usage(code):
print('Usage math_table_to_plist.py <fontfile> <plistfile>')
sys.exit(code)
def process_font(font_file, out_file):
font = TTFont(font_file)
math_table = font['MATH'].table
constants = get_constants(math_table)
italic_c = get_italic_correction(math_table)
v_variants = get_v_variants(math_table)
h_variants = get_h_variants(math_table)
assembly = get_v_assembly(math_table)
accents = get_accent_attachments(math_table)
pl = {
"version" : "1.3",
"constants": constants,
"v_variants" : v_variants,
"h_variants" : h_variants,
"italic" : italic_c,
"accents" : accents,
"v_assembly" : assembly }
ofile = open(out_file, 'w+b')
plistlib.dump(pl, ofile)
ofile.close()
def get_constants(math_table):
constants = math_table.MathConstants
if constants is None:
raise 'Cannot find MathConstants in MATH table'
int_consts = [ 'ScriptPercentScaleDown',
'ScriptScriptPercentScaleDown',
'DelimitedSubFormulaMinHeight',
'DisplayOperatorMinHeight',
'RadicalDegreeBottomRaisePercent']
consts = { c : getattr(constants, c) for c in int_consts }
record_consts = [ 'MathLeading',
'AxisHeight',
'AccentBaseHeight',
'FlattenedAccentBaseHeight',
'SubscriptShiftDown',
'SubscriptTopMax',
'SubscriptBaselineDropMin',
'SuperscriptShiftUp',
'SuperscriptShiftUpCramped',
'SuperscriptBottomMin',
'SuperscriptBaselineDropMax',
'SubSuperscriptGapMin',
'SuperscriptBottomMaxWithSubscript',
'SpaceAfterScript',
'UpperLimitGapMin',
'UpperLimitBaselineRiseMin',
'LowerLimitGapMin',
'LowerLimitBaselineDropMin',
'StackTopShiftUp',
'StackTopDisplayStyleShiftUp',
'StackBottomShiftDown',
'StackBottomDisplayStyleShiftDown',
'StackGapMin',
'StackDisplayStyleGapMin',
'StretchStackTopShiftUp',
'StretchStackBottomShiftDown',
'StretchStackGapAboveMin',
'StretchStackGapBelowMin',
'FractionNumeratorShiftUp',
'FractionNumeratorDisplayStyleShiftUp',
'FractionDenominatorShiftDown',
'FractionDenominatorDisplayStyleShiftDown',
'FractionNumeratorGapMin',
'FractionNumDisplayStyleGapMin',
'FractionRuleThickness',
'FractionDenominatorGapMin',
'FractionDenomDisplayStyleGapMin',
'SkewedFractionHorizontalGap',
'SkewedFractionVerticalGap',
'OverbarVerticalGap',
'OverbarRuleThickness',
'OverbarExtraAscender',
'UnderbarVerticalGap',
'UnderbarRuleThickness',
'UnderbarExtraDescender',
'RadicalVerticalGap',
'RadicalDisplayStyleVerticalGap',
'RadicalRuleThickness',
'RadicalExtraAscender',
'RadicalKernBeforeDegree',
'RadicalKernAfterDegree',
]
consts_2 = { c : getattr(constants, c).Value for c in record_consts }
consts.update(consts_2)
variants = math_table.MathVariants
consts['MinConnectorOverlap'] = variants.MinConnectorOverlap
return consts
def get_italic_correction(math_table):
glyph_info = math_table.MathGlyphInfo
if glyph_info is None:
raise "Cannot find MathGlyphInfo in MATH table."
italic = glyph_info.MathItalicsCorrectionInfo
if italic is None:
raise "Cannot find Italic Correction in GlyphInfo"
glyphs = italic.Coverage.glyphs
count = italic.ItalicsCorrectionCount
records = italic.ItalicsCorrection
italic_dict = {}
for i in range(count):
name = glyphs[i]
record = records[i]
if record.DeviceTable is not None:
raise "Don't know how to process device table for italic correction."
italic_dict[name] = record.Value
return italic_dict
def get_accent_attachments(math_table):
glyph_info = math_table.MathGlyphInfo
if glyph_info is None:
raise "Cannot find MathGlyphInfo in MATH table."
attach = glyph_info.MathTopAccentAttachment
if attach is None:
raise "Cannot find Top Accent Attachment in GlyphInfo"
glyphs = attach.TopAccentCoverage.glyphs
count = attach.TopAccentAttachmentCount
records = attach.TopAccentAttachment
attach_dict = {}
for i in range(count):
name = glyphs[i]
record = records[i]
if record.DeviceTable is not None:
raise "Don't know how to process device table for accent attachment."
attach_dict[name] = record.Value
return attach_dict
def get_v_variants(math_table):
variants = math_table.MathVariants
vglyphs = variants.VertGlyphCoverage.glyphs
vconstruction = variants.VertGlyphConstruction
count = variants.VertGlyphCount
variant_dict = {}
for i in range(count):
name = vglyphs[i]
record = vconstruction[i]
glyph_variants = [x.VariantGlyph for x in
record.MathGlyphVariantRecord]
variant_dict[name] = glyph_variants
return variant_dict
def get_h_variants(math_table):
variants = math_table.MathVariants
hglyphs = variants.HorizGlyphCoverage.glyphs
hconstruction = variants.HorizGlyphConstruction
count = variants.HorizGlyphCount
variant_dict = {}
for i in range(count):
name = hglyphs[i]
record = hconstruction[i]
glyph_variants = [x.VariantGlyph for x in
record.MathGlyphVariantRecord]
variant_dict[name] = glyph_variants
return variant_dict
def get_v_assembly(math_table):
variants = math_table.MathVariants
vglyphs = variants.VertGlyphCoverage.glyphs
vconstruction = variants.VertGlyphConstruction
count = variants.VertGlyphCount
assembly_dict = {}
for i in range(count):
name = vglyphs[i]
record = vconstruction[i]
assembly = record.GlyphAssembly
if assembly is not None:
# There is an assembly for this glyph
italic = assembly.ItalicsCorrection.Value
parts = [part_dict(part) for part in assembly.PartRecords]
assembly_dict[name] = {
"italic" : assembly.ItalicsCorrection.Value,
"parts" : parts }
return assembly_dict
def part_dict(part):
return {
"glyph": part.glyph,
"startConnector" : part.StartConnectorLength,
"endConnector" : part.EndConnectorLength,
"advance" : part.FullAdvance,
"extender" : (part.PartFlags == 1) }
def main():
if len(sys.argv) != 3:
usage(1)
font_file = sys.argv[1]
plist_file = sys.argv[2]
process_font(font_file, plist_file)
if __name__ == '__main__':
main()