1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* tttypes.h */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Basic SFNT/TrueType type definitions and interface (specification */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* only). */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 1996-2002, 2004-2008, 2012-2013 by */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __TTTYPES_H__ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __TTTYPES_H__ 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include <ft2build.h> 25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_TRUETYPE_TABLES_H 26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_OBJECTS_H 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_MULTIPLE_MASTERS_H 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_BEGIN_HEADER 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** REQUIRED TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/ 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TTC_HeaderRec */ 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType collection header. This table contains the offsets of */ 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the font headers of each distinct TrueType face in the file. */ 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* tag :: Must be `ttc ' to indicate a TrueType collection. */ 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* version :: The version number. */ 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* count :: The number of faces in the collection. The */ 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* specification says this should be an unsigned long, but */ 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* we use a signed long since we need the value -1 for */ 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* specific purposes. */ 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* offsets :: The offsets of the font headers, one per face. */ 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TTC_HeaderRec_ 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong tag; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Fixed version; 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long count; 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong* offsets; 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TTC_HeaderRec; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* SFNT_HeaderRec */ 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* SFNT file format header. */ 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* format_tag :: The font format tag. */ 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_tables :: The number of tables in file. */ 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* search_range :: Must be `16 * (max power of 2 <= num_tables)'. */ 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* entry_selector :: Must be log2 of `search_range / 16'. */ 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* range_shift :: Must be `num_tables * 16 - search_range'. */ 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct SFNT_HeaderRec_ 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong format_tag; 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort num_tables; 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort search_range; 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort entry_selector; 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort range_shift; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong offset; /* not in file */ 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } SFNT_HeaderRec, *SFNT_Header; 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_TableRec */ 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This structure describes a given table of a TrueType font. */ 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Tag :: A four-bytes tag describing the table. */ 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* CheckSum :: The table checksum. This value can be ignored. */ 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Offset :: The offset of the table from the start of the TrueType */ 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font in its resource. */ 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Length :: The table length (in bytes). */ 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_TableRec_ 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong Tag; /* table type */ 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong CheckSum; /* table checksum */ 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong Offset; /* table file offset */ 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong Length; /* table length */ 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_TableRec, *TT_Table; 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* WOFF_HeaderRec */ 144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* <Description> */ 146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* WOFF file format header. */ 147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* <Fields> */ 149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* See */ 150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* http://www.w3.org/TR/WOFF/#WOFFHeader */ 152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov typedef struct WOFF_HeaderRec_ 154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong signature; 156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong flavor; 157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong length; 158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort num_tables; 159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort reserved; 160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong totalSfntSize; 161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort majorVersion; 162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort minorVersion; 163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong metaOffset; 164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong metaLength; 165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong metaOrigLength; 166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong privOffset; 167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong privLength; 168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } WOFF_HeaderRec, *WOFF_Header; 170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /*************************************************************************/ 173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* <Struct> */ 175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* WOFF_TableRec */ 176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* <Description> */ 178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* This structure describes a given table of a WOFF font. */ 179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* <Fields> */ 181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* Tag :: A four-bytes tag describing the table. */ 182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* Offset :: The offset of the table from the start of the WOFF */ 184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* font in its resource. */ 185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* CompLength :: Compressed table length (in bytes). */ 187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* OrigLength :: Unompressed table length (in bytes). */ 189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* CheckSum :: The table checksum. This value can be ignored. */ 191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* OrigOffset :: The uncompressed table file offset. This value gets */ 193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* computed while constructing the (uncompressed) SFNT */ 194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* header. It is not contained in the WOFF file. */ 195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov typedef struct WOFF_TableRec_ 197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong Tag; /* table ID */ 199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong Offset; /* table file offset */ 200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong CompLength; /* compressed table length */ 201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong OrigLength; /* uncompressed table length */ 202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong CheckSum; /* uncompressed checksum */ 203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_ULong OrigOffset; /* uncompressed table file offset */ 205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* (not in the WOFF file) */ 206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } WOFF_TableRec, *WOFF_Table; 207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /*************************************************************************/ 210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* */ 211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* <Struct> */ 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_LongMetricsRec */ 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure modeling the long metrics of the `hmtx' and `vmtx' */ 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType tables. The values are expressed in font units. */ 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* advance :: The advance width or height for the glyph. */ 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* bearing :: The left-side or top-side bearing for the glyph. */ 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_LongMetricsRec_ 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort advance; 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Short bearing; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_LongMetricsRec, *TT_LongMetrics; 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Type> */ 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_ShortMetrics */ 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A simple type to model the short metrics of the `hmtx' and `vmtx' */ 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* tables. */ 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Short TT_ShortMetrics; 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_NameEntryRec */ 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure modeling TrueType name records. Name records are used */ 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to store important strings like family name, style name, */ 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* copyright, etc. in _localized_ versions (i.e., language, encoding, */ 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* etc). */ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* platformID :: The ID of the name's encoding platform. */ 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* encodingID :: The platform-specific ID for the name's encoding. */ 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* languageID :: The platform-specific ID for the name's language. */ 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* nameID :: The ID specifying what kind of name this is. */ 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* stringLength :: The length of the string in bytes. */ 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* stringOffset :: The offset to the string in the `name' table. */ 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* string :: A pointer to the string's bytes. Note that these */ 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* are usually UTF-16 encoded characters. */ 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_NameEntryRec_ 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort platformID; 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort encodingID; 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort languageID; 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort nameID; 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort stringLength; 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong stringOffset; 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* this last field is not defined in the spec */ 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* but used by the FreeType engine */ 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* string; 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_NameEntryRec, *TT_NameEntry; 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_NameTableRec */ 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure modeling the TrueType name table. */ 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* format :: The format of the name table. */ 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* numNameRecords :: The number of names in table. */ 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* storageOffset :: The offset of the name table in the `name' */ 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType table. */ 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* names :: An array of name records. */ 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* stream :: the file's input stream. */ 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_NameTableRec_ 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort format; 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt numNameRecords; 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt storageOffset; 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_NameEntryRec* names; 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Stream stream; 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_NameTableRec, *TT_NameTable; 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** OPTIONAL TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/ 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_GaspRangeRec */ 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A tiny structure used to model a gasp range according to the */ 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType specification. */ 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* maxPPEM :: The maximum ppem value to which `gaspFlag' applies. */ 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* gaspFlag :: A flag describing the grid-fitting and anti-aliasing */ 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* modes to be used. */ 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_GaspRangeRec_ 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort maxPPEM; 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort gaspFlag; 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_GaspRangeRec, *TT_GaspRange; 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_GASP_GRIDFIT 0x01 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_GASP_DOGRAY 0x02 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_GaspRec */ 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure modeling the TrueType `gasp' table used to specify */ 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* grid-fitting and anti-aliasing behaviour. */ 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* version :: The version number. */ 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* numRanges :: The number of gasp ranges in table. */ 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* gaspRanges :: An array of gasp ranges. */ 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_Gasp_ 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort version; 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort numRanges; 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_GaspRange gaspRanges; 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_GaspRec; 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** EMBEDDED BITMAPS SUPPORT ***/ 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_SBit_MetricsRec */ 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure used to hold the big metrics of a given glyph bitmap */ 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* in a TrueType or OpenType font. These are usually found in the */ 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `EBDT' (Microsoft) or `bloc' (Apple) table. */ 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* height :: The glyph height in pixels. */ 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* width :: The glyph width in pixels. */ 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* horiBearingX :: The horizontal left bearing. */ 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* horiBearingY :: The horizontal top bearing. */ 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* horiAdvance :: The horizontal advance. */ 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertBearingX :: The vertical left bearing. */ 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertBearingY :: The vertical top bearing. */ 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertAdvance :: The vertical advance. */ 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_SBit_MetricsRec_ 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort height; 426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort width; 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_Short horiBearingX; 429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_Short horiBearingY; 430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort horiAdvance; 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_Short vertBearingX; 433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_Short vertBearingY; 434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FT_UShort vertAdvance; 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_SBit_MetricsRec, *TT_SBit_Metrics; 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_SBit_SmallMetricsRec */ 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure used to hold the small metrics of a given glyph bitmap */ 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* in a TrueType or OpenType font. These are usually found in the */ 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `EBDT' (Microsoft) or the `bdat' (Apple) table. */ 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* height :: The glyph height in pixels. */ 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* width :: The glyph width in pixels. */ 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* bearingX :: The left-side bearing. */ 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* bearingY :: The top-side bearing. */ 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* advance :: The advance width or height. */ 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_SBit_Small_Metrics_ 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte height; 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte width; 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char bearingX; 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char bearingY; 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte advance; 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics; 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_SBit_LineMetricsRec */ 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure used to describe the text line metrics of a given */ 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* bitmap strike, for either a horizontal or vertical layout. */ 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* ascender :: The ascender in pixels. */ 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* descender :: The descender in pixels. */ 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_width :: The maximum glyph width in pixels. */ 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* caret_slope_enumerator :: Rise of the caret slope, typically set */ 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to 1 for non-italic fonts. */ 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* caret_slope_denominator :: Rise of the caret slope, typically set */ 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to 0 for non-italic fonts. */ 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* caret_offset :: Offset in pixels to move the caret for */ 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* proper positioning. */ 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* min_origin_SB :: Minimum of horiBearingX (resp. */ 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertBearingY). */ 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* min_advance_SB :: Minimum of */ 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* horizontal advance - */ 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* ( horiBearingX + width ) */ 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* resp. */ 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertical advance - */ 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* ( vertBearingY + height ) */ 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_before_BL :: Maximum of horiBearingY (resp. */ 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertBearingY). */ 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* min_after_BL :: Minimum of */ 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* horiBearingY - height */ 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* resp. */ 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertBearingX - width */ 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* pads :: Unused (to make the size of the record */ 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* a multiple of 32 bits. */ 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_SBit_LineMetricsRec_ 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char ascender; 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char descender; 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte max_width; 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char caret_slope_numerator; 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char caret_slope_denominator; 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char caret_offset; 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char min_origin_SB; 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char min_advance_SB; 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char max_before_BL; 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char min_after_BL; 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char pads[2]; 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics; 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_SBit_RangeRec */ 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A TrueType/OpenType subIndexTable as defined in the `EBLC' */ 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (Microsoft) or `bloc' (Apple) tables. */ 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* first_glyph :: The first glyph index in the range. */ 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* last_glyph :: The last glyph index in the range. */ 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* index_format :: The format of index table. Valid values are 1 */ 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to 5. */ 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* image_format :: The format of `EBDT' image data. */ 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* image_offset :: The offset to image data in `EBDT'. */ 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* image_size :: For index formats 2 and 5. This is the size in */ 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* bytes of each glyph bitmap. */ 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* big_metrics :: For index formats 2 and 5. This is the big */ 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* metrics for each glyph bitmap. */ 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_glyphs :: For index formats 4 and 5. This is the number of */ 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyphs in the code array. */ 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_offsets :: For index formats 1 and 3. */ 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_codes :: For index formats 4 and 5. */ 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table_offset :: The offset of the index table in the `EBLC' */ 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table. Only used during strike loading. */ 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_SBit_RangeRec_ 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort first_glyph; 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort last_glyph; 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort index_format; 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort image_format; 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong image_offset; 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong image_size; 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_SBit_MetricsRec metrics; 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong num_glyphs; 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong* glyph_offsets; 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort* glyph_codes; 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong table_offset; 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_SBit_RangeRec, *TT_SBit_Range; 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_SBit_StrikeRec */ 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure used describe a given bitmap strike in the `EBLC' */ 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (Microsoft) or `bloc' (Apple) tables. */ 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_index_ranges :: The number of index ranges. */ 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* index_ranges :: An array of glyph index ranges. */ 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* color_ref :: Unused. `color_ref' is put in for future */ 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* enhancements, but these fields are already */ 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* in use by other platforms (e.g. Newton). */ 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* For details, please see */ 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* http://fonts.apple.com/ */ 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TTRefMan/RM06/Chap6bloc.html */ 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hori :: The line metrics for horizontal layouts. */ 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vert :: The line metrics for vertical layouts. */ 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* start_glyph :: The lowest glyph index for this strike. */ 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* end_glyph :: The highest glyph index for this strike. */ 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* x_ppem :: The number of horizontal pixels per EM. */ 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* y_ppem :: The number of vertical pixels per EM. */ 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* bit_depth :: The bit depth. Valid values are 1, 2, 4, */ 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* and 8. */ 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* flags :: Is this a vertical or horizontal strike? For */ 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* details, please see */ 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* http://fonts.apple.com/ */ 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TTRefMan/RM06/Chap6bloc.html */ 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_SBit_StrikeRec_ 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int num_ranges; 644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_SBit_Range sbit_ranges; 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong ranges_offset; 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong color_ref; 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_SBit_LineMetricsRec hori; 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_SBit_LineMetricsRec vert; 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort start_glyph; 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort end_glyph; 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte x_ppem; 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte y_ppem; 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte bit_depth; 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char flags; 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_SBit_StrikeRec, *TT_SBit_Strike; 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_SBit_ComponentRec */ 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A simple structure to describe a compound sbit element. */ 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_code :: The element's glyph index. */ 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* x_offset :: The element's left bearing. */ 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* y_offset :: The element's top bearing. */ 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_SBit_ComponentRec_ 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort glyph_code; 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char x_offset; 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char y_offset; 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_SBit_ComponentRec, *TT_SBit_Component; 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_SBit_ScaleRec */ 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure used describe a given bitmap scaling table, as defined */ 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* in the `EBSC' table. */ 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hori :: The horizontal line metrics. */ 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vert :: The vertical line metrics. */ 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* x_ppem :: The number of horizontal pixels per EM. */ 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* y_ppem :: The number of vertical pixels per EM. */ 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* x_ppem_substitute :: Substitution x_ppem value. */ 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* y_ppem_substitute :: Substitution y_ppem value. */ 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_SBit_ScaleRec_ 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_SBit_LineMetricsRec hori; 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_SBit_LineMetricsRec vert; 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte x_ppem; 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte y_ppem; 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte x_ppem_substitute; 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte y_ppem_substitute; 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_SBit_ScaleRec, *TT_SBit_Scale; 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** POSTSCRIPT GLYPH NAMES SUPPORT ***/ 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Post_20Rec */ 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Postscript names sub-table, format 2.0. Stores the PS name of */ 744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* each glyph in the font face. */ 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_glyphs :: The number of named glyphs in the table. */ 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_names :: The number of PS names stored in the table. */ 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_indices :: The indices of the glyphs in the names arrays. */ 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_names :: The PS names not in Mac Encoding. */ 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_Post_20Rec_ 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort num_glyphs; 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort num_names; 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort* glyph_indices; 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char** glyph_names; 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_Post_20Rec, *TT_Post_20; 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Post_25Rec */ 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Postscript names sub-table, format 2.5. Stores the PS name of */ 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* each glyph in the font face. */ 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_glyphs :: The number of glyphs in the table. */ 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* offsets :: An array of signed offsets in a normal Mac */ 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Postscript name encoding. */ 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_Post_25_ 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort num_glyphs; 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char* offsets; 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_Post_25Rec, *TT_Post_25; 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Post_NamesRec */ 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Postscript names table, either format 2.0 or 2.5. */ 795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* loaded :: A flag to indicate whether the PS names are loaded. */ 798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* format_20 :: The sub-table used for format 2.0. */ 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* format_25 :: The sub-table used for format 2.5. */ 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_Post_NamesRec_ 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool loaded; 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov union 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Post_20Rec format_20; 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Post_25Rec format_25; 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } names; 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_Post_NamesRec, *TT_Post_Names; 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** GX VARIATION TABLE SUPPORT ***/ 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct GX_BlendRec_ *GX_Blend; 832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** EMBEDDED BDF PROPERTIES TABLE SUPPORT ***/ 840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * These types are used to support a `BDF ' table that isn't part of the 848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * official TrueType specification. It is mainly used in SFNT-based 849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * bitmap fonts that were generated from a set of BDF fonts. 850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The format of the table is as follows. 852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * USHORT version `BDF ' table version number, should be 0x0001. 854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * USHORT strikeCount Number of strikes (bitmap sizes) in this table. 855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ULONG stringTable Offset (from start of BDF table) to string 856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * table. 857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * This is followed by an array of `strikeCount' descriptors, having the 859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * following format. 860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * USHORT ppem Vertical pixels per EM for this strike. 862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * USHORT numItems Number of items for this strike (properties and 863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * atoms). Maximum is 255. 864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * This array in turn is followed by `strikeCount' value sets. Each 866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * `value set' is an array of `numItems' items with the following format. 867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ULONG item_name Offset in string table to item name. 869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * USHORT item_type The item type. Possible values are 870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 0 => string (e.g., COMMENT) 871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 1 => atom (e.g., FONT or even SIZE) 872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 2 => int32 873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 3 => uint32 874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 0x10 => A flag to indicate a properties. This 875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * is ORed with the above values. 876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ULONG item_value For strings => Offset into string table without 877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * the corresponding double quotes. 878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * For atoms => Offset into string table. 879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * For integers => Direct value. 880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * All strings in the string table consist of bytes and are 882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * zero-terminated. 883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_BDF 887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_BDFRec_ 889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* table; 891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* table_end; 892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* strings; 893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong strings_size; 894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_strikes; 895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool loaded; 896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_BDFRec, *TT_BDF; 898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_BDF */ 900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ORIGINAL TT_FACE CLASS DEFINITION ***/ 907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*** ***/ 909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This structure/class is defined here because it is common to the */ 917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* following formats: TTF, OpenType-TT, and OpenType-CFF. */ 918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Note, however, that the classes TT_Size and TT_GlyphSlot are not */ 920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* shared between font drivers, and are thus defined in `ttobjs.h'. */ 921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Type> */ 928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Face */ 929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A handle to a TrueType face/font object. A TT_Face encapsulates */ 932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the resolution and scaling independent parts of a TrueType font */ 933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* resource. */ 934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The TT_Face structure is also used as a `parent class' for the */ 937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* OpenType-CFF class (T2_Face). */ 938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_FaceRec_* TT_Face; 940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* a function type used for the truetype bytecode interpreter hooks */ 943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Interpreter)( void* exec_context ); 945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* forward declaration */ 947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_LoaderRec_* TT_Loader; 948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <FuncType> */ 953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Loader_GotoTableFunc */ 954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Seeks a stream to the start of a given TrueType table. */ 957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* face :: A handle to the target face object. */ 960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* tag :: A 4-byte tag used to name the table. */ 962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* stream :: The input stream. */ 964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* length :: The length of the table in bytes. Set to 0 if not */ 967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* needed. */ 968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0 means success. */ 971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The stream cursor must be at the font file's origin. */ 974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Loader_GotoTableFunc)( TT_Face face, 977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong tag, 978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Stream stream, 979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong* length ); 980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <FuncType> */ 985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Loader_StartGlyphFunc */ 986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Seeks a stream to the start of a given glyph element, and opens a */ 989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* frame for it. */ 990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* loader :: The current TrueType glyph loader object. */ 993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph index :: The index of the glyph to access. */ 995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* offset :: The offset of the glyph according to the */ 997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `locations' table. */ 998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* byte_count :: The size of the frame in bytes. */ 1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0 means success. */ 1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This function is normally equivalent to FT_STREAM_SEEK(offset) */ 1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* followed by FT_FRAME_ENTER(byte_count) with the loader's stream, */ 1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* but alternative formats (e.g. compressed ones) might use something */ 1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* different. */ 1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Loader_StartGlyphFunc)( TT_Loader loader, 1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt glyph_index, 1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong offset, 1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt byte_count ); 1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <FuncType> */ 1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Loader_ReadGlyphFunc */ 1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Reads one glyph element (its header, a simple glyph, or a */ 1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* composite) from the loader's current stream frame. */ 1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* loader :: The current TrueType glyph loader object. */ 1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0 means success. */ 1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Loader_ReadGlyphFunc)( TT_Loader loader ); 1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <FuncType> */ 1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Loader_EndGlyphFunc */ 1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Closes the current loader stream frame for the glyph. */ 1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* loader :: The current TrueType glyph loader object. */ 1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef void 1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Loader_EndGlyphFunc)( TT_Loader loader ); 1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1051e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov typedef enum TT_SbitTableType_ 1052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov TT_SBIT_TABLE_TYPE_NONE = 0, 1054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov TT_SBIT_TABLE_TYPE_EBLC, /* `EBLC' (Microsoft), */ 1055e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* `bloc' (Apple) */ 1056e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov TT_SBIT_TABLE_TYPE_CBLC, /* `CBLC' (Google) */ 1057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov TT_SBIT_TABLE_TYPE_SBIX, /* `sbix' (Apple) */ 1058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1059e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* do not remove */ 1060e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov TT_SBIT_TABLE_TYPE_MAX 1061e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } TT_SbitTableType; 1063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1064e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType Face Type */ 1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_Face */ 1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The TrueType face class. These objects model the resolution and */ 1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* point-size independent data found in a TrueType font file. */ 1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* root :: The base FT_Face structure, managed by the */ 1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* base layer. */ 1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* ttc_header :: The TrueType collection header, used when */ 1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the file is a `ttc' rather than a `ttf'. */ 1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* For ordinary font files, the field */ 1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `ttc_header.count' is set to 0. */ 1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* format_tag :: The font format tag. */ 1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_tables :: The number of TrueType tables in this font */ 1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* file. */ 1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* dir_tables :: The directory of TrueType tables for this */ 1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font file. */ 1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* header :: The font's font header (`head' table). */ 1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Read on font opening. */ 1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* horizontal :: The font's horizontal header (`hhea' */ 1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table). This field also contains the */ 1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* associated horizontal metrics table */ 1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (`hmtx'). */ 1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_profile :: The font's maximum profile table. Read on */ 1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font opening. Note that some maximum */ 1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* values cannot be taken directly from this */ 1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table. We thus define additional fields */ 1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* below to hold the computed maxima. */ 1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertical_info :: A boolean which is set when the font file */ 1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* contains vertical metrics. If not, the */ 1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* value of the `vertical' field is */ 1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* undefined. */ 1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertical :: The font's vertical header (`vhea' table). */ 1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This field also contains the associated */ 1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertical metrics table (`vmtx'), if found. */ 1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* IMPORTANT: The contents of this field is */ 1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* undefined if the `verticalInfo' field is */ 1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* unset. */ 1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_names :: The number of name records within this */ 1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType font. */ 1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* name_table :: The table of name records (`name'). */ 1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* os2 :: The font's OS/2 table (`OS/2'). */ 1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* postscript :: The font's PostScript table (`post' */ 1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table). The PostScript glyph names are */ 1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* not loaded by the driver on face opening. */ 1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* See the `ttpost' module for more details. */ 1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cmap_table :: Address of the face's `cmap' SFNT table */ 1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* in memory (it's an extracted frame). */ 1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cmap_size :: The size in bytes of the `cmap_table' */ 1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* described above. */ 1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* goto_table :: A function called by each TrueType table */ 1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* loader to position a stream's cursor to */ 1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the start of a given table according to */ 1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* its tag. It defaults to TT_Goto_Face but */ 1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* can be different for strange formats (e.g. */ 1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Type 42). */ 1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* access_glyph_frame :: A function used to access the frame of a */ 1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* given glyph within the face's font file. */ 1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* forget_glyph_frame :: A function used to forget the frame of a */ 1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* given glyph when all data has been loaded. */ 1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* read_glyph_header :: A function used to read a glyph header. */ 1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* It must be called between an `access' and */ 1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `forget'. */ 1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* read_simple_glyph :: A function used to read a simple glyph. */ 1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* It must be called after the header was */ 1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* read, and before the `forget'. */ 1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* read_composite_glyph :: A function used to read a composite glyph. */ 1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* It must be called after the header was */ 1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* read, and before the `forget'. */ 1161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* sfnt :: A pointer to the SFNT service. */ 1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* psnames :: A pointer to the PostScript names service. */ 1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hdmx :: The face's horizontal device metrics */ 1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (`hdmx' table). This table is optional in */ 1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType/OpenType fonts. */ 1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* gasp :: The grid-fitting and scaling properties */ 1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table (`gasp'). This table is optional in */ 1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType/OpenType fonts. */ 1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* pclt :: The `pclt' SFNT table. */ 1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_sbit_scales :: The number of sbit scales for this font. */ 1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* sbit_scales :: Array of sbit scales embedded in this */ 1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font. This table is optional in a */ 1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType/OpenType font. */ 1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* postscript_names :: A table used to store the Postscript names */ 1183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* of the glyphs for this font. See the */ 1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* file `ttconfig.h' for comments on the */ 1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES option. */ 1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_locations :: The number of glyph locations in this */ 1188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType file. This should be */ 1189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* identical to the number of glyphs. */ 1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Ignored for Type 2 fonts. */ 1191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_locations :: An array of longs. These are offsets to */ 1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph data within the `glyf' table. */ 1194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Ignored for Type 2 font faces. */ 1195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyf_len :: The length of the `glyf' table. Needed */ 1197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* for malformed `loca' tables. */ 1198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font_program_size :: Size in bytecodes of the face's font */ 1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* program. 0 if none defined. Ignored for */ 1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Type 2 fonts. */ 1202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font_program :: The face's font program (bytecode stream) */ 1204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* executed at load time, also used during */ 1205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph rendering. Comes from the `fpgm' */ 1206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table. Ignored for Type 2 font fonts. */ 1207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cvt_program_size :: The size in bytecodes of the face's cvt */ 1209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* program. Ignored for Type 2 fonts. */ 1210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cvt_program :: The face's cvt program (bytecode stream) */ 1212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* executed each time an instance/size is */ 1213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* changed/reset. Comes from the `prep' */ 1214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* table. Ignored for Type 2 fonts. */ 1215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cvt_size :: Size of the control value table (in */ 1217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* entries). Ignored for Type 2 fonts. */ 1218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cvt :: The face's original control value table. */ 1220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Coordinates are expressed in unscaled font */ 1221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* units. Comes from the `cvt ' table. */ 1222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Ignored for Type 2 fonts. */ 1223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_kern_pairs :: The number of kerning pairs present in the */ 1225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font file. The engine only loads the */ 1226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* first horizontal format 0 kern table it */ 1227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* finds in the font file. Ignored for */ 1228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Type 2 fonts. */ 1229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* kern_table_index :: The index of the kerning table in the font */ 1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* kerning directory. Ignored for Type 2 */ 1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* fonts. */ 1233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* interpreter :: A pointer to the TrueType bytecode */ 1235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* interpreters field is also used to hook */ 1236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the debugger in `ttdebug'. */ 1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* unpatented_hinting :: If true, use only unpatented methods in */ 1239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the bytecode interpreter. */ 1240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* doblend :: A boolean which is set if the font should */ 1242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* be blended (this is for GX var). */ 1243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* blend :: Contains the data needed to control GX */ 1245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* variation tables (rather like Multiple */ 1246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Master data). */ 1247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* extra :: Reserved for third-party font drivers. */ 1249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* postscript_name :: The PS name of the font. Used by the */ 1251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* postscript name service. */ 1252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_FaceRec_ 1254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 1255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FaceRec root; 1256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TTC_HeaderRec ttc_header; 1258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong format_tag; 1260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort num_tables; 1261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Table dir_tables; 1262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Header header; /* TrueType header table */ 1264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_HoriHeader horizontal; /* TrueType horizontal header */ 1265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_MaxProfile max_profile; 1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool vertical_info; 1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_VertHeader vertical; /* TT Vertical header, if present */ 1270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort num_names; /* number of name records */ 1272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_NameTableRec name_table; /* name table */ 1273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_OS2 os2; /* TrueType OS/2 table */ 1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Postscript postscript; /* TrueType Postscript table */ 1276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* cmap_table; /* extracted `cmap' table */ 1278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong cmap_size; 1279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Loader_GotoTableFunc goto_table; 1281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Loader_StartGlyphFunc access_glyph_frame; 1283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Loader_EndGlyphFunc forget_glyph_frame; 1284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Loader_ReadGlyphFunc read_glyph_header; 1285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Loader_ReadGlyphFunc read_simple_glyph; 1286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Loader_ReadGlyphFunc read_composite_glyph; 1287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* a typeless pointer to the SFNT_Interface table used to load */ 1289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the basic TrueType tables in the face object */ 1290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* sfnt; 1291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* a typeless pointer to the FT_Service_PsCMapsRec table used to */ 1293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* handle glyph names <-> unicode & Mac values */ 1294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* psnames; 1295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***********************************************************************/ 1298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Optional TrueType/OpenType tables */ 1300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***********************************************************************/ 1302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* grid-fitting and scaling table */ 1304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_GaspRec gasp; /* the `gasp' table */ 1305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* PCL 5 table */ 1307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_PCLT pclt; 1308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* embedded bitmaps support */ 1310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong num_sbit_scales; 1311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_SBit_Scale sbit_scales; 1312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* postscript names table */ 1314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Post_NamesRec postscript_names; 1315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***********************************************************************/ 1318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TrueType-specific fields (ignored by the OTF-Type2 driver) */ 1320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***********************************************************************/ 1322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the font program, if any */ 1324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong font_program_size; 1325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* font_program; 1326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the cvt program, if any */ 1328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong cvt_program_size; 1329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* cvt_program; 1330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the original, unscaled, control value table */ 1332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong cvt_size; 1333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Short* cvt; 1334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A pointer to the bytecode interpreter to use. This is also */ 1336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* used to hook the debugger for the `ttdebug' utility. */ 1337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Interpreter interpreter; 1338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING 1340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Use unpatented hinting only. */ 1341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool unpatented_hinting; 1342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 1343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***********************************************************************/ 1345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Other tables or fields. This is used by derivative formats like */ 1347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* OpenType. */ 1348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***********************************************************************/ 1350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Generic extra; 1352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* postscript_name; 1354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong glyf_len; 1356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 1358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool doblend; 1359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GX_Blend blend; 1360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 1361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* since version 2.2 */ 1363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* horz_metrics; 1365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong horz_metrics_size; 1366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* vert_metrics; 1368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong vert_metrics_size; 1369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong num_locations; /* in broken TTF, gid > 0xFFFF */ 1371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* glyph_locations; 1372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* hdmx_table; 1374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong hdmx_table_size; 1375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt hdmx_record_count; 1376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong hdmx_record_size; 1377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* hdmx_record_sizes; 1378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* sbit_table; 1380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong sbit_table_size; 1381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov TT_SbitTableType sbit_table_type; 1382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt sbit_num_strikes; 1383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* kern_table; 1385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong kern_table_size; 1386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_kern_tables; 1387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 kern_avail_bits; 1388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 kern_order_bits; 1389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_BDF 1391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_BDFRec bdf; 1392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_BDF */ 1393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* since 2.3.0 */ 1395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong horz_metrics_offset; 1396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong vert_metrics_offset; 1397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 1399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* since 2.4.12 */ 1400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong sph_found_func_flags; /* special functions found */ 1401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* for this face */ 1402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool sph_compatibility_mode; 1403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ 1404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_FaceRec; 1406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 1411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_GlyphZoneRec */ 1412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A glyph zone is used to load, scale and hint glyph outline */ 1415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* coordinates. */ 1416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 1418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* memory :: A handle to the memory manager. */ 1419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_points :: The maximum size in points of the zone. */ 1421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_contours :: Max size in links contours of the zone. */ 1423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* n_points :: The current number of points in the zone. */ 1425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* n_contours :: The current number of contours in the zone. */ 1427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* org :: The original glyph coordinates (font */ 1429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* units/scaled). */ 1430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cur :: The current glyph coordinates (scaled/hinted). */ 1432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* tags :: The point control tags. */ 1434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* contours :: The contours end points. */ 1436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* first_point :: Offset of the current subglyph's first point. */ 1438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_GlyphZoneRec_ 1440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 1441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory; 1442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort max_points; 1443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort max_contours; 1444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort n_points; /* number of points in zone */ 1445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Short n_contours; /* number of contours */ 1446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector* org; /* original point coordinates */ 1448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector* cur; /* current point coordinates */ 1449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector* orus; /* original (unscaled) point coordinates */ 1450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* tags; /* current touch flags */ 1452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort* contours; /* contour end points */ 1453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort first_point; /* offset of first (#0) point */ 1455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_GlyphZoneRec, *TT_GlyphZone; 1457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* handle to execution context */ 1460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_ExecContextRec_* TT_ExecContext; 1461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph loader structure */ 1463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_LoaderRec_ 1464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 1465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Face face; 1466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Size size; 1467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_GlyphSlot glyph; 1468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_GlyphLoader gloader; 1469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong load_flags; 1471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt glyph_index; 1472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Stream stream; 1474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int byte_len; 1475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Short n_contours; 1477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BBox bbox; 1478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int left_bearing; 1479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int advance; 1480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int linear; 1481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool linear_def; 1482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector pp1; 1483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector pp2; 1484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong glyf_offset; 1486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the zone where we load our glyphs */ 1488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_GlyphZoneRec base; 1489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_GlyphZoneRec zone; 1490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_ExecContext exec; 1492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* instructions; 1493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong ins_pos; 1494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* for possible extensibility in other formats */ 1496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* other; 1497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* since version 2.1.8 */ 1499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int top_bearing; 1500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int vadvance; 1501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector pp3; 1502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector pp4; 1503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* since version 2.2.1 */ 1505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* cursor; 1506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* limit; 1507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_LoaderRec; 1509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1511ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_END_HEADER 1512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __TTTYPES_H__ */ 1514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 1517