*** empty log message ***
[m17n/m17n-lib.git] / src / m17n-gui.h
index c2b43ca..7800295 100644 (file)
@@ -1,5 +1,5 @@
 /* m17n-gui.h -- header file for the GUI API of the m17n library.
-   Copyright (C) 2003, 2004
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
 
 
    You should have received a copy of the GNU Lesser General Public
    License along with the m17n library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    02111-1307, USA.  */
 
 #ifndef _M17N_GUI_H_
 #define _M17N_GUI_H_
 
+#ifndef _M17N_FLT_H_
+#include <m17n-flt.h>
+#endif
+
 #ifndef _M17N_H_
 #include <m17n.h>
 #endif
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
+M17N_BEGIN_HEADER
+
+#if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
 
 extern void m17n_init_win (void);
 #undef M17N_INIT
@@ -40,8 +43,12 @@ extern void m17n_fini_win (void);
 #undef M17N_FINI
 #define M17N_FINI() m17n_fini_win ()
 
-/***en @defgroup m17nGUI GUI API */
-/***ja @defgroup m17nGUI GUI API */
+#endif
+
+/***en @defgroup m17nGUI GUI API
+    @brief API provided by libm17n-gui.so */
+/***ja @defgroup m17nGUI GUI API
+    @brief libm17n-gui.so ¤¬Ä󶡤¹¤ë API */
 /*=*/
 
 /*** @ingroup m17nGUI */
@@ -65,25 +72,33 @@ extern void m17n_fini_win (void);
 /***ja
     @brief ¥Õ¥ì¡¼¥à¤Î·¿Àë¸À.
 
-    #MFrame ¤Ï¡¢@e ¥Õ¥ì¡¼¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£¸Ä¡¹¤Î¥Õ¥ì¡¼¥à¤Ï¡¢
-    ¤½¤ì¤¬Âбþ¤¹¤ëʪÍýŪ¤Êɽ¼¨¡¿ÆþÎϥǥХ¤¥¹¤Î³Æ¼ï¾ðÊó¤òÊÝ»ý¤¹¤ë¡£
+    #MFrame ¤Ï¡¢@e ¥Õ¥ì¡¼¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£
+    ¸Ä¡¹¤Î¥Õ¥ì¡¼¥à¤Ï¡¢¤½¤ì¤¬Âбþ¤¹¤ëʪÍýŪ¤Êɽ¼¨¡¿ÆþÎϥǥХ¤¥¹¤Î³Æ¼ï¾ðÊó¤òÊÝ»ý¤¹¤ë¡£
 
-    #MFrame ·¿¤ÎÆâÉô¹½Â¤¤Ï¡¢»ÈÍѤ¹¤ë¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤·¡¢¤Þ¤¿¥¢
-    ¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£m17n-X ¥é¥¤¥Ö¥é¥ê¤Ë¤ª¤±¤ë
-    ¥Õ¥ì¡¼¥à¤Ï¡¢X ¥¦¥£¥ó¥É¥¦¤Î @e display ¤È @e screen ¤Ë´Ø¤¹¤ë¾ðÊó¤ò
-    »ý¤Ä¡£
-      */
+    #MFrame ·¿¤ÎÆâÉô¹½Â¤¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
+    ¤Þ¤¿¤½¤ÎÆâÍƤϻÈÍѤ¹¤ë¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£¤Þ¤¿ m17n-X 
+    ¥é¥¤¥Ö¥é¥ê¤Ë¤ª¤±¤ë¥Õ¥ì¡¼¥à¤Ï¡¢X ¥¦¥£¥ó¥É¥¦¤Î @e display ¤È @e screen 
+    ¤Ë´Ø¤¹¤ë¾ðÊó¤ò»ý¤Ä¡£      */
 
 typedef struct MFrame MFrame;
 
 /*=*/
 
+extern MSymbol Mdevice;
+
 extern MSymbol Mfont;
 extern MSymbol Mfont_width;
 extern MSymbol Mfont_ascent;
 extern MSymbol Mfont_descent;
 extern MFrame *mframe_default;
 
+extern MSymbol Mdisplay;
+extern MSymbol Mscreen;
+extern MSymbol Mdrawable;
+extern MSymbol Mwidget;
+extern MSymbol Mdepth;
+extern MSymbol Mcolormap;
+
 extern MFrame *mframe (MPlist *plist);
 
 extern void *mframe_get_prop (MFrame *frame, MSymbol key);
@@ -113,12 +128,11 @@ extern void *mframe_get_prop (MFrame *frame, MSymbol key);
 /***ja
     @brief ¥Õ¥©¥ó¥È¤Î·¿Àë¸À.
 
-    #MFont ·¿¤Ï¥Õ¥©¥ó¥È»ØÄêÍѤι½Â¤ÂΤǤ¢¤ê¡¢¥Õ¥©¥ó¥È¤Î¥×¥í¥Ñ¥Æ¥£¤Ç¤¢
-    ¤ë fondry, family, weight, style, stretch, adstyle, registry,
+    #MFont ·¿¤Ï¥Õ¥©¥ó¥È»ØÄêÍѤι½Â¤ÂΤǤ¢¤ê¡¢¥Õ¥©¥ó¥È¤Î¥×¥í¥Ñ¥Æ¥£¤Ç¤¢¤ë
+    foundry, family, weight, style, stretch, adstyle, registry,
     size, resolution ¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤à¡£
 
-    ¤³¤Î¹½Â¤ÂΤϥե©¥ó¥È¥»¥Ã¥ÈÆâ¤Î¥Õ¥©¥ó¥È¤ò»ØÄꤹ¤ëºÝ¤È¡¢»ÈÍѲÄǽ¤Ê¥·
-    ¥¹¥Æ¥à¥Õ¥©¥ó¥È¤Î¾ðÊó¤ò³ÊǼ¤¹¤ëºÝ¤ÎξÊý¤ËÍѤ¤¤é¤ì¤ë¡£
+    ¤³¤Î¹½Â¤ÂΤϥե©¥ó¥È¥»¥Ã¥ÈÆâ¤Î¥Õ¥©¥ó¥È¤ò»ØÄꤹ¤ëºÝ¤È¡¢»ÈÍѲÄǽ¤Ê¥·¥¹¥Æ¥à¥Õ¥©¥ó¥È¤Î¾ðÊó¤ò³ÊǼ¤¹¤ëºÝ¤ÎξÊý¤ËÍѤ¤¤é¤ì¤ë¡£
 
     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
 
@@ -130,21 +144,21 @@ typedef struct MFont MFont;
 
 /*=*/
 
-extern MSymbol Mfont;
+extern MSymbol Mx, Mfreetype, Mxft;
 
 extern MPlist *mfont_freetype_path;
 
 extern MFont *mfont ();
 
-extern MFont *mfont_from_name (char *name);
-
 extern MFont *mfont_copy (MFont *font);
 
-extern char *mfont_name (MFont *font);
+extern MFont *mfont_parse_name (const char *name, MSymbol format);
+
+extern char *mfont_unparse_name (MFont *font, MSymbol format);
 
-extern MFont *mfont_from_spec (char *family, char *weight, char *slant,
-                              char *swidth, char *adstyle, char *registry,
-                              unsigned short point, unsigned short res);
+/* These two are obsolete (from 1.1.0).  */
+extern char *mfont_name (MFont *font);
+extern MFont *mfont_from_name (const char *name);
 
 extern MSymbol Mfoundry;
 extern MSymbol Mfamily;
@@ -152,9 +166,15 @@ extern MSymbol Mweight;
 extern MSymbol Mstyle;
 extern MSymbol Mstretch;
 extern MSymbol Madstyle;
+extern MSymbol Mspacing;
 extern MSymbol Mregistry;
 extern MSymbol Msize;
 extern MSymbol Mresolution;
+extern MSymbol Mmax_advance;
+extern MSymbol Motf;
+extern MSymbol Mfontfile;
+
+extern MSymbol Mfontconfig;
 
 extern void *mfont_get_prop (MFont *font, MSymbol key);
 
@@ -182,24 +202,42 @@ extern int mfont_set_encoding (MFont *font,
 /***ja
     @brief ¥Õ¥©¥ó¥È¤òõ¤¹.
 
-    ´Ø¿ô mfont_find () ¤Ï¡¢¥Õ¥ì¡¼¥à $FRAME ¾å¤Ç¥Õ¥©¥ó¥ÈÄêµÁ $SPEC ¤Ë¤â¤Ã
-    ¤È¤â¹çÃפ¹¤ë»ÈÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£  
+    ´Ø¿ô mfont_find () ¤Ï¡¢¥Õ¥ì¡¼¥à $FRAME ¾å¤Ç¥Õ¥©¥ó¥ÈÄêµÁ $SPEC 
+    ¤Ë¤â¤Ã¤È¤â¹çÃפ¹¤ë»ÈÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£  
 
-    $SCORE ¤Ï NULL ¤Ç¤¢¤ë¤«¡¢¸«¤Ä¤«¤Ã¤¿¥Õ¥©¥ó¥È¤¬ $SPEC ¤Ë¤É¤ì¤Û¤É¹ç¤Ã
-    ¤Æ¤¤¤ë¤«¤ò¼¨¤¹¥¹¥³¥¢¤òÊݸ¤¹¤ë¾ì½ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£¥¹¥³¥¢¤¬¾®¤µ
-    ¤¤¤Û¤ÉÎɤ¯¹ç¤Ã¤Æ¤¤¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
+    $SCORE ¤Ï NULL ¤Ç¤¢¤ë¤«¡¢¸«¤Ä¤«¤Ã¤¿¥Õ¥©¥ó¥È¤¬ $SPEC 
+    ¤Ë¤É¤ì¤Û¤É¹ç¤Ã¤Æ¤¤¤ë¤«¤ò¼¨¤¹¥¹¥³¥¢¤òÊݸ¤¹¤ë¾ì½ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
+    ¥¹¥³¥¢¤¬¾®¤µ¤¤¤Û¤ÉÎɤ¯¹ç¤Ã¤Æ¤¤¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
 
-    $LIMITED_SIZE ¤¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢$SPEC ¤Î¥×¥í¥Ñ¥Æ¥£ #Msize ¤è¤êÂ礭
-    ¤¯¤Ê¤¤¥Õ¥©¥ó¥È¤À¤±¤¬Ãµ¤µ¤ì¤ë¡£
+    $LIMITED_SIZE ¤¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢$SPEC ¤Î¥×¥í¥Ñ¥Æ¥£ #Msize 
+    ¤è¤êÂ礭¤¯¤Ê¤¤¥Õ¥©¥ó¥È¤À¤±¤¬Ãµ¤µ¤ì¤ë¡£
 */
 
 extern MFont *mfont_find (MFrame *frame, MFont *spec,
                          int *score, int limited_size);
-
 extern MSymbol *mfont_selection_priority ();
 
 extern int mfont_set_selection_priority (MSymbol *keys);
 
+extern int mfont_resize_ratio (MFont *font);
+
+extern MPlist *mfont_list (MFrame *frame, MFont *font, MSymbol language,
+                          int maxnum);
+extern MPlist *mfont_list_family_names (MFrame *frame);
+
+typedef struct MFontset MFontset;
+
+extern int mfont_check (MFrame *frame, MFontset *fontset,
+                       MSymbol script, MSymbol language, MFont *font);
+
+extern int mfont_match_p (MFont *font, MFont *spec);
+
+extern MFont *mfont_open (MFrame *frame, MFont *font);
+
+extern MFont *mfont_encapsulate (MFrame *frame, MSymbol data_type, void *data);
+
+extern int mfont_close (MFont *font);
+
 /* end of font module */
 /*=*/
 
@@ -207,9 +245,8 @@ extern int mfont_set_selection_priority (MSymbol *keys);
 /***en @defgroup m17nFontset Fontset */
 /***ja @defgroup m17nFontset ¥Õ¥©¥ó¥È¥»¥Ã¥È */
 /*=*/
-
-typedef struct MFontset MFontset;
-
+/*** @addtogroup m17nFontset
+     @{   */
 extern MFontset *mfontset (char *name);
 
 extern MSymbol mfontset_name (MFontset *fontset);
@@ -222,6 +259,9 @@ extern int mfontset_modify_entry (MFontset *fontset,
                                  MFont *spec, MSymbol layouter_name,
                                  int how);
 
+extern MPlist *mfontset_lookup (MFontset *fontset, MSymbol script,
+                               MSymbol language, MSymbol charset);
+/*** @}   */
 /* end of fontset module */
 /*=*/
 
@@ -240,8 +280,8 @@ extern int mfontset_modify_entry (MFontset *fontset,
 /***ja
     @brief ¥Õ¥§¡¼¥¹¤Î·¿Àë¸À.
 
-    #MFace ·¿¤Ï¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¿¤á¤Î¹½Â¤ÂΤǤ¢¤ë¡£ÆâÉô¹½Â¤¤Ï
-    ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
+    #MFace ·¿¤Ï¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¿¤á¤Î¹½Â¤ÂΤǤ¢¤ë¡£
+    ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
 
 typedef struct MFace MFace;
 /*=*/
@@ -287,6 +327,8 @@ extern MSymbol Mface;
 
 extern MFace *mface ();
 
+extern int mface_equal (MFace *face1, MFace *face2);
+
 extern MFace *mface_copy (MFace *face);
 
 extern MFace *mface_merge (MFace *dst, MFace *src);
@@ -305,8 +347,8 @@ extern MFace *mface_from_font (MFont *font);
 /***ja
     @brief ¥Õ¥§¡¼¥¹¤Î¿åÊ¿Àþ»ØÄêÍÑ·¿Àë¸À.
 
-    #MFaceHLineProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mhline ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿
-    ¤Ç¤¢¤ë¡£¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+    #MFaceHLineProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mhline 
+    ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿¤Ç¤¢¤ë¡£¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
       */
 
 typedef struct
@@ -344,8 +386,8 @@ typedef struct
 /***ja
     @brief ¥Õ¥§¡¼¥¹¤Î°Ï¤ßÏÈ»ØÄêÍÑ·¿Àë¸À.
 
-    #MFaceBoxProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mbox ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿¤Ç¤¢
-    ¤ë¡£¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+    #MFaceBoxProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mbox ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿¤Ç¤¢¤ë¡£
+    ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
       */
 
 typedef struct
@@ -354,15 +396,21 @@ typedef struct
   /***ja ÀþÉý¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë.  */
   unsigned width;
 
+  /* @{ */
+  /*** Colors of borders.  */
   MSymbol color_top;
   MSymbol color_bottom;
   MSymbol color_left;
   MSymbol color_right;
+  /* @} */
 
+  /* @{ */
+  /*** Margins  */
   unsigned inner_hmargin;
   unsigned inner_vmargin;
   unsigned outer_hmargin;
   unsigned outer_vmargin;
+  /* @} */
 
 } MFaceBoxProp;
 /*=*/
@@ -371,22 +419,22 @@ typedef struct
 /***en
     @brief Type of hook function of face.
 
-    The type #MFaceHookFunc is to specify the #Mhook property of a
-    face.  The value of the property must be function of this
-    type.  */
+    #MFaceHookFunc is a type of a hook function of a face.  */
 /***ja
     @brief ¥Õ¥§¡¼¥¹¤Î¥Õ¥Ã¥¯´Ø¿ô¤Î·¿Àë¸À.
 
-    #MFaceHookFunc ¤Ï¥Õ¥§¡¼¥¹¤Î #Mhook ¥×¥í¥Ñ¥Æ¥£¤ò»ØÄꤹ¤ë·¿¤Ç¤¢¤ë¡£
-    ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¤³¤Î·¿¤Î´Ø¿ô¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-      */
-typedef void *(*MFaceHookFunc) (MFace *face, void *arg, void *info);
+    #MFaceHookFunc ¤Ï¥Õ¥§¡¼¥¹¤Î¥Õ¥Ã¥¯´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£*/
+typedef void (*MFaceHookFunc) (MFace *face, void *arg, void *info);
 /*=*/
 
 extern void *mface_get_prop (MFace *face, MSymbol key);
 
 extern int mface_put_prop (MFace *face, MSymbol key, void *val);
 
+extern MFaceHookFunc mface_get_hook (MFace *face);
+
+extern int mface_put_hook (MFace *face, MFaceHookFunc func);
+
 extern void mface_update (MFrame *frame, MFace *face);
 
 /* end of face module */
@@ -410,12 +458,10 @@ extern void mface_update (MFrame *frame, MFace *face);
 /***ja 
     @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡¢¥¦¥£¥ó¥É¥¦¤Î·¿Àë¸À.
 
-    #MDrawWindow ¤Ï¥¦¥£¥ó¥É¥¦¡¢¤¹¤Ê¤ï¤Á´ö¤Ä¤«¤ÎÅÀ¤Ç¥¹¥¯¥ê¡¼¥ó¤Î¥ß¥Ë¥Á¥å
-    ¥¢¤È¤·¤ÆƯ¤¯¶ë·ÁÎΰèÍѤη¿¤Ç¤¢¤ë¡£
+    #MDrawWindow ¤Ï¥¦¥£¥ó¥É¥¦¡¢¤¹¤Ê¤ï¤Á´ö¤Ä¤«¤ÎÅÀ¤Ç¥¹¥¯¥ê¡¼¥ó¤Î¥ß¥Ë¥Á¥å¥¢¤È¤·¤ÆƯ¤¯¶ë·ÁÎΰèÍѤη¿¤Ç¤¢¤ë¡£
 
-    ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X ¥é¥¤¥Ö¥é¥ê
-    ¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Drawable ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é
-    ¤Ê¤¤¡£ */
+    ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X 
+    ¥é¥¤¥Ö¥é¥ê¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Drawable ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ */
 
 typedef void *MDrawWindow;
 /*=*/
@@ -433,12 +479,10 @@ typedef void *MDrawWindow;
 /***ja
     @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡¢Îΰè¤Î·¿Àë¸À.
 
-    #MDrawRegion ¤ÏÎΰ衢¤¹¤Ê¤ï¤Á¥¹¥¯¥ê¡¼¥ó¾å¤ÎǤ°Õ¤Î¥Ô¥¯¥»¥ë¤Î½¸¹ç
-   ¡Êŵ·¿Åª¤Ë¤Ï¶ë·ÁÎΰè¡ËÍѤη¿¤Ç¤¢¤ë¡£
+    #MDrawRegion ¤ÏÎΰ衢¤¹¤Ê¤ï¤Á¥¹¥¯¥ê¡¼¥ó¾å¤ÎǤ°Õ¤Î¥Ô¥¯¥»¥ë¤Î½¸¹ç¡Êŵ·¿Åª¤Ë¤Ï¶ë·ÁÎΰè¡ËÍѤη¿¤Ç¤¢¤ë¡£
 
-    ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X ¥é¥¤¥Ö¥é¥ê
-    ¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Region ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é
-    ¤Ê¤¤¡£  */
+    ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X 
+    ¥é¥¤¥Ö¥é¥ê¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Region ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£  */
 
 typedef void *MDrawRegion;
 /*=*/
@@ -450,7 +494,7 @@ typedef void *MDrawRegion;
     The type #MDrawControl is the structure that controls how to draw
     an M-text.  */
 /***ja
-    @brief ¥Æ¥­¥¹¥Èɽ¼¨¤Î¥³¥ó¥È¥í¡¼¥ë¤Î·¿Àë¸À.
+    @brief ¥Æ¥­¥¹¥Èɽ¼¨À©¸æ¤Î·¿Àë¸À.
 
     #MDrawControl ·¿¤Ï¡¢M-text ¤ò¤É¤¦É½¼¨¤¹¤ë¤«¤òÀ©¸æ¤¹¤ë¹½Â¤ÂΤǤ¢¤ë¡£
       */
@@ -461,28 +505,25 @@ typedef struct
   /***en If nonzero, draw an M-text as image, i.e. with background
       filled with background colors of faces put on the M-text.
       Otherwise, the background is not changed.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ M-text ¤ò²èÁü¤È¤·¤Æ¡¢¤¹¤Ê¤ï¤ÁÇطʤò M-text ¤Î
-      ¥Õ¥§¡¼¥¹¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ëÇØ·Ê¿§¤ÇËä¤á¤Æɽ¼¨¤¹¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÇØ
-      ·Ê¤ÏÊѤï¤é¤Ê¤¤¡£  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ M-text ¤ò²èÁü¤È¤·¤Æ¡¢¤¹¤Ê¤ï¤ÁÇطʤò M-text 
+      ¤Î¥Õ¥§¡¼¥¹¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ëÇØ·Ê¿§¤ÇËä¤á¤Æɽ¼¨¤¹¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÇطʤÏÊѤï¤é¤Ê¤¤¡£  */
   unsigned as_image : 1;
 
   /***en If nonzero and the first glyph of each line has negative
       lbearing, shift glyphs horizontally to right so that no pixel is
       drawn to the left of the specified position.  */
-  /***ja 0 ¤Ç¤Ê¤¯¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤Îlbearing ¤¬Éé¤Ê¤é¤Ð¡¢¥°¥ê¥Õ¤ò¿å
-      Ê¿¤Ë±¦¤Ë¤º¤é¤·¤Æ¡¢»ØÄꤷ¤¿°ÌÃÖ¤è¤êº¸¤Ë¥Ô¥¯¥»¥ë¤¬ÉÁ¤«¤ì¤Ê¤¤¤è¤¦¤Ë
-      ¤¹¤ë¡£  */
+  /***ja 0 ¤Ç¤Ê¤¯¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤Î lbearing 
+      ¤¬Éé¤Ê¤é¤Ð¡¢¥°¥ê¥Õ¤ò¿åÊ¿¤Ë±¦¤Ë¤º¤é¤·¤Æ¡¢»ØÄꤷ¤¿°ÌÃÖ¤è¤êº¸¤Ë¥Ô¥¯¥»¥ë¤¬ÉÁ¤«¤ì¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¡£  */
   unsigned align_head : 1;
 
   /***en If nonzero, draw an M-text two-dimensionally, i.e., newlines
       in M-text breaks lines and the following characters are drawn in
-      the next line.  If <format> is non-NULL, and the function
+      the next line.  If \<format\> is non-NULL, and the function
       returns nonzero line width, a line longer than that width is
       also broken.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤ò£²¼¡¸µÅª¤Ë¡¢¤¹¤Ê¤ï¤ÁM-text Ãæ¤Î 
-      newline ¤Ç²þ¹Ô¤·¡¢Â³¤¯Ê¸»ú¤Ï¼¡¤®¤Î¹Ô¤Ëɽ¼¨¤¹¤ë¡£¤â¤· <format> ¤¬ 
-      NULL ¤Ç¤Ê¤¯¡¢¤½¤Î´Ø¿ô¤¬ 0 ¤Ç¤Ê¤¤¹ÔÉý¤òÊÖ¤»¤Ð¡¢¤½¤ÎÉý¤è¤êŤ¤¹Ô¤â
-      ²þ¹Ô¤µ¤ì¤ë¡£  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤ò£²¼¡¸µÅª¤Ë¡¢¤¹¤Ê¤ï¤Á M-text Ãæ¤Î 
+      newline ¤Ç²þ¹Ô¤·¡¢Â³¤¯Ê¸»ú¤Ï¼¡¤Î¹Ô¤Ëɽ¼¨¤¹¤ë¡£¤â¤· \<format\> ¤¬ 
+      NULL ¤Ç¤Ê¤¯¡¢¤½¤Î´Ø¿ô¤¬ 0 ¤Ç¤Ê¤¤¹ÔÉý¤òÊÖ¤»¤Ð¡¢¤½¤ÎÉý¤è¤êŤ¤¹Ô¤â²þ¹Ô¤µ¤ì¤ë¡£  */
   unsigned two_dimensional : 1;
 
   /***en If nonzero, draw an M-text to the right of a specified
@@ -502,42 +543,47 @@ typedef struct
 
   /***en If nonzero, draw glyphs suitable for a terminal.  Not yet
       implemented.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ã¼ËöÍѤΥ°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£¡Ê̤¼ÂÁõ¡£¡Ë  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ã¼ËöÍѤΥ°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£Ì¤¼ÂÁõ¡£  */
   unsigned fixed_width : 1;
 
   /***en If nonzero, draw glyphs with anti-aliasing if a backend font
       driver supports it.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹¤Ç¥°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£¡Ê¥Ð¥Ã¥¯¥¨
-      ¥ó¥É¤Î¥Õ¥©¥ó¥È¥É¥é¥¤¥Ð¤¬¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹µ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¾ì
-      ¹ç¤Î¤ß¡£¡Ë */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹¤Ç¥°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£
+      ¡Ê¥Ð¥Ã¥¯¥¨¥ó¥É¤Î¥Õ¥©¥ó¥È¥É¥é¥¤¥Ð¤¬¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹µ¡Ç½¤ò»ý¤Ä¾ì¹ç¤Î¤ß¡£¡Ë */
   unsigned anti_alias : 1;
 
-  /***en If nonzero, the values are minimum line ascent and descent
-      pixels.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇ¾®Ãͤò¼¨¤¹¡£  */
+  /***en If nonzero, disable the adjustment of glyph positions to
+      avoid horizontal overlapping at font boundary.  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Õ¥©¥ó¥È¶­³¦¤Ç¤Î¿åÊ¿Êý¸þ¤Î¥°¥ê¥Õ¤Î½Å¤Ê¤ê¤òÈò¤±¤ë¤¿¤á¤Î¥°¥ê¥Õ°ÌÃÖ¤ÎÄ´À°¤ò̵¸ú¤Ë¤¹¤ë¡£  */
+  unsigned disable_overlapping_adjustment : 1;
+
+  /***en If nonzero, the values are minimum line ascent pixels.  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤ÎºÇ¾®Ãͤò¼¨¤¹¡£  */
   unsigned int min_line_ascent;
+  /***en If nonzero, the values are minimum line descent pixels.  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠdescent ¤ÎºÇ¾®Ãͤò¼¨¤¹¡£  */
   unsigned int min_line_descent;
 
-  /***en If nonzero, the values are maximum line ascent and descent
-      pixels.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇÂçÃͤò¼¨¤¹¡£  */
+  /***en If nonzero, the values are maximum line ascent pixels.  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤ÎºÇÂçÃͤò¼¨¤¹¡£  */
   unsigned int max_line_ascent;
+  /***en If nonzero, the values are maximum line descent pixels.  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠdescent ¤ÎºÇÂçÃͤò¼¨¤¹¡£  */
   unsigned int max_line_descent;
 
   /***en If nonzero, the value specifies how many pixels each line can
       occupy on the display.  The value zero means that there is no
-      limit.  It is ignored if <format> is non-NULL.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϤ³¤Î¥Ç¥£¥¹¥×¥ì¥¤¾å¤Ç³Æ¹Ô¤¬Àê¤á¤ë¤³¤È¤Î¤Ç¤­
-      ¤ë¥Ô¥¯¥»¥ë¿ô¤ò¼¨¤¹¡£ 0 ¤Ï¸ÂÄꤵ¤ì¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£<format> ¤¬
-      NULL ¤Ç¤Ê¤±¤ì¤Ð̵»ë¤µ¤ì¤ë¡£   */
+      limit.  It is ignored if \<format\> is non-NULL.  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϤ³¤Î¥Ç¥£¥¹¥×¥ì¥¤¾å¤Ç³Æ¹Ô¤¬Àê¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ô¥¯¥»¥ë¿ô¤ò¼¨¤¹¡£
+      0 ¤Ï¸ÂÄꤵ¤ì¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£\<format\> ¤¬ NULL ¤Ç¤Ê¤±¤ì¤Ð̵»ë¤µ¤ì¤ë¡£   */
   unsigned int max_line_width;
 
   /***en If nonzero, the value specifies the distance between tab
       stops in columns (the width of one column is the width of a
       space in the default font of the frame).  The value zero means
       8.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϥ¿¥Ö¥¹¥È¥Ã¥×´Ö¤Îµ÷Î¥¤ò¥³¥é¥àñ°Ì¡Ê¥³¥é¥à¤Ï
-      ¥Õ¥ì¡¼¥à¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤Ë¤ª¤±¤ë¶õÇòʸ»ú¤ÎÉý¤Ç¤¢¤ë¡Ë¤Ç¼¨¤¹¡£ 
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϥ¿¥Ö¥¹¥È¥Ã¥×´Ö¤Îµ÷Î¥¤ò¥³¥é¥àñ°Ì
+      ¡Ê¥³¥é¥à¤Ï¥Õ¥ì¡¼¥à¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤Ë¤ª¤±¤ë¶õÇòʸ»ú¤ÎÉý¤Ç¤¢¤ë¡Ë¤Ç¼¨¤¹¡£ 
       0 ¤Ï 8 ¤ò°ÕÌ£¤¹¤ë¡£ */
   unsigned int tab_width;
 
@@ -549,7 +595,7 @@ typedef struct
 
       The indentation specifies how many pixels the first glyph of
       each line is shifted to the right (if the member
-      <orientation_reversed> is zero) or to the left (otherwise).  If
+      \<orientation_reversed\> is zero) or to the left (otherwise).  If
       the value is negative, each line is shifted to the reverse
       direction.
 
@@ -560,31 +606,31 @@ typedef struct
       character, and incremented each time when a long line is broken
       because of the width limit.
 
-      This has an effect only when <two_dimensional> is nonzero.  */
+      This has an effect only when \<two_dimensional\> is nonzero.  */
   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϴؿô¤Ç¤¢¤ê¡¢¤½¤Î´Ø¿ô¤Ï¹ÔÈÖ¹æ LINE ¤ÈºÂɸ Y 
       ¤Ë´ð¤Å¤¤¤Æ³Æ¹Ô¤Î¥¤¥ó¥Ç¥ó¥È¤ÈºÇÂçÉý¤ò·×»»¤·¡¢¤½¤ì¤¾¤ì¤òINDENT ¤È
       WIDTH ¤Ç»Ø¤µ¤ì¤ë¾ì½ê¤ËÊݸ¤¹¤ë¡£
 
-      ¥¤¥ó¥Ç¥ó¥È¤Ï¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤¬±¦¡Ê¥á¥ó¥Ð 
-      <orientation_reversed> ¤¬ 0 ¤Î»þ¡Ë¤¢¤ë¤¤¤Ïº¸¡Ê¤½¤ì°Ê³°¤Î»þ¡Ë¤Ë²¿
-      ¥Ô¥¯¥»¥ë¤º¤é¤¹¤ò»ØÄꤹ¤ë¡£Ãͤ¬Éé¤Ê¤é¤ÐµÕÊý¸þ¤Ë¤º¤é¤¹¡£
+      ¥¤¥ó¥Ç¥ó¥È¤Ï¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤ò±¦¡Ê¥á¥ó¥Ð 
+      \<orientation_reversed\> ¤¬ 0 
+      ¤Î»þ¡Ë¤¢¤ë¤¤¤Ïº¸¡Ê¤½¤ì°Ê³°¤Î»þ¡Ë¤Ë²¿¥Ô¥¯¥»¥ë¤º¤é¤¹¤«¤ò»ØÄꤹ¤ë¡£Ãͤ¬Éé¤Ê¤é¤ÐµÕÊý¸þ¤Ë¤º¤é¤¹¡£
 
-      ºÇÂçÉý¤Ï¡¢³Æ¹Ô¤¬¥Ç¥£¥¹¥×¥ì¥¤¾å¤ÇÀê¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ô¥¯¥»¥ë¿ô¤ÎºÇ
-      ÂçÃͤǤ¢¤ë¡£Ãͤ¬ 0 ¤Î¾ì¹ç¤ÏÀ©¸Â¤ò¼õ¤±¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
+      ºÇÂçÉý¤Ï¡¢³Æ¹Ô¤¬¥Ç¥£¥¹¥×¥ì¥¤¾å¤ÇÀê¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ô¥¯¥»¥ë¿ô¤ÎºÇÂçÃͤǤ¢¤ë¡£Ãͤ¬
+      0 ¤Î¾ì¹ç¤ÏÀ©¸Â¤ò¼õ¤±¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
 
-      LINE ¤È Y ¤Ï²þ¹Ôʸ»ú¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿ºÝ¤Ë¤Ï 0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¡¢
-      ºÇÂçÉý¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿¾ì¹ç¤Ë¤Ï 1 ¤Å¤ÄÁý¤ä¤µ¤ì¤ë¡£
+      LINE ¤È Y ¤Ï²þ¹Ôʸ»ú¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿ºÝ¤Ë¤Ï 0 
+      ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¡¢Ä¹¤¤¹Ô¤¬ºÇÂçÉý¤ÎÀ©¸Â¤Ë¤è¤Ã¤Æ²þ¹Ô¤µ¤ì¤ë¤¿¤Ó¤Ë 1 Áý¤ä¤µ¤ì¤ë¡£
 
-      ¤³¤ì¤Ï <two_dimensional> ¤¬ 0 ¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ç¤¢¤ë¡£  */
+      ¤³¤ì¤Ï \<two_dimensional\> ¤¬ 0 ¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ç¤¢¤ë¡£  */
   void (*format) (int line, int y, int *indent, int *width);
 
   /***en If non-NULL, the value is a function that calculates a line
       breaking position when a line is too long to fit within the
-      width limit.  POS is a position of the character next to the
-      last one that fits within the limit.  FROM is a position of the
-      first character of the line, and TO is a position of the last
+      width limit.  POS is the position of the character next to the
+      last one that fits within the limit.  FROM is the position of the
+      first character of the line, and TO is the position of the last
       character displayed on the line if there were not width limit.
-      LINE and Y are the same as the arguments to <format>.
+      LINE and Y are the same as the arguments to \<format\>.
 
       The function must return a character position to break the
       line.
@@ -593,48 +639,49 @@ typedef struct
 
       The mdraw_default_line_break () function is useful for such a
       script that uses SPACE as a word separator.  */
-  /***ja NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤ¬ºÇÂçÉýÃæ¤Ë¼ý¤Þ¤é¤Ê¤¤¾ì¹ç¤Ë¹Ô¤ò²þ¤á¤ë
-      °ÌÃÖ¤ò·×»»¤¹¤ë´Ø¿ô¤Ç¤¢¤ë¡£POS ¤ÏºÇÂçÉý¤Ë¼ý¤Þ¤ëºÇ¸å¤Îʸ»ú¤Î¼¡¤Îʸ
-      »ú¤Î°ÌÃ֤Ǥ¢¤ë¡£FROM ¤Ï¹Ô¤ÎºÇ½é¤Îʸ»ú¤Î°ÌÃÖ¡¢TO ¤ÏºÇÂçÉý¤¬»ØÄꤵ
-      ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤½¤Î¹Ô¤Ëɽ¼¨¤µ¤ì¤ëºÇ¸å¤Îʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¡£LINE ¤È 
-      Y ¤Ï <format> ¤Î°ú¿ô¤ÈƱ¤¸¤Ç¤¢¤ë¡£
+  /***ja NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤ¬ºÇÂçÉýÃæ¤Ë¼ý¤Þ¤é¤Ê¤¤¾ì¹ç¤Ë¹Ô¤ò²þ¤á¤ë°ÌÃÖ¤ò·×»»¤¹¤ë´Ø¿ô¤Ç¤¢¤ë¡£
+      POS ¤ÏºÇÂçÉý¤Ë¼ý¤Þ¤ëºÇ¸å¤Îʸ»ú¤Î¼¡¤Îʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¡£FROM
+      ¤Ï¹Ô¤ÎºÇ½é¤Îʸ»ú¤Î°ÌÃÖ¡¢TO 
+      ¤ÏºÇÂçÉý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤½¤Î¹Ô¤Ëɽ¼¨¤µ¤ì¤ëºÇ¸å¤Îʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¡£LINE 
+      ¤È Y ¤Ï \<format\> ¤Î°ú¿ô¤ÈƱÍͤǤ¢¤ë¡£
 
-      ¤³¤Î´Ø¿ô¤Ï¹Ô¤ò²þ¤á¤ëʸ»ú°ÌÃÖ¤òÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤Þ¤¿MT ¤ò
-      Êѹ¹¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+      ¤³¤Î´Ø¿ô¤Ï¹Ô¤ò²þ¤á¤ëʸ»ú°ÌÃÖ¤òÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤Þ¤¿ MT ¤òÊѹ¹¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 
-      ´Ø¿ô mdraw_default_line_break () ¤Ï¡¢¶õÇò¤ò¸ì¤Î¶èÀÚ¤ê¤È¤·¤ÆÍѤ¤
-      ¤ë¥¹¥¯¥ê¥×¥ÈÍѤȤ·¤ÆÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
+      ´Ø¿ô mdraw_default_line_break ()
+      ¤Ï¡¢¶õÇò¤ò¸ì¤Î¶èÀÚ¤ê¤È¤·¤ÆÍѤ¤¤ë¥¹¥¯¥ê¥×¥ÈÍѤȤ·¤ÆÍ­ÍѤǤ¢¤ë¡£  */
   int (*line_break) (MText *mt, int pos, int from, int to, int line, int y);
 
+  /***en If nonzero, show the cursor according to \<cursor_width\>.  */
+  /***ja ¥¼¥í¤Ç¤Ê¤±¤ì¤Ð \<cursor_width\> ¤Ë¤·¤¿¤¬¤Ã¤Æ¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ë¡£ */
   int with_cursor;
 
   /***en Specifies the character position to display a cursor.  If it
       is greater than the maximum character position, the cursor is
       displayed next to the last character of an M-text.  If the value
-      is negative, even if <cursor_width> is nonzero, cursor is not
+      is negative, even if \<cursor_width\> is nonzero, cursor is not
       displayed.  */
-  /***ja ¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ëʸ»ú°ÌÃÖ¤ò¼¨¤¹¡£ºÇÂç¤Îʸ»ú°ÌÃÖ¤è¤êÂ礭¤±¤ì
-      ¤Ð¡¢¥«¡¼¥½¥ë¤ÏM-text ¤ÎºÇ¸å¤Îʸ»ú¤ÎÎÙ¤Ëɽ¼¨¤µ¤ì¤ë¡£Éé¤Ê¤é¤Ð¡¢
-      <cursor_width> ¤¬ 0 ¤Ç¤Ê¤¯¤Æ¤â¥«¡¼¥½¥ë¤Ïɽ¼¨¤µ¤ì¤Ê¤¤¡£
+  /***ja ¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ëʸ»ú°ÌÃÖ¤ò¼¨¤¹¡£ºÇÂç¤Îʸ»ú°ÌÃÖ¤è¤êÂ礭¤±¤ì¤Ð¡¢¥«¡¼¥½¥ë¤Ï 
+      M-text ¤ÎºÇ¸å¤Îʸ»ú¤ÎÎÙ¤Ëɽ¼¨¤µ¤ì¤ë¡£Éé¤Ê¤é¤Ð¡¢
+      \<cursor_width\> ¤¬ 0 ¤Ç¤Ê¤¯¤Æ¤â¥«¡¼¥½¥ë¤Ïɽ¼¨¤µ¤ì¤Ê¤¤¡£
         */
   int cursor_pos;
 
   /***en If nonzero, display a cursor at the character position
-      <cursor_pos>.  If the value is positive, it is the pixel width
+      \<cursor_pos\>.  If the value is positive, it is the pixel width
       of the cursor.  If the value is negative, the cursor width is
       the same as the underlining glyph(s).  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢<cursor_pos> ¤Ë¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ë¡£Ãͤ¬Àµ¤Ê¤é¤Ð¡¢
-      ¥«¡¼¥½¥ë¤ÎÉý¤Ï¤½¤ÎÃÍ¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë¤Ç¤¢¤ë¡£Éé¤Ê¤é¤Ð¡¢¥«¡¼¥½¥ë¤Î
-      ¤¢¤ë¥°¥ê¥Õ¤ÈƱ¤¸Éý¤Ç¤¢¤ë¡£  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢\<cursor_pos\> ¤Ë¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ë¡£
+      Ãͤ¬Àµ¤Ê¤é¤Ð¡¢¥«¡¼¥½¥ë¤ÎÉý¤Ï¤½¤ÎÃÍ¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë¤Ç¤¢¤ë¡£
+      Éé¤Ê¤é¤Ð¡¢¥«¡¼¥½¥ë¤Î¤¢¤ë¥°¥ê¥Õ¤ÈƱ¤¸Éý¤Ç¤¢¤ë¡£  */
   int cursor_width;
 
-  /***en If nonzero and <cursor_width> is also nonzero, display double
-      bar cursors; at the character position <cursor_pos> and at the
+  /***en If nonzero and \<cursor_width\> is also nonzero, display double
+      bar cursors; at the character position \<cursor_pos\> and at the
       logically previous character.  Both cursors have one pixel width
       with horizontal fringes at upper or lower positions.  */
-  /***ja If 0 ¤Ç¤Ê¤¯¡¢¤«¤Ä <cursor_width> ¤â 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ð¡¼¥«¡¼¥½
-      ¥ë¤òʸ»ú°ÌÃÖ<cursor_pos> ¤ÈÏÀÍýŪ¤Ë¤½¤ì¤ÎÁ°¤Ë¤¢¤ëʸ»ú¤Î£²¥ö½êɽ
-      ¼¨¤¹¤ë¡£ÁÐÊý¤È¤â£±¥Ô¥¯¥»¥ëÉý¤Ç¡¢¾å²¼¤Ë¿åÊ¿¤Î¾þ¤ê¤¬¤Ä¤¯¡£*/
+  /***ja If 0 ¤Ç¤Ê¤¯¡¢¤«¤Ä \<cursor_width\> ¤â 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ð¡¼¥«¡¼¥½¥ë¤òʸ»ú°ÌÃÖ
+      \<cursor_pos\> ¤ÈÏÀÍýŪ¤Ë¤½¤ì¤ÎÁ°¤Ë¤¢¤ëʸ»ú¤Î£²¥ö½ê¤Ëɽ¼¨¤¹¤ë¡£
+      ÁÐÊý¤È¤â£±¥Ô¥¯¥»¥ëÉý¤Ç¡¢¾å¤«²¼¤Ë¿åÊ¿¤Î¾þ¤ê¤¬¤Ä¤¯¡£*/
   int cursor_bidi;
 
   /***en If nonzero, on drawing partial text, pixels of surrounding
@@ -646,14 +693,13 @@ typedef struct
       right half of V is erased if this member is zero.  By setting
       this member to nonzero, even with such a drawing, we can keep
       this CVC sequence correctly displayed.  */
-  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Æ¥­¥¹¥È¤Î°ìÉôʬ¤òɽ¼¨¤¹¤ëºÝ¤Ë¡¢Á°¸å¤Î¥Æ¥­¥¹¥È
-      ¤Î¤¦¤Á¤½¤Îɽ¼¨Îΰè¤Ë¿¯Æþ¤¹¤ëÉôʬ¤âɽ¼¨¤¹¤ë¡£¤¿¤È¤¨¤Ð¡¢¥¿¥¤¸ìʸ½ñ
-      ¤Î»Ò²»-Êì²»-»Ò²»¤È¤¤¤¦¥·¡¼¥¯¥¨¥ó¥¹¤Î¤¤¤¯¤Ä¤«¤Ï¡¢Êì²»¤¬Æó¤Ä¤Î»Ò²»
-      ¤Î´Ö¤Ë¾å¤Ë¤Î¤ë¤è¤¦¤ËÉÁ¤«¤ì¤ë¡£¤³¤Î¤è¤¦¤Ê¥·¡¼¥¯¥¨¥ó¥¹¤¬¤¹¤Ç¤ËÉÁ¤«
-      ¤ì¤Æ¤ª¤ê¡¢ºÇ¸å¤Î»Ò²»¤À¤±¤òÉÁ¤­Ä¾¤¹¾ì¹ç¡Ê¤¿¤È¤¨¤Ð¡¢¥«¡¼¥½¥ë°ÌÃÖ¤ò
-      ¹¹¿·¤¹¤ëºÝ¤Ê¤É¡Ë¤³¤Î¥á¥ó¥Ð¤¬ 0 ¤Ç¤¢¤ì¤Ð¡¢Êì²»¤Î±¦È¾Ê¬¤¬¾Ã¤µ¤ì¤Æ
-      ¤·¤Þ¤¦¡£¤³¤ì¤ò 0 °Ê³°¤Ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤½¤Î¤è¤¦¤ÊºÝ¤Ë¤â»Ò²»-Êì
-      ²»-»Ò²»¥·¡¼¥¯¥¨¥ó¥¹¤òÀµ¤·¤¯É½¼¨¤·Â³¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
+  /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Æ¥­¥¹¥È¤Î°ìÉôʬ¤òɽ¼¨¤¹¤ëºÝ¤Ë¡¢Á°¸å¤Î¥Æ¥­¥¹¥È¤Î¤¦¤Á¤½¤Îɽ¼¨Îΰè¤Ë¿¯Æþ¤¹¤ëÉôʬ¤âɽ¼¨¤¹¤ë¡£
+      ¤¿¤È¤¨¤Ð¡¢¥¿¥¤¸ì¥Æ¥­¥¹¥È »Ò²»-Êì²»-»Ò²» 
+      ¤È¤¤¤¦¥·¡¼¥¯¥¨¥ó¥¹¤Î¤¤¤¯¤Ä¤«¤Ï¡¢Êì²»¤¬Æó¤Ä¤Î»Ò²»¤Î´Ö¤Ë¾å¤Ë¤Î¤ë¤è¤¦¤ËÉÁ¤«¤ì¤ë¡£
+      ¤³¤Î¤è¤¦¤Ê¥·¡¼¥¯¥¨¥ó¥¹¤¬¤¹¤Ç¤ËÉÁ¤«¤ì¤Æ¤ª¤ê¡¢ºÇ¸å¤Î»Ò²»¤À¤±¤òÉÁ¤­Ä¾¤¹¾ì¹ç
+      ¡Ê¤¿¤È¤¨¤Ð¡¢¥«¡¼¥½¥ë°ÌÃÖ¤ò¹¹¿·¤¹¤ëºÝ¤Ê¤É¡Ë¤³¤Î¥á¥ó¥Ð¤¬ 0 
+      ¤Ç¤¢¤ì¤Ð¡¢Êì²»¤Î±¦È¾Ê¬¤¬¾Ã¤µ¤ì¤Æ¤·¤Þ¤¦¡£¤³¤ì¤ò 0 °Ê³°¤Ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤½¤Î¤è¤¦¤ÊºÝ¤Ë¤â
+      »Ò²»-Êì²»-»Ò²» ¤Î¥·¡¼¥¯¥¨¥ó¥¹¤òÀµ¤·¤¯É½¼¨¤·Â³¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
   int partial_update;
 
   /***en If nonzero, don't cache the result of any drawing information
@@ -662,16 +708,19 @@ typedef struct
        */
   int disable_caching;
 
-  /* If non-NULL, limit the drawing effect to the specified region.  */
+  /***en If non-NULL, limit the drawing effect to the specified region.  */
+  /***ja NULL ¤Ç¤Ê¤±¤ì¤Ðɽ¼¨¥¨¥ê¥¢¤ò»ØÄꤵ¤ì¤¿Îΰè¤Ë¸ÂÄꤹ¤ë¡£ */
   MDrawRegion clip_region;
 
 } MDrawControl;
 
+extern int mdraw_line_break_option;
+
 /*=*/
 
 /*** @ingroup m17nDraw */
 /***en
-    @brief Type of metric for gylphs and texts.
+    @brief Type of metric for glyphs and texts.
 
     The type #MDrawMetric is for a metric of a glyph and a drawn text.
     It is also used to represent a rectangle area of a graphic
@@ -679,12 +728,18 @@ typedef struct
 /***ja
     @brief ¥°¥ê¥Õ¤È¥Æ¥­¥¹¥È¤ÎÀ£Ë¡¤Î·¿Àë¸À.
 
-    #MDrawMetric ¤Ï¥°¥ê¥Õ¤Èɽ¼¨¤µ¤ì¤¿¥Æ¥­¥¹¥È¤ÎÀ£Ë¡ÍѤη¿¤Ç¤¢¤ë¡£¤Þ¤¿¡¢
-    É½¼¨¥Ç¥Ð¥¤¥¹¤Î¶ë·ÁÎΰè¤òɽ¤¹¤Î¤Ë¤âÍѤ¤¤é¤ì¤ë¡£ */
+    #MDrawMetric ¤Ï¥°¥ê¥Õ¤Èɽ¼¨¤µ¤ì¤¿¥Æ¥­¥¹¥È¤ÎÀ£Ë¡ÍѤη¿¤Ç¤¢¤ë¡£
+    ¤Þ¤¿¡¢É½¼¨¥Ç¥Ð¥¤¥¹¤Î¶ë·ÁÎΰè¤òɽ¤¹¤Î¤Ë¤âÍѤ¤¤é¤ì¤ë¡£ */
 
 typedef struct {
-  int x, y;
-  unsigned int width, height;
+  /*** X coordinates of a glyph or a text.  */
+  int x;
+  /*** Y coordinates of a glyph or a text.  */
+  int y;
+  /*** Pixel width of a glyph or a text.  */
+  unsigned int width;
+  /*** Pixel height of a glyph or a text.  */
+  unsigned int height;
 } MDrawMetric;
 
 /*=*/
@@ -703,49 +758,154 @@ typedef struct {
 
 typedef struct
 {
-  /***en Character range corresponding to the glyph.  */
-  /***ja ¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
-  int from, to;
-
-  /***en Character ranges corresponding to the line of the glyph.  */
-  /***ja  ¥°¥ê¥Õ¤ÎÎó¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
-  int line_from, line_to;
-
-  /***en X/Y coordinates of the glyph.  */
-  /***ja ¥°¥ê¥Õ¤Î X/Y ºÂɸ.  */
-  int x, y;
+  /***en Start position of character range corresponding to the glyph.  */
+  /***ja ¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤγ«»Ï°ÌÃÖ.  */
+  int from;
+
+  /***en End position of character range corresponding to the glyph.  */
+  /***ja ¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤνªÎ»°ÌÃÖ.  */
+  int to;
+
+  /***en Start position of character range corresponding to the line of the glyph.  */
+  /***ja °ì¹Ô¤Î¥°¥ê¥Õ¤ÎÎó¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤγ«»Ï°ÌÃÖ.  */
+  int line_from;
+  /***en End position of character range corresponding to the line of the glyph.  */
+  /***ja °ì¹Ô¤Î¥°¥ê¥Õ¤ÎÎó¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤνªÎ»°ÌÃÖ.  */
+  int line_to;
+
+  /***en X coordinates of the glyph.  */
+  /***ja ¥°¥ê¥Õ¤Î X ºÂɸ.  */
+  int x;
+  /***en Y coordinates of the glyph.  */
+  /***ja ¥°¥ê¥Õ¤Î Y ºÂɸ.  */
+  int y;
 
   /***en Metric of the glyph.  */
   /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡.  */
-  MDrawMetric this;
+  MDrawMetric metrics;
 
   /***en Font used for the glyph.  Set to NULL if no font is found for
       the glyph.  */
-  /***ja ¤½¤Î¥°¥ê¥ÕÍѤ˻Ȥï¤ì¤ë¥Õ¥©¥ó¥È¡£¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð NULL¡£
+  /***ja ¥°¥ê¥Õ¤Ë»È¤ï¤ì¤ë¥Õ¥©¥ó¥È¡£¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð NULL¡£ */
+      
+  MFont *font;
+
+  /***en Character ranges corresponding to logically previous glyphs.
+      Note that we do not need the members prev_to because it must
+      be the same as the member \<from\>.  */
+  /***ja ÏÀÍýŪ¤ÊÁ°¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£¥á¥ó¥Ð prev_to ¤Ï¡¢¥á
+      ¥ó¥Ð from ¤ÈƱ¤¸¤Ç¤¢¤ë¤Ï¤º¤Ê¤Î¤ÇÉÔÍפǤ¢¤ë¡£  */
+  int prev_from;
+  /***en Character ranges corresponding to logically next glyphs.
+      Note that we do not need the members next_from because it must
+      be the same as the member \<to\> respectively.  */
+  /***ja ÏÀÍýŪ¤Ê¸å¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£¥á¥ó¥Ð next_from ¤Ï
+      ¥á¥ó¥Ð to ¤ÈƱ¤¸¤Ç¤¢¤ë¤Ï¤º¤Ê¤Î¤ÇÉÔÍפǤ¢¤ë¡£  */
+  int next_to;
+
+  /***en Start position of character ranges corresponding to visually
+      left glyphs. */
+  /***ja É½¼¨¾å¤Îº¸¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤγ«»Ï°ÌÃÖ¡£  */
+  int left_from;
+  /***en End position of character ranges corresponding to visually
+      left glyphs. */
+  /***ja É½¼¨¾å¤Îº¸¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤνªÎ»°ÌÃÖ¡£  */
+  int left_to;
+  /***en Start position of character ranges corresponding to visually
+      right glyphs. */
+  /***ja É½¼¨¾å¤Î±¦¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤγ«»Ï°ÌÃÖ¡£  */
+  int right_from;
+  /***en End position of character ranges corresponding to visually
+      left glyphs. */
+  /***ja É½¼¨¾å¤Î±¦¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈϰϤνªÎ»°ÌÃÖ¡£  */
+  int right_to;
+
+  /***en Logical width of the glyph.  Nominal distance to the next
+      glyph.  */
+  /***ja ¥°¥ê¥Õ¤ÎÏÀÍýŪÉý¡£¼¡¤Î¥°¥ê¥Õ¤È¤Î̾Ìܾå¤Îµ÷Î¥¡£  */
+  int logical_width;
+} MDrawGlyphInfo;
+
+/*=*/
+
+/*** @ingroup m17nDraw */
+/***en
+    @brief Type of information about a glyph metric and font.
+
+    The type #MDrawGlyph is the structure that contains information
+    about a glyph metric and font.  It is used by the function
+    mdraw_glyph_list ().  */
+/***ja
+    @brief ¥°¥ê¥Õ¤ÎÀ£Ë¡¤È¥Õ¥©¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤Î·¿Àë¸À.
+
+    #MDrawGlyph ·¿¤Ï¥°¥ê¥Õ¤ÎÀ£Ë¡¤È¥Õ¥©¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤à¹½Â¤ÂΤǤ¢¤ë¡£
+    mdraw_glyph_list () ¤Ï¤³¤ì¤òÍѤ¤¤ë¡£  */
+
+typedef struct
+{
+  /* @{ */
+  /***en Character range corresponding to the glyph.  */
+  /***ja ¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
+  int from, to;
+  /* @} */
+
+  /***en Font glyph code of the glyph.  */
+  /***ja ¥Õ¥©¥ó¥ÈÆâ¤Î¥°¥ê¥Õ¥³¡¼¥É¡£  */
+  int glyph_code;
+
+  /***en Logical width of the glyph.  Nominal distance to the next
+      glyph.  */
+  /***ja ¥°¥ê¥Õ¤ÎÏÀÍýŪÉý¡£¼¡¤Î¥°¥ê¥Õ¤È¤Î̾Ìܾå¤Îµ÷Î¥¡£  */
+  int x_advance;
+  /***en Logical height of the glyph.  Nominal distance to the next
+      glyph.  */
+  /***ja ¥°¥ê¥Õ¤ÎÏÀÍýŪ¹â¤µ¡£¼¡¤Î¥°¥ê¥Õ¤È¤Î̾Ìܾå¤Îµ÷Î¥¡£  */
+  int y_advance;
+
+  /***en X offset relative to the glyph position.  */
+  /***ja ¥°¥ê¥Õ¤Î°ÌÃÖ¤ËÂФ¹¤ë X ¥ª¥Õ¥»¥Ã¥È.  */
+  int x_off;
+  /***en Y offset relative to the glyph position.  */
+  /***ja ¥°¥ê¥Õ¤Î°ÌÃÖ¤ËÂФ¹¤ë Y ¥ª¥Õ¥»¥Ã¥È.  */
+  int y_off;
+
+  /***en Metric of the glyph (left-bearing).  */
+  /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡ (left-bearing).  */
+  int lbearing;
+  /***en Metric of the glyph (right-bearing).  */
+  /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡ (right-bearing).  */
+  int rbearing;
+  /***en Metric of the glyph (ascent).  */
+  /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡ (ascent).  */
+  int ascent;
+  /***en Metric of the glyph (descent).  */
+  /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡ (descent).  */
+  int descent;
+
+  /***en Font used for the glyph.  Set to NULL if no font is found for
       the glyph.  */
+  /***ja ¥°¥ê¥Õ¤Ë»È¤ï¤ì¤ë¥Õ¥©¥ó¥È¡£¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð NULL¡£  */
   MFont *font;
 
-  /***en Character ranges corresponding to logically previous and next
-      glyphs.  Note that we do not need the members prev_to and
-      next_from because they must be the same as the members from and
-      to respectively.  */
-  /***ja ÏÀÍýŪ¤ÊÁ°¸å¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£¥á¥ó¥Ð prev_to ¤È
-      next_from ¤Ï¡¢¤½¤ì¤¾¤ì¥á¥ó¥Ð from ¤Èto ¤ÈƱ¤¸¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤
-      ¤¿¤áÉÔÍפǤ¢¤ë¤³¤È¤ËÃí°Õ¡£  */
-  int prev_from, next_to;
-
-  /***en Character ranges corresponding to visually left and right
-      glyphs. */
-  /***ja »ë³ÐŪ¤Êº¸±¦¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£  */
-  int left_from, left_to;
-  int right_from, right_to;
+  /***en Type of the font.  One of Mx, Mfreetype, Mxft.  */
+  /***ja ¥Õ¥©¥ó¥È¤Î¥¿¥¤¥×¡£Mx¡¢Mfreetype¡¢Mxft ¤Î¤¤¤º¤ì¤«¡£  */
+  MSymbol font_type;
 
-} MDrawGlyphInfo;
+  /***en Pointer to the font structure.  The actual type is
+      (XFontStruct *) if \<font_type\> member is Mx, FT_Face if
+      \<font_type\> member is Mfreetype, and (XftFont *) if \<font_type\>
+      member is Mxft.  */
+  /***ja ¥Õ¥©¥ó¥È¤Î¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¡£¼ÂºÝ¤Î·¿¤Ï \<font_type\> ¥á¥ó¥Ð¤¬
+      Mx ¤Ê¤é (XFontStruct *)¡¢ Mfreetype ¤Ê¤é FT_Face¡¢Mxft 
+      ¤Ê¤é (XftFont *)¡£ */
+  void *fontp;
+
+} MDrawGlyph;
 
 /*=*/
 
 /***en
-    @brief Type of text items.
+    @brief Type of textitems.
 
     The type #MDrawTextItem is for @e textitem objects.
     Each textitem contains an M-text and some other information to
@@ -754,9 +914,8 @@ typedef struct
 /***ja
     @brief textitem ¤Î·¿Àë¸À.
 
-    #MDrawTextItem ¤Ï @e ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£³Æ
-    ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à¤Ï¡¢1¸Ä¤Î M-text ¤È¡¢¤½¤Îɽ¼¨¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î³Æ¼ï
-    ¾ðÊó¤ò´Þ¤ó¤Ç¤¤¤ë¡£
+    #MDrawTextItem ¤Ï @e ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£
+    ³Æ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à¤Ï¡¢ 1 ¸Ä¤Î M-text ¤È¡¢¤½¤Îɽ¼¨¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î¾ðÊó¤ò´Þ¤ó¤Ç¤¤¤ë¡£
 
     @latexonly \IPAlabel{MTextItem} @endlatexonly  */
 
@@ -773,16 +932,15 @@ typedef struct
 
   /***en Pointer to a face object.  Each property of the face, if not
       Mnil, overrides the same property of face(s) specified as a text
-      property in <mt>.  */
+      property in \<mt\>.  */
   /***ja ¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£¥Õ¥§¡¼¥¹¤Î³Æ¥×¥í¥Ñ¥Æ¥£¤Ï 
-      Mnil ¤Ç¤Ê¤±¤ì¤Ð <mt> ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥§¡¼¥¹¤ÎƱ¤¸¥×¥í¥Ñ¥Æ¥£¤ËÍ¥Àè
-      ¤¹¤ë*/
+      Mnil ¤Ç¤Ê¤±¤ì¤Ð \<mt\> ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥§¡¼¥¹¤ÎƱ¤¸¥×¥í¥Ñ¥Æ¥£¤ËÍ¥À褹¤ë*/
   MFace *face;
 
-  /***en Pointer to a draw control object.  The M-text <mt> is drawn
+  /***en Pointer to a draw control object.  The M-text \<mt\> is drawn
       by mdraw_text_with_control () with this control object.  */
   /***ja É½¼¨À©¸æ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£ mdraw_text_with_control () 
-      ¤Ï¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÍѤ¤¤Æ M-text <mt> ¤òɽ¼¨¤¹¤ë¡£  */
+      ¤Ï¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÍѤ¤¤Æ M-text \<mt\> ¤òɽ¼¨¤¹¤ë¡£  */
   MDrawControl *control;
 
 } MDrawTextItem;
@@ -823,6 +981,10 @@ extern int mdraw_text_per_char_extents (MFrame *frame,
 extern int mdraw_glyph_info (MFrame *frame, MText *mt, int from, int pos,
                             MDrawControl *control, MDrawGlyphInfo *info);
 
+extern int mdraw_glyph_list (MFrame *frame, MText *mt, int from, int to,
+                            MDrawControl *control, MDrawGlyph *glyphs,
+                            int array_size, int *num_glyphs_return);
+
 extern void mdraw_text_items (MFrame *frame, MDrawWindow win, int x, int y,
                              MDrawTextItem *items, int nitems);
 
@@ -857,8 +1019,8 @@ extern MInputDriver minput_gui_driver;
 /***ja
     @brief ´Ø¿ô minput_create_ic () ¤Î°ú¿ô¤Î·¿Àë¸À.
 
-    #MInputGUIArgIC ¤Ï¡¢´Ø¿ô minput_create_ic () ¤¬ÆâÉôÆþÎϥ᥽¥Ã¥É¤Î
-    ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ëºÝ¤Î¡¢°ú¿ô $ARG ÍѤη¿¤Ç¤¢¤ë¡£  */
+    #MInputGUIArgIC ¤Ï¡¢´Ø¿ô minput_create_ic () 
+    ¤¬ÆâÉôÆþÎϥ᥽¥Ã¥É¤ÎÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ëºÝ¤Î¡¢°ú¿ô $ARG ÍѤη¿¤Ç¤¢¤ë¡£  */
 
 typedef struct
 {
@@ -888,9 +1050,7 @@ extern MFace *mdebug_dump_face (MFace *face, int indent);
 extern MFont *mdebug_dump_font (MFont *font);
 extern MFontset *mdebug_dump_fontset (MFontset *fontset, int indent);
 
-#ifdef __cplusplus
-}
-#endif
+M17N_END_HEADER
 
 #endif /* _M17N_GUI_H_ */