freetype2/include/freetype/internal/sfnt.h

493 lines
30 KiB
C
Raw Normal View History

1999-12-17 00:11:37 +01:00
/***************************************************************************/
/* */
/* sfnt.h */
/* */
/* High-level `sfnt' driver interface (specification). */
/* */
2000-01-07 15:07:21 +01:00
/* Copyright 1996-2000 by */
1999-12-17 00:11:37 +01:00
/* 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 SFNT_H
#define SFNT_H
2000-07-19 04:59:31 +02:00
#include <freetype/freetype.h>
#include <freetype/internal/ftdriver.h>
#include <freetype/internal/tttypes.h>
1999-12-17 00:11:37 +01:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_Init_Face_Func */
/* */
/* <Description> */
2000-07-19 04:59:31 +02:00
/* First part of the SFNT face object initialization. This will find */
/* the face in a SFNT file or collection, and load its format tag in */
/* face->format_tag. */
/* */
/* <Input> */
/* stream :: The input stream. */
2000-07-19 04:59:31 +02:00
/* */
/* face :: A handle to the target face object. */
2000-07-19 04:59:31 +02:00
/* */
/* face_index :: The index of the TrueType font, if we are opening a */
/* collection. */
2000-07-19 04:59:31 +02:00
/* */
/* num_params :: The number of additional parameters. */
/* */
/* params :: Optional additional parameters. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
/* */
/* <Note> */
2000-07-19 04:59:31 +02:00
/* The stream cursor must be at the font file's origin. */
/* */
/* This function recognizes fonts embedded in a `TrueType */
/* collection'. */
/* */
/* Once the format tag has been validated by the font driver, it */
2000-07-19 04:59:31 +02:00
/* should then call the TT_Load_Face_Func() callback to read the rest */
/* of the SFNT tables in the object. */
/* */
typedef
FT_Error (*TT_Init_Face_Func)( FT_Stream stream,
TT_Face face,
FT_Int face_index,
FT_Int num_params,
FT_Parameter* params );
2000-07-19 04:59:31 +02:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_Load_Face_Func */
/* */
/* <Description> */
2000-07-19 04:59:31 +02:00
/* Second part of the SFNT face object initialization. This will */
/* load the common SFNT tables (head, OS/2, maxp, metrics, etc.) in */
/* the face object. */
/* */
/* <Input> */
/* stream :: The input stream. */
2000-07-19 04:59:31 +02:00
/* */
/* face :: A handle to the target face object. */
2000-07-19 04:59:31 +02:00
/* */
/* face_index :: The index of the TrueType font, if we are opening a */
/* collection. */
2000-07-19 04:59:31 +02:00
/* */
/* num_params :: The number of additional parameters. */
/* */
/* params :: Optional additional parameters. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
/* */
/* <Note> */
2000-07-19 04:59:31 +02:00
/* This function must be called after TT_Init_Face_Func(). */
/* */
typedef
FT_Error (*TT_Load_Face_Func)( FT_Stream stream,
TT_Face face,
FT_Int face_index,
FT_Int num_params,
FT_Parameter* params );
2000-07-19 04:59:31 +02:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_Done_Face_Func */
/* */
/* <Description> */
/* A callback used to delete the common SFNT data from a face. */
/* */
/* <Input> */
2000-07-19 04:59:31 +02:00
/* face :: A handle to the target face object. */
/* */
/* <Note> */
2000-07-19 04:59:31 +02:00
/* This function does NOT destroy the face object. */
/* */
typedef
2000-07-19 04:59:31 +02:00
void (*TT_Done_Face_Func)( TT_Face face );
typedef
- MAJOR INTERNAL REDESIGN: A lot of internal modifications have been performed lately on the source in order to provide the following enhancements: - more generic module support: The FT_Module type is now defined to represent a handle to a given module. The file <freetype/ftmodule.h> contains the FT_Module_Class definition, as well as the module-loading public API The FT_Driver type is still defined, and still represents a pointer to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.. - support for generic glyph image types: The FT_Renderer type is a pointer to a module used to perform various operations on glyph image. Each renderer is capable of handling images in a single format (e.g. ft_glyph_format_outline). Its functions are used to: - transform an glyph image - render a glyph image into a bitmap - return the control box (dimensions) of a given glyph image The scan converters "ftraster.c" and "ftgrays.c" have been moved to the new directory "src/renderer", and are used to provide two default renderer modules. One corresponds to the "standard" scan-converter, the other to the "smooth" one. The current renderer can be set through the new function FT_Set_Renderer. The old raster-related function FT_Set_Raster, FT_Get_Raster and FT_Set_Raster_Mode have now disappeared, in favor of the new: FT_Get_Renderer FT_Set_Renderer see the file <freetype/ftrender.h> for more details.. These changes were necessary to properly support different scalable formats in the future, like bi-color glyphs, etc.. - glyph loader object: A new internal object, called a 'glyph loader' has been introduced in the base layer. It is used by all scalable format font drivers to load glyphs and composites. This object has been created to reduce the code size of each driver, as each one of them basically re-implemented its functionality. See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for more information.. - FT_GlyphSlot had new fields: In order to support extended features (see below), the FT_GlyphSlot structure has a few new fields: linearHoriAdvance: this field gives the linearly scaled (i.e. scaled but unhinted) advance width for the glyph, expressed as a 16.16 fixed pixel value. This is useful to perform WYSIWYG text. linearVertAdvance: this field gives the linearly scaled advance height for the glyph (relevant in vertical glyph layouts only). This is useful to perform WYSIWYG text. Note that the two above field replace the removed "metrics2" field in the glyph slot. advance: this field is a vector that gives the transformed advance for the glyph. By default, it corresponds to the advance width, unless FT_LOAD_VERTICAL_LAYOUT was specified when calling FT_Load_Glyph or FT_Load_Char bitmap_left: this field gives the distance in integer pixels from the current pen position to the left-most pixel of a glyph image WHEN IT IS A BITMAP. It is only valid when the "format" field is set to "ft_glyph_format_bitmap", for example, after calling the new function FT_Render_Glyph. bitmap_top: this field gives the distance in integer pixels from the current pen position (located on the baseline) to the top-most pixel of the glyph image WHEN IT IS A BITMAP. Positive values correspond to upwards Y. loader: this is a new private field for the glyph slot. Client applications should not touch it.. - support for transforms and direct rendering in FT_Load_Glyph: Most of the functionality found in <freetype/ftglyph.h> has been moved to the core library. Hence, the following: - a transform can be specified for a face through FT_Set_Transform. this transform is applied by FT_Load_Glyph to scalable glyph images (i.e. NOT TO BITMAPS) before the function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags.. - once a glyph image has been loaded, it can be directly converted to a bitmap by using the new FT_Render_Glyph function. Note that this function takes the glyph image from the glyph slot, and converts it to a bitmap whose properties are returned in "face.glyph.bitmap", "face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original native image might be lost after the conversion. - when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph and FT_Load_Char functions will call FT_Render_Glyph automatically when needed.
2000-06-22 02:17:42 +02:00
FT_Module_Interface (*SFNT_Get_Interface_Func)( FT_Module module,
const char* interface );
/*************************************************************************/
/* */
/* <FuncType> */
2000-07-19 04:59:31 +02:00
/* TT_Load_SFNT_Header_Func */
/* */
/* <Description> */
2000-07-19 04:59:31 +02:00
/* Loads the header of a SFNT font file. Supports collections. */
/* */
/* <Input> */
2000-07-19 04:59:31 +02:00
/* face :: A handle to the target face object. */
/* */
/* stream :: The input stream. */
/* */
/* face_index :: The index of the TrueType font, if we are opening a */
/* collection. */
/* */
/* <Output> */
2000-07-19 04:59:31 +02:00
/* sfnt :: The SFNT header. */
/* */
/* <Return> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. */
/* */
/* <Note> */
2000-07-19 04:59:31 +02:00
/* The stream cursor must be at the font file's origin. */
/* */
/* This function recognizes fonts embedded in a `TrueType */
/* collection'. */
/* */
/* This function checks that the header is valid by looking at the */
2000-07-19 04:59:31 +02:00
/* values of `search_range', `entry_selector', and `range_shift'. */
/* */
typedef
2000-07-19 04:59:31 +02:00
FT_Error (*TT_Load_SFNT_Header_Func)( TT_Face face,
FT_Stream stream,
FT_Long face_index,
SFNT_Header* sfnt );
1999-12-17 00:11:37 +01:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_Load_Directory_Func */
/* */
/* <Description> */
/* Loads the table directory into a face object. */
/* */
/* <Input> */
/* face :: A handle to the target face object. */
2000-07-19 04:59:31 +02:00
/* */
1999-12-17 00:11:37 +01:00
/* stream :: The input stream. */
2000-07-19 04:59:31 +02:00
/* */
/* sfnt :: The SFNT header. */
1999-12-17 00:11:37 +01:00
/* */
/* <Return> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. */
1999-12-17 00:11:37 +01:00
/* */
/* <Note> */
2000-07-19 04:59:31 +02:00
/* The stream cursor must be on the first byte after the 4-byte font */
/* format tag. This is the case just after a call to */
/* TT_Load_Format_Tag(). */
1999-12-17 00:11:37 +01:00
/* */
typedef
FT_Error (*TT_Load_Directory_Func)( TT_Face face,
FT_Stream stream,
SFNT_Header* sfnt );
1999-12-17 00:11:37 +01:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_Load_Any_Func */
/* */
/* <Description> */
2000-07-19 04:59:31 +02:00
/* Loads any font table into client memory. */
1999-12-17 00:11:37 +01:00
/* */
/* <Input> */
/* face :: The face object to look for. */
/* */
2000-07-19 04:59:31 +02:00
/* tag :: The tag of table to load. Use the value 0 if you want */
1999-12-17 00:11:37 +01:00
/* to access the whole font file, else set this parameter */
/* to a valid TrueType table tag that you can forge with */
/* the MAKE_TT_TAG macro. */
/* */
/* offset :: The starting offset in the table (or the file if */
/* tag == 0). */
/* */
/* length :: The address of the decision variable: */
/* */
/* If length == NULL: */
/* Loads the whole table. Returns an error if */
/* `offset' == 0! */
/* */
/* If *length == 0: */
/* Exits immediately; returning the length of the given */
/* table or of the font file, depending on the value of */
/* `tag'. */
/* */
/* If *length != 0: */
/* Loads the next `length' bytes of table or font, */
/* starting at offset `offset' (in table or font too). */
/* */
/* <Output> */
/* buffer :: The address of target buffer. */
/* */
/* <Return> */
/* TrueType error code. 0 means success. */
/* */
typedef
FT_Error (*TT_Load_Any_Func)( TT_Face face,
FT_ULong tag,
FT_Long offset,
FT_Byte* buffer,
FT_ULong* length );
1999-12-17 00:11:37 +01:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_Load_SBit_Image_Func */
/* */
/* <Description> */
/* Loads a given glyph sbit image from the font resource. This also */
/* returns its metrics. */
/* */
/* <Input> */
/* face :: The target face object. */
/* */
/* x_ppem :: The horizontal resolution in points per EM. */
/* */
/* y_ppem :: The vertical resolution in points per EM. */
/* */
/* glyph_index :: The current glyph index. */
/* */
/* stream :: The input stream. */
/* */
/* <Output> */
/* map :: The target pixmap. */
2000-07-19 04:59:31 +02:00
/* */
1999-12-17 00:11:37 +01:00
/* metrics :: A big sbit metrics structure for the glyph image. */
/* */
/* <Return> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. Returns an error if no */
1999-12-17 00:11:37 +01:00
/* glyph sbit exists for the index. */
/* */
/* <Note> */
/* The `map.buffer' field is always freed before the glyph is loaded. */
/* */
2000-05-17 01:44:38 +02:00
typedef
FT_Error (*TT_Load_SBit_Image_Func)( TT_Face face,
FT_Int x_ppem,
FT_Int y_ppem,
FT_UInt glyph_index,
FT_UInt load_flags,
1999-12-17 00:11:37 +01:00
FT_Stream stream,
FT_Bitmap* map,
TT_SBit_Metrics* metrics );
2000-07-19 04:59:31 +02:00
1999-12-17 00:11:37 +01:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_Get_PS_Name_Func */
/* */
/* <Description> */
/* Gets the PostScript glyph name of a glyph. */
/* */
/* <Input> */
/* index :: The glyph index. */
/* */
/* PSname :: The address of a string pointer. Will be NULL in case */
/* of error, otherwise it is a pointer to the glyph name. */
/* */
/* You must not modify the returned string! */
/* */
/* <Output> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. */
1999-12-17 00:11:37 +01:00
/* */
typedef
2000-07-19 04:59:31 +02:00
FT_Error (*TT_Get_PS_Name_Func)( TT_Face face,
FT_UInt index,
FT_String** PSname );
1999-12-17 00:11:37 +01:00
/*************************************************************************/
/* */
/* <FuncType> */
2000-07-19 04:59:31 +02:00
/* TT_Load_Metrics_Func */
1999-12-17 00:11:37 +01:00
/* */
/* <Description> */
/* Loads the horizontal or vertical header in a face object. */
/* */
/* <Input> */
/* face :: A handle to the target face object. */
2000-07-19 04:59:31 +02:00
/* */
1999-12-17 00:11:37 +01:00
/* stream :: The input stream. */
2000-07-19 04:59:31 +02:00
/* */
1999-12-17 00:11:37 +01:00
/* vertical :: A boolean flag. If set, load vertical metrics. */
/* */
/* <Return> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. */
1999-12-17 00:11:37 +01:00
/* */
typedef
FT_Error (*TT_Load_Metrics_Func)( TT_Face face,
1999-12-17 00:11:37 +01:00
FT_Stream stream,
FT_Bool vertical );
1999-12-17 00:11:37 +01:00
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_CharMap_Load_Func */
/* */
/* <Description> */
/* Loads a given TrueType character map into memory. */
/* */
/* <Input> */
/* face :: A handle to the parent face object. */
2000-07-19 04:59:31 +02:00
/* */
1999-12-17 00:11:37 +01:00
/* stream :: A handle to the current stream object. */
/* */
/* <InOut> */
/* cmap :: A pointer to a cmap object. */
/* */
/* <Return> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. */
1999-12-17 00:11:37 +01:00
/* */
/* <Note> */
/* The function assumes that the stream is already in use (i.e., */
/* opened). In case of error, all partially allocated tables are */
/* released. */
/* */
typedef
FT_Error (*TT_CharMap_Load_Func)( TT_Face face,
1999-12-17 00:11:37 +01:00
TT_CMapTable* cmap,
FT_Stream input );
/*************************************************************************/
/* */
/* <FuncType> */
/* TT_CharMap_Free_Func */
/* */
/* <Description> */
/* Destroys a character mapping table. */
/* */
/* <Input> */
/* face :: A handle to the parent face object. */
2000-07-19 04:59:31 +02:00
/* */
1999-12-17 00:11:37 +01:00
/* cmap :: A handle to a cmap object. */
/* */
/* <Return> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. */
1999-12-17 00:11:37 +01:00
/* */
typedef
FT_Error (*TT_CharMap_Free_Func)( TT_Face face,
1999-12-17 00:11:37 +01:00
TT_CMapTable* cmap );
/*************************************************************************/
/* */
/* <FuncType> */
2000-07-19 04:59:31 +02:00
/* TT_Load_Table_Func */
1999-12-17 00:11:37 +01:00
/* */
/* <Description> */
/* Loads a given TrueType table. */
/* */
/* <Input> */
/* face :: A handle to the target face object. */
2000-07-19 04:59:31 +02:00
/* */
1999-12-17 00:11:37 +01:00
/* stream :: The input stream. */
/* */
/* <Return> */
2000-07-19 04:59:31 +02:00
/* FreeType error code. 0 means success. */
1999-12-17 00:11:37 +01:00
/* */
/* <Note> */
/* The function will use `face->goto_table' to seek the stream to */
2000-07-19 04:59:31 +02:00
/* the start of the table. */
1999-12-17 00:11:37 +01:00
/* */
typedef
FT_Error (*TT_Load_Table_Func)( TT_Face face,
1999-12-17 00:11:37 +01:00
FT_Stream stream );
/*************************************************************************/
/* */
/* <FuncType> */
2000-07-19 04:59:31 +02:00
/* TT_Free_Table_Func */
1999-12-17 00:11:37 +01:00
/* */
/* <Description> */
2000-07-19 04:59:31 +02:00
/* Frees a given TrueType table. */
1999-12-17 00:11:37 +01:00
/* */
/* <Input> */
2000-07-19 04:59:31 +02:00
/* face :: A handle to the target face object. */
1999-12-17 00:11:37 +01:00
/* */
typedef
void (*TT_Free_Table_Func)( TT_Face face );
/*************************************************************************/
/* */
/* <Struct> */
/* SFNT_Interface */
/* */
/* <Description> */
2000-07-19 04:59:31 +02:00
/* This structure holds pointers to the functions used to load and */
1999-12-17 00:11:37 +01:00
/* free the basic tables that are required in a `sfnt' font file. */
/* */
/* <Fields> */
2000-07-19 04:59:31 +02:00
/* Check the various xxx_Func() descriptions for details. */
1999-12-17 00:11:37 +01:00
/* */
typedef struct SFNT_Interface_
{
2000-07-19 04:59:31 +02:00
TT_Goto_Table_Func goto_table;
2000-05-17 01:44:38 +02:00
2000-07-19 04:59:31 +02:00
TT_Init_Face_Func init_face;
TT_Load_Face_Func load_face;
TT_Done_Face_Func done_face;
SFNT_Get_Interface_Func get_interface;
2000-07-19 04:59:31 +02:00
TT_Load_Any_Func load_any;
TT_Load_SFNT_Header_Func load_sfnt_header;
TT_Load_Directory_Func load_directory;
/* these functions are called by `load_face' but they can also */
/* be called from external modules, if there is a need to do so */
TT_Load_Table_Func load_header;
TT_Load_Metrics_Func load_metrics;
TT_Load_Table_Func load_charmaps;
TT_Load_Table_Func load_max_profile;
TT_Load_Table_Func load_os2;
TT_Load_Table_Func load_psnames;
TT_Load_Table_Func load_names;
TT_Free_Table_Func free_names;
1999-12-17 00:11:37 +01:00
/* optional tables */
2000-07-19 04:59:31 +02:00
TT_Load_Table_Func load_hdmx;
TT_Free_Table_Func free_hdmx;
1999-12-17 00:11:37 +01:00
2000-07-19 04:59:31 +02:00
TT_Load_Table_Func load_kerning;
TT_Load_Table_Func load_gasp;
TT_Load_Table_Func load_pclt;
1999-12-17 00:11:37 +01:00
/* see `ttsbit.h' */
2000-07-19 04:59:31 +02:00
TT_Load_Table_Func load_sbits;
TT_Load_SBit_Image_Func load_sbit_image;
TT_Free_Table_Func free_sbits;
2000-05-17 01:44:38 +02:00
1999-12-17 00:11:37 +01:00
/* see `ttpost.h' */
2000-07-19 04:59:31 +02:00
TT_Get_PS_Name_Func get_psname;
TT_Free_Table_Func free_psnames;
1999-12-17 00:11:37 +01:00
/* see `ttcmap.h' */
2000-07-19 04:59:31 +02:00
TT_CharMap_Load_Func load_charmap;
TT_CharMap_Free_Func free_charmap;
2000-05-17 01:44:38 +02:00
1999-12-17 00:11:37 +01:00
} SFNT_Interface;
2000-07-19 04:59:31 +02:00
1999-12-17 00:11:37 +01:00
#endif /* SFNT_H */
/* END */