Docstring updated.
[m17n/libotf.git] / src / otf.h
index 47e2a78..95f044f 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
   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.10"
 
 /* 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 10
 
 /***
     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;
 
 
@@ -1186,7 +1223,14 @@ typedef struct
   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
@@ -1258,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
-    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.  */
 
@@ -1269,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
-    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);
 
+
+/***
+    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() */
 
 /***
@@ -1310,15 +1364,25 @@ extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring,
 /***
     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.  */
 
-extern int OTF_drive_gpos (OTF *otf, OTF_GlyphString *gstring,
-                          const char *script, const char *language,
-                          const 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() */
 
@@ -1355,6 +1419,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 ***/
@@ -1452,6 +1524,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