(LIBOTF_VERSION): Changed to 0.9.12
[m17n/libotf.git] / src / otf.h
index afdbdb2..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, 2008, 2009
+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.10"
+#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 10
+#define LIBOTF_RELEASE_NUMBER 12
 
 /***
     Table of contents:
 
 /***
     Table of contents:
@@ -276,6 +276,7 @@ typedef struct
   OTF_EncodingRecord *EncodingRecord;
   /* Mapping table: Unicode->GlyphID (for BMP only) */
   unsigned short *unicode_table;
   OTF_EncodingRecord *EncodingRecord;
   /* 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;
   int max_glyph_id;
   /* Mapping table: GlyphID->Unicode */
   unsigned short *decode_table;
@@ -1189,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
@@ -1225,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
@@ -1240,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;
@@ -1358,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() */
 
 /***
@@ -1383,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() */
 
 /***
@@ -1420,7 +1453,7 @@ extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring,
 
 /*** (3-9) OTF_iterate_on_feature() */
 typedef int (*OTF_Feature_Callback) (OTF *otf, const char *feature,
 
 /*** (3-9) OTF_iterate_on_feature() */
 typedef int (*OTF_Feature_Callback) (OTF *otf, const char *feature,
-                                    int c, unsigned glyph_id);
+                                    unsigned glyph_id);
 
 extern int OTF_iterate_gsub_feature (OTF *otf, OTF_Feature_Callback callback,
                                     const char *script, const char *language,
 
 extern int OTF_iterate_gsub_feature (OTF *otf, OTF_Feature_Callback callback,
                                     const char *script, const char *language,
@@ -1523,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