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, *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 }; 174