rewrote "glnames.py" to fix a rather nasty bug that made FreeType
return incorrect glyph names for certain glyph indices..
diff --git a/ChangeLog b/ChangeLog
index 1f8dfcb..b655895 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2001-10-18 David Turner <david@freetype.org>
+ * 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..
diff --git a/src/pshinter/pshalgo2.c b/src/pshinter/pshalgo2.c
index c98aa78..0dcbfe8 100644
--- 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];
diff --git a/src/pshinter/pshmod.c b/src/pshinter/pshmod.c
index 65b360d..c0fa29f 100644
--- 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,15 +81,15 @@
/* 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;
}
- FT_CALLBACK_DEF
- PSHinter_Interface pshinter_interface =
+ FT_CALLBACK_DEF(PSHinter_Interface)
+ pshinter_interface =
{
pshinter_get_globals_funcs,
pshinter_get_t1_funcs,
diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h
index 3db8fe7..39c838a 100644
--- 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,17 +1107,18 @@
static const unsigned short mac_standard_names[259] =
{
- 5,
+ 4,
0,
1,
+ 5,
6,
7,
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,
- 182,
- 183,
- 191,
- 194,
- 200,
- 205,
- 208,
- 206,
- 207,
- 210,
- 209,
- 211,
- 212,
- 215,
- 213,
- 214,
- 216,
- 219,
- 217,
- 218,
- 220,
- 221,
- 224,
- 222,
- 223,
- 225,
- 227,
- 230,
- 228,
- 229,
- 117,
- 166,
- 102,
- 103,
- 107,
- 121,
- 120,
- 154,
- 170,
- 175,
- 158,
- 130,
- 136,
- 2,
- 143,
- 146,
- 3,
- 161,
- 4,
- 5,
- 105,
- 157,
- 6,
- 7,
- 8,
- 9,
- 10,
- 144,
- 148,
- 11,
- 149,
- 152,
- 128,
- 101,
- 156,
- 12,
- 106,
- 13,
- 14,
- 111,
- 125,
- 126,
- 15,
+ 177,
179,
181,
- 196,
- 147,
- 153,
+ 182,
+ 190,
+ 193,
+ 199,
+ 204,
+ 207,
+ 205,
+ 206,
+ 209,
+ 208,
+ 210,
+ 211,
+ 214,
+ 212,
+ 213,
+ 215,
+ 218,
+ 216,
+ 217,
+ 219,
+ 220,
+ 223,
+ 221,
+ 222,
+ 224,
+ 226,
+ 229,
+ 227,
+ 228,
116,
+ 165,
+ 101,
+ 102,
+ 106,
+ 120,
+ 119,
+ 153,
+ 169,
+ 174,
+ 157,
+ 129,
+ 135,
+ 959,
142,
+ 145,
+ 917,
+ 160,
+ 941,
+ 908,
+ 104,
+ 156,
+ 980,
+ 1018,
+ 987,
+ 985,
+ 918,
+ 143,
+ 147,
+ 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
};
diff --git a/src/tools/glnames.py b/src/tools/glnames.py
index 808e365..561774d 100644
--- 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,21 +1519,15 @@
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[" + \
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,16 +1634,25 @@
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 )
-
- # discard mac names from base list
- base_list = base_list[t1_bias:]
+ dump_mac_indices( file, name_list )
# 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 )