[3019] | 1 | /* |
---|
| 2 | * see COPYRIGHT |
---|
| 3 | */ |
---|
| 4 | |
---|
| 5 | |
---|
| 6 | /* options */ |
---|
| 7 | |
---|
| 8 | extern int encode; /* encode the resulting file */ |
---|
| 9 | extern int pfbflag; /* produce compressed file */ |
---|
| 10 | extern int wantafm; /* want to see .afm instead of .t1a on stdout */ |
---|
| 11 | extern int correctvsize; /* try to correct the vertical size of characters */ |
---|
| 12 | extern int wantuid; /* user wants UniqueID entry in the font */ |
---|
| 13 | extern int allglyphs; /* convert all glyphs, not only 256 of them */ |
---|
| 14 | extern int warnlevel; /* the level of permitted warnings */ |
---|
| 15 | extern int forcemap; /* do mapping even on non-Unicode fonts */ |
---|
| 16 | /* options - maximal limits */ |
---|
| 17 | extern int max_stemdepth; /* maximal depth of stem stack in interpreter */ |
---|
| 18 | /* options - debugging */ |
---|
| 19 | extern int absolute; /* print out in absolute values */ |
---|
| 20 | extern int reverse; /* reverse font to Type1 path directions */ |
---|
| 21 | /* options - suboptions of Outline Processing */ |
---|
| 22 | extern int optimize; /* enables space optimization */ |
---|
| 23 | extern int smooth; /* enable smoothing of outlines */ |
---|
| 24 | extern int transform; /* enables transformation to 1000x1000 matrix */ |
---|
| 25 | extern int hints; /* enables autogeneration of hints */ |
---|
| 26 | extern int subhints; /* enables autogeneration of substituted hints */ |
---|
| 27 | extern int trybold; /* try to guess whether the font is bold */ |
---|
| 28 | extern int correctwidth; /* try to correct the character width */ |
---|
| 29 | extern int vectorize; /* vectorize the bitmaps */ |
---|
| 30 | extern int use_autotrace; /* use the autotrace library on bitmap */ |
---|
| 31 | /* options - suboptions of File Generation */ |
---|
| 32 | extern int gen_pfa; /* generate the font file */ |
---|
| 33 | extern int gen_afm; /* generate the metrics file */ |
---|
| 34 | extern int gen_dvienc; /* generate the dvips encoding file */ |
---|
| 35 | |
---|
| 36 | /* not quite options to select a particular source encoding */ |
---|
| 37 | extern int force_pid; /* specific platform id */ |
---|
| 38 | extern int force_eid; /* specific encoding id */ |
---|
| 39 | |
---|
| 40 | /* other globals */ |
---|
| 41 | extern FILE *null_file, *pfa_file, *afm_file, *ufm_file, *dvienc_file; |
---|
| 42 | extern int numglyphs; |
---|
| 43 | |
---|
| 44 | /* warnings */ |
---|
| 45 | |
---|
| 46 | #define WARNING_1 if(warnlevel >= 1) |
---|
| 47 | #define WARNING_2 if(warnlevel >= 2) |
---|
| 48 | #define WARNING_3 if(warnlevel >= 3) |
---|
| 49 | #define WARNING_4 if(warnlevel >= 4) |
---|
| 50 | |
---|
| 51 | /* |
---|
| 52 | * Bitmap control macros |
---|
| 53 | */ |
---|
| 54 | |
---|
| 55 | #define BITMAP_BYTES(size) (((size)+7)>>3) |
---|
| 56 | #define DEF_BITMAP(name, size) unsigned char name[BITMAP_BYTES(size)] |
---|
| 57 | #define SET_BITMAP(name, bit) ( name[(bit)>>3] |= (1<<((bit)&7)) ) |
---|
| 58 | #define CLR_BITMAP(name, bit) ( name[(bit)>>3] &= ~(1<<((bit)&7)) ) |
---|
| 59 | #define IS_BITMAP(name, bit) ( name[(bit)>>3] & (1<<((bit)&7)) ) |
---|
| 60 | |
---|
| 61 | /* debugging */ |
---|
| 62 | |
---|
| 63 | /* debug flags */ |
---|
| 64 | #define DEBUG_UNICODE 0x00000001 /* unicode to 8-bit code conversion */ |
---|
| 65 | #define DEBUG_MAINSTEMS 0x00000002 /* glyph-wide main stem generation */ |
---|
| 66 | #define DEBUG_SUBSTEMS 0x00000004 /* substituted stem generation */ |
---|
| 67 | #define DEBUG_STEMS (DEBUG_MAINSTEMS|DEBUG_SUBSTEMS) |
---|
| 68 | #define DEBUG_REVERSAL 0x00000008 /* reversal of the paths */ |
---|
| 69 | #define DEBUG_FIXCVDIR 0x00000010 /* fixcvdir() */ |
---|
| 70 | #define DEBUG_STEMOVERLAP 0x00000020 /* stemoverlap() */ |
---|
| 71 | #define DEBUG_BLUESTEMS 0x00000040 /* markbluestems() */ |
---|
| 72 | #define DEBUG_STRAIGHTEN 0x00000080 /* markbluestems() */ |
---|
| 73 | #define DEBUG_EXTMAP 0x00000100 /* parsing of external map */ |
---|
| 74 | #define DEBUG_TOINT 0x00000200 /* conversion of path to integer */ |
---|
| 75 | #define DEBUG_BUILDG 0x00000400 /* building of glyph path */ |
---|
| 76 | #define DEBUG_QUAD 0x00000800 /* splitting curves by quadrants */ |
---|
| 77 | #define DEBUG_SQEQ 0x00001000 /* square equation solver */ |
---|
| 78 | #define DEBUG_COMPOSITE 0x00002000 /* handling of composite glyphs */ |
---|
| 79 | #define DEBUG_FCONCISE 0x00004000 /* normalization of curves */ |
---|
| 80 | #define DEBUG_FT 0x00008000 /* FreeType front-end */ |
---|
| 81 | #define DEBUG_BITMAP 0x00010000 /* conversion from bitmap */ |
---|
| 82 | #define DEBUG_DISABLED 0x80000000 /* special flag: temporary disable debugging */ |
---|
| 83 | |
---|
| 84 | /* at what we want to look now */ |
---|
| 85 | #ifndef DEBUG |
---|
| 86 | # define DEBUG (0) |
---|
| 87 | #endif |
---|
| 88 | |
---|
| 89 | /* uncomment the next line if debugging data is wanted for one glyph only */ |
---|
| 90 | /* #define DBG_GLYPH "C118" /* */ |
---|
| 91 | |
---|
| 92 | #if DEBUG==0 |
---|
| 93 | # define ISDBG(name) (0) |
---|
| 94 | # define ENABLEDBG(condition) (0) |
---|
| 95 | # define DISABLEDBG(condition) (0) |
---|
| 96 | #else |
---|
| 97 | extern int debug; /* collection of the flags */ |
---|
| 98 | /* this ISDBG will only work on ANSI C, not K&R */ |
---|
| 99 | # define ISDBG(name) ( (debug & DEBUG_DISABLED) ? 0 : (debug & (DEBUG_##name)) ) |
---|
| 100 | # define ENABLEDBG(condition) ( (condition) ? (debug&=~DEBUG_DISABLED) : 0 ) |
---|
| 101 | # define DISABLEDBG(condition) ( (condition) ? (debug|=DEBUG_DISABLED) : 0 ) |
---|
| 102 | #endif |
---|
| 103 | |
---|
| 104 | #ifdef DBG_GLYPH |
---|
| 105 | # define DBG_TO_GLYPH(g) DISABLEDBG( strcmp( (g)->name, DBG_GLYPH ) ) |
---|
| 106 | # define DBG_FROM_GLYPH(g) ENABLEDBG(1) |
---|
| 107 | #else |
---|
| 108 | # define DBG_TO_GLYPH(g) (0) |
---|
| 109 | # define DBG_FROM_GLYPH(g) (0) |
---|
| 110 | #endif |
---|
| 111 | |
---|
| 112 | /* prototypes */ |
---|
| 113 | int iscale( int val); |
---|
| 114 | double fscale( double val); |
---|
| 115 | int unicode_rev_lookup( int unival); |
---|
| 116 | void bmp_outline( GLYPH *g, int scale, char *bmap, |
---|
| 117 | int xsz, int ysz, int xoff, int yoff); |
---|
| 118 | int isign( int x); |
---|
| 119 | int fsign( double x); |
---|
| 120 | char *dupcnstring( unsigned char *s, int len); |
---|
| 121 | |
---|
| 122 | /* global metrics for a font */ |
---|
| 123 | |
---|
| 124 | struct font_metrics { |
---|
| 125 | /* post */ |
---|
| 126 | double italic_angle; |
---|
| 127 | short underline_position; |
---|
| 128 | short underline_thickness; |
---|
| 129 | short is_fixed_pitch; |
---|
| 130 | |
---|
| 131 | /* hhea */ |
---|
| 132 | short ascender; |
---|
| 133 | short descender; |
---|
| 134 | |
---|
| 135 | /* head */ |
---|
| 136 | unsigned short units_per_em; |
---|
| 137 | short bbox[4]; |
---|
| 138 | |
---|
| 139 | /* name */ |
---|
| 140 | char *name_copyright; |
---|
| 141 | char *name_family; |
---|
| 142 | char *name_style; |
---|
| 143 | char *name_full; |
---|
| 144 | char *name_version; |
---|
| 145 | char *name_ps; |
---|
| 146 | |
---|
| 147 | /* other */ |
---|
| 148 | int force_bold; |
---|
| 149 | }; |
---|
| 150 | |
---|
| 151 | /* size of the encoding table - glyphs beyond 255 are actually unnumbered */ |
---|
| 152 | |
---|
| 153 | #define ENCTABSZ 1024 |
---|
| 154 | |
---|
| 155 | /* switch table structure for front-ends */ |
---|
| 156 | |
---|
| 157 | #define MAXSUFFIX 10 |
---|
| 158 | |
---|
| 159 | struct frontsw { |
---|
| 160 | char *name; /* name of the front end */ |
---|
| 161 | char *descr; /* description of the front end */ |
---|
| 162 | char *suffix[MAXSUFFIX]; /* possible file name suffixes */ |
---|
| 163 | |
---|
| 164 | void (*open)(char *fname, char *arg); /* open font file */ |
---|
| 165 | void (*close)(void); /* close font file */ |
---|
| 166 | int (*nglyphs)(void); /* get the number of glyphs */ |
---|
| 167 | int (*glnames)(GLYPH *glyphs); /* get the names of glyphs */ |
---|
| 168 | void (*glmetrics)(GLYPH *glyphs); /* get the metrics of glyphs */ |
---|
| 169 | int (*glenc)(GLYPH *glyphs, int *enc, int *unimap); /* get the encoding */ |
---|
| 170 | void (*fnmetrics)(struct font_metrics *fm); /* get the font metrics */ |
---|
| 171 | void (*glpath)(int glyphno, GLYPH *glyphs); /* get the glyph path */ |
---|
| 172 | void (*kerning)(GLYPH *glyph_list); /* extract the kerning data */ |
---|
| 173 | }; |
---|