diff --git a/src/base/ftbbox.c b/src/base/ftbbox.c index 6cd35d882..0ccf5cc0e 100644 --- a/src/base/ftbbox.c +++ b/src/base/ftbbox.c @@ -15,7 +15,6 @@ /* */ /***************************************************************************/ - /*************************************************************************/ /* */ /* This component has a _single_ role: to compute exact outline bounding */ diff --git a/src/base/ftdebug.h b/src/base/ftdebug.h index b521e3f95..2e90646b2 100644 --- a/src/base/ftdebug.h +++ b/src/base/ftdebug.h @@ -15,7 +15,6 @@ /* */ /***************************************************************************/ - /*************************************************************************/ /* */ /* This component contains various macros and functions used to ease the */ diff --git a/src/base/ftdriver.h b/src/base/ftdriver.h index 7db8d49d8..20919138d 100644 --- a/src/base/ftdriver.h +++ b/src/base/ftdriver.h @@ -42,7 +42,7 @@ /* A driver method used to create a new driver object for a given */ /* format. */ /* */ - /* */ + /* */ /* driver :: A handle to the `new' driver object. The fields */ /* `library', `system', and `lock' are already set when the */ /* base layer calls this method. */ @@ -64,7 +64,7 @@ /* this call, and that this function should NOT destroy the driver */ /* object. */ /* */ - /* */ + /* */ /* driver :: A handle to target driver object. */ /* */ /* */ @@ -72,7 +72,6 @@ /* */ typedef FT_Error (*FTDriver_doneDriver)( FT_Driver driver ); - /*************************************************************************/ /* */ @@ -88,10 +87,12 @@ /* `postscript names' interface which can be used to retrieve the */ /* PostScript name of a given glyph index). */ /* */ - /* */ + /* */ /* driver :: A handle to a driver object. */ - /* interface :: A string designing the interface. Examples */ - /* are `sfnt', `post_names', `charmaps', etc. */ + /* */ + /* */ + /* interface :: A string designing the interface. Examples are */ + /* `sfnt', `post_names', `charmaps', etc. */ /* */ /* */ /* A typeless pointer to the extension's interface (normally a table */ @@ -140,10 +141,14 @@ /* A driver method used to initialize a new face object. The object */ /* must be created by the caller. */ /* */ - /* */ + /* */ /* stream :: The input stream. */ + /* */ + /* */ /* typeface_index :: The face index in the font resource. Used to */ /* access individual faces in collections. */ + /* */ + /* */ /* face :: A handle to the new target face. */ /* */ /* */ @@ -174,7 +179,7 @@ /* function does NOT destroy the object, that is the responsibility */ /* of the caller. */ /* */ - /* */ + /* */ /* face :: A handle to the target face object. */ /* */ /* */ @@ -242,7 +247,7 @@ /* A driver method used to initialize a new size object. The object */ /* must be created by the caller. */ /* */ - /* */ + /* */ /* size :: A handle to the new size object. */ /* */ /* */ @@ -264,8 +269,10 @@ /* A driver method used to reset a size's character sizes (horizontal */ /* and vertical) expressed in fractional points. */ /* */ - /* */ + /* */ /* size :: A handle to the target size object. */ + /* */ + /* */ /* char_width :: The character width expressed in 26.6 */ /* fractional points. */ /* char_height :: The character height expressed in 26.6 */ @@ -296,8 +303,10 @@ /* A driver method used to reset a size's character sizes (horizontal */ /* and vertical) expressed in integer pixels. */ /* */ - /* */ + /* */ /* size :: A handle to the target size object. */ + /* */ + /* */ /* pixel_width :: The character width expressed in 26.6 fractional */ /* pixels. */ /* pixel_height :: The character height expressed in 26.6 fractional */ @@ -307,7 +316,7 @@ /* FreeType error code. 0 means success. */ /* */ /* */ - /* This function should work with all kinds of `Size' objects, either */ + /* This function should work with all kinds of `size' objects, either */ /* fixed or scalable ones. */ /* */ typedef FT_Error (*FTDriver_setPixelSizes)( FT_Size size, @@ -325,7 +334,7 @@ /* does NOT destroy the object; this is the responsibility of the */ /* caller. */ /* */ - /* */ + /* */ /* size :: A handle to the target size object. */ /* */ typedef void (*FTDriver_doneSize)( FT_Size size ); @@ -356,7 +365,7 @@ /* container where a single glyph can be loaded, either in outline or */ /* bitmap format. */ /* */ - /* */ + /* */ /* slot :: A handle to the new glyph slot object. */ /* */ /* */ @@ -374,7 +383,7 @@ /* A driver method used to finalize a given glyph slot. The object */ /* is not destroyed by this function. */ /* */ - /* */ + /* */ /* slot :: A handle to the new glyph slot object. */ /* */ typedef void (*FTDriver_doneGlyphSlot)( FT_GlyphSlot slot ); @@ -388,11 +397,13 @@ /* */ /* A driver method used to load a glyph within a given glyph slot. */ /* */ - /* */ + /* */ /* slot :: A handle to target slot object where the glyph will */ /* be loaded. */ /* size :: A handle to the source face size at which the glyph */ /* must be scaled/loaded. */ + /* */ + /* */ /* glyph_index :: The index of the glyph in the font file. */ /* load_flags :: A flag indicating what to load for this glyph. The */ /* FTLOAD_??? constants can be used to control the */ diff --git a/src/base/ftextend.c b/src/base/ftextend.c index 415d38b96..0cc0df314 100644 --- a/src/base/ftextend.c +++ b/src/base/ftextend.c @@ -1,34 +1,38 @@ -/******************************************************************* - * - * ftextend.h 2.0 - * - * Extensions Implementation - * - * Copyright 1996-1999 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. - * - * This is an updated version of the extension component, now - * located in the main library's source directory. It allows - * the dynamic registration/use of various face object extensions - * through a simple API. - * - ******************************************************************/ - -#include "ftextend.h" -#include "ftobjs.h" +/***************************************************************************/ +/* */ +/* ftextend.h */ +/* */ +/* FreeType extensions implementation (body). */ +/* */ +/* Copyright 1996-2000 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. */ +/* */ +/***************************************************************************/ + + /*************************************************************************/ + /* */ + /* This is an updated version of the extension component, now located */ + /* in the main library's source directory. It allows the dynamic */ + /* registration/use of various face object extensions through a simple */ + /* API. */ + /* */ + /*************************************************************************/ + +#include +#include /* required by the tracing mode */ #undef FT_COMPONENT -#define FT_COMPONENT trace_extend +#define FT_COMPONENT trace_extend - typedef struct FT_Extension_Registry_ + typedef struct FT_Extension_Registry_ { FT_Int num_extensions; FT_Long cur_offset; @@ -37,17 +41,30 @@ } FT_Extension_Registry; - /* Initialize the extension component */ - + /*************************************************************************/ + /* */ + /* */ + /* FT_Init_Extensions */ + /* */ + /* */ + /* Initializes the extension component. */ + /* */ + /* */ + /* driver :: A handle to the driver object. */ + /* */ + /* */ + /* FreeType error code. 0 means success. */ + /* */ LOCAL_FUNC FT_Error FT_Init_Extensions( FT_Driver driver ) { - FT_Error error; + FT_Error error; FT_Memory memory; FT_Extension_Registry* registry; + memory = driver->library->memory; - if ( ALLOC( registry, sizeof (*registry) ) ) + if ( ALLOC( registry, sizeof ( *registry ) ) ) return error; registry->num_extensions = 0; @@ -58,36 +75,64 @@ } - /* Finalize the extension component */ - + /*************************************************************************/ + /* */ + /* */ + /* FT_Done_Extensions */ + /* */ + /* */ + /* Finalizes the extension component. */ + /* */ + /* */ + /* driver :: A handle to the driver object. */ + /* */ + /* */ + /* FreeType error code. 0 means success. */ + /* */ LOCAL_FUNC FT_Error FT_Done_Extensions( FT_Driver driver ) { FT_Memory memory = driver->memory; + FREE( driver->extensions ); return FT_Err_Ok; } - /* Register a new extension */ - + /*************************************************************************/ + /* */ + /* */ + /* FT_Register_Extension */ + /* */ + /* */ + /* Registers a new extension. */ + /* */ + /* */ + /* driver :: A handle to the driver object. */ + /* class :: A pointer to a class describing the extension. */ + /* */ + /* */ + /* FreeType error code. 0 means success. */ + /* */ EXPORT_FUNC FT_Error FT_Register_Extension( FT_Driver driver, - FT_Extension_Class* clazz ) + FT_Extension_Class* class ) { FT_Extension_Registry* registry; + registry = (FT_Extension_Registry*)driver->extensions; - if (registry) + if ( registry ) { FT_Int n = registry->num_extensions; FT_Extension_Class* cur = registry->classes + n; + if ( n >= FT_MAX_EXTENSIONS ) return FT_Err_Too_Many_Extensions; - *cur = *clazz; + *cur = *class; cur->offset = registry->cur_offset; @@ -99,20 +144,40 @@ } - /* Query an extension block by extension_ID */ - + /*************************************************************************/ + /* */ + /* */ + /* FT_Get_Extension */ + /* */ + /* */ + /* Queries an extension block by an extension ID string. */ + /* */ + /* */ + /* face :: A handle to the face object. */ + /* extension_id :: An ID string identifying the extension. */ + /* */ + /* */ + /* extension_interface :: A generic pointer, usually pointing to a */ + /* table of functions implementing the */ + /* extension interface. */ + /* */ + /* */ + /* A pointer to the extension block. */ + /* */ EXPORT_FUNC void* FT_Get_Extension( FT_Face face, const char* extension_id, void* *extension_interface ) { FT_Extension_Registry* registry; + registry = (FT_Extension_Registry*)face->driver->extensions; - if (registry && face->extensions) + if ( registry && face->extensions ) { FT_Extension_Class* cur = registry->classes; FT_Extension_Class* limit = cur + registry->num_extensions; + for ( ; cur < limit; cur++ ) if ( strcmp( cur->id, extension_id ) == 0 ) @@ -123,55 +188,92 @@ } /* could not find the extension id */ + *extension_interface = 0; return 0; } - /* Destroy all extensions within a face object. Called by the */ - /* face object destructor. */ + /*************************************************************************/ + /* */ + /* */ + /* FT_Destroy_Extensions */ + /* */ + /* */ + /* Destroys all extensions within a face object. */ + /* */ + /* */ + /* face :: A handle to the face object. */ + /* */ + /* */ + /* FreeType error code. 0 means success. */ + /* */ + /* */ + /* Called by the face object destructor. */ + /* */ LOCAL_FUNC FT_Error FT_Destroy_Extensions( FT_Face face ) { FT_Extension_Registry* registry; FT_Memory memory; - + + registry = (FT_Extension_Registry*)face->driver->extensions; - if (registry && face->extensions) + if ( registry && face->extensions ) { FT_Extension_Class* cur = registry->classes; FT_Extension_Class* limit = cur + registry->num_extensions; + for ( ; cur < limit; cur++ ) { char* ext = (char*)face->extensions + cur->offset; - if (cur->finalize) + if ( cur->finalize ) cur->finalize( ext, face ); } memory = face->driver->memory; FREE( face->extensions ); } + return FT_Err_Ok; } - /* Create an extension within a face object. Called by the */ - /* face object constructor. */ - + /*************************************************************************/ + /* */ + /* */ + /* FT_Create_Extensions */ + /* */ + /* */ + /* Creates an extension object within a face object for all */ + /* registered extensions. */ + /* */ + /* */ + /* face :: A handle to the face object. */ + /* */ + /* */ + /* FreeType error code. 0 means success. */ + /* */ + /* */ + /* Called by the face object constructor. */ + /* */ LOCAL_FUNC FT_Error FT_Create_Extensions( FT_Face face ) { FT_Extension_Registry* registry; FT_Memory memory; FT_Error error; + face->extensions = 0; - /* load extensions registry, exit succesfully if none is there */ + /* load extensions registry, exit successfully if none is there */ + registry = (FT_Extension_Registry*)face->driver->extensions; - if (!registry) return FT_Err_Ok; + if ( !registry ) + return FT_Err_Ok; memory = face->driver->memory; if ( ALLOC( face->extensions, registry->cur_offset ) ) @@ -180,18 +282,21 @@ { FT_Extension_Class* cur = registry->classes; FT_Extension_Class* limit = cur + registry->num_extensions; + for ( ; cur < limit; cur++ ) { char* ext = (char*)face->extensions + cur->offset; - if (cur->init) + if ( cur->init ) { error = cur->init( ext, face ); - if (error) break; + if ( error ) + break; } } } + return error; } diff --git a/src/base/ftextend.h b/src/base/ftextend.h index b62a5cf5f..b3e0c5432 100644 --- a/src/base/ftextend.h +++ b/src/base/ftextend.h @@ -1,117 +1,114 @@ -/******************************************************************* - * - * ftextend.h 2.0 - * - * Extensions Interface. - * - * Copyright 1996-1999 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. - * - ******************************************************************/ +/***************************************************************************/ +/* */ +/* ftextend.h */ +/* */ +/* FreeType extensions implementation (specification). */ +/* */ +/* Copyright 1996-2000 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 FTEXTEND_H #define FTEXTEND_H -#include "ftconfig.h" -#include "ftobjs.h" +#include +#include #ifdef __cplusplus extern "C" { #endif - /* The extensions don't need to be integrated at compile time into */ - /* the engine, only at link time. */ - - /***************************************************************** - * - * - * FT_Extension_Initializer - * - * - * Each new face object can have several extensions associated - * to it at creation time. This function is used to initialize - * a given extension data for a given face. - * - * - * ext :: a typeless pointer to the extension data. - * face :: handle to the source face object the extension is - * associated with - * - * - * Error condition. 0 means success - * - * - * In case of error, the initializer should not destroy the - * extension data, as the finalizer will get called later - * by the function's caller.. - * - *****************************************************************/ - + /*************************************************************************/ + /* */ + /* The extensions don't need to be integrated at compile time into the */ + /* engine, only at link time. */ + /* */ + /*************************************************************************/ + + /*************************************************************************/ + /* */ + /* */ + /* FT_Extension_Initializer */ + /* */ + /* */ + /* Each new face object can have several extensions associated with */ + /* it at creation time. This function is used to initialize given */ + /* extension data for a given face. */ + /* */ + /* */ + /* ext :: A typeless pointer to the extension data. */ + /* face :: A handle to the source face object the extension is */ + /* associated with. */ + /* */ + /* */ + /* FreeType error code. 0 means success. */ + /* */ + /* */ + /* In case of error, the initializer should not destroy the extension */ + /* data, as the finalizer will get called later by the function's */ + /* caller. */ + /* */ typedef FT_Error (*FT_Extension_Initializer)( void* ext, FT_Face face ); - /***************************************************************** - * - * - * FT_Extension_Finalizer - * - * - * Each new face object can have several extensions associated - * to it at creation time. This function is used to finalize - * a given extension data for a given face. This occurs before - * the face object itself is finalized. - * - * - * ext :: a typeless pointer to the extension data. - * face :: handle to the source face object the extension is - * associated with - * - *****************************************************************/ - - typedef void (*FT_Extension_Finalizer)( void* ext, FT_Face face ); - - - /***************************************************************** - * - * - * FT_Extension_Class - * - * - * A simple structure used to describe a given extension to - * the FreeType base layer. An FT_Extension_Class is used as - * a parameter for FT_Register_Extension. - * - * - * id :: the extension's id. This is a normal C string - * that is used to uniquely reference the extension's - * interface. - * - * size :: the size in bytes of the extension data that must - * be associated with each face object. - * - * init :: a pointer to the extension data's initializer - * finalize :: a pointer to the extension data's finalizer - * - * inteface :: this pointer can be anything, but should usually - * point to a table of function pointers which implement - * the extension's interface. - * - * offset :: this field is set and used within the base layer - * and should be set to 0 when registering an - * extension through FT_Register_Extension. It contains - * an offset within the face's extension block for the - * current extension's data. - * - *****************************************************************/ - - typedef struct FT_Extension_Class_ + + /*************************************************************************/ + /* */ + /* */ + /* FT_Extension_Finalizer */ + /* */ + /* */ + /* Each new face object can have several extensions associated with */ + /* it at creation time. This function is used to finalize given */ + /* extension data for a given face; it occurs before the face object */ + /* itself is finalized. */ + /* */ + /* */ + /* ext :: A typeless pointer to the extension data. */ + /* face :: A handle to the source face object the extension is */ + /* associated with. */ + /* */ + typedef void (*FT_Extension_Finalizer)( void* ext, + FT_Face face ); + + + /*************************************************************************/ + /* */ + /* */ + /* FT_Extension_Class */ + /* */ + /* */ + /* A simple structure used to describe a given extension to the */ + /* FreeType base layer. An FT_Extension_Class is used as a parameter */ + /* for FT_Register_Extension(). */ + /* */ + /* */ + /* id :: The extension's ID. This is a normal C string that */ + /* is used to uniquely reference the extension's */ + /* interface. */ + /* size :: The size in bytes of the extension data that must be */ + /* associated with each face object. */ + /* init :: A pointer to the extension data's initializer. */ + /* finalize :: A pointer to the extension data's finalizer. */ + /* interface :: This pointer can be anything, but should usually */ + /* point to a table of function pointers which implement */ + /* the extension's interface. */ + /* */ + /* offset :: This field is set and used within the base layer and */ + /* should be set to 0 when registering an extension */ + /* through FT_Register_Extension(). It contains an */ + /* offset within the face's extension block for the */ + /* current extension's data. */ + /* */ + typedef struct FT_Extension_Class_ { const char* id; FT_ULong size; @@ -130,6 +127,8 @@ #ifdef FT_CONFIG_OPTION_EXTEND_ENGINE + + /* Initialize the extension component */ LOCAL_DEF FT_Error FT_Init_Extensions( FT_Library library ); @@ -147,13 +146,17 @@ /* face object destructor. */ LOCAL_DEF FT_Error FT_Destroy_Extensions( FT_Face face ); + + #endif - /* Returns an extension's data & inteface according to its ID */ + + /* Returns an extension's data & interface according to its ID */ EXPORT_DEF void* FT_Get_Extension( FT_Face face, const char* extension_id, void* *extension_interface ); + #ifdef __cplusplus } #endif