Copyright updated.
[m17n/libotf.git] / src / otf.h
index 7e2e238..3fb566a 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
+Copyright (C) 2003, 2004, 2005, 2006
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H15PRO167
 
@@ -25,14 +25,14 @@ write to the Free Software Foundation, Inc., 59 Temple Place, Suite
 #define _OTF_H_
 
 /* Version name of this library.  */
-#define LIBOTF_VERSION "0.9.1"
+#define LIBOTF_VERSION "0.9.5"
 
 /* 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 1
+#define LIBOTF_RELEASE_NUMBER 5
 
 /***
     Table of contents:
@@ -51,7 +51,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place, Suite
     (1-11) Structure for OTF
 
     (2) API for reading OTF
-    (2-1) OTF_open()
+    (2-1) OTF_open(), OTF_open_ft_face()
     (2-2) OTF_close()
     (2-3) OTF_get_table()
     (2-4) OTF_check_table()
@@ -63,6 +63,8 @@ write to the Free Software Foundation, Inc., 59 Temple Place, Suite
     (3-4) OTF_drive_gsub()
     (3-5) OTF_drive_gpos()
     (3-6) OTF_drive_tables()
+    (3-7) OTF_get_unicode()
+    (3-8) OTF_drive_gsub_alternate()
 
     (4) API for error handling
     (4-1) Error codes
@@ -146,9 +148,11 @@ typedef struct
 
 typedef struct
 {
-  unsigned subHeaderKeys[256];
+  unsigned short subHeaderKeys[256];
+  int subHeaderCount;
   OTF_cmapSubHeader *subHeaders;
-  unsigned *glyphIndexArray;
+  int glyphIndexCount;
+  OTF_GlyphID *glyphIndexArray;
 } OTF_EncodingSubtable2;
 
 typedef struct
@@ -460,11 +464,14 @@ enum OTF_LookupFlagBit
     OTF_RightToLeft = 0x0001,
     OTF_IgnoreBaseGlyphs = 0x0002,
     OTF_IgnoreLigatures = 0x0004,
-    OTF_IgnoreMarks = 0x8000,
+    OTF_IgnoreMarks = 0x0008,
     OTF_Reserved = 0x00F0,
     OTF_MarkAttachmentType = 0xFF00
   };
 
+#define OTF_LookupFlagIgnoreMask \
+  (OTF_IgnoreBaseGlyphs | OTF_IgnoreLigatures | OTF_IgnoreMarks)
+
 typedef struct
 {
   OTF_Offset offset;
@@ -792,10 +799,10 @@ typedef struct
   int XCoordinate;
   int YCoordinate;
   union {
-    union {
+    struct {
       unsigned AnchorPoint;
     } f1;
-    union {
+    struct {
       OTF_DeviceTable XDeviceTable;
       OTF_DeviceTable YDeviceTable;
     } f2;
@@ -1058,6 +1065,11 @@ typedef struct
 
 extern OTF *OTF_open (char *name);
 
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+extern OTF *OTF_open_ft_face (FT_Face face);
+
 
 /*** (2-2) OTF_close () */
 
@@ -1104,6 +1116,52 @@ extern int OTF_get_table (OTF *otf, char *name);
 
 extern int OTF_check_table (OTF *otf, char *name);
 
+/*** (2-5) OTF_get_scripts () */
+
+/***
+    Get supported scripts.
+
+    The OTF_get_scripts() function setups OTF_ScriptList of GSUB (if
+    $GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the
+    OpenType font $OTF.
+
+    If the table is successfully setup, return 0.  Otherwise, retrun
+    -1, and set the variable OTF_error to OTF_ERROR_TABLE.  */
+
+extern int OTF_get_scripts (OTF *otf, int gsubp);
+
+/*** (2-6) OTF_get_features () */
+
+/***
+    Get supported features.
+
+    The OTF_get_features() function setups OTF_FeatureList of GSUB (if
+    $GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the
+    OpenType font $OTF.
+
+    If the table is successfully setup, return 0.  Otherwise, retrun
+    -1, and set the variable OTF_error to OTF_ERROR_TABLE.  */
+
+extern int OTF_get_features (OTF *otf, int gsubp);
+
+/*** (2-7) OTF_check_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.
+
+    If $OTF has all the features, return 1.  Otherwise, return 0.  If
+    an error occurs, return -1, and set the variable OTF_error to
+    OTF_ERROR_TABLE.   */
+
+extern int OTF_check_features (OTF *otf, int gsubp,
+                              OTF_Tag script, OTF_Tag language,
+                              OTF_Tag *features, int n_features);
 
 /*** (3) API for driving OTF */
 
@@ -1143,6 +1201,9 @@ typedef struct
   int positioning_type;
   union {
     struct {
+      int from, to;
+    } index;
+    struct {
       enum OTF_ValueFormat format;
       OTF_ValueRecord *value;
     } f1;
@@ -1178,7 +1239,7 @@ typedef struct
   /* How many glyphs are allocated at the memory pointed by the member
       <glyphs>.  */
   int size;
-  /* How many glyphs contains valid information.  */
+  /* How many glyphs contain valid information.  */
   int used;
   /* Array of glyphs.  It must be allocated by malloc().  The
      functions otf_drive_XXX() may reallocate it and increase the
@@ -1232,7 +1293,9 @@ extern int OTF_drive_gdef (OTF *otf, OTF_GlyphString *gstring);
     font $OTF, and by using features the font has for script $SCRIPT
     and language system $LANGSYS, update member <glyphs> of the glyph
     string $GSTRING.  It may substitute, delete, insert glyphs in that
-    array.  $FEATURES is a list of features to apply.  */
+    array.  $FEATURES is a list of features to apply.  This doesn't
+    perform a lookup of type 3 (Alternate Substitution).  For that,
+    use OTF_drive_gsub_alternate().  */
 
 extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring,
                           char *script, char *language, char *features);
@@ -1273,6 +1336,18 @@ extern int OTF_drive_tables (OTF *otf, OTF_GlyphString *gstring,
 
 extern int OTF_get_unicode (OTF *otf, OTF_GlyphID code);
 
+/*** (3-8) OTF_drive_gsub_alternate() */
+
+/***
+    Find alternate glyphs.
+
+    This is like OTF_drive_gsub(), but perform only a lookup of type 3
+    (Alternate Substituion).  */
+
+extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring,
+                                    char *script, char *language,
+                                    char *features);
+
 /*** (4) API for error handling ***/
 
 /*** (4-1) Error codes ***/
@@ -1328,6 +1403,13 @@ extern int OTF_error;
     See the function OTF_drive_gpos() for more detail.  */
 #define OTF_ERROR_GPOS_DRIVE   7
 
+/***
+    FT_Face access error.
+
+    This error indicates that the library fails in accessing Sfnt
+    tables via FT_Face.  */
+#define OTF_ERROR_FT_FACE      8
+
 
 /*** (4-2) OTF_perror() */