1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* pshrec.h */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Postscript (Type1/Type2) hints recorder (specification). */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 2001, 2002, 2003, 2006, 2008 by */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**************************************************************************/ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The functions defined here are called from the Type 1, CID and CFF */ 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font drivers to record the hints of a given character/glyph. */ 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The hints are recorded in a unified format, and are later processed */ 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* by the `optimizer' and `fitter' to adjust the outlines to the pixel */ 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* grid. */ 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**************************************************************************/ 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __PSHREC_H__ 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __PSHREC_H__ 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/ft2build.h" 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/pshints.h" 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "pshglob.h" 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_BEGIN_HEADER 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** GLYPH HINTS RECORDER INTERNALS *****/ 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* handle to hint record */ 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_HintRec_* PS_Hint; 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hint types */ 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef enum PS_Hint_Type_ 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_HINT_TYPE_1 = 1, 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_HINT_TYPE_2 = 2 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_Hint_Type; 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hint flags */ 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef enum PS_Hint_Flags_ 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_HINT_FLAG_GHOST = 1, 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_HINT_FLAG_BOTTOM = 2 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_Hint_Flags; 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hint descriptor */ 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_HintRec_ 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int pos; 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int len; 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt flags; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_HintRec; 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ps_hint_is_active( x ) ( (x)->flags & PS_HINT_FLAG_ACTIVE ) 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ps_hint_is_ghost( x ) ( (x)->flags & PS_HINT_FLAG_GHOST ) 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ps_hint_is_bottom( x ) ( (x)->flags & PS_HINT_FLAG_BOTTOM ) 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hints table descriptor */ 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_Hint_TableRec_ 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_hints; 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt max_hints; 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Hint hints; 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_Hint_TableRec, *PS_Hint_Table; 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hint and counter mask descriptor */ 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_MaskRec_ 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_bits; 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt max_bits; 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* bytes; 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt end_point; 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_MaskRec, *PS_Mask; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* masks and counters table descriptor */ 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_Mask_TableRec_ 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_masks; 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt max_masks; 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Mask masks; 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_Mask_TableRec, *PS_Mask_Table; 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* dimension-specific hints descriptor */ 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_DimensionRec_ 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Hint_TableRec hints; 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Mask_TableRec masks; 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Mask_TableRec counters; 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_DimensionRec, *PS_Dimension; 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph hints descriptor */ 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* dimension 0 => X coordinates + vertical hints/stems */ 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* dimension 1 => Y coordinates + horizontal hints/stems */ 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_HintsRec_ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory; 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error; 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 magic; 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Hint_Type hint_type; 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_DimensionRec dimension[2]; 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_HintsRec, *PS_Hints; 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* initialize hints recorder */ 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ps_hints_init( PS_Hints hints, 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory ); 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* finalize hints recorder */ 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( void ) 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ps_hints_done( PS_Hints hints ); 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* initialize Type1 hints recorder interface */ 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( void ) 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov t1_hints_funcs_init( T1_Hints_FuncsRec* funcs ); 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* initialize Type2 hints recorder interface */ 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( void ) 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov t2_hints_funcs_init( T2_Hints_FuncsRec* funcs ); 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef DEBUG_HINTER 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov extern PS_Hints ps_debug_hints; 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov extern int ps_debug_no_horz_hints; 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov extern int ps_debug_no_vert_hints; 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_END_HEADER 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __PS_HINTER_RECORD_H__ */ 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 177