Some changes. The SFNT driver is able to return

Postscript glyph names even when the "psnames"
module is not used..
This commit is contained in:
David Turner 2000-02-10 19:14:48 +00:00
parent c3122c98ce
commit 7433655cbd
1 changed files with 80 additions and 289 deletions

View File

@ -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;