rewrote "glnames.py" to fix a rather nasty bug that made FreeType
return incorrect glyph names for certain glyph indices..
This commit is contained in:
parent
9e1a4b4271
commit
1a2af1f3d5
|
@ -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..
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -1504,8 +1504,8 @@ def adobe_glyph_values():
|
|||
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 @@ def count_extra_glyphs( alist, filter ):
|
|||
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 @@ def dump_mac_indices( file, t1_bias ):
|
|||
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 @@ def dump_glyph_list( file, glyph_list, adobe_extra ):
|
|||
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 @@ def dump_glyph_list( file, glyph_list, adobe_extra ):
|
|||
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 @@ def dump_glyph_list( file, glyph_list, adobe_extra ):
|
|||
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 @@ def dump_unicode_values( file, base_list, adobe_list ):
|
|||
|
||||
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 @@ def main():
|
|||
|
||||
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 @@ def main():
|
|||
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 @@ def main():
|
|||
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 )
|
||||
|
|
Loading…
Reference in New Issue