(LIBOTF_VERSION): Changed to 0.9.12
[m17n/libotf.git] / src / otf.h
index 431e288..afbaab2 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, 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
 
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H15PRO167
 
@@ -29,14 +29,14 @@ extern "C" {
 #endif
 
 /* Version name of this library.  */
 #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.  */
 
 /* 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:
 
 /***
     Table of contents:
@@ -69,6 +69,7 @@ extern "C" {
     (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
@@ -165,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
 {
@@ -173,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;
@@ -214,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;
@@ -225,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;
 
@@ -241,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;
 
 
@@ -1153,11 +1190,11 @@ extern int OTF_get_features (OTF *otf, int gsubp);
 /***
     Check supported 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.
+    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
 
     If $OTF has all the features, return 1.  Otherwise, return 0.  If
     an error occurs, return -1, and set the variable OTF_error to
@@ -1189,11 +1226,11 @@ typedef struct
      correct value from the above character code via cmap if such a
      glyph is available in the font.
 
      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
   OTF_GlyphID glyph_id;
 
   /* GlyphClass of the glyph.  The value is extracted from the GDEF
@@ -1204,12 +1241,20 @@ typedef struct
      GDEF table.  */
   unsigned MarkAttachClass;
 
      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;
   union {
     struct {
       int from, to;
@@ -1283,6 +1328,16 @@ extern int OTF_drive_cmap (OTF *otf, OTF_GlyphString *gstring);
 extern int OTF_drive_cmap2 (OTF *otf, OTF_GlyphString *gstring,
                            int platform_id, int encoding_id);
 
 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() */
 
 /***
@@ -1312,6 +1367,18 @@ extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring,
                           const char *script, const char *language,
                           const char *features);
 
                           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() */
 
 /***
 /*** (3-5) OTF_drive_gpos() */
 
 /***
@@ -1337,6 +1404,18 @@ extern int OTF_drive_gpos2 (OTF *otf, OTF_GlyphString *gstring,
                            const char *script, const char *language,
                            const char *features);
 
                            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() */
 
 /***
 /*** (3-6) OTF_drive_tables() */
 
 /***
@@ -1372,6 +1451,14 @@ extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring,
                                     const char *script, const char *language,
                                     const 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-1) Error codes ***/
 /*** (4) API for error handling ***/
 
 /*** (4-1) Error codes ***/
@@ -1469,6 +1556,11 @@ extern OTF_Tag OTF_tag (const 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);
+
 #ifdef __cplusplus
 }
 #endif
 #ifdef __cplusplus
 }
 #endif