1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* pshrec.h */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Postscript (Type1/Type2) hints recorder (specification). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Copyright 2001, 2002, 2003, 2006, 2008 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**************************************************************************/ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The functions defined here are called from the Type 1, CID and CFF */ 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* font drivers to record the hints of a given character/glyph. */ 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The hints are recorded in a unified format, and are later processed */ 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* by the `optimizer' and `fitter' to adjust the outlines to the pixel */ 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* grid. */ 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**************************************************************************/ 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __PSHREC_H__ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __PSHREC_H__ 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_POSTSCRIPT_HINTS_H 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "pshglob.h" 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** GLYPH HINTS RECORDER INTERNALS *****/ 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* handle to hint record */ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct PS_HintRec_* PS_Hint; 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hint types */ 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef enum PS_Hint_Type_ 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_HINT_TYPE_1 = 1, 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_HINT_TYPE_2 = 2 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_Hint_Type; 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hint flags */ 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef enum PS_Hint_Flags_ 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_HINT_FLAG_GHOST = 1, 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_HINT_FLAG_BOTTOM = 2 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_Hint_Flags; 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hint descriptor */ 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct PS_HintRec_ 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int pos; 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int len; 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt flags; 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_HintRec; 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define ps_hint_is_active( x ) ( (x)->flags & PS_HINT_FLAG_ACTIVE ) 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define ps_hint_is_ghost( x ) ( (x)->flags & PS_HINT_FLAG_GHOST ) 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define ps_hint_is_bottom( x ) ( (x)->flags & PS_HINT_FLAG_BOTTOM ) 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hints table descriptor */ 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct PS_Hint_TableRec_ 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_hints; 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt max_hints; 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_Hint hints; 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_Hint_TableRec, *PS_Hint_Table; 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hint and counter mask descriptor */ 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct PS_MaskRec_ 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_bits; 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt max_bits; 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte* bytes; 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt end_point; 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_MaskRec, *PS_Mask; 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* masks and counters table descriptor */ 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct PS_Mask_TableRec_ 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_masks; 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt max_masks; 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_Mask masks; 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_Mask_TableRec, *PS_Mask_Table; 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* dimension-specific hints descriptor */ 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct PS_DimensionRec_ 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_Hint_TableRec hints; 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_Mask_TableRec masks; 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_Mask_TableRec counters; 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_DimensionRec, *PS_Dimension; 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph hints descriptor */ 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* dimension 0 => X coordinates + vertical hints/stems */ 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* dimension 1 => Y coordinates + horizontal hints/stems */ 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct PS_HintsRec_ 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory; 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 magic; 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_Hint_Type hint_type; 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project PS_DimensionRec dimension[2]; 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } PS_HintsRec, *PS_Hints; 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* initialize hints recorder */ 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ps_hints_init( PS_Hints hints, 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory ); 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* finalize hints recorder */ 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ps_hints_done( PS_Hints hints ); 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* initialize Type1 hints recorder interface */ 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_hints_funcs_init( T1_Hints_FuncsRec* funcs ); 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* initialize Type2 hints recorder interface */ 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t2_hints_funcs_init( T2_Hints_FuncsRec* funcs ); 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef DEBUG_HINTER 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project extern PS_Hints ps_debug_hints; 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project extern int ps_debug_no_horz_hints; 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project extern int ps_debug_no_vert_hints; 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __PS_HINTER_RECORD_H__ */ 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 177