(OTF_get_drive_log): Extern it.
[m17n/libotf.git] / src / otf.h
index 19b417b..47d93e7 100644 (file)
--- a/src/otf.h
+++ b/src/otf.h
@@ -1,6 +1,6 @@
 /* otf.h -- Header file for libotf (OpenType font library).
 
 /* 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
 
   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_
 
 #ifndef _OTF_H_
 #define _OTF_H_
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Version name of this library.  */
 /* 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.  */
 
 /* 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:
 
 /***
     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
     (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()
     (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-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
 
     (4) API for error handling
     (4-1) Error codes
@@ -161,7 +166,7 @@ typedef struct
   unsigned endCount;
   int idDelta;
   unsigned idRangeOffset;
   unsigned endCount;
   int idDelta;
   unsigned idRangeOffset;
-} OTF_cmapSegument;
+} OTF_cmapSegment;
 
 typedef struct
 {
 
 typedef struct
 {
@@ -169,7 +174,7 @@ typedef struct
   unsigned searchRange;
   unsigned entrySelector;
   unsigned rangeShift;
   unsigned searchRange;
   unsigned entrySelector;
   unsigned rangeShift;
-  OTF_cmapSegument *segments;
+  OTF_cmapSegment *segments;
   int GlyphCount;
   unsigned *glyphIdArray;
 } OTF_EncodingSubtable4;
   int GlyphCount;
   unsigned *glyphIdArray;
 } OTF_EncodingSubtable4;
@@ -210,6 +215,37 @@ typedef struct
 
 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;
   unsigned format;
   unsigned length;
   unsigned language;
@@ -221,6 +257,7 @@ typedef struct
     OTF_EncodingSubtable8 *f8;
     OTF_EncodingSubtable10 *f10;
     OTF_EncodingSubtable12 *f12;
     OTF_EncodingSubtable8 *f8;
     OTF_EncodingSubtable10 *f10;
     OTF_EncodingSubtable12 *f12;
+    OTF_EncodingSubtable14 *f14;
   }f;
 } OTF_EncodingSubtable;
 
   }f;
 } OTF_EncodingSubtable;
 
@@ -237,11 +274,15 @@ typedef struct
   unsigned version;
   unsigned numTables;
   OTF_EncodingRecord *EncodingRecord;
   unsigned version;
   unsigned numTables;
   OTF_EncodingRecord *EncodingRecord;
-  /* Mapping table: Unicode->GlyphID */
+  /* Mapping table: Unicode->GlyphID (for BMP only) */
   unsigned short *unicode_table;
   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;
   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;
 
 
 } OTF_cmap;
 
 
@@ -799,10 +840,10 @@ typedef struct
   int XCoordinate;
   int YCoordinate;
   union {
   int XCoordinate;
   int YCoordinate;
   union {
-    union {
+    struct {
       unsigned AnchorPoint;
     } f1;
       unsigned AnchorPoint;
     } f1;
-    union {
+    struct {
       OTF_DeviceTable XDeviceTable;
       OTF_DeviceTable YDeviceTable;
     } f2;
       OTF_DeviceTable XDeviceTable;
       OTF_DeviceTable YDeviceTable;
     } f2;
@@ -1063,7 +1104,12 @@ typedef struct
 
     See also OTF_get_table() and OTF_close().  */
 
 
     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 () */
 
 
 /*** (2-2) OTF_close () */
@@ -1095,7 +1141,7 @@ extern void OTF_close (OTF *otf);
 
     See also OTF_open().  */
 
 
     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 () */
 
 
 /*** (2-4) OTF_check_table () */
 
@@ -1109,7 +1155,7 @@ extern int OTF_get_table (OTF *otf, char *name);
 
     See also OTF_open().  */
 
 
     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 () */
 
 
 /*** (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,
 
 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 */
 
 
 /*** (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
   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
   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
     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.  */
 
     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
 
     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);
 
     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() */
 
 /***
 /*** (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,
     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.
 
 
 /*** (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.  */
 
     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() */
 
 
 /*** (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,
     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()  */
 
 
 /*** (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,
     (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 ***/
 
 
 /*** (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
 
     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() */
 
 
 /*** (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.  */
 
     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 ***/
 
 
 /*** (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.  */
 
     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.
 
 /***
     Convert OTF tag to name string.
@@ -1433,5 +1524,15 @@ extern OTF_Tag OTF_tag (char *name);
 
 extern void OTF_tag_name (OTF_Tag 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);
+
+extern OTF_Tag *OTF_get_drive_log (OTF *otf);
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* not _OTF_H_ */
 
 #endif /* not _OTF_H_ */