/* otf.h -- Header file for libotf (OpenType font library).
-Copyright (C) 2003, 2004, 2005, 2006, 2007
+Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H15PRO167
#endif
/* Version name of this library. */
-#define LIBOTF_VERSION "0.9.6"
+#define LIBOTF_VERSION "0.9.12"
/* 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 6
+#define LIBOTF_RELEASE_NUMBER 12
/***
Table of contents:
(3-6) OTF_drive_tables()
(3-7) OTF_get_unicode()
(3-8) OTF_drive_gsub_alternate()
+ (3-9) OTF_iterate_on_feature()
(4) API for error handling
(4-1) Error codes
unsigned endCount;
int idDelta;
unsigned idRangeOffset;
-} OTF_cmapSegument;
+} OTF_cmapSegment;
typedef struct
{
unsigned searchRange;
unsigned entrySelector;
unsigned rangeShift;
- OTF_cmapSegument *segments;
+ OTF_cmapSegment *segments;
int GlyphCount;
unsigned *glyphIdArray;
} OTF_EncodingSubtable4;
typedef struct
{
+ unsigned unicodeValue;
+ unsigned short glyphID;
+} OTF_UVSMapping;
+
+typedef struct
+{
+ unsigned startUnicodeValue;
+ unsigned short additionalCount;
+} OTF_UnicodeValueRange;
+
+typedef struct
+{
+ unsigned varSelector;
+ unsigned defaultUVSOffset;
+ unsigned nonDefaultUVSOffset;
+ /* DefaultUVS */
+ unsigned numUnicodeValueRanges;
+ OTF_UnicodeValueRange *unicodeValueRanges;
+ /* NonDefaultUVS */
+ unsigned numUVSMappings;
+ OTF_UVSMapping *uvsMappings;
+} OTF_VariationSelectorRecord;
+
+typedef struct
+{
+ unsigned nRecords;
+ OTF_VariationSelectorRecord *Records;
+} OTF_EncodingSubtable14;
+
+typedef struct
+{
unsigned format;
unsigned length;
unsigned language;
OTF_EncodingSubtable8 *f8;
OTF_EncodingSubtable10 *f10;
OTF_EncodingSubtable12 *f12;
+ OTF_EncodingSubtable14 *f14;
}f;
} OTF_EncodingSubtable;
unsigned version;
unsigned numTables;
OTF_EncodingRecord *EncodingRecord;
- /* Mapping table: Unicode->GlyphID */
+ /* Mapping table: Unicode->GlyphID (for BMP only) */
unsigned short *unicode_table;
+ /* Maximum Glyph ID that corresponds to a Unicode character. */
int max_glyph_id;
/* Mapping table: GlyphID->Unicode */
unsigned short *decode_table;
+ /* Index of the EncodingRecord for Unicode->GlyphID mapping.
+ -1 means that the font supports only Unicode BMP characters. */
+ int table_index;
} OTF_cmap;
/***
Check supported features.
- The OTF_check_features() function checks if or not the OpenType
- font $OTF has, for $SCRIPT and $LANGUAGE, all features in the
- array $FEATURES. The array size is $N_FEATURES. If $LANGUAGE is
- zero or $OTF doesn't have LangSys for $SCRIPT, the default LangSys
- is checked.
+ The OTF_check_features() function checks whether or not the
+ OpenType font $OTF has, for $SCRIPT and $LANGUAGE, all features in
+ the array $FEATURES. The array size is $N_FEATURES. If $LANGUAGE
+ is zero or $OTF doesn't have LangSys for $SCRIPT, the default
+ LangSys is checked.
If $OTF has all the features, return 1. Otherwise, return 0. If
an error occurs, return -1, and set the variable OTF_error to
correct value from the above character code via cmap if such a
glyph is available in the font.
- The function OTF_drive_gpos2 may insert a glyph whose glyph_id is
- 0 but positioning_type is positive. It is not an actual glyph
- but just contains positioning information that should be
- accumulated to the positioning information of the previous
- glyphs. */
+ The functions OTF_drive_gpos2 and OTF_driver_gpos_with_log may
+ insert a glyph whose glyph_id is 0 but positioning_type is
+ positive. It is not an actual glyph but just contains
+ positioning information that should be accumulated to the
+ positioning information of the previous glyphs. */
OTF_GlyphID glyph_id;
/* GlyphClass of the glyph. The value is extracted from the GDEF
GDEF table. */
unsigned MarkAttachClass;
- /* Positioning format type of the glyph. The value specifies how
- the glyph positioning information is encoded in the member <f>.
- If the value is N, the union member fN, is used. If the value is
- zero, the glyph has no positioning information, i.e. it should be
- drawn at the normal position. */
- int positioning_type;
+ /* The lowest 4-bit is a positioning format type of the glyph. The
+ value specifies how the glyph positioning information is encoded
+ in the member <f>. If the value is N, the union member fN, is
+ used. If the value is zero, the glyph has no positioning
+ information, i.e. it should be drawn at the normal position.
+
+ OTF_drive_gsub, OTF_drive_gsub_alternate, OTF_drive_gpos, and
+ OTF_drive_gpos2 always sets the higher bits to zero.
+
+ OTF_drive_gsub_with_log and OTF_drive_gpos_with_log sets the
+ higher 16-bit (i.e. 5th to 20th bits) to the index number of the
+ lastly applied feature on the glyph plus one. If no feature was
+ applied, those bits are zero. */
+ unsigned int positioning_type;
union {
struct {
int from, to;
extern int OTF_drive_cmap2 (OTF *otf, OTF_GlyphString *gstring,
int platform_id, int encoding_id);
+
+/***
+ Store variable glyphs of character C in the array CODE. The array
+ size must be 256. The Nth element of CODE is the glyph corresponding
+ to the variation selector (N + 1). The return value is the number
+ of variation glyphs. */
+
+extern int OTF_get_variation_glyphs (OTF *otf, int c, OTF_GlyphID code[256]);
+
+
/*** (3-3) OTF_drive_gdef() */
/***
const char *script, const char *language,
const char *features);
+/***
+ Process glyph string by GSUB table with log.
+
+ This is like OTF_drive_gsub(), but records which feature is
+ applied to each glyph in the higher bits of `positioning_type'
+ member of OTF_Glyph. */
+
+extern int OTF_drive_gsub_with_log (OTF *otf, OTF_GlyphString *gstring,
+ const char *script, const char *language,
+ const char *features);
+
+
/*** (3-5) OTF_drive_gpos() */
/***
const char *script, const char *language,
const char *features);
+/***
+ Process glyph string by GPOS table with log.
+
+ This is like OTF_drive_pos_2(), but records which feature is
+ applied to each glyph in the higher bits of `positioning_type'
+ member of OTF_Glyph. */
+
+extern int OTF_drive_gpos_with_log (OTF *otf, OTF_GlyphString *gstring,
+ const char *script, const char *language,
+ const char *features);
+
+
/*** (3-6) OTF_drive_tables() */
/***
const char *script, const char *language,
const char *features);
+/*** (3-9) OTF_iterate_on_feature() */
+typedef int (*OTF_Feature_Callback) (OTF *otf, const char *feature,
+ unsigned glyph_id);
+
+extern int OTF_iterate_gsub_feature (OTF *otf, OTF_Feature_Callback callback,
+ const char *script, const char *language,
+ const char *feature);
+
/*** (4) API for error handling ***/
/*** (4-1) Error codes ***/
extern void OTF_tag_name (OTF_Tag tag, char *name);
+extern int OTF_put_data (OTF *otf, char *id, void *data,
+ void (*freer) (void *data));
+
+extern void *OTF_get_data (OTF *otf, char *id);
+
#ifdef __cplusplus
}
#endif