(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).
 
-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
 
@@ -29,14 +29,14 @@ extern "C" {
 #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.  */
-#define LIBOTF_RELEASE_NUMBER 10
+#define LIBOTF_RELEASE_NUMBER 12
 
 /***
     Table of contents:
@@ -276,6 +276,7 @@ typedef struct
   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;
@@ -1189,11 +1190,11 @@ extern int OTF_get_features (OTF *otf, int gsubp);
 /***
     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
@@ -1225,11 +1226,11 @@ typedef struct
      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
@@ -1240,12 +1241,20 @@ typedef struct
      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;
@@ -1358,6 +1367,18 @@ extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring,
                           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() */
 
 /***
@@ -1383,6 +1404,18 @@ extern int OTF_drive_gpos2 (OTF *otf, OTF_GlyphString *gstring,
                            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() */
 
 /***
@@ -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,
-                                    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,
@@ -1523,6 +1556,11 @@ extern OTF_Tag OTF_tag (const 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