/***************************************************************************/ | |
/* */ | |
/* pfrtypes.h */ | |
/* */ | |
/* FreeType PFR data structures (specification only). */ | |
/* */ | |
/* Copyright 2002-2015 by */ | |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ | |
/* */ | |
/* This file is part of the FreeType project, and may only be used, */ | |
/* modified, and distributed under the terms of the FreeType project */ | |
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ | |
/* this file you indicate that you have read the license and */ | |
/* understand and accept it fully. */ | |
/* */ | |
/***************************************************************************/ | |
#ifndef __PFRTYPES_H__ | |
#define __PFRTYPES_H__ | |
#include <ft2build.h> | |
#include FT_INTERNAL_OBJECTS_H | |
FT_BEGIN_HEADER | |
/************************************************************************/ | |
/* the PFR Header structure */ | |
typedef struct PFR_HeaderRec_ | |
{ | |
FT_UInt32 signature; | |
FT_UInt version; | |
FT_UInt signature2; | |
FT_UInt header_size; | |
FT_UInt log_dir_size; | |
FT_UInt log_dir_offset; | |
FT_UInt log_font_max_size; | |
FT_UInt32 log_font_section_size; | |
FT_UInt32 log_font_section_offset; | |
FT_UInt32 phy_font_max_size; | |
FT_UInt32 phy_font_section_size; | |
FT_UInt32 phy_font_section_offset; | |
FT_UInt gps_max_size; | |
FT_UInt32 gps_section_size; | |
FT_UInt32 gps_section_offset; | |
FT_UInt max_blue_values; | |
FT_UInt max_x_orus; | |
FT_UInt max_y_orus; | |
FT_UInt phy_font_max_size_high; | |
FT_UInt color_flags; | |
FT_UInt32 bct_max_size; | |
FT_UInt32 bct_set_max_size; | |
FT_UInt32 phy_bct_set_max_size; | |
FT_UInt num_phy_fonts; | |
FT_UInt max_vert_stem_snap; | |
FT_UInt max_horz_stem_snap; | |
FT_UInt max_chars; | |
} PFR_HeaderRec, *PFR_Header; | |
/* used in `color_flags' field of the PFR_Header */ | |
typedef enum PFR_HeaderFlags_ | |
{ | |
PFR_FLAG_BLACK_PIXEL = 1, | |
PFR_FLAG_INVERT_BITMAP = 2 | |
} PFR_HeaderFlags; | |
/************************************************************************/ | |
typedef struct PFR_LogFontRec_ | |
{ | |
FT_UInt32 size; | |
FT_UInt32 offset; | |
FT_Int32 matrix[4]; | |
FT_UInt stroke_flags; | |
FT_Int stroke_thickness; | |
FT_Int bold_thickness; | |
FT_Int32 miter_limit; | |
FT_UInt32 phys_size; | |
FT_UInt32 phys_offset; | |
} PFR_LogFontRec, *PFR_LogFont; | |
typedef enum PFR_LogFlags_ | |
{ | |
PFR_LOG_EXTRA_ITEMS = 0x40, | |
PFR_LOG_2BYTE_BOLD = 0x20, | |
PFR_LOG_BOLD = 0x10, | |
PFR_LOG_2BYTE_STROKE = 8, | |
PFR_LOG_STROKE = 4, | |
PFR_LINE_JOIN_MASK = 3 | |
} PFR_LogFlags; | |
typedef enum PFR_LineJoinFlags_ | |
{ | |
PFR_LINE_JOIN_MITER = 0, | |
PFR_LINE_JOIN_ROUND = 1, | |
PFR_LINE_JOIN_BEVEL = 2 | |
} PFR_LineJoinFlags; | |
/************************************************************************/ | |
typedef enum PFR_BitmapFlags_ | |
{ | |
PFR_BITMAP_3BYTE_OFFSET = 4, | |
PFR_BITMAP_2BYTE_SIZE = 2, | |
PFR_BITMAP_2BYTE_CHARCODE = 1 | |
} PFR_BitmapFlags; | |
typedef struct PFR_BitmapCharRec_ | |
{ | |
FT_UInt char_code; | |
FT_UInt gps_size; | |
FT_UInt32 gps_offset; | |
} PFR_BitmapCharRec, *PFR_BitmapChar; | |
typedef enum PFR_StrikeFlags_ | |
{ | |
PFR_STRIKE_2BYTE_COUNT = 0x10, | |
PFR_STRIKE_3BYTE_OFFSET = 0x08, | |
PFR_STRIKE_3BYTE_SIZE = 0x04, | |
PFR_STRIKE_2BYTE_YPPM = 0x02, | |
PFR_STRIKE_2BYTE_XPPM = 0x01 | |
} PFR_StrikeFlags; | |
typedef struct PFR_StrikeRec_ | |
{ | |
FT_UInt x_ppm; | |
FT_UInt y_ppm; | |
FT_UInt flags; | |
FT_UInt32 gps_size; | |
FT_UInt32 gps_offset; | |
FT_UInt32 bct_size; | |
FT_UInt32 bct_offset; | |
/* optional */ | |
FT_UInt num_bitmaps; | |
PFR_BitmapChar bitmaps; | |
} PFR_StrikeRec, *PFR_Strike; | |
/************************************************************************/ | |
typedef struct PFR_CharRec_ | |
{ | |
FT_UInt char_code; | |
FT_Int advance; | |
FT_UInt gps_size; | |
FT_UInt32 gps_offset; | |
} PFR_CharRec, *PFR_Char; | |
/************************************************************************/ | |
typedef struct PFR_DimensionRec_ | |
{ | |
FT_UInt standard; | |
FT_UInt num_stem_snaps; | |
FT_Int* stem_snaps; | |
} PFR_DimensionRec, *PFR_Dimension; | |
/************************************************************************/ | |
typedef struct PFR_KernItemRec_* PFR_KernItem; | |
typedef struct PFR_KernItemRec_ | |
{ | |
PFR_KernItem next; | |
FT_Byte pair_count; | |
FT_Byte flags; | |
FT_Short base_adj; | |
FT_UInt pair_size; | |
FT_Offset offset; | |
FT_UInt32 pair1; | |
FT_UInt32 pair2; | |
} PFR_KernItemRec; | |
#define PFR_KERN_INDEX( g1, g2 ) \ | |
( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) ) | |
#define PFR_KERN_PAIR_INDEX( pair ) \ | |
PFR_KERN_INDEX( (pair)->glyph1, (pair)->glyph2 ) | |
#define PFR_NEXT_KPAIR( p ) ( p += 2, \ | |
( (FT_UInt32)p[-2] << 16 ) | p[-1] ) | |
/************************************************************************/ | |
typedef struct PFR_PhyFontRec_ | |
{ | |
FT_Memory memory; | |
FT_UInt32 offset; | |
FT_UInt font_ref_number; | |
FT_UInt outline_resolution; | |
FT_UInt metrics_resolution; | |
FT_BBox bbox; | |
FT_UInt flags; | |
FT_Int standard_advance; | |
FT_Int ascent; /* optional, bbox.yMax if not present */ | |
FT_Int descent; /* optional, bbox.yMin if not present */ | |
FT_Int leading; /* optional, 0 if not present */ | |
PFR_DimensionRec horizontal; | |
PFR_DimensionRec vertical; | |
FT_String* font_id; | |
FT_String* family_name; | |
FT_String* style_name; | |
FT_UInt num_strikes; | |
FT_UInt max_strikes; | |
PFR_StrikeRec* strikes; | |
FT_UInt num_blue_values; | |
FT_Int *blue_values; | |
FT_UInt blue_fuzz; | |
FT_UInt blue_scale; | |
FT_UInt num_chars; | |
FT_Offset chars_offset; | |
PFR_Char chars; | |
FT_UInt num_kern_pairs; | |
PFR_KernItem kern_items; | |
PFR_KernItem* kern_items_tail; | |
/* not part of the spec, but used during load */ | |
FT_ULong bct_offset; | |
FT_Byte* cursor; | |
} PFR_PhyFontRec, *PFR_PhyFont; | |
typedef enum PFR_PhyFlags_ | |
{ | |
PFR_PHY_EXTRA_ITEMS = 0x80, | |
PFR_PHY_3BYTE_GPS_OFFSET = 0x20, | |
PFR_PHY_2BYTE_GPS_SIZE = 0x10, | |
PFR_PHY_ASCII_CODE = 0x08, | |
PFR_PHY_PROPORTIONAL = 0x04, | |
PFR_PHY_2BYTE_CHARCODE = 0x02, | |
PFR_PHY_VERTICAL = 0x01 | |
} PFR_PhyFlags; | |
typedef enum PFR_KernFlags_ | |
{ | |
PFR_KERN_2BYTE_CHAR = 0x01, | |
PFR_KERN_2BYTE_ADJ = 0x02 | |
} PFR_KernFlags; | |
/************************************************************************/ | |
typedef enum PFR_GlyphFlags_ | |
{ | |
PFR_GLYPH_IS_COMPOUND = 0x80, | |
PFR_GLYPH_EXTRA_ITEMS = 0x08, | |
PFR_GLYPH_1BYTE_XYCOUNT = 0x04, | |
PFR_GLYPH_XCOUNT = 0x02, | |
PFR_GLYPH_YCOUNT = 0x01 | |
} PFR_GlyphFlags; | |
/* controlled coordinate */ | |
typedef struct PFR_CoordRec_ | |
{ | |
FT_UInt org; | |
FT_UInt cur; | |
} PFR_CoordRec, *PFR_Coord; | |
typedef struct PFR_SubGlyphRec_ | |
{ | |
FT_Fixed x_scale; | |
FT_Fixed y_scale; | |
FT_Int x_delta; | |
FT_Int y_delta; | |
FT_UInt32 gps_offset; | |
FT_UInt gps_size; | |
} PFR_SubGlyphRec, *PFR_SubGlyph; | |
typedef enum PFR_SubgGlyphFlags_ | |
{ | |
PFR_SUBGLYPH_3BYTE_OFFSET = 0x80, | |
PFR_SUBGLYPH_2BYTE_SIZE = 0x40, | |
PFR_SUBGLYPH_YSCALE = 0x20, | |
PFR_SUBGLYPH_XSCALE = 0x10 | |
} PFR_SubGlyphFlags; | |
typedef struct PFR_GlyphRec_ | |
{ | |
FT_Byte format; | |
#if 0 | |
FT_UInt num_x_control; | |
FT_UInt num_y_control; | |
#endif | |
FT_UInt max_xy_control; | |
FT_Pos* x_control; | |
FT_Pos* y_control; | |
FT_UInt num_subs; | |
FT_UInt max_subs; | |
PFR_SubGlyphRec* subs; | |
FT_GlyphLoader loader; | |
FT_Bool path_begun; | |
} PFR_GlyphRec, *PFR_Glyph; | |
FT_END_HEADER | |
#endif /* __PFRTYPES_H__ */ | |
/* END */ |