ref: f373e2d9bc5856925c6df82e6022e3e88881947a
parent: c9349c93431bbd01da0d844d5f5c691e8d70395c
author: David Turner <[email protected]>
date: Thu Oct 18 09:20:01 EDT 2001
rewrote "glnames.py" to fix a rather nasty bug that made FreeType return incorrect glyph names for certain glyph indices..
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2001-10-18 David Turner <[email protected]>
+ * src/psnames/pstables.h, src/tools/glnames.py: rewrote the "glnames.py"
+ script used to generate the "pstables.h" header file. The old one
+ contained a bug (yes !!) that made FreeType return incorrect glyph
+ names for certain glyphs..
+
* src/truetype/ttdriver.c: changing computation of pixel size from
character size to use rounding. This is an experiment to see if this
gives values similar to Windows for scaled ascent/descent/etc..
--- a/src/pshinter/pshalgo2.c
+++ b/src/pshinter/pshalgo2.c
@@ -238,9 +238,10 @@
{
PSH2_Hint* sort = table->sort;
FT_UInt count2;
- PSH2_Hint hint2;
#if 0
+ PSH2_Hint hint2;
+
for ( count2 = count; count2 > 0; count2--, sort++ )
{
hint2 = sort[0];
--- a/src/pshinter/pshmod.c
+++ b/src/pshinter/pshmod.c
@@ -34,7 +34,7 @@
/* finalize module */
- FT_CALLBACK_DEF void
+ FT_CALLBACK_DEF(void)
ps_hinter_done( PS_Hinter_Module module )
{
module->t1_funcs.hints = NULL;
@@ -45,7 +45,7 @@
/* initialise module, create hints recorder and the interface */
- FT_CALLBACK_DEF FT_Error
+ FT_CALLBACK_DEF(FT_Error)
ps_hinter_init( PS_Hinter_Module module )
{
FT_Memory memory = module->root.memory;
@@ -65,7 +65,7 @@
/* returns global hints interface */
- FT_CALLBACK_DEF PSH_Globals_Funcs
+ FT_CALLBACK_DEF(PSH_Globals_Funcs)
pshinter_get_globals_funcs( FT_Module module )
{
return &((PS_Hinter_Module)module)->globals_funcs;
@@ -73,7 +73,7 @@
/* return Type 1 hints interface */
- FT_CALLBACK_DEF T1_Hints_Funcs
+ FT_CALLBACK_DEF(T1_Hints_Funcs)
pshinter_get_t1_funcs( FT_Module module )
{
return &((PS_Hinter_Module)module)->t1_funcs;
@@ -81,7 +81,7 @@
/* return Type 2 hints interface */
- FT_CALLBACK_DEF T2_Hints_Funcs
+ FT_CALLBACK_DEF(T2_Hints_Funcs)
pshinter_get_t2_funcs( FT_Module module )
{
return &((PS_Hinter_Module)module)->t2_funcs;
@@ -88,8 +88,8 @@
}
- FT_CALLBACK_DEF
- PSHinter_Interface pshinter_interface =
+ FT_CALLBACK_DEF(PSHinter_Interface)
+ pshinter_interface =
{
pshinter_get_globals_funcs,
pshinter_get_t1_funcs,
--- a/src/psnames/pstables.h
+++ b/src/psnames/pstables.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* c:\david\source\freetype\freetype2\src\psnames\pstables.h */
+/* pstables.h */
/* */
/* PostScript glyph names (specification only). */
/* */
@@ -21,7 +21,6 @@
static const char* const ps_glyph_names[] =
{
- ".notdef",
".null",
"nonmarkingreturn",
"nonbreakingspace",
@@ -1094,7 +1093,7 @@
};
- static const char* const * const sid_standard_names = ps_glyph_names + 5;
+ static const char* const * const sid_standard_names = ps_glyph_names + 4;
#define NUM_SID_GLYPHS 391
@@ -1108,9 +1107,10 @@
static const unsigned short mac_standard_names[259] =
{
- 5,
+ 4,
0,
1,
+ 5,
6,
7,
8,
@@ -1117,8 +1117,8 @@
9,
10,
11,
- 12,
- 109,
+ 108,
+ 13,
14,
15,
16,
@@ -1174,8 +1174,8 @@
66,
67,
68,
- 69,
- 129,
+ 128,
+ 70,
71,
72,
73,
@@ -1205,167 +1205,166 @@
97,
98,
99,
- 100,
- 178,
- 180,
+ 177,
+ 179,
+ 181,
182,
- 183,
- 191,
- 194,
- 200,
+ 190,
+ 193,
+ 199,
+ 204,
+ 207,
205,
- 208,
206,
- 207,
- 210,
209,
+ 208,
+ 210,
211,
+ 214,
212,
- 215,
213,
- 214,
+ 215,
+ 218,
216,
- 219,
217,
- 218,
+ 219,
220,
+ 223,
221,
- 224,
222,
- 223,
- 225,
+ 224,
+ 226,
+ 229,
227,
- 230,
228,
- 229,
- 117,
- 166,
+ 116,
+ 165,
+ 101,
102,
- 103,
- 107,
- 121,
+ 106,
120,
- 154,
- 170,
- 175,
- 158,
- 130,
- 136,
- 2,
- 143,
- 146,
- 3,
- 161,
- 4,
- 5,
- 105,
+ 119,
+ 153,
+ 169,
+ 174,
157,
- 6,
- 7,
- 8,
- 9,
- 10,
- 144,
- 148,
- 11,
- 149,
- 152,
- 128,
- 101,
+ 129,
+ 135,
+ 959,
+ 142,
+ 145,
+ 917,
+ 160,
+ 941,
+ 908,
+ 104,
156,
- 12,
- 106,
- 13,
- 14,
- 111,
- 125,
- 126,
- 15,
- 179,
- 181,
- 196,
+ 980,
+ 1018,
+ 987,
+ 985,
+ 918,
+ 143,
147,
- 153,
- 116,
- 142,
+ 471,
+ 148,
+ 151,
+ 127,
+ 100,
+ 155,
+ 994,
+ 105,
+ 815,
+ 412,
110,
124,
- 70,
- 13,
- 164,
- 16,
- 232,
- 203,
- 104,
- 108,
+ 125,
+ 2,
+ 178,
+ 180,
+ 195,
+ 146,
+ 152,
+ 115,
+ 141,
+ 109,
+ 123,
+ 69,
+ 12,
+ 163,
+ 948,
+ 231,
+ 202,
+ 103,
+ 107,
+ 111,
112,
113,
114,
- 115,
+ 117,
118,
- 119,
+ 121,
122,
- 123,
- 127,
- 177,
- 184,
+ 126,
176,
+ 183,
+ 175,
+ 184,
185,
186,
187,
188,
189,
- 190,
+ 191,
192,
- 193,
- 17,
- 195,
+ 3,
+ 194,
+ 197,
198,
- 199,
- 201,
- 150,
+ 200,
+ 149,
+ 130,
131,
132,
133,
134,
- 135,
+ 136,
137,
138,
139,
140,
- 141,
- 145,
- 151,
- 197,
- 226,
- 204,
- 233,
- 165,
- 159,
+ 144,
+ 150,
+ 196,
+ 225,
+ 203,
+ 232,
+ 164,
+ 158,
+ 171,
+ 201,
+ 230,
+ 161,
+ 166,
+ 170,
172,
- 202,
- 231,
+ 154,
+ 168,
+ 173,
+ 159,
162,
167,
- 171,
- 173,
- 155,
- 169,
- 174,
- 160,
- 163,
- 168,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
+ 899,
+ 429,
+ 901,
+ 444,
+ 526,
+ 1006,
+ 404,
+ 847,
+ 406,
+ 849,
+ 868,
0
};
--- a/src/tools/glnames.py
+++ b/src/tools/glnames.py
@@ -1504,8 +1504,8 @@
return glyphs, values
-def count_extra_glyphs( alist, filter ):
- """count the number of extra glyphs"""
+def filter_glyph_names( alist, filter ):
+ """filter 'alist' by taking _out_ all glyph names that are in 'filter'"""
count = 0
extras = []
@@ -1519,7 +1519,7 @@
return extras
-def dump_mac_indices( file, t1_bias ):
+def dump_mac_indices( file, all_glyphs ):
write = file.write
write( " static const unsigned short mac_standard_names[" + \
@@ -1526,14 +1526,8 @@
repr( len( mac_standard_names ) + 1 ) + "] =\n" )
write( " {\n" )
- count = 0
for name in mac_standard_names:
- try:
- t1_index = sid_standard_names.index( name )
- write( " " + repr( t1_bias + t1_index ) + ",\n" )
- except:
- write( " " + repr( count ) + ",\n" )
- count = count + 1
+ write( " " + repr( all_glyphs.index(name) ) + ",\n" )
write( " 0\n" )
write( " };\n" )
@@ -1541,7 +1535,7 @@
write( "\n" )
-def dump_glyph_list( file, glyph_list, adobe_extra ):
+def dump_glyph_list( file, base_list, adobe_list ):
write = file.write
name_list = []
@@ -1549,7 +1543,7 @@
write( " static const char* const ps_glyph_names[] =\n" )
write( " {\n" )
- for name in glyph_list:
+ for name in base_list:
write( ' "' + name + '",\n' )
name_list.append( name )
@@ -1557,7 +1551,7 @@
write( "#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST\n" )
write( "\n" )
- for name in adobe_extra:
+ for name in adobe_list:
write( ' "' + name + '",\n' )
name_list.append( name )
@@ -1572,22 +1566,22 @@
return name_list
-def dump_unicode_values( file, base_list, adobe_list ):
+def dump_unicode_values( file, sid_list, adobe_list ):
"""build the glyph names to unicode values table"""
write = file.write
- glyph_names, uni_values = adobe_glyph_values()
+ agl_names, agl_unicodes = adobe_glyph_values()
write( "\n" )
write( " static const unsigned short ps_names_to_unicode[" + \
- repr( len( base_list ) + len( adobe_list ) + 1 ) + "] =\n" )
+ repr( len( sid_list ) + len( adobe_list ) + 1 ) + "] =\n" )
write( " {\n" )
- for name in base_list:
+ for name in sid_list:
try:
- index = glyph_names.index( name )
- write( " 0x" + uni_values[index] + ",\n" )
+ index = agl_names.index( name )
+ write( " 0x" + agl_unicodes[index] + ",\n" )
except:
write( " 0,\n" )
@@ -1597,8 +1591,8 @@
for name in adobe_list:
try:
- index = glyph_names.index( name )
- write( " 0x" + uni_values[index] + ",\n" )
+ index = agl_names.index( name )
+ write( " 0x" + agl_unicodes[index] + ",\n" )
except:
write( " 0,\n" )
@@ -1640,17 +1634,26 @@
count_sid = len( sid_standard_names )
- # build mac index table & supplemental glyph names
- mac_list = count_extra_glyphs( mac_standard_names, adobe_glyph_names() )
- count_mac = len( mac_list )
- t1_bias = count_mac
- base_list = mac_list + sid_standard_names
+ # mac_extras contains the list of glyph names in the Macintosh standard
+ # encoding which are not in either the Adobe Glyph List or the SID Standard Names
+ #
+ mac_extras = filter_glyph_names( mac_standard_names, adobe_glyph_names() )
+ mac_extras = filter_glyph_names( mac_extras, sid_standard_names )
- # build adobe unicode index table & supplemental glyph names
- adobe_list = adobe_glyph_names()
- adobe_list = count_extra_glyphs( adobe_list, base_list )
- count_adobe = len( adobe_list )
+ # base_list contains the first names of our final glyph names table. It consists
+ # of the "mac_extras" glyph names, followed by the SID Standard names
+ #
+ mac_extras_count = len( mac_extras )
+ t1_bias = mac_extras_count
+ base_list = mac_extras + sid_standard_names
+ # adobe_list contains the glyph names that are in the AGL, but no in
+ # the base_list, they will be placed after base_list glyph names in
+ # our final table..
+ #
+ adobe_list = filter_glyph_names( adobe_glyph_names(), base_list )
+ adobe_count = len( adobe_list )
+
write( "/***************************************************************************/\n" )
write( "/* */\n" )
@@ -1675,7 +1678,8 @@
write( "\n" )
write( "\n" )
- # dump glyph list
+ # dump final glyph list (mac extras + sid standard names + AGL glyph names)
+ #
name_list = dump_glyph_list( file, base_list, adobe_list )
# dump t1_standard_list
@@ -1697,13 +1701,10 @@
write( "\n" )
# dump mac indices table
- dump_mac_indices( file, t1_bias )
+ dump_mac_indices( file, name_list )
- # discard mac names from base list
- base_list = base_list[t1_bias:]
-
# dump unicode values table
- dump_unicode_values( file, base_list, adobe_list )
+ dump_unicode_values( file, sid_standard_names, adobe_list )
dump_encoding( file, "t1_standard_encoding", t1_standard_encoding )
dump_encoding( file, "t1_expert_encoding", t1_expert_encoding )