1 /* texfont.h Main font API implementation for the pascal parts
3 Copyright 2006-2010 Taco Hoekwater <taco@luatex.org>
5 This file is part of LuaTeX.
7 LuaTeX is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your
10 option) any later version.
12 LuaTeX is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 License for more details.
17 You should have received a copy of the GNU General Public License along
18 with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
21 /* Here we have the interface to LuaTeX's font system, as seen from the
22 main pascal program. There is a companion list in luatex.defines to
26 This file is read at the end of ptexlib.h, which is called for at
27 the end of luatexcoerce.h, as well as from the C sources.
33 # define pointer halfword
35 /* these are dumped en block, so they need endianness tests */
37 typedef struct liginfo
{
38 # ifdef WORDS_BIGENDIAN
49 /* these are dumped en block, so they need endianness tests */
51 typedef struct kerninfo
{
52 # ifdef WORDS_BIGENDIAN
61 typedef struct extinfo
{
70 /* todo: maybe create a 'math info structure' */
72 typedef struct charinfo
{
73 char *name
; /* postscript character name */
74 liginfo
*ligatures
; /* ligature items */
75 kerninfo
*kerns
; /* kern items */
76 eight_bits
*packets
; /* virtual commands. */
77 unsigned short index
; /* CID index */
78 int remainder
; /* spare value for odd items, could be union-ed with extensible */
79 scaled width
; /* width */
80 scaled height
; /* height */
81 scaled depth
; /* depth */
82 scaled italic
; /* italic correction */
83 scaled vert_italic
; /* italic correction */
84 scaled top_accent
; /* top accent alignment */
85 scaled bot_accent
; /* bot accent alignment */
86 int ef
; /* font expansion factor */
87 int lp
; /* left protruding factor */
88 int rp
; /* right protruding factor */
89 char tag
; /* list / ext taginfo */
90 char used
; /* char is typeset ? */
91 char *tounicode
; /* unicode equivalent */
92 extinfo
*hor_variants
; /* horizontal variants */
93 extinfo
*vert_variants
; /* vertical variants */
94 int top_left_math_kerns
;
95 int top_right_math_kerns
;
96 int bottom_right_math_kerns
;
97 int bottom_left_math_kerns
;
98 scaled
*top_left_math_kern_array
;
99 scaled
*top_right_math_kern_array
;
100 scaled
*bottom_right_math_kern_array
;
101 scaled
*bottom_left_math_kern_array
;
104 # define EXT_NORMAL 0
105 # define EXT_REPEAT 1
107 extern extinfo
*get_charinfo_vert_variants(charinfo
* ci
);
108 extern extinfo
*get_charinfo_hor_variants(charinfo
* ci
);
109 extern void set_charinfo_hor_variants(charinfo
* ci
, extinfo
* ext
);
110 extern void set_charinfo_vert_variants(charinfo
* ci
, extinfo
* ext
);
111 extern void add_charinfo_vert_variant(charinfo
* ci
, extinfo
* ext
);
112 extern void add_charinfo_hor_variant(charinfo
* ci
, extinfo
* ext
);
114 extern extinfo
*copy_variants(extinfo
* o
);
116 extern extinfo
*new_variant(int glyph
, int startconnect
, int endconnect
, int advance
, int repeater
);
118 extern scaled_whd
get_charinfo_whd(internal_font_number f
, int c
);
120 typedef struct texfont
{
123 int _font_units_per_em
;
126 char *_font_filename
;
127 char *_font_fullname
;
129 char *_font_encodingname
;
130 char *_font_cidregistry
;
131 char *_font_cidordering
;
132 int _font_cidversion
;
133 int _font_cidsupplement
;
136 unsigned _font_checksum
; /* internal information */
137 char _font_used
; /* internal information */
138 char _font_touched
; /* internal information */
139 int _font_cache_id
; /* internal information */
140 char _font_encodingbytes
; /* 1 or 2 bytes */
141 boolean _font_oldmath
; /* default to false when MathConstants seen */
142 int _font_slant
; /* a slant in ppt */
143 int _font_extend
; /* an extension in ppt, or 1000 */
145 int font_max_stretch
;
146 int _font_step
; /* amount of one step of expansion */
147 boolean _font_auto_expand
; /* this font is auto-expanded? */
149 char _font_tounicode
; /* 1 if info is present */
153 int _font_writingmode
;
159 int _font_natural_dir
;
161 charinfo
*_left_boundary
;
162 charinfo
*_right_boundary
;
167 int _font_math_params
;
168 scaled
*_math_param_base
;
175 int ligatures_disabled
;
177 int _pdf_font_num
; /* maps to a PDF resource ID */
178 str_number _pdf_font_attr
; /* pointer to additional attributes */
182 unknown_font_type
= 0, /* new font (has not been used yet) */
183 virtual_font_type
, /* virtual font */
184 real_font_type
, /* real font */
196 unknown_writingmode
= 0,
197 horizontal_writingmode
,
198 vertical_writingmode
,
202 unknown_identity
= 0,
208 unknown_embedding
= 0,
212 } font_embedding_option
;
214 extern const char *font_type_strings
[];
215 extern const char *font_format_strings
[];
216 extern const char *font_writingmodes_strings
[];
217 extern const char *font_identity_strings
[];
218 extern const char *font_embedding_strings
[];
220 # define font_checksum(a) font_tables[a]->_font_checksum
221 # define set_font_checksum(a,b) font_checksum(a) = b
223 # define font_check_0(a) ((font_tables[a]->_font_checksum&0xFF000000)>>24)
224 # define font_check_1(a) ((font_tables[a]->_font_checksum&0x00FF0000)>>16)
225 # define font_check_2(a) ((font_tables[a]->_font_checksum&0x0000FF00)>>8)
226 # define font_check_3(a) (font_tables[a]->_font_checksum&0x000000FF)
228 # define font_size(a) font_tables[a]->_font_size
229 # define set_font_size(a,b) font_size(a) = b
230 # define font_dsize(a) font_tables[a]->_font_dsize
231 # define set_font_dsize(a,b) font_dsize(a) = b
233 # define font_units_per_em(a) font_tables[a]->_font_units_per_em
234 # define set_font_units_per_em(a,b) font_units_per_em(a) = b
236 # define font_name(a) font_tables[a]->_font_name
237 # define get_font_name(a) (unsigned char *)font_name(a)
238 # define set_font_name(f,b) font_name(f) = b
239 # define tex_font_name(a) maketexstring(font_name(a))
241 # define font_area(a) font_tables[a]->_font_area
242 # define get_font_area(a) (unsigned char *)font_area(a)
243 # define set_font_area(f,b) font_area(f) = b
244 # define tex_font_area(a) maketexstring(font_area(a))
246 boolean
cmp_font_area(int, str_number
);
248 # define font_reassign(a,b) { if (a!=NULL) free(a); a = b; }
250 # define font_filename(a) font_tables[a]->_font_filename
251 # define set_font_filename(f,b) font_reassign(font_filename(f),b)
253 # define font_fullname(a) font_tables[a]->_font_fullname
254 # define set_font_fullname(f,b) font_reassign(font_fullname(f),b)
256 # define font_psname(a) font_tables[a]->_font_psname
257 # define set_font_psname(f,b) font_reassign(font_psname(f),b)
259 # define font_encodingname(a) font_tables[a]->_font_encodingname
260 # define set_font_encodingname(f,b) font_reassign(font_encodingname(f),b)
262 # define cmp_font_filename(a,b) (!(font_filename(a)!=NULL || font_filename(b)!=NULL || \
263 strcmp(font_filename(a),font_filename(b))))
264 # define cmp_font_fullname(a,b) (!(font_fullname(a)!=NULL || font_fullname(b)!=NULL || \
265 strcmp(font_fullname(a),font_fullname(b))))
266 # define cmp_font_encodingname(a,b) (!(font_encoding(a)!=NULL || font_encodingname(b)!=NULL || \
267 strcmp(font_encodingname(a),font_encodingname(b))))
268 # define font_bc(a) font_tables[a]->_font_bc
269 # define set_font_bc(f,b) font_bc(f) = b
271 # define font_ec(a) font_tables[a]->_font_ec
272 # define set_font_ec(f,b) font_ec(f) = b
274 # define font_used(a) (font_tables[a]!=NULL && font_tables[a]->_font_used)
275 # define set_font_used(a,b) font_tables[a]->_font_used = b
277 # define font_touched(a) font_tables[a]->_font_touched
278 # define set_font_touched(a,b) font_touched(a) = b
280 # define font_type(a) font_tables[a]->_font_type
281 # define set_font_type(a,b) font_type(a) = b;
283 # define font_format(a) font_tables[a]->_font_format
284 # define font_format_name(a) font_format_strings[font_tables[a]->_font_format]
285 # define set_font_format(a,b) font_format(a) = b
287 # define font_writingmode(a) font_tables[a]->_font_writingmode
288 # define font_writingmode_name(a) font_writingmode_strings[font_tables[a]->_font_writingmode]
289 # define set_font_writingmode(a,b) font_writingmode(a) = b
291 # define font_identity(a) font_tables[a]->_font_identity
292 # define font_identity_name(a) font_identity_strings[font_tables[a]->_font_identity]
293 # define set_font_identity(a,b) font_identity(a) = b
295 # define font_embedding(a) font_tables[a]->_font_embedding
296 # define set_font_embedding(a,b) font_embedding(a) = b
298 # define font_cidversion(a) font_tables[a]->_font_cidversion
299 # define set_font_cidversion(a,b) font_cidversion(a) = b
301 # define font_cidsupplement(a) font_tables[a]->_font_cidsupplement
302 # define set_font_cidsupplement(a,b) font_cidsupplement(a) = b
304 # define font_cidordering(a) font_tables[a]->_font_cidordering
305 # define set_font_cidordering(f,b) font_reassign(font_cidordering(f),b)
307 # define font_cidregistry(a) font_tables[a]->_font_cidregistry
308 # define set_font_cidregistry(f,b) font_reassign(font_cidregistry(f),b)
310 # define font_map(a) font_tables[a]->_font_map
311 # define set_font_map(a,b) font_map(a) = b
313 # define font_cache_id(a) font_tables[a]->_font_cache_id
314 # define set_font_cache_id(a,b) font_cache_id(a) = b
316 # define font_encodingbytes(a) font_tables[a]->_font_encodingbytes
317 # define set_font_encodingbytes(a,b) font_encodingbytes(a) = b
319 # define font_oldmath(a) font_tables[a]->_font_oldmath
320 # define set_font_oldmath(a,b) font_oldmath(a) = b
322 # define font_slant(a) font_tables[a]->_font_slant
323 # define set_font_slant(a,b) font_slant(a) = b
325 # define font_extend(a) font_tables[a]->_font_extend
326 # define set_font_extend(a,b) font_extend(a) = b
328 # define font_shrink(a) font_tables[a]->_font_shrink
329 # define set_font_shrink(a,b) font_shrink(a) = b
331 # define font_stretch(a) font_tables[a]->_font_stretch
332 # define set_font_stretch(a,b) font_stretch(a) = b
334 # define font_max_shrink(a) font_tables[a]->font_max_shrink
335 # define set_font_max_shrink(a,b) font_max_shrink(a) = b
337 # define font_max_stretch(a) font_tables[a]->font_max_stretch
338 # define set_font_max_stretch(a,b) font_max_stretch(a) = b
340 # define font_step(a) font_tables[a]->_font_step
341 # define set_font_step(a,b) font_step(a) = b
343 # define font_auto_expand(a) font_tables[a]->_font_auto_expand
344 # define set_font_auto_expand(a,b) font_auto_expand(a) = b
346 # define font_tounicode(a) font_tables[a]->_font_tounicode
347 # define set_font_tounicode(a,b) font_tounicode(a) = b
349 # define hyphen_char(a) font_tables[a]->_hyphen_char
350 # define set_hyphen_char(a,b) hyphen_char(a) = b
352 # define skew_char(a) font_tables[a]->_skew_char
353 # define set_skew_char(a,b) skew_char(a) = b
355 # define font_natural_dir(a) font_tables[a]->_font_natural_dir
356 # define set_font_natural_dir(a,b) font_natural_dir(a) = b
358 # define pdf_font_num(a) font_tables[a]->_pdf_font_num
359 # define set_pdf_font_num(a,b) pdf_font_num(a) = b
361 # define pdf_font_attr(a) font_tables[a]->_pdf_font_attr
362 # define set_pdf_font_attr(a,b) pdf_font_attr(a) = b
364 # define left_boundarychar -1
365 # define right_boundarychar -2
366 # define non_boundarychar -3
368 # define left_boundary(a) font_tables[a]->_left_boundary
369 # define has_left_boundary(a) (left_boundary(a)!=NULL)
370 # define set_left_boundary(a,b) font_reassign(left_boundary(a),b)
372 # define right_boundary(a) font_tables[a]->_right_boundary
373 # define has_right_boundary(a) (right_boundary(a)!=NULL)
374 # define set_right_boundary(a,b) font_reassign(right_boundary(a),b)
376 # define font_bchar(a) (right_boundary(a)!=NULL ? right_boundarychar : non_boundarychar)
378 /* font parameters */
380 # define font_params(a) font_tables[a]->_font_params
381 # define param_base(a) font_tables[a]->_param_base
382 # define font_param(a,b) font_tables[a]->_param_base[b]
384 extern void set_font_params(internal_font_number f
, int b
);
386 # define set_font_param(f,n,b) { \
387 if (font_params(f)<n) \
388 set_font_params(f,n); \
389 font_param(f,n) = b; \
391 # define font_math_params(a) font_tables[a]->_font_math_params
392 # define math_param_base(a) font_tables[a]->_math_param_base
393 # define font_math_param(a,b) font_tables[a]->_math_param_base[b]
395 extern void set_font_math_params(internal_font_number f
, int b
);
397 # define set_font_math_param(f,n,b) { \
398 if (font_math_params(f)<n) \
399 set_font_math_params(f,n); \
400 font_math_param(f,n) = b; \
403 /* Font parameters are sometimes referred to as |slant(f)|, |space(f)|, etc.*/
408 space_stretch_code
= 3,
409 space_shrink_code
= 4,
413 } font_parameter_codes
;
415 # define slant(f) font_param(f,slant_code)
416 # define space(f) font_param(f,space_code)
417 # define space_stretch(f) font_param(f,space_stretch_code)
418 # define space_shrink(f) font_param(f,space_shrink_code)
419 # define x_height(f) font_param(f,x_height_code)
423 # define quad(f) font_param(f,quad_code)
424 # define extra_space(f) font_param(f,extra_space_code)
426 /* now for characters */
430 bottom_right_kern
= 2,
431 bottom_left_kern
= 3,
433 } font_math_kern_codes
;
435 extern charinfo
*get_charinfo(internal_font_number f
, int c
);
436 extern int char_exists(internal_font_number f
, int c
);
437 extern charinfo
*char_info(internal_font_number f
, int c
);
440 Here is a quick way to test if a glyph exists, when you are
441 already certain the font |f| exists, and that the |c| is a regular
442 glyph id, not one of the two special boundary objects.
445 # define quick_char_exists(f,c) (get_sa_item(font_tables[f]->characters,c).int_value)
447 extern void set_charinfo_width(charinfo
* ci
, scaled val
);
448 extern void set_charinfo_height(charinfo
* ci
, scaled val
);
449 extern void set_charinfo_depth(charinfo
* ci
, scaled val
);
450 extern void set_charinfo_italic(charinfo
* ci
, scaled val
);
451 extern void set_charinfo_vert_italic(charinfo
* ci
, scaled val
);
452 extern void set_charinfo_top_accent(charinfo
* ci
, scaled val
);
453 extern void set_charinfo_bot_accent(charinfo
* ci
, scaled val
);
454 extern void set_charinfo_tag(charinfo
* ci
, scaled val
);
455 extern void set_charinfo_remainder(charinfo
* ci
, scaled val
);
456 extern void set_charinfo_used(charinfo
* ci
, scaled val
);
457 extern void set_charinfo_index(charinfo
* ci
, scaled val
);
458 extern void set_charinfo_name(charinfo
* ci
, char *val
);
459 extern void set_charinfo_tounicode(charinfo
* ci
, char *val
);
460 extern void set_charinfo_ligatures(charinfo
* ci
, liginfo
* val
);
461 extern void set_charinfo_kerns(charinfo
* ci
, kerninfo
* val
);
462 extern void set_charinfo_packets(charinfo
* ci
, eight_bits
* val
);
463 extern void set_charinfo_extensible(charinfo
* ci
, int a
, int b
, int c
, int d
);
464 extern void set_charinfo_ef(charinfo
* ci
, scaled val
);
465 extern void set_charinfo_lp(charinfo
* ci
, scaled val
);
466 extern void set_charinfo_rp(charinfo
* ci
, scaled val
);
468 extern void add_charinfo_math_kern(charinfo
* ci
, int type
, scaled ht
, scaled krn
);
469 extern int get_charinfo_math_kerns(charinfo
* ci
, int id
);
471 # define set_char_used(f,a,b) do { \
472 if (char_exists(f,a)) \
473 set_charinfo_used(char_info(f,a),b); \
476 extern scaled
get_charinfo_width(charinfo
* ci
);
477 extern scaled
get_charinfo_height(charinfo
* ci
);
478 extern scaled
get_charinfo_depth(charinfo
* ci
);
479 extern scaled
get_charinfo_italic(charinfo
* ci
);
480 extern scaled
get_charinfo_vert_italic(charinfo
* ci
);
481 extern scaled
get_charinfo_top_accent(charinfo
* ci
);
482 extern scaled
get_charinfo_bot_accent(charinfo
* ci
);
483 extern char get_charinfo_tag(charinfo
* ci
);
484 extern int get_charinfo_remainder(charinfo
* ci
);
485 extern char get_charinfo_used(charinfo
* ci
);
486 extern int get_charinfo_index(charinfo
* ci
);
487 extern char *get_charinfo_name(charinfo
* ci
);
488 extern char *get_charinfo_tounicode(charinfo
* ci
);
489 extern liginfo
*get_charinfo_ligatures(charinfo
* ci
);
490 extern kerninfo
*get_charinfo_kerns(charinfo
* ci
);
491 extern eight_bits
*get_charinfo_packets(charinfo
* ci
);
492 extern int get_charinfo_ef(charinfo
* ci
);
493 extern int get_charinfo_rp(charinfo
* ci
);
494 extern int get_charinfo_lp(charinfo
* ci
);
495 extern int get_charinfo_extensible(charinfo
* ci
, int which
);
497 extern int ext_top(internal_font_number f
, int c
);
498 extern int ext_bot(internal_font_number f
, int c
);
499 extern int ext_rep(internal_font_number f
, int c
);
500 extern int ext_mid(internal_font_number f
, int c
);
502 # define set_ligature_item(f,b,c,d) { f.type = b; f.adj = c; f.lig = d; }
503 # define set_kern_item(f,b,c) { f.adj = b; f.sc = c; }
505 /* character information */
507 # define non_char 65536 /* a code that can't match a real character */
508 # define non_address 0 /* a spurious |bchar_label| */
510 /* character kerns and ligatures */
512 # define end_kern 0x7FFFFF /* otherchar value meaning "stop" */
513 # define ignored_kern 0x800000 /* otherchar value meaning "disabled" */
515 # define charinfo_kern(b,c) b->kerns[c]
517 # define kern_char(b) (b).adj
518 # define kern_kern(b) (b).sc
519 # define kern_end(b) ((b).adj == end_kern)
520 # define kern_disabled(b) ((b).adj > end_kern)
522 /* character ligatures */
524 # define end_ligature 0x7FFFFF /* otherchar value meaning "stop" */
525 # define ignored_ligature 0x800000 /* otherchar value meaning "disabled" */
527 # define charinfo_ligature(b,c) b->ligatures[c]
529 # define is_valid_ligature(a) ((a).type!=0)
530 # define lig_type(a) ((a).type>>1)
531 # define lig_char(a) (a).adj
532 # define lig_replacement(a) (a).lig
533 # define lig_end(a) (lig_char(a) == end_ligature)
534 # define lig_disabled(a) (lig_char(a) > end_ligature)
536 # define no_tag 0 /* vanilla character */
537 # define lig_tag 1 /* character has a ligature/kerning program */
538 # define list_tag 2 /* character has a successor in a charlist */
539 # define ext_tag 3 /* character is extensible */
541 extern scaled
char_height(internal_font_number f
, int c
);
542 extern scaled
calc_char_width(internal_font_number f
, int c
, int ex
);
543 extern scaled
char_width(internal_font_number f
, int c
);
544 extern scaled
char_depth(internal_font_number f
, int c
);
545 extern scaled
char_italic(internal_font_number f
, int c
);
546 extern scaled
char_vert_italic(internal_font_number f
, int c
);
547 extern scaled
char_top_accent(internal_font_number f
, int c
);
548 extern scaled
char_bot_accent(internal_font_number f
, int c
);
550 extern liginfo
*char_ligatures(internal_font_number f
, int c
);
551 extern kerninfo
*char_kerns(internal_font_number f
, int c
);
552 extern eight_bits
*char_packets(internal_font_number f
, int c
);
554 # define has_lig(f,b) (char_exists(f,b) &&( char_ligatures(f,b) != NULL))
555 # define has_kern(f,b) (char_exists(f,b) && (char_kerns(f,b) != NULL))
556 # define has_packet(f,b) (char_exists(f,b) && (char_packets(f,b) != NULL))
558 extern int char_remainder(internal_font_number f
, int c
);
559 extern char char_tag(internal_font_number f
, int c
);
560 extern char char_used(internal_font_number f
, int c
);
561 extern char *char_name(internal_font_number f
, int c
);
562 extern int char_index(internal_font_number f
, int c
);
564 scaled
raw_get_kern(internal_font_number f
, int lc
, int rc
);
565 scaled
get_kern(internal_font_number f
, int lc
, int rc
);
566 liginfo
get_ligature(internal_font_number f
, int lc
, int rc
);
573 extern texfont
**font_tables
;
576 extern void font_malloc_charinfo(internal_font_number f
, int num
);
577 int copy_font(int id
);
578 int scale_font(int id
, int atsize
);
579 int max_font_id(void);
580 void set_max_font_id(int id
);
581 int new_font_id(void);
582 void create_null_font(void);
583 void delete_font(int id
);
584 boolean
is_valid_font(int id
);
586 void dump_font(int font_number
);
587 void undump_font(int font_number
);
589 int test_no_ligatures(internal_font_number f
);
590 void set_no_ligatures(internal_font_number f
);
592 extern int get_tag_code(internal_font_number f
, int c
);
593 extern int get_lp_code(internal_font_number f
, int c
);
594 extern int get_rp_code(internal_font_number f
, int c
);
595 extern int get_ef_code(internal_font_number f
, int c
);
597 extern void set_tag_code(internal_font_number f
, int c
, int i
);
598 extern void set_lp_code(internal_font_number f
, int c
, int i
);
599 extern void set_rp_code(internal_font_number f
, int c
, int i
);
600 extern void set_ef_code(internal_font_number f
, int c
, int i
);
602 int read_tfm_info(internal_font_number f
, const char *nom
, scaled s
);
606 extern int read_font_info(pointer u
, char *cnom
, scaled s
, int ndir
);
607 extern int find_font_id(const char *nom
, scaled s
);
609 /* for and from vfpacket.c */
611 typedef enum { packet_char_code
,
625 } packet_command_codes
;
627 extern scaled
store_scaled_f(scaled sq
, int fw
);
629 extern void do_vf_packet(PDF pdf
, internal_font_number vf_f
, int c
, int ex
);
630 extern int vf_packet_bytes(charinfo
* co
);
632 extern charinfo
*copy_charinfo(charinfo
* ci
);
634 /* this function is in vfovf.c for the moment */
636 extern int make_vf_table(lua_State
* L
, const char *name
, scaled s
);
638 /* some bits of the old interface, used by e.g. writet3.c */
640 # define get_x_height(f) x_height(f)
641 # define get_quad(f) quad(f)
642 # define get_slant(f) slant(f)
643 # define get_charwidth(f,c) (char_exists(f,c) ? char_width(f,c) : 0)
644 # define get_charheight(f,c) (char_exists(f,c) ? char_height(f,c) : 0)
645 # define get_chardepth(f,c) (char_exists(f,c) ? char_depth(f,c) : 0)
647 extern int pk_dpi
; /* PK pixel density value from \.{texmf.cnf} */
649 extern internal_font_number
tfm_lookup(char *s
, scaled fs
);
651 extern int fix_expand_value(internal_font_number f
, int e
);
653 extern void set_expand_params(internal_font_number f
, boolean auto_expand
,
654 int stretch_limit
, int shrink_limit
,
657 extern void read_expand_font(void);
658 extern void new_letterspaced_font(small_number a
);
659 extern void make_font_copy(small_number a
);
661 extern void glyph_to_unicode(void);