X-Git-Url: http://git.chise.org/gitweb/?p=m17n%2Flibotf.git;a=blobdiff_plain;f=src%2Fotf.h;h=95f044fb18b51b8692050d3b85d5248b806b4ef4;hp=28a6f0f32d7ed1f177b0675e60c381816c96e95d;hb=87ab1b3362129780aa623e073dcda98e99a8ccb2;hpb=a4fe1cca75eec3e4d8e915384b16ca5d14d467cf diff --git a/src/otf.h b/src/otf.h index 28a6f0f..95f044f 100644 --- a/src/otf.h +++ b/src/otf.h @@ -1,6 +1,6 @@ /* otf.h -- Header file for libotf (OpenType font library). -Copyright (C) 2003, 2004, 2005 +Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H15PRO167 @@ -24,15 +24,19 @@ write to the Free Software Foundation, Inc., 59 Temple Place, Suite #ifndef _OTF_H_ #define _OTF_H_ +#ifdef __cplusplus +extern "C" { +#endif + /* Version name of this library. */ -#define LIBOTF_VERSION "0.9.3" +#define LIBOTF_VERSION "0.9.10" /* 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 +#define LIBOTF_RELEASE_NUMBER 10 /*** Table of contents: @@ -51,7 +55,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place, Suite (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() @@ -65,6 +69,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place, Suite (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 @@ -161,7 +166,7 @@ typedef struct unsigned endCount; int idDelta; unsigned idRangeOffset; -} OTF_cmapSegument; +} OTF_cmapSegment; typedef struct { @@ -169,7 +174,7 @@ typedef struct unsigned searchRange; unsigned entrySelector; unsigned rangeShift; - OTF_cmapSegument *segments; + OTF_cmapSegment *segments; int GlyphCount; unsigned *glyphIdArray; } OTF_EncodingSubtable4; @@ -210,6 +215,37 @@ typedef struct 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; @@ -221,6 +257,7 @@ typedef struct OTF_EncodingSubtable8 *f8; OTF_EncodingSubtable10 *f10; OTF_EncodingSubtable12 *f12; + OTF_EncodingSubtable14 *f14; }f; } OTF_EncodingSubtable; @@ -237,11 +274,15 @@ typedef struct 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; @@ -799,10 +840,10 @@ typedef struct int XCoordinate; int YCoordinate; union { - union { + struct { unsigned AnchorPoint; } f1; - union { + struct { OTF_DeviceTable XDeviceTable; OTF_DeviceTable YDeviceTable; } f2; @@ -1063,7 +1104,12 @@ typedef struct See also OTF_get_table() and OTF_close(). */ -extern OTF *OTF_open (char *name); +extern OTF *OTF_open (const char *name); + +#include +#include FT_FREETYPE_H + +extern OTF *OTF_open_ft_face (FT_Face face); /*** (2-2) OTF_close () */ @@ -1095,7 +1141,7 @@ extern void OTF_close (OTF *otf); 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 () */ @@ -1109,7 +1155,7 @@ extern int OTF_get_table (OTF *otf, char *name); 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 () */ @@ -1156,7 +1202,7 @@ extern int OTF_get_features (OTF *otf, int gsubp); extern int OTF_check_features (OTF *otf, int gsubp, OTF_Tag script, OTF_Tag language, - OTF_Tag *features, int n_features); + const OTF_Tag *features, int n_features); /*** (3) API for driving OTF */ @@ -1177,7 +1223,14 @@ typedef struct 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 @@ -1249,7 +1302,7 @@ typedef struct 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 of all + of OpenType font $OTF, and setup the member of all glhphs in the glyph string $GSTRING if the value of the member is not zero. */ @@ -1260,13 +1313,23 @@ extern int OTF_drive_cmap (OTF *otf, OTF_GlyphString *gstring); 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 of all glhphs + OpenType font $OTF, and setup the member 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() */ /*** @@ -1293,21 +1356,33 @@ extern int OTF_drive_gdef (OTF *otf, OTF_GlyphString *gstring); 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 and 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() */ @@ -1319,8 +1394,9 @@ extern int OTF_drive_gpos (OTF *otf, OTF_GlyphString *gstring, 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() */ @@ -1340,8 +1416,16 @@ extern int OTF_get_unicode (OTF *otf, OTF_GlyphID code); (Alternate Substituion). */ extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring, - char *script, char *language, - char *features); + 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 ***/ @@ -1398,6 +1482,13 @@ extern int OTF_error; 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() */ @@ -1410,7 +1501,7 @@ extern int OTF_error; 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 ***/ @@ -1422,7 +1513,7 @@ extern void OTF_perror (char *prefix); 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. @@ -1433,5 +1524,13 @@ extern OTF_Tag OTF_tag (char *name); 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 #endif /* not _OTF_H_ */