X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fmtext.c;h=8efe58ec9d120a1d395ea16052b8dd4a22bc7c61;hb=38a8279d68792a0ac90b2e81dc7a0795b414ae36;hp=63403392b48df64a37caaf88b417160a4e514d93;hpb=4f7402db01d37e4f7e46c85e1fb8130ece88697c;p=m17n%2Fm17n-lib.git diff --git a/src/mtext.c b/src/mtext.c index 6340339..8efe58e 100644 --- a/src/mtext.c +++ b/src/mtext.c @@ -1,5 +1,5 @@ /* mtext.c -- M-text module. - Copyright (C) 2003, 2004, 2005 + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H15PRO112 @@ -17,7 +17,7 @@ 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. */ /***en @@ -971,6 +971,7 @@ mtext__init () M17N_OBJECT_ADD_ARRAY (mtext_table, "M-text"); M_charbag = msymbol_as_managing_key (" charbag"); mtext_table.count = 0; + Mlanguage = msymbol ("language"); return 0; } @@ -1585,6 +1586,12 @@ const int MTEXT_FORMAT_UTF_32 = MTEXT_FORMAT_UTF_32LE; /*** @{ */ /*=*/ +/***en The symbol whose name is "language". */ +/***ja "language" ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Ä¥·¥ó¥Ü¥ë. */ +MSymbol Mlanguage; + +/*=*/ + /***en @brief Allocate a new M-text. @@ -1664,7 +1671,7 @@ mtext () short ñ°Ì¤Ç¤¢¤ë¡£ $FORMAT ¤¬ #MTEXT_FORMAT_UTF_32LE ¤« #MTEXT_FORMAT_UTF_32BE ¤Ê¤é¤Ð¡¢ - $DATA ¤ÎÆâÍƤÏ@c unsigned ·¿¤Ç¤¢¤ê¡¢$NITEMS ¤Ï unsigned ñ°Ì¤Ç¤¢¤ë¡£ + $DATA ¤ÎÆâÍÆ¤Ï @c unsigned ·¿¤Ç¤¢¤ê¡¢$NITEMS ¤Ï unsigned ñ°Ì¤Ç¤¢¤ë¡£ ³ä¤êÅö¤Æ¤é¤ì¤¿ M-text ¤Îʸ»úÎó¤ÏÊѹ¹¤Ç¤­¤Ê¤¤¡£$DATA ¤ÎÆâÍÆ¤Ï M-text ¤¬Í­¸ú¤Ê´Ö¤ÏÊѹ¹¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ @@ -2016,7 +2023,7 @@ mtext_cat_char (MText *mt, int c) nunits = CHAR_UNITS (c, mt->format); if ((mt->nbytes + nunits + 1) * unit_bytes > mt->allocated) { - mt->allocated = (mt->nbytes + nunits + 1) * unit_bytes; + mt->allocated = (mt->nbytes + nunits * 16 + 1) * unit_bytes; MTABLE_REALLOC (mt->data, mt->allocated, MERROR_MTEXT); } @@ -2263,7 +2270,8 @@ mtext_ncpy (MText *mt1, MText *mt2, int n) (exclusive) while inheriting all the text properties of $MT. $MT itself is not modified. - @return If the operation was successful, mtext_duplicate () + @return + If the operation was successful, mtext_duplicate () returns a pointer to the created M-text. If an error is detected, it returns NULL and assigns an error code to the external variable #merror_code. */ @@ -2368,9 +2376,9 @@ mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to) /***ja @brief »ØÄêÈϰϤÎʸ»ú¤òÇ˲õŪ¤Ë¼è¤ê½ü¤¯. - ´Ø¿ô mtext_del () ¤Ï¡¢M-text $MT ¤Î $FROM ¡Ê$FROM ¼«ÂΤâ´Þ¤à¡Ë¤«¤é $TO - ¡Ê$TO ¼«ÂΤϴޤޤʤ¤¡Ë¤Þ¤Ç¤Îʸ»ú¤òÇ˲õŪ¤Ë¼è¤ê½ü¤¯¡£·ë²ÌŪ¤Ë $MT ¤ÏŤµ¤¬ ($TO @c - - $FROM) ¤À¤±½Ì¤à¤³¤È¤Ë¤Ê¤ë¡£ + ´Ø¿ô mtext_del () ¤Ï¡¢M-text $MT ¤Î $FROM ¡Ê$FROM ¼«ÂΤâ´Þ¤à¡Ë¤«¤é + $TO ¡Ê$TO ¼«ÂΤϴޤޤʤ¤¡Ë¤Þ¤Ç¤Îʸ»ú¤òÇ˲õŪ¤Ë¼è¤ê½ü¤¯¡£·ë²ÌŪ¤Ë + $MT ¤ÏŤµ¤¬ ($TO @c - $FROM) ¤À¤±½Ì¤à¤³¤È¤Ë¤Ê¤ë¡£ @return ½èÍý¤¬À®¸ù¤¹¤ì¤Ð mtext_del () ¤Ï 0 ¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1 @@ -2474,7 +2482,8 @@ mtext_ins (MText *mt1, int pos, MText *mt2) On insertion, all the text properties of the sub-text of $MT2 are inherited. - @return If the operation was successful, mtext_insert () returns + @return + If the operation was successful, mtext_insert () returns 0. Otherwise, it returns -1 and assigns an error code to the external variable #merror_code. */ @@ -2622,11 +2631,12 @@ mtext_ins_char (MText *mt, int pos, int c, int n) @brief Replace sub-text of M-text with another. The mtext_replace () function replaces sub-text of M-text $MT1 - between $FROM1 (inclusive) and $TO1 (exclusinve) with the sub-text - of M-text $MT2 between $FROM2 (inclusive) and $TO2 (exclusinve). + between $FROM1 (inclusive) and $TO1 (exclusive) with the sub-text + of M-text $MT2 between $FROM2 (inclusive) and $TO2 (exclusive). The new sub-text inherits text properties of the old sub-text. - @return If the operation was successful, mtext_replace () returns + @return + If the operation was successful, mtext_replace () returns 0. Otherwise, it returns -1 and assigns an error code to the external variable #merror_code. */ @@ -2639,7 +2649,8 @@ mtext_ins_char (MText *mt, int pos, int c, int n) ¤­´¹¤¨¤ë¡£¿·¤·¤¯ÁÞÆþ¤µ¤ì¤¿Éôʬ¤Ï¡¢ÃÖ¤­´¹¤¨¤ëÁ°¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£ ¤¹¤Ù¤Æ¤ò·Ñ¾µ¤¹¤ë¡£ - @return ½èÍý¤¬À®¸ù¤¹¤ì¤Ð¡¢ mtext_replace () ¤Ï 0 ¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê + @return + ½èÍý¤¬À®¸ù¤¹¤ì¤Ð¡¢ mtext_replace () ¤Ï 0 ¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê ¤±¤ì¤Ð -1 ¤òÊÖ¤·¡¢³°ÉôÊÑ¿ô #merror_code ¤Ë¥¨¥é¡¼¥³¡¼¥É¤òÀßÄꤹ¤ë¡£ */ /*** @@ -3434,7 +3445,8 @@ mtext_case_compare (MText *mt1, int from1, int to1, */ /*** - @seealso mtext_titlecase (), mtext_uppercase () + @seealso + mtext_titlecase (), mtext_uppercase () */ int @@ -3454,7 +3466,7 @@ mtext_lowercase (MText *mt) The mtext_titlecase () function destructively converts the first character with the cased property in M-text $MT to titlecase and the others to lowercase. The length of $MT may change. If the - character cannot be converted to titlercase, it is left unchanged. + character cannot be converted to titlecase, it is left unchanged. All the text properties are inherited. @return @@ -3475,7 +3487,8 @@ mtext_lowercase (MText *mt) */ /*** - @seealso mtext_lowercase (), mtext_uppercase () + @seealso + mtext_lowercase (), mtext_uppercase () */ int @@ -3545,7 +3558,8 @@ mtext_titlecase (MText *mt) */ /*** - @seealso mtext_lowercase (), mtext_titlecase () + @seealso + mtext_lowercase (), mtext_titlecase () */ int @@ -3568,8 +3582,9 @@ mtext_uppercase (MText *mt) @brief Dump an M-text. The mdebug_dump_mtext () function prints the M-text $MT in a human - readable way to the stderr. $INDENT specifies how many columns to - indent the lines but the first one. If $FULLP is zero, this + readable way to the stderr or to what specified by the environment + variable MDEBUG_OUTPUT_FILE. $INDENT specifies how many columns + to indent the lines but the first one. If $FULLP is zero, this function prints only a character code sequence. Otherwise, it prints the internal byte sequence and text properties as well. @@ -3578,10 +3593,11 @@ mtext_uppercase (MText *mt) /***ja @brief M-text ¤ò¥À¥ó¥×¤¹¤ë. - ´Ø¿ô mdebug_dump_mtext () ¤Ï M-text $MT ¤ò stderr - ¤Ë¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç°õºþ¤¹¤ë¡£ $INDENT ¤Ï£²¹ÔÌܰʹߤΥ¤¥ó¥Ç¥ó¥È¤ò»ØÄꤹ¤ë¡£ - $FULLP ¤¬ 0 ¤Ê¤é¤Ð¡¢Ê¸»ú¥³¡¼¥ÉÎó¤À¤±¤ò°õºþ¤¹¤ë¡£ - ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢ÆâÉô¥Ð¥¤¥ÈÎó¤È¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤â°õºþ¤¹¤ë¡£ + ´Ø¿ô mdebug_dump_mtext () ¤Ï M-text $MT ¤òɸ½à¥¨¥é¡¼½ÐÎϤ⤷¤¯¤Ï´Ä + ¶­ÊÑ¿ô MDEBUG_DUMP_FONT ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç°õºþ + ¤¹¤ë¡£ $INDENT ¤Ï£²¹ÔÌܰʹߤΥ¤¥ó¥Ç¥ó¥È¤ò»ØÄꤹ¤ë¡£$FULLP ¤¬ 0 ¤Ê¤é + ¤Ð¡¢Ê¸»ú¥³¡¼¥ÉÎó¤À¤±¤ò°õºþ¤¹¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢ÆâÉô¥Ð¥¤¥ÈÎó¤È¥Æ¥­ + ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤â°õºþ¤¹¤ë¡£ @return ¤³¤Î´Ø¿ô¤Ï $MT ¤òÊÖ¤¹¡£ */ @@ -3589,57 +3605,66 @@ mtext_uppercase (MText *mt) MText * mdebug_dump_mtext (MText *mt, int indent, int fullp) { - char *prefix = (char *) alloca (indent + 1); int i; - unsigned char *p; - - memset (prefix, 32, indent); - prefix[indent] = 0; - fprintf (stderr, - "(mtext (size %d %d %d) (cache %d %d)", - mt->nchars, mt->nbytes, mt->allocated, - mt->cache_char_pos, mt->cache_byte_pos); if (! fullp) { - fprintf (stderr, " \""); + fprintf (mdebug__output, "\""); for (i = 0; i < mt->nchars; i++) { int c = mtext_ref_char (mt, i); - if (c >= ' ' && c < 127) - fprintf (stderr, "%c", c); + + if (c == '"' || c == '\\') + fprintf (mdebug__output, "\\%c", c); + else if ((c >= ' ' && c < 127) || c == '\n') + fprintf (mdebug__output, "%c", c); else - fprintf (stderr, "\\x%02X", c); + fprintf (mdebug__output, "\\x%02X", c); } - fprintf (stderr, "\""); + fprintf (mdebug__output, "\""); + return mt; } - else if (mt->nchars > 0) + + fprintf (mdebug__output, + "(mtext (size %d %d %d) (cache %d %d)", + mt->nchars, mt->nbytes, mt->allocated, + mt->cache_char_pos, mt->cache_byte_pos); + + if (mt->nchars > 0) { - fprintf (stderr, "\n%s (bytes \"", prefix); + char *prefix = (char *) alloca (indent + 1); + unsigned char *p; + + memset (prefix, 32, indent); + prefix[indent] = 0; + + fprintf (mdebug__output, "\n%s (bytes \"", prefix); for (i = 0; i < mt->nbytes; i++) - fprintf (stderr, "\\x%02x", mt->data[i]); - fprintf (stderr, "\")\n"); - fprintf (stderr, "%s (chars \"", prefix); + fprintf (mdebug__output, "\\x%02x", mt->data[i]); + fprintf (mdebug__output, "\")\n"); + fprintf (mdebug__output, "%s (chars \"", prefix); p = mt->data; for (i = 0; i < mt->nchars; i++) { int len; int c = STRING_CHAR_AND_BYTES (p, len); - if (c >= ' ' && c < 127 && c != '\\' && c != '\"') - fputc (c, stderr); + if (c == '"' || c == '\\') + fprintf (mdebug__output, "\\%c", c); + else if (c >= ' ' && c < 127) + fputc (c, mdebug__output); else - fprintf (stderr, "\\x%X", c); + fprintf (mdebug__output, "\\x%X", c); p += len; } - fprintf (stderr, "\")"); + fprintf (mdebug__output, "\")"); if (mt->plist) { - fprintf (stderr, "\n%s ", prefix); + fprintf (mdebug__output, "\n%s ", prefix); dump_textplist (mt->plist, indent + 1); } } - fprintf (stderr, ")"); + fprintf (mdebug__output, ")"); return mt; }