|
Packit |
daac2c |
/* otf.h -- Header file for libotf (OpenType font library).
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
|
Packit |
daac2c |
National Institute of Advanced Industrial Science and Technology (AIST)
|
|
Packit |
daac2c |
Registration Number H15PRO167
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This file is part of libotf.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
Libotf is free software; you can redistribute it and/or modify it
|
|
Packit |
daac2c |
under the terms of the GNU Lesser General Public License as published
|
|
Packit |
daac2c |
by the Free Software Foundation; either version 2.1 of the License, or
|
|
Packit |
daac2c |
(at your option) any later version.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
Libotf is distributed in the hope that it will be useful, but WITHOUT
|
|
Packit |
daac2c |
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
Packit |
daac2c |
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
Packit |
daac2c |
License for more details.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
You should have received a copy of the GNU Lesser General Public
|
|
Packit |
daac2c |
License along with this library, in a file named COPYING; if not,
|
|
Packit |
daac2c |
write to the Free Software Foundation, Inc., 59 Temple Place, Suite
|
|
Packit |
daac2c |
330, Boston, MA 02111-1307, USA. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
#ifndef _OTF_H_
|
|
Packit |
daac2c |
#define _OTF_H_
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
#ifdef __cplusplus
|
|
Packit |
daac2c |
extern "C" {
|
|
Packit |
daac2c |
#endif
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* Version name of this library. */
|
|
Packit |
daac2c |
#define LIBOTF_VERSION "0.9.12"
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* Major version number. */
|
|
Packit |
daac2c |
#define LIBOTF_MAJOR_VERSION 0
|
|
Packit |
daac2c |
/* Minor version number. */
|
|
Packit |
daac2c |
#define LIBOTF_MINOR_VERSION 9
|
|
Packit |
daac2c |
/* Release (i.e. patch level) number. */
|
|
Packit |
daac2c |
#define LIBOTF_RELEASE_NUMBER 12
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Table of contents:
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
(1) Structures for OTF Layout tables and OTF itself
|
|
Packit |
daac2c |
(1-1) Basic types
|
|
Packit |
daac2c |
(1-2) "head" table
|
|
Packit |
daac2c |
(1-3) "name" table
|
|
Packit |
daac2c |
(1-4) "cmap" table
|
|
Packit |
daac2c |
(1-5) Structures common to GDEF, GSUB, and GPOS
|
|
Packit |
daac2c |
(1-6) "GDEF" table
|
|
Packit |
daac2c |
(1-7) Structures for ScriptList, FeatureList, and LookupList
|
|
Packit |
daac2c |
(1-8) Structures common to GSUB and GPOS
|
|
Packit |
daac2c |
(1-9) "GSUB" table
|
|
Packit |
daac2c |
(1-10) "GPOS" table
|
|
Packit |
daac2c |
(1-11) Structure for OTF
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
(2) API for reading OTF
|
|
Packit |
daac2c |
(2-1) OTF_open(), OTF_open_ft_face()
|
|
Packit |
daac2c |
(2-2) OTF_close()
|
|
Packit |
daac2c |
(2-3) OTF_get_table()
|
|
Packit |
daac2c |
(2-4) OTF_check_table()
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
(3) API for driving OTF
|
|
Packit |
daac2c |
(3-1) Structure for glyph string
|
|
Packit |
daac2c |
(3-2) OTF_drive_cmap()
|
|
Packit |
daac2c |
(3-3) OTF_drive_gdef()
|
|
Packit |
daac2c |
(3-4) OTF_drive_gsub()
|
|
Packit |
daac2c |
(3-5) OTF_drive_gpos()
|
|
Packit |
daac2c |
(3-6) OTF_drive_tables()
|
|
Packit |
daac2c |
(3-7) OTF_get_unicode()
|
|
Packit |
daac2c |
(3-8) OTF_drive_gsub_alternate()
|
|
Packit |
daac2c |
(3-9) OTF_iterate_on_feature()
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
(4) API for error handling
|
|
Packit |
daac2c |
(4-1) Error codes
|
|
Packit |
daac2c |
(4-2) OTF_perror()
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
(5) API miscellaneous
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
*/
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1) Structures for OTF Layout tables and OTF itself */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-1) Basic types */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef unsigned OTF_Tag;
|
|
Packit |
daac2c |
typedef unsigned OTF_GlyphID;
|
|
Packit |
daac2c |
typedef unsigned OTF_Offset;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned high;
|
|
Packit |
daac2c |
unsigned low;
|
|
Packit |
daac2c |
} OTF_Fixed;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-2) "head" table */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Fixed TableVersionNumber;
|
|
Packit |
daac2c |
OTF_Fixed fontRevision;
|
|
Packit |
daac2c |
unsigned checkSumAdjustment;
|
|
Packit |
daac2c |
unsigned magicNumber;
|
|
Packit |
daac2c |
unsigned flags;
|
|
Packit |
daac2c |
int unitsPerEm;
|
|
Packit |
daac2c |
} OTF_head;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-3) "name" table */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
int platformID;
|
|
Packit |
daac2c |
int encodingID;
|
|
Packit |
daac2c |
int languageID;
|
|
Packit |
daac2c |
int nameID;
|
|
Packit |
daac2c |
int length;
|
|
Packit |
daac2c |
int offset;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* If nonzero, NAME is an ASCII string. */
|
|
Packit |
daac2c |
int ascii;
|
|
Packit |
daac2c |
unsigned char *name;
|
|
Packit |
daac2c |
} OTF_NameRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
#define OTF_max_nameID 23
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
int format;
|
|
Packit |
daac2c |
int count;
|
|
Packit |
daac2c |
int stringOffset;
|
|
Packit |
daac2c |
OTF_NameRecord *nameRecord;
|
|
Packit |
daac2c |
char *name[OTF_max_nameID + 1];
|
|
Packit |
daac2c |
} OTF_name;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-4) "cmap" table */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned char glyphIdArray[256];
|
|
Packit |
daac2c |
} OTF_EncodingSubtable0;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned firstCode;
|
|
Packit |
daac2c |
unsigned entryCount;
|
|
Packit |
daac2c |
int idDelta;
|
|
Packit |
daac2c |
unsigned idRangeOffset;
|
|
Packit |
daac2c |
} OTF_cmapSubHeader;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned short subHeaderKeys[256];
|
|
Packit |
daac2c |
int subHeaderCount;
|
|
Packit |
daac2c |
OTF_cmapSubHeader *subHeaders;
|
|
Packit |
daac2c |
int glyphIndexCount;
|
|
Packit |
daac2c |
OTF_GlyphID *glyphIndexArray;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned startCount;
|
|
Packit |
daac2c |
unsigned endCount;
|
|
Packit |
daac2c |
int idDelta;
|
|
Packit |
daac2c |
unsigned idRangeOffset;
|
|
Packit |
daac2c |
} OTF_cmapSegment;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned segCountX2;
|
|
Packit |
daac2c |
unsigned searchRange;
|
|
Packit |
daac2c |
unsigned entrySelector;
|
|
Packit |
daac2c |
unsigned rangeShift;
|
|
Packit |
daac2c |
OTF_cmapSegment *segments;
|
|
Packit |
daac2c |
int GlyphCount;
|
|
Packit |
daac2c |
unsigned *glyphIdArray;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable4;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned firstCode;
|
|
Packit |
daac2c |
unsigned entryCount;
|
|
Packit |
daac2c |
unsigned *glyphIdArray;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable6;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned startCharCode;
|
|
Packit |
daac2c |
unsigned endCharCode;
|
|
Packit |
daac2c |
unsigned startGlyphID;
|
|
Packit |
daac2c |
} OTF_cmapGroup;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned char is32[8192];
|
|
Packit |
daac2c |
unsigned nGroups;
|
|
Packit |
daac2c |
OTF_cmapGroup *Groups;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable8;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned startCharCode;
|
|
Packit |
daac2c |
unsigned numChars;
|
|
Packit |
daac2c |
unsigned *glyphs;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable10;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned nGroups;
|
|
Packit |
daac2c |
OTF_cmapGroup *Groups;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable12;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned unicodeValue;
|
|
Packit |
daac2c |
unsigned short glyphID;
|
|
Packit |
daac2c |
} OTF_UVSMapping;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned startUnicodeValue;
|
|
Packit |
daac2c |
unsigned short additionalCount;
|
|
Packit |
daac2c |
} OTF_UnicodeValueRange;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned varSelector;
|
|
Packit |
daac2c |
unsigned defaultUVSOffset;
|
|
Packit |
daac2c |
unsigned nonDefaultUVSOffset;
|
|
Packit |
daac2c |
/* DefaultUVS */
|
|
Packit |
daac2c |
unsigned numUnicodeValueRanges;
|
|
Packit |
daac2c |
OTF_UnicodeValueRange *unicodeValueRanges;
|
|
Packit |
daac2c |
/* NonDefaultUVS */
|
|
Packit |
daac2c |
unsigned numUVSMappings;
|
|
Packit |
daac2c |
OTF_UVSMapping *uvsMappings;
|
|
Packit |
daac2c |
} OTF_VariationSelectorRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned nRecords;
|
|
Packit |
daac2c |
OTF_VariationSelectorRecord *Records;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable14;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned format;
|
|
Packit |
daac2c |
unsigned length;
|
|
Packit |
daac2c |
unsigned language;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
OTF_EncodingSubtable0 *f0;
|
|
Packit |
daac2c |
OTF_EncodingSubtable2 *f2;
|
|
Packit |
daac2c |
OTF_EncodingSubtable4 *f4;
|
|
Packit |
daac2c |
OTF_EncodingSubtable6 *f6;
|
|
Packit |
daac2c |
OTF_EncodingSubtable8 *f8;
|
|
Packit |
daac2c |
OTF_EncodingSubtable10 *f10;
|
|
Packit |
daac2c |
OTF_EncodingSubtable12 *f12;
|
|
Packit |
daac2c |
OTF_EncodingSubtable14 *f14;
|
|
Packit |
daac2c |
}f;
|
|
Packit |
daac2c |
} OTF_EncodingSubtable;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned platformID;
|
|
Packit |
daac2c |
unsigned encodingID;
|
|
Packit |
daac2c |
unsigned offset;
|
|
Packit |
daac2c |
OTF_EncodingSubtable subtable;
|
|
Packit |
daac2c |
} OTF_EncodingRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned version;
|
|
Packit |
daac2c |
unsigned numTables;
|
|
Packit |
daac2c |
OTF_EncodingRecord *EncodingRecord;
|
|
Packit |
daac2c |
/* Mapping table: Unicode->GlyphID (for BMP only) */
|
|
Packit |
daac2c |
unsigned short *unicode_table;
|
|
Packit |
daac2c |
/* Maximum Glyph ID that corresponds to a Unicode character. */
|
|
Packit |
daac2c |
int max_glyph_id;
|
|
Packit |
daac2c |
/* Mapping table: GlyphID->Unicode */
|
|
Packit |
daac2c |
unsigned short *decode_table;
|
|
Packit |
daac2c |
/* Index of the EncodingRecord for Unicode->GlyphID mapping.
|
|
Packit |
daac2c |
-1 means that the font supports only Unicode BMP characters. */
|
|
Packit |
daac2c |
int table_index;
|
|
Packit |
daac2c |
} OTF_cmap;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-5) Structures common to GDEF, GSUB, GPOS */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_GlyphID Start;
|
|
Packit |
daac2c |
OTF_GlyphID End;
|
|
Packit |
daac2c |
unsigned StartCoverageIndex;
|
|
Packit |
daac2c |
} OTF_RangeRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned CoverageFormat;
|
|
Packit |
daac2c |
unsigned Count;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
OTF_GlyphID *GlyphArray;
|
|
Packit |
daac2c |
OTF_RangeRecord *RangeRecord;
|
|
Packit |
daac2c |
} table;
|
|
Packit |
daac2c |
} OTF_Coverage;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned StartSize;
|
|
Packit |
daac2c |
unsigned EndSize;
|
|
Packit |
daac2c |
unsigned DeltaFormat;
|
|
Packit |
daac2c |
char *DeltaValue;
|
|
Packit |
daac2c |
} OTF_DeviceTable;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_GlyphID Start;
|
|
Packit |
daac2c |
OTF_GlyphID End;
|
|
Packit |
daac2c |
unsigned Class;
|
|
Packit |
daac2c |
} OTF_ClassRangeRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned ClassFormat;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
OTF_GlyphID StartGlyph;
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
unsigned *ClassValueArray;
|
|
Packit |
daac2c |
} f1;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
unsigned ClassRangeCount;
|
|
Packit |
daac2c |
OTF_ClassRangeRecord *ClassRangeRecord;
|
|
Packit |
daac2c |
} f2;
|
|
Packit |
daac2c |
} f;
|
|
Packit |
daac2c |
} OTF_ClassDef;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-6) "GDEF" table */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Fixed Version;
|
|
Packit |
daac2c |
OTF_Offset GlyphClassDef;
|
|
Packit |
daac2c |
OTF_Offset AttachList;
|
|
Packit |
daac2c |
OTF_Offset LigCaretList;
|
|
Packit |
daac2c |
OTF_Offset MarkAttachClassDef;
|
|
Packit |
daac2c |
} OTF_GDEFHeader;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
enum OTF_GlyphClassDef
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_GlyphClass0 = 0,
|
|
Packit |
daac2c |
OTF_GlyphClassBase = 1,
|
|
Packit |
daac2c |
OTF_GlyphClassLigature = 2,
|
|
Packit |
daac2c |
OTF_GlyphClassMark = 3,
|
|
Packit |
daac2c |
OTF_GlyphClassComponent = 4
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned PointCount;
|
|
Packit |
daac2c |
unsigned *PointIndex;
|
|
Packit |
daac2c |
} OTF_AttachPoint;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Coverage Coverage;
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
OTF_AttachPoint *AttachPoint;
|
|
Packit |
daac2c |
} OTF_AttachList;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned CaretValueFormat; /* 1, 2, or 3 */
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
int Coordinate;
|
|
Packit |
daac2c |
} f1;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
unsigned CaretValuePoint;
|
|
Packit |
daac2c |
} f2;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
int Coordinate;
|
|
Packit |
daac2c |
OTF_DeviceTable DeviceTable;
|
|
Packit |
daac2c |
} f3;
|
|
Packit |
daac2c |
} f;
|
|
Packit |
daac2c |
} OTF_CaretValue;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned CaretCount;
|
|
Packit |
daac2c |
OTF_CaretValue *CaretValue;
|
|
Packit |
daac2c |
} OTF_LigGlyph;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Coverage Coverage;
|
|
Packit |
daac2c |
unsigned LigGlyphCount;
|
|
Packit |
daac2c |
OTF_LigGlyph *LigGlyph;
|
|
Packit |
daac2c |
} OTF_LigCaretList;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_GDEFHeader header;
|
|
Packit |
daac2c |
OTF_ClassDef glyph_class_def;
|
|
Packit |
daac2c |
OTF_AttachList attach_list;
|
|
Packit |
daac2c |
OTF_LigCaretList lig_caret_list;
|
|
Packit |
daac2c |
OTF_ClassDef mark_attach_class_def;
|
|
Packit |
daac2c |
} OTF_GDEF;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-7) Structures for ScriptList, FeatureList, and LookupList */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** The structure hierarchy
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
ScriptList
|
|
Packit |
daac2c |
ScriptRecord[]
|
|
Packit |
daac2c |
ScriptTag
|
|
Packit |
daac2c |
Script[]
|
|
Packit |
daac2c |
DefaultLangSys
|
|
Packit |
daac2c |
LangSysRecord[]
|
|
Packit |
daac2c |
LangSysTag
|
|
Packit |
daac2c |
LangSys[]
|
|
Packit |
daac2c |
LookupOrder
|
|
Packit |
daac2c |
ReqFeatureIndex
|
|
Packit |
daac2c |
FeatureIndex[]
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
FeatureList
|
|
Packit |
daac2c |
FeatureRecored[]
|
|
Packit |
daac2c |
FeatureTag
|
|
Packit |
daac2c |
Feature[]
|
|
Packit |
daac2c |
FeatureParams
|
|
Packit |
daac2c |
LookupListIndex[]
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
LookupList
|
|
Packit |
daac2c |
LookupOffset[]
|
|
Packit |
daac2c |
Lookup[]
|
|
Packit |
daac2c |
LookupType
|
|
Packit |
daac2c |
LookupFlag
|
|
Packit |
daac2c |
SubTableOffset[]
|
|
Packit |
daac2c |
SubTable.gsub[] or SubTable.gpos[]
|
|
Packit |
daac2c |
*/
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset LookupOrder;
|
|
Packit |
daac2c |
unsigned ReqFeatureIndex;
|
|
Packit |
daac2c |
unsigned FeatureCount;
|
|
Packit |
daac2c |
unsigned *FeatureIndex;
|
|
Packit |
daac2c |
} OTF_LangSys;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Tag LangSysTag;
|
|
Packit |
daac2c |
OTF_Offset LangSys;
|
|
Packit |
daac2c |
} OTF_LangSysRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Tag ScriptTag;
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
OTF_Offset DefaultLangSysOffset;
|
|
Packit |
daac2c |
OTF_LangSys DefaultLangSys;
|
|
Packit |
daac2c |
unsigned LangSysCount;
|
|
Packit |
daac2c |
OTF_LangSysRecord *LangSysRecord;
|
|
Packit |
daac2c |
OTF_LangSys *LangSys;
|
|
Packit |
daac2c |
} OTF_Script;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned ScriptCount;
|
|
Packit |
daac2c |
OTF_Script *Script;
|
|
Packit |
daac2c |
} OTF_ScriptList;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Tag FeatureTag;
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
OTF_Offset FeatureParams;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
unsigned *LookupListIndex;
|
|
Packit |
daac2c |
} OTF_Feature;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned FeatureCount;
|
|
Packit |
daac2c |
OTF_Feature *Feature;
|
|
Packit |
daac2c |
} OTF_FeatureList;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct OTF_LookupSubTableGSUB OTF_LookupSubTableGSUB;
|
|
Packit |
daac2c |
typedef struct OTF_LookupSubTableGPOS OTF_LookupSubTableGPOS;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
enum OTF_LookupFlagBit
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_RightToLeft = 0x0001,
|
|
Packit |
daac2c |
OTF_IgnoreBaseGlyphs = 0x0002,
|
|
Packit |
daac2c |
OTF_IgnoreLigatures = 0x0004,
|
|
Packit |
daac2c |
OTF_IgnoreMarks = 0x0008,
|
|
Packit |
daac2c |
OTF_Reserved = 0x00F0,
|
|
Packit |
daac2c |
OTF_MarkAttachmentType = 0xFF00
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
#define OTF_LookupFlagIgnoreMask \
|
|
Packit |
daac2c |
(OTF_IgnoreBaseGlyphs | OTF_IgnoreLigatures | OTF_IgnoreMarks)
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned LookupType;
|
|
Packit |
daac2c |
unsigned LookupFlag;
|
|
Packit |
daac2c |
unsigned SubTableCount;
|
|
Packit |
daac2c |
OTF_Offset *SubTableOffset;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
OTF_LookupSubTableGSUB *gsub;
|
|
Packit |
daac2c |
OTF_LookupSubTableGPOS *gpos;
|
|
Packit |
daac2c |
} SubTable;
|
|
Packit |
daac2c |
} OTF_Lookup;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
OTF_Lookup *Lookup;
|
|
Packit |
daac2c |
} OTF_LookupList;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-8) Structures common to GSUB and GPOS */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* For SubstLookupRecord (GSUB) and PosLookupRecord (GPOS). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned SequenceIndex;
|
|
Packit |
daac2c |
unsigned LookupListIndex;
|
|
Packit |
daac2c |
} OTF_LookupRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Input; /* [<GlyphCount> - 1] */
|
|
Packit |
daac2c |
OTF_LookupRecord *LookupRecord; /* [<LookupCount>] */
|
|
Packit |
daac2c |
} OTF_Rule;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned RuleCount;
|
|
Packit |
daac2c |
OTF_Rule *Rule; /* [<RuleCount>] */
|
|
Packit |
daac2c |
} OTF_RuleSet;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
unsigned *Class; /* [<GlyphCount> - 1] */
|
|
Packit |
daac2c |
OTF_LookupRecord *LookupRecord; /* [<LookupCount>] */
|
|
Packit |
daac2c |
} OTF_ClassRule;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned ClassRuleCnt;
|
|
Packit |
daac2c |
OTF_ClassRule *ClassRule; /* [<ClassRuleCnt>] */
|
|
Packit |
daac2c |
} OTF_ClassSet;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned BacktrackGlyphCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Backtrack;
|
|
Packit |
daac2c |
unsigned InputGlyphCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Input;
|
|
Packit |
daac2c |
unsigned LookaheadGlyphCount;
|
|
Packit |
daac2c |
OTF_GlyphID *LookAhead;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
OTF_LookupRecord *LookupRecord;
|
|
Packit |
daac2c |
} OTF_ChainRule;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned ChainRuleCount;
|
|
Packit |
daac2c |
OTF_ChainRule *ChainRule;
|
|
Packit |
daac2c |
} OTF_ChainRuleSet;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned BacktrackGlyphCount;
|
|
Packit |
daac2c |
unsigned *Backtrack;
|
|
Packit |
daac2c |
unsigned InputGlyphCount;
|
|
Packit |
daac2c |
unsigned *Input;
|
|
Packit |
daac2c |
unsigned LookaheadGlyphCount;
|
|
Packit |
daac2c |
unsigned *LookAhead;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
OTF_LookupRecord *LookupRecord;
|
|
Packit |
daac2c |
} OTF_ChainClassRule;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned ChainClassRuleCnt;
|
|
Packit |
daac2c |
OTF_ChainClassRule *ChainClassRule;
|
|
Packit |
daac2c |
} OTF_ChainClassSet;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* Common to OTF_GSUB/GPOS_Context1/2/3. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned RuleSetCount;
|
|
Packit |
daac2c |
OTF_RuleSet *RuleSet; /* [<RuleSetCount>] */
|
|
Packit |
daac2c |
} OTF_Context1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_ClassDef ClassDef;
|
|
Packit |
daac2c |
unsigned ClassSetCnt;
|
|
Packit |
daac2c |
OTF_ClassSet *ClassSet; /* [<ClassSetCnt>] */
|
|
Packit |
daac2c |
} OTF_Context2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
OTF_Coverage *Coverage; /* [<GlyphCount>] */
|
|
Packit |
daac2c |
OTF_LookupRecord *LookupRecord; /* [<LookupCount>] */
|
|
Packit |
daac2c |
} OTF_Context3;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* Common to OTF_GSUB/GPOS_ChainContext1/2/3. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned ChainRuleSetCount;
|
|
Packit |
daac2c |
OTF_ChainRuleSet *ChainRuleSet;
|
|
Packit |
daac2c |
} OTF_ChainContext1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_ClassDef BacktrackClassDef;
|
|
Packit |
daac2c |
OTF_ClassDef InputClassDef;
|
|
Packit |
daac2c |
OTF_ClassDef LookaheadClassDef;
|
|
Packit |
daac2c |
unsigned ChainClassSetCnt;
|
|
Packit |
daac2c |
OTF_ChainClassSet *ChainClassSet;
|
|
Packit |
daac2c |
} OTF_ChainContext2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned BacktrackGlyphCount;
|
|
Packit |
daac2c |
OTF_Coverage *Backtrack;
|
|
Packit |
daac2c |
unsigned InputGlyphCount;
|
|
Packit |
daac2c |
OTF_Coverage *Input;
|
|
Packit |
daac2c |
unsigned LookaheadGlyphCount;
|
|
Packit |
daac2c |
OTF_Coverage *LookAhead;
|
|
Packit |
daac2c |
unsigned LookupCount;
|
|
Packit |
daac2c |
OTF_LookupRecord *LookupRecord;
|
|
Packit |
daac2c |
} OTF_ChainContext3;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* Common to OTF_GSUB/GPOS. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Fixed Version;
|
|
Packit |
daac2c |
OTF_ScriptList ScriptList;
|
|
Packit |
daac2c |
OTF_FeatureList FeatureList;
|
|
Packit |
daac2c |
OTF_LookupList LookupList;
|
|
Packit |
daac2c |
} OTF_GSUB_GPOS;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-9) "GSUB" table */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
int DeltaGlyphID;
|
|
Packit |
daac2c |
} OTF_GSUB_Single1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Substitute;
|
|
Packit |
daac2c |
} OTF_GSUB_Single2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct OTF_Sequence OTF_Sequence;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned SequenceCount;
|
|
Packit |
daac2c |
OTF_Sequence *Sequence;
|
|
Packit |
daac2c |
} OTF_GSUB_Multiple1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
struct OTF_Sequence
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Substitute;
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct OTF_AlternateSet OTF_AlternateSet;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned AlternateSetCount;
|
|
Packit |
daac2c |
OTF_AlternateSet *AlternateSet;
|
|
Packit |
daac2c |
} OTF_GSUB_Alternate1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
struct OTF_AlternateSet
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Alternate;
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct OTF_LigatureSet OTF_LigatureSet;
|
|
Packit |
daac2c |
typedef struct OTF_Ligature OTF_Ligature;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned LigSetCount;
|
|
Packit |
daac2c |
OTF_LigatureSet *LigatureSet;
|
|
Packit |
daac2c |
} OTF_GSUB_Ligature1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
struct OTF_LigatureSet
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned LigatureCount;
|
|
Packit |
daac2c |
OTF_Ligature *Ligature;
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
struct OTF_Ligature
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
OTF_GlyphID LigGlyph;
|
|
Packit |
daac2c |
unsigned CompCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Component;
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_Context1 OTF_GSUB_Context1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_Context2 OTF_GSUB_Context2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_Context3 OTF_GSUB_Context3;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_ChainContext1 OTF_GSUB_ChainContext1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_ChainContext2 OTF_GSUB_ChainContext2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_ChainContext3 OTF_GSUB_ChainContext3;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned ExtensionLookupType;
|
|
Packit |
daac2c |
unsigned ExtensionOffset;
|
|
Packit |
daac2c |
OTF_LookupSubTableGSUB *ExtensionSubtable;
|
|
Packit |
daac2c |
} OTF_GSUB_Extension1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned BacktrackGlyphCount;
|
|
Packit |
daac2c |
OTF_Coverage *Backtrack;
|
|
Packit |
daac2c |
unsigned LookaheadGlyphCount;
|
|
Packit |
daac2c |
OTF_Coverage *LookAhead;
|
|
Packit |
daac2c |
unsigned GlyphCount;
|
|
Packit |
daac2c |
OTF_GlyphID *Substitute;
|
|
Packit |
daac2c |
} OTF_GSUB_ReverseChain1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
struct OTF_LookupSubTableGSUB
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned Format;
|
|
Packit |
daac2c |
OTF_Coverage Coverage;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
/* LookupType 1 */
|
|
Packit |
daac2c |
OTF_GSUB_Single1 single1;
|
|
Packit |
daac2c |
OTF_GSUB_Single2 single2;
|
|
Packit |
daac2c |
/* LookupType 2 */
|
|
Packit |
daac2c |
OTF_GSUB_Multiple1 multiple1;
|
|
Packit |
daac2c |
/* LookupType 3 */
|
|
Packit |
daac2c |
OTF_GSUB_Alternate1 alternate1;
|
|
Packit |
daac2c |
/* LookupType 4 */
|
|
Packit |
daac2c |
OTF_GSUB_Ligature1 ligature1;
|
|
Packit |
daac2c |
/* LookupType 5 */
|
|
Packit |
daac2c |
OTF_GSUB_Context1 context1;
|
|
Packit |
daac2c |
OTF_GSUB_Context2 context2;
|
|
Packit |
daac2c |
OTF_GSUB_Context3 context3;
|
|
Packit |
daac2c |
/* LookupType 6 */
|
|
Packit |
daac2c |
OTF_GSUB_ChainContext1 chain_context1;
|
|
Packit |
daac2c |
OTF_GSUB_ChainContext2 chain_context2;
|
|
Packit |
daac2c |
OTF_GSUB_ChainContext3 chain_context3;
|
|
Packit |
daac2c |
/* LookupType 7 */
|
|
Packit |
daac2c |
OTF_GSUB_Extension1 extension1;
|
|
Packit |
daac2c |
/* LookupType 8 */
|
|
Packit |
daac2c |
OTF_GSUB_ReverseChain1 reverse_chain1;
|
|
Packit |
daac2c |
} u;
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_GSUB_GPOS OTF_GSUB;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-10) "GPOS" table */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
enum OTF_ValueFormat
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_XPlacement = 0x0001,
|
|
Packit |
daac2c |
OTF_YPlacement = 0x0002,
|
|
Packit |
daac2c |
OTF_XAdvance = 0x0004,
|
|
Packit |
daac2c |
OTF_YAdvance = 0x0008,
|
|
Packit |
daac2c |
OTF_XPlaDevice = 0x0010,
|
|
Packit |
daac2c |
OTF_YPlaDevice = 0x0020,
|
|
Packit |
daac2c |
OTF_XAdvDevice = 0x0040,
|
|
Packit |
daac2c |
OTF_YAdvDevice = 0x0080
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
int XPlacement;
|
|
Packit |
daac2c |
int YPlacement;
|
|
Packit |
daac2c |
int XAdvance;
|
|
Packit |
daac2c |
int YAdvance;
|
|
Packit |
daac2c |
OTF_DeviceTable XPlaDevice;
|
|
Packit |
daac2c |
OTF_DeviceTable YPlaDevice;
|
|
Packit |
daac2c |
OTF_DeviceTable XAdvDevice;
|
|
Packit |
daac2c |
OTF_DeviceTable YAdvDevice;
|
|
Packit |
daac2c |
} OTF_ValueRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned AnchorFormat;
|
|
Packit |
daac2c |
int XCoordinate;
|
|
Packit |
daac2c |
int YCoordinate;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
unsigned AnchorPoint;
|
|
Packit |
daac2c |
} f1;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
OTF_DeviceTable XDeviceTable;
|
|
Packit |
daac2c |
OTF_DeviceTable YDeviceTable;
|
|
Packit |
daac2c |
} f2;
|
|
Packit |
daac2c |
} f;
|
|
Packit |
daac2c |
} OTF_Anchor;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned Class;
|
|
Packit |
daac2c |
OTF_Anchor MarkAnchor;
|
|
Packit |
daac2c |
} OTF_MarkRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned MarkCount;
|
|
Packit |
daac2c |
OTF_MarkRecord *MarkRecord;
|
|
Packit |
daac2c |
} OTF_MarkArray;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned ValueFormat;
|
|
Packit |
daac2c |
OTF_ValueRecord Value;
|
|
Packit |
daac2c |
} OTF_GPOS_Single1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned ValueFormat;
|
|
Packit |
daac2c |
unsigned ValueCount;
|
|
Packit |
daac2c |
OTF_ValueRecord *Value; /* [<ValueCount>] */
|
|
Packit |
daac2c |
} OTF_GPOS_Single2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_GlyphID SecondGlyph;
|
|
Packit |
daac2c |
OTF_ValueRecord Value1;
|
|
Packit |
daac2c |
OTF_ValueRecord Value2;
|
|
Packit |
daac2c |
} OTF_PairValueRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned PairValueCount;
|
|
Packit |
daac2c |
OTF_PairValueRecord *PairValueRecord;
|
|
Packit |
daac2c |
} OTF_PairSet;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned ValueFormat1;
|
|
Packit |
daac2c |
unsigned ValueFormat2;
|
|
Packit |
daac2c |
unsigned PairSetCount;
|
|
Packit |
daac2c |
OTF_PairSet *PairSet;
|
|
Packit |
daac2c |
} OTF_GPOS_Pair1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_ValueRecord Value1;
|
|
Packit |
daac2c |
OTF_ValueRecord Value2;
|
|
Packit |
daac2c |
} OTF_Class2Record;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Class2Record *Class2Record;
|
|
Packit |
daac2c |
} OTF_Class1Record;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned ValueFormat1;
|
|
Packit |
daac2c |
unsigned ValueFormat2;
|
|
Packit |
daac2c |
OTF_ClassDef ClassDef1;
|
|
Packit |
daac2c |
OTF_ClassDef ClassDef2;
|
|
Packit |
daac2c |
unsigned Class1Count;
|
|
Packit |
daac2c |
unsigned Class2Count;
|
|
Packit |
daac2c |
OTF_Class1Record *Class1Record; /* size: <Class1Count> */
|
|
Packit |
daac2c |
} OTF_GPOS_Pair2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Anchor EntryAnchor;
|
|
Packit |
daac2c |
OTF_Anchor ExitAnchor;
|
|
Packit |
daac2c |
} OTF_EntryExitRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned EntryExitCount;
|
|
Packit |
daac2c |
OTF_EntryExitRecord *EntryExitRecord;
|
|
Packit |
daac2c |
} OTF_GPOS_Cursive1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Anchor *Anchor;
|
|
Packit |
daac2c |
} OTF_AnchorRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned Count;
|
|
Packit |
daac2c |
OTF_AnchorRecord *AnchorRecord;
|
|
Packit |
daac2c |
} OTF_AnchorArray;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Coverage BaseCoverage;
|
|
Packit |
daac2c |
unsigned ClassCount;
|
|
Packit |
daac2c |
OTF_MarkArray MarkArray;
|
|
Packit |
daac2c |
OTF_AnchorArray BaseArray;
|
|
Packit |
daac2c |
} OTF_GPOS_MarkBase1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Anchor *LigatureAnchor; /* [<ClassCount>] */
|
|
Packit |
daac2c |
} OTF_ComponentRecord;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned ComponentCount;
|
|
Packit |
daac2c |
OTF_ComponentRecord *ComponentRecord; /* [<ComponentCount>] */
|
|
Packit |
daac2c |
} OTF_LigatureAttach;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Offset offset;
|
|
Packit |
daac2c |
unsigned LigatureCount;
|
|
Packit |
daac2c |
OTF_LigatureAttach *LigatureAttach; /* [<LiagureCount>] */
|
|
Packit |
daac2c |
} OTF_LigatureArray;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Coverage LigatureCoverage;
|
|
Packit |
daac2c |
unsigned ClassCount;
|
|
Packit |
daac2c |
OTF_MarkArray MarkArray;
|
|
Packit |
daac2c |
OTF_LigatureArray LigatureArray;
|
|
Packit |
daac2c |
} OTF_GPOS_MarkLig1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Coverage Mark2Coverage;
|
|
Packit |
daac2c |
unsigned ClassCount;
|
|
Packit |
daac2c |
OTF_MarkArray Mark1Array;
|
|
Packit |
daac2c |
OTF_AnchorArray Mark2Array;
|
|
Packit |
daac2c |
} OTF_GPOS_MarkMark1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_Context1 OTF_GPOS_Context1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_Context2 OTF_GPOS_Context2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_Context3 OTF_GPOS_Context3;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_ChainContext1 OTF_GPOS_ChainContext1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_ChainContext2 OTF_GPOS_ChainContext2;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_ChainContext3 OTF_GPOS_ChainContext3;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned ExtensionLookupType;
|
|
Packit |
daac2c |
unsigned ExtensionOffset;
|
|
Packit |
daac2c |
OTF_LookupSubTableGPOS *ExtensionSubtable;
|
|
Packit |
daac2c |
} OTF_GPOS_Extension1;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
struct OTF_LookupSubTableGPOS
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
unsigned Format;
|
|
Packit |
daac2c |
OTF_Coverage Coverage;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
/* LookupType 1 */
|
|
Packit |
daac2c |
OTF_GPOS_Single1 single1;
|
|
Packit |
daac2c |
OTF_GPOS_Single2 single2;
|
|
Packit |
daac2c |
/* LookupType 2 */
|
|
Packit |
daac2c |
OTF_GPOS_Pair1 pair1;
|
|
Packit |
daac2c |
OTF_GPOS_Pair2 pair2;
|
|
Packit |
daac2c |
/* LookupType 3 */
|
|
Packit |
daac2c |
OTF_GPOS_Cursive1 cursive1;
|
|
Packit |
daac2c |
/* LookupType 4 */
|
|
Packit |
daac2c |
OTF_GPOS_MarkBase1 mark_base1;
|
|
Packit |
daac2c |
/* LookupType 5 */
|
|
Packit |
daac2c |
OTF_GPOS_MarkLig1 mark_lig1;
|
|
Packit |
daac2c |
/* LookupType 6 */
|
|
Packit |
daac2c |
OTF_GPOS_MarkMark1 mark_mark1;
|
|
Packit |
daac2c |
/* LookupType 7 */
|
|
Packit |
daac2c |
OTF_GPOS_Context1 context1;
|
|
Packit |
daac2c |
OTF_GPOS_Context2 context2;
|
|
Packit |
daac2c |
OTF_GPOS_Context3 context3;
|
|
Packit |
daac2c |
/* LookupType 8 */
|
|
Packit |
daac2c |
OTF_GPOS_ChainContext1 chain_context1;
|
|
Packit |
daac2c |
OTF_GPOS_ChainContext2 chain_context2;
|
|
Packit |
daac2c |
OTF_GPOS_ChainContext3 chain_context3;
|
|
Packit |
daac2c |
/* LookupType 9 */
|
|
Packit |
daac2c |
OTF_GPOS_Extension1 extension1;
|
|
Packit |
daac2c |
} u;
|
|
Packit |
daac2c |
};
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef OTF_GSUB_GPOS OTF_GPOS;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (1-11) Structure for OTF */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Fixed sfnt_version;
|
|
Packit |
daac2c |
unsigned numTables;
|
|
Packit |
daac2c |
unsigned searchRange;
|
|
Packit |
daac2c |
unsigned enterSelector;
|
|
Packit |
daac2c |
unsigned rangeShift;
|
|
Packit |
daac2c |
} OTF_OffsetTable;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
OTF_Tag tag;
|
|
Packit |
daac2c |
char name[5];
|
|
Packit |
daac2c |
unsigned checkSum;
|
|
Packit |
daac2c |
unsigned offset;
|
|
Packit |
daac2c |
unsigned length;
|
|
Packit |
daac2c |
} OTF_TableDirectory;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct OTF_InternalData OTF_InternalData;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
char *filename;
|
|
Packit |
daac2c |
OTF_OffsetTable offset_table;
|
|
Packit |
daac2c |
OTF_TableDirectory *table_dirs;
|
|
Packit |
daac2c |
OTF_head *head;
|
|
Packit |
daac2c |
OTF_name *name;
|
|
Packit |
daac2c |
OTF_cmap *cmap;
|
|
Packit |
daac2c |
OTF_GDEF *gdef;
|
|
Packit |
daac2c |
OTF_GSUB *gsub;
|
|
Packit |
daac2c |
OTF_GPOS *gpos;
|
|
Packit |
daac2c |
/* The following tables are not yet supported. */
|
|
Packit |
daac2c |
/* OTF_BASE *base; */
|
|
Packit |
daac2c |
/* OTF_JSTF *jstf; */
|
|
Packit |
daac2c |
OTF_InternalData *internal_data;
|
|
Packit |
daac2c |
} OTF;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2) API for reading OTF */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2-1) otf_open () */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Open OpenType font
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_open() function reads the OpenType font file whose name is
|
|
Packit |
daac2c |
$NAME, and return a pointer to the structure of type OTF.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
It setups these member of the structure OTF:
|
|
Packit |
daac2c |
filename, offset_table, table_dirs
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
If the file can't be read or the file contains invalid data, NULL
|
|
Packit |
daac2c |
is returned, and the variable OTF_error is set to one of the
|
|
Packit |
daac2c |
following values.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
OTF_ERROR_MEMORY
|
|
Packit |
daac2c |
OTF_ERROR_FILE
|
|
Packit |
daac2c |
OTF_ERROR_TABLE
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See also OTF_get_table() and OTF_close(). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern OTF *OTF_open (const char *name);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
#include <ft2build.h>
|
|
Packit |
daac2c |
#include FT_FREETYPE_H
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern OTF *OTF_open_ft_face (FT_Face face);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2-2) OTF_close () */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Close OpenType font
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_close() function closes the OpenType font $OTF which must
|
|
Packit |
daac2c |
be what the OTF_open() function returned.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See also OTF_open(). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern void OTF_close (OTF *otf);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2-3) OTF_get_table () */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Get OpenType font table
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_get_table() function setups one of the OTF table specified
|
|
Packit |
daac2c |
by $NAME in the OpenType font $OTF.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
$NAME must be one of "head", "name", "cmap", "GDEF", "GSUB", and
|
|
Packit |
daac2c |
"GPOS", and a member of the same name is setup.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
If the table is successfully setup, return 0. Otherwise, return
|
|
Packit |
daac2c |
-1, and set the variable OTF_error to OTF_ERROR_TABLE.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See also OTF_open(). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_get_table (OTF *otf, const char *name);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2-4) OTF_check_table () */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Check the existence of OpenType font table
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_check_table() function checks if the the OTF table
|
|
Packit |
daac2c |
specified by $NAME exists in OpenType font $OTF.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
If the table exists, return 0, else return -1.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See also OTF_open(). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_check_table (OTF *otf, const char *name);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2-5) OTF_get_scripts () */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Get supported scripts.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_get_scripts() function setups OTF_ScriptList of GSUB (if
|
|
Packit |
daac2c |
$GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the
|
|
Packit |
daac2c |
OpenType font $OTF.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
If the table is successfully setup, return 0. Otherwise, retrun
|
|
Packit |
daac2c |
-1, and set the variable OTF_error to OTF_ERROR_TABLE. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_get_scripts (OTF *otf, int gsubp);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2-6) OTF_get_features () */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Get supported features.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_get_features() function setups OTF_FeatureList of GSUB (if
|
|
Packit |
daac2c |
$GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the
|
|
Packit |
daac2c |
OpenType font $OTF.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
If the table is successfully setup, return 0. Otherwise, retrun
|
|
Packit |
daac2c |
-1, and set the variable OTF_error to OTF_ERROR_TABLE. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_get_features (OTF *otf, int gsubp);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (2-7) OTF_check_features */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Check supported features.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_check_features() function checks whether or not the
|
|
Packit |
daac2c |
OpenType font $OTF has, for $SCRIPT and $LANGUAGE, all features in
|
|
Packit |
daac2c |
the array $FEATURES. The array size is $N_FEATURES. If $LANGUAGE
|
|
Packit |
daac2c |
is zero or $OTF doesn't have LangSys for $SCRIPT, the default
|
|
Packit |
daac2c |
LangSys is checked.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
If $OTF has all the features, return 1. Otherwise, return 0. If
|
|
Packit |
daac2c |
an error occurs, return -1, and set the variable OTF_error to
|
|
Packit |
daac2c |
OTF_ERROR_TABLE. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_check_features (OTF *otf, int gsubp,
|
|
Packit |
daac2c |
OTF_Tag script, OTF_Tag language,
|
|
Packit |
daac2c |
const OTF_Tag *features, int n_features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3) API for driving OTF */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-1) Structure for glyph string */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
The structure OTF_Glyph contains information about each glyph in
|
|
Packit |
daac2c |
the structure OTF_GlyphString. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
/** The first two members must be set by a clinet before calling the
|
|
Packit |
daac2c |
function OTF_drive_XXX(). **/
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* Character code of the glyph. The value less than 32 is treated
|
|
Packit |
daac2c |
as a place-holder in a glyph string, and OTF_drive_XXX ()
|
|
Packit |
daac2c |
function just ignore the glyph as if it doesn't exist. */
|
|
Packit |
daac2c |
int c;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* Glyph ID of the glyph. If the value is 0, the library gets a
|
|
Packit |
daac2c |
correct value from the above character code via cmap if such a
|
|
Packit |
daac2c |
glyph is available in the font.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The functions OTF_drive_gpos2 and OTF_driver_gpos_with_log may
|
|
Packit |
daac2c |
insert a glyph whose glyph_id is 0 but positioning_type is
|
|
Packit |
daac2c |
positive. It is not an actual glyph but just contains
|
|
Packit |
daac2c |
positioning information that should be accumulated to the
|
|
Packit |
daac2c |
positioning information of the previous glyphs. */
|
|
Packit |
daac2c |
OTF_GlyphID glyph_id;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* GlyphClass of the glyph. The value is extracted from the GDEF
|
|
Packit |
daac2c |
table. */
|
|
Packit |
daac2c |
enum OTF_GlyphClassDef GlyphClass;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* MarkAttachClassDef of the glyph. The value is extracted from the
|
|
Packit |
daac2c |
GDEF table. */
|
|
Packit |
daac2c |
unsigned MarkAttachClass;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/* The lowest 4-bit is a positioning format type of the glyph. The
|
|
Packit |
daac2c |
value specifies how the glyph positioning information is encoded
|
|
Packit |
daac2c |
in the member <f>. If the value is N, the union member fN, is
|
|
Packit |
daac2c |
used. If the value is zero, the glyph has no positioning
|
|
Packit |
daac2c |
information, i.e. it should be drawn at the normal position.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
OTF_drive_gsub, OTF_drive_gsub_alternate, OTF_drive_gpos, and
|
|
Packit |
daac2c |
OTF_drive_gpos2 always sets the higher bits to zero.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
OTF_drive_gsub_with_log and OTF_drive_gpos_with_log sets the
|
|
Packit |
daac2c |
higher 16-bit (i.e. 5th to 20th bits) to the index number of the
|
|
Packit |
daac2c |
lastly applied feature on the glyph plus one. If no feature was
|
|
Packit |
daac2c |
applied, those bits are zero. */
|
|
Packit |
daac2c |
unsigned int positioning_type;
|
|
Packit |
daac2c |
union {
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
int from, to;
|
|
Packit |
daac2c |
} index;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
enum OTF_ValueFormat format;
|
|
Packit |
daac2c |
OTF_ValueRecord *value;
|
|
Packit |
daac2c |
} f1;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
enum OTF_ValueFormat format;
|
|
Packit |
daac2c |
OTF_ValueRecord *value;
|
|
Packit |
daac2c |
} f2;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
OTF_Anchor *entry_anchor;
|
|
Packit |
daac2c |
OTF_Anchor *exit_anchor;
|
|
Packit |
daac2c |
} f3;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
OTF_Anchor *mark_anchor;
|
|
Packit |
daac2c |
OTF_Anchor *base_anchor;
|
|
Packit |
daac2c |
} f4;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
OTF_Anchor *mark_anchor;
|
|
Packit |
daac2c |
OTF_Anchor *ligature_anchor;
|
|
Packit |
daac2c |
} f5;
|
|
Packit |
daac2c |
struct {
|
|
Packit |
daac2c |
OTF_Anchor *mark1_anchor;
|
|
Packit |
daac2c |
OTF_Anchor *mark2_anchor;
|
|
Packit |
daac2c |
} f6;
|
|
Packit |
daac2c |
} f;
|
|
Packit |
daac2c |
} OTF_Glyph;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
The structure OTF_GlyphString contains an array of glyphs (type
|
|
Packit |
daac2c |
OTF_Glyph). It is used as arguments of otf_drive_XXX(). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
typedef struct
|
|
Packit |
daac2c |
{
|
|
Packit |
daac2c |
/* How many glyphs are allocated at the memory pointed by the member
|
|
Packit |
daac2c |
<glyphs>. */
|
|
Packit |
daac2c |
int size;
|
|
Packit |
daac2c |
/* How many glyphs contain valid information. */
|
|
Packit |
daac2c |
int used;
|
|
Packit |
daac2c |
/* Array of glyphs. It must be allocated by malloc(). The
|
|
Packit |
daac2c |
functions otf_drive_XXX() may reallocate it and increase the
|
|
Packit |
daac2c |
members <size> and <used>. */
|
|
Packit |
daac2c |
OTF_Glyph *glyphs;
|
|
Packit |
daac2c |
} OTF_GlyphString;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-2) OTF_drive_cmap() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by Unicode-based cmap table.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_drive_cmap() function looks up a Unicode-based cmap table
|
|
Packit |
daac2c |
of OpenType font $OTF, and setup the member <glyph_id> of all
|
|
Packit |
daac2c |
glhphs in the glyph string $GSTRING if the value of the member is
|
|
Packit |
daac2c |
not zero. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_cmap (OTF *otf, OTF_GlyphString *gstring);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by a specific cmap table.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_drive_cmap2() function looks up a cmap table (whose
|
|
Packit |
daac2c |
Platform-ID is $PLATFORM_ID an Encoding-ID is $ENCODING_ID) of
|
|
Packit |
daac2c |
OpenType font $OTF, and setup the member <glyph_id> of all glhphs
|
|
Packit |
daac2c |
in the glyph string $GSTRING if the value of the member is not
|
|
Packit |
daac2c |
zero. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_cmap2 (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
int platform_id, int encoding_id);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Store variable glyphs of character C in the array CODE. The array
|
|
Packit |
daac2c |
size must be 256. The Nth element of CODE is the glyph corresponding
|
|
Packit |
daac2c |
to the variation selector (N + 1). The return value is the number
|
|
Packit |
daac2c |
of variation glyphs. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_get_variation_glyphs (OTF *otf, int c, OTF_GlyphID code[256]);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-3) OTF_drive_gdef() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by GDEF table.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_drive_gdef() function looks up the GDEF table of OpenType
|
|
Packit |
daac2c |
font $OTF, and setup members <GlyphClass> and <MarkAttachClass> of
|
|
Packit |
daac2c |
all glhphs in the glyph string $GSTRING. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_gdef (OTF *otf, OTF_GlyphString *gstring);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-4) OTF_drive_gsub() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by GSUB table.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_drive_gsub() function looks up the GSUB table of OpenType
|
|
Packit |
daac2c |
font $OTF, and by using features the font has for script $SCRIPT
|
|
Packit |
daac2c |
and language system $LANGSYS, update member <glyphs> of the glyph
|
|
Packit |
daac2c |
string $GSTRING. It may substitute, delete, insert glyphs in that
|
|
Packit |
daac2c |
array. $FEATURES is a list of features to apply. This doesn't
|
|
Packit |
daac2c |
perform a lookup of type 3 (Alternate Substitution). For that,
|
|
Packit |
daac2c |
use OTF_drive_gsub_alternate(). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by GSUB table with log.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This is like OTF_drive_gsub(), but records which feature is
|
|
Packit |
daac2c |
applied to each glyph in the higher bits of `positioning_type'
|
|
Packit |
daac2c |
member of OTF_Glyph. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_gsub_with_log (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-5) OTF_drive_gpos() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by GPOS table.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_drive_gpos() function is deprecated. Use
|
|
Packit |
daac2c |
OTF_drive_gpos2() instread. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_gpos (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by GPOS table.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_drive_gpos2() function looks up the GPOS table of $OTF of
|
|
Packit |
daac2c |
OpenType font $OTF, and by using features the font has for script
|
|
Packit |
daac2c |
$SCRIPT and language system $LANGSYS, setup members
|
|
Packit |
daac2c |
<positioning_type> and <f> of all glhphs in the glyph string
|
|
Packit |
daac2c |
$GSTRING. $FEATURES is a list of features to apply. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_gpos2 (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by GPOS table with log.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This is like OTF_drive_pos_2(), but records which feature is
|
|
Packit |
daac2c |
applied to each glyph in the higher bits of `positioning_type'
|
|
Packit |
daac2c |
member of OTF_Glyph. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_gpos_with_log (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-6) OTF_drive_tables() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Process glyph string by cmap, GDEF, GSUB, and GPOS tables.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_drive_tables() function calls OTF_drive_cmap(),
|
|
Packit |
daac2c |
OTF_drive_gdef(), OTF_drive_gsub(), and OTF_drive_gpos() in this
|
|
Packit |
daac2c |
order, and update the glyphs string GSTRING. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_tables (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *gsub_features,
|
|
Packit |
daac2c |
const char *gpos_features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-7) OTF_get_unicode() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Return Unicode code point corresponding to the glyph-id CODE.
|
|
Packit |
daac2c |
*/
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_get_unicode (OTF *otf, OTF_GlyphID code);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-8) OTF_drive_gsub_alternate() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Find alternate glyphs.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This is like OTF_drive_gsub(), but perform only a lookup of type 3
|
|
Packit |
daac2c |
(Alternate Substituion). */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *features);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (3-9) OTF_iterate_on_feature() */
|
|
Packit |
daac2c |
typedef int (*OTF_Feature_Callback) (OTF *otf, const char *feature,
|
|
Packit |
daac2c |
unsigned glyph_id);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_iterate_gsub_feature (OTF *otf, OTF_Feature_Callback callback,
|
|
Packit |
daac2c |
const char *script, const char *language,
|
|
Packit |
daac2c |
const char *feature);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (4) API for error handling ***/
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (4-1) Error codes ***/
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Global variable holding an error code.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The variable OTF_error is set to one of OTF_ERROR_XXX macros when
|
|
Packit |
daac2c |
an error is detected in the OTF library. */
|
|
Packit |
daac2c |
extern int OTF_error;
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Memory allocation error
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This error indicates that the library couldn't allocate
|
|
Packit |
daac2c |
memory. */
|
|
Packit |
daac2c |
#define OTF_ERROR_MEMORY 1
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
File error
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This error indicates that the library fails in opening, reading,
|
|
Packit |
daac2c |
or seeking an OTF file. */
|
|
Packit |
daac2c |
#define OTF_ERROR_FILE 2
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Invalid table contents
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This error indicates that an OTF file contains invalid data. */
|
|
Packit |
daac2c |
#define OTF_ERROR_TABLE 3
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
CMAP driving error
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See the function otf_drive_cmap() for more detail. */
|
|
Packit |
daac2c |
#define OTF_ERROR_CMAP_DRIVE 4
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
GDEF driving error
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See the function OTF_drive_gdef() for more detail. */
|
|
Packit |
daac2c |
#define OTF_ERROR_GDEF_DRIVE 5
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
GSUB driving error
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See the function OTF_drive_gsub() for more detail. */
|
|
Packit |
daac2c |
#define OTF_ERROR_GSUB_DRIVE 6
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
GPOS driving error
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
See the function OTF_drive_gpos() for more detail. */
|
|
Packit |
daac2c |
#define OTF_ERROR_GPOS_DRIVE 7
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
FT_Face access error.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
This error indicates that the library fails in accessing Sfnt
|
|
Packit |
daac2c |
tables via FT_Face. */
|
|
Packit |
daac2c |
#define OTF_ERROR_FT_FACE 8
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (4-2) OTF_perror() */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Print an OTF error message
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_perror() function produces a message on the standard error
|
|
Packit |
daac2c |
output, describing the last error encountered during a call to the
|
|
Packit |
daac2c |
OTF library function. If $PREFIX is not NULL, it is printed
|
|
Packit |
daac2c |
first, followed by a colon and a blank. Then the message and a
|
|
Packit |
daac2c |
newline. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern void OTF_perror (const char *prefix);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/*** (5) API miscellaneous ***/
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Return OTF tag of a specified name string.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_tag() function returns OTF tag of name $NAME. If $NAME is
|
|
Packit |
daac2c |
NULL, return 0. Otherwise, $NAME must be at least 4-byte length.
|
|
Packit |
daac2c |
Only the first 4 characters are took into an account. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern OTF_Tag OTF_tag (const char *name);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
/***
|
|
Packit |
daac2c |
Convert OTF tag to name string.
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
The OTF_tag_name() function converts OTF tag $TAG to a 5-byte name
|
|
Packit |
daac2c |
string (including the terminating NULL), and store it in $NAME.
|
|
Packit |
daac2c |
At least 5-byte space must be at $NAME. */
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern void OTF_tag_name (OTF_Tag tag, char *name);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern int OTF_put_data (OTF *otf, char *id, void *data,
|
|
Packit |
daac2c |
void (*freer) (void *data));
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
extern void *OTF_get_data (OTF *otf, char *id);
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
#ifdef __cplusplus
|
|
Packit |
daac2c |
}
|
|
Packit |
daac2c |
#endif
|
|
Packit |
daac2c |
|
|
Packit |
daac2c |
#endif /* not _OTF_H_ */
|