cffsubr
Advanced tools
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>ascender</key> | ||
| <integer>800</integer> | ||
| <key>capHeight</key> | ||
| <integer>700</integer> | ||
| <key>descender</key> | ||
| <integer>-200</integer> | ||
| <key>familyName</key> | ||
| <string>Font</string> | ||
| <key>guidelines</key> | ||
| <array/> | ||
| <key>italicAngle</key> | ||
| <integer>0</integer> | ||
| <key>openTypeHeadCreated</key> | ||
| <string>2024/08/07 17:44:51</string> | ||
| <key>postscriptBlueValues</key> | ||
| <array> | ||
| <integer>-16</integer> | ||
| <integer>0</integer> | ||
| <integer>500</integer> | ||
| <integer>516</integer> | ||
| <integer>700</integer> | ||
| <integer>716</integer> | ||
| <integer>800</integer> | ||
| <integer>816</integer> | ||
| </array> | ||
| <key>postscriptFamilyBlues</key> | ||
| <array/> | ||
| <key>postscriptFamilyOtherBlues</key> | ||
| <array/> | ||
| <key>postscriptFontName</key> | ||
| <string>Font-Black</string> | ||
| <key>postscriptOtherBlues</key> | ||
| <array> | ||
| <integer>-216</integer> | ||
| <integer>-200</integer> | ||
| </array> | ||
| <key>postscriptStemSnapH</key> | ||
| <array/> | ||
| <key>postscriptStemSnapV</key> | ||
| <array/> | ||
| <key>styleName</key> | ||
| <string>Black</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>versionMajor</key> | ||
| <integer>1</integer> | ||
| <key>versionMinor</key> | ||
| <integer>0</integer> | ||
| <key>xHeight</key> | ||
| <integer>500</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>.notdef</key> | ||
| <string>_notdef.glif</string> | ||
| <key>iamaglyph</key> | ||
| <string>iamaglyph.glif</string> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <array> | ||
| <array> | ||
| <string>public.default</string> | ||
| <string>glyphs</string> | ||
| </array> | ||
| </array> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>public.glyphOrder</key> | ||
| <array> | ||
| <string>.notdef</string> | ||
| <string>iamaglyph</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>creator</key> | ||
| <string>com.github.fonttools.ufoLib</string> | ||
| <key>formatVersion</key> | ||
| <integer>3</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>ascender</key> | ||
| <integer>800</integer> | ||
| <key>capHeight</key> | ||
| <integer>700</integer> | ||
| <key>descender</key> | ||
| <integer>-200</integer> | ||
| <key>familyName</key> | ||
| <string>Font</string> | ||
| <key>guidelines</key> | ||
| <array/> | ||
| <key>italicAngle</key> | ||
| <integer>0</integer> | ||
| <key>openTypeHeadCreated</key> | ||
| <string>2024/08/07 17:44:51</string> | ||
| <key>postscriptBlueValues</key> | ||
| <array> | ||
| <integer>-16</integer> | ||
| <integer>0</integer> | ||
| <integer>500</integer> | ||
| <integer>516</integer> | ||
| <integer>700</integer> | ||
| <integer>716</integer> | ||
| <integer>800</integer> | ||
| <integer>816</integer> | ||
| </array> | ||
| <key>postscriptFamilyBlues</key> | ||
| <array/> | ||
| <key>postscriptFamilyOtherBlues</key> | ||
| <array/> | ||
| <key>postscriptFontName</key> | ||
| <string>Font-ExtraLight</string> | ||
| <key>postscriptOtherBlues</key> | ||
| <array> | ||
| <integer>-216</integer> | ||
| <integer>-200</integer> | ||
| </array> | ||
| <key>postscriptStemSnapH</key> | ||
| <array/> | ||
| <key>postscriptStemSnapV</key> | ||
| <array/> | ||
| <key>styleName</key> | ||
| <string>Thin</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>versionMajor</key> | ||
| <integer>1</integer> | ||
| <key>versionMinor</key> | ||
| <integer>0</integer> | ||
| <key>xHeight</key> | ||
| <integer>500</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>.notdef</key> | ||
| <string>_notdef.glif</string> | ||
| <key>iamaglyph</key> | ||
| <string>iamaglyph.glif</string> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <array> | ||
| <array> | ||
| <string>public.default</string> | ||
| <string>glyphs</string> | ||
| </array> | ||
| </array> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>public.glyphOrder</key> | ||
| <array> | ||
| <string>.notdef</string> | ||
| <string>iamaglyph</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>creator</key> | ||
| <string>com.github.fonttools.ufoLib</string> | ||
| <key>formatVersion</key> | ||
| <integer>3</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>ascender</key> | ||
| <integer>800</integer> | ||
| <key>capHeight</key> | ||
| <integer>700</integer> | ||
| <key>descender</key> | ||
| <integer>-200</integer> | ||
| <key>familyName</key> | ||
| <string>OverlappingPoints</string> | ||
| <key>guidelines</key> | ||
| <array/> | ||
| <key>italicAngle</key> | ||
| <integer>0</integer> | ||
| <key>openTypeHeadCreated</key> | ||
| <string>2024/08/07 17:44:51</string> | ||
| <key>postscriptBlueValues</key> | ||
| <array> | ||
| <integer>-16</integer> | ||
| <integer>0</integer> | ||
| <integer>500</integer> | ||
| <integer>516</integer> | ||
| <integer>700</integer> | ||
| <integer>716</integer> | ||
| <integer>800</integer> | ||
| <integer>816</integer> | ||
| </array> | ||
| <key>postscriptFamilyBlues</key> | ||
| <array/> | ||
| <key>postscriptFamilyOtherBlues</key> | ||
| <array/> | ||
| <key>postscriptFontName</key> | ||
| <string>OverlappingPoints-Regular</string> | ||
| <key>postscriptOtherBlues</key> | ||
| <array> | ||
| <integer>-216</integer> | ||
| <integer>-200</integer> | ||
| </array> | ||
| <key>postscriptStemSnapH</key> | ||
| <array/> | ||
| <key>postscriptStemSnapV</key> | ||
| <array/> | ||
| <key>styleName</key> | ||
| <string>Black</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>versionMajor</key> | ||
| <integer>1</integer> | ||
| <key>versionMinor</key> | ||
| <integer>0</integer> | ||
| <key>xHeight</key> | ||
| <integer>500</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>.notdef</key> | ||
| <string>_notdef.glif</string> | ||
| <key>iamaglyph</key> | ||
| <string>iamaglyph.glif</string> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>color</key> | ||
| <string>0.5,0,0.5,0.7</string> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <array> | ||
| <array> | ||
| <string>public.default</string> | ||
| <string>glyphs</string> | ||
| </array> | ||
| </array> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>public.glyphOrder</key> | ||
| <array> | ||
| <string>.notdef</string> | ||
| <string>iamaglyph</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>creator</key> | ||
| <string>com.github.fonttools.ufoLib</string> | ||
| <key>formatVersion</key> | ||
| <integer>3</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>ascender</key> | ||
| <integer>800</integer> | ||
| <key>capHeight</key> | ||
| <integer>700</integer> | ||
| <key>descender</key> | ||
| <integer>-200</integer> | ||
| <key>familyName</key> | ||
| <string>OverlappingPoints</string> | ||
| <key>guidelines</key> | ||
| <array/> | ||
| <key>italicAngle</key> | ||
| <integer>0</integer> | ||
| <key>openTypeHeadCreated</key> | ||
| <string>2024/08/07 17:44:51</string> | ||
| <key>postscriptBlueValues</key> | ||
| <array> | ||
| <integer>-16</integer> | ||
| <integer>0</integer> | ||
| <integer>500</integer> | ||
| <integer>516</integer> | ||
| <integer>700</integer> | ||
| <integer>716</integer> | ||
| <integer>800</integer> | ||
| <integer>816</integer> | ||
| </array> | ||
| <key>postscriptFamilyBlues</key> | ||
| <array/> | ||
| <key>postscriptFamilyOtherBlues</key> | ||
| <array/> | ||
| <key>postscriptFontName</key> | ||
| <string>OverlappingPoints-Regular</string> | ||
| <key>postscriptOtherBlues</key> | ||
| <array> | ||
| <integer>-216</integer> | ||
| <integer>-200</integer> | ||
| </array> | ||
| <key>postscriptStemSnapH</key> | ||
| <array/> | ||
| <key>postscriptStemSnapV</key> | ||
| <array/> | ||
| <key>styleName</key> | ||
| <string>Regular</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>versionMajor</key> | ||
| <integer>1</integer> | ||
| <key>versionMinor</key> | ||
| <integer>0</integer> | ||
| <key>xHeight</key> | ||
| <integer>500</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>.notdef</key> | ||
| <string>_notdef.glif</string> | ||
| <key>iamaglyph</key> | ||
| <string>iamaglyph.glif</string> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>color</key> | ||
| <string>0.5,0,0.5,0.7</string> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <array> | ||
| <array> | ||
| <string>public.default</string> | ||
| <string>glyphs</string> | ||
| </array> | ||
| </array> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>public.glyphOrder</key> | ||
| <array> | ||
| <string>.notdef</string> | ||
| <string>iamaglyph</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>creator</key> | ||
| <string>com.github.fonttools.ufoLib</string> | ||
| <key>formatVersion</key> | ||
| <integer>3</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>ascender</key> | ||
| <integer>800</integer> | ||
| <key>capHeight</key> | ||
| <integer>700</integer> | ||
| <key>descender</key> | ||
| <integer>-200</integer> | ||
| <key>familyName</key> | ||
| <string>OverlappingPoints</string> | ||
| <key>guidelines</key> | ||
| <array/> | ||
| <key>italicAngle</key> | ||
| <integer>0</integer> | ||
| <key>openTypeHeadCreated</key> | ||
| <string>2024/08/07 17:44:51</string> | ||
| <key>postscriptBlueValues</key> | ||
| <array> | ||
| <integer>-16</integer> | ||
| <integer>0</integer> | ||
| <integer>500</integer> | ||
| <integer>516</integer> | ||
| <integer>700</integer> | ||
| <integer>716</integer> | ||
| <integer>800</integer> | ||
| <integer>816</integer> | ||
| </array> | ||
| <key>postscriptFamilyBlues</key> | ||
| <array/> | ||
| <key>postscriptFamilyOtherBlues</key> | ||
| <array/> | ||
| <key>postscriptFontName</key> | ||
| <string>OverlappingPoints-Regular</string> | ||
| <key>postscriptOtherBlues</key> | ||
| <array> | ||
| <integer>-216</integer> | ||
| <integer>-200</integer> | ||
| </array> | ||
| <key>postscriptStemSnapH</key> | ||
| <array/> | ||
| <key>postscriptStemSnapV</key> | ||
| <array/> | ||
| <key>styleName</key> | ||
| <string>Thin</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>versionMajor</key> | ||
| <integer>1</integer> | ||
| <key>versionMinor</key> | ||
| <integer>0</integer> | ||
| <key>xHeight</key> | ||
| <integer>500</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>.notdef</key> | ||
| <string>_notdef.glif</string> | ||
| <key>iamaglyph</key> | ||
| <string>iamaglyph.glif</string> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>color</key> | ||
| <string>0.5,0,0.5,0.7</string> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <array> | ||
| <array> | ||
| <string>public.default</string> | ||
| <string>glyphs</string> | ||
| </array> | ||
| </array> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>public.glyphOrder</key> | ||
| <array> | ||
| <string>.notdef</string> | ||
| <string>iamaglyph</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
| <?xml version='1.0' encoding='UTF-8'?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>creator</key> | ||
| <string>com.github.fonttools.ufoLib</string> | ||
| <key>formatVersion</key> | ||
| <integer>3</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>ascender</key> | ||
| <integer>730</integer> | ||
| <key>capHeight</key> | ||
| <integer>670</integer> | ||
| <key>copyright</key> | ||
| <string>Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'.</string> | ||
| <key>descender</key> | ||
| <integer>-240</integer> | ||
| <key>familyName</key> | ||
| <string>Source Serif 4</string> | ||
| <key>guidelines</key> | ||
| <array> | ||
| </array> | ||
| <key>italicAngle</key> | ||
| <integer>0</integer> | ||
| <key>openTypeHheaAscender</key> | ||
| <integer>1003</integer> | ||
| <key>openTypeHheaDescender</key> | ||
| <integer>-336</integer> | ||
| <key>openTypeHheaLineGap</key> | ||
| <integer>0</integer> | ||
| <key>openTypeNameDesigner</key> | ||
| <string>Frank Grießhammer</string> | ||
| <key>openTypeNameLicense</key> | ||
| <string>This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.</string> | ||
| <key>openTypeNameLicenseURL</key> | ||
| <string>http://scripts.sil.org/OFL</string> | ||
| <key>openTypeNameManufacturer</key> | ||
| <string>Adobe</string> | ||
| <key>openTypeNameManufacturerURL</key> | ||
| <string>http://www.adobe.com/type</string> | ||
| <key>openTypeOS2CodePageRanges</key> | ||
| <array> | ||
| <integer>0</integer> | ||
| <integer>1</integer> | ||
| <integer>2</integer> | ||
| <integer>3</integer> | ||
| <integer>4</integer> | ||
| <integer>7</integer> | ||
| <integer>8</integer> | ||
| <integer>29</integer> | ||
| </array> | ||
| <key>openTypeOS2Panose</key> | ||
| <array> | ||
| <integer>2</integer> | ||
| <integer>4</integer> | ||
| <integer>6</integer> | ||
| <integer>3</integer> | ||
| <integer>5</integer> | ||
| <integer>4</integer> | ||
| <integer>5</integer> | ||
| <integer>2</integer> | ||
| <integer>2</integer> | ||
| <integer>4</integer> | ||
| </array> | ||
| <key>openTypeOS2TypoAscender</key> | ||
| <integer>730</integer> | ||
| <key>openTypeOS2TypoDescender</key> | ||
| <integer>-270</integer> | ||
| <key>openTypeOS2TypoLineGap</key> | ||
| <integer>0</integer> | ||
| <key>openTypeOS2UnicodeRanges</key> | ||
| <array> | ||
| <integer>0</integer> | ||
| <integer>1</integer> | ||
| <integer>2</integer> | ||
| <integer>7</integer> | ||
| <integer>9</integer> | ||
| <integer>29</integer> | ||
| <integer>32</integer> | ||
| <integer>33</integer> | ||
| <integer>57</integer> | ||
| </array> | ||
| <key>openTypeOS2VendorID</key> | ||
| <string>ADBO</string> | ||
| <key>openTypeOS2WinAscent</key> | ||
| <integer>1036</integer> | ||
| <key>openTypeOS2WinDescent</key> | ||
| <integer>335</integer> | ||
| <key>postscriptBlueFuzz</key> | ||
| <integer>0</integer> | ||
| <key>postscriptBlueScale</key> | ||
| <real>0.0375</real> | ||
| <key>postscriptBlueShift</key> | ||
| <integer>7</integer> | ||
| <key>postscriptBlueValues</key> | ||
| <array> | ||
| <integer>-15</integer> | ||
| <integer>0</integer> | ||
| <integer>475</integer> | ||
| <integer>488</integer> | ||
| <integer>527</integer> | ||
| <integer>540</integer> | ||
| <integer>549</integer> | ||
| <integer>563</integer> | ||
| <integer>647</integer> | ||
| <integer>660</integer> | ||
| <integer>670</integer> | ||
| <integer>685</integer> | ||
| <integer>730</integer> | ||
| <integer>750</integer> | ||
| </array> | ||
| <key>postscriptFamilyBlues</key> | ||
| <array> | ||
| <integer>-15</integer> | ||
| <integer>0</integer> | ||
| <integer>475</integer> | ||
| <integer>488</integer> | ||
| <integer>527</integer> | ||
| <integer>540</integer> | ||
| <integer>549</integer> | ||
| <integer>563</integer> | ||
| <integer>647</integer> | ||
| <integer>660</integer> | ||
| <integer>670</integer> | ||
| <integer>685</integer> | ||
| <integer>730</integer> | ||
| <integer>750</integer> | ||
| </array> | ||
| <key>postscriptFamilyOtherBlues</key> | ||
| <array> | ||
| <integer>-250</integer> | ||
| <integer>-240</integer> | ||
| </array> | ||
| <key>postscriptFontName</key> | ||
| <string>SourceSerif4-Regular</string> | ||
| <key>postscriptForceBold</key> | ||
| <false/> | ||
| <key>postscriptOtherBlues</key> | ||
| <array> | ||
| <integer>-250</integer> | ||
| <integer>-240</integer> | ||
| </array> | ||
| <key>postscriptStemSnapH</key> | ||
| <array> | ||
| <integer>46</integer> | ||
| <integer>36</integer> | ||
| </array> | ||
| <key>postscriptStemSnapV</key> | ||
| <array> | ||
| <integer>85</integer> | ||
| <integer>95</integer> | ||
| </array> | ||
| <key>postscriptUnderlinePosition</key> | ||
| <integer>-75</integer> | ||
| <key>postscriptUnderlineThickness</key> | ||
| <integer>50</integer> | ||
| <key>styleName</key> | ||
| <string>Regular</string> | ||
| <key>trademark</key> | ||
| <string>Source is a trademark of Adobe in the United States and/or other countries.</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>xHeight</key> | ||
| <integer>475</integer> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>.notdef</key> | ||
| <string>_notdef.glif</string> | ||
| <key>a</key> | ||
| <string>a.glif</string> | ||
| <key>b</key> | ||
| <string>b.glif</string> | ||
| <key>c</key> | ||
| <string>c.glif</string> | ||
| <key>space</key> | ||
| <string>space.glif</string> | ||
| </dict> | ||
| </plist> |
Sorry, the diff of this file is not supported yet
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>LATIN</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>b</string> | ||
| <string>c</string> | ||
| </array> | ||
| <key>lc</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>b</string> | ||
| <string>c</string> | ||
| </array> | ||
| <key>public.kern1.LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| </array> | ||
| <key>public.kern1.LAT_b</key> | ||
| <array> | ||
| <string>b</string> | ||
| </array> | ||
| <key>public.kern1.LAT_c</key> | ||
| <array> | ||
| <string>c</string> | ||
| </array> | ||
| <key>public.kern2.LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| </array> | ||
| <key>public.kern2.LAT_h</key> | ||
| <array> | ||
| <string>b</string> | ||
| </array> | ||
| <key>public.kern2.LAT_o</key> | ||
| <array> | ||
| <string>c</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>public.kern1.LAT_b</key> | ||
| <dict> | ||
| <key>public.kern2.LAT_h</key> | ||
| <integer>-10</integer> | ||
| </dict> | ||
| <key>public.kern1.LAT_c</key> | ||
| <dict> | ||
| <key>public.kern2.LAT_h</key> | ||
| <integer>-11</integer> | ||
| </dict> | ||
| </dict> | ||
| </plist> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <array> | ||
| <array> | ||
| <string>public.default</string> | ||
| <string>glyphs</string> | ||
| </array> | ||
| </array> | ||
| </plist> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>public.glyphOrder</key> | ||
| <array> | ||
| <string>.notdef</string> | ||
| <string>space</string> | ||
| <string>a</string> | ||
| <string>b</string> | ||
| <string>c</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>creator</key> | ||
| <string>com.github.fonttools.ufoLib</string> | ||
| <key>formatVersion</key> | ||
| <integer>3</integer> | ||
| </dict> | ||
| </plist> |
| import plistlib | ||
| from shutil import copytree | ||
| from pathlib import Path | ||
| from afdko import ufotools as ut | ||
| from afdko.fdkutils import ( | ||
| # get_temp_file_path, | ||
| get_temp_dir_path, | ||
| ) | ||
| from test_utils import ( | ||
| get_input_path, | ||
| ) | ||
| TEST_UFO_FILENAME = 'ufotools_basic.ufo' | ||
| def _get_test_ufo_path(): | ||
| return get_input_path(TEST_UFO_FILENAME) | ||
| def _dict2plist(my_dict, plist_file): | ||
| with open(plist_file, 'wb') as pl_blob: | ||
| plistlib.dump(my_dict, pl_blob) | ||
| def _plist2dict(plist_file): | ||
| with open(plist_file, 'rb') as pl_blob: | ||
| pl_dict = plistlib.load(pl_blob) | ||
| return pl_dict | ||
| def _add_entry_to_plist(kv_entry, plist_file): | ||
| ''' | ||
| add a simple key: value pair to an existing plist file | ||
| ''' | ||
| key, value = kv_entry | ||
| plist_dict = _plist2dict(plist_file) | ||
| plist_dict[key] = value | ||
| _dict2plist(plist_dict, plist_file) | ||
| def test_parseGlyphOrder(): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| glyph_order = ut.parseGlyphOrder(ufo_path / 'lib.plist') | ||
| assert glyph_order == {'.notdef': 0, 'space': 1, 'a': 2, 'b': 3, 'c': 4} | ||
| def test_UFOFontData(): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| ufd = ut.UFOFontData(ufo_path, False, '') | ||
| assert ufd.getGlyphSrcPath('a') == str(ufo_path / 'glyphs' / 'a.glif') | ||
| def test_cleanupContentsList_missing_glyph(capsys): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| tmp_ufo_path = temp_dir / ufo_path.name | ||
| copytree(ufo_path, tmp_ufo_path) | ||
| # delete a glyph from glyphs directory | ||
| glif_path = tmp_ufo_path / 'glyphs' / 'a.glif' | ||
| glif_path.unlink() | ||
| ut.cleanupContentsList(tmp_ufo_path / 'glyphs') | ||
| out, err = capsys.readouterr() | ||
| assert 'glif was missing: a, a.glif' in out | ||
| def test_cleanupContentsList_no_plist(): | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| # make dummy glyph dir | ||
| glyph_dir = temp_dir / 'glyphs.com.adobe.type.processedglyphs' | ||
| glyph_dir.mkdir() | ||
| # make some glif files but no contents.plist | ||
| for glyph_name in 'xyz': | ||
| glyph_path = glyph_dir / f'{glyph_name}.glif' | ||
| glyph_path.touch() | ||
| # although there is no contents.plist, this should not fail (#1606) | ||
| ut.cleanupContentsList(glyph_dir) | ||
| def test_cleanUpGLIFFiles_extraneous_glyph(capsys): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| tmp_ufo_path = temp_dir / ufo_path.name | ||
| copytree(ufo_path, tmp_ufo_path) | ||
| glyphs_dir = tmp_ufo_path / 'glyphs' | ||
| contents_plist = glyphs_dir / 'contents.plist' | ||
| # add an unexpected .glif file | ||
| unexpected_glif = glyphs_dir / 'x.glif' | ||
| unexpected_glif.touch() | ||
| changed = ut.cleanUpGLIFFiles(contents_plist, glyphs_dir) | ||
| assert changed == 1 | ||
| out, err = capsys.readouterr() | ||
| assert 'Removing glif file x.glif' in out | ||
| def test_cleanUpGLIFFiles_other_layer(capsys): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| tmp_ufo_path = temp_dir / ufo_path.name | ||
| copytree(ufo_path, tmp_ufo_path) | ||
| glyphs_dir = tmp_ufo_path / 'glyphs' | ||
| contents_plist = glyphs_dir / 'contents.plist' | ||
| other_glyphs_dir = tmp_ufo_path / 'otherglyphs' | ||
| other_contents_plist = other_glyphs_dir / 'contents.plist' | ||
| copytree(glyphs_dir, other_glyphs_dir) | ||
| # add a glyph to the other directory which shouldn’t be there | ||
| unexpected_glif = other_glyphs_dir / 'x.glif' | ||
| unexpected_glif.touch() | ||
| _add_entry_to_plist(('x', 'x.glif'), other_contents_plist) | ||
| changed = ut.cleanUpGLIFFiles(contents_plist, other_glyphs_dir) | ||
| assert changed == 1 | ||
| out, err = capsys.readouterr() | ||
| assert 'Removing glif x' in out | ||
| def test_cleanUpGLIFFiles_no_plist(): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| tmp_ufo_path = temp_dir / ufo_path.name | ||
| copytree(ufo_path, tmp_ufo_path) | ||
| glyphs_dir = tmp_ufo_path / 'glyphs' | ||
| contents_plist = glyphs_dir / 'contents.plist' | ||
| other_glyphs_dir = tmp_ufo_path / 'otherglyphs' | ||
| other_contents_plist = other_glyphs_dir / 'contents.plist' | ||
| copytree(glyphs_dir, other_glyphs_dir) | ||
| # remove contents plist | ||
| other_contents_plist.unlink() | ||
| # nothing should happen | ||
| changed = ut.cleanUpGLIFFiles(contents_plist, other_glyphs_dir) | ||
| assert changed == 0 | ||
| def test_cleanUpGLIFFiles_empty_folder(): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| tmp_ufo_path = temp_dir / ufo_path.name | ||
| copytree(ufo_path, tmp_ufo_path) | ||
| glyphs_dir = tmp_ufo_path / 'glyphs' | ||
| contents_plist = glyphs_dir / 'contents.plist' | ||
| other_glyphs_dir = tmp_ufo_path / 'otherglyphs' | ||
| other_glyphs_dir.mkdir() | ||
| # nothing should happen | ||
| changed = ut.cleanUpGLIFFiles(contents_plist, other_glyphs_dir) | ||
| assert changed == 0 | ||
| def test_validateLayers_empty_folder(capsys): | ||
| ufo_path = Path(_get_test_ufo_path()) | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| tmp_ufo_path = temp_dir / ufo_path.name | ||
| copytree(ufo_path, tmp_ufo_path) | ||
| processed_dir = tmp_ufo_path / 'glyphs.com.adobe.type.processedglyphs' | ||
| processed_dir.mkdir() | ||
| ut.validateLayers(tmp_ufo_path) | ||
| out, err = capsys.readouterr() | ||
| print(out) | ||
| def test_makeUFOFMNDB_empty_UFO(capsys): | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| dummy_ufo = temp_dir / 'dummy.ufo' | ||
| fontinto_plist = dummy_ufo / 'fontinfo.plist' | ||
| dummy_ufo.mkdir() | ||
| _dict2plist({}, fontinto_plist) | ||
| fmndb_path = ut.makeUFOFMNDB(dummy_ufo) | ||
| out, err = capsys.readouterr() | ||
| assert "UFO font is missing 'postscriptFontName'" in out | ||
| assert "UFO font is missing 'familyName'" in out | ||
| assert "UFO font is missing 'styleName'" in out | ||
| with open(fmndb_path, 'r') as fmndb_blob: | ||
| fmndb_data = fmndb_blob.read().splitlines() | ||
| assert fmndb_data == [ | ||
| '[NoFamilyName-Regular]', | ||
| '\tf=NoFamilyName', | ||
| '\ts=Regular'] | ||
| def test_makeUFOFMNDB_psname(capsys): | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| dummy_ufo = temp_dir / 'dummy.ufo' | ||
| fontinto_plist = dummy_ufo / 'fontinfo.plist' | ||
| dummy_ufo.mkdir() | ||
| fontinfo_dict = { | ||
| 'postscriptFontName': 'Dummy-Italic' | ||
| } | ||
| _dict2plist(fontinfo_dict, fontinto_plist) | ||
| fmndb_path = ut.makeUFOFMNDB(dummy_ufo) | ||
| out, err = capsys.readouterr() | ||
| assert "UFO font is missing 'familyName'" in out | ||
| assert "UFO font is missing 'styleName'" in out | ||
| with open(fmndb_path, 'r') as fmndb_blob: | ||
| fmndb_data = fmndb_blob.read().splitlines() | ||
| assert fmndb_data == [ | ||
| '[Dummy-Italic]', | ||
| '\tf=Dummy', | ||
| '\ts=Italic'] | ||
| def test_makeUFOFMNDB_wholesome(): | ||
| temp_dir = Path(get_temp_dir_path()) | ||
| dummy_ufo = temp_dir / 'dummy.ufo' | ||
| fontinto_plist = dummy_ufo / 'fontinfo.plist' | ||
| dummy_ufo.mkdir() | ||
| fontinfo_dict = { | ||
| 'postscriptFontName': 'Whats-Up', | ||
| 'familyName': 'Addams Family', | ||
| 'styleName': 'Narrow Extended' | ||
| } | ||
| _dict2plist(fontinfo_dict, fontinto_plist) | ||
| fmndb_path = ut.makeUFOFMNDB(dummy_ufo) | ||
| with open(fmndb_path, 'r') as fmndb_blob: | ||
| fmndb_data = fmndb_blob.read().splitlines() | ||
| assert fmndb_data == [ | ||
| '[Whats-Up]', | ||
| '\tf=Addams Family', | ||
| '\ts=Narrow Extended'] |
@@ -22,3 +22,3 @@ # based on https://github.com/joerick/cibuildwheel/blob/master/examples/github-minimal.yml | ||
| matrix: | ||
| os: [ubuntu-latest, windows-latest, macos-latest] | ||
| os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest] | ||
@@ -38,3 +38,3 @@ steps: | ||
| with: | ||
| python-version: '3.7' | ||
| python-version: '3.12' | ||
@@ -55,15 +55,16 @@ - name: Install cibuildwheel | ||
| git config --global url.https://github.com/.insteadOf git://github.com/ | ||
| yum install -y libuuid-devel | ||
| dnf install -y libuuid-devel | ||
| # make sure afdko submodule is not "dirty" before starting a new build | ||
| CIBW_BEFORE_BUILD: "git submodule foreach git clean -fdx" | ||
| # The embedded 'tx' C executable is independent of Python ABI so we only need to build it once. | ||
| # Here we choose the minimum supported version, i.e. Python 3.7 | ||
| CIBW_BUILD: "cp37-* cp38-macosx_universal2" | ||
| # build using the manylinux2014 image to ensure manylinux2014 wheels are produced | ||
| CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 | ||
| # The embedded 'tx' C executable is independent of Python ABI, but we build | ||
| # and test for all supported Python versions (3.10+). | ||
| CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-*" | ||
| # build using the manylinux_2_28 image | ||
| CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 | ||
| CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28 | ||
| # Only build Universal2 on Mac | ||
| CIBW_ARCHS_MACOS: universal2 | ||
| CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64'" | ||
| # skip PyPy (no manylinux2014), 32-bit linux, musl linux, and other architectures | ||
| CIBW_SKIP: "pp* cp*manylinux_i686 cp*manylinux_aarch64 cp*manylinux_ppc64le cp*manylinux_s390x *-musllinux*" | ||
| # skip PyPy, 32-bit linux, musl linux, and unsupported architectures | ||
| CIBW_SKIP: "pp* cp*manylinux_i686 cp*manylinux_ppc64le cp*manylinux_s390x *-musllinux*" | ||
| # Force static link of libxml2 | ||
@@ -76,11 +77,34 @@ CIBW_ENVIRONMENT: "FORCE_BUILD_LIBXML2=ON" | ||
| - uses: actions/upload-artifact@v3 | ||
| - uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: cffsubr-dist | ||
| name: cffsubr-dist-${{ matrix.os }} | ||
| path: ./dist | ||
| publish: | ||
| name: Publish to PyPI | ||
| needs: build_wheels | ||
| runs-on: ubuntu-latest | ||
| if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 # unshallow fetch for setuptools-scm | ||
| submodules: recursive | ||
| - uses: actions/setup-python@v5 | ||
| name: Install Python | ||
| with: | ||
| python-version: '3.12' | ||
| - name: Build sdist | ||
| run: pipx run build --sdist | ||
| if: matrix.os == 'ubuntu-latest' && github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | ||
| - name: Download all artifacts | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| pattern: cffsubr-dist-* | ||
| merge-multiple: true | ||
| path: ./dist | ||
| - name: Publish package to PyPI | ||
@@ -93,2 +117,1 @@ run: | | ||
| TWINE_PASSWORD: ${{ secrets.pypi_password }} | ||
| if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') |
@@ -27,3 +27,3 @@ name: Test with ASAN | ||
| with: | ||
| python-version: 3.8 | ||
| python-version: "3.11" | ||
@@ -30,0 +30,0 @@ - name: Install multilib packages |
@@ -41,3 +41,3 @@ name: Build Python Wheels | ||
| if: matrix.os == 'macos-latest' | ||
| uses: pypa/cibuildwheel@v2.16.1 | ||
| uses: pypa/cibuildwheel@v2.21.1 | ||
| with: | ||
@@ -48,6 +48,6 @@ output-dir: dist | ||
| CIBW_ARCHS_MACOS: universal2 | ||
| CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64 -I/usr/include/libxml2' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64'" | ||
| CIBW_ENVIRONMENT_MACOS: "CFLAGS='-arch arm64 -arch x86_64 -I/usr/include/libxml2' CXXFLAGS='-arch arm64 -arch x86_64' LDFLAGS='-arch arm64 -arch x86_64' MACOSX_DEPLOYMENT_TARGET='10.13'" | ||
| - name: Build wheel (except macosx_universal2) | ||
| uses: pypa/cibuildwheel@v2.16.1 | ||
| uses: pypa/cibuildwheel@v2.21.1 | ||
| with: | ||
@@ -60,8 +60,11 @@ output-dir: dist | ||
| CIBW_ARCHS_LINUX: x86_64 | ||
| CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 | ||
| CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 | ||
| CIBW_SKIP: "*musllinux*" | ||
| # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel && yum install -y libxml2-devel" | ||
| # CIBW_ENVIRONMENT_LINUX: "CFLAGS='-I/usr/include/libxml2'" | ||
| CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" | ||
| CIBW_ENVIRONMENT: "FORCE_BUILD_LIBXML2=ON" | ||
| # CIBW_BEFORE_ALL_LINUX: "yum install -y libuuid-devel" | ||
| # CIBW_BEFORE_ALL_LINUX: "dnf -y install uuid-devel" | ||
| CIBW_ENVIRONMENT_MACOS: "CFLAGS='-I/usr/include/libxml2' MACOSX_DEPLOYMENT_TARGET='10.13'" | ||
| CIBW_ENVIRONMENT_LINUX: "FORCE_BUILD_LIBXML2=ON" | ||
| CIBW_ENVIRONMENT_WINDOWS: "FORCE_BUILD_LIBXML2=ON" | ||
@@ -76,5 +79,5 @@ - name: Build sdist (Ubuntu only) | ||
| - name: Upload build artifacts | ||
| uses: actions/upload-artifact@v3 | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: wheelstorage | ||
| name: wheelstorage-${{ matrix.os }} | ||
| path: ./dist/* | ||
@@ -103,5 +106,6 @@ if-no-files-found: error | ||
| - name: Download release assets | ||
| uses: actions/download-artifact@v3 | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| name: wheelstorage | ||
| pattern: wheelstorage-* | ||
| merge-multiple: true | ||
| path: dist | ||
@@ -108,0 +112,0 @@ |
@@ -37,6 +37,6 @@ name: C and Python coverage | ||
| - name: Set up Python 3.8 | ||
| - name: Set up Python | ||
| uses: actions/setup-python@v4 | ||
| with: | ||
| python-version: "3.8" | ||
| python-version: "3.11" | ||
@@ -43,0 +43,0 @@ - name: Build AFDKO wheel |
@@ -31,16 +31,16 @@ name: AFDKO Test Suite | ||
| os: [ubuntu-latest, macos-latest, windows-latest] | ||
| python-version: ["3.8", "3.9", "3.10", "3.11"] | ||
| python-version: ["3.9", "3.10", "3.11", "3.12"] | ||
| exclude: | ||
| - os: macos-latest | ||
| python-version: "3.8" | ||
| - os: macos-latest | ||
| python-version: "3.9" | ||
| - os: macos-latest | ||
| python-version: "3.10" | ||
| - os: macos-latest | ||
| python-version: "3.11" | ||
| - os: windows-latest | ||
| python-version: "3.8" | ||
| - os: windows-latest | ||
| python-version: "3.9" | ||
| - os: windows-latest | ||
| python-version: "3.10" | ||
| - os: windows-latest | ||
| python-version: "3.11" | ||
@@ -47,0 +47,0 @@ steps: |
@@ -10,3 +10,3 @@ #!/usr/bin/env python | ||
| antlr_program = "antlr4" | ||
| antlr_version = "4.9.3" | ||
| antlr_version = "4.13.2" | ||
@@ -13,0 +13,0 @@ antlr_args = ['-no-listener', '-Dlanguage=Cpp'] |
@@ -71,2 +71,3 @@ set(GENERATED_SOURCES | ||
| set_property(TARGET hotconv PROPERTY C_STANDARD 99) | ||
| set_property(TARGET hotconv PROPERTY CXX_STANDARD 17) | ||
| target_include_directories(hotconv PRIVATE AFTER $<$<COMPILE_LANGUAGE:CXX>:${ANTLR4_INCLUDE_DIRS}>) | ||
@@ -73,0 +74,0 @@ target_link_libraries(hotconv PUBLIC antlr4_static) |
| // Generated from FeatLexer.g4 by ANTLR 4.9.3 | ||
| // Generated from FeatLexer.g4 by ANTLR 4.13.2 | ||
@@ -53,5 +53,6 @@ #pragma once | ||
| explicit FeatLexer(antlr4::CharStream *input); | ||
| ~FeatLexer(); | ||
| ~FeatLexer() override; | ||
| std::string anon_tag; | ||
@@ -78,31 +79,28 @@ | ||
| virtual std::string getGrammarFileName() const override; | ||
| virtual const std::vector<std::string>& getRuleNames() const override; | ||
| virtual const std::vector<std::string>& getChannelNames() const override; | ||
| virtual const std::vector<std::string>& getModeNames() const override; | ||
| virtual const std::vector<std::string>& getTokenNames() const override; // deprecated, use vocabulary instead | ||
| virtual antlr4::dfa::Vocabulary& getVocabulary() const override; | ||
| std::string getGrammarFileName() const override; | ||
| virtual const std::vector<uint16_t> getSerializedATN() const override; | ||
| virtual const antlr4::atn::ATN& getATN() const override; | ||
| const std::vector<std::string>& getRuleNames() const override; | ||
| virtual void action(antlr4::RuleContext *context, size_t ruleIndex, size_t actionIndex) override; | ||
| virtual bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; | ||
| const std::vector<std::string>& getChannelNames() const override; | ||
| private: | ||
| static std::vector<antlr4::dfa::DFA> _decisionToDFA; | ||
| static antlr4::atn::PredictionContextCache _sharedContextCache; | ||
| static std::vector<std::string> _ruleNames; | ||
| static std::vector<std::string> _tokenNames; | ||
| static std::vector<std::string> _channelNames; | ||
| static std::vector<std::string> _modeNames; | ||
| const std::vector<std::string>& getModeNames() const override; | ||
| static std::vector<std::string> _literalNames; | ||
| static std::vector<std::string> _symbolicNames; | ||
| static antlr4::dfa::Vocabulary _vocabulary; | ||
| static antlr4::atn::ATN _atn; | ||
| static std::vector<uint16_t> _serializedATN; | ||
| const antlr4::dfa::Vocabulary& getVocabulary() const override; | ||
| antlr4::atn::SerializedATNView getSerializedATN() const override; | ||
| const antlr4::atn::ATN& getATN() const override; | ||
| void action(antlr4::RuleContext *context, size_t ruleIndex, size_t actionIndex) override; | ||
| bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; | ||
| // By default the static state used to implement the lexer is lazily initialized during the first | ||
| // call to the constructor. You can call this function if you wish to initialize the static state | ||
| // ahead of time. | ||
| static void initialize(); | ||
| private: | ||
| // Individual action functions triggered by action() above. | ||
@@ -114,7 +112,3 @@ void A_LABELAction(antlr4::RuleContext *context, size_t actionIndex); | ||
| struct Initializer { | ||
| Initializer(); | ||
| }; | ||
| static Initializer _init; | ||
| }; | ||
| // Generated from FeatParser.g4 by ANTLR 4.9.3 | ||
| // Generated from FeatParser.g4 by ANTLR 4.13.2 | ||
@@ -4,0 +4,0 @@ |
| // Generated from FeatParser.g4 by ANTLR 4.9.3 | ||
| // Generated from FeatParser.g4 by ANTLR 4.13.2 | ||
@@ -18,443 +18,443 @@ #pragma once | ||
| virtual antlrcpp::Any visitFile(FeatParser::FileContext *ctx) override { | ||
| virtual std::any visitFile(FeatParser::FileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTopLevelStatement(FeatParser::TopLevelStatementContext *ctx) override { | ||
| virtual std::any visitTopLevelStatement(FeatParser::TopLevelStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitInclude(FeatParser::IncludeContext *ctx) override { | ||
| virtual std::any visitInclude(FeatParser::IncludeContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *ctx) override { | ||
| virtual std::any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLangsysAssign(FeatParser::LangsysAssignContext *ctx) override { | ||
| virtual std::any visitLangsysAssign(FeatParser::LangsysAssignContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitMark_statement(FeatParser::Mark_statementContext *ctx) override { | ||
| virtual std::any visitMark_statement(FeatParser::Mark_statementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAnchorDef(FeatParser::AnchorDefContext *ctx) override { | ||
| virtual std::any visitAnchorDef(FeatParser::AnchorDefContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitValueRecordDef(FeatParser::ValueRecordDefContext *ctx) override { | ||
| virtual std::any visitValueRecordDef(FeatParser::ValueRecordDefContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitFeatureBlock(FeatParser::FeatureBlockContext *ctx) override { | ||
| virtual std::any visitFeatureBlock(FeatParser::FeatureBlockContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTableBlock(FeatParser::TableBlockContext *ctx) override { | ||
| virtual std::any visitTableBlock(FeatParser::TableBlockContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAnonBlock(FeatParser::AnonBlockContext *ctx) override { | ||
| virtual std::any visitAnonBlock(FeatParser::AnonBlockContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *ctx) override { | ||
| virtual std::any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitFeatureStatement(FeatParser::FeatureStatementContext *ctx) override { | ||
| virtual std::any visitFeatureStatement(FeatParser::FeatureStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *ctx) override { | ||
| virtual std::any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitCvParameterBlock(FeatParser::CvParameterBlockContext *ctx) override { | ||
| virtual std::any visitCvParameterBlock(FeatParser::CvParameterBlockContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitCvParameterStatement(FeatParser::CvParameterStatementContext *ctx) override { | ||
| virtual std::any visitCvParameterStatement(FeatParser::CvParameterStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitCvParameter(FeatParser::CvParameterContext *ctx) override { | ||
| virtual std::any visitCvParameter(FeatParser::CvParameterContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitStatement(FeatParser::StatementContext *ctx) override { | ||
| virtual std::any visitStatement(FeatParser::StatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitFeatureUse(FeatParser::FeatureUseContext *ctx) override { | ||
| virtual std::any visitFeatureUse(FeatParser::FeatureUseContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitScriptAssign(FeatParser::ScriptAssignContext *ctx) override { | ||
| virtual std::any visitScriptAssign(FeatParser::ScriptAssignContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLangAssign(FeatParser::LangAssignContext *ctx) override { | ||
| virtual std::any visitLangAssign(FeatParser::LangAssignContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLookupflagAssign(FeatParser::LookupflagAssignContext *ctx) override { | ||
| virtual std::any visitLookupflagAssign(FeatParser::LookupflagAssignContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLookupflagElement(FeatParser::LookupflagElementContext *ctx) override { | ||
| virtual std::any visitLookupflagElement(FeatParser::LookupflagElementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *ctx) override { | ||
| virtual std::any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitSubstitute(FeatParser::SubstituteContext *ctx) override { | ||
| virtual std::any visitSubstitute(FeatParser::SubstituteContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitPosition(FeatParser::PositionContext *ctx) override { | ||
| virtual std::any visitPosition(FeatParser::PositionContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitValuePattern(FeatParser::ValuePatternContext *ctx) override { | ||
| virtual std::any visitValuePattern(FeatParser::ValuePatternContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitValueRecord(FeatParser::ValueRecordContext *ctx) override { | ||
| virtual std::any visitValueRecord(FeatParser::ValueRecordContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitValueLiteral(FeatParser::ValueLiteralContext *ctx) override { | ||
| virtual std::any visitValueLiteral(FeatParser::ValueLiteralContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitCursiveElement(FeatParser::CursiveElementContext *ctx) override { | ||
| virtual std::any visitCursiveElement(FeatParser::CursiveElementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *ctx) override { | ||
| virtual std::any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *ctx) override { | ||
| virtual std::any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitParameters(FeatParser::ParametersContext *ctx) override { | ||
| virtual std::any visitParameters(FeatParser::ParametersContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitSizemenuname(FeatParser::SizemenunameContext *ctx) override { | ||
| virtual std::any visitSizemenuname(FeatParser::SizemenunameContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitFeatureNames(FeatParser::FeatureNamesContext *ctx) override { | ||
| virtual std::any visitFeatureNames(FeatParser::FeatureNamesContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitSubtable(FeatParser::SubtableContext *ctx) override { | ||
| virtual std::any visitSubtable(FeatParser::SubtableContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_BASE(FeatParser::Table_BASEContext *ctx) override { | ||
| virtual std::any visitTable_BASE(FeatParser::Table_BASEContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitBaseStatement(FeatParser::BaseStatementContext *ctx) override { | ||
| virtual std::any visitBaseStatement(FeatParser::BaseStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAxisTags(FeatParser::AxisTagsContext *ctx) override { | ||
| virtual std::any visitAxisTags(FeatParser::AxisTagsContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAxisScripts(FeatParser::AxisScriptsContext *ctx) override { | ||
| virtual std::any visitAxisScripts(FeatParser::AxisScriptsContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitBaseScript(FeatParser::BaseScriptContext *ctx) override { | ||
| virtual std::any visitBaseScript(FeatParser::BaseScriptContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_GDEF(FeatParser::Table_GDEFContext *ctx) override { | ||
| virtual std::any visitTable_GDEF(FeatParser::Table_GDEFContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGdefStatement(FeatParser::GdefStatementContext *ctx) override { | ||
| virtual std::any visitGdefStatement(FeatParser::GdefStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *ctx) override { | ||
| virtual std::any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGdefAttach(FeatParser::GdefAttachContext *ctx) override { | ||
| virtual std::any visitGdefAttach(FeatParser::GdefAttachContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *ctx) override { | ||
| virtual std::any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *ctx) override { | ||
| virtual std::any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_head(FeatParser::Table_headContext *ctx) override { | ||
| virtual std::any visitTable_head(FeatParser::Table_headContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitHeadStatement(FeatParser::HeadStatementContext *ctx) override { | ||
| virtual std::any visitHeadStatement(FeatParser::HeadStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitHead(FeatParser::HeadContext *ctx) override { | ||
| virtual std::any visitHead(FeatParser::HeadContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_hhea(FeatParser::Table_hheaContext *ctx) override { | ||
| virtual std::any visitTable_hhea(FeatParser::Table_hheaContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitHheaStatement(FeatParser::HheaStatementContext *ctx) override { | ||
| virtual std::any visitHheaStatement(FeatParser::HheaStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitHhea(FeatParser::HheaContext *ctx) override { | ||
| virtual std::any visitHhea(FeatParser::HheaContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_vhea(FeatParser::Table_vheaContext *ctx) override { | ||
| virtual std::any visitTable_vhea(FeatParser::Table_vheaContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitVheaStatement(FeatParser::VheaStatementContext *ctx) override { | ||
| virtual std::any visitVheaStatement(FeatParser::VheaStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitVhea(FeatParser::VheaContext *ctx) override { | ||
| virtual std::any visitVhea(FeatParser::VheaContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_name(FeatParser::Table_nameContext *ctx) override { | ||
| virtual std::any visitTable_name(FeatParser::Table_nameContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitNameStatement(FeatParser::NameStatementContext *ctx) override { | ||
| virtual std::any visitNameStatement(FeatParser::NameStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitNameID(FeatParser::NameIDContext *ctx) override { | ||
| virtual std::any visitNameID(FeatParser::NameIDContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_OS_2(FeatParser::Table_OS_2Context *ctx) override { | ||
| virtual std::any visitTable_OS_2(FeatParser::Table_OS_2Context *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitOs_2Statement(FeatParser::Os_2StatementContext *ctx) override { | ||
| virtual std::any visitOs_2Statement(FeatParser::Os_2StatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitOs_2(FeatParser::Os_2Context *ctx) override { | ||
| virtual std::any visitOs_2(FeatParser::Os_2Context *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_STAT(FeatParser::Table_STATContext *ctx) override { | ||
| virtual std::any visitTable_STAT(FeatParser::Table_STATContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitStatStatement(FeatParser::StatStatementContext *ctx) override { | ||
| virtual std::any visitStatStatement(FeatParser::StatStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitDesignAxis(FeatParser::DesignAxisContext *ctx) override { | ||
| virtual std::any visitDesignAxis(FeatParser::DesignAxisContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAxisValue(FeatParser::AxisValueContext *ctx) override { | ||
| virtual std::any visitAxisValue(FeatParser::AxisValueContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAxisValueStatement(FeatParser::AxisValueStatementContext *ctx) override { | ||
| virtual std::any visitAxisValueStatement(FeatParser::AxisValueStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAxisValueLocation(FeatParser::AxisValueLocationContext *ctx) override { | ||
| virtual std::any visitAxisValueLocation(FeatParser::AxisValueLocationContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *ctx) override { | ||
| virtual std::any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *ctx) override { | ||
| virtual std::any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitNameEntryStatement(FeatParser::NameEntryStatementContext *ctx) override { | ||
| virtual std::any visitNameEntryStatement(FeatParser::NameEntryStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *ctx) override { | ||
| virtual std::any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitNameEntry(FeatParser::NameEntryContext *ctx) override { | ||
| virtual std::any visitNameEntry(FeatParser::NameEntryContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTable_vmtx(FeatParser::Table_vmtxContext *ctx) override { | ||
| virtual std::any visitTable_vmtx(FeatParser::Table_vmtxContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitVmtxStatement(FeatParser::VmtxStatementContext *ctx) override { | ||
| virtual std::any visitVmtxStatement(FeatParser::VmtxStatementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitVmtx(FeatParser::VmtxContext *ctx) override { | ||
| virtual std::any visitVmtx(FeatParser::VmtxContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAnchor(FeatParser::AnchorContext *ctx) override { | ||
| virtual std::any visitAnchor(FeatParser::AnchorContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLookupPattern(FeatParser::LookupPatternContext *ctx) override { | ||
| virtual std::any visitLookupPattern(FeatParser::LookupPatternContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLookupPatternElement(FeatParser::LookupPatternElementContext *ctx) override { | ||
| virtual std::any visitLookupPatternElement(FeatParser::LookupPatternElementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitPattern(FeatParser::PatternContext *ctx) override { | ||
| virtual std::any visitPattern(FeatParser::PatternContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitPatternElement(FeatParser::PatternElementContext *ctx) override { | ||
| virtual std::any visitPatternElement(FeatParser::PatternElementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *ctx) override { | ||
| virtual std::any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGlyphClass(FeatParser::GlyphClassContext *ctx) override { | ||
| virtual std::any visitGlyphClass(FeatParser::GlyphClassContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGcLiteral(FeatParser::GcLiteralContext *ctx) override { | ||
| virtual std::any visitGcLiteral(FeatParser::GcLiteralContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGcLiteralElement(FeatParser::GcLiteralElementContext *ctx) override { | ||
| virtual std::any visitGcLiteralElement(FeatParser::GcLiteralElementContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGlyph(FeatParser::GlyphContext *ctx) override { | ||
| virtual std::any visitGlyph(FeatParser::GlyphContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGlyphName(FeatParser::GlyphNameContext *ctx) override { | ||
| virtual std::any visitGlyphName(FeatParser::GlyphNameContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitLabel(FeatParser::LabelContext *ctx) override { | ||
| virtual std::any visitLabel(FeatParser::LabelContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitTag(FeatParser::TagContext *ctx) override { | ||
| virtual std::any visitTag(FeatParser::TagContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitFixedNum(FeatParser::FixedNumContext *ctx) override { | ||
| virtual std::any visitFixedNum(FeatParser::FixedNumContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGenNum(FeatParser::GenNumContext *ctx) override { | ||
| virtual std::any visitGenNum(FeatParser::GenNumContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitFeatureFile(FeatParser::FeatureFileContext *ctx) override { | ||
| virtual std::any visitFeatureFile(FeatParser::FeatureFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitStatementFile(FeatParser::StatementFileContext *ctx) override { | ||
| virtual std::any visitStatementFile(FeatParser::StatementFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitCvStatementFile(FeatParser::CvStatementFileContext *ctx) override { | ||
| virtual std::any visitCvStatementFile(FeatParser::CvStatementFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitBaseFile(FeatParser::BaseFileContext *ctx) override { | ||
| virtual std::any visitBaseFile(FeatParser::BaseFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitHeadFile(FeatParser::HeadFileContext *ctx) override { | ||
| virtual std::any visitHeadFile(FeatParser::HeadFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitHheaFile(FeatParser::HheaFileContext *ctx) override { | ||
| virtual std::any visitHheaFile(FeatParser::HheaFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitVheaFile(FeatParser::VheaFileContext *ctx) override { | ||
| virtual std::any visitVheaFile(FeatParser::VheaFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitGdefFile(FeatParser::GdefFileContext *ctx) override { | ||
| virtual std::any visitGdefFile(FeatParser::GdefFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitNameFile(FeatParser::NameFileContext *ctx) override { | ||
| virtual std::any visitNameFile(FeatParser::NameFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitVmtxFile(FeatParser::VmtxFileContext *ctx) override { | ||
| virtual std::any visitVmtxFile(FeatParser::VmtxFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitOs_2File(FeatParser::Os_2FileContext *ctx) override { | ||
| virtual std::any visitOs_2File(FeatParser::Os_2FileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitStatFile(FeatParser::StatFileContext *ctx) override { | ||
| virtual std::any visitStatFile(FeatParser::StatFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAxisValueFile(FeatParser::AxisValueFileContext *ctx) override { | ||
| virtual std::any visitAxisValueFile(FeatParser::AxisValueFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitNameEntryFile(FeatParser::NameEntryFileContext *ctx) override { | ||
| virtual std::any visitNameEntryFile(FeatParser::NameEntryFileContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitSubtok(FeatParser::SubtokContext *ctx) override { | ||
| virtual std::any visitSubtok(FeatParser::SubtokContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitRevtok(FeatParser::RevtokContext *ctx) override { | ||
| virtual std::any visitRevtok(FeatParser::RevtokContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitAnontok(FeatParser::AnontokContext *ctx) override { | ||
| virtual std::any visitAnontok(FeatParser::AnontokContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitEnumtok(FeatParser::EnumtokContext *ctx) override { | ||
| virtual std::any visitEnumtok(FeatParser::EnumtokContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitPostok(FeatParser::PostokContext *ctx) override { | ||
| virtual std::any visitPostok(FeatParser::PostokContext *ctx) override { | ||
| return visitChildren(ctx); | ||
| } | ||
| virtual antlrcpp::Any visitMarkligtok(FeatParser::MarkligtokContext *ctx) override { | ||
| virtual std::any visitMarkligtok(FeatParser::MarkligtokContext *ctx) override { | ||
| return visitChildren(ctx); | ||
@@ -461,0 +461,0 @@ } |
| // Generated from FeatParser.g4 by ANTLR 4.9.3 | ||
| // Generated from FeatParser.g4 by ANTLR 4.13.2 | ||
@@ -4,0 +4,0 @@ |
| // Generated from FeatParser.g4 by ANTLR 4.9.3 | ||
| // Generated from FeatParser.g4 by ANTLR 4.13.2 | ||
@@ -22,223 +22,223 @@ #pragma once | ||
| */ | ||
| virtual antlrcpp::Any visitFile(FeatParser::FileContext *context) = 0; | ||
| virtual std::any visitFile(FeatParser::FileContext *context) = 0; | ||
| virtual antlrcpp::Any visitTopLevelStatement(FeatParser::TopLevelStatementContext *context) = 0; | ||
| virtual std::any visitTopLevelStatement(FeatParser::TopLevelStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitInclude(FeatParser::IncludeContext *context) = 0; | ||
| virtual std::any visitInclude(FeatParser::IncludeContext *context) = 0; | ||
| virtual antlrcpp::Any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *context) = 0; | ||
| virtual std::any visitGlyphClassAssign(FeatParser::GlyphClassAssignContext *context) = 0; | ||
| virtual antlrcpp::Any visitLangsysAssign(FeatParser::LangsysAssignContext *context) = 0; | ||
| virtual std::any visitLangsysAssign(FeatParser::LangsysAssignContext *context) = 0; | ||
| virtual antlrcpp::Any visitMark_statement(FeatParser::Mark_statementContext *context) = 0; | ||
| virtual std::any visitMark_statement(FeatParser::Mark_statementContext *context) = 0; | ||
| virtual antlrcpp::Any visitAnchorDef(FeatParser::AnchorDefContext *context) = 0; | ||
| virtual std::any visitAnchorDef(FeatParser::AnchorDefContext *context) = 0; | ||
| virtual antlrcpp::Any visitValueRecordDef(FeatParser::ValueRecordDefContext *context) = 0; | ||
| virtual std::any visitValueRecordDef(FeatParser::ValueRecordDefContext *context) = 0; | ||
| virtual antlrcpp::Any visitFeatureBlock(FeatParser::FeatureBlockContext *context) = 0; | ||
| virtual std::any visitFeatureBlock(FeatParser::FeatureBlockContext *context) = 0; | ||
| virtual antlrcpp::Any visitTableBlock(FeatParser::TableBlockContext *context) = 0; | ||
| virtual std::any visitTableBlock(FeatParser::TableBlockContext *context) = 0; | ||
| virtual antlrcpp::Any visitAnonBlock(FeatParser::AnonBlockContext *context) = 0; | ||
| virtual std::any visitAnonBlock(FeatParser::AnonBlockContext *context) = 0; | ||
| virtual antlrcpp::Any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *context) = 0; | ||
| virtual std::any visitLookupBlockTopLevel(FeatParser::LookupBlockTopLevelContext *context) = 0; | ||
| virtual antlrcpp::Any visitFeatureStatement(FeatParser::FeatureStatementContext *context) = 0; | ||
| virtual std::any visitFeatureStatement(FeatParser::FeatureStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *context) = 0; | ||
| virtual std::any visitLookupBlockOrUse(FeatParser::LookupBlockOrUseContext *context) = 0; | ||
| virtual antlrcpp::Any visitCvParameterBlock(FeatParser::CvParameterBlockContext *context) = 0; | ||
| virtual std::any visitCvParameterBlock(FeatParser::CvParameterBlockContext *context) = 0; | ||
| virtual antlrcpp::Any visitCvParameterStatement(FeatParser::CvParameterStatementContext *context) = 0; | ||
| virtual std::any visitCvParameterStatement(FeatParser::CvParameterStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitCvParameter(FeatParser::CvParameterContext *context) = 0; | ||
| virtual std::any visitCvParameter(FeatParser::CvParameterContext *context) = 0; | ||
| virtual antlrcpp::Any visitStatement(FeatParser::StatementContext *context) = 0; | ||
| virtual std::any visitStatement(FeatParser::StatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitFeatureUse(FeatParser::FeatureUseContext *context) = 0; | ||
| virtual std::any visitFeatureUse(FeatParser::FeatureUseContext *context) = 0; | ||
| virtual antlrcpp::Any visitScriptAssign(FeatParser::ScriptAssignContext *context) = 0; | ||
| virtual std::any visitScriptAssign(FeatParser::ScriptAssignContext *context) = 0; | ||
| virtual antlrcpp::Any visitLangAssign(FeatParser::LangAssignContext *context) = 0; | ||
| virtual std::any visitLangAssign(FeatParser::LangAssignContext *context) = 0; | ||
| virtual antlrcpp::Any visitLookupflagAssign(FeatParser::LookupflagAssignContext *context) = 0; | ||
| virtual std::any visitLookupflagAssign(FeatParser::LookupflagAssignContext *context) = 0; | ||
| virtual antlrcpp::Any visitLookupflagElement(FeatParser::LookupflagElementContext *context) = 0; | ||
| virtual std::any visitLookupflagElement(FeatParser::LookupflagElementContext *context) = 0; | ||
| virtual antlrcpp::Any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *context) = 0; | ||
| virtual std::any visitIgnoreSubOrPos(FeatParser::IgnoreSubOrPosContext *context) = 0; | ||
| virtual antlrcpp::Any visitSubstitute(FeatParser::SubstituteContext *context) = 0; | ||
| virtual std::any visitSubstitute(FeatParser::SubstituteContext *context) = 0; | ||
| virtual antlrcpp::Any visitPosition(FeatParser::PositionContext *context) = 0; | ||
| virtual std::any visitPosition(FeatParser::PositionContext *context) = 0; | ||
| virtual antlrcpp::Any visitValuePattern(FeatParser::ValuePatternContext *context) = 0; | ||
| virtual std::any visitValuePattern(FeatParser::ValuePatternContext *context) = 0; | ||
| virtual antlrcpp::Any visitValueRecord(FeatParser::ValueRecordContext *context) = 0; | ||
| virtual std::any visitValueRecord(FeatParser::ValueRecordContext *context) = 0; | ||
| virtual antlrcpp::Any visitValueLiteral(FeatParser::ValueLiteralContext *context) = 0; | ||
| virtual std::any visitValueLiteral(FeatParser::ValueLiteralContext *context) = 0; | ||
| virtual antlrcpp::Any visitCursiveElement(FeatParser::CursiveElementContext *context) = 0; | ||
| virtual std::any visitCursiveElement(FeatParser::CursiveElementContext *context) = 0; | ||
| virtual antlrcpp::Any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *context) = 0; | ||
| virtual std::any visitBaseToMarkElement(FeatParser::BaseToMarkElementContext *context) = 0; | ||
| virtual antlrcpp::Any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *context) = 0; | ||
| virtual std::any visitLigatureMarkElement(FeatParser::LigatureMarkElementContext *context) = 0; | ||
| virtual antlrcpp::Any visitParameters(FeatParser::ParametersContext *context) = 0; | ||
| virtual std::any visitParameters(FeatParser::ParametersContext *context) = 0; | ||
| virtual antlrcpp::Any visitSizemenuname(FeatParser::SizemenunameContext *context) = 0; | ||
| virtual std::any visitSizemenuname(FeatParser::SizemenunameContext *context) = 0; | ||
| virtual antlrcpp::Any visitFeatureNames(FeatParser::FeatureNamesContext *context) = 0; | ||
| virtual std::any visitFeatureNames(FeatParser::FeatureNamesContext *context) = 0; | ||
| virtual antlrcpp::Any visitSubtable(FeatParser::SubtableContext *context) = 0; | ||
| virtual std::any visitSubtable(FeatParser::SubtableContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_BASE(FeatParser::Table_BASEContext *context) = 0; | ||
| virtual std::any visitTable_BASE(FeatParser::Table_BASEContext *context) = 0; | ||
| virtual antlrcpp::Any visitBaseStatement(FeatParser::BaseStatementContext *context) = 0; | ||
| virtual std::any visitBaseStatement(FeatParser::BaseStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitAxisTags(FeatParser::AxisTagsContext *context) = 0; | ||
| virtual std::any visitAxisTags(FeatParser::AxisTagsContext *context) = 0; | ||
| virtual antlrcpp::Any visitAxisScripts(FeatParser::AxisScriptsContext *context) = 0; | ||
| virtual std::any visitAxisScripts(FeatParser::AxisScriptsContext *context) = 0; | ||
| virtual antlrcpp::Any visitBaseScript(FeatParser::BaseScriptContext *context) = 0; | ||
| virtual std::any visitBaseScript(FeatParser::BaseScriptContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_GDEF(FeatParser::Table_GDEFContext *context) = 0; | ||
| virtual std::any visitTable_GDEF(FeatParser::Table_GDEFContext *context) = 0; | ||
| virtual antlrcpp::Any visitGdefStatement(FeatParser::GdefStatementContext *context) = 0; | ||
| virtual std::any visitGdefStatement(FeatParser::GdefStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *context) = 0; | ||
| virtual std::any visitGdefGlyphClass(FeatParser::GdefGlyphClassContext *context) = 0; | ||
| virtual antlrcpp::Any visitGdefAttach(FeatParser::GdefAttachContext *context) = 0; | ||
| virtual std::any visitGdefAttach(FeatParser::GdefAttachContext *context) = 0; | ||
| virtual antlrcpp::Any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *context) = 0; | ||
| virtual std::any visitGdefLigCaretPos(FeatParser::GdefLigCaretPosContext *context) = 0; | ||
| virtual antlrcpp::Any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *context) = 0; | ||
| virtual std::any visitGdefLigCaretIndex(FeatParser::GdefLigCaretIndexContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_head(FeatParser::Table_headContext *context) = 0; | ||
| virtual std::any visitTable_head(FeatParser::Table_headContext *context) = 0; | ||
| virtual antlrcpp::Any visitHeadStatement(FeatParser::HeadStatementContext *context) = 0; | ||
| virtual std::any visitHeadStatement(FeatParser::HeadStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitHead(FeatParser::HeadContext *context) = 0; | ||
| virtual std::any visitHead(FeatParser::HeadContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_hhea(FeatParser::Table_hheaContext *context) = 0; | ||
| virtual std::any visitTable_hhea(FeatParser::Table_hheaContext *context) = 0; | ||
| virtual antlrcpp::Any visitHheaStatement(FeatParser::HheaStatementContext *context) = 0; | ||
| virtual std::any visitHheaStatement(FeatParser::HheaStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitHhea(FeatParser::HheaContext *context) = 0; | ||
| virtual std::any visitHhea(FeatParser::HheaContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_vhea(FeatParser::Table_vheaContext *context) = 0; | ||
| virtual std::any visitTable_vhea(FeatParser::Table_vheaContext *context) = 0; | ||
| virtual antlrcpp::Any visitVheaStatement(FeatParser::VheaStatementContext *context) = 0; | ||
| virtual std::any visitVheaStatement(FeatParser::VheaStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitVhea(FeatParser::VheaContext *context) = 0; | ||
| virtual std::any visitVhea(FeatParser::VheaContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_name(FeatParser::Table_nameContext *context) = 0; | ||
| virtual std::any visitTable_name(FeatParser::Table_nameContext *context) = 0; | ||
| virtual antlrcpp::Any visitNameStatement(FeatParser::NameStatementContext *context) = 0; | ||
| virtual std::any visitNameStatement(FeatParser::NameStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitNameID(FeatParser::NameIDContext *context) = 0; | ||
| virtual std::any visitNameID(FeatParser::NameIDContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_OS_2(FeatParser::Table_OS_2Context *context) = 0; | ||
| virtual std::any visitTable_OS_2(FeatParser::Table_OS_2Context *context) = 0; | ||
| virtual antlrcpp::Any visitOs_2Statement(FeatParser::Os_2StatementContext *context) = 0; | ||
| virtual std::any visitOs_2Statement(FeatParser::Os_2StatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitOs_2(FeatParser::Os_2Context *context) = 0; | ||
| virtual std::any visitOs_2(FeatParser::Os_2Context *context) = 0; | ||
| virtual antlrcpp::Any visitTable_STAT(FeatParser::Table_STATContext *context) = 0; | ||
| virtual std::any visitTable_STAT(FeatParser::Table_STATContext *context) = 0; | ||
| virtual antlrcpp::Any visitStatStatement(FeatParser::StatStatementContext *context) = 0; | ||
| virtual std::any visitStatStatement(FeatParser::StatStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitDesignAxis(FeatParser::DesignAxisContext *context) = 0; | ||
| virtual std::any visitDesignAxis(FeatParser::DesignAxisContext *context) = 0; | ||
| virtual antlrcpp::Any visitAxisValue(FeatParser::AxisValueContext *context) = 0; | ||
| virtual std::any visitAxisValue(FeatParser::AxisValueContext *context) = 0; | ||
| virtual antlrcpp::Any visitAxisValueStatement(FeatParser::AxisValueStatementContext *context) = 0; | ||
| virtual std::any visitAxisValueStatement(FeatParser::AxisValueStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitAxisValueLocation(FeatParser::AxisValueLocationContext *context) = 0; | ||
| virtual std::any visitAxisValueLocation(FeatParser::AxisValueLocationContext *context) = 0; | ||
| virtual antlrcpp::Any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *context) = 0; | ||
| virtual std::any visitAxisValueFlags(FeatParser::AxisValueFlagsContext *context) = 0; | ||
| virtual antlrcpp::Any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *context) = 0; | ||
| virtual std::any visitElidedFallbackName(FeatParser::ElidedFallbackNameContext *context) = 0; | ||
| virtual antlrcpp::Any visitNameEntryStatement(FeatParser::NameEntryStatementContext *context) = 0; | ||
| virtual std::any visitNameEntryStatement(FeatParser::NameEntryStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *context) = 0; | ||
| virtual std::any visitElidedFallbackNameID(FeatParser::ElidedFallbackNameIDContext *context) = 0; | ||
| virtual antlrcpp::Any visitNameEntry(FeatParser::NameEntryContext *context) = 0; | ||
| virtual std::any visitNameEntry(FeatParser::NameEntryContext *context) = 0; | ||
| virtual antlrcpp::Any visitTable_vmtx(FeatParser::Table_vmtxContext *context) = 0; | ||
| virtual std::any visitTable_vmtx(FeatParser::Table_vmtxContext *context) = 0; | ||
| virtual antlrcpp::Any visitVmtxStatement(FeatParser::VmtxStatementContext *context) = 0; | ||
| virtual std::any visitVmtxStatement(FeatParser::VmtxStatementContext *context) = 0; | ||
| virtual antlrcpp::Any visitVmtx(FeatParser::VmtxContext *context) = 0; | ||
| virtual std::any visitVmtx(FeatParser::VmtxContext *context) = 0; | ||
| virtual antlrcpp::Any visitAnchor(FeatParser::AnchorContext *context) = 0; | ||
| virtual std::any visitAnchor(FeatParser::AnchorContext *context) = 0; | ||
| virtual antlrcpp::Any visitLookupPattern(FeatParser::LookupPatternContext *context) = 0; | ||
| virtual std::any visitLookupPattern(FeatParser::LookupPatternContext *context) = 0; | ||
| virtual antlrcpp::Any visitLookupPatternElement(FeatParser::LookupPatternElementContext *context) = 0; | ||
| virtual std::any visitLookupPatternElement(FeatParser::LookupPatternElementContext *context) = 0; | ||
| virtual antlrcpp::Any visitPattern(FeatParser::PatternContext *context) = 0; | ||
| virtual std::any visitPattern(FeatParser::PatternContext *context) = 0; | ||
| virtual antlrcpp::Any visitPatternElement(FeatParser::PatternElementContext *context) = 0; | ||
| virtual std::any visitPatternElement(FeatParser::PatternElementContext *context) = 0; | ||
| virtual antlrcpp::Any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *context) = 0; | ||
| virtual std::any visitGlyphClassOptional(FeatParser::GlyphClassOptionalContext *context) = 0; | ||
| virtual antlrcpp::Any visitGlyphClass(FeatParser::GlyphClassContext *context) = 0; | ||
| virtual std::any visitGlyphClass(FeatParser::GlyphClassContext *context) = 0; | ||
| virtual antlrcpp::Any visitGcLiteral(FeatParser::GcLiteralContext *context) = 0; | ||
| virtual std::any visitGcLiteral(FeatParser::GcLiteralContext *context) = 0; | ||
| virtual antlrcpp::Any visitGcLiteralElement(FeatParser::GcLiteralElementContext *context) = 0; | ||
| virtual std::any visitGcLiteralElement(FeatParser::GcLiteralElementContext *context) = 0; | ||
| virtual antlrcpp::Any visitGlyph(FeatParser::GlyphContext *context) = 0; | ||
| virtual std::any visitGlyph(FeatParser::GlyphContext *context) = 0; | ||
| virtual antlrcpp::Any visitGlyphName(FeatParser::GlyphNameContext *context) = 0; | ||
| virtual std::any visitGlyphName(FeatParser::GlyphNameContext *context) = 0; | ||
| virtual antlrcpp::Any visitLabel(FeatParser::LabelContext *context) = 0; | ||
| virtual std::any visitLabel(FeatParser::LabelContext *context) = 0; | ||
| virtual antlrcpp::Any visitTag(FeatParser::TagContext *context) = 0; | ||
| virtual std::any visitTag(FeatParser::TagContext *context) = 0; | ||
| virtual antlrcpp::Any visitFixedNum(FeatParser::FixedNumContext *context) = 0; | ||
| virtual std::any visitFixedNum(FeatParser::FixedNumContext *context) = 0; | ||
| virtual antlrcpp::Any visitGenNum(FeatParser::GenNumContext *context) = 0; | ||
| virtual std::any visitGenNum(FeatParser::GenNumContext *context) = 0; | ||
| virtual antlrcpp::Any visitFeatureFile(FeatParser::FeatureFileContext *context) = 0; | ||
| virtual std::any visitFeatureFile(FeatParser::FeatureFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitStatementFile(FeatParser::StatementFileContext *context) = 0; | ||
| virtual std::any visitStatementFile(FeatParser::StatementFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitCvStatementFile(FeatParser::CvStatementFileContext *context) = 0; | ||
| virtual std::any visitCvStatementFile(FeatParser::CvStatementFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitBaseFile(FeatParser::BaseFileContext *context) = 0; | ||
| virtual std::any visitBaseFile(FeatParser::BaseFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitHeadFile(FeatParser::HeadFileContext *context) = 0; | ||
| virtual std::any visitHeadFile(FeatParser::HeadFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitHheaFile(FeatParser::HheaFileContext *context) = 0; | ||
| virtual std::any visitHheaFile(FeatParser::HheaFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitVheaFile(FeatParser::VheaFileContext *context) = 0; | ||
| virtual std::any visitVheaFile(FeatParser::VheaFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitGdefFile(FeatParser::GdefFileContext *context) = 0; | ||
| virtual std::any visitGdefFile(FeatParser::GdefFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitNameFile(FeatParser::NameFileContext *context) = 0; | ||
| virtual std::any visitNameFile(FeatParser::NameFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitVmtxFile(FeatParser::VmtxFileContext *context) = 0; | ||
| virtual std::any visitVmtxFile(FeatParser::VmtxFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitOs_2File(FeatParser::Os_2FileContext *context) = 0; | ||
| virtual std::any visitOs_2File(FeatParser::Os_2FileContext *context) = 0; | ||
| virtual antlrcpp::Any visitStatFile(FeatParser::StatFileContext *context) = 0; | ||
| virtual std::any visitStatFile(FeatParser::StatFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitAxisValueFile(FeatParser::AxisValueFileContext *context) = 0; | ||
| virtual std::any visitAxisValueFile(FeatParser::AxisValueFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitNameEntryFile(FeatParser::NameEntryFileContext *context) = 0; | ||
| virtual std::any visitNameEntryFile(FeatParser::NameEntryFileContext *context) = 0; | ||
| virtual antlrcpp::Any visitSubtok(FeatParser::SubtokContext *context) = 0; | ||
| virtual std::any visitSubtok(FeatParser::SubtokContext *context) = 0; | ||
| virtual antlrcpp::Any visitRevtok(FeatParser::RevtokContext *context) = 0; | ||
| virtual std::any visitRevtok(FeatParser::RevtokContext *context) = 0; | ||
| virtual antlrcpp::Any visitAnontok(FeatParser::AnontokContext *context) = 0; | ||
| virtual std::any visitAnontok(FeatParser::AnontokContext *context) = 0; | ||
| virtual antlrcpp::Any visitEnumtok(FeatParser::EnumtokContext *context) = 0; | ||
| virtual std::any visitEnumtok(FeatParser::EnumtokContext *context) = 0; | ||
| virtual antlrcpp::Any visitPostok(FeatParser::PostokContext *context) = 0; | ||
| virtual std::any visitPostok(FeatParser::PostokContext *context) = 0; | ||
| virtual antlrcpp::Any visitMarkligtok(FeatParser::MarkligtokContext *context) = 0; | ||
| virtual std::any visitMarkligtok(FeatParser::MarkligtokContext *context) = 0; | ||
@@ -245,0 +245,0 @@ |
@@ -6,3 +6,3 @@ /* Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/). All Rights Reserved. | ||
| /* | ||
| * Adobe Glyph List v1.2, sorted by glyph name. 1051 entries. | ||
| * Adobe Glyph List v1.3, sorted by glyph name. 903 entries. | ||
| * | ||
@@ -16,4 +16,4 @@ * Some glyph names are mapped to two Unicode values. In these cases, the entry | ||
| * | ||
| * Refer to the document "Unicode and Glyph Names" at: | ||
| * http://partners.adobe.com/asn/developer/typeforum/unicodegn.html | ||
| * Refer to the AGL specification at | ||
| * https://github.com/adobe-type-tools/agl-specification | ||
| * for information on how to use this list. | ||
@@ -32,14 +32,7 @@ * | ||
| { "AEacute", 0x01FC }, | ||
| { "AEsmall", 0xF7E6 }, | ||
| { "Aacute", 0x00C1 }, | ||
| { "Aacutesmall", 0xF7E1 }, | ||
| { "Abreve", 0x0102 }, | ||
| { "Acircumflex", 0x00C2 }, | ||
| { "Acircumflexsmall", 0xF7E2 }, | ||
| { "Acute", 0xF6C9 }, | ||
| { "Acutesmall", 0xF7B4 }, | ||
| { "Adieresis", 0x00C4 }, | ||
| { "Adieresissmall", 0xF7E4 }, | ||
| { "Agrave", 0x00C0 }, | ||
| { "Agravesmall", 0xF7E0 }, | ||
| { "Alpha", 0x0391 }, | ||
@@ -51,23 +44,12 @@ { "Alphatonos", 0x0386 }, | ||
| { "Aringacute", 0x01FA }, | ||
| { "Aringsmall", 0xF7E5 }, | ||
| { "Asmall", 0xF761 }, | ||
| { "Atilde", 0x00C3 }, | ||
| { "Atildesmall", 0xF7E3 }, | ||
| { "B", 0x0042 }, | ||
| { "Beta", 0x0392 }, | ||
| { "Brevesmall", 0xF6F4 }, | ||
| { "Bsmall", 0xF762 }, | ||
| { "C", 0x0043 }, | ||
| { "Cacute", 0x0106 }, | ||
| { "Caron", 0xF6CA }, | ||
| { "Caronsmall", 0xF6F5 }, | ||
| { "Ccaron", 0x010C }, | ||
| { "Ccedilla", 0x00C7 }, | ||
| { "Ccedillasmall", 0xF7E7 }, | ||
| { "Ccircumflex", 0x0108 }, | ||
| { "Cdotaccent", 0x010A }, | ||
| { "Cedillasmall", 0xF7B8 }, | ||
| { "Chi", 0x03A7 }, | ||
| { "Circumflexsmall", 0xF6F6 }, | ||
| { "Csmall", 0xF763 }, | ||
| { "D", 0x0044 }, | ||
@@ -78,20 +60,10 @@ { "Dcaron", 0x010E }, | ||
| { "Delta%", 0x0394 }, | ||
| { "Dieresis", 0xF6CB }, | ||
| { "DieresisAcute", 0xF6CC }, | ||
| { "DieresisGrave", 0xF6CD }, | ||
| { "Dieresissmall", 0xF7A8 }, | ||
| { "Dotaccentsmall", 0xF6F7 }, | ||
| { "Dsmall", 0xF764 }, | ||
| { "E", 0x0045 }, | ||
| { "Eacute", 0x00C9 }, | ||
| { "Eacutesmall", 0xF7E9 }, | ||
| { "Ebreve", 0x0114 }, | ||
| { "Ecaron", 0x011A }, | ||
| { "Ecircumflex", 0x00CA }, | ||
| { "Ecircumflexsmall", 0xF7EA }, | ||
| { "Edieresis", 0x00CB }, | ||
| { "Edieresissmall", 0xF7EB }, | ||
| { "Edotaccent", 0x0116 }, | ||
| { "Egrave", 0x00C8 }, | ||
| { "Egravesmall", 0xF7E8 }, | ||
| { "Emacron", 0x0112 }, | ||
@@ -102,10 +74,7 @@ { "Eng", 0x014A }, | ||
| { "Epsilontonos", 0x0388 }, | ||
| { "Esmall", 0xF765 }, | ||
| { "Eta", 0x0397 }, | ||
| { "Etatonos", 0x0389 }, | ||
| { "Eth", 0x00D0 }, | ||
| { "Ethsmall", 0xF7F0 }, | ||
| { "Euro", 0x20AC }, | ||
| { "F", 0x0046 }, | ||
| { "Fsmall", 0xF766 }, | ||
| { "G", 0x0047 }, | ||
@@ -118,5 +87,2 @@ { "Gamma", 0x0393 }, | ||
| { "Gdotaccent", 0x0120 }, | ||
| { "Grave", 0xF6CE }, | ||
| { "Gravesmall", 0xF760 }, | ||
| { "Gsmall", 0xF767 }, | ||
| { "H", 0x0048 }, | ||
@@ -129,18 +95,11 @@ { "H18533", 0x25CF }, | ||
| { "Hcircumflex", 0x0124 }, | ||
| { "Hsmall", 0xF768 }, | ||
| { "Hungarumlaut", 0xF6CF }, | ||
| { "Hungarumlautsmall", 0xF6F8 }, | ||
| { "I", 0x0049 }, | ||
| { "IJ", 0x0132 }, | ||
| { "Iacute", 0x00CD }, | ||
| { "Iacutesmall", 0xF7ED }, | ||
| { "Ibreve", 0x012C }, | ||
| { "Icircumflex", 0x00CE }, | ||
| { "Icircumflexsmall", 0xF7EE }, | ||
| { "Idieresis", 0x00CF }, | ||
| { "Idieresissmall", 0xF7EF }, | ||
| { "Idotaccent", 0x0130 }, | ||
| { "Ifraktur", 0x2111 }, | ||
| { "Igrave", 0x00CC }, | ||
| { "Igravesmall", 0xF7EC }, | ||
| { "Imacron", 0x012A }, | ||
@@ -151,13 +110,9 @@ { "Iogonek", 0x012E }, | ||
| { "Iotatonos", 0x038A }, | ||
| { "Ismall", 0xF769 }, | ||
| { "Itilde", 0x0128 }, | ||
| { "J", 0x004A }, | ||
| { "Jcircumflex", 0x0134 }, | ||
| { "Jsmall", 0xF76A }, | ||
| { "K", 0x004B }, | ||
| { "Kappa", 0x039A }, | ||
| { "Kcommaaccent", 0x0136 }, | ||
| { "Ksmall", 0xF76B }, | ||
| { "L", 0x004C }, | ||
| { "LL", 0xF6BF }, | ||
| { "Lacute", 0x0139 }, | ||
@@ -169,8 +124,3 @@ { "Lambda", 0x039B }, | ||
| { "Lslash", 0x0141 }, | ||
| { "Lslashsmall", 0xF6F9 }, | ||
| { "Lsmall", 0xF76C }, | ||
| { "M", 0x004D }, | ||
| { "Macron", 0xF6D0 }, | ||
| { "Macronsmall", 0xF7AF }, | ||
| { "Msmall", 0xF76D }, | ||
| { "Mu", 0x039C }, | ||
@@ -181,19 +131,11 @@ { "N", 0x004E }, | ||
| { "Ncommaaccent", 0x0145 }, | ||
| { "Nsmall", 0xF76E }, | ||
| { "Ntilde", 0x00D1 }, | ||
| { "Ntildesmall", 0xF7F1 }, | ||
| { "Nu", 0x039D }, | ||
| { "O", 0x004F }, | ||
| { "OE", 0x0152 }, | ||
| { "OEsmall", 0xF6FA }, | ||
| { "Oacute", 0x00D3 }, | ||
| { "Oacutesmall", 0xF7F3 }, | ||
| { "Obreve", 0x014E }, | ||
| { "Ocircumflex", 0x00D4 }, | ||
| { "Ocircumflexsmall", 0xF7F4 }, | ||
| { "Odieresis", 0x00D6 }, | ||
| { "Odieresissmall", 0xF7F6 }, | ||
| { "Ogoneksmall", 0xF6FB }, | ||
| { "Ograve", 0x00D2 }, | ||
| { "Ogravesmall", 0xF7F2 }, | ||
| { "Ohorn", 0x01A0 }, | ||
@@ -209,6 +151,3 @@ { "Ohungarumlaut", 0x0150 }, | ||
| { "Oslashacute", 0x01FE }, | ||
| { "Oslashsmall", 0xF7F8 }, | ||
| { "Osmall", 0xF76F }, | ||
| { "Otilde", 0x00D5 }, | ||
| { "Otildesmall", 0xF7F5 }, | ||
| { "P", 0x0050 }, | ||
@@ -218,5 +157,3 @@ { "Phi", 0x03A6 }, | ||
| { "Psi", 0x03A8 }, | ||
| { "Psmall", 0xF770 }, | ||
| { "Q", 0x0051 }, | ||
| { "Qsmall", 0xF771 }, | ||
| { "R", 0x0052 }, | ||
@@ -228,4 +165,2 @@ { "Racute", 0x0154 }, | ||
| { "Rho", 0x03A1 }, | ||
| { "Ringsmall", 0xF6FC }, | ||
| { "Rsmall", 0xF772 }, | ||
| { "S", 0x0053 }, | ||
@@ -274,9 +209,6 @@ { "SF010000", 0x250C }, | ||
| { "Scaron", 0x0160 }, | ||
| { "Scaronsmall", 0xF6FD }, | ||
| { "Scedilla", 0x015E }, | ||
| { "Scedilla%", 0xF6C1 }, | ||
| { "Scircumflex", 0x015C }, | ||
| { "Scommaaccent", 0x0218 }, | ||
| { "Sigma", 0x03A3 }, | ||
| { "Ssmall", 0xF773 }, | ||
| { "T", 0x0054 }, | ||
@@ -290,15 +222,8 @@ { "Tau", 0x03A4 }, | ||
| { "Thorn", 0x00DE }, | ||
| { "Thornsmall", 0xF7FE }, | ||
| { "Tildesmall", 0xF6FE }, | ||
| { "Tsmall", 0xF774 }, | ||
| { "U", 0x0055 }, | ||
| { "Uacute", 0x00DA }, | ||
| { "Uacutesmall", 0xF7FA }, | ||
| { "Ubreve", 0x016C }, | ||
| { "Ucircumflex", 0x00DB }, | ||
| { "Ucircumflexsmall", 0xF7FB }, | ||
| { "Udieresis", 0x00DC }, | ||
| { "Udieresissmall", 0xF7FC }, | ||
| { "Ugrave", 0x00D9 }, | ||
| { "Ugravesmall", 0xF7F9 }, | ||
| { "Uhorn", 0x01AF }, | ||
@@ -313,6 +238,4 @@ { "Uhungarumlaut", 0x0170 }, | ||
| { "Uring", 0x016E }, | ||
| { "Usmall", 0xF775 }, | ||
| { "Utilde", 0x0168 }, | ||
| { "V", 0x0056 }, | ||
| { "Vsmall", 0xF776 }, | ||
| { "W", 0x0057 }, | ||
@@ -323,21 +246,14 @@ { "Wacute", 0x1E82 }, | ||
| { "Wgrave", 0x1E80 }, | ||
| { "Wsmall", 0xF777 }, | ||
| { "X", 0x0058 }, | ||
| { "Xi", 0x039E }, | ||
| { "Xsmall", 0xF778 }, | ||
| { "Y", 0x0059 }, | ||
| { "Yacute", 0x00DD }, | ||
| { "Yacutesmall", 0xF7FD }, | ||
| { "Ycircumflex", 0x0176 }, | ||
| { "Ydieresis", 0x0178 }, | ||
| { "Ydieresissmall", 0xF7FF }, | ||
| { "Ygrave", 0x1EF2 }, | ||
| { "Ysmall", 0xF779 }, | ||
| { "Z", 0x005A }, | ||
| { "Zacute", 0x0179 }, | ||
| { "Zcaron", 0x017D }, | ||
| { "Zcaronsmall", 0xF6FF }, | ||
| { "Zdotaccent", 0x017B }, | ||
| { "Zeta", 0x0396 }, | ||
| { "Zsmall", 0xF77A }, | ||
| { "a", 0x0061 }, | ||
@@ -399,4 +315,2 @@ { "aacute", 0x00E1 }, | ||
| { "afii10062", 0x040E }, | ||
| { "afii10063", 0xF6C4 }, | ||
| { "afii10064", 0xF6C5 }, | ||
| { "afii10065", 0x0430 }, | ||
@@ -452,3 +366,2 @@ { "afii10066", 0x0431 }, | ||
| { "afii10148", 0x0474 }, | ||
| { "afii10192", 0xF6C6 }, | ||
| { "afii10193", 0x045F }, | ||
@@ -458,4 +371,2 @@ { "afii10194", 0x0463 }, | ||
| { "afii10196", 0x0475 }, | ||
| { "afii10831", 0xF6C7 }, | ||
| { "afii10832", 0xF6C8 }, | ||
| { "afii10846", 0x04D9 }, | ||
@@ -606,3 +517,2 @@ { "afii299", 0x200E }, | ||
| { "ampersand", 0x0026 }, | ||
| { "ampersandsmall", 0xF726 }, | ||
| { "angle", 0x2220 }, | ||
@@ -629,3 +539,2 @@ { "angleleft", 0x2329 }, | ||
| { "arrowupdnbse", 0x21A8 }, | ||
| { "arrowvertex", 0xF8E6 }, | ||
| { "asciicircum", 0x005E }, | ||
@@ -635,3 +544,2 @@ { "asciitilde", 0x007E }, | ||
| { "asteriskmath", 0x2217 }, | ||
| { "asuperior", 0xF6E9 }, | ||
| { "at", 0x0040 }, | ||
@@ -663,3 +571,2 @@ { "atilde", 0x00E3 }, | ||
| { "brokenbar", 0x00A6 }, | ||
| { "bsuperior", 0xF6EA }, | ||
| { "bullet", 0x2022 }, | ||
@@ -676,5 +583,2 @@ { "c", 0x0063 }, | ||
| { "cent", 0x00A2 }, | ||
| { "centinferior", 0xF6DF }, | ||
| { "centoldstyle", 0xF7A2 }, | ||
| { "centsuperior", 0xF6E0 }, | ||
| { "chi", 0x03C7 }, | ||
@@ -689,19 +593,8 @@ { "circle", 0x25CB }, | ||
| { "comma", 0x002C }, | ||
| { "commaaccent", 0xF6C3 }, | ||
| { "commainferior", 0xF6E1 }, | ||
| { "commasuperior", 0xF6E2 }, | ||
| { "congruent", 0x2245 }, | ||
| { "copyright", 0x00A9 }, | ||
| { "copyrightsans", 0xF8E9 }, | ||
| { "copyrightserif", 0xF6D9 }, | ||
| { "currency", 0x00A4 }, | ||
| { "cyrBreve", 0xF6D1 }, | ||
| { "cyrFlex", 0xF6D2 }, | ||
| { "cyrbreve", 0xF6D4 }, | ||
| { "cyrflex", 0xF6D5 }, | ||
| { "d", 0x0064 }, | ||
| { "dagger", 0x2020 }, | ||
| { "daggerdbl", 0x2021 }, | ||
| { "dblGrave", 0xF6D3 }, | ||
| { "dblgrave", 0xF6D6 }, | ||
| { "dcaron", 0x010F }, | ||
@@ -713,4 +606,2 @@ { "dcroat", 0x0111 }, | ||
| { "dieresis", 0x00A8 }, | ||
| { "dieresisacute", 0xF6D7 }, | ||
| { "dieresisgrave", 0xF6D8 }, | ||
| { "dieresistonos", 0x0385 }, | ||
@@ -721,5 +612,2 @@ { "divide", 0x00F7 }, | ||
| { "dollar", 0x0024 }, | ||
| { "dollarinferior", 0xF6E3 }, | ||
| { "dollaroldstyle", 0xF724 }, | ||
| { "dollarsuperior", 0xF6E4 }, | ||
| { "dong", 0x20AB }, | ||
@@ -729,5 +617,3 @@ { "dotaccent", 0x02D9 }, | ||
| { "dotlessi", 0x0131 }, | ||
| { "dotlessj", 0xF6BE }, | ||
| { "dotmath", 0x22C5 }, | ||
| { "dsuperior", 0xF6EB }, | ||
| { "e", 0x0065 }, | ||
@@ -743,3 +629,2 @@ { "eacute", 0x00E9 }, | ||
| { "eightinferior", 0x2088 }, | ||
| { "eightoldstyle", 0xF738 }, | ||
| { "eightsuperior", 0x2078 }, | ||
@@ -759,3 +644,2 @@ { "element", 0x2208 }, | ||
| { "estimated", 0x212E }, | ||
| { "esuperior", 0xF6EC }, | ||
| { "eta", 0x03B7 }, | ||
@@ -767,4 +651,2 @@ { "etatonos", 0x03AE }, | ||
| { "exclamdown", 0x00A1 }, | ||
| { "exclamdownsmall", 0xF7A1 }, | ||
| { "exclamsmall", 0xF721 }, | ||
| { "existential", 0x2203 }, | ||
@@ -783,3 +665,2 @@ { "f", 0x0066 }, | ||
| { "fiveinferior", 0x2085 }, | ||
| { "fiveoldstyle", 0xF735 }, | ||
| { "fivesuperior", 0x2075 }, | ||
@@ -790,3 +671,2 @@ { "fl", 0xFB02 }, | ||
| { "fourinferior", 0x2084 }, | ||
| { "fouroldstyle", 0xF734 }, | ||
| { "foursuperior", 0x2074 }, | ||
@@ -822,4 +702,2 @@ { "fraction", 0x2044 }, | ||
| { "hyphen%", 0x00AD }, | ||
| { "hypheninferior", 0xF6E5 }, | ||
| { "hyphensuperior", 0xF6E6 }, | ||
| { "i", 0x0069 }, | ||
@@ -847,3 +725,2 @@ { "iacute", 0x00ED }, | ||
| { "iotatonos", 0x03AF }, | ||
| { "isuperior", 0xF6ED }, | ||
| { "itilde", 0x0129 }, | ||
@@ -866,3 +743,2 @@ { "j", 0x006A }, | ||
| { "lira", 0x20A4 }, | ||
| { "ll", 0xF6C0 }, | ||
| { "logicaland", 0x2227 }, | ||
@@ -874,3 +750,2 @@ { "logicalnot", 0x00AC }, | ||
| { "lslash", 0x0142 }, | ||
| { "lsuperior", 0xF6EE }, | ||
| { "ltshade", 0x2591 }, | ||
@@ -883,3 +758,2 @@ { "m", 0x006D }, | ||
| { "minute", 0x2032 }, | ||
| { "msuperior", 0xF6EF }, | ||
| { "mu", 0x00B5 }, | ||
@@ -897,3 +771,2 @@ { "mu%", 0x03BC }, | ||
| { "nineinferior", 0x2089 }, | ||
| { "nineoldstyle", 0xF739 }, | ||
| { "ninesuperior", 0x2079 }, | ||
@@ -926,6 +799,4 @@ { "notelement", 0x2209 }, | ||
| { "oneeighth", 0x215B }, | ||
| { "onefitted", 0xF6DC }, | ||
| { "onehalf", 0x00BD }, | ||
| { "oneinferior", 0x2081 }, | ||
| { "oneoldstyle", 0xF731 }, | ||
| { "onequarter", 0x00BC }, | ||
@@ -940,3 +811,2 @@ { "onesuperior", 0x00B9 }, | ||
| { "oslashacute", 0x01FF }, | ||
| { "osuperior", 0xF6F0 }, | ||
| { "otilde", 0x00F5 }, | ||
@@ -962,4 +832,2 @@ { "p", 0x0070 }, | ||
| { "periodcentered%", 0x2219 }, | ||
| { "periodinferior", 0xF6E7 }, | ||
| { "periodsuperior", 0xF6E8 }, | ||
| { "perpendicular", 0x22A5 }, | ||
@@ -982,4 +850,2 @@ { "perthousand", 0x2030 }, | ||
| { "questiondown", 0x00BF }, | ||
| { "questiondownsmall", 0xF7BF }, | ||
| { "questionsmall", 0xF73F }, | ||
| { "quotedbl", 0x0022 }, | ||
@@ -997,3 +863,2 @@ { "quotedblbase", 0x201E }, | ||
| { "radical", 0x221A }, | ||
| { "radicalex", 0xF8E5 }, | ||
| { "rcaron", 0x0159 }, | ||
@@ -1004,10 +869,6 @@ { "rcommaaccent", 0x0157 }, | ||
| { "registered", 0x00AE }, | ||
| { "registersans", 0xF8E8 }, | ||
| { "registerserif", 0xF6DA }, | ||
| { "revlogicalnot", 0x2310 }, | ||
| { "rho", 0x03C1 }, | ||
| { "ring", 0x02DA }, | ||
| { "rsuperior", 0xF6F1 }, | ||
| { "rtblock", 0x2590 }, | ||
| { "rupiah", 0xF6DD }, | ||
| { "s", 0x0073 }, | ||
@@ -1017,3 +878,2 @@ { "sacute", 0x015B }, | ||
| { "scedilla", 0x015F }, | ||
| { "scedilla%", 0xF6C2 }, | ||
| { "scircumflex", 0x015D }, | ||
@@ -1027,3 +887,2 @@ { "scommaaccent", 0x0219 }, | ||
| { "seveninferior", 0x2087 }, | ||
| { "sevenoldstyle", 0xF737 }, | ||
| { "sevensuperior", 0x2077 }, | ||
@@ -1036,3 +895,2 @@ { "shade", 0x2592 }, | ||
| { "sixinferior", 0x2086 }, | ||
| { "sixoldstyle", 0xF736 }, | ||
| { "sixsuperior", 0x2076 }, | ||
@@ -1044,3 +902,2 @@ { "slash", 0x002F }, | ||
| { "spade", 0x2660 }, | ||
| { "ssuperior", 0xF6F2 }, | ||
| { "sterling", 0x00A3 }, | ||
@@ -1063,5 +920,3 @@ { "suchthat", 0x220B }, | ||
| { "threeinferior", 0x2083 }, | ||
| { "threeoldstyle", 0xF733 }, | ||
| { "threequarters", 0x00BE }, | ||
| { "threequartersemdash", 0xF6DE }, | ||
| { "threesuperior", 0x00B3 }, | ||
@@ -1072,4 +927,2 @@ { "tilde", 0x02DC }, | ||
| { "trademark", 0x2122 }, | ||
| { "trademarksans", 0xF8EA }, | ||
| { "trademarkserif", 0xF6DB }, | ||
| { "triagdn", 0x25BC }, | ||
@@ -1079,7 +932,5 @@ { "triaglf", 0x25C4 }, | ||
| { "triagup", 0x25B2 }, | ||
| { "tsuperior", 0xF6F3 }, | ||
| { "two", 0x0032 }, | ||
| { "twodotenleader", 0x2025 }, | ||
| { "twoinferior", 0x2082 }, | ||
| { "twooldstyle", 0xF732 }, | ||
| { "twosuperior", 0x00B2 }, | ||
@@ -1129,4 +980,3 @@ { "twothirds", 0x2154 }, | ||
| { "zeroinferior", 0x2080 }, | ||
| { "zerooldstyle", 0xF730 }, | ||
| { "zerosuperior", 0x2070 }, | ||
| { "zeta", 0x03B6 }, |
@@ -16,7 +16,7 @@ include(ExternalProject) | ||
| if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") | ||
| set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/dist/$(Configuration)) | ||
| set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/runtime/$(Configuration)) | ||
| elseif(${CMAKE_GENERATOR} MATCHES "Xcode.*") | ||
| set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/dist/$(CONFIGURATION)) | ||
| set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/runtime) | ||
| else() | ||
| set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/dist) | ||
| set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/runtime) | ||
| endif() | ||
@@ -93,2 +93,5 @@ | ||
| -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} | ||
| -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} | ||
| -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON | ||
| -DANTLR_BUILD_CPP_TESTS:BOOL=OFF | ||
| # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard | ||
@@ -112,2 +115,5 @@ # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project | ||
| -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} | ||
| -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} | ||
| -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON | ||
| -DANTLR_BUILD_CPP_TESTS:BOOL=OFF | ||
| # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard | ||
@@ -114,0 +120,0 @@ # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project |
@@ -41,4 +41,6 @@ cmake_minimum_required(VERSION 3.16) | ||
| set(ANTLR4_WITH_STATIC_CRT OFF) | ||
| # 4.9.3 is the latest ANTLR4 version | ||
| set(ANTLR4_TAG tags/4.9.3) | ||
| # set(ANTLR4_TAG tags/4.13.2) | ||
| # This is a more recent commit than 4.13.2 that addresses a missing | ||
| # include directive needed in more recent Visual Studio releases | ||
| set(ANTLR4_TAG df4d68c09cdef73e023b8838a8bc7ca4dff1d1de) | ||
| include(ExternalAntlr4Cpp) | ||
@@ -45,0 +47,0 @@ |
@@ -8,11 +8,11 @@ Adobe Font Development Kit for OpenType (AFDKO) Overview | ||
| This release of the Adobe Font Development Kit for OpenType (AFDKO) contains a set of tools used to make OpenType fonts by adding the OpenType-specific data to a TrueType or Type1 font. It does not offer tools for designing or editing glyphs. These command line programs will allow you to build an OpenType font from an existing font, verify the contents of the font, and proof the font on screen or on paper. The AFDKO also contains useful technical documentation and some example font source material. Note! Although the FDK directory tree contains a number of Python scripts, none of them can be used by double-clicking on them; they can only be called by typing commands into a command line window. | ||
| The Adobe Font Development Kit for OpenType (AFDKO) contains a set of tools for making make OpenType fonts by adding the OpenType-specific data to a TrueType or Type1 font. These command line programs will allow you to build an OpenType font from an existing font- or UFO file, to verify the contents of the font, and to proof the font on screen or on paper. The AFDKO also contains useful technical documentation and some example font source material. | ||
| See the [`afdko`](https://github.com/adobe-type-tools/afdko) home page for installation instructions. | ||
| Once the AFDKO is installed, all the command line programs can be run by entering the command name in a Terminal window (OSX, Windows, Linux), along with the necessary option text. All command line tools provide usage and help text with the options `-u` and `-h`. | ||
| Once the AFDKO is installed, all the command line programs can be run by entering the command name in a Terminal window, along with the necessary arguments. All command line tools provide usage (`-u`) and help (`-h`) information. | ||
| # 2. Overview of Programs | ||
| The tools fall into several different functional groups. | ||
| The AFDKO tools fall into several different functional groups. | ||
@@ -23,25 +23,35 @@ ## 2.1 Making/editing fonts | ||
| This program is the Adobe auto-hinter. It is used by several AFDKO tools. | ||
| `otfautohint` uses global hinting information (stems and alignment zones) to apply hints to a font or font source file. `otfautohint` can be used with UFO files (cubic outlines), and OpenType/CFF or Type 1 fonts. | ||
| It can be applied to both OpenType/CFF and Type 1 fonts. Works with Type 1 and OpenType/CFF fonts only. | ||
| ### `checkoutlinesufo` | ||
| With the `-e` option, `checkoutlinesufo` is used to remove overlaps. When working with UFO files, the results of overlap removal are written to a new layer (`com.adobe.type.processedglyphs`), the original glyph is not touched. | ||
| ### `makeotf` | ||
| This program will build an OpenType/CFF font from a feature file that defines the OpenType layout rules, and overrides for default values, and a font file (Type 1 font, TrueType font, 'detype1' text version of a Type 1 font, or UFO font). It also requires some other meta-data files. It will also build an OpenType/TTF font from a TrueType source font file. | ||
| This program will build an OpenType/CFF font from a font (source) file and auxiliary metadata files. | ||
| Typical input formats are | ||
| * UFO (font source format, cubic outlines) | ||
| * PFA (Type 1 font) | ||
| * TXT (decrypted plain-text version of a Type 1 font, obtained via `detype1`) | ||
| * TTF (TrueType source font file) | ||
| `makeotf` also optionally accepts further metadata files, e.g. a feature file that defines the OpenType layout rules, overrides for makeotf’s default values, a GlyphOrderAndAliasDB, etc. For details, see the makeotf user guide. | ||
| ### `buildmasterotfs` | ||
| This script uses `makeotf` to build OTF files from a .designspace file with compatible UFO masters. These OTF files represent the first step toward building a CFF2 variable font. | ||
| Step 1 of 2 to build a CFF Variable Font – this script builds static OTF files (with overlaps) from a .designspace file with compatible UFO masters. | ||
| ### `buildcff2vf` | ||
| This script will use a .designspace file and the output OTFs of `buildmasterotfs` to assemble a CFF2 variable font file. | ||
| Step 2 of 2 to build a CFF Variable Font – this script will use a .designspace file and the output OTFs of `buildmasterotfs` to assemble a CFF2 variable font file. | ||
| ### `makeinstancesufo` | ||
| This script will generate UFO instances from a .designspace file, and a set of compatible UFO masters. More info on designspace files and interpolation systems can be found at [Superpolator.com](http://superpolator.com/) and [DesignSpaceDocument Specification](https://github.com/fonttools/fonttools/tree/master/Doc/source/designspaceLib). | ||
| `makeinstancesufo` is a tool to build UFO instances from a .designspace file and a set of compatible UFO masters, to prepare for building static OTF fonts. By default, the instances are run through `checkoutlinesufo` (for overlap removal) and `otfautohint` (for PS hinting). Finally, the UFO instances are normalized. | ||
| More info on designspace files and interpolation systems can be found at [Superpolator.com](https://superpolator.com/designspace.html) and [DesignSpaceDocument Specification](https://fonttools.readthedocs.io/en/latest/designspaceLib/index.html). | ||
| ### `mergefonts` | ||
| This program will merge glyphs from one font into another, optionally copying a subset from the source fonts, and changing the names of the glyphs. It can also be used to subset and change the glyph names in a font. By using the same font more than once as a source with different mapping files, glyphs can be duplicated under other names. It can also convert a named-keyed font to a CID-keyed font. | ||
| This program will merge glyphs from one font into another, optionally copying a subset from the source fonts, and changing the names of the glyphs. It can also be used to subset and change the glyph names in a font. By using the same font more than once as a source with different mapping files, glyphs can be duplicated under other names. `mergefonts` can also convert a named-keyed font to a CID-keyed font. | ||
@@ -62,33 +72,28 @@ ### `otc2otf` | ||
| This tool will rotate and translate glyphs in a font, including the hints. However, hints will be discarded if the rotation is not a multiple of 90 degrees. | ||
| This tool will rotate and translate glyphs in a font, including the hints (rotated Latin glyphs are common in CJK fonts). Hints will be discarded if the rotation is not a multiple of 90 degrees. | ||
| ### `sfntedit` | ||
| This allows you to cut and paste the entire binary block of a font table from one font to another. You do this by first using it on a source font with the `-x` option to copy a table from the source font to a separate file, and then using it with the `-a` option to add that table to a target font. It can also be used to simply delete a table, and to fix the font table checksums. | ||
| `sfntedit` allows cutting and pasting the entire binary block of a font table from one font to another. From a source font, tables can be extracted to a separate file with the `-x` option, and then pasted to a target font with the `-a` option. `sfntedit` can also be used to simply delete a table, and to fix the font table checksums. | ||
| ### `otfstemhist` | ||
| This program is actually the same tool as `otfautohint` but with a different | ||
| "face". It provides reports which help in selecting the global hint data and | ||
| alignment zones for CFF hinting. You should look at the reports from this | ||
| tool in order to select the most common stem widths, and then use a program such | ||
| as FontLab or RoboFont to set the values in the font. This should be done before | ||
| hinting the font. | ||
| `otfstemhist` is a tool to help preparing global hinting values. In default mode, `otfstemhist` outputs reports which list stems in order of occurrence. In zone mode (`-z`), `otfstemhist` reports on the top- and bottom extremes of glyphs. | ||
| The resulting report files can be used to pick alignment zones common stem widths, which should be transferred to the UFO source files before running `otfautohint`. | ||
| ### `ttfcomponentizer` | ||
| Componentizes glyphs of a TrueType font with information from an external UFO font. The script only supports components that are not scaled, rotated or flipped. | ||
| Componentizes glyphs of a TrueType font, using component information from an external UFO file. The process only supports components that are not scaled, rotated or flipped. | ||
| ### `ttx` | ||
| This tool can dump all or a few tables from an OpenType font to a human-readable text XML file, and can compile this XML file back to full OpenType font. It is an ideal tool for making simple changes of a few values. Used with care, it can also be used to make extensive changes. This is tool is provided by Just van Rossum as part of the fontTools library. It is provided here for convenience, in a form that does not require an installed Python interpreter. | ||
| ### `tx` | ||
| This tool can be used to convert most font formats to CFF or Type 1 fonts. TrueType fonts will lose their hinting in the process. It cannot convert from PostScript to TrueType, and cannot rasterize TrueType fonts. When used to convert from a Type 1 or CFF font, it undoes subroutinization, so that each glyph contains all the drawing operators, rather than referring to subroutines for common path elements. However, it does have an option to apply subroutinization to the output font. | ||
| `tx` can be used to convert most font formats to CFF, Type 1, or UFO format. TrueType fonts will lose their hinting in the process. `tx` cannot convert from PostScript to TrueType, and cannot rasterize TrueType fonts. When used to convert from a Type 1 or CFF font, it undoes subroutinization, so that each glyph contains all the drawing operators, rather than referring to subroutines for common path elements. However, it does have an option to apply subroutinization to the output font. | ||
| ### `type1`/`detype1` | ||
| These two programs will respectively compile and decompile a Type 1 font to and from a plain-text representation that is easy to edit. This is good for fixing individual fields. It is also good for copying a specific path element to many glyphs. | ||
| * `detype1`: decrypt a Type 1 font file (PFA/PFB) to a human-readable plain-text file. | ||
| * `type1`: encrypt the above text file back to Type 1. | ||
| This workflow is useful for fixing or checking individual data fields (for example the alignment zones and stems, which are found in the encyrypted portion of a Type 1 font). It is also useful for copying a specific path element to many glyphs. | ||
| ## 2.2 Proofing | ||
@@ -98,38 +103,39 @@ | ||
| This program can report data from an OpenType font in a variety of ways. All tables can be shown as a text report of the low-level structure of the table. Most tables can be shown with a report in a more human-readable format. Some tables, including the GPOS and GSUB layout tables can be shown graphically, by outputting a PostScript file that can be sent to a printer, or viewed in Mac OSX Preview, Adobe Acrobat or Adobe InDesign. | ||
| This program can report data from an OpenType font in a variety of ways. All tables can be shown as a text report of the low-level structure of the table. Most tables can be shown with a report in a more human-readable format. Some tables, including the GPOS and GSUB layout tables can be shown graphically, by outputting a PostScript file that can be converted to a PDF. | ||
| ### `tx` | ||
| This tool has two modes that are useful for proofing. With the `-bc` option, it will rasterize a glyph to the command line window, using ASCII characters. This is surprisingly useful when you want a quick look at a glyph. With the `-pdf` option, it will write a pdf file which shows the glyphs in the font, either 320 per page or 1 per page. | ||
| `tx` has a `-pdf` mode which is useful for proofing. This mode will write a PDF file which shows the all the glyphs in the input file. By default, a font overview at 320 glyphs per page is written. With option `-1`, this overview is extended by a page for every glyph in the input font, detailing point coordinates, alignment zones, metrics, etc. | ||
| Since the PDF file is just dumped to stdout, the output needs to be redirected: | ||
| `tx -pdf -1 font.ufo > output.pdf` | ||
| ### `ttx` | ||
| ### `*plot` | ||
| The XML format output offers a useful report for most of the data in an OpenType font. | ||
| All the `*plot` tools are similar in functionality, and all accept OpenType, Type 1, and UFO input files. | ||
| The `*plot` tools are simply small command-file scripts that call a single Python script with different options. The `-h` option for all these scripts will produce the same list of **all** the options supported by the single Python script. You can customize the PDF proofs by providing additional arguments. | ||
| ### `charplot` | ||
| ##### `charplot` | ||
| Make a pdf file showing all the glyphs in the font. Shows one glyph per page. Shows the nodes and control points. | ||
| `charplot` creates a PDF file showing all the glyphs in the font, one glyph per page, with nodes and control points. The output is very similar to `tx -pdf -1`, with the addition of a filled glyph preview, but without the alignment zones. | ||
| ### `digiplot` | ||
| ##### `digiplot` | ||
| Make a pdf file showing all the glyphs in the font. Format favored by CJK developers; shows a large filled outline, useful glyph metrics, and a larger outline with the nodes marked. | ||
| `digiplot` creates a PDF proof very similar to `charplot`, showing all the glyphs in the font, two glyphs per page. Useful for CJK projects, characters are shown in relationship to an em-box. | ||
| ### `fontplot` | ||
| ##### `fontplot` | ||
| Make a pdf file showing all the glyphs in the font. This fills a page with many glyphs, and shows just the filled outlines at a small point size, with some info around each glyph. Works with OpenType fonts and Type 1 fonts. | ||
| `fontplot` creates a PDF file showing all the glyphs in the font. Similar but inferior to `tx -pdf`. The resulting pages show just the filled outlines at a small point size, with some info around each glyph. | ||
| ### `fontsetplot` | ||
| ##### `fontsetplot` | ||
| Make a pdf file showing all the glyphs in in a list fonts. The glyphs are shown in glyph ID order, with a fixed spacing of one em, with the glyphs from one font in one line, so that all glyphs with the same glyph name from different fonts should be in a single column. This is used to visually confirm that that charsets are the same, and that glyph shapes are similar. It is useful for catching cases where a place-holder glyph outline was pasted in for a glyph name, but never corrected to the correct shape. The fonts are sorted first by length of character set, then by alphabetic order of the character sets, then by PostScript name. | ||
| `fontsetplot` creates a spreadsheet-like PDF file, allowing the comparison of glyphs (rows) in a number of fonts (columns). Glyphs are shown in GID order, with a fixed spacing of one em, so that all glyphs with the same glyph name should align in a single column. The input fonts are sorted first by length of character set, then by alphabetic order of the character sets, then by PostScript name. | ||
| ### `hintplot` | ||
| ##### `hintplot` | ||
| Shows one glyph per page. Shows hints and alignment zones. | ||
| `hintplot` creates a PDF proof showing all glyphs in the font with applied hints and applicable alignment zones. Four glyphs per page. | ||
| ### `waterfallplot` | ||
| ##### `waterfallplot` | ||
| Shows a waterfall of point sizes for all glyphs in the font. This is used to evaluate hinting. In order to allow hinting to be seen, the font is embedded in the PDF, and glyphs are referenced by char code. Does not yet work with TrueType and CID-keyed fonts. | ||
| Creates a waterfall of point sizes for all glyphs in the font, which is used to evaluate hinting. In order to allow for the hinting to be seen, the font is embedded in the PDF, and glyphs are referenced by char code. Please note that not all PDF viewers interpret glyph hinting, so use a known-good PDF viewer (Adobe Acrobat). | ||
| Note that the tools ending in “plot” are all simply small command-file scripts that call a single Python script with different options. The `-h` option for all these scripts will produce the same list of **all** the options supported by the single Python script. You can customize the PDF proofs by providing additional options. Look at the command files; these can be edited to supply additional options to the main script. This was completed shortly before the FDK was released, and has seen little use. It will improve over time. It uses the OpenSource Python package “Pickle” to create the PDF documents, and Just van Rossum's fontTools Python package for accessing the font data. | ||
| ## 2.3 Validation | ||
@@ -139,11 +145,12 @@ | ||
| The auto-hinting program will report at length about hinting issues. Some of these you can ignore, such as reports about near misses when a stem could be controlled by a hint-zone but is just a little too wide or too narrow. By adjusting either the stem widths or the hint-zones according to these reports, you can include more stems in the set that are controlled by hints, but you can also reasonably decide that is not worth the effort. However, many complaints do need fixing, such not having nodes at vertical or horizontal extremes of a curve. | ||
| In `-v` (verbose) mode, `otfautohint` will report “near misses” of a stem or alignment zone. While this output can be informative and reveal drafting errors (such as a glyph missing an alignment zone), these reports should not influence conscious design decisions. | ||
| ### `checkoutlinesufo` | ||
| This tool will check the quality of the glyph outline data, and should always be used. It is very good at detecting serious problems, such as overlap and incorrect path direction. It is overly enthusiastic about finding a number of smaller issues, but is right often enough to be worth checking all the error messages. It can also fix the problems it finds, but you should always check any glyphs that it changed - the fixes are not always better than the original problem. | ||
| This tool reports on the general quality of glyph outline data, by flagging outline overlaps, collinear points, and flat curves. | ||
| ### `comparefamily` | ||
| The tool examines all the fonts in a directory and runs many quality checks. It is the only tool which checks consistency and compares data across a family of fonts, as well as in a single font. It will point out any errors in naming within a style-linked group. Every time the Adobe Type Department finds a bug in the Adobe OpenType fonts, we try to put a check in here. It is not a complete validation tool, but it does represent several years of experience of mistakes made by typographers. | ||
| `comparefamily` examines all the fonts in a directory and runs many quality checks. It will check consistency of data across a family of fonts, as well as in a single font. It will point out any errors in naming within a style-linked group. | ||
| Typical options for running `comparefamily` are `-rm` (menu name report), `-rn` (metrics report), `-rp` (PANOSE number report). | ||
@@ -154,12 +161,8 @@ ### `sfntdiff` | ||
| ### `ttx` | ||
| The best way to see in detail how two fonts differ is to use the ttx tool to dump XML files, and then compare them with a good difference editor, such as BBEdit on the Mac, or UltraEdit on the PC. This tool was developed by Just van Rossum of LettError, and is available under OpenSource licensing from: https://github.com/fonttools/fonttools | ||
| ### `ttxn` | ||
| This tool is used to test if two fonts are functionally the same. It sorts and modifies the output from the ttx and tx tools to build a normalized text dump that eliminates differences due to issues such as OTL table record order, glyph order and subroutinization differences. It writes one file for each table in the font. A good difference editor, such as BBEdit on the Mac, or UltraEdit on the PC, can then be used to compare the output files from two different fonts. It is particularly useful in comparing older and newer versions of the same font. | ||
| This tool is used to test if two fonts are functionally the same. It sorts and modifies the output from the `ttx` and `tx` tools to build a normalized text dump that eliminates differences due to issues such as OTL table record order, glyph order, and subroutinization differences. It writes one file for each table in the font, which can be `diff`ed in a further step. `ttxn` is particularly useful in comparing older and newer versions of the same font. | ||
| ### `tx` | ||
| This tool has a couple of modes that are good for testing. It will show only data about the font program within a font file, either CFF or TrueType. The `-dump` option is good for looking at a text report of the CFF font global and glyph data. The `-bc` option takes additional option that outputs a hash of the rasterized glyphs to a file. This is good for finding if hinting has changed in a font; if the hash files for a set of glyphs are the same between two fonts, then the glyphs rasterized identically at the specified point size. You can use this to judge if fonts are functionally equivalent, even if the outlines are not exactly the same. Finally, converting any font to CFF will yield error reports if the font data is not syntactically correct, and if any glyphs are not hinted. | ||
| `tx` has a number of modes that are useful for testing. It will show only data about the font program within a font file, either CFF or TrueType. The `-dump` option is good for looking at a text report of the CFF font’s global and glyph data. Finally, converting any font to CFF will yield error reports if the font data is not syntactically correct, and if any glyphs are not hinted. |
@@ -1,33 +0,36 @@ | ||
| # MakeOTF OpenType/CFF compiler - User Guide | ||
| # `makeotf` OpenType/CFF compiler - User Guide | ||
| ## **Overview** | ||
| MakeOTF is a tool designed to create an OpenType® font from a source font file and from a text file containing high-level descriptions of OpenType layout features. It is designed to run as a command line tool: a command typed into the Terminal window on Mac OS® X, or in the DOS window on Windows®. Note that MakeOTF is only a compiler of font data, not a font editor. | ||
| `makeotf` is a command-line tool designed to build OpenType® fonts from font source files, auxiliary text files, and text files containing high-level descriptions of OpenType layout features (“feature files”). | ||
| MakeOTF requires a number of source files that can all be specified through options for the makeotf command: | ||
| * **`font`** - usually named `font.pfa` or `cidfont.ps`. This can be either a Type 1 or CID font file, a TrueType font file, or an OpenType/CFF font file. Note that only the glyph outlines are taken from the source font. | ||
| `makeotf` requires a number of auxiliary files that can all be specified through options for the `makeotf` command: | ||
| * **`features`** - a text file which provides the definitions for the OpenType layout feature rules, and specifies values for some of the OpenType table fields that will override the default values calculated by MakeOTF. | ||
| * **`font`** - usually named `font.ufo`, `cidfont.ps`, or `font.pfa`. This can be either a UFO file with CFF outlines, a Type 1 or CID font file, a TrueType font file, or an OpenType/CFF font file. Note that only the glyph outlines are taken from the source font. | ||
| * **`FontMenuNameDB`** - a text file which provides the Windows and Mac menu names for the font. | ||
| * **`features.fea`** – a text file which provides the definitions for the OpenType layout feature rules, and specifies values for some of the OpenType table fields that will override the default values calculated by `makeotf`. | ||
| * **`GlyphOrderAndAliasDB`** - this file serves three purposes. One purpose is to establish the glyph ID order in the font. Another is to allow glyphs in the output .otf file to have different names than the glyphs in the input source font data. This permits developers to use friendlier names during development of a font, and use different names in the final OpenType file. The third is to provide Unicode® values for the glyphs. MakeOTF will provide Unicode values by default for some glyphs, but not all. | ||
| * **`FontMenuNameDB`** – a suffix-less text file which provides menu names for the font family, and is used for establishing inter-font relationships (style linking). As such, the FMNDB is usually found in the root folder of a font family (and will be found there by `makeotf`). | ||
| * An additional file, **`fontinfo`**, is not required, but if present, will be examined for keywords that cause MakeOTF to set some specific options. | ||
| * **`GlyphOrderAndAliasDB`** - a suffix-less, spreadsheet-like text file which establishes the glyph order of the font. The GOADB file has two to three tab-separated columns per glyph name: final name, friendly name, Unicode override. Further purposes of the GlyphOrderAndAliasDB file are: | ||
| * re-mapping of glyph names from “friendly” to production names. This permits developers to use human-readable names during development. | ||
| * provide Unicode® overrides for some glyphs. `makeotf` will set Unicode values for a number of known glyph names (governed by the AGD), or glyph names matching the `uniXXXX` notation, but cannot know all possible glyph names. | ||
| * provide code point multi-mapping. A typical example is the space glyph, which can be mapped to two code points – `uni0020` for space, and `uni00A0` for non-breaking space | ||
| The GOADB also is often found in the root folder of the family (or slope), and `makeotf` will find the file there. | ||
| In order to avoid having to enter the options to specify the necessary files every time you want to build an OpenType font, MakeOTF can save a font project file that stores all desired options. MakeOTF will always write the last set of options used, to a file named `current.fpr` located in the same directory as the input font file. (Project files can also be saved under other names). | ||
| * An additional suffix-less text file, **`fontinfo`**, is not required, but if present, will be examined for keywords that cause `makeotf` to set some specific options (such as `IsBoldStyle` or `IsItalicStyle` for setting style linking). | ||
| Options can be added to the `makeotf` command to set parameters that change how MakeOTF builds an OpenType font. When options conflict, the last one on the command line will override any earlier conflicting options. | ||
| ## **Using `makeotf`** | ||
| ## **Using MakeOTF** | ||
| `makeotf` comes in two parts which can actually be called independently: | ||
| * **``makeotfexe``** is a program written in C, and is actually the tool that builds the OpenType font file. It requires, however, that all the source files be explicitly specified with options on the command line. | ||
| MakeOTF comes in two parts which can actually be called independently: | ||
| * **`makeotfexe`** is a program written in C, and is actually the tool that builds the OpenType font file. It requires, however, that all the source files be explicitly specified with options on the command line. | ||
| * **`makeotf`** is a command shell that calls the Python™ script **``makeotf`.py`**. This will look for the source files in some standard locations, and fill in default values for options. When **``makeotf`.py`** has gathered all the source files, it will call the **``makeotfexe``** program. | ||
| * **`makeotf`** is a command shell that calls the Python™ script **`makeotf.py`**. This will look for the source files in some standard locations, and fill in default values for options. It can also read the options needed from a project file (`current.fpr`), which means that for a particular font, one only needs to type-in all the options once. When **`makeotf.py`** has gathered all the source files, it will call the **`makeotfexe`** program. | ||
| In general, one should invoke **``makeotf`.py`** with the `makeotf` command. | ||
| In general, one should invoke **`makeotf.py`** with the makeotf command. This way, the last set of options used will always be recorded in a project file. | ||
| The first step in using `makeotf` is to assemble the source files. It is often a good idea to organize the files in a directory tree, like this: | ||
| The first step in using MakeOTF is to assemble the source files. It is often a good idea to organize the files in a directory tree, like this: | ||
| ``` | ||
@@ -41,7 +44,7 @@ MyFontFamily/ | ||
| │ │ ├── features.kern | ||
| │ │ └── font.pfa | ||
| │ │ └── font.ufo | ||
| │ ├── MyFont-Italic/ | ||
| │ │ ├── features | ||
| │ │ ├── features.kern | ||
| │ │ └── font.pfa | ||
| │ │ └── font.ufo | ||
| │ └── features.family | ||
@@ -52,7 +55,7 @@ └── Roman/ | ||
| │ ├── features.kern | ||
| │ └── font.pfa | ||
| │ └── font.ufo | ||
| ├── MyFont-Regular/ | ||
| │ ├── features | ||
| │ ├── features.kern | ||
| │ └── font.pfa | ||
| │ └── font.ufo | ||
| └── features.family | ||
@@ -64,32 +67,30 @@ ``` | ||
| Once one has assembled all the necessary files, the next step is to open a command window — the Terminal program on Mac OS X, or the Command program on Windows —, and use the cd command to set the current working directory to the directory which contains the set of source files to compile the OpenType font: | ||
| Once one has assembled all the necessary files, the next step is to open a command window — the Terminal program on macOS, or the cmd program on Windows — and to navigate to the directory which contains the set of source files to compile the OpenType font: | ||
| ```bash | ||
| cd <path to font directory> | ||
| ``` | ||
| and then type the `makeotf` command, with the options needed. For example: | ||
| then, execute the `makeotf` command, with the options needed. For example: | ||
| ```bash | ||
| makeotf –f myfont.pfa –ff myfeatures –b –r | ||
| makeotf –f myfont.ufo –ff myfeatures –b –r | ||
| ``` | ||
| or | ||
| ```bash | ||
| makeotf –fp myproject.fpr | ||
| ``` | ||
| ## **MakeOTF options** | ||
| ## **`makeotf` options** | ||
| | Option | Setting | Description | | ||
| |--------|---------|-------------| | ||
| |`–fp`| `<file path>` | Specify path to project file. If no path is given, the default is `current.fpr.` MakeOTF will read the options from this project file. The project file contains values only when they differ from the default value. The `–fp` option can be used with other options, but must always be first. Additional options will override those read from the project file. For example, `–fp release.fpr –o test.otf` will build an OpenType font with all the options in the release.fpr project file, but will write the output file as test.otf, instead of <PostScript-Name>.otf.| | ||
| |`–f` | `<file path>` | Specify path to input font. If not provided, MakeOTF assumes the file name is font.pfa.| | ||
| |`–o` | `<file path>` | Specify path to output font. If not provided, MakeOTF assumes the file name is `<PostScript-Name>.otf`.| | ||
| |`–b` | | Set style to Bold. Affects style-linking. If not provided, MakeOTF assumes that the font is not bold.| | ||
| |`–i` | | Set style to Italic. Affects style-linking. If not provided, MakeOTF assumes that the font is not italic.| | ||
| |`–ff` | `<file path>` | Specify path to features file. If not provided, MakeOTF assumes the file name is features.| | ||
| |`-gs` | | Omit any glyphs that are not named in the GOADB file. Works only if either the -ga or -r options is specified.| | ||
| |`–mf` | `<file path>` | Specify path to FontMenuNameDB file. If not provided, MakeOTF will look in the current directory for a file named FontMenuNameDB, and then one directory up, and finally two directories up.| | ||
| |`–gf` | `<file path>` | Specify path to GlyphOrderAndAliasDB file. If not provided, MakeOTF will look in the current directory for a file named GlyphOrderAndAliasDB, and then one directory up, and finally two directories up. Also, if this option is specified, and the `–r` or `–ga` options are NOT specified, the effect is to use the Unicode assignments from the third column of the GOADB without renaming the glyphs.| | ||
| |`–f` | `<file path>` | Specify path to input font. If not provided, `makeotf` assumes the file name is `font.ufo` or `font.pfa`.| | ||
| |`–o` | `<file path>` | Specify path to output font. If not provided, `makeotf` assumes the file name is `<PostScript-Name>.otf`.| | ||
| |`–b` | | Set style to Bold. Affects style-linking. If not provided, `makeotf` assumes that the font is not bold.| | ||
| |`–i` | | Set style to Italic. Affects style-linking. If not provided, `makeotf` assumes that the font is not italic.| | ||
| |`–ff` | `<file path>` | Specify path to features file. If not provided, `makeotf` assumes the file name is `features.fea` or `features`.| | ||
| |`-gs` | | Omit any glyphs that are not named in the GOADB file. Works only if either the `-ga` or `-r` option is specified.| | ||
| |`–mf` | `<file path>` | Specify path to FontMenuNameDB file. If not provided, `makeotf` will look in the current directory for a file named FontMenuNameDB, and then one directory up, and finally two directories up.| | ||
| |`–gf` | `<file path>` | Specify path to the GlyphOrderAndAliasDB file. If not provided, `makeotf` will look in the current directory for a file named GlyphOrderAndAliasDB, and then one directory up, and finally two directories up. Also, if this option is specified, and the `–r` or `–ga` options are NOT specified, the effect is to use the Unicode assignments from the third column of the GOADB without renaming the glyphs.| | ||
| |`–r` | | Set release mode. This option turns on subroutinization, applies the GlyphOrderAndAliasDB file, and removes the word Development from the name table Version (Name ID 5) string.| | ||
| |`–S` | | Turn on subroutinization.| | ||
| |`–ga` | | Apply the GlyphOrderAndAliasDB file. Use when the `–r` option is NOT specified.| | ||
| |`-rev` | `[<number>]` | Attempts to edit the feature file before makeotfexe is run, in order to increment the head table fontRevision field. This only works if the head table override is already defined in the features file. Without the optional version number, increments the version number by 5. With an integer argument, it increments the minor version by that number. With a fractional argument, it sets the version to the fractional argument; the number must then be decimal with three decimal places, e.g. “1.045”, not ‘1.45’.| | ||
| |`-rev` | `[<number>]` | Attempts to edit the feature file before `makeotfexe` is run, in order to increment the head table fontRevision field. This only works if the head table override is already defined in the features file. Without the optional version number, increments the version number by 5. With an integer argument, it increments the minor version by that number. With a fractional argument, it sets the version to the fractional argument; the number must then be decimal with three decimal places, e.g. “1.045”, not ‘1.45’.| | ||
| |`–osbOn` | `<number>` | Turn on the specified bit number(s) in the OS/2 table fsSelection field. In order to turn on more than one bit, must be used more than once. `–osbOn 7 –osbOn 8` will turn on bits 7 and 8. See section below on New OS/2 Bits.| | ||
@@ -99,5 +100,2 @@ |`–osbOff` | `<number>` | Turn off the specified bit number(s) in the OS/2 table fsSelection field. Can be used more than once to turn OFF more than one bit at a time. `–osbOff 7 –osbOff 8` will turn off bits 7 and 8. See section below on New OS/2 Bits.| | ||
| |`-addn` | | Replace the `.notdef` glyph in the source data (if any) with a standard `.notdef` glyph, that will match the font’s weight and width.| | ||
| |`-adds` | | Create any Apple Mac Symbol glyphs missing from the font. Added glyphs will match the font’s weight and width.| | ||
| |`-serif` | | Specify that any added glyph will use the serif Multiple Master built-in glyph data.| | ||
| |`-sans` | | Specify that any added glyphs will use the sans-serif Multiple Master builtin glyph data.| | ||
| |`-cs` | | Override the heuristics, and specify the script ID for the Mac cmap subtable.| | ||
@@ -109,22 +107,20 @@ |`-cl`| | Override the heuristics, and specify the language ID for the Mac cmap subtable.| | ||
| |`-ci`|`<file path>`| Specify path to Unicode Variation Sequence specification file.| | ||
| |`-dbl`| |Map glyph names to two Unicode values rather than one. This was the default behavior of makeotf in FDK 1.6 and earlier. The Adobe Type Department now discourages this practice. The option exists only to allow building fonts that match original versions. See `makeotf –h` for the hard-coded list of glyphs.| | ||
| |`-dbl`| |Map glyph names to two Unicode values rather than one. This was the default behavior of `makeotf` in FDK 1.6 and earlier. The Adobe Type Department now discourages this practice. The option exists only to allow building fonts that match original versions. See ``makeotf` –h` for the hard-coded list of glyphs.| | ||
| |`-dcs`| |Set OS/2.DefaultChar to the Unicode value for `space`, rather than `.notdef`. The latter is correct by the OT spec, but QuarkXPress 6.5 requires the former in order to print OTF/CFF fonts.| | ||
| |`-fi` |`<file path>`| Path to the `fontinfo` file. If no path is given, the default is to look for first `fontinfo`, then `cidfontinfo`, in the current directory. Used to set some default values. This are overridden by any conflicting settings in the project file and then by command line options. This option is processed before any others, so if the path is relative, it is relative to the current working directory. All other relative paths are relative so the source font’s parent directory.| | ||
| |`-fi` |`<file path>`| Path to the `fontinfo` file. If no path is given, the default is to look for first `fontinfo`, then `cidfontinfo`, in the current directory. Used to set some default values.| | ||
| |`-sp`|`<file path>`|Save the current options to the file path provided, as well as to the current.fpr file.| | ||
| |`-nb`| |Turn off the Bold style. Can be used to override a project file setting, otherwise has no effect.| | ||
| |`-ni`| |Turn off the Italic style. Can be used to override a project file setting, otherwise has no effect.| | ||
| |`-nS`| |Turn off subroutinization.| | ||
| |`-nga`| |Turn off applying the GlyphOrderAndAliasDB file| | ||
| |`-naddn`| |Turn off adding a standard .notdef. Can be used to override a project file setting, otherwise has no effect.| | ||
| |`-nadds`| |Turn off adding Apple symbol glyphs. Can be used to override a project file setting, otherwise has no effect.| | ||
| Options are applied in the order in which they are specified: `–r –nS` will not subroutinize a font, but `–nS –r` will subroutinize a font. Option values are read (in order of increasing priority) from first the fontinfo file keyword/value pairs, then the specified project file, if any, and then from the command line, in order from left to right. | ||
| Options are applied in the order in which they are specified: `–r –nS` will not subroutinize a font, but `–nS –r` will subroutinize a font. Option values are read (in order of increasing priority) from first the fontinfo file keyword/value pairs, and then from the command line, in order from left to right. | ||
| Subroutinization is a process by which common elements in a set of glyphs are decomposed in separate subroutines. This can reduce the size of the final font but can require extreme amounts of memory and time for a large font, such as CID fonts. MakeOTF may need as much as 64 Mbytes of memory for large Roman fonts, and will do most with only 32 Mbytes, but it may need 768 Mbytes of memory to subroutinize a 5-Mbyte CID font. Subroutinizing is reasonably fast when done all in memory: a few minutes for a Roman font, half an hour to three hours for a CID font. However, if the system must use virtual memory, the time required can increase by a factor of 20 or more. Subroutinizing is likely to be useful for Roman fonts, and for Korean CID fonts. Japanese and Chinese CID fonts usually only yield a few percent size reduction with subroutinizing, due to fewer repeating path elements. | ||
| Subroutinization is a process by which common elements in a set of glyphs are decomposed in separate subroutines, thereby reducing the size of the final font. The subroutinization process is relatively quick for a typical Roman font, but will take a bit longer for a large CJK font. | ||
| Subroutinizing is likely to be most useful for fonts with lots of repeated elements (e.g. Korean or Latin fonts) – Japanese and Chinese fonts usually only yield a few percent size reduction with subroutinizing, due to there being fewer repeating path elements. | ||
| ## FontMenuNameDB – Version 2 | ||
| Previous versions of MakeOTF used a different version of the `FontMenuNameDB` file, and wrote the Macintosh font menu names differently than the Windows font menu names, and not according to the OpenType spec. This is because of some history of the early efforts to get OpenType fonts working on the Mac OS. However, for some years Apple has been following the OpenType spec when making Apple OpenType fonts, and has fully supported the OpenType font menu names. As a result, this version of MakeOTF has implemented new syntax for the `FontMenuNameDB`, and will create the name table according to the OpenType spec when this new syntax is used. | ||
| Previous versions of `makeotf` used a different version of the `FontMenuNameDB` file, and wrote the Macintosh font menu names differently than the Windows font menu names, and not according to the OpenType spec. This is because of some history of the early efforts to get OpenType fonts working on the Mac OS. However, for some years Apple has been following the OpenType spec when making Apple OpenType fonts, and has fully supported the OpenType font menu names. As a result, this version of `makeotf` has implemented new syntax for the `FontMenuNameDB`, and will create the name table according to the OpenType spec when this new syntax is used. | ||
| Fonts made with earlier versions of MakeOTF will not be disadvantaged, as all Adobe fonts to date and many third-party fonts were made this way, and all programs look first to the Windows font menu names when they exist, as this is where the style-linking names can most reliably be found. | ||
| Fonts made with earlier versions of `makeotf` will not be disadvantaged, as all Adobe fonts to date and many third-party fonts were made this way, and all programs look first to the Windows font menu names when they exist, as this is where the style-linking names can most reliably be found. | ||
@@ -153,7 +149,7 @@ The earlier version of the `FontMenuNameDB` may still be used. The main reason to change is that the newer version is easier to explain and understand. | ||
| Although these naming conventions are necessary for correct style-linking, they are not sufficient. The font style flags for *Bold* or *Italic* must also be set correctly. This can be done either with the makeotf options `–b` and `–i`, or by providing a fontinfo file located in the same directory as the font and which contains the key/value pairs `IsBoldStyle true` and `IsItalicStyle true`, with `true` or `false` being set appropriately. | ||
| Although these naming conventions are necessary for correct style-linking, they are not sufficient. The font style flags for *Bold* or *Italic* must also be set correctly. This can be done either with the `makeotf` options `–b` and `–i`, or by providing a fontinfo file located in the same directory as the font and which contains the key/value pairs `IsBoldStyle true` and `IsItalicStyle true`, with `true` or `false` being set appropriately. | ||
| Compatible family menu names are also used in font menus by applications that are not OpenType savvy. | ||
| If the family only has four faces that are meant to be style-linked, then the compatible and preferred family menu names are the same, and only the `f=` entry is needed. The names specified with the key `f=` will then be written to the name table Name ID 1. If there is a compatible family name entry which differs from the entry supplied with the key `f=` , then the `f=` family name is written to Name ID 16. The compatible name from l= is then written to name table Name ID 1, and the name table Name ID 2 is chosen by makeotf to be one of Regular, Bold, Italic, or BoldItalic, based on the font’s style flag. The value set by `m=1,` is written to the Mac platform name table Name ID 18. | ||
| If the family only has four faces that are meant to be style-linked, then the compatible and preferred family menu names are the same, and only the `f=` entry is needed. The names specified with the key `f=` will then be written to the name table Name ID 1. If there is a compatible family name entry which differs from the entry supplied with the key `f=` , then the `f=` family name is written to Name ID 16. The compatible name from l= is then written to name table Name ID 1, and the name table Name ID 2 is chosen by `makeotf` to be one of Regular, Bold, Italic, or BoldItalic, based on the font’s style flag. The value set by `m=1,` is written to the Mac platform name table Name ID 18. | ||
@@ -172,3 +168,3 @@ The key `s=` only needs to be used when you want a style name which is different than the choice from the styles *Regular, Bold, Italic*, and *BoldItalic* that would be dictated by the font’s style. When used, and different than the default style name, the style name is written to name table NameID 17. Otherwise, it is written to name table NameID 2. | ||
| The `l=` key is not used, so the compatible family menu name is the same as the Preferred Family name. The `m=1,` key is not used, so the Macintosh compatible menu name built by MakeOTF will be Adobe Garamond Pro Regular. The key `s=` is not actually necessary. | ||
| The `l=` key is not used, so the compatible family menu name is the same as the Preferred Family name. The `m=1,` key is not used, so the Macintosh compatible menu name built by `makeotf` will be Adobe Garamond Pro Regular. The key `s=` is not actually necessary. | ||
@@ -231,3 +227,3 @@ |**Bold font of Adobe Garamond Pro**| | ||
| |**#### 小塚明朝 Pro (Kozuka Mincho® Pro)**|| | ||
| |**小塚明朝 Pro (Kozuka Mincho® Pro)**|| | ||
| |-----------------------------------------|---| | ||
@@ -240,3 +236,3 @@ |`[KozMinPro-Bold]` || | ||
| ## **FontMenuNameDB - Version 1** | ||
| Versions of MakeOTF prior to FDK 2.5 used a similar syntax in the FontMenuNameDB file. When this older version syntax is used, MakeOTF will build the name table font menu names as it did in FDK version 2.0 and earlier. These earlier versions built the Windows platform names the same. However, only the Preferred Family and Style names were written in the Mac platform name strings, and in respectively name ID 1 and name ID 2. The key “c=” set the compatible family name for the Windows platform. There was no way to specify a compatible family name for the Mac platform. The key `c=1,` set instead a compatible value for the Mac platform Full Name String, name ID 18. | ||
| Versions of `makeotf` prior to FDK 2.5 used a similar syntax in the FontMenuNameDB file. When this older version syntax is used, `makeotf` will build the name table font menu names as it did in FDK version 2.0 and earlier. These earlier versions built the Windows platform names the same. However, only the Preferred Family and Style names were written in the Mac platform name strings, and in respectively name ID 1 and name ID 2. The key “c=” set the compatible family name for the Windows platform. There was no way to specify a compatible family name for the Mac platform. The key `c=1,` set instead a compatible value for the Mac platform Full Name String, name ID 18. | ||
@@ -251,26 +247,21 @@ |**Font Entry Description**| | ||
| If the key `c=` is used, then MakeOTF will build the older style name table. If the keys `l=` or `m=` are present, it will build the newer style name table . If none of these are present, then there is no difference in how the name table is built. | ||
| If the key `c=` is used, then `makeotf` will build the older style name table. If the keys `l=` or `m=` are present, it will build the newer style name table . If none of these are present, then there is no difference in how the name table is built. | ||
| ## **GlyphOrderAndAliasDB** (GOADB) | ||
| The GOADB file is used to rename and to establish an order for the glyphs in a font. | ||
| It is a simple text file with one line per glyph name. Each line contains at least two fields, | ||
| and optionally a third field. | ||
| Fields within a line are tab separated | ||
| (technically any amount of a whitespace works but a single ASCII TAB is preferred). | ||
| Blank lines are ignored. | ||
| Lines beginning with `#` are comments and are also ignored. | ||
| The first field is the final glyph name to be used in the output font. | ||
| The second field is the ‘friendly’ name used in the source font data. | ||
| The third field is a Unicode value, specified in the form `uniXXXX` or `uXXXX[XX]` (see [note](#unicode_note)). | ||
| One may specify more than one Unicode value for a glyph by giving a comma separated list of values, for example: `uni0020,uni00A0`. | ||
| The GOADB file is used to rename and to establish an order for the glyphs in a font. It is a simple text file with one line per glyph name. Each line contains at least two columns, and optionally a third column. | ||
| Columns are tab-separated (technically any amount of a whitespace works, but a single tab character is recommended). | ||
| Blank lines are ignored. Lines beginning with `#` are comments and are also ignored. | ||
| * The first column is the final glyph name to be used in the output font. | ||
| * The second column is the ‘friendly’ name used in the source font data. | ||
| * The third column is a Unicode value, specified in the form `uniXXXX` or `uXXXX[XX]` (see [note](#unicode_note)). | ||
| It is possible to specify more than one Unicode value for a glyph by giving a comma-separated list of values, for example: `uni0020,uni00A0`. | ||
| The `XXXX` hexadecimal values *must* be either numerals (0-9) or uppercase letters. Values containing lowercase letters will be ignored. | ||
| The source font is not required to have any glyphs that are named in the `GlyphOrderAndAliasDB` file. | ||
| <a name="unicode_note"></a> | ||
| Note: Unicode values can be used in the form `uniXXXX` or `uXXXX[XX]` where `XXXX[XX]` is a hexadecimal Unicode value. | ||
| The number of `X` is determined by the codepoint. For example, `U+0903` can be written as either | ||
| `uni0903` or `u0903`. If the codepoint requires 5 or 6 digits, for example `U+F0002` or `U+F00041`, | ||
| then the format must contain the same number of digits: `uF0002` or `uF00041`. This only applies when | ||
| assigning Unicode values using column 3. | ||
| Note: Unicode values can be used in the form `uniXXXX` or `uXXXX[XX]` where `XXXX[XX]` is a hexadecimal Unicode value. The number of `X` is determined by the code point. For example, `U+0903` can be written as either `uni0903` or `u0903`. If the code point requires 5 or 6 digits, for example `U+F0002` or `U+F00041`, then the format must contain the same number of digits: `uF0002` or `uF00041`. This only applies when assigning Unicode values using column 3. | ||
@@ -284,3 +275,3 @@ | ||
| 3) Override the default Unicode encoding by MakeOTF. MakeOTF will assign Unicode values to glyphs in a non-CID font when possible. (For a CID font, the Unicode values are provided by the Adobe CMap files.) The rules used are as follows: | ||
| 3) Override the default Unicode encoding by `makeotf`. `makeotf` will assign Unicode values to glyphs in a non-CID font when possible. (For a CID font, the Unicode values are provided by the Adobe CMap files.) The rules used are as follows: | ||
@@ -295,9 +286,7 @@ a) If the third field of the GOADB record for a glyph contains a Unicode value in the form uniXXXX or uXXXX\[XX\] (see [note](#unicode_note)), assign that Unicode value to the glyph. Else b); | ||
| Note that MakeOTF cannot re-order glyphs when the source font is a TrueType or OpenType/TTF font: the glyph order in the source font and the glyph order in the `GlyphOrderAndAliasDB` file must be the same. It can, however, still rename glyphs and assign Unicode values. | ||
| Note that `makeotf` cannot re-order glyphs when the source font is a TrueType or OpenType/TTF font: the glyph order in the source font and the glyph order in the `GlyphOrderAndAliasDB` file must be the same. It can, however, still rename glyphs and assign Unicode values. | ||
| Note that MakeOTF no longer assigns glyphs Unicode values from the Private Use Area (PUA) block. If such Unicode values are needed, they must be specified in a `GOADB` file. | ||
| ## **fontinfo** | ||
| The fontinfo file is a simple text file containing key-value pairs. Each line contains two white-space separated fields. The first field is a keyword, and the second field is the value. makeotf will look for a fontinfo file in the same directory as the source font file, and, if found, use it to set some default values. These values will be overridden if they are also set by a project file, and then by any `makeotf` command line options. The keywords and values currently supported are: | ||
| The fontinfo file is a simple text file containing key-value pairs. Each line contains two white-space separated fields. The first field is a keyword, and the second field is the value. `makeotf` will look for a fontinfo file in the same directory as the source font file, and, if found, use it to set some default values. These values will be overridden by any `makeotf` command line options. The keywords and values currently supported are: | ||
@@ -313,9 +302,9 @@ | Keyword | Values | Effect | | ||
| ## **Adobe character code map** (CMap) | ||
| A CMap file maps character codes to glyph selectors. It is only necessary for CID fonts. This file may be located anywhere within the file system, as long as the directory path is stored in the `FontEnvironment.txt` file, or the file is chosen explicitly via the UI. The default CMap files are automatically selected by MakeOTF when the `cidfontinfo` file is selected. | ||
| A CMap file maps character codes to glyph selectors. It is only necessary for CID fonts. This file may be located anywhere within the file system, as long as the directory path is stored in the `FontEnvironment.txt` file, or the file is chosen explicitly via the UI. The default CMap files are automatically selected by `makeotf` when the `cidfontinfo` file is selected. | ||
| The Mac CMap file provides the encoding for a Mac platform cmap subtable in the OpenType font cmap table. This is required. The script and language of this Mac platform cmap subtable is determined by heuristics in MakeOTF, but can be specified by MakeOTF options. These apply only to CID source fonts. | ||
| The Mac CMap file provides the encoding for a Mac platform cmap subtable in the OpenType font cmap table. This is required. The script and language of this Mac platform cmap subtable is determined by heuristics in `makeotf`, but can be specified by `makeotf` options. These apply only to CID source fonts. | ||
| The Vertical and Horizontal CMap files supply the Unicode encoding for all the glyphs in the font. Note that for CID fonts, only glyphs named in these three files are encoded in any of the OpenType font cmap table subtables. The many alternates can often be accessed only through OpenType layout features. | ||
| When looking for default CID CMap files, MakeOTF uses the following rules: | ||
| When looking for default CID CMap files, `makeotf` uses the following rules: | ||
| 1) The default CMap files will be in a subdirectory of the default path which is specified in the `FontEnvironment.txt` file. If this is a relative rather than absolute path, it will be assumed to be under FDK/Tools/SharedData/. | ||
@@ -340,3 +329,3 @@ | ||
| ## **Unicode Variation Sequence (UVS) File** | ||
| A UVS file is a list of records, each of which specifies the glyph which should be displayed for a given combination of a Unicode encoding value and a Unicode Variation Selector. You can read about Unicode Variation Sequence in the publication “Unicode Technical Standard #37 , Ideographic Variation Database , at http://unicode.org/reports/tr37/. The format depends on the source font format: CID-keyed fonts require three fields in each record, non-CID fonts require only two. | ||
| A UVS file is a list of records, each of which specifies the glyph which should be displayed for a given combination of a Unicode encoding value and a Unicode Variation Selector. You can read about Unicode Variation Sequence in the publication “Unicode Technical Standard #37, Ideographic Variation Database, at http://unicode.org/reports/tr37/. The format depends on the source font format: CID-keyed fonts require three fields in each record, non-CID fonts require only two. | ||
@@ -403,30 +392,2 @@ #### For CID-keyed fonts: | ||
| ## **Synthetic Glyphs** | ||
| MakeOTF includes two Multiple Master fonts built-in, one serif and one sans-serif. With these it can synthesize glyphs that match (more or less) the width and weight of the source font. It requires the glyphs zero and O to be present in the font, in order to determine the required weight and width. If the option `–adds` is used, the list of glyphs to generate will be derived from the concatenation of the following three groups of glyphs: | ||
| 1) Euro | ||
| 2) Apple Symbol glyphs. These glyphs were formerly supplied by the Macintosh ATM™ and the Laserwriter® drivers. This is no longer true for OpenType fonts. | ||
| 3) A miscellany of glyphs missing from some of the Adobe Type Library fonts, which were just a few glyphs short of containing the full Adobe PostScript Standard glyph set. | ||
| | Synthetic Glyphs | | | | ||
| |------------------|----------------|---------------| | ||
| | € Euro | ∆ Delta | Ω Omega | | ||
| | ≈ approxequal | ^ asciicircum | ~ asciitilde | | ||
| | @ at | \ backslash | \| bar | | ||
| | ¦ brokenbar | ¤ currency | † dagger | | ||
| | ‡ daggerdbl | ° degree | ÷ divide | | ||
| | = equal | ℮ estimated | ⁄ fraction | | ||
| | > greater | ≥ greaterequal | ∞ infinity | | ||
| | ∫ integral | < less | ≤ lessequal | | ||
| | ℓ litre | ¬ logicalnot | ◊ lozenge | | ||
| | − minus | × multiply | ≠ notequal | | ||
| | № numbersign | ½ onehalf | ¼ onequarter | | ||
| | ¶ paragraph | ∂ partialdiff | ‰ perthousand | | ||
| | π pi | + plus | ± plusminus | | ||
| | ∏ product | " quotedbl | ' quotesingle | | ||
| | √ radical | § section | ∑ summation | | ||
| | ¾ threequarters | 0 zero | | | ||
| The glyphs are synthesized from the MM fonts which MakeOTF has built-in. It will try to match the glyph width of the zero and the dominant stem width of the target font. However, MakeOTF cannot stretch the MM font data to match very thick strokes, very wide glyphs, and it cannot match the design’s stem contrast. | ||
| --- | ||
@@ -437,3 +398,4 @@ | ||
| Version 1.0 - Initial version | ||
| Version 1.5 - Revisions for MakeOTF v2.5 - 2016 | ||
| Version 1.5 - Revisions for `makeotf` v2.5 - 2016 | ||
| Version 2.0 - Convert to Markdown, many minor updates and fixes - Josh Hadley, October 2019 | ||
| Version 2.1 - Updates and fixes - Frank Grießhammer, July 2025 |
@@ -11,1 +11,3 @@ [build-system] | ||
| build-backend = "setuptools.build_meta" | ||
| [tool.setuptools_scm] |
| # Copyright 2015 Adobe. All rights reserved. | ||
| """ | ||
| Generates UFO font instances from a set of master UFO fonts. | ||
| It uses the mutatorMath library. The paths to the masters and | ||
| instances fonts are specified in the .designspace file. | ||
| Generates UFO font instances from a set of source UFO fonts | ||
| using either MutatorMath or the fontTools varLib library. | ||
| The paths to the source and instance fonts are specified in | ||
| the .designspace file. | ||
| """ | ||
@@ -25,3 +26,3 @@ | ||
| from ufonormalizer import normalizeUFO | ||
| from ufoProcessor import build as ufoProcessorBuild | ||
| from ufoProcessor.ufoOperator import UFOOperator | ||
@@ -116,3 +117,3 @@ from afdko.checkoutlinesufo import run as checkoutlinesUFO | ||
| for key in list(dFont.lib.keys()): | ||
| if key not in ['public.glyphOrder', 'public.postscriptNames']: | ||
| if not key.startswith('public.'): | ||
| del dFont.lib[key] | ||
@@ -341,6 +342,11 @@ | ||
| logger.info(info_str) | ||
| ufoProcessorBuild(documentPath=dsPath, | ||
| outputUFOFormatVersion=options.ufo_version, | ||
| roundGeometry=(not options.no_round), | ||
| logger=logger, useVarlib=options.useVarlib) | ||
| ufoOperator = UFOOperator(pathOrObject=dsPath, | ||
| ufoVersion=options.ufo_version, | ||
| useVarlib=options.useVarlib, | ||
| extrapolate=True, | ||
| strict=options.strict, | ||
| debug=options.verbose > 2) | ||
| ufoOperator.roundGeometry = (not options.no_round) | ||
| ufoOperator.loadFonts() | ||
| ufoOperator.generateUFOs() | ||
@@ -477,2 +483,8 @@ # Remove temporary designspace file | ||
| parser.add_argument( | ||
| '-s', | ||
| '--strict', | ||
| action='store_true', | ||
| help='Pass the strict flag to ufoProcessor' | ||
| ) | ||
| parser.add_argument( | ||
| '-i', | ||
@@ -479,0 +491,0 @@ metavar='INDEX(ES)', |
@@ -346,2 +346,3 @@ # Copyright 2014,2022 Adobe. All rights reserved. | ||
| self.verbose = pargs.verbose | ||
| self.looseOverlapMapping = pargs.loose_overlap_mapping | ||
| if pargs.force_overlap: | ||
@@ -585,2 +586,10 @@ self.overlapForcing = True | ||
| ) | ||
| overlap_parser.add_argument( | ||
| '--loose-overlap-mapping', | ||
| action='store_true', | ||
| help='Some fonts see high numbers of "Unable to map derived path ' | ||
| 'element from ..." warnings when processing overlap. This flag ' | ||
| 'loosens the matching heuristics and should lower (but not ' | ||
| 'eliminate) the number of those warnings' | ||
| ) | ||
| parser.add_argument( | ||
@@ -870,2 +879,3 @@ '--log', | ||
| self.verbose = pargs.verbose | ||
| self.looseOverlapMapping = pargs.loose_overlap_mapping | ||
| if pargs.force_overlap: | ||
@@ -872,0 +882,0 @@ self.overlapForcing = True |
@@ -40,2 +40,3 @@ # Copyright 2016 Adobe. All rights reserved. | ||
| self.overlapForcing = None | ||
| self.looseOverlapMapping = False | ||
| self.hintAll = False | ||
@@ -42,0 +43,0 @@ self.readHints = True |
@@ -268,3 +268,3 @@ # Copyright 2014 Adobe. All rights reserved. | ||
| pair[1])) | ||
| elif abs(pair[1] - prevPair[0]) <= zoneBuffer: | ||
| elif abs(pair[1] - prevPair[0]) < zoneBuffer: | ||
| raise FontInfoParseError( | ||
@@ -550,3 +550,3 @@ "In FDDict %s. The top of zone %s at %s is within " | ||
| zoneName, fdDictName, prevZoneName, prevFDictName) | ||
| elif abs(zone[1] - prevZone[0]) <= zoneBuffer: | ||
| elif abs(zone[1] - prevZone[0]) < zoneBuffer: | ||
| log.warning("For final FontDict, skipping zone %s in FDDict %s" | ||
@@ -553,0 +553,0 @@ " because it is within the minimum separation " |
@@ -518,2 +518,3 @@ # Copyright 2021 Adobe. All rights reserved. | ||
| tSlop = .005 | ||
| middleMult = 2 | ||
@@ -615,2 +616,3 @@ def __init__(self, *args, is_close=False, masks=None, flex=False, | ||
| self.is_line = False | ||
| # XXX deal with roundCoords properly | ||
| self.cs = self.s * (1 - sRatio) + self.e * sRatio | ||
@@ -630,3 +632,3 @@ self.ce = self.s * eRatio + self.e * (1 - eRatio) | ||
| def getAssocFactor(self): | ||
| def getAssocFactor(self, loose=False): | ||
| if self.is_line: | ||
@@ -636,3 +638,4 @@ l = sqrt(self.s.distsq(self.e)) | ||
| l = approximateCubicArcLength(self.s, self.cs, self.ce, self.e) | ||
| return l / self.assocMatchFactor | ||
| return l / (self.assocMatchFactor / 2 | ||
| if loose else self.assocMatchFactor) | ||
@@ -1271,7 +1274,8 @@ def containsPoint(self, p, factor, returnT=False): | ||
| def checkAssocPoint(self, segs, spe, ope, sp, op, mapEnd, factor=None): | ||
| def checkAssocPoint(self, segs, spe, ope, sp, op, mapEnd, loose, | ||
| factor=None): | ||
| if factor is None: | ||
| factor = ope.getAssocFactor() | ||
| factor = ope.getAssocFactor(loose) | ||
| if sp == op or ope.containsPoint(sp, factor): | ||
| if not ope.containsPoint(spe.atT(.5), factor): | ||
| if not ope.containsPoint(spe.atT(.5), factor * ope.middleMult): | ||
| return False | ||
@@ -1284,3 +1288,4 @@ spe.association = ope | ||
| midMapped = (1 - (1 - t) / 2) if mapEnd else t / 2 | ||
| if not ope.containsPoint(spe.atT(midMapped), factor): | ||
| if not ope.containsPoint(spe.atT(midMapped), | ||
| factor * ope.middleMult): | ||
| return False | ||
@@ -1302,3 +1307,3 @@ following = spe.splitAt(t) | ||
| def associatePath(self, orig): | ||
| def associatePath(self, orig, loose=False): | ||
| peMap = defaultdict(list) | ||
@@ -1319,3 +1324,4 @@ for oc in orig: | ||
| for oepe in oepel: | ||
| if self.checkAssocPoint(segs, c, oepe, c.s, oepe.s, True): | ||
| if self.checkAssocPoint(segs, c, oepe, c.s, oepe.s, True, | ||
| loose): | ||
| done = True | ||
@@ -1326,3 +1332,3 @@ break | ||
| if self.checkAssocPoint(segs, c, oepen, c.s, oepen.e, | ||
| True): | ||
| True, loose): | ||
| done = True | ||
@@ -1337,7 +1343,7 @@ break | ||
| if self.checkAssocPoint(segs, c, ospen, c.e, ospen.e, | ||
| False): | ||
| False, loose): | ||
| done = True | ||
| break | ||
| elif self.checkAssocPoint(segs, c, ospe, c.e, ospe.s, | ||
| False): | ||
| False, loose): | ||
| done = True | ||
@@ -1349,9 +1355,9 @@ break | ||
| for oc in orig: | ||
| factor = oc.getAssocFactor() | ||
| factor = oc.getAssocFactor(loose) | ||
| if cBounds.intersects(oc.getBounds(), factor): | ||
| if (oc.containsPoint(c.s, factor) and | ||
| (self.checkAssocPoint(segs, c, oc, c.e, oc.e, | ||
| False, factor) or | ||
| False, loose, factor) or | ||
| self.checkAssocPoint(segs, c, oc, c.e, oc.s, | ||
| False, factor))): | ||
| False, loose, factor))): | ||
| done = True | ||
@@ -1365,9 +1371,9 @@ break | ||
| for oc in orig: | ||
| factor = oc.getAssocFactor() | ||
| factor = oc.getAssocFactor(loose) | ||
| if cBounds.intersects(oc.getBounds(), factor): | ||
| if (oc.containsPoint(c.e, factor) and | ||
| (self.checkAssocPoint(segs, c, oc, c.s, oc.s, | ||
| True, factor) or | ||
| True, loose, factor) or | ||
| self.checkAssocPoint(segs, c, oc, c.s, oc.e, | ||
| True, factor))): | ||
| True, loose, factor))): | ||
| done = True | ||
@@ -1374,0 +1380,0 @@ break |
@@ -471,2 +471,4 @@ # Copyright 2021 Adobe. All rights reserved. | ||
| self.usedSegs.add(sid) | ||
| if self.dhinter.options.roundCoords: | ||
| loc = round(loc) | ||
| if loc in self.candDict: | ||
@@ -473,0 +475,0 @@ sLC = self.candDict[loc] |
@@ -356,3 +356,2 @@ # fontmetrics.py - part of PDFgen - copyright Andy Robinson 1999 | ||
| def __init__(self): | ||
| global FONT_WIDTHS | ||
| self.__widtharrays = FONT_WIDTHS | ||
@@ -359,0 +358,0 @@ |
@@ -609,7 +609,7 @@ # Copyright 2017 Adobe. All rights reserved. | ||
| # Need to both get the list of glyphs from contents.plist, and also | ||
| # the glyph order. The latter is take from the public.glyphOrder key | ||
| # the glyph order. The latter is taken from the public.glyphOrder key | ||
| # in lib.plist, if it exists, else it is taken from the contents.plist | ||
| # file. Any glyphs in contents.plist which are not named in the | ||
| # public.glyphOrder are sorted after all glyphs which are named in the | ||
| # public.glyphOrder,, in the order that they occured in contents.plist. | ||
| # public.glyphOrder, in the order that they occured in contents.plist. | ||
| contentsPath = os.path.join(self.parentPath, "glyphs", kContentsName) | ||
@@ -906,4 +906,10 @@ self.glyphMap, self.glyphList = parsePList(contentsPath) | ||
| with open(contentsFilePath, 'r', encoding='utf-8') as fp: | ||
| contentsDict = plistlib.load(fp) | ||
| if os.path.exists(contentsFilePath): | ||
| # contents.plist exists in glyphDirPath | ||
| with open(contentsFilePath, 'r', encoding='utf-8') as fp: | ||
| contentsDict = plistlib.load(fp) | ||
| else: | ||
| # contents.plist does not exist in glyphDirPath, load the default | ||
| with open(defaultContentsFilePath, 'r', encoding='utf-8') as fp: | ||
| contentsDict = plistlib.load(fp) | ||
@@ -940,6 +946,6 @@ # First, delete glyph files that are not in the contents.plist file in | ||
| print("Removing glif file %s that was not in the contents.plist " | ||
| "file: %s" % (glyphDirPath, contentsFilePath)) | ||
| "file: %s" % (fileName, contentsFilePath)) | ||
| changed = 1 | ||
| if defaultContentsFilePath == contentsFilePath: | ||
| if str(defaultContentsFilePath) == str(contentsFilePath): | ||
| return changed | ||
@@ -982,4 +988,6 @@ | ||
| with open(contentsFilePath, 'r', encoding='utf-8') as fp: | ||
| contentsDict = plistlib.load(fp) | ||
| contentsDict = {} | ||
| if os.path.exists(contentsFilePath): | ||
| with open(contentsFilePath, 'r', encoding='utf-8') as fp: | ||
| contentsDict = plistlib.load(fp) | ||
@@ -986,0 +994,0 @@ fileDict = {} |
@@ -41,4 +41,4 @@  | ||
| The AFDKO requires [Python](http://www.python.org/download) 3.8 | ||
| or later. It should work with any Python > 3.8, but occasionally | ||
| The AFDKO requires [Python](http://www.python.org/download) 3.9 | ||
| or later. It should work with any Python > 3.9, but occasionally | ||
| tool-chain components and dependencies don't keep pace with major | ||
@@ -75,3 +75,5 @@ Python releases, so there might be some lag time while they catch up. | ||
| python -m venv afdko_env | ||
| ```sh | ||
| python -m venv afdko_env | ||
| ``` | ||
@@ -82,11 +84,17 @@ - Activate the virtual environment: | ||
| source afdko_env/bin/activate | ||
| ```sh | ||
| source afdko_env/bin/activate | ||
| ``` | ||
| - Windows | ||
| afdko_env\Scripts\activate.bat | ||
| ```sh | ||
| afdko_env\Scripts\activate.bat | ||
| ``` | ||
| - Install [afdko](https://pypi.python.org/pypi/afdko): | ||
| python -m pip install afdko | ||
| ```sh | ||
| python -m pip install afdko | ||
| ``` | ||
@@ -130,3 +138,3 @@ Installing the **afdko** inside a virtual environment prevents conflicts | ||
| apt-get -y install python3.8 | ||
| apt-get -y install python3.9 | ||
| apt-get -y install python-pip | ||
@@ -133,0 +141,0 @@ apt-get -y install python-dev |
@@ -12,3 +12,3 @@ cmake>=3.14 | ||
| setuptools>=40.8.0 | ||
| setuptools_scm>=3.2.0 | ||
| setuptools_scm>=7.0.0 | ||
| wheel>=0.33.1 |
@@ -8,6 +8,6 @@ # 'lxml' is not a primary requirement of afdko but it's listed here because | ||
| defcon[lxml,pens]==0.10.3 | ||
| fontMath==0.9.3 | ||
| fontTools[unicode,woff,lxml,ufo]==4.43.0 | ||
| fontMath==0.9.4 | ||
| fontTools[unicode,woff,lxml,ufo]==4.56.0 | ||
| tqdm==4.66.1 | ||
| ufonormalizer==0.6.1 | ||
| ufoProcessor==1.9.0 | ||
| ufonormalizer==0.6.2 | ||
| ufoProcessor==1.13.1 |
@@ -155,3 +155,3 @@ import distutils.command.build_scripts | ||
| 'License :: OSI Approved :: Apache Software License', | ||
| 'Programming Language :: Python :: 3.8', | ||
| 'Programming Language :: Python :: 3.9', | ||
| 'Operating System :: MacOS :: MacOS X', | ||
@@ -198,3 +198,3 @@ 'Operating System :: Microsoft :: Windows', | ||
| zip_safe=False, | ||
| python_requires='>=3.8', | ||
| python_requires='>=3.9', | ||
| setup_requires=[ | ||
@@ -201,0 +201,0 @@ 'wheel', |
@@ -5,2 +5,58 @@ <?xml version='1.0' encoding='UTF-8'?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -5,2 +5,58 @@ <?xml version='1.0' encoding='UTF-8'?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -5,2 +5,58 @@ <?xml version='1.0' encoding='UTF-8'?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -9,2 +9,4 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <integer>750</integer> | ||
| <key>copyright</key> | ||
| <string>Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'.</string> | ||
| <key>descender</key> | ||
@@ -19,2 +21,7 @@ <integer>-250</integer> | ||
| <integer>0</integer> | ||
| <key>openTypeNameLicense</key> | ||
| <string>This Font Software is licensed under the SIL Open Font License, Version 1.1. | ||
| This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.</string> | ||
| <key>openTypeNameLicenseURL</key> | ||
| <string>http://scripts.sil.org/OFL</string> | ||
| <key>postscriptBlueFuzz</key> | ||
@@ -65,2 +72,4 @@ <integer>0</integer> | ||
| <string>Dummy-ExtraMinus</string> | ||
| <key>postscriptForceBold</key> | ||
| <false/> | ||
| <key>postscriptOtherBlues</key> | ||
@@ -87,4 +96,10 @@ <array> | ||
| <string>Extra Minus</string> | ||
| <key>trademark</key> | ||
| <string>Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>versionMajor</key> | ||
| <integer>2</integer> | ||
| <key>versionMinor</key> | ||
| <integer>0</integer> | ||
| <key>xHeight</key> | ||
@@ -91,0 +106,0 @@ <integer>500</integer> |
@@ -9,2 +9,4 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <integer>750</integer> | ||
| <key>copyright</key> | ||
| <string>Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'.</string> | ||
| <key>descender</key> | ||
@@ -19,2 +21,7 @@ <integer>-250</integer> | ||
| <integer>0</integer> | ||
| <key>openTypeNameLicense</key> | ||
| <string>This Font Software is licensed under the SIL Open Font License, Version 1.1. | ||
| This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.</string> | ||
| <key>openTypeNameLicenseURL</key> | ||
| <string>http://scripts.sil.org/OFL</string> | ||
| <key>postscriptBlueFuzz</key> | ||
@@ -65,2 +72,4 @@ <integer>0</integer> | ||
| <string>Dummy-ExtraPlus</string> | ||
| <key>postscriptForceBold</key> | ||
| <false/> | ||
| <key>postscriptOtherBlues</key> | ||
@@ -87,4 +96,10 @@ <array> | ||
| <string>Extra Plus</string> | ||
| <key>trademark</key> | ||
| <string>Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.</string> | ||
| <key>unitsPerEm</key> | ||
| <integer>1000</integer> | ||
| <key>versionMajor</key> | ||
| <integer>2</integer> | ||
| <key>versionMinor</key> | ||
| <integer>0</integer> | ||
| <key>xHeight</key> | ||
@@ -91,0 +106,0 @@ <integer>500</integer> |
@@ -5,2 +5,58 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -5,2 +5,58 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -5,2 +5,58 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -5,2 +5,58 @@ <?xml version='1.0' encoding='UTF-8'?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -5,2 +5,58 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>Not a kerning group</key> | ||
@@ -7,0 +63,0 @@ <array> |
@@ -15,2 +15,5 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <string>Source Serif Pro</string> | ||
| <key>guidelines</key> | ||
| <array> | ||
| </array> | ||
| <key>italicAngle</key> | ||
@@ -17,0 +20,0 @@ <integer>0</integer> |
@@ -69,3 +69,59 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| </array> | ||
| <key>public.kern1.LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>public.kern1.LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>public.kern1.LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>public.kern1.LAT_v</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| <key>public.kern2.LAT_A</key> | ||
| <array> | ||
| <string>A</string> | ||
| <string>Aacute</string> | ||
| <string>Adieresis</string> | ||
| <string>Atilde</string> | ||
| </array> | ||
| <key>public.kern2.LAT_Y</key> | ||
| <array> | ||
| <string>Y</string> | ||
| <string>Yacute</string> | ||
| <string>Ydieresis</string> | ||
| <string>Ytilde</string> | ||
| </array> | ||
| <key>public.kern2.LAT_a</key> | ||
| <array> | ||
| <string>a</string> | ||
| <string>aacute</string> | ||
| <string>adieresis</string> | ||
| <string>atilde</string> | ||
| </array> | ||
| <key>public.kern2.LAT_y</key> | ||
| <array> | ||
| <string>y</string> | ||
| <string>yacute</string> | ||
| <string>ydieresis</string> | ||
| <string>ytilde</string> | ||
| </array> | ||
| </dict> | ||
| </plist> |
@@ -5,46 +5,46 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <dict> | ||
| <key>@MMK_L_LAT_A</key> | ||
| <key>public.kern1.LAT_A</key> | ||
| <dict> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <key>public.kern2.LAT_A</key> | ||
| <integer>10</integer> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <key>public.kern2.LAT_Y</key> | ||
| <integer>-90</integer> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <key>public.kern2.LAT_a</key> | ||
| <integer>-5</integer> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <key>public.kern2.LAT_y</key> | ||
| <integer>-50</integer> | ||
| </dict> | ||
| <key>@MMK_L_LAT_Y</key> | ||
| <key>public.kern1.LAT_Y</key> | ||
| <dict> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <key>adieresis</key> | ||
| <integer>-79</integer> | ||
| <key>atilde</key> | ||
| <integer>-61</integer> | ||
| <key>public.kern2.LAT_A</key> | ||
| <integer>-90</integer> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <key>public.kern2.LAT_Y</key> | ||
| <integer>0</integer> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <key>public.kern2.LAT_a</key> | ||
| <integer>-80</integer> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <key>public.kern2.LAT_y</key> | ||
| <integer>-69</integer> | ||
| <key>adieresis</key> | ||
| <integer>-79</integer> | ||
| <key>atilde</key> | ||
| <integer>-61</integer> | ||
| </dict> | ||
| <key>@MMK_L_LAT_a</key> | ||
| <key>public.kern1.LAT_a</key> | ||
| <dict> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <key>public.kern2.LAT_A</key> | ||
| <integer>10</integer> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <key>public.kern2.LAT_Y</key> | ||
| <integer>-80</integer> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <key>public.kern2.LAT_y</key> | ||
| <integer>-10</integer> | ||
| </dict> | ||
| <key>@MMK_L_LAT_v</key> | ||
| <key>public.kern1.LAT_v</key> | ||
| <dict> | ||
| <key>@MMK_R_LAT_A</key> | ||
| <key>public.kern2.LAT_A</key> | ||
| <integer>-71</integer> | ||
| <key>@MMK_R_LAT_Y</key> | ||
| <key>public.kern2.LAT_Y</key> | ||
| <integer>-50</integer> | ||
| <key>@MMK_R_LAT_a</key> | ||
| <key>public.kern2.LAT_a</key> | ||
| <integer>-16</integer> | ||
| <key>@MMK_R_LAT_y</key> | ||
| <key>public.kern2.LAT_y</key> | ||
| <integer>9</integer> | ||
@@ -51,0 +51,0 @@ </dict> |
@@ -15,2 +15,5 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <string>Source Serif Pro</string> | ||
| <key>guidelines</key> | ||
| <array> | ||
| </array> | ||
| <key>italicAngle</key> | ||
@@ -17,0 +20,0 @@ <integer>0</integer> |
@@ -215,1 +215,17 @@ import argparse | ||
| assert differ([expected_path, actual_path]) | ||
| def test_strict_flag(capfd): | ||
| """ | ||
| Test extrapolating, with default (MutatorMath) and with varlib. | ||
| Using varlib should fail (output should not be extrapolated) because | ||
| extrapolation is not supported by varlib. | ||
| """ | ||
| runner_args = ['-t', TOOL, '-o', 'a', 'c', 'n', 's', 'd', f'_{get_input_path("OverlappingPoints.designspace")}'] # noqa: E501 | ||
| runner(runner_args) | ||
| for ufo_filename in ("overlapping-Thin.ufo", "overlapping-Black.ufo"): | ||
| expected_path = _get_output_path(ufo_filename, 'expected_output') | ||
| actual_path = _get_output_path(ufo_filename, 'temp_output') | ||
| assert differ([expected_path, actual_path]) |
@@ -147,4 +147,4 @@ import os | ||
| stderr_path = runner(CMD + [ | ||
| '-s', '-e', '-o', 'f', f'_{get_input_path("font.pfa")}', | ||
| 'o', f'_{actual_path}'] + args) | ||
| '-s', '-e', '-n', '-o', 'f', f'_{get_input_path("font.pfa")}', | ||
| 'o', f'_{actual_path}'] + args) | ||
| actual_ttx = generate_ttx_dump(actual_path) | ||
@@ -658,3 +658,3 @@ expected_ttx = get_expected_path(ttx_filename) | ||
| stderr_path = runner( | ||
| CMD + ['-s', '-e', '-o', | ||
| CMD + ['-s', '-e', '-n', '-o', | ||
| 'f', f'_{get_input_path(input_filename)}', | ||
@@ -693,3 +693,3 @@ 'o', f'_{otf_path}']) | ||
| stderr_path = runner(CMD + [ | ||
| '-s', '-e', '-o', | ||
| '-s', '-e', '-n', '-o', | ||
| 'f', f'_{get_input_path(input_filename)}', | ||
@@ -696,0 +696,0 @@ 'o', f'_{out_font_path}', |
@@ -1,2 +0,2 @@ | ||
| Vertical Stem List for font.otf on Wed Sep 25 12:24:03 2019 | ||
| Vertical Stem List for /tmp/tmpd6nsoup4 on Fri Oct 11 02:12:02 2024 | ||
| count width glyphs | ||
@@ -6,8 +6,7 @@ 20 82 [a b d h i j k l m n p q r t u L one] | ||
| 6 83 [u B D J P R] | ||
| 4 72 [d n p r] | ||
| 5 71 [a d n p u] | ||
| 3 80 [M N] | ||
| 3 70 [b m q] | ||
| 2 81 [f U] | ||
| 2 78 [M four] | ||
| 2 71 [a u] | ||
| 2 69 [b q] | ||
| 1 157 [three] | ||
@@ -17,1 +16,3 @@ 1 77 [G] | ||
| 1 74 [t] | ||
| 1 72 [r] | ||
| 1 70 [m] |
@@ -1,2 +0,2 @@ | ||
| Vertical Stem List for /tmp/pytest-of-skef/pytest-0/popen-gw9/test_stemhist_report_stems_all0/font.otf on Sun Nov 28 13:49:47 2021 | ||
| Vertical Stem List for /tmp/tmpmry2_4gr on Fri Oct 11 02:12:03 2024 | ||
| count width glyphs | ||
@@ -7,12 +7,11 @@ 22 82 [B L a b d h i j k l m n p q r t u one] | ||
| 9 85 [S b c d o p q] | ||
| 8 71 [a d g n p u ampersand eight] | ||
| 7 86 [C D O Q seven] | ||
| 7 66 [M exclam bracketleft bracketright braceright at plus] | ||
| 6 80 [M N a ampersand dollar] | ||
| 6 72 [d n p r less greater] | ||
| 5 81 [U f g question dollar] | ||
| 5 78 [M four six nine] | ||
| 5 71 [a g u ampersand eight] | ||
| 4 77 [G zero six] | ||
| 4 74 [t parenleft parenright bar] | ||
| 4 70 [b m q braceleft] | ||
| 4 69 [b g q braceright] | ||
| 4 61 [percent] | ||
@@ -23,2 +22,3 @@ 3 162 [period colon semicolon] | ||
| 3 75 [e eight] | ||
| 3 72 [r less greater] | ||
| 2 146 [exclam question] | ||
@@ -29,3 +29,3 @@ 2 132 [i j] | ||
| 2 73 [comma semicolon] | ||
| 2 69 [g braceright] | ||
| 2 70 [m braceleft] | ||
| 2 67 [ampersand braceleft] | ||
@@ -39,3 +39,3 @@ 1 157 [three] | ||
| 1 58 [at] | ||
| 1 57 [asterisk] | ||
| 1 56 [asterisk] | ||
| 1 54 [at] |
@@ -1,2 +0,2 @@ | ||
| Vertical Stem List for font.otf on Wed Sep 25 12:22:42 2019 | ||
| Vertical Stem List for /tmp/tmpdobfvdgy on Fri Oct 11 02:12:03 2024 | ||
| count width glyphs | ||
@@ -6,7 +6,7 @@ 20 82 [L a b d h i j k l m n p q r t u one] | ||
| 6 83 [B D J P R u] | ||
| 6 72 [d n p r less greater] | ||
| 5 71 [a d n p u] | ||
| 4 66 [exclam bracketleft bracketright plus] | ||
| 3 108 [quotesingle quotedbl] | ||
| 3 80 [M N] | ||
| 3 70 [b m q] | ||
| 3 72 [r less greater] | ||
| 2 121 [braceleft braceright] | ||
@@ -16,9 +16,10 @@ 2 81 [U f] | ||
| 2 74 [t bar] | ||
| 2 71 [a u] | ||
| 2 69 [b q] | ||
| 1 157 [three] | ||
| 1 77 [G] | ||
| 1 76 [m] | ||
| 1 70 [m] | ||
| 1 64 [at] | ||
| 1 60 [dollar] | ||
| 1 57 [asterisk] | ||
| 1 56 [asterisk] | ||
| 1 54 [at] |
@@ -30,3 +30,3 @@ import pytest | ||
| 'hintplot', | ||
| 'waterfallplot', | ||
| # 'waterfallplot', disabled until we debug problem | ||
| ]) | ||
@@ -54,4 +54,4 @@ def test_glyphs_2_7(tool_name, font_filename): | ||
| 'cidfont_noZones.otf', | ||
| 'font_noHints.otf', | ||
| 'font_noStems.otf', | ||
| # 'font_noHints.otf', Disabled until we figure out problem | ||
| # 'font_noStems.otf', Disabled until we figure out problem | ||
| 'font_noZones.otf', | ||
@@ -118,2 +118,3 @@ ]) | ||
| @pytest.mark.skip(reason="Disable until we figure out problem") | ||
| @pytest.mark.parametrize('filename', ['SourceSansPro-Black', | ||
@@ -120,0 +121,0 @@ 'SourceSansPro-BlackIt']) |
@@ -91,2 +91,6 @@ # Copyright 2018 Adobe. All rights reserved. | ||
| sp_env = os.environ.copy() | ||
| if opts.no_python_warn: | ||
| sp_env['PYTHONWARNINGS'] = 'ignore' | ||
| if allow_skip_console and console_scripts.get(opts.tool): | ||
@@ -104,7 +108,7 @@ mod, fcn = console_scripts[opts.tool].split(':') | ||
| output = subprocess.check_output(args, stderr=stderr, | ||
| timeout=TIMEOUT) | ||
| timeout=TIMEOUT, env=sp_env) | ||
| _write_file(opts.save_path, output) | ||
| return opts.save_path | ||
| else: | ||
| return subprocess.check_call(args, timeout=TIMEOUT) | ||
| return subprocess.check_call(args, timeout=TIMEOUT, env=sp_env) | ||
| except (subprocess.CalledProcessError, OSError) as err: | ||
@@ -230,2 +234,8 @@ if opts.save_path: | ||
| ) | ||
| parser.add_argument( | ||
| '-n', | ||
| '--no-python-warn', | ||
| action='store_true', | ||
| help="Suppress python warnings" | ||
| ) | ||
| options = parser.parse_args(args) | ||
@@ -232,0 +242,0 @@ |
+21
-3
@@ -1,4 +0,4 @@ | ||
| Metadata-Version: 2.1 | ||
| Metadata-Version: 2.4 | ||
| Name: cffsubr | ||
| Version: 0.3.0 | ||
| Version: 0.4.0 | ||
| Summary: Standalone CFF subroutinizer based on the AFDKO tx tool | ||
@@ -20,5 +20,10 @@ Home-page: https://github.com/adobe-type-tools/cffsubr | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: 3.10 | ||
| Classifier: Programming Language :: Python :: 3.11 | ||
| Classifier: Programming Language :: Python :: 3.12 | ||
| Classifier: Programming Language :: Python :: 3.13 | ||
| Classifier: Programming Language :: Python :: 3.14 | ||
| Classifier: Topic :: Text Processing :: Fonts | ||
| Classifier: Topic :: Multimedia :: Graphics | ||
| Requires-Python: >=3.7 | ||
| Requires-Python: >=3.10 | ||
| Description-Content-Type: text/markdown | ||
@@ -30,2 +35,15 @@ License-File: LICENSE | ||
| Requires-Dist: pytest; extra == "testing" | ||
| Dynamic: author | ||
| Dynamic: author-email | ||
| Dynamic: classifier | ||
| Dynamic: description | ||
| Dynamic: description-content-type | ||
| Dynamic: home-page | ||
| Dynamic: license | ||
| Dynamic: license-file | ||
| Dynamic: platform | ||
| Dynamic: provides-extra | ||
| Dynamic: requires-dist | ||
| Dynamic: requires-python | ||
| Dynamic: summary | ||
@@ -32,0 +50,0 @@  |
+6
-1
@@ -114,3 +114,3 @@ from setuptools import setup, find_packages, Extension | ||
| extras_require={"testing": ["pytest"]}, | ||
| python_requires=">=3.7", | ||
| python_requires=">=3.10", | ||
| classifiers=[ | ||
@@ -126,2 +126,7 @@ "Development Status :: 5 - Production/Stable", | ||
| "Programming Language :: Python :: 3", | ||
| "Programming Language :: Python :: 3.10", | ||
| "Programming Language :: Python :: 3.11", | ||
| "Programming Language :: Python :: 3.12", | ||
| "Programming Language :: Python :: 3.13", | ||
| "Programming Language :: Python :: 3.14", | ||
| "Topic :: Text Processing :: Fonts", | ||
@@ -128,0 +133,0 @@ "Topic :: Multimedia :: Graphics", |
@@ -1,4 +0,4 @@ | ||
| Metadata-Version: 2.1 | ||
| Metadata-Version: 2.4 | ||
| Name: cffsubr | ||
| Version: 0.3.0 | ||
| Version: 0.4.0 | ||
| Summary: Standalone CFF subroutinizer based on the AFDKO tx tool | ||
@@ -20,5 +20,10 @@ Home-page: https://github.com/adobe-type-tools/cffsubr | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: 3.10 | ||
| Classifier: Programming Language :: Python :: 3.11 | ||
| Classifier: Programming Language :: Python :: 3.12 | ||
| Classifier: Programming Language :: Python :: 3.13 | ||
| Classifier: Programming Language :: Python :: 3.14 | ||
| Classifier: Topic :: Text Processing :: Fonts | ||
| Classifier: Topic :: Multimedia :: Graphics | ||
| Requires-Python: >=3.7 | ||
| Requires-Python: >=3.10 | ||
| Description-Content-Type: text/markdown | ||
@@ -30,2 +35,15 @@ License-File: LICENSE | ||
| Requires-Dist: pytest; extra == "testing" | ||
| Dynamic: author | ||
| Dynamic: author-email | ||
| Dynamic: classifier | ||
| Dynamic: description | ||
| Dynamic: description-content-type | ||
| Dynamic: home-page | ||
| Dynamic: license | ||
| Dynamic: license-file | ||
| Dynamic: platform | ||
| Dynamic: provides-extra | ||
| Dynamic: requires-dist | ||
| Dynamic: requires-python | ||
| Dynamic: summary | ||
@@ -32,0 +50,0 @@  |
@@ -1,9 +0,23 @@ | ||
| # file generated by setuptools_scm | ||
| # file generated by setuptools-scm | ||
| # don't change, don't track in version control | ||
| __all__ = [ | ||
| "__version__", | ||
| "__version_tuple__", | ||
| "version", | ||
| "version_tuple", | ||
| "__commit_id__", | ||
| "commit_id", | ||
| ] | ||
| TYPE_CHECKING = False | ||
| if TYPE_CHECKING: | ||
| from typing import Tuple, Union | ||
| from typing import Tuple | ||
| from typing import Union | ||
| VERSION_TUPLE = Tuple[Union[int, str], ...] | ||
| COMMIT_ID = Union[str, None] | ||
| else: | ||
| VERSION_TUPLE = object | ||
| COMMIT_ID = object | ||
@@ -14,4 +28,8 @@ version: str | ||
| version_tuple: VERSION_TUPLE | ||
| commit_id: COMMIT_ID | ||
| __commit_id__: COMMIT_ID | ||
| __version__ = version = '0.3.0' | ||
| __version_tuple__ = version_tuple = (0, 3, 0) | ||
| __version__ = version = '0.4.0' | ||
| __version_tuple__ = version_tuple = (0, 4, 0) | ||
| __commit_id__ = commit_id = 'g4ebd0ce39' |
+1
-1
| [tox] | ||
| envlist = py3{7,8,9,10,11,12}-cov, htmlcov | ||
| envlist = py3{10,11,12,13,14}-cov, htmlcov | ||
| skip_missing_interpreters=true | ||
@@ -4,0 +4,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
76387889
0.25%14047
0.44%35723
0.75%