if (prev_surrogate)
{
if (c < 0xDC00 || c >= 0xE000)
- return -1;
- prev_surrogate = 0;
+ /* Invalid surrogate */
+ nchars++;
}
else
{
- if (c < 0xD800)
- ;
- else if (c < 0xDC00)
+ if (c >= 0xD800 && c < 0xDC00)
prev_surrogate = 1;
- else if (c < 0xE000)
- return -1;
nchars++;
}
}
if (prev_surrogate)
- return -1;
+ nchars++;
return nchars;
}
\f
/* External API */
-/*** @addtogroup m17nMtext */
-/*** @{ */
-/*=*/
-/***en @name Variables: System's UTF-16 and UTF-32 types */
-/***ja @name ÊÑ¿ô: ¥·¥¹¥Æ¥à¤Î UTF-16 ¤È UTF-32 ¤Î¥¿¥¤¥× */
-/*** @{ */
-/*=*/
-
-/***en
- @brief Variable of value MTEXT_FORMAT_UTF_16LE or MTEXT_FORMAT_UTF_16BE.
-
- The global variable MTEXT_FORMAT_UTF_16 is initialized to
- MTEXT_FORMAT_UTF_16LE on a "Little Endian" system (storing words
- with the least significant byte first), and to
- MTEXT_FORMAT_UTF_16BE depneding on a "Big Endian" system (storing
- words with the most significant byte first). */
-
-/***ja
- @brief Ãͤ¬ MTEXT_FORMAT_UTF_16LE ¤« MTEXT_FORMAT_UTF_16BE ¤Ç¤¢¤ëÊÑ¿ô
-
- Âç°èÊÑ¿ô MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à¡Ê¥ï¡¼
- ¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
- MTEXT_FORMAT_UTF_16LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
- ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
- MTEXT_FORMAT_UTF_16BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
-
-/***
- @seealso mtext_from_data () */
-
#ifdef WORDS_BIGENDIAN
-const enum MTextFormat MTEXT_FORMAT_UTF_16 = MTEXT_FORMAT_UTF_16BE;
+const int MTEXT_FORMAT_UTF_16 = MTEXT_FORMAT_UTF_16BE;
#else
-const enum MTextFormat MTEXT_FORMAT_UTF_16 = MTEXT_FORMAT_UTF_16LE;
+const int MTEXT_FORMAT_UTF_16 = MTEXT_FORMAT_UTF_16LE;
#endif
-/*=*/
-/***en
- @brief Variable of value MTEXT_FORMAT_UTF_32LE or MTEXT_FORMAT_UTF_32BE.
-
- The global variable MTEXT_FORMAT_UTF_32 is initialized to
- MTEXT_FORMAT_UTF_32LE on a "Little Endian" system (storing words
- with the least significant byte first), and to
- MTEXT_FORMAT_UTF_32BE depneding on a "Big Endian" system (storing
- words with the most significant byte first). */
-
-/***ja
- @brief Ãͤ¬ MTEXT_FORMAT_UTF_32LE ¤« MTEXT_FORMAT_UTF_32BE ¤Ç¤¢¤ëÊÑ¿ô
-
- Âç°èÊÑ¿ô MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à¡Ê¥ï¡¼
- ¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
- MTEXT_FORMAT_UTF_32LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
- ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
- MTEXT_FORMAT_UTF_32BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
-
-/***
- @seealso mtext_from_data () */
-
#ifdef WORDS_BIGENDIAN
-const enum MTextFormat MTEXT_FORMAT_UTF_32 = MTEXT_FORMAT_UTF_32BE;
+const int MTEXT_FORMAT_UTF_32 = MTEXT_FORMAT_UTF_32BE;
#else
-const enum MTextFormat MTEXT_FORMAT_UTF_32 = MTEXT_FORMAT_UTF_32LE;
+const int MTEXT_FORMAT_UTF_32 = MTEXT_FORMAT_UTF_32LE;
#endif
-/*** @} */
-
+/*** @addtogroup m17nMtext */
+/*** @{ */
/*=*/
/***en