-/* otf.h -- Header file for the OTF (OpenType font) library.
+/* otf.h -- Header file for libotf (OpenType font library).
-Copyright (C) 2002
- by AIST (National Institute of Advanced Industrial Science and Technology)
- Registration Number H14PRO???
+Copyright (C) 2003, 2004
+ National Institute of Advanced Industrial Science and Technology (AIST)
+ Registration Number H15PRO167
-This file is part of the OTF library.
+This file is part of libotf.
-The OTF library is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License as
-published by the Free Software Foundation; either version 2, or (at
-your option) any later version.
+Libotf is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published
+by the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
-The OTF library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
+Libotf is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
-You should have received a copy of the GNU General Public License
-along with the OTF library; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+You should have received a copy of the GNU Lesser General Public
+License along with this library, in a file named COPYING; if not,
+write to the Free Software Foundation, Inc., 59 Temple Place, Suite
+330, Boston, MA 02111-1307, USA. */
#ifndef _OTF_H_
#define _OTF_H_
+/* Version name of this library. */
+#define LIBOTF_VERSION "0.9.3"
+
+/* Major version number. */
+#define LIBOTF_MAJOR_VERSION 0
+/* Minor version number. */
+#define LIBOTF_MINOR_VERSION 9
+/* Release (i.e. patch level) number. */
+#define LIBOTF_RELEASE_NUMBER 3
+
/***
Table of contents:
- (1) Structures for OTF tables and OTF itself
+ (1) Structures for OTF Layout tables and OTF itself
(1-1) Basic types
(1-2) "head" table
(1-3) "name" table
(1-5) Structures common to GDEF, GSUB, and GPOS
(1-6) "GDEF" table
(1-7) Structures for ScriptList, FeatureList, and LookupList
- (1-8) "GSUB" table
- (1-9) "GPOS" table
- (1-9) Structure for OTF
+ (1-8) Structures common to GSUB and GPOS
+ (1-9) "GSUB" table
+ (1-10) "GPOS" table
+ (1-11) Structure for OTF
- (2) APIs for reading OTF
+ (2) API for reading OTF
(2-1) OTF_open()
(2-2) OTF_close()
(2-3) OTF_get_table()
+ (2-4) OTF_check_table()
- (3) APIs for driving OTF
+ (3) API for driving OTF
(3-1) Structure for glyph string
(3-2) OTF_drive_cmap()
(3-3) OTF_drive_gdef()
(3-4) OTF_drive_gsub()
(3-5) OTF_drive_gpos()
(3-6) OTF_drive_tables()
+ (3-7) OTF_get_unicode()
+ (3-8) OTF_drive_gsub_alternate()
- (4) APIs for error handling
+ (4) API for error handling
(4-1) Error codes
(4-2) OTF_perror()
- (5) APIs miscellaneous
+ (5) API miscellaneous
*/
-/*** (1) Structures for OTF tables and OTF itself */
+\f
+/*** (1) Structures for OTF Layout tables and OTF itself */
/*** (1-1) Basic types */
int nameID;
int length;
int offset;
+
+ /* If nonzero, NAME is an ASCII string. */
+ int ascii;
+ unsigned char *name;
} OTF_NameRecord;
#define OTF_max_nameID 23
typedef struct
{
- unsigned subHeaderKeys[256];
+ unsigned short subHeaderKeys[256];
+ int subHeaderCount;
OTF_cmapSubHeader *subHeaders;
- unsigned *glyphIndexArray;
+ int glyphIndexCount;
+ OTF_GlyphID *glyphIndexArray;
} OTF_EncodingSubtable2;
typedef struct
unsigned version;
unsigned numTables;
OTF_EncodingRecord *EncodingRecord;
- OTF_EncodingRecord *Unicode;
+ /* Mapping table: Unicode->GlyphID */
+ unsigned short *unicode_table;
+ int max_glyph_id;
+ /* Mapping table: GlyphID->Unicode */
+ unsigned short *decode_table;
} OTF_cmap;
OTF_RightToLeft = 0x0001,
OTF_IgnoreBaseGlyphs = 0x0002,
OTF_IgnoreLigatures = 0x0004,
- OTF_IgnoreMarks = 0x8000,
+ OTF_IgnoreMarks = 0x0008,
OTF_Reserved = 0x00F0,
OTF_MarkAttachmentType = 0xFF00
};
-
+
+#define OTF_LookupFlagIgnoreMask \
+ (OTF_IgnoreBaseGlyphs | OTF_IgnoreLigatures | OTF_IgnoreMarks)
+
typedef struct
{
OTF_Offset offset;
OTF_Lookup *Lookup;
} OTF_LookupList;
-/*** (1-8) "GSUB" table */
+
+/*** (1-8) Structures common to GSUB and GPOS */
+
+/* For SubstLookupRecord (GSUB) and PosLookupRecord (GPOS). */
typedef struct
{
- int DeltaGlyphID;
-} OTF_GSUB_Single1;
+ unsigned SequenceIndex;
+ unsigned LookupListIndex;
+} OTF_LookupRecord;
typedef struct
{
+ OTF_Offset offset;
unsigned GlyphCount;
- OTF_GlyphID *Substitute;
-} OTF_GSUB_Single2;
-
-typedef struct OTF_Sequence OTF_Sequence;
+ unsigned LookupCount;
+ OTF_GlyphID *Input; /* [<GlyphCount> - 1] */
+ OTF_LookupRecord *LookupRecord; /* [<LookupCount>] */
+} OTF_Rule;
typedef struct
{
- unsigned SequenceCount;
- OTF_Sequence *Sequence;
-} OTF_GSUB_Multiple1;
+ OTF_Offset offset;
+ unsigned RuleCount;
+ OTF_Rule *Rule; /* [<RuleCount>] */
+} OTF_RuleSet;
-struct OTF_Sequence
+typedef struct
{
OTF_Offset offset;
unsigned GlyphCount;
- OTF_GlyphID *Substitute;
-};
-
-typedef struct OTF_AlternateSet OTF_AlternateSet;
+ unsigned LookupCount;
+ unsigned *Class; /* [<GlyphCount> - 1] */
+ OTF_LookupRecord *LookupRecord; /* [<LookupCount>] */
+} OTF_ClassRule;
typedef struct
{
- unsigned AlternateSetCount;
- OTF_AlternateSet *AlternateSet;
-} OTF_GSUB_Alternate1;
+ OTF_Offset offset;
+ unsigned ClassRuleCnt;
+ OTF_ClassRule *ClassRule; /* [<ClassRuleCnt>] */
+} OTF_ClassSet;
-struct OTF_AlternateSet
+typedef struct
{
OTF_Offset offset;
- unsigned GlyphCount;
- OTF_GlyphID *Alternate;
-};
-
-typedef struct OTF_LigatureSet OTF_LigatureSet;
-typedef struct OTF_Ligature OTF_Ligature;
+ unsigned BacktrackGlyphCount;
+ OTF_GlyphID *Backtrack;
+ unsigned InputGlyphCount;
+ OTF_GlyphID *Input;
+ unsigned LookaheadGlyphCount;
+ OTF_GlyphID *LookAhead;
+ unsigned LookupCount;
+ OTF_LookupRecord *LookupRecord;
+} OTF_ChainRule;
typedef struct
{
- unsigned LigSetCount;
- OTF_LigatureSet *LigatureSet;
-} OTF_GSUB_Ligature1;
+ OTF_Offset offset;
+ unsigned ChainRuleCount;
+ OTF_ChainRule *ChainRule;
+} OTF_ChainRuleSet;
-struct OTF_LigatureSet
+typedef struct
{
OTF_Offset offset;
- unsigned LigatureCount;
- OTF_Ligature *Ligature;
-};
+ unsigned BacktrackGlyphCount;
+ unsigned *Backtrack;
+ unsigned InputGlyphCount;
+ unsigned *Input;
+ unsigned LookaheadGlyphCount;
+ unsigned *LookAhead;
+ unsigned LookupCount;
+ OTF_LookupRecord *LookupRecord;
+} OTF_ChainClassRule;
-struct OTF_Ligature
+typedef struct
{
OTF_Offset offset;
- OTF_GlyphID LigGlyph;
- unsigned CompCount;
- OTF_GlyphID *Component;
-};
+ unsigned ChainClassRuleCnt;
+ OTF_ChainClassRule *ChainClassRule;
+} OTF_ChainClassSet;
+
+
+/* Common to OTF_GSUB/GPOS_Context1/2/3. */
typedef struct
{
- unsigned SequenceIndex;
- unsigned LookupListIndex;
-} OTF_SubstLookupRecord;
+ unsigned RuleSetCount;
+ OTF_RuleSet *RuleSet; /* [<RuleSetCount>] */
+} OTF_Context1;
-typedef struct OTF_SubRuleSet OTF_SubRuleSet;
+typedef struct
+{
+ OTF_ClassDef ClassDef;
+ unsigned ClassSetCnt;
+ OTF_ClassSet *ClassSet; /* [<ClassSetCnt>] */
+} OTF_Context2;
typedef struct
{
- unsigned SubRuleSetCount;
- OTF_SubRuleSet *SubRuleSet;
-} OTF_GSUB_Context1;
+ unsigned GlyphCount;
+ unsigned LookupCount;
+ OTF_Coverage *Coverage; /* [<GlyphCount>] */
+ OTF_LookupRecord *LookupRecord; /* [<LookupCount>] */
+} OTF_Context3;
-typedef struct OTF_SubRule OTF_SubRule;
-struct OTF_SubRuleSet
-{
- OTF_Offset offset;
- unsigned SubRuleCount;
- OTF_SubRule *SubRule;
-};
+/* Common to OTF_GSUB/GPOS_ChainContext1/2/3. */
-struct OTF_SubRule
+typedef struct
{
- OTF_Offset offset;
- unsigned GlyphCount;
- unsigned SubstCount;
- OTF_GlyphID *Input;
- OTF_SubstLookupRecord *SubstLookupRecord;
-};
+ unsigned ChainRuleSetCount;
+ OTF_ChainRuleSet *ChainRuleSet;
+} OTF_ChainContext1;
-typedef struct OTF_SubClassSet OTF_SubClassSet;
+typedef struct
+{
+ OTF_ClassDef BacktrackClassDef;
+ OTF_ClassDef InputClassDef;
+ OTF_ClassDef LookaheadClassDef;
+ unsigned ChainClassSetCnt;
+ OTF_ChainClassSet *ChainClassSet;
+} OTF_ChainContext2;
typedef struct
{
- OTF_ClassDef ClassDef;
- unsigned SubClassSetCount;
- OTF_SubClassSet *SubClassSet;
-} OTF_GSUB_Context2;
+ unsigned BacktrackGlyphCount;
+ OTF_Coverage *Backtrack;
+ unsigned InputGlyphCount;
+ OTF_Coverage *Input;
+ unsigned LookaheadGlyphCount;
+ OTF_Coverage *LookAhead;
+ unsigned LookupCount;
+ OTF_LookupRecord *LookupRecord;
+} OTF_ChainContext3;
-typedef struct OTF_SubClassRule OTF_SubClassRule;
+/* Common to OTF_GSUB/GPOS. */
-struct OTF_SubClassSet
+typedef struct
{
- unsigned SubClassRuleCnt;
- OTF_SubClassRule *SubClassRule;
-};
+ OTF_Fixed Version;
+ OTF_ScriptList ScriptList;
+ OTF_FeatureList FeatureList;
+ OTF_LookupList LookupList;
+} OTF_GSUB_GPOS;
+
+/*** (1-9) "GSUB" table */
-struct OTF_SubClassRule
+typedef struct
{
- OTF_Offset offset;
- unsigned GlyphCount;
- unsigned SubstCount;
- unsigned *Class;
- OTF_SubstLookupRecord *SubstLookupRecord;
-};
+ int DeltaGlyphID;
+} OTF_GSUB_Single1;
typedef struct
{
unsigned GlyphCount;
- unsigned SubstCount;
- OTF_Coverage *Coverage;
- OTF_SubstLookupRecord *SubstLookupRecord;
-} OTF_GSUB_Context3;
+ OTF_GlyphID *Substitute;
+} OTF_GSUB_Single2;
-typedef struct OTF_ChainSubRuleSet OTF_ChainSubRuleSet;
+typedef struct OTF_Sequence OTF_Sequence;
typedef struct
{
- unsigned ChainSubRuleSetCount;
- OTF_ChainSubRuleSet *ChainSubRuleSet;
-} OTF_GSUB_ChainContext1;
-
-typedef struct OTF_ChainSubRule OTF_ChainSubRule;
+ unsigned SequenceCount;
+ OTF_Sequence *Sequence;
+} OTF_GSUB_Multiple1;
-struct OTF_ChainSubRuleSet
+struct OTF_Sequence
{
OTF_Offset offset;
- unsigned ChainSubRuleCount;
- OTF_ChainSubRule *ChainSubRule;
+ unsigned GlyphCount;
+ OTF_GlyphID *Substitute;
};
-struct OTF_ChainSubRule
+typedef struct OTF_AlternateSet OTF_AlternateSet;
+
+typedef struct
+{
+ unsigned AlternateSetCount;
+ OTF_AlternateSet *AlternateSet;
+} OTF_GSUB_Alternate1;
+
+struct OTF_AlternateSet
{
OTF_Offset offset;
- unsigned BacktrackGlyphCount;
- OTF_GlyphID *Backtrack;
- unsigned InputGlyphCount;
- OTF_GlyphID *Input;
- unsigned LookaheadGlyphCount;
- OTF_GlyphID *LookAhead;
- unsigned SubstCount;
- OTF_SubstLookupRecord *SubstLookupRecord;
+ unsigned GlyphCount;
+ OTF_GlyphID *Alternate;
};
-typedef struct OTF_ChainSubClassSet OTF_ChainSubClassSet;
+typedef struct OTF_LigatureSet OTF_LigatureSet;
+typedef struct OTF_Ligature OTF_Ligature;
typedef struct
{
- OTF_ClassDef Backtrack;
- OTF_ClassDef Input;
- OTF_ClassDef LookAhead;
- unsigned ChainSubClassSetCnt;
- OTF_ChainSubClassSet *ChainSubClassSet;
-} OTF_GSUB_ChainContext2;
-
-typedef struct OTF_ChainSubClassRule OTF_ChainSubClassRule;
+ unsigned LigSetCount;
+ OTF_LigatureSet *LigatureSet;
+} OTF_GSUB_Ligature1;
-struct OTF_ChainSubClassSet
+struct OTF_LigatureSet
{
OTF_Offset offset;
- unsigned ChainSubClassRuleCnt;
- OTF_ChainSubClassRule *ChainSubClassRule;
+ unsigned LigatureCount;
+ OTF_Ligature *Ligature;
};
-struct OTF_ChainSubClassRule
+struct OTF_Ligature
{
OTF_Offset offset;
- unsigned BacktrackGlyphCount;
- unsigned *Backtrack;
- unsigned InputGlyphCount;
- unsigned *Input;
- unsigned LookaheadGlyphCount;
- unsigned *LookAhead;
- unsigned SubstCount;
- OTF_SubstLookupRecord *SubstLookupRecord;
+ OTF_GlyphID LigGlyph;
+ unsigned CompCount;
+ OTF_GlyphID *Component;
};
+typedef OTF_Context1 OTF_GSUB_Context1;
-typedef struct
-{
- unsigned BacktrackGlyphCount;
- OTF_Coverage *Backtrack;
- unsigned InputGlyphCount;
- OTF_Coverage *Input;
- unsigned LookaheadGlyphCount;
- OTF_Coverage *LookAhead;
- unsigned SubstCount;
- OTF_SubstLookupRecord *SubstLookupRecord;
-} OTF_GSUB_ChainContext3;
+typedef OTF_Context2 OTF_GSUB_Context2;
+
+typedef OTF_Context3 OTF_GSUB_Context3;
+
+typedef OTF_ChainContext1 OTF_GSUB_ChainContext1;
+
+typedef OTF_ChainContext2 OTF_GSUB_ChainContext2;
+
+typedef OTF_ChainContext3 OTF_GSUB_ChainContext3;
typedef struct
{
unsigned ExtensionLookupType;
- unsigned ExtentionOffset;
+ unsigned ExtensionOffset;
+ OTF_LookupSubTableGSUB *ExtensionSubtable;
} OTF_GSUB_Extension1;
typedef struct
OTF_Coverage *LookAhead;
unsigned GlyphCount;
OTF_GlyphID *Substitute;
-} OTF_GSUB_ReverseChainSingle1;
+} OTF_GSUB_ReverseChain1;
struct OTF_LookupSubTableGSUB
{
/* LookupType 7 */
OTF_GSUB_Extension1 extension1;
/* LookupType 8 */
- OTF_GSUB_ReverseChainSingle1 reverse_chain_single1;
+ OTF_GSUB_ReverseChain1 reverse_chain1;
} u;
};
-typedef struct
-{
- OTF_Fixed Version;
- OTF_ScriptList ScriptList;
- OTF_FeatureList FeatureList;
- OTF_LookupList LookupList;
-} OTF_GSUB;
+typedef OTF_GSUB_GPOS OTF_GSUB;
-/*** (1-8) "GPOS" table */
+/*** (1-10) "GPOS" table */
enum OTF_ValueFormat
{
typedef struct
{
- int dummy;
+ unsigned ValueFormat;
+ OTF_ValueRecord Value;
} OTF_GPOS_Single1;
typedef struct
{
- int dummy;
+ unsigned ValueFormat;
+ unsigned ValueCount;
+ OTF_ValueRecord *Value; /* [<ValueCount>] */
} OTF_GPOS_Single2;
typedef struct
{
- int dummy;
+ OTF_GlyphID SecondGlyph;
+ OTF_ValueRecord Value1;
+ OTF_ValueRecord Value2;
+} OTF_PairValueRecord;
+
+typedef struct
+{
+ OTF_Offset offset;
+ unsigned PairValueCount;
+ OTF_PairValueRecord *PairValueRecord;
+} OTF_PairSet;
+
+typedef struct
+{
+ unsigned ValueFormat1;
+ unsigned ValueFormat2;
+ unsigned PairSetCount;
+ OTF_PairSet *PairSet;
} OTF_GPOS_Pair1;
typedef struct
typedef struct
{
- int dummy;
+ OTF_Anchor EntryAnchor;
+ OTF_Anchor ExitAnchor;
+} OTF_EntryExitRecord;
+
+typedef struct
+{
+ unsigned EntryExitCount;
+ OTF_EntryExitRecord *EntryExitRecord;
} OTF_GPOS_Cursive1;
typedef struct
{
- OTF_Anchor *BaseAnchor;
-} OTF_BaseRecord;
+ OTF_Anchor *Anchor;
+} OTF_AnchorRecord;
typedef struct
{
OTF_Offset offset;
- unsigned BaseCount;
- OTF_BaseRecord *BaseRecord;
-} OTF_BaseArray;
+ unsigned Count;
+ OTF_AnchorRecord *AnchorRecord;
+} OTF_AnchorArray;
typedef struct
{
OTF_Coverage BaseCoverage;
unsigned ClassCount;
OTF_MarkArray MarkArray;
- OTF_BaseArray BaseArray;
+ OTF_AnchorArray BaseArray;
} OTF_GPOS_MarkBase1;
typedef struct
{
- int dummy;
-} OTF_GPOS_MarkLig1;
+ OTF_Anchor *LigatureAnchor; /* [<ClassCount>] */
+} OTF_ComponentRecord;
typedef struct
{
- int dummy;
-} OTF_GPOS_MarkMark1;
+ OTF_Offset offset;
+ unsigned ComponentCount;
+ OTF_ComponentRecord *ComponentRecord; /* [<ComponentCount>] */
+} OTF_LigatureAttach;
typedef struct
{
- int dummy;
-} OTF_GPOS_Context1;
+ OTF_Offset offset;
+ unsigned LigatureCount;
+ OTF_LigatureAttach *LigatureAttach; /* [<LiagureCount>] */
+} OTF_LigatureArray;
typedef struct
{
- int dummy;
-} OTF_GPOS_Context2;
+ OTF_Coverage LigatureCoverage;
+ unsigned ClassCount;
+ OTF_MarkArray MarkArray;
+ OTF_LigatureArray LigatureArray;
+} OTF_GPOS_MarkLig1;
typedef struct
{
- int dummy;
-} OTF_GPOS_Context3;
+ OTF_Coverage Mark2Coverage;
+ unsigned ClassCount;
+ OTF_MarkArray Mark1Array;
+ OTF_AnchorArray Mark2Array;
+} OTF_GPOS_MarkMark1;
-typedef struct
-{
- int dummy;
-} OTF_GPOS_ChainContext1;
+typedef OTF_Context1 OTF_GPOS_Context1;
-typedef struct
-{
- int dummy;
-} OTF_GPOS_ChainContext2;
+typedef OTF_Context2 OTF_GPOS_Context2;
-typedef struct
-{
- int dummy;
-} OTF_GPOS_ChainContext3;
+typedef OTF_Context3 OTF_GPOS_Context3;
+
+typedef OTF_ChainContext1 OTF_GPOS_ChainContext1;
+
+typedef OTF_ChainContext2 OTF_GPOS_ChainContext2;
+
+typedef OTF_ChainContext3 OTF_GPOS_ChainContext3;
typedef struct
{
- int dummy;
+ unsigned ExtensionLookupType;
+ unsigned ExtensionOffset;
+ OTF_LookupSubTableGPOS *ExtensionSubtable;
} OTF_GPOS_Extension1;
} u;
};
-typedef struct
-{
- OTF_Fixed Version;
- OTF_ScriptList ScriptList;
- OTF_FeatureList FeatureList;
- OTF_LookupList LookupList;
-} OTF_GPOS;
+typedef OTF_GSUB_GPOS OTF_GPOS;
-/*** (1-9) Structure for OTF */
+/*** (1-11) Structure for OTF */
typedef struct
{
OTF_GSUB *gsub;
OTF_GPOS *gpos;
/* The following tables are not yet supported. */
- // OTF_BASE *base;
- // OTF_JSTF *jstf;
+ /* OTF_BASE *base; */
+ /* OTF_JSTF *jstf; */
OTF_InternalData *internal_data;
} OTF;
\f
-/*** (2) APIs for reading OTF */
+/*** (2) API for reading OTF */
/*** (2-1) otf_open () */
/***
Close OpenType font
- The OTF_close() function closes the OpenType font pointed by $OTF
- which must be what the OTF_open() returned.
+ The OTF_close() function closes the OpenType font $OTF which must
+ be what the OTF_open() function returned.
See also OTF_open(). */
/***
Get OpenType font table
- The OTF_get_table() function setups one of the OTF tables
- specified by $NAME in the structure pointed by $OTF.
+ The OTF_get_table() function setups one of the OTF table specified
+ by $NAME in the OpenType font $OTF.
$NAME must be one of "head", "name", "cmap", "GDEF", "GSUB", and
"GPOS", and a member of the same name is setup.
extern int OTF_get_table (OTF *otf, char *name);
+/*** (2-4) OTF_check_table () */
+
+/***
+ Check the existence of OpenType font table
-/*** (3) APIs for driving OTF */
+ The OTF_check_table() function checks if the the OTF table
+ specified by $NAME exists in OpenType font $OTF.
+
+ If the table exists, return 0, else return -1.
+
+ See also OTF_open(). */
+
+extern int OTF_check_table (OTF *otf, char *name);
+
+
+/*** (3) API for driving OTF */
/*** (3-1) Structure for glyph string */
typedef struct
{
- /* Character code of the glyph. This is the only member that a
- client has to set before calling the function
- OTF_drive_XXX(). */
+ /** The first two members must be set by a clinet before calling the
+ function OTF_drive_XXX(). **/
+
+ /* Character code of the glyph. The value less than 32 is treated
+ as a place-holder in a glyph string, and OTF_drive_XXX ()
+ function just ignore the glyph as if it doesn't exist. */
int c;
- /* Glyph ID of the glyph. */
+ /* Glyph ID of the glyph. If the value is 0, the library gets a
+ correct value from the above character code via cmap. */
OTF_GlyphID glyph_id;
/* GlyphClass of the glyph. The value is extracted from the GDEF
/* MarkAttachClassDef of the glyph. The value is extracted from the
GDEF table. */
- unsigned MarkAttachClass;
+ unsigned MarkAttachClass;
/* Positioning format type of the glyph. The value specifies how
the glyph positioning information is encoded in the member <f>.
int positioning_type;
union {
struct {
+ int from, to;
+ } index;
+ struct {
enum OTF_ValueFormat format;
OTF_ValueRecord *value;
} f1;
/* How many glyphs are allocated at the memory pointed by the member
<glyphs>. */
int size;
- /* How many glyphs contains valid information. */
+ /* How many glyphs contain valid information. */
int used;
/* Array of glyphs. It must be allocated by malloc(). The
functions otf_drive_XXX() may reallocate it and increase the
/*** (3-2) OTF_drive_cmap() */
/***
- Process glyph string by cmap table.
+ Process glyph string by Unicode-based cmap table.
- The OTF_drive_cmap() function looks up the cmap table of OpenType
- font $OTF, and setup the member <glyhph_id> of all glhphs in the
- glyph string $GSTRING. */
+ The OTF_drive_cmap() function looks up a Unicode-based cmap table
+ of OpenType font $OTF, and setup the member <glyhph_id> of all
+ glhphs in the glyph string $GSTRING if the value of the member is
+ not zero. */
extern int OTF_drive_cmap (OTF *otf, OTF_GlyphString *gstring);
+/***
+ Process glyph string by a specific cmap table.
+
+ The OTF_drive_cmap2() function looks up a cmap table (whose
+ Platform-ID is $PLATFORM_ID an Encoding-ID is $ENCODING_ID) of
+ OpenType font $OTF, and setup the member <glyhph_id> of all glhphs
+ in the glyph string $GSTRING if the value of the member is not
+ zero. */
+
+extern int OTF_drive_cmap2 (OTF *otf, OTF_GlyphString *gstring,
+ int platform_id, int encoding_id);
+
/*** (3-3) OTF_drive_gdef() */
/***
font $OTF, and by using features the font has for script $SCRIPT
and language system $LANGSYS, update member <glyphs> of the glyph
string $GSTRING. It may substitute, delete, insert glyphs in that
- array. */
+ array. $FEATURES is a list of features to apply. This doesn't
+ perform a lookup of type 3 (Alternate Substitution). For that,
+ use OTF_drive_gsub_alternate(). */
extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring,
char *script, char *language, char *features);
OpenType font $OTF, and by using features the font has for script
$SCRIPT and language system $LANGSYS, setup members
<positioning_type> and <f> of all glhphs in the glyph string
- $GSTRING. */
+ $GSTRING. $FEATURES is a list of features to apply. */
extern int OTF_drive_gpos (OTF *otf, OTF_GlyphString *gstring,
char *script, char *language, char *features);
char *gsub_features, char *gpos_features);
-/*** (4) APIs for error handling ***/
+/*** (3-7) OTF_get_unicode() */
+
+/***
+ Return Unicode code point corresponding to the glyph-id CODE.
+ */
+
+extern int OTF_get_unicode (OTF *otf, OTF_GlyphID code);
+
+/*** (3-8) OTF_drive_gsub_alternate() */
+
+/***
+ Find alternate glyphs.
+
+ This is like OTF_drive_gsub(), but perform only a lookup of type 3
+ (Alternate Substituion). */
+
+extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring,
+ char *script, char *language,
+ char *features);
+
+/*** (4) API for error handling ***/
/*** (4-1) Error codes ***/
The OTF_perror() function produces a message on the standard error
output, describing the last error encountered during a call to the
- OTF library function. If $PREFIX is not NULL, is is printed
+ OTF library function. If $PREFIX is not NULL, it is printed
first, followed by a colon and a blank. Then the message and a
newline. */
extern void OTF_perror (char *prefix);
-/*** (5) APIs miscellaneous ***/
+/*** (5) API miscellaneous ***/
/***
Return OTF tag of a specified name string.
/***
Convert OTF tag to name string.
- The OTF_tag_name() function converts OTF tag $TAG to a 5-byte
- name string (including the terminating NUL), and store it in
- $NAME. At least 5-byte space must be at $NAME. */
+ The OTF_tag_name() function converts OTF tag $TAG to a 5-byte name
+ string (including the terminating NULL), and store it in $NAME.
+ At least 5-byte space must be at $NAME. */
extern void OTF_tag_name (OTF_Tag tag, char *name);