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

@@ -231,9 +231,9 @@ required for an `.otf` font to work with `SwiftMath`. If you generate
(and test) any other fonts please contribute them back to this project for
others to benefit.
Note: The `KpMath-Light` and `KpMath-Sans` fonts current do not correctly
render very large radicals correctly. It appears that the font files do
not correctly define the offsets required to typeset these glyphs. If
Note: The `KpMath-Light` and `KpMath-Sans` fonts currently incorrectly
render very large radicals. It appears that the font files do
not properly define the offsets required to typeset these glyphs. If
anyone can fix this, it would be greatly appreciated.
##### Text Color
@@ -246,7 +246,7 @@ label.textColor = .red
It is also possible to set different colors for different parts of the
equation. Just access the `displayList` field and set the `textColor`
on the underlying displays that you want to change the color of.
of the underlying displays of which you want to change the color.
##### Custom Commands
You can define your own commands that are not already predefined. This is

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()