(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).
 
-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
 
@@ -29,14 +29,14 @@ extern "C" {
 #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.  */
-#define LIBOTF_RELEASE_NUMBER 6
+#define LIBOTF_RELEASE_NUMBER 12
 
 /***
     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-9) OTF_iterate_on_feature()
 
     (4) API for error handling
     (4-1) Error codes
@@ -165,7 +166,7 @@ typedef struct
   unsigned endCount;
   int idDelta;
   unsigned idRangeOffset;
-} OTF_cmapSegument;
+} OTF_cmapSegment;
 
 typedef struct
 {
@@ -173,7 +174,7 @@ typedef struct
   unsigned searchRange;
   unsigned entrySelector;
   unsigned rangeShift;
-  OTF_cmapSegument *segments;
+  OTF_cmapSegment *segments;
   int GlyphCount;
   unsigned *glyphIdArray;
 } OTF_EncodingSubtable4;
@@ -214,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;
@@ -225,6 +257,7 @@ typedef struct
     OTF_EncodingSubtable8 *f8;
     OTF_EncodingSubtable10 *f10;
     OTF_EncodingSubtable12 *f12;
+    OTF_EncodingSubtable14 *f14;
   }f;
 } OTF_EncodingSubtable;
 
@@ -241,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;
 
 
@@ -1153,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
@@ -1189,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
@@ -1204,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;
@@ -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);
 
+
+/***
+    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() */
 
 /***
@@ -1312,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() */
 
 /***
@@ -1337,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() */
 
 /***
@@ -1372,6 +1451,14 @@ extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring,
                                     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 ***/
@@ -1469,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