*** empty log message ***
[m17n/m17n-lib.git] / src / m17n-flt.h
index fd15eae..a9efff7 100644 (file)
@@ -1,5 +1,5 @@
 /* m17n-flt.h -- header file for the FLT API of the m17n library.
-   Copyright (C) 2007
+   Copyright (C) 2007, 2008, 2009, 2010
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
 
@@ -241,14 +241,18 @@ typedef struct
 
     The type #MFLTOtfSpec is the structure that contains information
     about the GSUB and GPOS features of a specific script and language
-    system to be applied to a glyph sequence.  */
+    system.  The information is used to select which features to
+    apply to a glyph string, or to check if a specific FLT is usable
+    for a specific font.  */
 
 /***ja
     @brief GSUB ¤ª¤è¤Ó GPOS OpenType ¥Æ¡¼¥Ö¥ë¤Î»ÅÍͤΤ¿¤á¤Î·¿.
 
     ·¿ #MFLTOtfSpec ¤Ï¡¢GSUB ¤ª¤è¤Ó GPOS¥Õ¥£¡¼¥Á¥ã¡¼¤Î¾ðÊó¤ò³ÊǼ¤¹¤ë¤¿
     ¤á¤Î¹½Â¤ÂΤǤ¢¤ë¡£¤³¤ì¤é¥Õ¥£¡¼¥Á¥ã¡¼¤ÏÆÃÄê¤Î¥¹¥¯¥ê¥×¥È¤ª¤è¤Ó¸À¸ì¥·
-    ¥¹¥Æ¥à¤Î¤â¤Î¤Ç¤¢¤ê¡¢¥°¥ê¥ÕÎó¤ËŬÍѤµ¤ì¤ë¡£  */
+    ¥¹¥Æ¥à¤Î¤â¤Î¤Ç¤¢¤ë¡£¤³¤Î¾ðÊó¤Ï¡¢¤É¤Î¥Õ¥£¡¼¥Á¥ã¡¼¤ò¥°¥ê¥ÕÎó¤ËŬÍѤ¹
+    ¤ë¤«¡¢¤¢¤ë¤¤¤ÏÆÃÄê¤Î FLT ¤¬ÆÃÄê¤Î¥Õ¥©¥ó¥È¤ËÂФ·¤ÆÍ­¸ú¤«¤É¤¦¤«¤Î·èÄê
+    ¤Ë»ÈÍѤµ¤ì¤ë¡£  */
 
 typedef struct
 {
@@ -264,16 +268,38 @@ typedef struct
   unsigned int script, langsys;
   /* @} */
 
-  /***en Array of GSUB (1st element) and GPOS (2nd element) features.
-      Each array is terminated by 0.  If an element is 0xFFFFFFFF
-      apply the previous features in that order, and apply all the
-      other features except those that appear in the following elements.
-      It may be NULL if there are no features.  */
-  /***ja GSUB ¥Õ¥£¡¼¥Á¥ã¡¼¤òÂè1Í×ÁÇ¡¢GPOS ¥Õ¥£¡¼¥Á¥ã¡¼¤òÂè2Í×ÁǤȤ¹¤ëÇÛ
-      Îó¡£³ÆÇÛÎó¤ÎËöÈø¤Ï0¤Ç¼¨¤µ¤ì¤ë¡£¤â¤·¤¢¤ëÍ×ÁǤ¬ 0xFFFFFFFF¤Ê¤é¤Ð¡¢
-      °ÊÁ°¤ÎÁ´¥Õ¥£¡¼¥Á¥ã¡¼¤ò¤½¤Î½ç½ø¤ÇŬÍѤ·¡¢¹¹¤Ë°Ê¹ß¤ÎÍ×ÁǤȤ·¤Æ¸½¤ï
-      ¤ì¤ë¥Õ¥£¥Á¥ã¡¼°Ê³°¤Î¤¹¤Ù¤Æ¤òŬÍѤ¹¤ë¡£¥Õ¥£¡¼¥Á¥ã¡¼¤¬1¤Ä¤â¤Ê¤¤¾ì¹ç
-      ¤Ï NULL ¤Ç¤â¤è¤¤¡£  */
+  /***en Array of GSUB (1st element) and GPOS (2nd element) feature
+      tag arrays.  Each array is terminated by 0.  It may be NULL if
+      there is no feature to specify.
+
+      (1) The case of using this information for selecting which
+      features to apply to a glyph string.  If the array is NULL,
+      apply no feature.  If the first element is 0xFFFFFFFF, apply all
+      available features except for what appear in the second and
+      following elements (if any).  Otherwise, apply all listed
+      features.
+
+      (2) The case of using this information for checking if a a font
+      can be drived by a specific FLT.  If the array is NULL, the font
+      should not have any features.  Otherwize, the font should have
+      all features before 0xFFFFFFFF element (if any) and should not
+      have any features after that element.  */
+  /***ja GSUB ¥Õ¥£¡¼¥Á¥ã¡¼¥¿¥°¤ÎÇÛÎó¤òÂè1Í×ÁÇ¡¢GPOS ¥Õ¥£¡¼¥Á¥ã¡¼¥¿¥°¤Î
+      ÇÛÎó¤òÂè2Í×ÁǤȤ¹¤ëÇÛÎó¡£³ÆÇÛÎó¤ÎËöÈø¤Ï0¤Ç¼¨¤µ¤ì¤ë¡£¥Õ¥£¡¼¥Á¥ã¡¼
+      ¤Î»ØÄ꤬1¤Ä¤â¤Ê¤¤¾ì¹ç¤Ï¤³¤ÎÇÛÎó¤ÎÍ×ÁǤϠNULL ¤Ç¤â¤è¤¤¡£
+
+      (1) ¤³¤Î¾ðÊ󤬥°¥ê¥ÕÎó¤ËŬÍѤ¹¤Ù¤­¥Õ¥£¡¼¥Á¥ã¡¼¤ÎÁªÂò¤Ë»È¤ï¤ì¤ë¾ì
+      ¹ç¡£¤â¤·ÇÛÎ󼫿Ȥ¬NULL¤Ê¤é¡¢¤É¤Î¥Õ¥£¡¼¥Á¥ã¡¼¤âŬÍѤ·¤Ê¤¤¡£¤â¤·ºÇ
+      ½é¤ÎÍ×ÁǤ¬ 0xFFFFFFFF ¤Ê¤é¡¢£²ÈÖÌܰʹߤΥե£¡¼¥Á¥ã¡¼¡Ê¤â¤·¤¢¤ì
+      ¤Ð¡Ë¤ò½ü¤¯¤¹¤Ù¤Æ¤ÎŬÍѲÄǽ¤Ê¥Õ¥£¡¼¥Á¥ã¡¼¤òŬÍѤ¹¤ë¡£¤½¤ì°Ê³°¤Î¾ì
+      ¹ç¥ê¥¹¥È¤µ¤ì¤¿¤¹¤Ù¤Æ¤Î¥Õ¥£¡¼¥Á¥ã¡¼¤òŬÍѤ¹¤ë¡£
+
+      (2) ¤³¤Î¾ðÊó¤¬ÆÃÄê¤Î FLT ¤¬ÆÃÄê¤Î¥Õ¥©¥ó¥È¤ËÍ­¸ú¤«¤É¤¦¤«¤Î·èÄê¤Ë»È
+      ¤ï¤ì¤ë¾ì¹ç¡£¤â¤·ÇÛÎ󼫿Ȥ¬NULL¤Ê¤é¡¢¥Õ¥©¥ó¥È¤Ï¥Õ¥£¡¼¥Á¥ã¡¼¤ò°ì¤Ä
+      ¤â»ý¤Ã¤Æ¤¤¤Æ¤Ï¤¤¤±¤Ê¤¤¡£¤â¤·ºÇ½é¤ÎÍ×ÁǤ¬0xFFFFFFFF¤Ê¤é¡¢¥Õ¥©¥ó¥È
+      ¤Ï£²ÈÖÌܤÎÍ×ÁǰʹߤΥե©¥ó¥È¤ò»ý¤Ã¤Æ¤¤¤Æ¤Ï¤¤¤±¤Ê¤¤¡£¤½¤ì°Ê³°¤Î¾ì
+      ¹ç¡¢¥Õ¥©¥ó¥È¤Ï0xFFFFFFFF °ÊÁ°¤Î¤¹¤Ù¤Æ¤Î¥Õ¥£¡¼¥Á¥ã¡¼¤ò»ý¤Á¡¢¤«¤Ä
+      0xFFFFFFFF °Ê¹ß¤Î¥Õ¥£¡¼¥Á¥ã¡¼¤Ï°ì¤Ä¤â»ý¤Ã¤Æ¤¤¤Æ¤Ï¤¤¤±¤Ê¤¤¡£*/
   unsigned int *features[2];
 } MFLTOtfSpec;
 
@@ -283,13 +309,22 @@ typedef struct
     @brief Type of font to be used by the FLT driver.
 
     The type #MFLTFont is the structure that contains information
-    about a font used by the FLT driver.  */
+    about a font used by the FLT driver.  Usually, an application
+    should prepare a bigger structure whose first element is MFLTFont
+    and has more information about the font that is used by callback
+    funcitons, and give that structure to mflt functions by coercing
+    it to MFLTFont.  It is assured that callback functions can safely
+    coerce MFLTFont back to the original structure.  */
 
 /***ja
     @brief FLT ¥É¥é¥¤¥Ð¤¬»È¤¦¥Õ¥©¥ó¥È¤Î·¿.
 
     ·¿ #MFLTFont ¤Ï¡¢FLT¥É¥é¥¤¥Ð¤¬»È¤¦¥Õ¥©¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤ò³ÊǼ¤¹¤ë¤¿
-    ¤á¤Î¹½Â¤ÂΤǤ¢¤ë¡£  */
+    ¤á¤Î¹½Â¤ÂΤǤ¢¤ë¡£Ä̾異¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏºÇ½é¤ÎÍ×ÁǤ¬ MFLTFont ¤Ç¡¢
+    »Ä¤ê¤ÎÍ×ÁǤËcallback´Ø¿ô¤¬ÍøÍѤ¹¤ë¥Õ¥©¥ó¥È¾ðÊó¤ò»ý¤Ã¤¿¡¢¤è¤êÂ礭¤Ê
+    ¹½Â¤ÂΤòÍÑ°Õ¤·¡¢¤½¤ì¤ò MFLTFont ¤Ë coerce ¤·¤Æ mflt ¤Î³Æ´Ø¿ô¤ËÅϤ¹¡£
+    ³Æcallback´Ø¿ô¤Ï MFLTFont ¤ò¸µ¤Î¹½Â¤ÂΤˠcoerce ¤·Ä¾¤¹¤³¤È¤¬¤Ç¤­¤ë
+    ¤³¤È¤¬Êݾڤµ¤ì¤Æ¤¤¤ë¡£ */
 
 typedef struct _MFLTFont
 {
@@ -390,15 +425,20 @@ extern MCharTable *mflt_coverage (MFLT *flt);
 extern int mflt_run (MFLTGlyphString *gstring, int from, int to,
                     MFLTFont *font, MFLT *flt);
 
-extern MSymbol (*mflt_font_id) (struct _MFLTFont *font);
+/*=*/
+/*** @} */
+
+extern int mflt_enable_new_feature;
 
-extern int (*mflt_iterate_otf_feature) (struct _MFLTFont *font,
+extern MSymbol (*mflt_font_id) (MFLTFont *font);
+
+extern int (*mflt_iterate_otf_feature) (MFLTFont *font,
                                        MFLTOtfSpec *spec,
                                        int from, int to,
                                        unsigned char *table);
 
-/*=*/
-/*** @} */
+extern int (*mflt_try_otf) (struct _MFLTFont *font, MFLTOtfSpec *spec,
+                           MFLTGlyphString *gstring, int from, int to);
 
 M17N_END_HEADER