/**************************************************************************** * * wofftypes.h * * Basic WOFF/WOFF2 type definitions and interface (specification * only). * * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, * modified, and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute * this file you indicate that you have read the license and * understand and accept it fully. * */ #ifndef WOFFTYPES_H_ #define WOFFTYPES_H_ #include #include FT_BEGIN_HEADER /************************************************************************** * * @struct: * WOFF_HeaderRec * * @description: * WOFF file format header. * * @fields: * See * * https://www.w3.org/TR/WOFF/#WOFFHeader */ typedef struct WOFF_HeaderRec_ { FT_ULong signature; FT_ULong flavor; FT_ULong length; FT_UShort num_tables; FT_UShort reserved; FT_ULong totalSfntSize; FT_UShort majorVersion; FT_UShort minorVersion; FT_ULong metaOffset; FT_ULong metaLength; FT_ULong metaOrigLength; FT_ULong privOffset; FT_ULong privLength; } WOFF_HeaderRec, *WOFF_Header; /************************************************************************** * * @struct: * WOFF_TableRec * * @description: * This structure describes a given table of a WOFF font. * * @fields: * Tag :: * A four-bytes tag describing the table. * * Offset :: * The offset of the table from the start of the WOFF font in its * resource. * * CompLength :: * Compressed table length (in bytes). * * OrigLength :: * Uncompressed table length (in bytes). * * CheckSum :: * The table checksum. This value can be ignored. * * OrigOffset :: * The uncompressed table file offset. This value gets computed while * constructing the (uncompressed) SFNT header. It is not contained in * the WOFF file. */ typedef struct WOFF_TableRec_ { FT_ULong Tag; /* table ID */ FT_ULong Offset; /* table file offset */ FT_ULong CompLength; /* compressed table length */ FT_ULong OrigLength; /* uncompressed table length */ FT_ULong CheckSum; /* uncompressed checksum */ FT_ULong OrigOffset; /* uncompressed table file offset */ /* (not in the WOFF file) */ } WOFF_TableRec, *WOFF_Table; /************************************************************************** * * @struct: * WOFF2_TtcFontRec * * @description: * Metadata for a TTC font entry in WOFF2. * * @fields: * flavor :: * TTC font flavor. * * num_tables :: * Number of tables in TTC, indicating number of elements in * `table_indices`. * * table_indices :: * Array of table indices for each TTC font. */ typedef struct WOFF2_TtcFontRec_ { FT_ULong flavor; FT_UShort num_tables; FT_UShort* table_indices; } WOFF2_TtcFontRec, *WOFF2_TtcFont; /************************************************************************** * * @struct: * WOFF2_HeaderRec * * @description: * WOFF2 file format header. * * @fields: * See * * https://www.w3.org/TR/WOFF2/#woff20Header * * @note: * We don't care about the fields `reserved`, `majorVersion` and * `minorVersion`, so they are not included. The `totalSfntSize` field * does not necessarily represent the actual size of the uncompressed * SFNT font stream, so that is used as a reference value instead. */ typedef struct WOFF2_HeaderRec_ { FT_ULong signature; FT_ULong flavor; FT_ULong length; FT_UShort num_tables; FT_ULong totalSfntSize; FT_ULong totalCompressedSize; FT_ULong metaOffset; FT_ULong metaLength; FT_ULong metaOrigLength; FT_ULong privOffset; FT_ULong privLength; FT_ULong uncompressed_size; /* uncompressed brotli stream size */ FT_ULong compressed_offset; /* compressed stream offset */ FT_ULong header_version; /* version of original TTC Header */ FT_UShort num_fonts; /* number of fonts in TTC */ FT_ULong actual_sfnt_size; /* actual size of sfnt stream */ WOFF2_TtcFont ttc_fonts; /* metadata for fonts in a TTC */ } WOFF2_HeaderRec, *WOFF2_Header; /************************************************************************** * * @struct: * WOFF2_TableRec * * @description: * This structure describes a given table of a WOFF2 font. * * @fields: * See * * https://www.w3.org/TR/WOFF2/#table_dir_format */ typedef struct WOFF2_TableRec_ { FT_Byte FlagByte; /* table type and flags */ FT_ULong Tag; /* table file offset */ FT_ULong dst_length; /* uncompressed table length */ FT_ULong TransformLength; /* transformed length */ FT_ULong flags; /* calculated flags */ FT_ULong src_offset; /* compressed table offset */ FT_ULong src_length; /* compressed table length */ FT_ULong dst_offset; /* uncompressed table offset */ } WOFF2_TableRec, *WOFF2_Table; /************************************************************************** * * @struct: * WOFF2_InfoRec * * @description: * Metadata for WOFF2 font that may be required for reconstruction of * sfnt tables. * * @fields: * header_checksum :: * Checksum of SFNT offset table. * * num_glyphs :: * Number of glyphs in the font. * * num_hmetrics :: * `numberOfHMetrics` field in the 'hhea' table. * * x_mins :: * `xMin` values of glyph bounding box. * * glyf_table :: * A pointer to the `glyf' table record. * * loca_table :: * A pointer to the `loca' table record. * * head_table :: * A pointer to the `head' table record. */ typedef struct WOFF2_InfoRec_ { FT_ULong header_checksum; FT_UShort num_glyphs; FT_UShort num_hmetrics; FT_Short* x_mins; WOFF2_Table glyf_table; WOFF2_Table loca_table; WOFF2_Table head_table; } WOFF2_InfoRec, *WOFF2_Info; /************************************************************************** * * @struct: * WOFF2_SubstreamRec * * @description: * This structure stores information about a substream in the transformed * 'glyf' table in a WOFF2 stream. * * @fields: * start :: * Beginning of the substream relative to uncompressed table stream. * * offset :: * Offset of the substream relative to uncompressed table stream. * * size :: * Size of the substream. */ typedef struct WOFF2_SubstreamRec_ { FT_ULong start; FT_ULong offset; FT_ULong size; } WOFF2_SubstreamRec, *WOFF2_Substream; /************************************************************************** * * @struct: * WOFF2_PointRec * * @description: * This structure stores information about a point in the transformed * 'glyf' table in a WOFF2 stream. * * @fields: * x :: * x-coordinate of point. * * y :: * y-coordinate of point. * * on_curve :: * Set if point is on-curve. */ typedef struct WOFF2_PointRec_ { FT_Int x; FT_Int y; FT_Bool on_curve; } WOFF2_PointRec, *WOFF2_Point; FT_END_HEADER #endif /* WOFFTYPES_H_ */ /* END */