koemaeda / gohufont-ttf

The GohuFont (from font.gohu.org) in TrueType format
Other
64 stars 6 forks source link

Wrong questionmark in 14.ttf #3

Open Finii opened 3 weeks ago

Finii commented 3 weeks ago

The sdf file is ok, but the ttf has an inverted question mark.

Original reporter is @dsvoid here:

Visuals:

image

It does have a proper question mark, but the glyph is connected to no codepoint

image

Finii commented 3 weeks ago

The bitmap file is correct, though:

image Circled the dot of the question mark

Hmm, linking error?

image

Look into the ttf file via ttx, just some lines shown here:

  <GlyphOrder>                                         
    <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
    <GlyphID id="64" name="question"/>                  
    <GlyphID id="192" name="question#1"/>           
  </GlyphOrder>
  <cmap>                                                        
    <tableVersion version="0"/>                                 
    <cmap_format_4 platformID="0" platEncID="3" language="0">   
      <map code="0x3f" name="question#1"/><!-- QUESTION MARK -->
    </cmap_format_4>
    <cmap_format_6 platformID="1" platEncID="0" language="0">
      <map code="0x3f" name="question"/>
    </cmap_format_6>
    <cmap_format_4 platformID="3" platEncID="1" language="0">
      <map code="0x3f" name="question#1"/><!-- QUESTION MARK -->
    </cmap_format_4>
  </cmap>
  <post>
    <psNames>
      <!-- This file uses unique glyph names based on the information
           found in the 'post' table. Since these names might not be unique,
           we have to invent artificial names in case of clashes. In order to
           be able to retain the original information, we need a name to
           ps name mapping for those cases where they differ. That's what
           you see below.
            -->
      <psName name="question#1" psName="question"/>
    </psNames>
  <post>

    <TTGlyph name="question" xMin="146" yMin="1" xMax="1024" yMax="1464">
      <contour>
        <pt x="439" y="147" on="1"/>
        <pt x="439" y="293" on="1"/>
        <pt x="512" y="293" on="1"/>
        <pt x="585" y="293" on="1"/>
        <pt x="585" y="147" on="1"/>
        <pt x="585" y="1" on="1"/>
        <pt x="512" y="1" on="1"/>
        <pt x="439" y="1" on="1"/>
      </contour>
      <contour>
        <pt x="293" y="1391" on="1"/>
        <pt x="293" y="1464" on="1"/>
        <pt x="585" y="1464" on="1"/>
        <pt x="878" y="1464" on="1"/>
        <pt x="878" y="1391" on="1"/>
        <pt x="878" y="1317" on="1"/>
        <pt x="951" y="1317" on="1"/>
        <pt x="1024" y="1317" on="1"/>
        <pt x="1024" y="1098" on="1"/>
        <pt x="1024" y="878" on="1"/>
        <pt x="951" y="878" on="1"/>
        <pt x="878" y="878" on="1"/>
        <pt x="878" y="805" on="1"/>
        <pt x="878" y="732" on="1"/>
        <pt x="805" y="732" on="1"/>
        <pt x="732" y="732" on="1"/>
        <pt x="732" y="659" on="1"/>
        <pt x="732" y="586" on="1"/>
        <pt x="659" y="586" on="1"/>
        <pt x="585" y="586" on="1"/>
        <pt x="585" y="513" on="1"/>
        <pt x="585" y="439" on="1"/>
        <pt x="512" y="439" on="1"/>
        <pt x="439" y="439" on="1"/>
        <pt x="439" y="513" on="1"/>
        <pt x="439" y="586" on="1"/>
        <pt x="512" y="586" on="1"/>
        <pt x="585" y="586" on="1"/>
        <pt x="585" y="659" on="1"/>
        <pt x="585" y="732" on="1"/>
        <pt x="659" y="732" on="1"/>
        <pt x="732" y="732" on="1"/>
        <pt x="732" y="805" on="1"/>
        <pt x="732" y="878" on="1"/>
        <pt x="805" y="878" on="1"/>
        <pt x="878" y="878" on="1"/>
        <pt x="878" y="1098" on="1"/>
        <pt x="878" y="1317" on="1"/>
        <pt x="585" y="1317" on="1"/>
        <pt x="293" y="1317" on="1"/>
        <pt x="293" y="1244" on="1"/>
        <pt x="293" y="1171" on="1"/>
        <pt x="219" y="1171" on="1"/>
        <pt x="146" y="1171" on="1"/>
        <pt x="146" y="1244" on="1"/>
        <pt x="146" y="1317" on="1"/>
        <pt x="219" y="1317" on="1"/>
        <pt x="293" y="1317" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="question#1" xMin="146" yMin="1" xMax="1024" yMax="1464">
      <contour>
        <pt x="585" y="951" on="1"/>
        <pt x="585" y="1025" on="1"/>
        <pt x="659" y="1025" on="1"/>
        <pt x="732" y="1025" on="1"/>
        <pt x="732" y="951" on="1"/>
        <pt x="732" y="878" on="1"/>
        <pt x="659" y="878" on="1"/>
        <pt x="585" y="878" on="1"/>
        <pt x="585" y="805" on="1"/>
        <pt x="585" y="732" on="1"/>
        <pt x="512" y="732" on="1"/>
        <pt x="439" y="732" on="1"/>
        <pt x="439" y="659" on="1"/>
        <pt x="439" y="586" on="1"/>
        <pt x="366" y="586" on="1"/>
        <pt x="293" y="586" on="1"/>
        <pt x="293" y="366" on="1"/>
        <pt x="293" y="147" on="1"/>
        <pt x="585" y="147" on="1"/>
        <pt x="878" y="147" on="1"/>
        <pt x="878" y="220" on="1"/>
        <pt x="878" y="293" on="1"/>
        <pt x="951" y="293" on="1"/>
        <pt x="1024" y="293" on="1"/>
        <pt x="1024" y="220" on="1"/>
        <pt x="1024" y="147" on="1"/>
        <pt x="951" y="147" on="1"/>
        <pt x="878" y="147" on="1"/>
        <pt x="878" y="74" on="1"/>
        <pt x="878" y="1" on="1"/>
        <pt x="585" y="1" on="1"/>
        <pt x="293" y="1" on="1"/>
        <pt x="293" y="74" on="1"/>
        <pt x="293" y="147" on="1"/>
        <pt x="219" y="147" on="1"/>
        <pt x="146" y="147" on="1"/>
        <pt x="146" y="366" on="1"/>
        <pt x="146" y="586" on="1"/>
        <pt x="219" y="586" on="1"/>
        <pt x="293" y="586" on="1"/>
        <pt x="293" y="659" on="1"/>
        <pt x="293" y="732" on="1"/>
        <pt x="366" y="732" on="1"/>
        <pt x="439" y="732" on="1"/>
        <pt x="439" y="805" on="1"/>
        <pt x="439" y="878" on="1"/>
        <pt x="512" y="878" on="1"/>
        <pt x="585" y="878" on="1"/>
      </contour>
      <contour>
        <pt x="585" y="1317" on="1"/>
        <pt x="585" y="1464" on="1"/>
        <pt x="659" y="1464" on="1"/>
        <pt x="732" y="1464" on="1"/>
        <pt x="732" y="1317" on="1"/>
        <pt x="732" y="1171" on="1"/>
        <pt x="659" y="1171" on="1"/>
        <pt x="585" y="1171" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

From the contours question is the upside-down one and question#1 is the ordinary questionmark.

Fix

This directly fixes the ttf file via modifying its ttx:

--- gohufont-14.ttx 2024-06-11 21:49:37.271329386 +0200
+++ gohufont-14_.ttx    2024-06-11 22:01:46.502759124 +0200
@@ -195,7 +195,7 @@
     <GlyphID id="189" name="onequarter"/>
     <GlyphID id="190" name="onehalf"/>
     <GlyphID id="191" name="threequarters"/>
-    <GlyphID id="192" name="question#1"/>
+    <GlyphID id="192" name="inverted"/>
     <GlyphID id="193" name="Agrave"/>
     <GlyphID id="194" name="Aacute"/>
     <GlyphID id="195" name="Acircumflex"/>
@@ -532,7 +532,7 @@
     <mtx name="plusminus" width="1170" lsb="146"/>
     <mtx name="q" width="1170" lsb="146"/>
     <mtx name="question" width="1170" lsb="146"/>
-    <mtx name="question#1" width="1170" lsb="146"/>
+    <mtx name="inverted" width="1170" lsb="146"/>
     <mtx name="quotedbl" width="1170" lsb="293"/>
     <mtx name="quotesingle" width="1170" lsb="439"/>
     <mtx name="r" width="1170" lsb="146"/>
@@ -701,7 +701,7 @@
       <map code="0x3c" name="less"/><!-- LESS-THAN SIGN -->
       <map code="0x3d" name="equal"/><!-- EQUALS SIGN -->
       <map code="0x3e" name="greater"/><!-- GREATER-THAN SIGN -->
-      <map code="0x3f" name="question#1"/><!-- QUESTION MARK -->
+      <map code="0x3f" name="question"/><!-- QUESTION MARK -->
       <map code="0x40" name="at"/><!-- COMMERCIAL AT -->
       <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
       <map code="0x42" name="B"/><!-- LATIN CAPITAL LETTER B -->
@@ -828,6 +828,7 @@
       <map code="0xbc" name="onequarter"/><!-- VULGAR FRACTION ONE QUARTER -->
       <map code="0xbd" name="onehalf"/><!-- VULGAR FRACTION ONE HALF -->
       <map code="0xbe" name="threequarters"/><!-- VULGAR FRACTION THREE QUARTERS -->
+      <map code="0xbf" name="inverted"/><!-- INVERTED QUESTION MARK -->
       <map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
       <map code="0xc1" name="Aacute"/><!-- LATIN CAPITAL LETTER A WITH ACUTE -->
       <map code="0xc2" name="Acircumflex"/><!-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
@@ -1166,7 +1167,7 @@
       <map code="0x3c" name="less"/><!-- LESS-THAN SIGN -->
       <map code="0x3d" name="equal"/><!-- EQUALS SIGN -->
       <map code="0x3e" name="greater"/><!-- GREATER-THAN SIGN -->
-      <map code="0x3f" name="question#1"/><!-- QUESTION MARK -->
+      <map code="0x3f" name="question"/><!-- QUESTION MARK -->
       <map code="0x40" name="at"/><!-- COMMERCIAL AT -->
       <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
       <map code="0x42" name="B"/><!-- LATIN CAPITAL LETTER B -->
@@ -1293,6 +1294,7 @@
       <map code="0xbc" name="onequarter"/><!-- VULGAR FRACTION ONE QUARTER -->
       <map code="0xbd" name="onehalf"/><!-- VULGAR FRACTION ONE HALF -->
       <map code="0xbe" name="threequarters"/><!-- VULGAR FRACTION THREE QUARTERS -->
+      <map code="0xbf" name="inverted"/><!-- INVERTED QUESTION MARK -->
       <map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
       <map code="0xc1" name="Aacute"/><!-- LATIN CAPITAL LETTER A WITH ACUTE -->
       <map code="0xc2" name="Acircumflex"/><!-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
@@ -9721,7 +9723,7 @@
       <instructions/>
     </TTGlyph>

-    <TTGlyph name="question#1" xMin="146" yMin="1" xMax="1024" yMax="1464">
+    <TTGlyph name="inverted" xMin="146" yMin="1" xMax="1024" yMax="1464">
       <contour>
         <pt x="585" y="951" on="1"/>
         <pt x="585" y="1025" on="1"/>
@@ -11909,14 +11911,6 @@
     <minMemType1 value="0"/>
     <maxMemType1 value="0"/>
     <psNames>
-      <!-- This file uses unique glyph names based on the information
-           found in the 'post' table. Since these names might not be unique,
-           we have to invent artificial names in case of clashes. In order to
-           be able to retain the original information, we need a name to
-           ps name mapping for those cases where they differ. That's what
-           you see below.
-            -->
-      <psName name="question#1" psName="question"/>
     </psNames>
     <extraNames>
       <!-- following are the name that are not taken from the standard Mac glyph order -->