pcf.h

Go to the documentation of this file.
00001 /*  pcf.h
00002 
00003   FreeType font driver for pcf fonts
00004 
00005   Copyright (C) 2000, 2001, 2002, 2003, 2006 by
00006   Francesco Zappa Nardelli
00007 
00008 Permission is hereby granted, free of charge, to any person obtaining a copy
00009 of this software and associated documentation files (the "Software"), to deal
00010 in the Software without restriction, including without limitation the rights
00011 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00012 copies of the Software, and to permit persons to whom the Software is
00013 furnished to do so, subject to the following conditions:
00014 
00015 The above copyright notice and this permission notice shall be included in
00016 all copies or substantial portions of the Software.
00017 
00018 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00019 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00020 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
00021 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00022 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00023 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00024 THE SOFTWARE.
00025 */
00026 
00027 
00028 #ifndef __PCF_H__
00029 #define __PCF_H__
00030 
00031 
00032 #include <ft2build.h>
00033 #include FT_INTERNAL_DRIVER_H
00034 #include FT_INTERNAL_STREAM_H
00035 
00036 
00037 FT_BEGIN_HEADER
00038 
00039   typedef struct  PCF_TableRec_
00040   {
00041     FT_ULong  type;
00042     FT_ULong  format;
00043     FT_ULong  size;
00044     FT_ULong  offset;
00045 
00046   } PCF_TableRec, *PCF_Table;
00047 
00048 
00049   typedef struct  PCF_TocRec_
00050   {
00051     FT_ULong   version;
00052     FT_ULong   count;
00053     PCF_Table  tables;
00054 
00055   } PCF_TocRec, *PCF_Toc;
00056 
00057 
00058   typedef struct  PCF_ParsePropertyRec_
00059   {
00060     FT_Long  name;
00061     FT_Byte  isString;
00062     FT_Long  value;
00063 
00064   } PCF_ParsePropertyRec, *PCF_ParseProperty;
00065 
00066 
00067   typedef struct  PCF_PropertyRec_
00068   {
00069     FT_String*  name;
00070     FT_Byte     isString;
00071 
00072     union
00073     {
00074       FT_String*  atom;
00075       FT_Long     l;
00076       FT_ULong    ul;
00077 
00078     } value;
00079 
00080   } PCF_PropertyRec, *PCF_Property;
00081 
00082 
00083   typedef struct  PCF_Compressed_MetricRec_
00084   {
00085     FT_Byte  leftSideBearing;
00086     FT_Byte  rightSideBearing;
00087     FT_Byte  characterWidth;
00088     FT_Byte  ascent;
00089     FT_Byte  descent;
00090 
00091   } PCF_Compressed_MetricRec, *PCF_Compressed_Metric;
00092 
00093 
00094   typedef struct  PCF_MetricRec_
00095   {
00096     FT_Short  leftSideBearing;
00097     FT_Short  rightSideBearing;
00098     FT_Short  characterWidth;
00099     FT_Short  ascent;
00100     FT_Short  descent;
00101     FT_Short  attributes;
00102     FT_ULong  bits;
00103 
00104   } PCF_MetricRec, *PCF_Metric;
00105 
00106 
00107   typedef struct  PCF_AccelRec_
00108   {
00109     FT_Byte        noOverlap;
00110     FT_Byte        constantMetrics;
00111     FT_Byte        terminalFont;
00112     FT_Byte        constantWidth;
00113     FT_Byte        inkInside;
00114     FT_Byte        inkMetrics;
00115     FT_Byte        drawDirection;
00116     FT_Long        fontAscent;
00117     FT_Long        fontDescent;
00118     FT_Long        maxOverlap;
00119     PCF_MetricRec  minbounds;
00120     PCF_MetricRec  maxbounds;
00121     PCF_MetricRec  ink_minbounds;
00122     PCF_MetricRec  ink_maxbounds;
00123 
00124   } PCF_AccelRec, *PCF_Accel;
00125 
00126 
00127   typedef struct  PCF_EncodingRec_
00128   {
00129     FT_Long    enc;
00130     FT_UShort  glyph;
00131 
00132   } PCF_EncodingRec, *PCF_Encoding;
00133 
00134 
00135   typedef struct  PCF_FaceRec_
00136   {
00137     FT_FaceRec     root;
00138 
00139     FT_StreamRec   gzip_stream;
00140     FT_Stream      gzip_source;
00141 
00142     char*          charset_encoding;
00143     char*          charset_registry;
00144 
00145     PCF_TocRec     toc;
00146     PCF_AccelRec   accel;
00147 
00148     int            nprops;
00149     PCF_Property   properties;
00150 
00151     FT_Long        nmetrics;
00152     PCF_Metric     metrics;
00153     FT_Long        nencodings;
00154     PCF_Encoding   encodings;
00155 
00156     FT_Short       defaultChar;
00157 
00158     FT_ULong       bitmapsFormat;
00159 
00160     FT_CharMap     charmap_handle;
00161     FT_CharMapRec  charmap;  /* a single charmap per face */
00162 
00163   } PCF_FaceRec, *PCF_Face;
00164 
00165 
00166   /* macros for pcf font format */
00167 
00168 #define LSBFirst  0
00169 #define MSBFirst  1
00170 
00171 #define PCF_FILE_VERSION        ( ( 'p' << 24 ) | \
00172                                   ( 'c' << 16 ) | \
00173                                   ( 'f' <<  8 ) | 1 )
00174 #define PCF_FORMAT_MASK         0xFFFFFF00UL
00175 
00176 #define PCF_DEFAULT_FORMAT      0x00000000UL
00177 #define PCF_INKBOUNDS           0x00000200UL
00178 #define PCF_ACCEL_W_INKBOUNDS   0x00000100UL
00179 #define PCF_COMPRESSED_METRICS  0x00000100UL
00180 
00181 #define PCF_FORMAT_MATCH( a, b ) \
00182           ( ( (a) & PCF_FORMAT_MASK ) == ( (b) & PCF_FORMAT_MASK ) )
00183 
00184 #define PCF_GLYPH_PAD_MASK  ( 3 << 0 )
00185 #define PCF_BYTE_MASK       ( 1 << 2 )
00186 #define PCF_BIT_MASK        ( 1 << 3 )
00187 #define PCF_SCAN_UNIT_MASK  ( 3 << 4 )
00188 
00189 #define PCF_BYTE_ORDER( f ) \
00190           ( ( (f) & PCF_BYTE_MASK ) ? MSBFirst : LSBFirst )
00191 #define PCF_BIT_ORDER( f ) \
00192           ( ( (f) & PCF_BIT_MASK ) ? MSBFirst : LSBFirst )
00193 #define PCF_GLYPH_PAD_INDEX( f ) \
00194           ( (f) & PCF_GLYPH_PAD_MASK )
00195 #define PCF_GLYPH_PAD( f ) \
00196           ( 1 << PCF_GLYPH_PAD_INDEX( f ) )
00197 #define PCF_SCAN_UNIT_INDEX( f ) \
00198           ( ( (f) & PCF_SCAN_UNIT_MASK ) >> 4 )
00199 #define PCF_SCAN_UNIT( f ) \
00200           ( 1 << PCF_SCAN_UNIT_INDEX( f ) )
00201 #define PCF_FORMAT_BITS( f )             \
00202           ( (f) & ( PCF_GLYPH_PAD_MASK | \
00203                     PCF_BYTE_MASK      | \
00204                     PCF_BIT_MASK       | \
00205                     PCF_SCAN_UNIT_MASK ) )
00206 
00207 #define PCF_SIZE_TO_INDEX( s )  ( (s) == 4 ? 2 : (s) == 2 ? 1 : 0 )
00208 #define PCF_INDEX_TO_SIZE( b )  ( 1 << b )
00209 
00210 #define PCF_FORMAT( bit, byte, glyph, scan )          \
00211           ( ( PCF_SIZE_TO_INDEX( scan )      << 4 ) | \
00212             ( ( (bit)  == MSBFirst ? 1 : 0 ) << 3 ) | \
00213             ( ( (byte) == MSBFirst ? 1 : 0 ) << 2 ) | \
00214             ( PCF_SIZE_TO_INDEX( glyph )     << 0 ) )
00215 
00216 #define PCF_PROPERTIES        ( 1 << 0 )
00217 #define PCF_ACCELERATORS      ( 1 << 1 )
00218 #define PCF_METRICS           ( 1 << 2 )
00219 #define PCF_BITMAPS           ( 1 << 3 )
00220 #define PCF_INK_METRICS       ( 1 << 4 )
00221 #define PCF_BDF_ENCODINGS     ( 1 << 5 )
00222 #define PCF_SWIDTHS           ( 1 << 6 )
00223 #define PCF_GLYPH_NAMES       ( 1 << 7 )
00224 #define PCF_BDF_ACCELERATORS  ( 1 << 8 )
00225 
00226 #define GLYPHPADOPTIONS  4 /* I'm not sure about this */
00227 
00228   FT_LOCAL( FT_Error )
00229   pcf_load_font( FT_Stream,
00230                  PCF_Face );
00231 
00232 FT_END_HEADER
00233 
00234 #endif /* __PCF_H__ */
00235 
00236 
00237 /* END */

Generated on Tue Jul 5 14:13:48 2011 for ROOT_528-00b_version by  doxygen 1.5.1