1*37da2899SCharles.Forsyth /* pcf.h 2*37da2899SCharles.Forsyth 3*37da2899SCharles.Forsyth FreeType font driver for pcf fonts 4*37da2899SCharles.Forsyth 5*37da2899SCharles.Forsyth Copyright (C) 2000-2001, 2002 by 6*37da2899SCharles.Forsyth Francesco Zappa Nardelli 7*37da2899SCharles.Forsyth 8*37da2899SCharles.Forsyth Permission is hereby granted, free of charge, to any person obtaining a copy 9*37da2899SCharles.Forsyth of this software and associated documentation files (the "Software"), to deal 10*37da2899SCharles.Forsyth in the Software without restriction, including without limitation the rights 11*37da2899SCharles.Forsyth to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12*37da2899SCharles.Forsyth copies of the Software, and to permit persons to whom the Software is 13*37da2899SCharles.Forsyth furnished to do so, subject to the following conditions: 14*37da2899SCharles.Forsyth 15*37da2899SCharles.Forsyth The above copyright notice and this permission notice shall be included in 16*37da2899SCharles.Forsyth all copies or substantial portions of the Software. 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19*37da2899SCharles.Forsyth IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20*37da2899SCharles.Forsyth FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21*37da2899SCharles.Forsyth AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22*37da2899SCharles.Forsyth LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23*37da2899SCharles.Forsyth OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24*37da2899SCharles.Forsyth THE SOFTWARE. 25*37da2899SCharles.Forsyth */ 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsyth #ifndef __PCF_H__ 29*37da2899SCharles.Forsyth #define __PCF_H__ 30*37da2899SCharles.Forsyth 31*37da2899SCharles.Forsyth 32*37da2899SCharles.Forsyth #include <ft2build.h> 33*37da2899SCharles.Forsyth #include FT_INTERNAL_DRIVER_H 34*37da2899SCharles.Forsyth #include FT_INTERNAL_STREAM_H 35*37da2899SCharles.Forsyth 36*37da2899SCharles.Forsyth 37*37da2899SCharles.Forsyth FT_BEGIN_HEADER 38*37da2899SCharles.Forsyth 39*37da2899SCharles.Forsyth typedef struct PCF_TableRec_ 40*37da2899SCharles.Forsyth { 41*37da2899SCharles.Forsyth FT_ULong type; 42*37da2899SCharles.Forsyth FT_ULong format; 43*37da2899SCharles.Forsyth FT_ULong size; 44*37da2899SCharles.Forsyth FT_ULong offset; 45*37da2899SCharles.Forsyth 46*37da2899SCharles.Forsyth } PCF_TableRec, *PCF_Table; 47*37da2899SCharles.Forsyth 48*37da2899SCharles.Forsyth 49*37da2899SCharles.Forsyth typedef struct PCF_TocRec_ 50*37da2899SCharles.Forsyth { 51*37da2899SCharles.Forsyth FT_ULong version; 52*37da2899SCharles.Forsyth FT_ULong count; 53*37da2899SCharles.Forsyth PCF_Table tables; 54*37da2899SCharles.Forsyth 55*37da2899SCharles.Forsyth } PCF_TocRec, *PCF_Toc; 56*37da2899SCharles.Forsyth 57*37da2899SCharles.Forsyth 58*37da2899SCharles.Forsyth typedef struct PCF_ParsePropertyRec_ 59*37da2899SCharles.Forsyth { 60*37da2899SCharles.Forsyth FT_Long name; 61*37da2899SCharles.Forsyth FT_Byte isString; 62*37da2899SCharles.Forsyth FT_Long value; 63*37da2899SCharles.Forsyth 64*37da2899SCharles.Forsyth } PCF_ParsePropertyRec, *PCF_ParseProperty; 65*37da2899SCharles.Forsyth 66*37da2899SCharles.Forsyth 67*37da2899SCharles.Forsyth typedef struct PCF_PropertyRec_ 68*37da2899SCharles.Forsyth { 69*37da2899SCharles.Forsyth FT_String* name; 70*37da2899SCharles.Forsyth FT_Byte isString; 71*37da2899SCharles.Forsyth 72*37da2899SCharles.Forsyth union 73*37da2899SCharles.Forsyth { 74*37da2899SCharles.Forsyth FT_String* atom; 75*37da2899SCharles.Forsyth FT_Long integer; 76*37da2899SCharles.Forsyth FT_ULong cardinal; 77*37da2899SCharles.Forsyth 78*37da2899SCharles.Forsyth } value; 79*37da2899SCharles.Forsyth 80*37da2899SCharles.Forsyth } PCF_PropertyRec, *PCF_Property; 81*37da2899SCharles.Forsyth 82*37da2899SCharles.Forsyth 83*37da2899SCharles.Forsyth typedef struct PCF_Compressed_MetricRec_ 84*37da2899SCharles.Forsyth { 85*37da2899SCharles.Forsyth FT_Byte leftSideBearing; 86*37da2899SCharles.Forsyth FT_Byte rightSideBearing; 87*37da2899SCharles.Forsyth FT_Byte characterWidth; 88*37da2899SCharles.Forsyth FT_Byte ascent; 89*37da2899SCharles.Forsyth FT_Byte descent; 90*37da2899SCharles.Forsyth 91*37da2899SCharles.Forsyth } PCF_Compressed_MetricRec, *PCF_Compressed_Metric; 92*37da2899SCharles.Forsyth 93*37da2899SCharles.Forsyth 94*37da2899SCharles.Forsyth typedef struct PCF_MetricRec_ 95*37da2899SCharles.Forsyth { 96*37da2899SCharles.Forsyth FT_Short leftSideBearing; 97*37da2899SCharles.Forsyth FT_Short rightSideBearing; 98*37da2899SCharles.Forsyth FT_Short characterWidth; 99*37da2899SCharles.Forsyth FT_Short ascent; 100*37da2899SCharles.Forsyth FT_Short descent; 101*37da2899SCharles.Forsyth FT_Short attributes; 102*37da2899SCharles.Forsyth FT_ULong bits; 103*37da2899SCharles.Forsyth 104*37da2899SCharles.Forsyth } PCF_MetricRec, *PCF_Metric; 105*37da2899SCharles.Forsyth 106*37da2899SCharles.Forsyth 107*37da2899SCharles.Forsyth typedef struct PCF_AccelRec_ 108*37da2899SCharles.Forsyth { 109*37da2899SCharles.Forsyth FT_Byte noOverlap; 110*37da2899SCharles.Forsyth FT_Byte constantMetrics; 111*37da2899SCharles.Forsyth FT_Byte terminalFont; 112*37da2899SCharles.Forsyth FT_Byte constantWidth; 113*37da2899SCharles.Forsyth FT_Byte inkInside; 114*37da2899SCharles.Forsyth FT_Byte inkMetrics; 115*37da2899SCharles.Forsyth FT_Byte drawDirection; 116*37da2899SCharles.Forsyth FT_Long fontAscent; 117*37da2899SCharles.Forsyth FT_Long fontDescent; 118*37da2899SCharles.Forsyth FT_Long maxOverlap; 119*37da2899SCharles.Forsyth PCF_MetricRec minbounds; 120*37da2899SCharles.Forsyth PCF_MetricRec maxbounds; 121*37da2899SCharles.Forsyth PCF_MetricRec ink_minbounds; 122*37da2899SCharles.Forsyth PCF_MetricRec ink_maxbounds; 123*37da2899SCharles.Forsyth 124*37da2899SCharles.Forsyth } PCF_AccelRec, *PCF_Accel; 125*37da2899SCharles.Forsyth 126*37da2899SCharles.Forsyth 127*37da2899SCharles.Forsyth typedef struct PCD_EncodingRec_ 128*37da2899SCharles.Forsyth { 129*37da2899SCharles.Forsyth FT_Long enc; 130*37da2899SCharles.Forsyth FT_Short glyph; 131*37da2899SCharles.Forsyth 132*37da2899SCharles.Forsyth } PCF_EncodingRec, *PCF_Encoding; 133*37da2899SCharles.Forsyth 134*37da2899SCharles.Forsyth 135*37da2899SCharles.Forsyth typedef struct PCF_FaceRec_ 136*37da2899SCharles.Forsyth { 137*37da2899SCharles.Forsyth FT_FaceRec root; 138*37da2899SCharles.Forsyth 139*37da2899SCharles.Forsyth FT_StreamRec gzip_stream; 140*37da2899SCharles.Forsyth FT_Stream gzip_source; 141*37da2899SCharles.Forsyth 142*37da2899SCharles.Forsyth char* charset_encoding; 143*37da2899SCharles.Forsyth char* charset_registry; 144*37da2899SCharles.Forsyth 145*37da2899SCharles.Forsyth PCF_TocRec toc; 146*37da2899SCharles.Forsyth PCF_AccelRec accel; 147*37da2899SCharles.Forsyth 148*37da2899SCharles.Forsyth int nprops; 149*37da2899SCharles.Forsyth PCF_Property properties; 150*37da2899SCharles.Forsyth 151*37da2899SCharles.Forsyth FT_Long nmetrics; 152*37da2899SCharles.Forsyth PCF_Metric metrics; 153*37da2899SCharles.Forsyth FT_Long nencodings; 154*37da2899SCharles.Forsyth PCF_Encoding encodings; 155*37da2899SCharles.Forsyth 156*37da2899SCharles.Forsyth FT_Short defaultChar; 157*37da2899SCharles.Forsyth 158*37da2899SCharles.Forsyth FT_ULong bitmapsFormat; 159*37da2899SCharles.Forsyth 160*37da2899SCharles.Forsyth FT_CharMap charmap_handle; 161*37da2899SCharles.Forsyth FT_CharMapRec charmap; /* a single charmap per face */ 162*37da2899SCharles.Forsyth 163*37da2899SCharles.Forsyth } PCF_FaceRec, *PCF_Face; 164*37da2899SCharles.Forsyth 165*37da2899SCharles.Forsyth 166*37da2899SCharles.Forsyth /* macros for pcf font format */ 167*37da2899SCharles.Forsyth 168*37da2899SCharles.Forsyth #define LSBFirst 0 169*37da2899SCharles.Forsyth #define MSBFirst 1 170*37da2899SCharles.Forsyth 171*37da2899SCharles.Forsyth #define PCF_FILE_VERSION ( ( 'p' << 24 ) | \ 172*37da2899SCharles.Forsyth ( 'c' << 16 ) | \ 173*37da2899SCharles.Forsyth ( 'f' << 8 ) | 1 ) 174*37da2899SCharles.Forsyth #define PCF_FORMAT_MASK 0xFFFFFF00L 175*37da2899SCharles.Forsyth 176*37da2899SCharles.Forsyth #define PCF_DEFAULT_FORMAT 0x00000000L 177*37da2899SCharles.Forsyth #define PCF_INKBOUNDS 0x00000200L 178*37da2899SCharles.Forsyth #define PCF_ACCEL_W_INKBOUNDS 0x00000100L 179*37da2899SCharles.Forsyth #define PCF_COMPRESSED_METRICS 0x00000100L 180*37da2899SCharles.Forsyth 181*37da2899SCharles.Forsyth #define PCF_FORMAT_MATCH( a, b ) \ 182*37da2899SCharles.Forsyth ( ( (a) & PCF_FORMAT_MASK ) == ( (b) & PCF_FORMAT_MASK ) ) 183*37da2899SCharles.Forsyth 184*37da2899SCharles.Forsyth #define PCF_GLYPH_PAD_MASK ( 3 << 0 ) 185*37da2899SCharles.Forsyth #define PCF_BYTE_MASK ( 1 << 2 ) 186*37da2899SCharles.Forsyth #define PCF_BIT_MASK ( 1 << 3 ) 187*37da2899SCharles.Forsyth #define PCF_SCAN_UNIT_MASK ( 3 << 4 ) 188*37da2899SCharles.Forsyth 189*37da2899SCharles.Forsyth #define PCF_BYTE_ORDER( f ) \ 190*37da2899SCharles.Forsyth ( ( (f) & PCF_BYTE_MASK ) ? MSBFirst : LSBFirst ) 191*37da2899SCharles.Forsyth #define PCF_BIT_ORDER( f ) \ 192*37da2899SCharles.Forsyth ( ( (f) & PCF_BIT_MASK ) ? MSBFirst : LSBFirst ) 193*37da2899SCharles.Forsyth #define PCF_GLYPH_PAD_INDEX( f ) \ 194*37da2899SCharles.Forsyth ( (f) & PCF_GLYPH_PAD_MASK ) 195*37da2899SCharles.Forsyth #define PCF_GLYPH_PAD( f ) \ 196*37da2899SCharles.Forsyth ( 1 << PCF_GLYPH_PAD_INDEX( f ) ) 197*37da2899SCharles.Forsyth #define PCF_SCAN_UNIT_INDEX( f ) \ 198*37da2899SCharles.Forsyth ( ( (f) & PCF_SCAN_UNIT_MASK ) >> 4 ) 199*37da2899SCharles.Forsyth #define PCF_SCAN_UNIT( f ) \ 200*37da2899SCharles.Forsyth ( 1 << PCF_SCAN_UNIT_INDEX( f ) ) 201*37da2899SCharles.Forsyth #define PCF_FORMAT_BITS( f ) \ 202*37da2899SCharles.Forsyth ( (f) & ( PCF_GLYPH_PAD_MASK | \ 203*37da2899SCharles.Forsyth PCF_BYTE_MASK | \ 204*37da2899SCharles.Forsyth PCF_BIT_MASK | \ 205*37da2899SCharles.Forsyth PCF_SCAN_UNIT_MASK ) ) 206*37da2899SCharles.Forsyth 207*37da2899SCharles.Forsyth #define PCF_SIZE_TO_INDEX( s ) ( (s) == 4 ? 2 : (s) == 2 ? 1 : 0 ) 208*37da2899SCharles.Forsyth #define PCF_INDEX_TO_SIZE( b ) ( 1 << b ) 209*37da2899SCharles.Forsyth 210*37da2899SCharles.Forsyth #define PCF_FORMAT( bit, byte, glyph, scan ) \ 211*37da2899SCharles.Forsyth ( ( PCF_SIZE_TO_INDEX( scan ) << 4 ) | \ 212*37da2899SCharles.Forsyth ( ( (bit) == MSBFirst ? 1 : 0 ) << 3 ) | \ 213*37da2899SCharles.Forsyth ( ( (byte) == MSBFirst ? 1 : 0 ) << 2 ) | \ 214*37da2899SCharles.Forsyth ( PCF_SIZE_TO_INDEX( glyph ) << 0 ) ) 215*37da2899SCharles.Forsyth 216*37da2899SCharles.Forsyth #define PCF_PROPERTIES ( 1 << 0 ) 217*37da2899SCharles.Forsyth #define PCF_ACCELERATORS ( 1 << 1 ) 218*37da2899SCharles.Forsyth #define PCF_METRICS ( 1 << 2 ) 219*37da2899SCharles.Forsyth #define PCF_BITMAPS ( 1 << 3 ) 220*37da2899SCharles.Forsyth #define PCF_INK_METRICS ( 1 << 4 ) 221*37da2899SCharles.Forsyth #define PCF_BDF_ENCODINGS ( 1 << 5 ) 222*37da2899SCharles.Forsyth #define PCF_SWIDTHS ( 1 << 6 ) 223*37da2899SCharles.Forsyth #define PCF_GLYPH_NAMES ( 1 << 7 ) 224*37da2899SCharles.Forsyth #define PCF_BDF_ACCELERATORS ( 1 << 8 ) 225*37da2899SCharles.Forsyth 226*37da2899SCharles.Forsyth #define GLYPHPADOPTIONS 4 /* I'm not sure about this */ 227*37da2899SCharles.Forsyth 228*37da2899SCharles.Forsyth FT_LOCAL( FT_Error ) 229*37da2899SCharles.Forsyth pcf_load_font( FT_Stream, 230*37da2899SCharles.Forsyth PCF_Face ); 231*37da2899SCharles.Forsyth 232*37da2899SCharles.Forsyth 233*37da2899SCharles.Forsyth FT_END_HEADER 234*37da2899SCharles.Forsyth 235*37da2899SCharles.Forsyth #endif /* __PCF_H__ */ 236*37da2899SCharles.Forsyth 237*37da2899SCharles.Forsyth 238*37da2899SCharles.Forsyth /* END */ 239