blob: d9a0c78953bf88902cf2b08812f4d6f718aa2087 [file] [log] [blame]
/****************************************************************************
*
* pfrtypes.h
*
* FreeType PFR data structures (specification only).
*
* Copyright (C) 2002-2022 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 <freetype/internal/ftobjs.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 */
#define PFR_FLAG_BLACK_PIXEL 0x01U
#define PFR_FLAG_INVERT_BITMAP 0x02U
/************************************************************************/
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;
#define PFR_LINE_JOIN_MITER 0x00U
#define PFR_LINE_JOIN_ROUND 0x01U
#define PFR_LINE_JOIN_BEVEL 0x02U
#define PFR_LINE_JOIN_MASK ( PFR_LINE_JOIN_ROUND | PFR_LINE_JOIN_BEVEL )
#define PFR_LOG_STROKE 0x04U
#define PFR_LOG_2BYTE_STROKE 0x08U
#define PFR_LOG_BOLD 0x10U
#define PFR_LOG_2BYTE_BOLD 0x20U
#define PFR_LOG_EXTRA_ITEMS 0x40U
/************************************************************************/
#define PFR_BITMAP_2BYTE_CHARCODE 0x01U
#define PFR_BITMAP_2BYTE_SIZE 0x02U
#define PFR_BITMAP_3BYTE_OFFSET 0x04U
/* not part of the specification but used for implementation */
#define PFR_BITMAP_CHARCODES_VALIDATED 0x40U
#define PFR_BITMAP_VALID_CHARCODES 0x80U
typedef struct PFR_BitmapCharRec_
{
FT_UInt char_code;
FT_UInt gps_size;
FT_UInt32 gps_offset;
} PFR_BitmapCharRec, *PFR_BitmapChar;
#define PFR_STRIKE_2BYTE_XPPM 0x01U
#define PFR_STRIKE_2BYTE_YPPM 0x02U
#define PFR_STRIKE_3BYTE_SIZE 0x04U
#define PFR_STRIKE_3BYTE_OFFSET 0x08U
#define PFR_STRIKE_2BYTE_COUNT 0x10U
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;
#define PFR_PHY_VERTICAL 0x01U
#define PFR_PHY_2BYTE_CHARCODE 0x02U
#define PFR_PHY_PROPORTIONAL 0x04U
#define PFR_PHY_ASCII_CODE 0x08U
#define PFR_PHY_2BYTE_GPS_SIZE 0x10U
#define PFR_PHY_3BYTE_GPS_OFFSET 0x20U
#define PFR_PHY_EXTRA_ITEMS 0x80U
#define PFR_KERN_2BYTE_CHAR 0x01U
#define PFR_KERN_2BYTE_ADJ 0x02U
/************************************************************************/
#define PFR_GLYPH_YCOUNT 0x01U
#define PFR_GLYPH_XCOUNT 0x02U
#define PFR_GLYPH_1BYTE_XYCOUNT 0x04U
#define PFR_GLYPH_SINGLE_EXTRA_ITEMS 0x08U
#define PFR_GLYPH_COMPOUND_EXTRA_ITEMS 0x40U
#define PFR_GLYPH_IS_COMPOUND 0x80U
/* 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;
#define PFR_SUBGLYPH_XSCALE 0x10U
#define PFR_SUBGLYPH_YSCALE 0x20U
#define PFR_SUBGLYPH_2BYTE_SIZE 0x40U
#define PFR_SUBGLYPH_3BYTE_OFFSET 0x80U
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 */