1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* cffgload.h */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* OpenType Glyph Loader (specification). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 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#ifndef __CFFGLOAD_H__ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __CFFGLOAD_H__ 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_FREETYPE_H 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "cffobjs.h" 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 31295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define CFF_MAX_OPERANDS 48 32295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define CFF_MAX_SUBRS_CALLS 32 33295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define CFF_MAX_TRANS_ELEMENTS 32 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Structure> */ 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* CFF_Builder */ 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A structure used during glyph loading to store its outline. */ 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Fields> */ 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* memory :: The current memory object. */ 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* face :: The current face object. */ 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph :: The current glyph slot. */ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* loader :: The current glyph loader. */ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* base :: The base glyph outline. */ 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* current :: The current glyph outline. */ 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* pos_x :: The horizontal translation (if composite glyph). */ 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* pos_y :: The vertical translation (if composite glyph). */ 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* left_bearing :: The left side bearing point. */ 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* advance :: The horizontal advance vector. */ 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* bbox :: Unused. */ 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* path_begun :: A flag which indicates that a new path has begun. */ 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* load_points :: If this flag is not set, no points are loaded. */ 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* no_recurse :: Set but not used. */ 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* metrics_only :: A boolean indicating that we only want to compute */ 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the metrics of a given glyph, not load all of its */ 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* points. */ 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hints_funcs :: Auxiliary pointer for hinting. */ 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hints_globals :: Auxiliary pointer for hinting. */ 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct CFF_Builder_ 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory; 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face face; 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_GlyphSlot glyph; 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader loader; 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline* base; 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Outline* current; 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos pos_x; 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos pos_y; 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Vector left_bearing; 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Vector advance; 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BBox bbox; /* bounding box */ 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool path_begun; 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool load_points; 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool no_recurse; 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool metrics_only; 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* hints_funcs; /* hinter-specific */ 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* hints_globals; /* hinter-specific */ 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } CFF_Builder; 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* execution context charstring zone */ 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct CFF_Decoder_Zone_ 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte* base; 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte* limit; 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte* cursor; 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } CFF_Decoder_Zone; 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct CFF_Decoder_ 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_Builder builder; 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_Font cff; 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed stack[CFF_MAX_OPERANDS + 1]; 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed* top; 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_Decoder_Zone zones[CFF_MAX_SUBRS_CALLS + 1]; 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_Decoder_Zone* zone; 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int flex_state; 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int num_flex_vectors; 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Vector flex_vectors[7]; 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos glyph_width; 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos nominal_width; 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool read_width; 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool width_only; 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int num_hints; 141295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Fixed buildchar[CFF_MAX_TRANS_ELEMENTS]; 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_locals; 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_globals; 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int locals_bias; 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int globals_bias; 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte** locals; 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte** globals; 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte** glyph_names; /* for pure CFF fonts only */ 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_glyphs; /* number of glyphs in font */ 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Render_Mode hint_mode; 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 157295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Bool seac; 158295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } CFF_Decoder; 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cff_decoder_init( CFF_Decoder* decoder, 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face face, 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_Size size, 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_GlyphSlot slot, 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool hinting, 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Render_Mode hint_mode ); 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cff_decoder_prepare( CFF_Decoder* decoder, 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_Size size, 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt glyph_index ); 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0 /* unused until we support pure CFF fonts */ 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Compute the maximum advance width of a font through quick parsing */ 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cff_compute_max_advance( TT_Face face, 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int* max_advance ); 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* 0 */ 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cff_decoder_parse_charstrings( CFF_Decoder* decoder, 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte* charstring_base, 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong charstring_len ); 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cff_slot_load( CFF_GlyphSlot glyph, 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CFF_Size size, 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt glyph_index, 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int32 load_flags ); 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __CFFGLOAD_H__ */ 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 202