< prev index next >
src/java.desktop/share/native/libfreetype/include/freetype/internal/tttypes.h
Print this page
*** 1,31 ****
! /***************************************************************************/
! /* */
! /* tttypes.h */
! /* */
! /* Basic SFNT/TrueType type definitions and interface (specification */
! /* only). */
! /* */
! /* Copyright 1996-2018 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 TTTYPES_H_
#define TTTYPES_H_
#include <ft2build.h>
#include FT_TRUETYPE_TABLES_H
#include FT_INTERNAL_OBJECTS_H
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include FT_MULTIPLE_MASTERS_H
#endif
--- 1,32 ----
! /****************************************************************************
! *
! * tttypes.h
! *
! * Basic SFNT/TrueType type definitions and interface (specification
! * only).
! *
! * Copyright (C) 1996-2019 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 TTTYPES_H_
#define TTTYPES_H_
#include <ft2build.h>
#include FT_TRUETYPE_TABLES_H
#include FT_INTERNAL_OBJECTS_H
+ #include FT_COLOR_H
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include FT_MULTIPLE_MASTERS_H
#endif
*** 44,103 ****
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TTC_HeaderRec */
! /* */
! /* <Description> */
! /* TrueType collection header. This table contains the offsets of */
! /* the font headers of each distinct TrueType face in the file. */
! /* */
! /* <Fields> */
! /* tag :: Must be `ttc ' to indicate a TrueType collection. */
! /* */
! /* version :: The version number. */
! /* */
! /* count :: The number of faces in the collection. The */
! /* specification says this should be an unsigned long, but */
! /* we use a signed long since we need the value -1 for */
! /* specific purposes. */
! /* */
! /* offsets :: The offsets of the font headers, one per face. */
! /* */
typedef struct TTC_HeaderRec_
{
FT_ULong tag;
FT_Fixed version;
FT_Long count;
FT_ULong* offsets;
} TTC_HeaderRec;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* SFNT_HeaderRec */
! /* */
! /* <Description> */
! /* SFNT file format header. */
! /* */
! /* <Fields> */
! /* format_tag :: The font format tag. */
! /* */
! /* num_tables :: The number of tables in file. */
! /* */
! /* search_range :: Must be `16 * (max power of 2 <= num_tables)'. */
! /* */
! /* entry_selector :: Must be log2 of `search_range / 16'. */
! /* */
! /* range_shift :: Must be `num_tables * 16 - search_range'. */
! /* */
typedef struct SFNT_HeaderRec_
{
FT_ULong format_tag;
FT_UShort num_tables;
FT_UShort search_range;
--- 45,112 ----
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /**************************************************************************
! *
! * @struct:
! * TTC_HeaderRec
! *
! * @description:
! * TrueType collection header. This table contains the offsets of the
! * font headers of each distinct TrueType face in the file.
! *
! * @fields:
! * tag ::
! * Must be 'ttc~' to indicate a TrueType collection.
! *
! * version ::
! * The version number.
! *
! * count ::
! * The number of faces in the collection. The specification says this
! * should be an unsigned long, but we use a signed long since we need
! * the value -1 for specific purposes.
! *
! * offsets ::
! * The offsets of the font headers, one per face.
! */
typedef struct TTC_HeaderRec_
{
FT_ULong tag;
FT_Fixed version;
FT_Long count;
FT_ULong* offsets;
} TTC_HeaderRec;
! /**************************************************************************
! *
! * @struct:
! * SFNT_HeaderRec
! *
! * @description:
! * SFNT file format header.
! *
! * @fields:
! * format_tag ::
! * The font format tag.
! *
! * num_tables ::
! * The number of tables in file.
! *
! * search_range ::
! * Must be '16 * (max power of 2 <= num_tables)'.
! *
! * entry_selector ::
! * Must be log2 of 'search_range / 16'.
! *
! * range_shift ::
! * Must be 'num_tables * 16 - search_range'.
! */
typedef struct SFNT_HeaderRec_
{
FT_ULong format_tag;
FT_UShort num_tables;
FT_UShort search_range;
*** 107,157 ****
FT_ULong offset; /* not in file */
} SFNT_HeaderRec, *SFNT_Header;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_TableRec */
! /* */
! /* <Description> */
! /* This structure describes a given table of a TrueType font. */
! /* */
! /* <Fields> */
! /* Tag :: A four-bytes tag describing the table. */
! /* */
! /* CheckSum :: The table checksum. This value can be ignored. */
! /* */
! /* Offset :: The offset of the table from the start of the TrueType */
! /* font in its resource. */
! /* */
! /* Length :: The table length (in bytes). */
! /* */
typedef struct TT_TableRec_
{
FT_ULong Tag; /* table type */
FT_ULong CheckSum; /* table checksum */
FT_ULong Offset; /* table file offset */
FT_ULong Length; /* table length */
} TT_TableRec, *TT_Table;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* WOFF_HeaderRec */
! /* */
! /* <Description> */
! /* WOFF file format header. */
! /* */
! /* <Fields> */
! /* See */
! /* */
! /* https://www.w3.org/TR/WOFF/#WOFFHeader */
! /* */
typedef struct WOFF_HeaderRec_
{
FT_ULong signature;
FT_ULong flavor;
FT_ULong length;
--- 116,170 ----
FT_ULong offset; /* not in file */
} SFNT_HeaderRec, *SFNT_Header;
! /**************************************************************************
! *
! * @struct:
! * TT_TableRec
! *
! * @description:
! * This structure describes a given table of a TrueType font.
! *
! * @fields:
! * Tag ::
! * A four-bytes tag describing the table.
! *
! * CheckSum ::
! * The table checksum. This value can be ignored.
! *
! * Offset ::
! * The offset of the table from the start of the TrueType font in its
! * resource.
! *
! * Length ::
! * The table length (in bytes).
! */
typedef struct TT_TableRec_
{
FT_ULong Tag; /* table type */
FT_ULong CheckSum; /* table checksum */
FT_ULong Offset; /* table file offset */
FT_ULong Length; /* table length */
} TT_TableRec, *TT_Table;
! /**************************************************************************
! *
! * @struct:
! * WOFF_HeaderRec
! *
! * @description:
! * WOFF file format header.
! *
! * @fields:
! * See
! *
! * https://www.w3.org/TR/WOFF/#WOFFHeader
! */
typedef struct WOFF_HeaderRec_
{
FT_ULong signature;
FT_ULong flavor;
FT_ULong length;
*** 167,200 ****
FT_ULong privLength;
} WOFF_HeaderRec, *WOFF_Header;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* WOFF_TableRec */
! /* */
! /* <Description> */
! /* This structure describes a given table of a WOFF font. */
! /* */
! /* <Fields> */
! /* Tag :: A four-bytes tag describing the table. */
! /* */
! /* Offset :: The offset of the table from the start of the WOFF */
! /* font in its resource. */
! /* */
! /* CompLength :: Compressed table length (in bytes). */
! /* */
! /* OrigLength :: Uncompressed table length (in bytes). */
! /* */
! /* CheckSum :: The table checksum. This value can be ignored. */
! /* */
! /* OrigOffset :: The uncompressed table file offset. This value gets */
! /* computed while constructing the (uncompressed) SFNT */
! /* header. It is not contained in the WOFF file. */
! /* */
typedef struct WOFF_TableRec_
{
FT_ULong Tag; /* table ID */
FT_ULong Offset; /* table file offset */
FT_ULong CompLength; /* compressed table length */
--- 180,219 ----
FT_ULong privLength;
} WOFF_HeaderRec, *WOFF_Header;
! /**************************************************************************
! *
! * @struct:
! * WOFF_TableRec
! *
! * @description:
! * This structure describes a given table of a WOFF font.
! *
! * @fields:
! * Tag ::
! * A four-bytes tag describing the table.
! *
! * Offset ::
! * The offset of the table from the start of the WOFF font in its
! * resource.
! *
! * CompLength ::
! * Compressed table length (in bytes).
! *
! * OrigLength ::
! * Uncompressed table length (in bytes).
! *
! * CheckSum ::
! * The table checksum. This value can be ignored.
! *
! * OrigOffset ::
! * The uncompressed table file offset. This value gets computed while
! * constructing the (uncompressed) SFNT header. It is not contained in
! * the WOFF file.
! */
typedef struct WOFF_TableRec_
{
FT_ULong Tag; /* table ID */
FT_ULong Offset; /* table file offset */
FT_ULong CompLength; /* compressed table length */
*** 204,274 ****
FT_ULong OrigOffset; /* uncompressed table file offset */
/* (not in the WOFF file) */
} WOFF_TableRec, *WOFF_Table;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_LongMetricsRec */
! /* */
! /* <Description> */
! /* A structure modeling the long metrics of the `hmtx' and `vmtx' */
! /* TrueType tables. The values are expressed in font units. */
! /* */
! /* <Fields> */
! /* advance :: The advance width or height for the glyph. */
! /* */
! /* bearing :: The left-side or top-side bearing for the glyph. */
! /* */
typedef struct TT_LongMetricsRec_
{
FT_UShort advance;
FT_Short bearing;
} TT_LongMetricsRec, *TT_LongMetrics;
! /*************************************************************************/
! /* */
! /* <Type> */
! /* TT_ShortMetrics */
! /* */
! /* <Description> */
! /* A simple type to model the short metrics of the `hmtx' and `vmtx' */
! /* tables. */
! /* */
typedef FT_Short TT_ShortMetrics;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_NameRec */
! /* */
! /* <Description> */
! /* A structure modeling TrueType name records. Name records are used */
! /* to store important strings like family name, style name, */
! /* copyright, etc. in _localized_ versions (i.e., language, encoding, */
! /* etc). */
! /* */
! /* <Fields> */
! /* platformID :: The ID of the name's encoding platform. */
! /* */
! /* encodingID :: The platform-specific ID for the name's encoding. */
! /* */
! /* languageID :: The platform-specific ID for the name's language. */
! /* */
! /* nameID :: The ID specifying what kind of name this is. */
! /* */
! /* stringLength :: The length of the string in bytes. */
! /* */
! /* stringOffset :: The offset to the string in the `name' table. */
! /* */
! /* string :: A pointer to the string's bytes. Note that these */
! /* are usually UTF-16 encoded characters. */
! /* */
typedef struct TT_NameRec_
{
FT_UShort platformID;
FT_UShort encodingID;
FT_UShort languageID;
--- 223,301 ----
FT_ULong OrigOffset; /* uncompressed table file offset */
/* (not in the WOFF file) */
} WOFF_TableRec, *WOFF_Table;
! /**************************************************************************
! *
! * @struct:
! * TT_LongMetricsRec
! *
! * @description:
! * A structure modeling the long metrics of the 'hmtx' and 'vmtx'
! * TrueType tables. The values are expressed in font units.
! *
! * @fields:
! * advance ::
! * The advance width or height for the glyph.
! *
! * bearing ::
! * The left-side or top-side bearing for the glyph.
! */
typedef struct TT_LongMetricsRec_
{
FT_UShort advance;
FT_Short bearing;
} TT_LongMetricsRec, *TT_LongMetrics;
! /**************************************************************************
! *
! * @type:
! * TT_ShortMetrics
! *
! * @description:
! * A simple type to model the short metrics of the 'hmtx' and 'vmtx'
! * tables.
! */
typedef FT_Short TT_ShortMetrics;
! /**************************************************************************
! *
! * @struct:
! * TT_NameRec
! *
! * @description:
! * A structure modeling TrueType name records. Name records are used to
! * store important strings like family name, style name, copyright,
! * etc. in _localized_ versions (i.e., language, encoding, etc).
! *
! * @fields:
! * platformID ::
! * The ID of the name's encoding platform.
! *
! * encodingID ::
! * The platform-specific ID for the name's encoding.
! *
! * languageID ::
! * The platform-specific ID for the name's language.
! *
! * nameID ::
! * The ID specifying what kind of name this is.
! *
! * stringLength ::
! * The length of the string in bytes.
! *
! * stringOffset ::
! * The offset to the string in the 'name' table.
! *
! * string ::
! * A pointer to the string's bytes. Note that these are usually UTF-16
! * encoded characters.
! */
typedef struct TT_NameRec_
{
FT_UShort platformID;
FT_UShort encodingID;
FT_UShort languageID;
*** 282,308 ****
FT_Byte* string;
} TT_NameRec, *TT_Name;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_LangTagRec */
! /* */
! /* <Description> */
! /* A structure modeling language tag records in SFNT `name' tables, */
! /* introduced in OpenType version 1.6. */
! /* */
! /* <Fields> */
! /* stringLength :: The length of the string in bytes. */
! /* */
! /* stringOffset :: The offset to the string in the `name' table. */
! /* */
! /* string :: A pointer to the string's bytes. Note that these */
! /* are UTF-16BE encoded characters. */
! /* */
typedef struct TT_LangTagRec_
{
FT_UShort stringLength;
FT_ULong stringOffset;
--- 309,338 ----
FT_Byte* string;
} TT_NameRec, *TT_Name;
! /**************************************************************************
! *
! * @struct:
! * TT_LangTagRec
! *
! * @description:
! * A structure modeling language tag records in SFNT 'name' tables,
! * introduced in OpenType version 1.6.
! *
! * @fields:
! * stringLength ::
! * The length of the string in bytes.
! *
! * stringOffset ::
! * The offset to the string in the 'name' table.
! *
! * string ::
! * A pointer to the string's bytes. Note that these are UTF-16BE
! * encoded characters.
! */
typedef struct TT_LangTagRec_
{
FT_UShort stringLength;
FT_ULong stringOffset;
*** 312,345 ****
FT_Byte* string;
} TT_LangTagRec, *TT_LangTag;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_NameTableRec */
! /* */
! /* <Description> */
! /* A structure modeling the TrueType name table. */
! /* */
! /* <Fields> */
! /* format :: The format of the name table. */
! /* */
! /* numNameRecords :: The number of names in table. */
! /* */
! /* storageOffset :: The offset of the name table in the `name' */
! /* TrueType table. */
! /* */
! /* names :: An array of name records. */
! /* */
! /* numLangTagRecords :: The number of language tags in table. */
! /* */
! /* langTags :: An array of language tag records. */
! /* */
! /* stream :: The file's input stream. */
! /* */
typedef struct TT_NameTableRec_
{
FT_UShort format;
FT_UInt numNameRecords;
FT_UInt storageOffset;
--- 342,381 ----
FT_Byte* string;
} TT_LangTagRec, *TT_LangTag;
! /**************************************************************************
! *
! * @struct:
! * TT_NameTableRec
! *
! * @description:
! * A structure modeling the TrueType name table.
! *
! * @fields:
! * format ::
! * The format of the name table.
! *
! * numNameRecords ::
! * The number of names in table.
! *
! * storageOffset ::
! * The offset of the name table in the 'name' TrueType table.
! *
! * names ::
! * An array of name records.
! *
! * numLangTagRecords ::
! * The number of language tags in table.
! *
! * langTags ::
! * An array of language tag records.
! *
! * stream ::
! * The file's input stream.
! */
typedef struct TT_NameTableRec_
{
FT_UShort format;
FT_UInt numNameRecords;
FT_UInt storageOffset;
*** 362,386 ****
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_GaspRangeRec */
! /* */
! /* <Description> */
! /* A tiny structure used to model a gasp range according to the */
! /* TrueType specification. */
! /* */
! /* <Fields> */
! /* maxPPEM :: The maximum ppem value to which `gaspFlag' applies. */
! /* */
! /* gaspFlag :: A flag describing the grid-fitting and anti-aliasing */
! /* modes to be used. */
! /* */
typedef struct TT_GaspRangeRec_
{
FT_UShort maxPPEM;
FT_UShort gaspFlag;
--- 398,424 ----
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /**************************************************************************
! *
! * @struct:
! * TT_GaspRangeRec
! *
! * @description:
! * A tiny structure used to model a gasp range according to the TrueType
! * specification.
! *
! * @fields:
! * maxPPEM ::
! * The maximum ppem value to which `gaspFlag` applies.
! *
! * gaspFlag ::
! * A flag describing the grid-fitting and anti-aliasing modes to be
! * used.
! */
typedef struct TT_GaspRangeRec_
{
FT_UShort maxPPEM;
FT_UShort gaspFlag;
*** 389,414 ****
#define TT_GASP_GRIDFIT 0x01
#define TT_GASP_DOGRAY 0x02
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_GaspRec */
! /* */
! /* <Description> */
! /* A structure modeling the TrueType `gasp' table used to specify */
! /* grid-fitting and anti-aliasing behaviour. */
! /* */
! /* <Fields> */
! /* version :: The version number. */
! /* */
! /* numRanges :: The number of gasp ranges in table. */
! /* */
! /* gaspRanges :: An array of gasp ranges. */
! /* */
typedef struct TT_Gasp_
{
FT_UShort version;
FT_UShort numRanges;
TT_GaspRange gaspRanges;
--- 427,455 ----
#define TT_GASP_GRIDFIT 0x01
#define TT_GASP_DOGRAY 0x02
! /**************************************************************************
! *
! * @struct:
! * TT_GaspRec
! *
! * @description:
! * A structure modeling the TrueType 'gasp' table used to specify
! * grid-fitting and anti-aliasing behaviour.
! *
! * @fields:
! * version ::
! * The version number.
! *
! * numRanges ::
! * The number of gasp ranges in table.
! *
! * gaspRanges ::
! * An array of gasp ranges.
! */
typedef struct TT_Gasp_
{
FT_UShort version;
FT_UShort numRanges;
TT_GaspRange gaspRanges;
*** 427,463 ****
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_SBit_MetricsRec */
! /* */
! /* <Description> */
! /* A structure used to hold the big metrics of a given glyph bitmap */
! /* in a TrueType or OpenType font. These are usually found in the */
! /* `EBDT' (Microsoft) or `bloc' (Apple) table. */
! /* */
! /* <Fields> */
! /* height :: The glyph height in pixels. */
! /* */
! /* width :: The glyph width in pixels. */
! /* */
! /* horiBearingX :: The horizontal left bearing. */
! /* */
! /* horiBearingY :: The horizontal top bearing. */
! /* */
! /* horiAdvance :: The horizontal advance. */
! /* */
! /* vertBearingX :: The vertical left bearing. */
! /* */
! /* vertBearingY :: The vertical top bearing. */
! /* */
! /* vertAdvance :: The vertical advance. */
! /* */
typedef struct TT_SBit_MetricsRec_
{
FT_UShort height;
FT_UShort width;
--- 468,512 ----
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /**************************************************************************
! *
! * @struct:
! * TT_SBit_MetricsRec
! *
! * @description:
! * A structure used to hold the big metrics of a given glyph bitmap in a
! * TrueType or OpenType font. These are usually found in the 'EBDT'
! * (Microsoft) or 'bloc' (Apple) table.
! *
! * @fields:
! * height ::
! * The glyph height in pixels.
! *
! * width ::
! * The glyph width in pixels.
! *
! * horiBearingX ::
! * The horizontal left bearing.
! *
! * horiBearingY ::
! * The horizontal top bearing.
! *
! * horiAdvance ::
! * The horizontal advance.
! *
! * vertBearingX ::
! * The vertical left bearing.
! *
! * vertBearingY ::
! * The vertical top bearing.
! *
! * vertAdvance ::
! * The vertical advance.
! */
typedef struct TT_SBit_MetricsRec_
{
FT_UShort height;
FT_UShort width;
*** 470,500 ****
FT_UShort vertAdvance;
} TT_SBit_MetricsRec, *TT_SBit_Metrics;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_SBit_SmallMetricsRec */
! /* */
! /* <Description> */
! /* A structure used to hold the small metrics of a given glyph bitmap */
! /* in a TrueType or OpenType font. These are usually found in the */
! /* `EBDT' (Microsoft) or the `bdat' (Apple) table. */
! /* */
! /* <Fields> */
! /* height :: The glyph height in pixels. */
! /* */
! /* width :: The glyph width in pixels. */
! /* */
! /* bearingX :: The left-side bearing. */
! /* */
! /* bearingY :: The top-side bearing. */
! /* */
! /* advance :: The advance width or height. */
! /* */
typedef struct TT_SBit_Small_Metrics_
{
FT_Byte height;
FT_Byte width;
--- 519,554 ----
FT_UShort vertAdvance;
} TT_SBit_MetricsRec, *TT_SBit_Metrics;
! /**************************************************************************
! *
! * @struct:
! * TT_SBit_SmallMetricsRec
! *
! * @description:
! * A structure used to hold the small metrics of a given glyph bitmap in
! * a TrueType or OpenType font. These are usually found in the 'EBDT'
! * (Microsoft) or the 'bdat' (Apple) table.
! *
! * @fields:
! * height ::
! * The glyph height in pixels.
! *
! * width ::
! * The glyph width in pixels.
! *
! * bearingX ::
! * The left-side bearing.
! *
! * bearingY ::
! * The top-side bearing.
! *
! * advance ::
! * The advance width or height.
! */
typedef struct TT_SBit_Small_Metrics_
{
FT_Byte height;
FT_Byte width;
*** 503,563 ****
FT_Byte advance;
} TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_SBit_LineMetricsRec */
! /* */
! /* <Description> */
! /* A structure used to describe the text line metrics of a given */
! /* bitmap strike, for either a horizontal or vertical layout. */
! /* */
! /* <Fields> */
! /* ascender :: The ascender in pixels. */
! /* */
! /* descender :: The descender in pixels. */
! /* */
! /* max_width :: The maximum glyph width in pixels. */
! /* */
! /* caret_slope_enumerator :: Rise of the caret slope, typically set */
! /* to 1 for non-italic fonts. */
! /* */
! /* caret_slope_denominator :: Rise of the caret slope, typically set */
! /* to 0 for non-italic fonts. */
! /* */
! /* caret_offset :: Offset in pixels to move the caret for */
! /* proper positioning. */
! /* */
! /* min_origin_SB :: Minimum of horiBearingX (resp. */
! /* vertBearingY). */
! /* min_advance_SB :: Minimum of */
! /* */
! /* horizontal advance - */
! /* ( horiBearingX + width ) */
! /* */
! /* resp. */
! /* */
! /* vertical advance - */
! /* ( vertBearingY + height ) */
! /* */
! /* max_before_BL :: Maximum of horiBearingY (resp. */
! /* vertBearingY). */
! /* */
! /* min_after_BL :: Minimum of */
! /* */
! /* horiBearingY - height */
! /* */
! /* resp. */
! /* */
! /* vertBearingX - width */
! /* */
! /* pads :: Unused (to make the size of the record */
! /* a multiple of 32 bits. */
! /* */
typedef struct TT_SBit_LineMetricsRec_
{
FT_Char ascender;
FT_Char descender;
FT_Byte max_width;
--- 557,620 ----
FT_Byte advance;
} TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics;
! /**************************************************************************
! *
! * @struct:
! * TT_SBit_LineMetricsRec
! *
! * @description:
! * A structure used to describe the text line metrics of a given bitmap
! * strike, for either a horizontal or vertical layout.
! *
! * @fields:
! * ascender ::
! * The ascender in pixels.
! *
! * descender ::
! * The descender in pixels.
! *
! * max_width ::
! * The maximum glyph width in pixels.
! *
! * caret_slope_enumerator ::
! * Rise of the caret slope, typically set to 1 for non-italic fonts.
! *
! * caret_slope_denominator ::
! * Rise of the caret slope, typically set to 0 for non-italic fonts.
! *
! * caret_offset ::
! * Offset in pixels to move the caret for proper positioning.
! *
! * min_origin_SB ::
! * Minimum of horiBearingX (resp. vertBearingY).
! * min_advance_SB ::
! * Minimum of
! *
! * horizontal advance - ( horiBearingX + width )
! *
! * resp.
! *
! * vertical advance - ( vertBearingY + height )
! *
! * max_before_BL ::
! * Maximum of horiBearingY (resp. vertBearingY).
! *
! * min_after_BL ::
! * Minimum of
! *
! * horiBearingY - height
! *
! * resp.
! *
! * vertBearingX - width
! *
! * pads ::
! * Unused (to make the size of the record a multiple of 32 bits.
! */
typedef struct TT_SBit_LineMetricsRec_
{
FT_Char ascender;
FT_Char descender;
FT_Byte max_width;
*** 571,617 ****
FT_Char pads[2];
} TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_SBit_RangeRec */
! /* */
! /* <Description> */
! /* A TrueType/OpenType subIndexTable as defined in the `EBLC' */
! /* (Microsoft) or `bloc' (Apple) tables. */
! /* */
! /* <Fields> */
! /* first_glyph :: The first glyph index in the range. */
! /* */
! /* last_glyph :: The last glyph index in the range. */
! /* */
! /* index_format :: The format of index table. Valid values are 1 */
! /* to 5. */
! /* */
! /* image_format :: The format of `EBDT' image data. */
! /* */
! /* image_offset :: The offset to image data in `EBDT'. */
! /* */
! /* image_size :: For index formats 2 and 5. This is the size in */
! /* bytes of each glyph bitmap. */
! /* */
! /* big_metrics :: For index formats 2 and 5. This is the big */
! /* metrics for each glyph bitmap. */
! /* */
! /* num_glyphs :: For index formats 4 and 5. This is the number of */
! /* glyphs in the code array. */
! /* */
! /* glyph_offsets :: For index formats 1 and 3. */
! /* */
! /* glyph_codes :: For index formats 4 and 5. */
! /* */
! /* table_offset :: The offset of the index table in the `EBLC' */
! /* table. Only used during strike loading. */
! /* */
typedef struct TT_SBit_RangeRec_
{
FT_UShort first_glyph;
FT_UShort last_glyph;
--- 628,684 ----
FT_Char pads[2];
} TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics;
! /**************************************************************************
! *
! * @struct:
! * TT_SBit_RangeRec
! *
! * @description:
! * A TrueType/OpenType subIndexTable as defined in the 'EBLC' (Microsoft)
! * or 'bloc' (Apple) tables.
! *
! * @fields:
! * first_glyph ::
! * The first glyph index in the range.
! *
! * last_glyph ::
! * The last glyph index in the range.
! *
! * index_format ::
! * The format of index table. Valid values are 1 to 5.
! *
! * image_format ::
! * The format of 'EBDT' image data.
! *
! * image_offset ::
! * The offset to image data in 'EBDT'.
! *
! * image_size ::
! * For index formats 2 and 5. This is the size in bytes of each glyph
! * bitmap.
! *
! * big_metrics ::
! * For index formats 2 and 5. This is the big metrics for each glyph
! * bitmap.
! *
! * num_glyphs ::
! * For index formats 4 and 5. This is the number of glyphs in the code
! * array.
! *
! * glyph_offsets ::
! * For index formats 1 and 3.
! *
! * glyph_codes ::
! * For index formats 4 and 5.
! *
! * table_offset ::
! * The offset of the index table in the 'EBLC' table. Only used during
! * strike loading.
! */
typedef struct TT_SBit_RangeRec_
{
FT_UShort first_glyph;
FT_UShort last_glyph;
*** 629,679 ****
FT_ULong table_offset;
} TT_SBit_RangeRec, *TT_SBit_Range;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_SBit_StrikeRec */
! /* */
! /* <Description> */
! /* A structure used describe a given bitmap strike in the `EBLC' */
! /* (Microsoft) or `bloc' (Apple) tables. */
! /* */
! /* <Fields> */
! /* num_index_ranges :: The number of index ranges. */
! /* */
! /* index_ranges :: An array of glyph index ranges. */
! /* */
! /* color_ref :: Unused. `color_ref' is put in for future */
! /* enhancements, but these fields are already */
! /* in use by other platforms (e.g. Newton). */
! /* For details, please see */
! /* */
! /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
! /* */
! /* hori :: The line metrics for horizontal layouts. */
! /* */
! /* vert :: The line metrics for vertical layouts. */
! /* */
! /* start_glyph :: The lowest glyph index for this strike. */
! /* */
! /* end_glyph :: The highest glyph index for this strike. */
! /* */
! /* x_ppem :: The number of horizontal pixels per EM. */
! /* */
! /* y_ppem :: The number of vertical pixels per EM. */
! /* */
! /* bit_depth :: The bit depth. Valid values are 1, 2, 4, */
! /* and 8. */
! /* */
! /* flags :: Is this a vertical or horizontal strike? For */
! /* details, please see */
! /* */
! /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
! /* */
typedef struct TT_SBit_StrikeRec_
{
FT_Int num_ranges;
TT_SBit_Range sbit_ranges;
FT_ULong ranges_offset;
--- 696,754 ----
FT_ULong table_offset;
} TT_SBit_RangeRec, *TT_SBit_Range;
! /**************************************************************************
! *
! * @struct:
! * TT_SBit_StrikeRec
! *
! * @description:
! * A structure used describe a given bitmap strike in the 'EBLC'
! * (Microsoft) or 'bloc' (Apple) tables.
! *
! * @fields:
! * num_index_ranges ::
! * The number of index ranges.
! *
! * index_ranges ::
! * An array of glyph index ranges.
! *
! * color_ref ::
! * Unused. `color_ref` is put in for future enhancements, but these
! * fields are already in use by other platforms (e.g. Newton). For
! * details, please see
! *
! * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
! *
! * hori ::
! * The line metrics for horizontal layouts.
! *
! * vert ::
! * The line metrics for vertical layouts.
! *
! * start_glyph ::
! * The lowest glyph index for this strike.
! *
! * end_glyph ::
! * The highest glyph index for this strike.
! *
! * x_ppem ::
! * The number of horizontal pixels per EM.
! *
! * y_ppem ::
! * The number of vertical pixels per EM.
! *
! * bit_depth ::
! * The bit depth. Valid values are 1, 2, 4, and 8.
! *
! * flags ::
! * Is this a vertical or horizontal strike? For details, please see
! *
! * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
! */
typedef struct TT_SBit_StrikeRec_
{
FT_Int num_ranges;
TT_SBit_Range sbit_ranges;
FT_ULong ranges_offset;
*** 693,748 ****
FT_Char flags;
} TT_SBit_StrikeRec, *TT_SBit_Strike;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_SBit_ComponentRec */
! /* */
! /* <Description> */
! /* A simple structure to describe a compound sbit element. */
! /* */
! /* <Fields> */
! /* glyph_code :: The element's glyph index. */
! /* */
! /* x_offset :: The element's left bearing. */
! /* */
! /* y_offset :: The element's top bearing. */
! /* */
typedef struct TT_SBit_ComponentRec_
{
FT_UShort glyph_code;
FT_Char x_offset;
FT_Char y_offset;
} TT_SBit_ComponentRec, *TT_SBit_Component;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_SBit_ScaleRec */
! /* */
! /* <Description> */
! /* A structure used describe a given bitmap scaling table, as defined */
! /* in the `EBSC' table. */
! /* */
! /* <Fields> */
! /* hori :: The horizontal line metrics. */
! /* */
! /* vert :: The vertical line metrics. */
! /* */
! /* x_ppem :: The number of horizontal pixels per EM. */
! /* */
! /* y_ppem :: The number of vertical pixels per EM. */
! /* */
! /* x_ppem_substitute :: Substitution x_ppem value. */
! /* */
! /* y_ppem_substitute :: Substitution y_ppem value. */
! /* */
typedef struct TT_SBit_ScaleRec_
{
TT_SBit_LineMetricsRec hori;
TT_SBit_LineMetricsRec vert;
--- 768,832 ----
FT_Char flags;
} TT_SBit_StrikeRec, *TT_SBit_Strike;
! /**************************************************************************
! *
! * @struct:
! * TT_SBit_ComponentRec
! *
! * @description:
! * A simple structure to describe a compound sbit element.
! *
! * @fields:
! * glyph_code ::
! * The element's glyph index.
! *
! * x_offset ::
! * The element's left bearing.
! *
! * y_offset ::
! * The element's top bearing.
! */
typedef struct TT_SBit_ComponentRec_
{
FT_UShort glyph_code;
FT_Char x_offset;
FT_Char y_offset;
} TT_SBit_ComponentRec, *TT_SBit_Component;
! /**************************************************************************
! *
! * @struct:
! * TT_SBit_ScaleRec
! *
! * @description:
! * A structure used describe a given bitmap scaling table, as defined in
! * the 'EBSC' table.
! *
! * @fields:
! * hori ::
! * The horizontal line metrics.
! *
! * vert ::
! * The vertical line metrics.
! *
! * x_ppem ::
! * The number of horizontal pixels per EM.
! *
! * y_ppem ::
! * The number of vertical pixels per EM.
! *
! * x_ppem_substitute ::
! * Substitution x_ppem value.
! *
! * y_ppem_substitute ::
! * Substitution y_ppem value.
! */
typedef struct TT_SBit_ScaleRec_
{
TT_SBit_LineMetricsRec hori;
TT_SBit_LineMetricsRec vert;
*** 766,841 ****
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_Post_20Rec */
! /* */
! /* <Description> */
! /* Postscript names sub-table, format 2.0. Stores the PS name of */
! /* each glyph in the font face. */
! /* */
! /* <Fields> */
! /* num_glyphs :: The number of named glyphs in the table. */
! /* */
! /* num_names :: The number of PS names stored in the table. */
! /* */
! /* glyph_indices :: The indices of the glyphs in the names arrays. */
! /* */
! /* glyph_names :: The PS names not in Mac Encoding. */
! /* */
typedef struct TT_Post_20Rec_
{
FT_UShort num_glyphs;
FT_UShort num_names;
FT_UShort* glyph_indices;
FT_Char** glyph_names;
} TT_Post_20Rec, *TT_Post_20;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_Post_25Rec */
! /* */
! /* <Description> */
! /* Postscript names sub-table, format 2.5. Stores the PS name of */
! /* each glyph in the font face. */
! /* */
! /* <Fields> */
! /* num_glyphs :: The number of glyphs in the table. */
! /* */
! /* offsets :: An array of signed offsets in a normal Mac */
! /* Postscript name encoding. */
! /* */
typedef struct TT_Post_25_
{
FT_UShort num_glyphs;
FT_Char* offsets;
} TT_Post_25Rec, *TT_Post_25;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_Post_NamesRec */
! /* */
! /* <Description> */
! /* Postscript names table, either format 2.0 or 2.5. */
! /* */
! /* <Fields> */
! /* loaded :: A flag to indicate whether the PS names are loaded. */
! /* */
! /* format_20 :: The sub-table used for format 2.0. */
! /* */
! /* format_25 :: The sub-table used for format 2.5. */
! /* */
typedef struct TT_Post_NamesRec_
{
FT_Bool loaded;
union
--- 850,933 ----
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /**************************************************************************
! *
! * @struct:
! * TT_Post_20Rec
! *
! * @description:
! * Postscript names sub-table, format 2.0. Stores the PS name of each
! * glyph in the font face.
! *
! * @fields:
! * num_glyphs ::
! * The number of named glyphs in the table.
! *
! * num_names ::
! * The number of PS names stored in the table.
! *
! * glyph_indices ::
! * The indices of the glyphs in the names arrays.
! *
! * glyph_names ::
! * The PS names not in Mac Encoding.
! */
typedef struct TT_Post_20Rec_
{
FT_UShort num_glyphs;
FT_UShort num_names;
FT_UShort* glyph_indices;
FT_Char** glyph_names;
} TT_Post_20Rec, *TT_Post_20;
! /**************************************************************************
! *
! * @struct:
! * TT_Post_25Rec
! *
! * @description:
! * Postscript names sub-table, format 2.5. Stores the PS name of each
! * glyph in the font face.
! *
! * @fields:
! * num_glyphs ::
! * The number of glyphs in the table.
! *
! * offsets ::
! * An array of signed offsets in a normal Mac Postscript name encoding.
! */
typedef struct TT_Post_25_
{
FT_UShort num_glyphs;
FT_Char* offsets;
} TT_Post_25Rec, *TT_Post_25;
! /**************************************************************************
! *
! * @struct:
! * TT_Post_NamesRec
! *
! * @description:
! * Postscript names table, either format 2.0 or 2.5.
! *
! * @fields:
! * loaded ::
! * A flag to indicate whether the PS names are loaded.
! *
! * format_20 ::
! * The sub-table used for format 2.0.
! *
! * format_25 ::
! * The sub-table used for format 2.5.
! */
typedef struct TT_Post_NamesRec_
{
FT_Bool loaded;
union
*** 877,905 ****
/*************************************************************************/
/*************************************************************************/
/*
* These types are used to support a `BDF ' table that isn't part of the
! * official TrueType specification. It is mainly used in SFNT-based
! * bitmap fonts that were generated from a set of BDF fonts.
*
* The format of the table is as follows.
*
! * USHORT version `BDF ' table version number, should be 0x0001.
! * USHORT strikeCount Number of strikes (bitmap sizes) in this table.
! * ULONG stringTable Offset (from start of BDF table) to string
* table.
*
* This is followed by an array of `strikeCount' descriptors, having the
* following format.
*
! * USHORT ppem Vertical pixels per EM for this strike.
! * USHORT numItems Number of items for this strike (properties and
* atoms). Maximum is 255.
*
! * This array in turn is followed by `strikeCount' value sets. Each
! * `value set' is an array of `numItems' items with the following format.
*
* ULONG item_name Offset in string table to item name.
* USHORT item_type The item type. Possible values are
* 0 => string (e.g., COMMENT)
* 1 => atom (e.g., FONT or even SIZE)
--- 969,997 ----
/*************************************************************************/
/*************************************************************************/
/*
* These types are used to support a `BDF ' table that isn't part of the
! * official TrueType specification. It is mainly used in SFNT-based bitmap
! * fonts that were generated from a set of BDF fonts.
*
* The format of the table is as follows.
*
! * USHORT version `BDF ' table version number, should be 0x0001. USHORT
! * strikeCount Number of strikes (bitmap sizes) in this table. ULONG
! * stringTable Offset (from start of BDF table) to string
* table.
*
* This is followed by an array of `strikeCount' descriptors, having the
* following format.
*
! * USHORT ppem Vertical pixels per EM for this strike. USHORT numItems
! * Number of items for this strike (properties and
* atoms). Maximum is 255.
*
! * This array in turn is followed by `strikeCount' value sets. Each `value
! * set' is an array of `numItems' items with the following format.
*
* ULONG item_name Offset in string table to item name.
* USHORT item_type The item type. Possible values are
* 0 => string (e.g., COMMENT)
* 1 => atom (e.g., FONT or even SIZE)
*** 943,977 ****
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /*************************************************************************/
! /* */
! /* This structure/class is defined here because it is common to the */
! /* following formats: TTF, OpenType-TT, and OpenType-CFF. */
! /* */
! /* Note, however, that the classes TT_Size and TT_GlyphSlot are not */
! /* shared between font drivers, and are thus defined in `ttobjs.h'. */
! /* */
! /*************************************************************************/
! /*************************************************************************/
! /* */
! /* <Type> */
! /* TT_Face */
! /* */
! /* <Description> */
! /* A handle to a TrueType face/font object. A TT_Face encapsulates */
! /* the resolution and scaling independent parts of a TrueType font */
! /* resource. */
! /* */
! /* <Note> */
! /* The TT_Face structure is also used as a `parent class' for the */
! /* OpenType-CFF class (T2_Face). */
! /* */
typedef struct TT_FaceRec_* TT_Face;
/* a function type used for the truetype bytecode interpreter hooks */
typedef FT_Error
--- 1035,1068 ----
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
! /**************************************************************************
! *
! * This structure/class is defined here because it is common to the
! * following formats: TTF, OpenType-TT, and OpenType-CFF.
! *
! * Note, however, that the classes TT_Size and TT_GlyphSlot are not shared
! * between font drivers, and are thus defined in `ttobjs.h`.
! *
! */
! /**************************************************************************
! *
! * @type:
! * TT_Face
! *
! * @description:
! * A handle to a TrueType face/font object. A TT_Face encapsulates the
! * resolution and scaling independent parts of a TrueType font resource.
! *
! * @note:
! * The TT_Face structure is also used as a 'parent class' for the
! * OpenType-CFF class (T2_Face).
! */
typedef struct TT_FaceRec_* TT_Face;
/* a function type used for the truetype bytecode interpreter hooks */
typedef FT_Error
*** 979,1085 ****
/* forward declaration */
typedef struct TT_LoaderRec_* TT_Loader;
! /*************************************************************************/
! /* */
! /* <FuncType> */
! /* TT_Loader_GotoTableFunc */
! /* */
! /* <Description> */
! /* Seeks a stream to the start of a given TrueType table. */
! /* */
! /* <Input> */
! /* face :: A handle to the target face object. */
! /* */
! /* tag :: A 4-byte tag used to name the table. */
! /* */
! /* stream :: The input stream. */
! /* */
! /* <Output> */
! /* length :: The length of the table in bytes. Set to 0 if not */
! /* needed. */
! /* */
! /* <Return> */
! /* FreeType error code. 0 means success. */
! /* */
! /* <Note> */
! /* The stream cursor must be at the font file's origin. */
! /* */
typedef FT_Error
(*TT_Loader_GotoTableFunc)( TT_Face face,
FT_ULong tag,
FT_Stream stream,
FT_ULong* length );
! /*************************************************************************/
! /* */
! /* <FuncType> */
! /* TT_Loader_StartGlyphFunc */
! /* */
! /* <Description> */
! /* Seeks a stream to the start of a given glyph element, and opens a */
! /* frame for it. */
! /* */
! /* <Input> */
! /* loader :: The current TrueType glyph loader object. */
! /* */
! /* glyph index :: The index of the glyph to access. */
! /* */
! /* offset :: The offset of the glyph according to the */
! /* `locations' table. */
! /* */
! /* byte_count :: The size of the frame in bytes. */
! /* */
! /* <Return> */
! /* FreeType error code. 0 means success. */
! /* */
! /* <Note> */
! /* This function is normally equivalent to FT_STREAM_SEEK(offset) */
! /* followed by FT_FRAME_ENTER(byte_count) with the loader's stream, */
! /* but alternative formats (e.g. compressed ones) might use something */
! /* different. */
! /* */
typedef FT_Error
(*TT_Loader_StartGlyphFunc)( TT_Loader loader,
FT_UInt glyph_index,
FT_ULong offset,
FT_UInt byte_count );
! /*************************************************************************/
! /* */
! /* <FuncType> */
! /* TT_Loader_ReadGlyphFunc */
! /* */
! /* <Description> */
! /* Reads one glyph element (its header, a simple glyph, or a */
! /* composite) from the loader's current stream frame. */
! /* */
! /* <Input> */
! /* loader :: The current TrueType glyph loader object. */
! /* */
! /* <Return> */
! /* FreeType error code. 0 means success. */
! /* */
typedef FT_Error
(*TT_Loader_ReadGlyphFunc)( TT_Loader loader );
! /*************************************************************************/
! /* */
! /* <FuncType> */
! /* TT_Loader_EndGlyphFunc */
! /* */
! /* <Description> */
! /* Closes the current loader stream frame for the glyph. */
! /* */
! /* <Input> */
! /* loader :: The current TrueType glyph loader object. */
! /* */
typedef void
(*TT_Loader_EndGlyphFunc)( TT_Loader loader );
typedef enum TT_SbitTableType_
--- 1070,1183 ----
/* forward declaration */
typedef struct TT_LoaderRec_* TT_Loader;
! /**************************************************************************
! *
! * @functype:
! * TT_Loader_GotoTableFunc
! *
! * @description:
! * Seeks a stream to the start of a given TrueType table.
! *
! * @input:
! * face ::
! * A handle to the target face object.
! *
! * tag ::
! * A 4-byte tag used to name the table.
! *
! * stream ::
! * The input stream.
! *
! * @output:
! * length ::
! * The length of the table in bytes. Set to 0 if not needed.
! *
! * @return:
! * FreeType error code. 0 means success.
! *
! * @note:
! * The stream cursor must be at the font file's origin.
! */
typedef FT_Error
(*TT_Loader_GotoTableFunc)( TT_Face face,
FT_ULong tag,
FT_Stream stream,
FT_ULong* length );
! /**************************************************************************
! *
! * @functype:
! * TT_Loader_StartGlyphFunc
! *
! * @description:
! * Seeks a stream to the start of a given glyph element, and opens a
! * frame for it.
! *
! * @input:
! * loader ::
! * The current TrueType glyph loader object.
! *
! * glyph index :: The index of the glyph to access.
! *
! * offset ::
! * The offset of the glyph according to the 'locations' table.
! *
! * byte_count ::
! * The size of the frame in bytes.
! *
! * @return:
! * FreeType error code. 0 means success.
! *
! * @note:
! * This function is normally equivalent to FT_STREAM_SEEK(offset)
! * followed by FT_FRAME_ENTER(byte_count) with the loader's stream, but
! * alternative formats (e.g. compressed ones) might use something
! * different.
! */
typedef FT_Error
(*TT_Loader_StartGlyphFunc)( TT_Loader loader,
FT_UInt glyph_index,
FT_ULong offset,
FT_UInt byte_count );
! /**************************************************************************
! *
! * @functype:
! * TT_Loader_ReadGlyphFunc
! *
! * @description:
! * Reads one glyph element (its header, a simple glyph, or a composite)
! * from the loader's current stream frame.
! *
! * @input:
! * loader ::
! * The current TrueType glyph loader object.
! *
! * @return:
! * FreeType error code. 0 means success.
! */
typedef FT_Error
(*TT_Loader_ReadGlyphFunc)( TT_Loader loader );
! /**************************************************************************
! *
! * @functype:
! * TT_Loader_EndGlyphFunc
! *
! * @description:
! * Closes the current loader stream frame for the glyph.
! *
! * @input:
! * loader ::
! * The current TrueType glyph loader object.
! */
typedef void
(*TT_Loader_EndGlyphFunc)( TT_Loader loader );
typedef enum TT_SbitTableType_
*** 1122,1395 ****
/* MVAR */
#define TT_FACE_FLAG_VAR_MVAR ( 1 << 8 )
! /*************************************************************************/
! /* */
! /* TrueType Face Type */
! /* */
! /* <Struct> */
! /* TT_Face */
! /* */
! /* <Description> */
! /* The TrueType face class. These objects model the resolution and */
! /* point-size independent data found in a TrueType font file. */
! /* */
! /* <Fields> */
! /* root :: The base FT_Face structure, managed by the */
! /* base layer. */
! /* */
! /* ttc_header :: The TrueType collection header, used when */
! /* the file is a `ttc' rather than a `ttf'. */
! /* For ordinary font files, the field */
! /* `ttc_header.count' is set to 0. */
! /* */
! /* format_tag :: The font format tag. */
! /* */
! /* num_tables :: The number of TrueType tables in this font */
! /* file. */
! /* */
! /* dir_tables :: The directory of TrueType tables for this */
! /* font file. */
! /* */
! /* header :: The font's font header (`head' table). */
! /* Read on font opening. */
! /* */
! /* horizontal :: The font's horizontal header (`hhea' */
! /* table). This field also contains the */
! /* associated horizontal metrics table */
! /* (`hmtx'). */
! /* */
! /* max_profile :: The font's maximum profile table. Read on */
! /* font opening. Note that some maximum */
! /* values cannot be taken directly from this */
! /* table. We thus define additional fields */
! /* below to hold the computed maxima. */
! /* */
! /* vertical_info :: A boolean which is set when the font file */
! /* contains vertical metrics. If not, the */
! /* value of the `vertical' field is */
! /* undefined. */
! /* */
! /* vertical :: The font's vertical header (`vhea' table). */
! /* This field also contains the associated */
! /* vertical metrics table (`vmtx'), if found. */
! /* IMPORTANT: The contents of this field is */
! /* undefined if the `vertical_info' field is */
! /* unset. */
! /* */
! /* num_names :: The number of name records within this */
! /* TrueType font. */
! /* */
! /* name_table :: The table of name records (`name'). */
! /* */
! /* os2 :: The font's OS/2 table (`OS/2'). */
! /* */
! /* postscript :: The font's PostScript table (`post' */
! /* table). The PostScript glyph names are */
! /* not loaded by the driver on face opening. */
! /* See the `ttpost' module for more details. */
! /* */
! /* cmap_table :: Address of the face's `cmap' SFNT table */
! /* in memory (it's an extracted frame). */
! /* */
! /* cmap_size :: The size in bytes of the `cmap_table' */
! /* described above. */
! /* */
! /* goto_table :: A function called by each TrueType table */
! /* loader to position a stream's cursor to */
! /* the start of a given table according to */
! /* its tag. It defaults to TT_Goto_Face but */
! /* can be different for strange formats (e.g. */
! /* Type 42). */
! /* */
! /* access_glyph_frame :: A function used to access the frame of a */
! /* given glyph within the face's font file. */
! /* */
! /* forget_glyph_frame :: A function used to forget the frame of a */
! /* given glyph when all data has been loaded. */
! /* */
! /* read_glyph_header :: A function used to read a glyph header. */
! /* It must be called between an `access' and */
! /* `forget'. */
! /* */
! /* read_simple_glyph :: A function used to read a simple glyph. */
! /* It must be called after the header was */
! /* read, and before the `forget'. */
! /* */
! /* read_composite_glyph :: A function used to read a composite glyph. */
! /* It must be called after the header was */
! /* read, and before the `forget'. */
! /* */
! /* sfnt :: A pointer to the SFNT service. */
! /* */
! /* psnames :: A pointer to the PostScript names service. */
! /* */
! /* mm :: A pointer to the Multiple Masters service. */
! /* */
! /* var :: A pointer to the Metrics Variations */
! /* service. */
! /* */
! /* hdmx :: The face's horizontal device metrics */
! /* (`hdmx' table). This table is optional in */
! /* TrueType/OpenType fonts. */
! /* */
! /* gasp :: The grid-fitting and scaling properties */
! /* table (`gasp'). This table is optional in */
! /* TrueType/OpenType fonts. */
! /* */
! /* pclt :: The `pclt' SFNT table. */
! /* */
! /* num_sbit_scales :: The number of sbit scales for this font. */
! /* */
! /* sbit_scales :: Array of sbit scales embedded in this */
! /* font. This table is optional in a */
! /* TrueType/OpenType font. */
! /* */
! /* postscript_names :: A table used to store the Postscript names */
! /* of the glyphs for this font. See the */
! /* file `ttconfig.h' for comments on the */
! /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES option. */
! /* */
! /* font_program_size :: Size in bytecodes of the face's font */
! /* program. 0 if none defined. Ignored for */
! /* Type 2 fonts. */
! /* */
! /* font_program :: The face's font program (bytecode stream) */
! /* executed at load time, also used during */
! /* glyph rendering. Comes from the `fpgm' */
! /* table. Ignored for Type 2 font fonts. */
! /* */
! /* cvt_program_size :: The size in bytecodes of the face's cvt */
! /* program. Ignored for Type 2 fonts. */
! /* */
! /* cvt_program :: The face's cvt program (bytecode stream) */
! /* executed each time an instance/size is */
! /* changed/reset. Comes from the `prep' */
! /* table. Ignored for Type 2 fonts. */
! /* */
! /* cvt_size :: Size of the control value table (in */
! /* entries). Ignored for Type 2 fonts. */
! /* */
! /* cvt :: The face's original control value table. */
! /* Coordinates are expressed in unscaled font */
! /* units. Comes from the `cvt ' table. */
! /* Ignored for Type 2 fonts. */
! /* */
! /* interpreter :: A pointer to the TrueType bytecode */
! /* interpreters field is also used to hook */
! /* the debugger in `ttdebug'. */
! /* */
! /* extra :: Reserved for third-party font drivers. */
! /* */
! /* postscript_name :: The PS name of the font. Used by the */
! /* postscript name service. */
! /* */
! /* glyf_len :: The length of the `glyf' table. Needed */
! /* for malformed `loca' tables. */
! /* */
! /* glyf_offset :: The file offset of the `glyf' table. */
! /* */
! /* is_cff2 :: Set if the font format is CFF2. */
! /* */
! /* doblend :: A boolean which is set if the font should */
! /* be blended (this is for GX var). */
! /* */
! /* blend :: Contains the data needed to control GX */
! /* variation tables (rather like Multiple */
! /* Master data). */
! /* */
! /* variation_support :: Flags that indicate which OpenType */
! /* functionality related to font variation */
! /* support is present, valid, and usable. */
! /* For example, TT_FACE_FLAG_VAR_FVAR is only */
! /* set if we have at least one design axis. */
! /* */
! /* var_postscript_prefix :: */
! /* The PostScript name prefix needed for */
! /* constructing a variation font instance's */
! /* PS name . */
! /* */
! /* var_postscript_prefix_len :: */
! /* The length of the `var_postscript_prefix' */
! /* string. */
! /* */
! /* horz_metrics_size :: The size of the `hmtx' table. */
! /* */
! /* vert_metrics_size :: The size of the `vmtx' table. */
! /* */
! /* num_locations :: The number of glyph locations in this */
! /* TrueType file. This should be */
! /* identical to the number of glyphs. */
! /* Ignored for Type 2 fonts. */
! /* */
! /* glyph_locations :: An array of longs. These are offsets to */
! /* glyph data within the `glyf' table. */
! /* Ignored for Type 2 font faces. */
! /* */
! /* hdmx_table :: A pointer to the `hdmx' table. */
! /* */
! /* hdmx_table_size :: The size of the `hdmx' table. */
! /* */
! /* hdmx_record_count :: The number of hdmx records. */
! /* */
! /* hdmx_record_size :: The size of a single hdmx record. */
! /* */
! /* hdmx_record_sizes :: An array holding the ppem sizes available */
! /* in the `hdmx' table. */
! /* */
! /* sbit_table :: A pointer to the font's embedded bitmap */
! /* location table. */
! /* */
! /* sbit_table_size :: The size of `sbit_table'. */
! /* */
! /* sbit_table_type :: The sbit table type (CBLC, sbix, etc.). */
! /* */
! /* sbit_num_strikes :: The number of sbit strikes exposed by */
! /* FreeType's API, omitting invalid strikes. */
! /* */
! /* sbit_strike_map :: A mapping between the strike indices */
! /* exposed by the API and the indices used in */
! /* the font's sbit table. */
! /* */
! /* kern_table :: A pointer to the `kern' table. */
! /* */
! /* kern_table_size :: The size of the `kern' table. */
! /* */
! /* num_kern_tables :: The number of supported kern subtables */
! /* (up to 32; FreeType recognizes only */
! /* horizontal ones with format 0). */
! /* */
! /* kern_avail_bits :: The availability status of kern subtables; */
! /* if bit n is set, table n is available. */
! /* */
! /* kern_order_bits :: The sortedness status of kern subtables; */
! /* if bit n is set, table n is sorted. */
! /* */
! /* bdf :: Data related to an SFNT font's `bdf' */
! /* table; see `tttypes.h'. */
! /* */
! /* horz_metrics_offset :: The file offset of the `hmtx' table. */
! /* */
! /* vert_metrics_offset :: The file offset of the `vmtx' table. */
! /* */
! /* sph_found_func_flags :: Flags identifying special bytecode */
! /* functions (used by the v38 implementation */
! /* of the bytecode interpreter). */
! /* */
! /* sph_compatibility_mode :: */
! /* This flag is set if we are in ClearType */
! /* backward compatibility mode (used by the */
! /* v38 implementation of the bytecode */
! /* interpreter). */
! /* */
! /* ebdt_start :: The file offset of the sbit data table */
! /* (CBDT, bdat, etc.). */
! /* */
! /* ebdt_size :: The size of the sbit data table. */
! /* */
typedef struct TT_FaceRec_
{
FT_FaceRec root;
TTC_HeaderRec ttc_header;
--- 1220,1540 ----
/* MVAR */
#define TT_FACE_FLAG_VAR_MVAR ( 1 << 8 )
! /**************************************************************************
! *
! * TrueType Face Type
! *
! * @struct:
! * TT_Face
! *
! * @description:
! * The TrueType face class. These objects model the resolution and
! * point-size independent data found in a TrueType font file.
! *
! * @fields:
! * root ::
! * The base FT_Face structure, managed by the base layer.
! *
! * ttc_header ::
! * The TrueType collection header, used when the file is a 'ttc' rather
! * than a 'ttf'. For ordinary font files, the field `ttc_header.count`
! * is set to 0.
! *
! * format_tag ::
! * The font format tag.
! *
! * num_tables ::
! * The number of TrueType tables in this font file.
! *
! * dir_tables ::
! * The directory of TrueType tables for this font file.
! *
! * header ::
! * The font's font header ('head' table). Read on font opening.
! *
! * horizontal ::
! * The font's horizontal header ('hhea' table). This field also
! * contains the associated horizontal metrics table ('hmtx').
! *
! * max_profile ::
! * The font's maximum profile table. Read on font opening. Note that
! * some maximum values cannot be taken directly from this table. We
! * thus define additional fields below to hold the computed maxima.
! *
! * vertical_info ::
! * A boolean which is set when the font file contains vertical metrics.
! * If not, the value of the 'vertical' field is undefined.
! *
! * vertical ::
! * The font's vertical header ('vhea' table). This field also contains
! * the associated vertical metrics table ('vmtx'), if found.
! * IMPORTANT: The contents of this field is undefined if the
! * `vertical_info` field is unset.
! *
! * num_names ::
! * The number of name records within this TrueType font.
! *
! * name_table ::
! * The table of name records ('name').
! *
! * os2 ::
! * The font's OS/2 table ('OS/2').
! *
! * postscript ::
! * The font's PostScript table ('post' table). The PostScript glyph
! * names are not loaded by the driver on face opening. See the
! * 'ttpost' module for more details.
! *
! * cmap_table ::
! * Address of the face's 'cmap' SFNT table in memory (it's an extracted
! * frame).
! *
! * cmap_size ::
! * The size in bytes of the `cmap_table` described above.
! *
! * goto_table ::
! * A function called by each TrueType table loader to position a
! * stream's cursor to the start of a given table according to its tag.
! * It defaults to TT_Goto_Face but can be different for strange formats
! * (e.g. Type 42).
! *
! * access_glyph_frame ::
! * A function used to access the frame of a given glyph within the
! * face's font file.
! *
! * forget_glyph_frame ::
! * A function used to forget the frame of a given glyph when all data
! * has been loaded.
! *
! * read_glyph_header ::
! * A function used to read a glyph header. It must be called between
! * an 'access' and 'forget'.
! *
! * read_simple_glyph ::
! * A function used to read a simple glyph. It must be called after the
! * header was read, and before the 'forget'.
! *
! * read_composite_glyph ::
! * A function used to read a composite glyph. It must be called after
! * the header was read, and before the 'forget'.
! *
! * sfnt ::
! * A pointer to the SFNT service.
! *
! * psnames ::
! * A pointer to the PostScript names service.
! *
! * mm ::
! * A pointer to the Multiple Masters service.
! *
! * var ::
! * A pointer to the Metrics Variations service.
! *
! * hdmx ::
! * The face's horizontal device metrics ('hdmx' table). This table is
! * optional in TrueType/OpenType fonts.
! *
! * gasp ::
! * The grid-fitting and scaling properties table ('gasp'). This table
! * is optional in TrueType/OpenType fonts.
! *
! * pclt ::
! * The 'pclt' SFNT table.
! *
! * num_sbit_scales ::
! * The number of sbit scales for this font.
! *
! * sbit_scales ::
! * Array of sbit scales embedded in this font. This table is optional
! * in a TrueType/OpenType font.
! *
! * postscript_names ::
! * A table used to store the Postscript names of the glyphs for this
! * font. See the file `ttconfig.h` for comments on the
! * TT_CONFIG_OPTION_POSTSCRIPT_NAMES option.
! *
! * palette_data ::
! * Some fields from the 'CPAL' table that are directly indexed.
! *
! * palette_index ::
! * The current palette index, as set by @FT_Palette_Select.
! *
! * palette ::
! * An array containing the current palette's colors.
! *
! * have_foreground_color ::
! * There was a call to @FT_Palette_Set_Foreground_Color.
! *
! * foreground_color ::
! * The current foreground color corresponding to 'CPAL' color index
! * 0xFFFF. Only valid if `have_foreground_color` is set.
! *
! * font_program_size ::
! * Size in bytecodes of the face's font program. 0 if none defined.
! * Ignored for Type 2 fonts.
! *
! * font_program ::
! * The face's font program (bytecode stream) executed at load time,
! * also used during glyph rendering. Comes from the 'fpgm' table.
! * Ignored for Type 2 font fonts.
! *
! * cvt_program_size ::
! * The size in bytecodes of the face's cvt program. Ignored for Type 2
! * fonts.
! *
! * cvt_program ::
! * The face's cvt program (bytecode stream) executed each time an
! * instance/size is changed/reset. Comes from the 'prep' table.
! * Ignored for Type 2 fonts.
! *
! * cvt_size ::
! * Size of the control value table (in entries). Ignored for Type 2
! * fonts.
! *
! * cvt ::
! * The face's original control value table. Coordinates are expressed
! * in unscaled font units. Comes from the 'cvt~' table. Ignored for
! * Type 2 fonts.
! *
! * interpreter ::
! * A pointer to the TrueType bytecode interpreters field is also used
! * to hook the debugger in 'ttdebug'.
! *
! * extra ::
! * Reserved for third-party font drivers.
! *
! * postscript_name ::
! * The PS name of the font. Used by the postscript name service.
! *
! * glyf_len ::
! * The length of the 'glyf' table. Needed for malformed 'loca' tables.
! *
! * glyf_offset ::
! * The file offset of the 'glyf' table.
! *
! * is_cff2 ::
! * Set if the font format is CFF2.
! *
! * doblend ::
! * A boolean which is set if the font should be blended (this is for GX
! * var).
! *
! * blend ::
! * Contains the data needed to control GX variation tables (rather like
! * Multiple Master data).
! *
! * variation_support ::
! * Flags that indicate which OpenType functionality related to font
! * variation support is present, valid, and usable. For example,
! * TT_FACE_FLAG_VAR_FVAR is only set if we have at least one design
! * axis.
! *
! * var_postscript_prefix ::
! * The PostScript name prefix needed for constructing a variation font
! * instance's PS name .
! *
! * var_postscript_prefix_len ::
! * The length of the `var_postscript_prefix` string.
! *
! * horz_metrics_size ::
! * The size of the 'hmtx' table.
! *
! * vert_metrics_size ::
! * The size of the 'vmtx' table.
! *
! * num_locations ::
! * The number of glyph locations in this TrueType file. This should be
! * identical to the number of glyphs. Ignored for Type 2 fonts.
! *
! * glyph_locations ::
! * An array of longs. These are offsets to glyph data within the
! * 'glyf' table. Ignored for Type 2 font faces.
! *
! * hdmx_table ::
! * A pointer to the 'hdmx' table.
! *
! * hdmx_table_size ::
! * The size of the 'hdmx' table.
! *
! * hdmx_record_count ::
! * The number of hdmx records.
! *
! * hdmx_record_size ::
! * The size of a single hdmx record.
! *
! * hdmx_record_sizes ::
! * An array holding the ppem sizes available in the 'hdmx' table.
! *
! * sbit_table ::
! * A pointer to the font's embedded bitmap location table.
! *
! * sbit_table_size ::
! * The size of `sbit_table`.
! *
! * sbit_table_type ::
! * The sbit table type (CBLC, sbix, etc.).
! *
! * sbit_num_strikes ::
! * The number of sbit strikes exposed by FreeType's API, omitting
! * invalid strikes.
! *
! * sbit_strike_map ::
! * A mapping between the strike indices exposed by the API and the
! * indices used in the font's sbit table.
! *
! * cpal ::
! * A pointer to data related to the 'CPAL' table. `NULL` if the table
! * is not available.
! *
! * colr ::
! * A pointer to data related to the 'COLR' table. `NULL` if the table
! * is not available.
! *
! * kern_table ::
! * A pointer to the 'kern' table.
! *
! * kern_table_size ::
! * The size of the 'kern' table.
! *
! * num_kern_tables ::
! * The number of supported kern subtables (up to 32; FreeType
! * recognizes only horizontal ones with format 0).
! *
! * kern_avail_bits ::
! * The availability status of kern subtables; if bit n is set, table n
! * is available.
! *
! * kern_order_bits ::
! * The sortedness status of kern subtables; if bit n is set, table n is
! * sorted.
! *
! * bdf ::
! * Data related to an SFNT font's 'bdf' table; see `tttypes.h`.
! *
! * horz_metrics_offset ::
! * The file offset of the 'hmtx' table.
! *
! * vert_metrics_offset ::
! * The file offset of the 'vmtx' table.
! *
! * sph_found_func_flags ::
! * Flags identifying special bytecode functions (used by the v38
! * implementation of the bytecode interpreter).
! *
! * sph_compatibility_mode ::
! * This flag is set if we are in ClearType backward compatibility mode
! * (used by the v38 implementation of the bytecode interpreter).
! *
! * ebdt_start ::
! * The file offset of the sbit data table (CBDT, bdat, etc.).
! *
! * ebdt_size ::
! * The size of the sbit data table.
! */
typedef struct TT_FaceRec_
{
FT_FaceRec root;
TTC_HeaderRec ttc_header;
*** 1443,1457 ****
/* a typeless pointer to the PostScript Aux service */
void* psaux;
! /***********************************************************************/
! /* */
! /* Optional TrueType/OpenType tables */
! /* */
! /***********************************************************************/
/* grid-fitting and scaling table */
TT_GaspRec gasp; /* the `gasp' table */
/* PCL 5 table */
--- 1588,1602 ----
/* a typeless pointer to the PostScript Aux service */
void* psaux;
! /************************************************************************
! *
! * Optional TrueType/OpenType tables
! *
! */
/* grid-fitting and scaling table */
TT_GaspRec gasp; /* the `gasp' table */
/* PCL 5 table */
*** 1462,1477 ****
TT_SBit_Scale sbit_scales;
/* postscript names table */
TT_Post_NamesRec postscript_names;
! /***********************************************************************/
! /* */
! /* TrueType-specific fields (ignored by the CFF driver) */
! /* */
! /***********************************************************************/
/* the font program, if any */
FT_ULong font_program_size;
FT_Byte* font_program;
--- 1607,1629 ----
TT_SBit_Scale sbit_scales;
/* postscript names table */
TT_Post_NamesRec postscript_names;
+ /* glyph colors */
+ FT_Palette_Data palette_data; /* since 2.10 */
+ FT_UShort palette_index;
+ FT_Color* palette;
+ FT_Bool have_foreground_color;
+ FT_Color foreground_color;
!
! /************************************************************************
! *
! * TrueType-specific fields (ignored by the CFF driver)
! *
! */
/* the font program, if any */
FT_ULong font_program_size;
FT_Byte* font_program;
*** 1486,1501 ****
/* A pointer to the bytecode interpreter to use. This is also */
/* used to hook the debugger for the `ttdebug' utility. */
TT_Interpreter interpreter;
! /***********************************************************************/
! /* */
! /* Other tables or fields. This is used by derivative formats like */
! /* OpenType. */
! /* */
! /***********************************************************************/
FT_Generic extra;
const char* postscript_name;
--- 1638,1653 ----
/* A pointer to the bytecode interpreter to use. This is also */
/* used to hook the debugger for the `ttdebug' utility. */
TT_Interpreter interpreter;
! /************************************************************************
! *
! * Other tables or fields. This is used by derivative formats like
! * OpenType.
! *
! */
FT_Generic extra;
const char* postscript_name;
*** 1560,1603 ****
/* since 2.7 */
FT_ULong ebdt_start; /* either `CBDT', `EBDT', or `bdat' */
FT_ULong ebdt_size;
#endif
} TT_FaceRec;
! /*************************************************************************/
! /* */
! /* <Struct> */
! /* TT_GlyphZoneRec */
! /* */
! /* <Description> */
! /* A glyph zone is used to load, scale and hint glyph outline */
! /* coordinates. */
! /* */
! /* <Fields> */
! /* memory :: A handle to the memory manager. */
! /* */
! /* max_points :: The maximum size in points of the zone. */
! /* */
! /* max_contours :: Max size in links contours of the zone. */
! /* */
! /* n_points :: The current number of points in the zone. */
! /* */
! /* n_contours :: The current number of contours in the zone. */
! /* */
! /* org :: The original glyph coordinates (font */
! /* units/scaled). */
! /* */
! /* cur :: The current glyph coordinates (scaled/hinted). */
! /* */
! /* tags :: The point control tags. */
! /* */
! /* contours :: The contours end points. */
! /* */
! /* first_point :: Offset of the current subglyph's first point. */
! /* */
typedef struct TT_GlyphZoneRec_
{
FT_Memory memory;
FT_UShort max_points;
FT_Short max_contours;
--- 1712,1768 ----
/* since 2.7 */
FT_ULong ebdt_start; /* either `CBDT', `EBDT', or `bdat' */
FT_ULong ebdt_size;
#endif
+ /* since 2.10 */
+ void* cpal;
+ void* colr;
+
} TT_FaceRec;
! /**************************************************************************
! *
! * @struct:
! * TT_GlyphZoneRec
! *
! * @description:
! * A glyph zone is used to load, scale and hint glyph outline
! * coordinates.
! *
! * @fields:
! * memory ::
! * A handle to the memory manager.
! *
! * max_points ::
! * The maximum size in points of the zone.
! *
! * max_contours ::
! * Max size in links contours of the zone.
! *
! * n_points ::
! * The current number of points in the zone.
! *
! * n_contours ::
! * The current number of contours in the zone.
! *
! * org ::
! * The original glyph coordinates (font units/scaled).
! *
! * cur ::
! * The current glyph coordinates (scaled/hinted).
! *
! * tags ::
! * The point control tags.
! *
! * contours ::
! * The contours end points.
! *
! * first_point ::
! * Offset of the current subglyph's first point.
! */
typedef struct TT_GlyphZoneRec_
{
FT_Memory memory;
FT_UShort max_points;
FT_Short max_contours;
*** 1618,1635 ****
/* handle to execution context */
typedef struct TT_ExecContextRec_* TT_ExecContext;
! /*************************************************************************/
! /* */
! /* <Type> */
! /* TT_Size */
! /* */
! /* <Description> */
! /* A handle to a TrueType size object. */
! /* */
typedef struct TT_SizeRec_* TT_Size;
/* glyph loader structure */
typedef struct TT_LoaderRec_
--- 1783,1800 ----
/* handle to execution context */
typedef struct TT_ExecContextRec_* TT_ExecContext;
! /**************************************************************************
! *
! * @type:
! * TT_Size
! *
! * @description:
! * A handle to a TrueType size object.
! */
typedef struct TT_SizeRec_* TT_Size;
/* glyph loader structure */
typedef struct TT_LoaderRec_
< prev index next >