xref: /inferno-os/libfreetype/pcf.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
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