shithub: freetype+ttf2subf

Download patch

ref: 7433655cbd1dd4324c1c144f7e24a4c6a074c5c8
parent: c3122c98ceb1a7c12028658609e3a469ea1e314f
author: David Turner <[email protected]>
date: Thu Feb 10 14:14:48 EST 2000

Some changes. The SFNT driver is able to return
Postscript glyph names even when the "psnames"
module is not used..

git/fs: mount .git/fs: mount/attach disallowed
--- a/src/sfnt/ttpost.c
+++ b/src/sfnt/ttpost.c
@@ -31,319 +31,105 @@
 #include <ttload.h>
 #include <tttags.h>
 
+/* When this configuration macro is defined, we rely on the "psnames" */
+/* module to grab the glyph names..                                   */
+#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+#include <psnames.h>
+#define  MAC_NAME(x)  ((TT_String*)psnames->macintosh_name(x))
+
+#else
+
+/* Otherwise, we ignore the "psnames" module, then provide our own */
+/* table of Mac names.. Thus, it is possible to build a version of */
+/* FreeType without the Type 1 driver & PSNames module             */
+
+#define  MAC_NAME(x)  TT_Post_Default_Names[x]
+
   /* the 258 default Mac PS glyph names */
 
-  const TT_String*  TT_Mac_Postscript_Names[258] =
+  String*  TT_Post_Default_Names[258] =
   {
     /*   0 */
-    ".notdef",
-    ".null",
-    "CR",
-    "space",
-    "exclam",
-    "quotedbl",
-    "numbersign",
-    "dollar",
-    "percent",
-    "ampersand",
-
+    ".notdef", ".null", "CR", "space", "exclam",
+    "quotedbl", "numbersign", "dollar", "percent", "ampersand",
     /*  10 */
-    "quotesingle",
-    "parenleft",
-    "parenright",
-    "asterisk",
-    "plus",
-    "comma",
-    "hyphen",
-    "period",
-    "slash",
-    "zero",
-
+    "quotesingle", "parenleft", "parenright", "asterisk", "plus",
+    "comma", "hyphen", "period", "slash", "zero",
     /*  20 */
-    "one",
-    "two",
-    "three",
-    "four",
-    "five",
-    "six",
-    "seven",
-    "eight",
-    "nine",
-    "colon",
-
+    "one", "two", "three", "four", "five",
+    "six", "seven", "eight", "nine", "colon",
     /*  30 */
-    "semicolon",
-    "less",
-    "equal",
-    "greater", "question",
-    "at",
-    "A",
-    "B",
-    "C",
-    "D",
-
+    "semicolon", "less", "equal", "greater", "question",
+    "at", "A", "B", "C", "D",
     /*  40 */
-    "E",
-    "F",
-    "G",
-    "H",
-    "I",
-    "J",
-    "K",
-    "L",
-    "M",
-    "N",
-
+    "E", "F", "G", "H", "I",
+    "J", "K", "L", "M", "N",
     /*  50 */
-    "O",
-    "P",
-    "Q",
-    "R",
-    "S",
-    "T",
-    "U",
-    "V",
-    "W",
-    "X",
-
+    "O", "P", "Q", "R", "S",
+    "T", "U", "V", "W", "X",
     /*  60 */
-    "Y",
-    "Z",
-    "bracketleft",
-    "backslash",
-    "bracketright",
-    "asciicircum",
-    "underscore",
-    "grave",
-    "a",
-    "b",
-
+    "Y", "Z", "bracketleft", "backslash", "bracketright",
+    "asciicircum", "underscore", "grave", "a", "b",
     /*  70 */
-    "c",
-    "d",
-    "e",
-    "f",
-    "g",
-    "h",
-    "i",
-    "j",
-    "k",
-    "l",
-
+    "c", "d", "e", "f", "g",
+    "h", "i", "j", "k", "l",
     /*  80 */
-    "m",
-    "n",
-    "o",
-    "p",
-    "q",
-    "r",
-    "s",
-    "t",
-    "u",
-    "v",
-
+    "m", "n", "o", "p", "q",
+    "r", "s", "t", "u", "v",
     /*  90 */
-    "w",
-    "x",
-    "y",
-    "z",
-    "braceleft",
-    "bar",
-    "braceright",
-    "asciitilde",
-    "Adieresis",
-    "Aring",
-
+    "w", "x", "y", "z", "braceleft",
+    "bar", "braceright", "asciitilde", "Adieresis", "Aring",
     /* 100 */
-    "Ccedilla",
-    "Eacute",
-    "Ntilde",
-    "Odieresis",
-    "Udieresis",
-    "aacute",
-    "agrave",
-    "acircumflex",
-    "adieresis",
-    "atilde",
-
+    "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis",
+    "aacute", "agrave", "acircumflex", "adieresis", "atilde",
     /* 110 */
-    "aring",
-    "ccedilla",
-    "eacute",
-    "egrave",
-    "ecircumflex",
-    "edieresis",
-    "iacute",
-    "igrave",
-    "icircumflex",
-    "idieresis",
-
+    "aring", "ccedilla", "eacute", "egrave", "ecircumflex",
+    "edieresis", "iacute", "igrave", "icircumflex", "idieresis",
     /* 120 */
-    "ntilde",
-    "oacute",
-    "ograve",
-    "ocircumflex",
-    "odieresis",
-    "otilde",
-    "uacute",
-    "ugrave",
-    "ucircumflex",
-    "udieresis",
-
+    "ntilde", "oacute", "ograve", "ocircumflex", "odieresis",
+    "otilde", "uacute", "ugrave", "ucircumflex", "udieresis",
     /* 130 */
-    "dagger",
-    "degree",
-    "cent",
-    "sterling",
-    "section",
-    "bullet",
-    "paragraph",
-    "germandbls",
-    "registered",
-    "copyright",
-
+    "dagger", "degree", "cent", "sterling", "section",
+    "bullet", "paragraph", "germandbls", "registered", "copyright",
     /* 140 */
-    "trademark",
-    "acute",
-    "dieresis",
-    "notequal",
-    "AE",
-    "Oslash",
-    "infinity",
-    "plusminus",
-    "lessequal",
-    "greaterequal",
-
+    "trademark", "acute", "dieresis", "notequal", "AE",
+    "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",
     /* 150 */
-    "yen",
-    "mu",
-    "partialdiff",
-    "summation",
-    "product",
-    "pi",
-    "integral",
-    "ordfeminine",
-    "ordmasculine",
-    "Omega",
-
+    "yen", "mu", "partialdiff", "summation", "product",
+    "pi", "integral", "ordfeminine", "ordmasculine", "Omega",
     /* 160 */
-    "ae",
-    "oslash",
-    "questiondown",
-    "exclamdown",
-    "logicalnot",
-    "radical",
-    "florin",
-    "approxequal",
-    "Delta",
-    "guillemotleft",
-
+    "ae", "oslash", "questiondown", "exclamdown", "logicalnot",
+    "radical", "florin", "approxequal", "Delta", "guillemotleft",
     /* 170 */
-    "guillemotright",
-    "ellipsis",
-    "nbspace",
-    "Agrave",
-    "Atilde",
-    "Otilde",
-    "OE",
-    "oe",
-    "endash",
-    "emdash",
-
+    "guillemotright", "ellipsis", "nbspace", "Agrave", "Atilde",
+    "Otilde", "OE", "oe", "endash", "emdash",
     /* 180 */
-    "quotedblleft",
-    "quotedblright",
-    "quoteleft",
-    "quoteright",
-    "divide",
-    "lozenge",
-    "ydieresis",
-    "Ydieresis",
-    "fraction",
-    "currency",
-
+    "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide",
+    "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",
     /* 190 */
-    "guilsinglleft",
-    "guilsinglright",
-    "fi",
-    "fl",
-    "daggerdbl",
-    "periodcentered",
-    "quotesinglbase",
-    "quotedblbase",
-    "perthousand",
-    "Acircumflex",
-
+    "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl",
+    "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex",
     /* 200 */
-    "Ecircumflex",
-    "Aacute",
-    "Edieresis",
-    "Egrave",
-    "Iacute",
-    "Icircumflex",
-    "Idieresis",
-    "Igrave",
-    "Oacute",
-    "Ocircumflex",
-
+    "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",
+    "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
     /* 210 */
-    "apple",
-    "Ograve",
-    "Uacute",
-    "Ucircumflex",
-    "Ugrave",
-    "dotlessi",
-    "circumflex",
-     "tilde",
-     "macron",
-     "breve",
-
+    "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave",
+    "dotlessi", "circumflex", "tilde", "macron", "breve",
     /* 220 */
-    "dotaccent",
-    "ring",
-    "cedilla",
-    "hungarumlaut",
-    "ogonek",
-    "caron",
-    "Lslash",
-    "lslash",
-    "Scaron",
-    "scaron",
-
+    "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek",
+    "caron", "Lslash", "lslash", "Scaron", "scaron",
     /* 230 */
-    "Zcaron",
-    "zcaron",
-    "brokenbar",
-    "Eth",
-    "eth",
-    "Yacute",
-    "yacute",
-    "Thorn",
-    "thorn",
-    "minus",
-
+    "Zcaron", "zcaron", "brokenbar", "Eth", "eth",
+    "Yacute", "yacute", "Thorn", "thorn", "minus",
     /* 240 */
-    "multiply",
-    "onesuperior",
-    "twosuperior",
-    "threesuperior",
-    "onehalf",
-    "onequarter",
-    "threequarters",
-    "franc",
-    "Gbreve",
-    "gbreve",
-
+    "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf",
+    "onequarter", "threequarters", "franc", "Gbreve", "gbreve",
     /* 250 */
-    "Idot",
-    "Scedilla",
-    "scedilla",
-    "Cacute",
-    "cacute",
-    "Ccaron",
-    "ccaron",
-    "dmacron",
+    "Idot", "Scedilla", "scedilla", "Cacute", "cacute",
+    "Ccaron", "ccaron", "dmacron",
   };
+#endif
 
 
   static
@@ -623,8 +409,9 @@
                             TT_UInt      index,
                             TT_String**  PSname )
   {
-    TT_Error        error;
-    TT_Post_Names*  names;
+    TT_Error            error;
+    TT_Post_Names*      names;
+    PSNames_Interface*  psnames;
 
     if ( !face )
       return TT_Err_Invalid_Face_Handle;
@@ -632,16 +419,20 @@
     if ( index >= (TT_UInt)face->root.num_glyphs )
       return TT_Err_Invalid_Glyph_Index;
 
+    psnames = (PSNames_Interface*)face->psnames;
+    if (!psnames)
+      return TT_Err_Unimplemented_Feature;
+      
     names   = &face->postscript_names;
 
     /* `.notdef' by default */
-    *PSname = (TT_String*)TT_Mac_Postscript_Names[0];
+    *PSname = MAC_NAME(0);
 
     switch ( face->postscript.FormatType )
     {
     case 0x00010000:
       if ( index < 258 )                    /* paranoid checking */
-        *PSname = (TT_String*)TT_Mac_Postscript_Names[index];
+        *PSname = MAC_NAME(index);
       break;
 
     case 0x00020000:
@@ -662,7 +453,7 @@
 
 
           if ( name_index < 258 )
-            *PSname = (TT_String*)TT_Mac_Postscript_Names[name_index];
+            *PSname = MAC_NAME(name_index);
           else
             *PSname = (TT_String*)table->glyph_names[name_index - 258];
         }
@@ -684,7 +475,7 @@
         if ( index < table->num_glyphs )    /* paranoid checking */
         {
           index  += table->offsets[index];
-          *PSname = (TT_String*)TT_Mac_Postscript_Names[index];
+          *PSname = MAC_NAME(index);
         }
       }
       break;