/**************************************************************************** * * ttobjs.c * * Objects manager (body). * * Copyright (C) 1996-2023 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. * */ #include <freetype/internal/ftdebug.h> #include <freetype/internal/ftstream.h> #include <freetype/tttags.h> #include <freetype/internal/sfnt.h> #include <freetype/ftdriver.h> #include "ttgload.h" #include "ttpload.h" #include "tterrors.h" #ifdef TT_USE_BYTECODE_INTERPRETER #include "ttinterp.h" #endif #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT #include "ttgxvar.h" #endif /************************************************************************** * * The macro FT_COMPONENT is used in trace mode. It is an implicit * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log * messages during execution. */ #undef FT_COMPONENT #define FT_COMPONENT … #ifdef TT_USE_BYTECODE_INTERPRETER /************************************************************************** * * GLYPH ZONE FUNCTIONS * */ /************************************************************************** * * @Function: * tt_glyphzone_done * * @Description: * Deallocate a glyph zone. * * @Input: * zone :: * A pointer to the target glyph zone. */ FT_LOCAL_DEF( void ) tt_glyphzone_done( TT_GlyphZone zone ) { … } /************************************************************************** * * @Function: * tt_glyphzone_new * * @Description: * Allocate a new glyph zone. * * @Input: * memory :: * A handle to the current memory object. * * maxPoints :: * The capacity of glyph zone in points. * * maxContours :: * The capacity of glyph zone in contours. * * @Output: * zone :: * A pointer to the target glyph zone record. * * @Return: * FreeType error code. 0 means success. */ FT_LOCAL_DEF( FT_Error ) tt_glyphzone_new( FT_Memory memory, FT_UShort maxPoints, FT_Short maxContours, TT_GlyphZone zone ) { … } /* * Fonts embedded in PDFs are made unique by prepending randomization * prefixes to their names: as defined in Section 5.5.3, 'Font Subsets', * of the PDF Reference, they consist of 6 uppercase letters followed by * the `+` sign. For safety, we do not skip prefixes violating this rule. */ static const FT_String* tt_skip_pdffont_random_tag( const FT_String* name ) { … } /* Compare the face with a list of well-known `tricky' fonts. */ /* This list shall be expanded as we find more of them. */ static FT_Bool tt_check_trickyness_family( const FT_String* name ) { … } /* XXX: This function should be in the `sfnt' module. */ /* Some PDF generators clear the checksums in the TrueType header table. */ /* For example, Quartz ContextPDF clears all entries, or Bullzip PDF */ /* Printer clears the entries for subsetted subtables. We thus have to */ /* recalculate the checksums where necessary. */ static FT_UInt32 tt_synth_sfnt_checksum( FT_Stream stream, FT_ULong length ) { … } /* XXX: This function should be in the `sfnt' module. */ static FT_ULong tt_get_sfnt_checksum( TT_Face face, FT_UShort i ) { … } tt_sfnt_id_rec; static FT_Bool tt_check_trickyness_sfnt_ids( TT_Face face ) { … } static FT_Bool tt_check_trickyness( FT_Face face ) { … } #endif /* TT_USE_BYTECODE_INTERPRETER */ /* Check whether `.notdef' is the only glyph in the `loca' table. */ static FT_Bool tt_check_single_notdef( FT_Face ttface ) { … } /************************************************************************** * * @Function: * tt_face_init * * @Description: * Initialize a given TrueType face object. * * @Input: * stream :: * The source font stream. * * face_index :: * The index of the TrueType font, if we are opening a * collection, in bits 0-15. The numbered instance * index~+~1 of a GX (sub)font, if applicable, in bits * 16-30. * * num_params :: * Number of additional generic parameters. Ignored. * * params :: * Additional generic parameters. Ignored. * * @InOut: * face :: * The newly built face object. * * @Return: * FreeType error code. 0 means success. */ FT_LOCAL_DEF( FT_Error ) tt_face_init( FT_Stream stream, FT_Face ttface, /* TT_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { … } /************************************************************************** * * @Function: * tt_face_done * * @Description: * Finalize a given face object. * * @Input: * face :: * A pointer to the face object to destroy. */ FT_LOCAL_DEF( void ) tt_face_done( FT_Face ttface ) /* TT_Face */ { … } /************************************************************************** * * SIZE FUNCTIONS * */ #ifdef TT_USE_BYTECODE_INTERPRETER /************************************************************************** * * @Function: * tt_size_run_fpgm * * @Description: * Run the font program. * * @Input: * size :: * A handle to the size object. * * pedantic :: * Set if bytecode execution should be pedantic. * * @Return: * FreeType error code. 0 means success. */ FT_LOCAL_DEF( FT_Error ) tt_size_run_fpgm( TT_Size size, FT_Bool pedantic ) { … } /************************************************************************** * * @Function: * tt_size_run_prep * * @Description: * Run the control value program. * * @Input: * size :: * A handle to the size object. * * pedantic :: * Set if bytecode execution should be pedantic. * * @Return: * FreeType error code. 0 means success. */ FT_LOCAL_DEF( FT_Error ) tt_size_run_prep( TT_Size size, FT_Bool pedantic ) { … } static void tt_size_done_bytecode( FT_Size ftsize ) { … } /* Initialize bytecode-related fields in the size object. */ /* We do this only if bytecode interpretation is really needed. */ static FT_Error tt_size_init_bytecode( FT_Size ftsize, FT_Bool pedantic ) { … } FT_LOCAL_DEF( FT_Error ) tt_size_ready_bytecode( TT_Size size, FT_Bool pedantic ) { … } #endif /* TT_USE_BYTECODE_INTERPRETER */ /************************************************************************** * * @Function: * tt_size_init * * @Description: * Initialize a new TrueType size object. * * @InOut: * size :: * A handle to the size object. * * @Return: * FreeType error code. 0 means success. */ FT_LOCAL_DEF( FT_Error ) tt_size_init( FT_Size ttsize ) /* TT_Size */ { … } /************************************************************************** * * @Function: * tt_size_done * * @Description: * The TrueType size object finalizer. * * @Input: * size :: * A handle to the target size object. */ FT_LOCAL_DEF( void ) tt_size_done( FT_Size ttsize ) /* TT_Size */ { … } /************************************************************************** * * @Function: * tt_size_reset_height * * @Description: * Recompute a TrueType size's ascender, descender, and height * when resolutions and character dimensions have been changed. * Used for variation fonts as an iterator function. * * @Input: * ft_size :: * A handle to the target TT_Size object. This function will be called * through a `FT_Size_Reset_Func` pointer which takes `FT_Size`. This * function must take `FT_Size` as a result. The passed `FT_Size` is * expected to point to a `TT_Size`. */ FT_LOCAL_DEF( FT_Error ) tt_size_reset_height( FT_Size ft_size ) { … } /************************************************************************** * * @Function: * tt_size_reset * * @Description: * Reset a TrueType size when resolutions and character dimensions * have been changed. * * @Input: * size :: * A handle to the target size object. */ FT_LOCAL_DEF( FT_Error ) tt_size_reset( TT_Size size ) { … } /************************************************************************** * * @Function: * tt_driver_init * * @Description: * Initialize a given TrueType driver object. * * @Input: * driver :: * A handle to the target driver object. * * @Return: * FreeType error code. 0 means success. */ FT_LOCAL_DEF( FT_Error ) tt_driver_init( FT_Module ttdriver ) /* TT_Driver */ { … } /************************************************************************** * * @Function: * tt_driver_done * * @Description: * Finalize a given TrueType driver. * * @Input: * driver :: * A handle to the target TrueType driver. */ FT_LOCAL_DEF( void ) tt_driver_done( FT_Module ttdriver ) /* TT_Driver */ { … } /************************************************************************** * * @Function: * tt_slot_init * * @Description: * Initialize a new slot object. * * @InOut: * slot :: * A handle to the slot object. * * @Return: * FreeType error code. 0 means success. */ FT_LOCAL_DEF( FT_Error ) tt_slot_init( FT_GlyphSlot slot ) { … } /* END */