reseting a converter. */
int (*resetter) (MConverter *converter);
- int (*decoder) (unsigned char *str, int str_bytes, MText *mt,
+ int (*decoder) (const unsigned char *str, int str_bytes, MText *mt,
MConverter *converter);
int (*encoder) (MText *mt, int from, int to,
static int
finish_decoding (MText *mt, MConverter *converter, int nchars,
- unsigned char *source, unsigned char *src_end,
- unsigned char *src,
+ const unsigned char *source, const unsigned char *src_end,
+ const unsigned char *src,
int error)
{
MConverterStatus *internal = (MConverterStatus *) converter->internal_info;
{
unsigned char *dst = mt->data + mt->nbytes;
unsigned char *dst_end = mt->data + mt->allocated;
- unsigned char *src_stop = src_end;
+ const unsigned char *src_stop = src_end;
int c;
int last_nchars = nchars;
}
static int
-decode_coding_charset (unsigned char *source, int src_bytes, MText *mt,
+decode_coding_charset (const unsigned char *source, int src_bytes, MText *mt,
MConverter *converter)
{
MConverterStatus *internal = (MConverterStatus *) converter->internal_info;
MCodingSystem *coding = internal->coding;
- unsigned char *src = internal->carryover;
- unsigned char *src_stop = src + internal->carryover_bytes;
- unsigned char *src_end = source + src_bytes;
- unsigned char *src_base;
+ const unsigned char *src = internal->carryover;
+ const unsigned char *src_stop = src + internal->carryover_bytes;
+ const unsigned char *src_end = source + src_bytes;
+ const unsigned char *src_base;
unsigned char *dst = mt->data + mt->nbytes;
unsigned char *dst_end = mt->data + mt->allocated;
int nchars = 0;
static int
-decode_coding_utf_8 (unsigned char *source, int src_bytes, MText *mt,
+decode_coding_utf_8 (const unsigned char *source, int src_bytes, MText *mt,
MConverter *converter)
{
MConverterStatus *internal = (MConverterStatus *) converter->internal_info;
MCodingSystem *coding = internal->coding;
- unsigned char *src = internal->carryover;
- unsigned char *src_stop = src + internal->carryover_bytes;
- unsigned char *src_end = source + src_bytes;
- unsigned char *src_base;
+ const unsigned char *src = internal->carryover;
+ const unsigned char *src_stop = src + internal->carryover_bytes;
+ const unsigned char *src_end = source + src_bytes;
+ const unsigned char *src_base;
unsigned char *dst = mt->data + mt->nbytes;
unsigned char *dst_end = mt->data + mt->allocated;
int nchars = 0;
}
static int
-decode_coding_utf_16 (unsigned char *source, int src_bytes, MText *mt,
+decode_coding_utf_16 (const unsigned char *source, int src_bytes, MText *mt,
MConverter *converter)
{
MConverterStatus *internal = (MConverterStatus *) converter->internal_info;
- unsigned char *src = internal->carryover;
- unsigned char *src_stop = src + internal->carryover_bytes;
- unsigned char *src_end = source + src_bytes;
- unsigned char *src_base;
+ const unsigned char *src = internal->carryover;
+ const unsigned char *src_stop = src + internal->carryover_bytes;
+ const unsigned char *src_end = source + src_bytes;
+ const unsigned char *src_base;
unsigned char *dst = mt->data + mt->nbytes;
unsigned char *dst_end = mt->data + mt->allocated;
int nchars = 0;
static int
-decode_coding_utf_32 (unsigned char *source, int src_bytes, MText *mt,
+decode_coding_utf_32 (const unsigned char *source, int src_bytes, MText *mt,
MConverter *converter)
{
MConverterStatus *internal = (MConverterStatus *) converter->internal_info;
- unsigned char *src = internal->carryover;
- unsigned char *src_stop = src + internal->carryover_bytes;
- unsigned char *src_end = source + src_bytes;
- unsigned char *src_base;
+ const unsigned char *src = internal->carryover;
+ const unsigned char *src_stop = src + internal->carryover_bytes;
+ const unsigned char *src_end = source + src_bytes;
+ const unsigned char *src_base;
unsigned char *dst = mt->data + mt->nbytes;
unsigned char *dst_end = mt->data + mt->allocated;
int nchars = 0;
}
static int
-decode_coding_iso_2022 (unsigned char *source, int src_bytes, MText *mt,
+decode_coding_iso_2022 (const unsigned char *source, int src_bytes, MText *mt,
MConverter *converter)
{
MConverterStatus *internal = (MConverterStatus *) converter->internal_info;
MCodingSystem *coding = internal->coding;
- unsigned char *src = internal->carryover;
- unsigned char *src_stop = src + internal->carryover_bytes;
- unsigned char *src_end = source + src_bytes;
- unsigned char *src_base;
+ const unsigned char *src = internal->carryover;
+ const unsigned char *src_stop = src + internal->carryover_bytes;
+ const unsigned char *src_end = source + src_bytes;
+ const unsigned char *src_base;
unsigned char *dst = mt->data + mt->nbytes;
unsigned char *dst_end = mt->data + mt->allocated;
int nchars = 0;
}
static int
-decode_coding_sjis (unsigned char *source, int src_bytes, MText *mt,
+decode_coding_sjis (const unsigned char *source, int src_bytes, MText *mt,
MConverter *converter)
{
MConverterStatus *internal = (MConverterStatus *) converter->internal_info;
MCodingSystem *coding = internal->coding;
- unsigned char *src = internal->carryover;
- unsigned char *src_stop = src + internal->carryover_bytes;
- unsigned char *src_end = source + src_bytes;
- unsigned char *src_base;
+ const unsigned char *src = internal->carryover;
+ const unsigned char *src_stop = src + internal->carryover_bytes;
+ const unsigned char *src_end = source + src_bytes;
+ const unsigned char *src_base;
unsigned char *dst = mt->data + mt->nbytes;
unsigned char *dst_end = mt->data + mt->allocated - MAX_UTF8_CHAR_BYTES;
int nchars = 0;
if (! coding)
{
- MPlist *plist;
+ MPlist *plist, *pl;
MSymbol sym = msymbol__canonicalize (name);
plist = mplist_find_by_key (coding_definition_list, sym);
-
if (! plist)
return NULL;
- mconv_define_coding (MSYMBOL_NAME (name), MPLIST_VAL (plist),
+ pl = MPLIST_PLIST (plist);
+ name = MPLIST_VAL (pl);
+ mconv_define_coding (MSYMBOL_NAME (name), MPLIST_NEXT (pl),
NULL, NULL, NULL, NULL);
coding = (MCodingSystem *) msymbol_get (name, Mcoding);
plist = mplist_pop (plist);
void
mconv__register_charset_coding (MSymbol sym)
{
- if (! mplist_find_by_key (coding_definition_list, sym))
+ MSymbol name = msymbol__canonicalize (sym);
+
+ if (! mplist_find_by_key (coding_definition_list, name))
{
MPlist *param = mplist (), *charsets = mplist ();
mplist_set (charsets, Msymbol, sym);
- mplist_add (param, Msymbol, Mtype);
- mplist_add (param, Msymbol, Mcharset);
- mplist_add (param, Msymbol, Mcharsets);
- mplist_add (param, Mplist, charsets);
- sym = msymbol__canonicalize (sym);
- mplist_put (coding_definition_list, sym, param);
+ mplist_add (param, Msymbol, sym);
+ mplist_add (param, Mtype, Mcharset);
+ mplist_add (param, Mcharsets, charsets);
+ mplist_put (coding_definition_list, name, param);
M17N_OBJECT_UNREF (charsets);
}
}
MPLIST_DO (plist, def_list)
{
MPlist *pl;
- MSymbol name;
+ MSymbol name, canonicalized;
if (! MPLIST_PLIST_P (plist))
MERROR (MERROR_CHARSET, -1);
pl = MPLIST_PLIST (plist);
if (! MPLIST_SYMBOL_P (pl))
MERROR (MERROR_CHARSET, -1);
- name = msymbol__canonicalize (MPLIST_SYMBOL (pl));
+ name = MPLIST_SYMBOL (pl);
+ canonicalized = msymbol__canonicalize (name);
pl = mplist__from_plist (MPLIST_NEXT (pl));
- definitions = mplist_add (definitions, name, pl);
+ mplist_push (pl, Msymbol, name);
+ definitions = mplist_add (definitions, canonicalized, pl);
}
M17N_OBJECT_UNREF (def_list);
@c MERROR_CODING */
MSymbol
-mconv_define_coding (char *name, MPlist *plist,
+mconv_define_coding (const char *name, MPlist *plist,
int (*resetter) (MConverter *),
- int (*decoder) (unsigned char *, int, MText *,
+ int (*decoder) (const unsigned char *, int, MText *,
MConverter *),
int (*encoder) (MText *, int, int,
unsigned char *, int,
MTABLE_MALLOC ((*symbols), i, MERROR_CODING);
i = 0;
MPLIST_DO (plist, coding_definition_list)
- (*symbols)[i++] = MPLIST_KEY (plist);
+ {
+ MPlist *pl = MPLIST_VAL (plist);
+ (*symbols)[i++] = MPLIST_SYMBOL (pl);
+ }
for (j = 0; j < coding_list.used; j++)
if (! mplist_find_by_key (coding_definition_list,
coding_list.codings[j]->name))
@brief Create a code converter bound to a buffer.
The mconv_buffer_converter () function creates a pointer to a code
- converter for coding system $CODING. The code converter is bound
+ converter for coding system $NAME. The code converter is bound
to buffer area of $N bytes pointed to by $BUF. Subsequent
decodings and encodings are done to/from this buffer area.
- $CODING can be #Mnil. In this case, a coding system associated
+ $NAME can be #Mnil. In this case, a coding system associated
with the current locale (LC_CTYPE) is used.
@return
/***ja
@brief ¥Ð¥Ã¥Õ¥¡¤Ë·ë¤ÓÉÕ¤±¤é¤ì¤¿¥³¡¼¥É¥³¥ó¥Ð¡¼¥¿¤òºî¤ë.
- ´Ø¿ô mconv_buffer_converter () ¤Ï¡¢¥³¡¼¥É·Ï $CODING ÍѤΥ³¡¼¥É¥³¥ó
+ ´Ø¿ô mconv_buffer_converter () ¤Ï¡¢¥³¡¼¥É·Ï $NAME ÍѤΥ³¡¼¥É¥³¥ó
¥Ð¡¼¥¿¤òºî¤ë¡£¤³¤Î¥³¡¼¥É¥³¥ó¥Ð¡¼¥¿¤Ï¡¢$BUF ¤Ç¼¨¤µ¤ì¤ëÂ礤µ $N ¥Ð
¥¤¥È¤Î¥Ð¥Ã¥Õ¥¡Îΰè¤Ë·ë¤ÓÉÕ¤±¤é¤ì¤ë¡£¤³¤ì°Ê¹ß¤Î¥Ç¥³¡¼¥É¤ª¤è¤Ó
¥¨¥ó¥³¡¼¥É¤Ï¡¢¤³¤Î¥Ð¥Ã¥Õ¥¡Îΰè¤ËÂФ·¤Æ¹Ô¤Ê¤ï¤ì¤ë¡£
- $CODING ¤Ï #Mnil ¤Ç¤¢¤Ã¤Æ¤â¤è¤¤¡£¤³¤Î¾ì¹ç¤Ï¸½ºß¤Î¥í¥±¡¼¥ë
+ $NAME ¤Ï #Mnil ¤Ç¤¢¤Ã¤Æ¤â¤è¤¤¡£¤³¤Î¾ì¹ç¤Ï¸½ºß¤Î¥í¥±¡¼¥ë
(LC_CTYPE) ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥³¡¼¥É·Ï¤¬»È¤ï¤ì¤ë¡£
@return
/***en
@brief Create a code converter bound to a stream.
- The mconv_stream_converter () function create a pointer to a code
- converter for coding system $CODING. The code converter is bound
+ The mconv_stream_converter () function creates a pointer to a code
+ converter for coding system $NAME. The code converter is bound
to stream $FP. Subsequent decodings and encodings are done
to/from this stream.
- $CODING can be #Mnil. In this case, a coding system associated
+ $NAME can be #Mnil. In this case, a coding system associated
with the current locale (LC_CTYPE) is used.
@return If the operation was successful, mconv_stream_converter ()
/***ja
@brief ¥¹¥È¥ê¡¼¥à¤Ë·ë¤ÓÉÕ¤±¤é¤ì¤¿¥³¡¼¥É¥³¥ó¥Ð¡¼¥¿¤òºî¤ë.
- ´Ø¿ô mconv_stream_converter () ¤Ï¡¢¥³¡¼¥É·Ï $CODING ÍѤΥ³¡¼¥É¥³¥ó
+ ´Ø¿ô mconv_stream_converter () ¤Ï¡¢¥³¡¼¥É·Ï $NAME ÍѤΥ³¡¼¥É¥³¥ó
¥Ð¡¼¥¿¤òºî¤ë¡£¤³¤Î¥³¡¼¥É¥³¥ó¥Ð¡¼¥¿¤Ï¡¢¥¹¥È¥ê¡¼¥à $FP ¤Ë·ë¤ÓÉÕ¤±¤é
¤ì¤ë¡£¤³¤ì°Ê¹ß¤Î¥Ç¥³¡¼¥É¤ª¤è¤Ó¥¨¥ó¥³¡¼¥É¤Ï¡¢¤³¤Î¥¹¥È¥ê¡¼¥à¤ËÂФ·¤Æ
¹Ô¤Ê¤ï¤ì¤ë¡£
- $CODING ¤Ï #Mnil ¤Ç¤¢¤Ã¤Æ¤â¤è¤¤¡£¤³¤Î¾ì¹ç¤Ï¸½ºß¤Î¥í¥±¡¼¥ë
+ $NAME ¤Ï #Mnil ¤Ç¤¢¤Ã¤Æ¤â¤è¤¤¡£¤³¤Î¾ì¹ç¤Ï¸½ºß¤Î¥í¥±¡¼¥ë
(LC_CTYPE) ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥³¡¼¥É·Ï¤¬»È¤ï¤ì¤ë¡£
@return
The mconv_decode () function decodes a byte sequence and appends
the result at the end of M-text $MT. The source byte sequence is
- taken from currently bound the buffer area or the stream.
+ taken from either the buffer area or the stream that is currently
+ bound to $CONVERTER.
@return
If the operation was successful, mconv_decode () returns updated
@brief ¥Ð¥¤¥ÈÎó¤ò M-text ¤Ë¥Ç¥³¡¼¥É¤¹¤ë.
´Ø¿ô mconv_decode () ¤Ï¡¢¥Ð¥¤¥ÈÎó¤ò¥Ç¥³¡¼¥É¤·¤Æ¤½¤Î·ë²Ì¤ò M-text
- $MT ¤ÎËöÈø¤ËÄɲ乤롣¥Ç¥³¡¼¥É¸µ¤Î¥Ð¥¤¥ÈÎó¤Ï¡¢¸½ºß·ë¤ÓÉÕ¤±¤é¤ì¤Æ¤¤¤ë
- ¥Ð¥Ã¥Õ¥¡Îΰ褢¤ë¤¤¤Ï¥¹¥È¥ê¡¼¥à¤«¤é¼è¤é¤ì¤ë¡£
+ $MT ¤ÎËöÈø¤ËÄɲ乤롣¥Ç¥³¡¼¥É¸µ¤Î¥Ð¥¤¥ÈÎó¤Ï¡¢$CONVERTER ¤Ë¸½ºß·ë
+ ¤ÓÉÕ¤±¤é¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡Îΰ褢¤ë¤¤¤Ï¥¹¥È¥ê¡¼¥à¤«¤é¼è¤é¤ì¤ë¡£
@return
¤â¤·½èÍý¤¬À®¸ù¤¹¤ì¤Ð¡¢mconv_decode () ¤Ï¹¹¿·¤µ¤ì¤¿ $MT ¤òÊÖ¤¹¡£¤½
M_CHECK_READONLY (mt, NULL);
+ if (mt->format != MTEXT_FORMAT_UTF_8)
+ mtext__adjust_format (mt, MTEXT_FORMAT_UTF_8);
+
if (! mt->data)
mtext__enlarge (mt, MAX_UTF8_CHAR_BYTES);
/***en
@brief Decode a buffer area based on a coding system.
- The mconv_decode_buffer () function decodes $N bytes of buffer
+ The mconv_decode_buffer () function decodes $N bytes of the buffer
area pointed to by $BUF based on the coding system $NAME. A
temporary code converter for decoding is automatically created
and freed.
error code to the external variable #merror_code. */
/***ja
- @brief M-text ¤Î°ìÉô¤ò¤ò¥Ð¥¤¥ÈÎó¤Ë¥¨¥ó¥³¡¼¥É¤¹¤ë.
+ @brief M-text ¤Î°ìÉô¤ò¥Ð¥¤¥ÈÎó¤Ë¥¨¥ó¥³¡¼¥É¤¹¤ë.
´Ø¿ô mconv_encode_range () ¤Ï¡¢M-text $MT ¤Î $FROM ¡Ê´Þ¤à¡Ë¤«¤é
$TO ¡Ê´Þ¤Þ¤Ê¤¤¡Ë¤Þ¤Ç¤ÎÈϰϤΥƥ¥¹¥È¤ò¥¨¥ó¥³¡¼¥É¤·¤Æ¡¢¥³¡¼¥É¥³¥ó¥Ð¡¼
an error code to the external variable #merror_code. */
/***ja
- @brief ¥³¡¼¥É¥³¥ó¥Ð¡¼¥¿¤ò·Ðͳ¤Ç1ʸ»ú½ñ¤¯.
+ @brief ¥³¡¼¥É¥³¥ó¥Ð¡¼¥¿¤ò·Ðͳ¤·¤Æ1ʸ»ú½ñ¤¯.
´Ø¿ô mconv_putc () ¤Ï¡¢¥³¡¼¥É¥³¥ó¥Ð¡¼¥¿ $CONVERTER ¤Ë¸½ºß·ë¤ÓÉÕ¤±
¤é¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡Îΰ褢¤ë¤¤¤Ï¥¹¥È¥ê¡¼¥à¤Ëʸ»ú $C ¤ò½ñ¤½Ð¤¹¡£Ê¸»ú
int c;
M_CHECK_READONLY (mt, NULL);
+ if (mt->format != MTEXT_FORMAT_UTF_8)
+ mtext__adjust_format (mt, MTEXT_FORMAT_UTF_8);
+
while (1)
{
c = mconv_getc (converter);