/* otf.h -- Header file for libotf (OpenType font library).
-Copyright (C) 2003, 2004
+Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H15PRO167
#ifndef _OTF_H_
#define _OTF_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* Version name of this library. */
-#define LIBOTF_VERSION "0.9.1"
+#define LIBOTF_VERSION "0.9.9"
/* 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 1
+#define LIBOTF_RELEASE_NUMBER 9
/***
Table of contents:
(1-11) Structure for OTF
(2) API for reading OTF
- (2-1) OTF_open()
+ (2-1) OTF_open(), OTF_open_ft_face()
(2-2) OTF_close()
(2-3) OTF_get_table()
(2-4) OTF_check_table()
(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) API for error handling
(4-1) Error codes
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 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;
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;
int XCoordinate;
int YCoordinate;
union {
- union {
+ struct {
unsigned AnchorPoint;
} f1;
- union {
+ struct {
OTF_DeviceTable XDeviceTable;
OTF_DeviceTable YDeviceTable;
} f2;
See also OTF_get_table() and OTF_close(). */
-extern OTF *OTF_open (char *name);
+extern OTF *OTF_open (const char *name);
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+extern OTF *OTF_open_ft_face (FT_Face face);
/*** (2-2) OTF_close () */
See also OTF_open(). */
-extern int OTF_get_table (OTF *otf, char *name);
+extern int OTF_get_table (OTF *otf, const char *name);
/*** (2-4) OTF_check_table () */
See also OTF_open(). */
-extern int OTF_check_table (OTF *otf, char *name);
+extern int OTF_check_table (OTF *otf, const char *name);
+
+/*** (2-5) OTF_get_scripts () */
+
+/***
+ Get supported scripts.
+
+ The OTF_get_scripts() function setups OTF_ScriptList of GSUB (if
+ $GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the
+ OpenType font $OTF.
+
+ If the table is successfully setup, return 0. Otherwise, retrun
+ -1, and set the variable OTF_error to OTF_ERROR_TABLE. */
+
+extern int OTF_get_scripts (OTF *otf, int gsubp);
+
+/*** (2-6) OTF_get_features () */
+
+/***
+ Get supported features.
+ The OTF_get_features() function setups OTF_FeatureList of GSUB (if
+ $GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the
+ OpenType font $OTF.
+
+ If the table is successfully setup, return 0. Otherwise, retrun
+ -1, and set the variable OTF_error to OTF_ERROR_TABLE. */
+
+extern int OTF_get_features (OTF *otf, int gsubp);
+
+/*** (2-7) OTF_check_features */
+
+/***
+ 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.
+
+ If $OTF has all the features, return 1. Otherwise, return 0. If
+ an error occurs, return -1, and set the variable OTF_error to
+ OTF_ERROR_TABLE. */
+
+extern int OTF_check_features (OTF *otf, int gsubp,
+ OTF_Tag script, OTF_Tag language,
+ const OTF_Tag *features, int n_features);
/*** (3) API for driving OTF */
int c;
/* Glyph ID of the glyph. If the value is 0, the library gets a
- correct value from the above character code via cmap. */
+ 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. */
OTF_GlyphID glyph_id;
/* GlyphClass of the glyph. The value is extracted from the GDEF
/* 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
Process glyph string by Unicode-based cmap table.
The OTF_drive_cmap() function looks up a Unicode-based cmap table
- of OpenType font $OTF, and setup the member <glyhph_id> of all
+ of OpenType font $OTF, and setup the member <glyph_id> of all
glhphs in the glyph string $GSTRING if the value of the member is
not zero. */
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
+ OpenType font $OTF, and setup the member <glyph_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);
+
+/***
+ 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() */
/***
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. $FEATURES is a list of features to apply. */
+ 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);
+ const char *script, const char *language,
+ const char *features);
/*** (3-5) OTF_drive_gpos() */
/***
Process glyph string by GPOS table.
- The OTF_drive_gdef() function looks up the GPOS table of $OTF of
+ The OTF_drive_gpos() function is deprecated. Use
+ OTF_drive_gpos2() instread. */
+
+extern int OTF_drive_gpos (OTF *otf, OTF_GlyphString *gstring,
+ const char *script, const char *language,
+ const char *features);
+
+/***
+ Process glyph string by GPOS table.
+
+ The OTF_drive_gpos2() function looks up the GPOS table of $OTF of
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. $FEATURES is a list of features to apply. */
-extern int OTF_drive_gpos (OTF *otf, OTF_GlyphString *gstring,
- char *script, char *language, char *features);
+extern int OTF_drive_gpos2 (OTF *otf, OTF_GlyphString *gstring,
+ const char *script, const char *language,
+ const char *features);
/*** (3-6) OTF_drive_tables() */
order, and update the glyphs string GSTRING. */
extern int OTF_drive_tables (OTF *otf, OTF_GlyphString *gstring,
- char *script, char *language,
- char *gsub_features, char *gpos_features);
+ const char *script, const char *language,
+ const char *gsub_features,
+ const char *gpos_features);
/*** (3-7) OTF_get_unicode() */
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,
+ const char *script, const char *language,
+ const char *features);
+
/*** (4) API for error handling ***/
/*** (4-1) Error codes ***/
See the function OTF_drive_gpos() for more detail. */
#define OTF_ERROR_GPOS_DRIVE 7
+/***
+ FT_Face access error.
+
+ This error indicates that the library fails in accessing Sfnt
+ tables via FT_Face. */
+#define OTF_ERROR_FT_FACE 8
+
/*** (4-2) OTF_perror() */
first, followed by a colon and a blank. Then the message and a
newline. */
-extern void OTF_perror (char *prefix);
+extern void OTF_perror (const char *prefix);
/*** (5) API miscellaneous ***/
NULL, return 0. Otherwise, $NAME must be at least 4-byte length.
Only the first 4 characters are took into an account. */
-extern OTF_Tag OTF_tag (char *name);
+extern OTF_Tag OTF_tag (const char *name);
/***
Convert OTF tag to name string.
extern void OTF_tag_name (OTF_Tag tag, char *name);
+#ifdef __cplusplus
+}
+#endif
#endif /* not _OTF_H_ */