]> granicus.if.org Git - php/commitdiff
Store input and output filters in mbfl encodings
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 4 Aug 2017 16:38:36 +0000 (18:38 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 4 Aug 2017 20:22:58 +0000 (22:22 +0200)
For functions like mb_chr() and mb_ord() just looking up the
input/output filter for the encoding dominates the runtime. This
commit stores the input/output filter for an encoding in the
mbfl encoding structure, so it can be looked up directly, rather
than scanning through filter function lists.

68 files changed:
ext/mbstring/libmbfl/filters/mbfilter_7bit.c
ext/mbstring/libmbfl/filters/mbfilter_armscii8.c
ext/mbstring/libmbfl/filters/mbfilter_ascii.c
ext/mbstring/libmbfl/filters/mbfilter_base64.c
ext/mbstring/libmbfl/filters/mbfilter_big5.c
ext/mbstring/libmbfl/filters/mbfilter_byte2.c
ext/mbstring/libmbfl/filters/mbfilter_byte4.c
ext/mbstring/libmbfl/filters/mbfilter_cp1251.c
ext/mbstring/libmbfl/filters/mbfilter_cp1252.c
ext/mbstring/libmbfl/filters/mbfilter_cp1254.c
ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c
ext/mbstring/libmbfl/filters/mbfilter_cp51932.c
ext/mbstring/libmbfl/filters/mbfilter_cp850.c
ext/mbstring/libmbfl/filters/mbfilter_cp866.c
ext/mbstring/libmbfl/filters/mbfilter_cp932.c
ext/mbstring/libmbfl/filters/mbfilter_cp936.c
ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c
ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c
ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c
ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c
ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c
ext/mbstring/libmbfl/filters/mbfilter_gb18030.c
ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
ext/mbstring/libmbfl/filters/mbfilter_hz.c
ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c
ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c
ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c
ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c
ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c
ext/mbstring/libmbfl/filters/mbfilter_jis.c
ext/mbstring/libmbfl/filters/mbfilter_koi8r.c
ext/mbstring/libmbfl/filters/mbfilter_koi8u.c
ext/mbstring/libmbfl/filters/mbfilter_qprint.c
ext/mbstring/libmbfl/filters/mbfilter_sjis.c
ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c
ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c
ext/mbstring/libmbfl/filters/mbfilter_ucs2.c
ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
ext/mbstring/libmbfl/filters/mbfilter_uhc.c
ext/mbstring/libmbfl/filters/mbfilter_utf16.c
ext/mbstring/libmbfl/filters/mbfilter_utf32.c
ext/mbstring/libmbfl/filters/mbfilter_utf7.c
ext/mbstring/libmbfl/filters/mbfilter_utf8.c
ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c
ext/mbstring/libmbfl/filters/mbfilter_uuencode.c
ext/mbstring/libmbfl/mbfl/mbfilter.c
ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c
ext/mbstring/libmbfl/mbfl/mbfilter_pass.c
ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c
ext/mbstring/libmbfl/mbfl/mbfl_convert.c
ext/mbstring/libmbfl/mbfl/mbfl_convert.h
ext/mbstring/libmbfl/mbfl/mbfl_encoding.c
ext/mbstring/libmbfl/mbfl/mbfl_encoding.h

index ab1727146a89364f01122e80d89af4356ca2ab48..382c87437cb5af77839e1892d0d35b681f7119a2 100644 (file)
@@ -41,7 +41,9 @@ const mbfl_encoding mbfl_encoding_7bit = {
        "7bit",
        NULL,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       NULL,
+       NULL
 };
 
 const struct mbfl_convert_vtbl vtbl_8bit_7bit = {
index ad2cf0c7f0bb2bbf40c020a3630abb28b25469fd..bfe3763f18042c22154eef32f059820519829d12 100644 (file)
@@ -44,7 +44,9 @@ const mbfl_encoding mbfl_encoding_armscii8 = {
        "ArmSCII-8",
        (const char *(*)[])&mbfl_encoding_armscii8_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_armscii8_wchar,
+       &vtbl_wchar_armscii8
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_armscii8 = {
index e9eb496771510d8adbebb6ce28392e53f8988c13..b3c1161d32c11648fb51cadea80428d1b6f89f28 100644 (file)
@@ -45,7 +45,9 @@ const mbfl_encoding mbfl_encoding_ascii = {
        "US-ASCII", /* preferred MIME name */
        (const char *(*)[])&mbfl_encoding_ascii_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_ascii_wchar,
+       &vtbl_wchar_ascii
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_ascii = {
index adecdee888c28eba28f6db10b85a348795de6eb9..661e1a4a5bcccf38a431a51f2c110c355bfe214f 100644 (file)
@@ -41,7 +41,9 @@ const mbfl_encoding mbfl_encoding_base64 = {
        "BASE64",
        NULL,
        NULL,
-       MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE,
+       NULL,
+       NULL
 };
 
 const struct mbfl_convert_vtbl vtbl_8bit_b64 = {
index 122ff4c7780effd3fbb3fad062f5661568bf0aa5..21aac8ea7bc0b3ba08b001cb44656b288ffa213f 100644 (file)
@@ -65,7 +65,9 @@ const mbfl_encoding mbfl_encoding_big5 = {
        "BIG5",
        (const char *(*)[])&mbfl_encoding_big5_aliases,
        mblen_table_big5,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_big5_wchar,
+       &vtbl_wchar_big5
 };
 
 const mbfl_encoding mbfl_encoding_cp950 = {
@@ -74,7 +76,9 @@ const mbfl_encoding mbfl_encoding_cp950 = {
        "BIG5",
        NULL,
        mblen_table_big5,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_cp950_wchar,
+       &vtbl_wchar_cp950
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_big5 = {
index 7452c127fca1846a7638b0daa32508d12438f239..9be0fb9ae86d0f9b5137e793e9aa4b5a66678ae2 100644 (file)
@@ -41,7 +41,9 @@ const mbfl_encoding mbfl_encoding_byte2be = {
        NULL,
        NULL,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_byte2be_wchar,
+       &vtbl_wchar_byte2be
 };
 
 const mbfl_encoding mbfl_encoding_byte2le = {
@@ -50,7 +52,9 @@ const mbfl_encoding mbfl_encoding_byte2le = {
        NULL,
        NULL,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_byte2le_wchar,
+       &vtbl_wchar_byte2le
 };
 
 const struct mbfl_convert_vtbl vtbl_byte2be_wchar = {
index 7475e5424c8c2294e28b42fc3ba51e129b665dcf..46ca04bb71dd8be547eee7a86b0ff4f2061f4dab 100644 (file)
@@ -41,7 +41,9 @@ const mbfl_encoding mbfl_encoding_byte4be = {
        NULL,
        NULL,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_byte4be_wchar,
+       &vtbl_wchar_byte4be
 };
 
 const mbfl_encoding mbfl_encoding_byte4le = {
@@ -50,7 +52,9 @@ const mbfl_encoding mbfl_encoding_byte4le = {
        NULL,
        NULL,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_byte4le_wchar,
+       &vtbl_wchar_byte4le
 };
 
 const struct mbfl_convert_vtbl vtbl_byte4be_wchar = {
index a26ce19492d5226d36cea3a43ad221e64fa8a1ba..532806fafca62449fe1a8cc208a406da31181f03 100644 (file)
@@ -45,7 +45,9 @@ const mbfl_encoding mbfl_encoding_cp1251 = {
        "Windows-1251",
        (const char *(*)[])&mbfl_encoding_cp1251_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_cp1251_wchar,
+       &vtbl_wchar_cp1251
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_cp1251 = {
index 0c5eba3dd51733aa554a011ce0f2ac82a6403734..6479023428ff8ea69bbd56e69f1203db793ca99e 100644 (file)
@@ -45,7 +45,9 @@ const mbfl_encoding mbfl_encoding_cp1252 = {
        "Windows-1252",
        (const char *(*)[])&mbfl_encoding_cp1252_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_cp1252_wchar,
+       &vtbl_wchar_cp1252
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_cp1252 = {
index 78e79335e4456401d40734a3e535fb7550911af8..b01b19fb061ffc3672caaeb2d8802b79f0d2497f 100644 (file)
@@ -45,7 +45,9 @@ const mbfl_encoding mbfl_encoding_cp1254 = {
        "Windows-1254",
        (const char *(*)[])&mbfl_encoding_cp1254_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_cp1254_wchar,
+       &vtbl_wchar_cp1254
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_cp1254 = {
index 75d249fbe8bac3087e957a7460992adf7a90419b..81b655d55f85671a7999488922389e93cc486150 100644 (file)
@@ -54,7 +54,9 @@ const mbfl_encoding mbfl_encoding_jis_ms = {
        "ISO-2022-JP",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_jis_ms_wchar,
+       &vtbl_wchar_jis_ms
 };
 
 const mbfl_encoding mbfl_encoding_cp50220 = {
@@ -63,7 +65,9 @@ const mbfl_encoding mbfl_encoding_cp50220 = {
        "ISO-2022-JP",
        (const char *(*)[])NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_cp50220_wchar,
+       &vtbl_wchar_cp50220
 };
 
 const mbfl_encoding mbfl_encoding_cp50220raw = {
@@ -72,7 +76,9 @@ const mbfl_encoding mbfl_encoding_cp50220raw = {
        "ISO-2022-JP",
        (const char *(*)[])NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_cp50220raw_wchar,
+       &vtbl_wchar_cp50220raw
 };
 
 const mbfl_encoding mbfl_encoding_cp50221 = {
@@ -81,7 +87,9 @@ const mbfl_encoding mbfl_encoding_cp50221 = {
        "ISO-2022-JP",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_cp50221_wchar,
+       &vtbl_wchar_cp50221
 };
 
 const mbfl_encoding mbfl_encoding_cp50222 = {
@@ -90,7 +98,9 @@ const mbfl_encoding mbfl_encoding_cp50222 = {
        "ISO-2022-JP",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_cp50222_wchar,
+       &vtbl_wchar_cp50222
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_jis_ms = {
index aae45380c84d3fbe08a4eee7451edb5d4caf675b..057d6c6f917ae5aa3333e3b8dabcf8fb3bc817e4 100644 (file)
@@ -75,7 +75,9 @@ const mbfl_encoding mbfl_encoding_cp51932 = {
        "CP51932",
        (const char *(*)[])&mbfl_encoding_cp51932_aliases,
        mblen_table_eucjp,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_cp51932_wchar,
+       &vtbl_wchar_cp51932
 };
 
 const struct mbfl_convert_vtbl vtbl_cp51932_wchar = {
index 179873eb3a0ac2faec3ae2261eeddd97070364a7..25ec247c78049c6142ae68400b54344de80e8fb3 100644 (file)
@@ -41,7 +41,9 @@ const mbfl_encoding mbfl_encoding_cp850 = {
        "CP850",
        (const char *(*)[])&mbfl_encoding_cp850_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_cp850_wchar,
+       &vtbl_wchar_cp850
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_cp850 = {
index 307f370d03c2603852b7323f7db1b7f982093d16..95b681243b5c15a8a83ba9c4f7bff60828bcba86 100644 (file)
@@ -45,7 +45,9 @@ const mbfl_encoding mbfl_encoding_cp866 = {
        "CP866",
        (const char *(*)[])&mbfl_encoding_cp866_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_cp866_wchar,
+       &vtbl_wchar_cp866
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_cp866 = {
index 4063a68208aedc239af4f8f645fc88ae89daafab..e6cbd5fc43bba3c1118c1721fd31f88c87be1510 100644 (file)
@@ -66,7 +66,9 @@ const mbfl_encoding mbfl_encoding_cp932 = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_cp932_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_cp932_wchar,
+       &vtbl_wchar_cp932
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_cp932 = {
index 23e3a1d8472265598d0dbfab5fb83caf1ecf6077..047eb62a140234611975765624054c410c09d982 100644 (file)
@@ -65,7 +65,9 @@ const mbfl_encoding mbfl_encoding_cp936 = {
        "CP936",
        (const char *(*)[])&mbfl_encoding_cp936_aliases,
        mblen_table_cp936,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_cp936_wchar,
+       &vtbl_wchar_cp936
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_cp936 = {
index bf3ec25ee7aad4e78550afa6dc8f7079dc9a4b39..7fd3d7c315eb8167a4f001294929507783ec248c 100644 (file)
@@ -65,7 +65,9 @@ const mbfl_encoding mbfl_encoding_euc_cn = {
        "CN-GB",
        (const char *(*)[])&mbfl_encoding_euc_cn_aliases,
        mblen_table_euccn,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_euccn_wchar,
+       &vtbl_wchar_euccn
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_euccn = {
index 3b13850882d3451aa89ba99412733e56fb3e1ebf..ba794934b0a0d2655d64f07e7e7c1f5eae7a72db 100644 (file)
@@ -66,7 +66,9 @@ const mbfl_encoding mbfl_encoding_euc_jp = {
        "EUC-JP",
        (const char *(*)[])&mbfl_encoding_euc_jp_aliases,
        mblen_table_eucjp,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_eucjp_wchar,
+       &vtbl_wchar_eucjp
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_eucjp = {
index aeb94c388d7853163192934ad5ffe0a3490d1a78..2fe24e0f57c179c0ff692f1855a9fc0ecb808ff3 100644 (file)
@@ -48,7 +48,9 @@ const mbfl_encoding mbfl_encoding_eucjp2004 = {
        "EUC-JP",
        (const char *(*)[])&mbfl_encoding_eucjp2004_aliases,
        mblen_table_eucjp,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_eucjp2004_wchar,
+       &vtbl_wchar_eucjp2004
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_eucjp2004 = {
index 95aec45f4dd97bc374f48b9c2bba96919610b188..912ae7350434c94445e87c334309fdaaf53da503 100644 (file)
@@ -76,7 +76,9 @@ const mbfl_encoding mbfl_encoding_eucjp_win = {
        "EUC-JP",
        (const char *(*)[])&mbfl_encoding_eucjp_win_aliases,
        mblen_table_eucjp,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_eucjpwin_wchar,
+       &vtbl_wchar_eucjpwin
 };
 
 const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar = {
index 2a537ade6e8baaa854760dcb1fc7c716e12aaae4..ee8dc926f08655e89d53d44d1852c7f005aa611c 100644 (file)
@@ -64,7 +64,9 @@ const mbfl_encoding mbfl_encoding_euc_kr = {
        "EUC-KR",
        (const char *(*)[])&mbfl_encoding_euc_kr_aliases,
        mblen_table_euckr,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_euckr_wchar,
+       &vtbl_wchar_euckr
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_euckr = {
index 721c16292b0672deca78190f481bd516c754f490..b7687b6c31ab5455b38ac607d85ab6feec91e314 100644 (file)
@@ -47,7 +47,9 @@ const mbfl_encoding mbfl_encoding_gb18030 = {
        "GB18030",
        (const char *(*)[])&mbfl_encoding_gb18030_aliases,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_gb18030_wchar,
+       &vtbl_wchar_gb18030
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_gb18030 = {
index 03b26cc0b7396578ad58b67b7c0f7410d7e458d0..12ff178b61211d9bd60b8a5ba92efd5d06b579f3 100644 (file)
@@ -70,7 +70,9 @@ const mbfl_encoding mbfl_encoding_html_ent = {
        "HTML-ENTITIES",
        (const char *(*)[])&mbfl_encoding_html_ent_aliases,
        NULL,
-       MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_html_wchar,
+       &vtbl_wchar_html
 };
 
 const struct mbfl_convert_vtbl vtbl_wchar_html = {
index a3422cd8e5e766a09ea30e8f995be5aafef15951..8a39b75e170f82d0be6c1c05def435ea67262100 100644 (file)
@@ -44,7 +44,9 @@ const mbfl_encoding mbfl_encoding_hz = {
        "HZ-GB-2312",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_hz_wchar,
+       &vtbl_wchar_hz
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_hz = {
index 1f26d1771b2328d1742fee5e1f0c2495cc687263..4e8b974923dedd5b7c090106a9f479861d36abc5 100644 (file)
@@ -48,7 +48,9 @@ const mbfl_encoding mbfl_encoding_2022jpms = {
        "ISO-2022-JP",
        (const char *(*)[])&mbfl_encoding_2022jpms_aliases,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_2022jpms_wchar,
+       &vtbl_wchar_2022jpms
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_2022jpms = {
index 501bcb8d19759512f1f033f31d8dfb384089b8e8..c1fe9f12224268e51f26624dc77c171472826ee5 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_2022kr = {
        "ISO-2022-KR",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_2022kr_wchar,
+       &vtbl_wchar_2022kr
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_2022kr = {
index fc6678ecb69369f427c1d374b5907b4bad4cb35f..17355bf87bc4872db6dbe2e6cea9c02dea34bb3b 100644 (file)
@@ -47,7 +47,9 @@ const mbfl_encoding mbfl_encoding_2022jp_2004 = {
        "ISO-2022-JP-2004",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_2022jp_2004_wchar,
+       &vtbl_wchar_2022jp_2004
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_2022jp_2004 = {
index e0d5543882c03e189e3acf155246a4b2a2c87eca..3847f78aa16c929df6bda9fefbc42180ba5168ae 100644 (file)
@@ -50,7 +50,9 @@ const mbfl_encoding mbfl_encoding_2022jp_kddi = {
        "ISO-2022-JP",
        &mbfl_encoding_2022jp_kddi_aliases,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_2022jp_kddi_wchar,
+       &vtbl_wchar_2022jp_kddi
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_2022jp_kddi = {
index 382d0c2294ece08b3ac17bacffbf6af515ad7d1e..239d74e381b8dbee066f706c5b5ad28d96f917a4 100644 (file)
@@ -42,7 +42,9 @@ const mbfl_encoding mbfl_encoding_8859_1 = {
        "ISO-8859-1",
        (const char *(*)[])&mbfl_encoding_8859_1_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_1_wchar,
+       &vtbl_wchar_8859_1
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_1 = {
index f6d1b21b5543c04e6bbaf06e3d8880c5672021b1..0fb6bc88cb78e096c98e8c5a59fa08ac858a2f39 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_10 = {
        "ISO-8859-10",
        (const char *(*)[])&mbfl_encoding_8859_10_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_10_wchar,
+       &vtbl_wchar_8859_10
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_10 = {
index cbc8f77d87938f555b698b2d4f51cb3d66010356..2b2494baa5069cc071ab490c7ca73cac671a8e31 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_13 = {
        "ISO-8859-13",
        (const char *(*)[])&mbfl_encoding_8859_13_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_13_wchar,
+       &vtbl_wchar_8859_13
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_13 = {
index 03581ccf45c97beaa3c41a68db2573c31717c92a..eb008b8f042381065ad127083c6a2c9016910690 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_14 = {
        "ISO-8859-14",
        (const char *(*)[])&mbfl_encoding_8859_14_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_14_wchar,
+       &vtbl_wchar_8859_14
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_14 = {
index 25323bd7f0890d1dcf25a1bb7966f6917ba508ed..74e5a2dde7375cb17748a60ab07f68c75c9d0ba7 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_15 = {
        "ISO-8859-15",
        (const char *(*)[])&mbfl_encoding_8859_15_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_15_wchar,
+       &vtbl_wchar_8859_15
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_15 = {
index 1bd5f8a25d9c1a4b705cf11c44be243d5e47f1d7..68da24f5339f27e731380b1353479583122a0d50 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_16 = {
        "ISO-8859-16",
        (const char *(*)[])&mbfl_encoding_8859_16_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_16_wchar,
+       &vtbl_wchar_8859_16
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_16 = {
index 50649ddeb6d868ef3602bc9b07f2c44737980154..ec1b2bc172029049a17e2ef2c15a3db639ddaadd 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_2 = {
        "ISO-8859-2",
        (const char *(*)[])&mbfl_encoding_8859_2_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_2_wchar,
+       &vtbl_wchar_8859_2
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_2 = {
index e1897069eb6ef36920b6654fd9388cad8aaa3121..f3905ac46ed7b26511033317ef83470aab1fdf8b 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_3 = {
        "ISO-8859-3",
        (const char *(*)[])&mbfl_encoding_8859_3_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_3_wchar,
+       &vtbl_wchar_8859_3
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_3 = {
index a04910eb78e60188d0693eab8fe9ffa0a770462b..19e105a6b8c6eb209881054df105506007e1be28 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_4 = {
        "ISO-8859-4",
        (const char *(*)[])&mbfl_encoding_8859_4_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_4_wchar,
+       &vtbl_wchar_8859_4
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_4 = {
index 0bd4d5e1555fd2fface6bcb394e64db64d85e317..ac3b2d20892f4dc426ce77a8d814ab50fbac4c38 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_5 = {
        "ISO-8859-5",
        (const char *(*)[])&mbfl_encoding_8859_5_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_5_wchar,
+       &vtbl_wchar_8859_5
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_5 = {
index df89eb75babe9c4d141b1ab4378437b8d9510650..c5bbdd7eec8df4431b4123a314788f780f1cb3e7 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_6 = {
        "ISO-8859-6",
        (const char *(*)[])&mbfl_encoding_8859_6_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_6_wchar,
+       &vtbl_wchar_8859_6
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_6 = {
index d8d4494a2255bf13eb5b81d9b65c295296cdaef4..98ffade2e7514818f6ed386afdb8a05d4eb40e72 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_7 = {
        "ISO-8859-7",
        (const char *(*)[])&mbfl_encoding_8859_7_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_7_wchar,
+       &vtbl_wchar_8859_7
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_7 = {
index fad0f5c51e13d4dd4e34a93d144d434ff26545cd..3d65ce630a30566cfaa6bec61d15ac69b6ff883a 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_8 = {
        "ISO-8859-8",
        (const char *(*)[])&mbfl_encoding_8859_8_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_8_wchar,
+       &vtbl_wchar_8859_8
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_8 = {
index 97948d0ff6140acde407e7cc3ed808043c175881..8a730ae43e404f51b64d78c2834ddfc8588d7676 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_8859_9 = {
        "ISO-8859-9",
        (const char *(*)[])&mbfl_encoding_8859_9_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_8859_9_wchar,
+       &vtbl_wchar_8859_9
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_8859_9 = {
index b3fbb4f94bfe81a3758d0f520effbf49e1cf330c..88395cb09ef4f8457c8be2799beb4b6797bcc1b9 100644 (file)
@@ -46,7 +46,9 @@ const mbfl_encoding mbfl_encoding_jis = {
        "ISO-2022-JP",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_jis_wchar,
+       &vtbl_wchar_jis
 };
 
 const mbfl_encoding mbfl_encoding_2022jp = {
@@ -55,7 +57,9 @@ const mbfl_encoding mbfl_encoding_2022jp = {
        "ISO-2022-JP",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_2022jp_wchar,
+       &vtbl_wchar_2022jp
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_jis = {
index e35a0258ac6af44fb6d60b7a4d9e8d48284ba2e8..101b3f1c85bf2a2e834a893869b61148c1ef5452 100644 (file)
@@ -45,7 +45,9 @@ const mbfl_encoding mbfl_encoding_koi8r = {
        "KOI8-R",
        (const char *(*)[])&mbfl_encoding_koi8r_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_koi8r_wchar,
+       &vtbl_wchar_koi8r
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_koi8r = {
index 4dfc68654acb5581563db67d38117f6f7e891b90..25174326f703f52eaf0944e5dd8e6af1494945f7 100644 (file)
@@ -42,7 +42,9 @@ const mbfl_encoding mbfl_encoding_koi8u = {
        "KOI8-U",
        (const char *(*)[])&mbfl_encoding_koi8u_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       &vtbl_koi8u_wchar,
+       &vtbl_wchar_koi8u
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_koi8u = {
index c141dc41024b58aa3e96878dac6592f63a2ae49f..b72724f4f18ccf47b9c6e9ec5946e8d1cb04dcd7 100644 (file)
@@ -43,7 +43,9 @@ const mbfl_encoding mbfl_encoding_qprint = {
        "Quoted-Printable",
        (const char *(*)[])&mbfl_encoding_qprint_aliases,
        NULL,
-       MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE,
+       NULL,
+       NULL
 };
 
 const struct mbfl_convert_vtbl vtbl_8bit_qprint = {
index 782e0dfaf93f913ec4927f42a801a1a94e76277c..33b1e1f6fe536bfebf5e0677367877c6f08cbb2e 100644 (file)
@@ -69,7 +69,9 @@ const mbfl_encoding mbfl_encoding_sjis = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_sjis_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_sjis_wchar,
+       &vtbl_wchar_sjis
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_sjis = {
index 4f146cebea8096597696acd60f28a7b6787699ae..dd37bbabba6107e821c0bbe1b762d959038dcf45 100644 (file)
@@ -53,7 +53,9 @@ const mbfl_encoding mbfl_encoding_sjis2004 = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_sjis2004_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_sjis2004_wchar,
+       &vtbl_wchar_sjis2004
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_sjis2004 = {
index 2087786c0665f9e47f402a2839ab07c9c7b9d835..ff08cf3daef6a25c071164321a0d37e18698fcec 100644 (file)
@@ -52,7 +52,9 @@ const mbfl_encoding mbfl_encoding_sjis_mac = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_sjis_mac_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_sjis_mac_wchar,
+       &vtbl_wchar_sjis_mac
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_sjis_mac = {
index a856aa3d469e719cd1bf35da8e8c86e938e8c425..ca3d437dfa46f143ab7c92e8db51481a5e6fe548 100644 (file)
@@ -54,7 +54,9 @@ const mbfl_encoding mbfl_encoding_sjis_docomo = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_sjis_docomo_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_sjis_docomo_wchar,
+       &vtbl_wchar_sjis_docomo
 };
 
 const mbfl_encoding mbfl_encoding_sjis_kddi = {
@@ -63,7 +65,9 @@ const mbfl_encoding mbfl_encoding_sjis_kddi = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_sjis_kddi_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_sjis_kddi_wchar,
+       &vtbl_wchar_sjis_kddi
 };
 
 const mbfl_encoding mbfl_encoding_sjis_sb = {
@@ -72,7 +76,9 @@ const mbfl_encoding mbfl_encoding_sjis_sb = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_sjis_sb_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_sjis_sb_wchar,
+       &vtbl_wchar_sjis_sb
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_sjis_docomo = {
index 265c577e5fd5e9bd4bbf8894faec117e42b02e4e..17e78793d814717126704742f11aa53a84a26968 100644 (file)
@@ -66,7 +66,9 @@ const mbfl_encoding mbfl_encoding_sjis_open = {
        "Shift_JIS",
        (const char *(*)[])&mbfl_encoding_sjis_open_aliases,
        mblen_table_sjis,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_sjis_open_wchar,
+       &vtbl_wchar_sjis_open
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_sjis_open = {
index 32f174f60281ec323a19d3c03c7e80a7cbb5cce0..08cbf6ddb1db5214d976d9aa13c05daa154d4d27 100644 (file)
@@ -42,7 +42,9 @@ const mbfl_encoding mbfl_encoding_ucs2 = {
        "UCS-2",
        (const char *(*)[])&mbfl_encoding_ucs2_aliases,
        NULL,
-       MBFL_ENCTYPE_WCS2BE
+       MBFL_ENCTYPE_WCS2BE,
+       &vtbl_ucs2_wchar,
+       &vtbl_wchar_ucs2
 };
 
 const mbfl_encoding mbfl_encoding_ucs2be = {
@@ -51,7 +53,9 @@ const mbfl_encoding mbfl_encoding_ucs2be = {
        "UCS-2BE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_WCS2BE
+       MBFL_ENCTYPE_WCS2BE,
+       &vtbl_ucs2be_wchar,
+       &vtbl_wchar_ucs2be
 };
 
 const mbfl_encoding mbfl_encoding_ucs2le = {
@@ -60,7 +64,9 @@ const mbfl_encoding mbfl_encoding_ucs2le = {
        "UCS-2LE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_WCS2LE
+       MBFL_ENCTYPE_WCS2LE,
+       &vtbl_ucs2le_wchar,
+       &vtbl_wchar_ucs2le
 };
 
 const struct mbfl_convert_vtbl vtbl_ucs2_wchar = {
index 8906b8ff097f78251c4379942d379efaf4c6d3da..011c93fcdac7e3df6cac01e517bc2f609bdd757f 100644 (file)
@@ -42,7 +42,9 @@ const mbfl_encoding mbfl_encoding_ucs4 = {
        "UCS-4",
        (const char *(*)[])&mbfl_encoding_ucs4_aliases,
        NULL,
-       MBFL_ENCTYPE_WCS4BE
+       MBFL_ENCTYPE_WCS4BE,
+       &vtbl_ucs4_wchar,
+       &vtbl_wchar_ucs4
 };
 
 const mbfl_encoding mbfl_encoding_ucs4be = {
@@ -51,7 +53,9 @@ const mbfl_encoding mbfl_encoding_ucs4be = {
        "UCS-4BE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_WCS4BE
+       MBFL_ENCTYPE_WCS4BE,
+       &vtbl_ucs4be_wchar,
+       &vtbl_wchar_ucs4be
 };
 
 const mbfl_encoding mbfl_encoding_ucs4le = {
@@ -60,7 +64,9 @@ const mbfl_encoding mbfl_encoding_ucs4le = {
        "UCS-4LE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_WCS4LE
+       MBFL_ENCTYPE_WCS4LE,
+       &vtbl_ucs4le_wchar,
+       &vtbl_wchar_ucs4le
 };
 
 const struct mbfl_convert_vtbl vtbl_ucs4_wchar = {
index 2e1c696f8ad7fae36c8dc8390eff4147db9b5362..1603793e6a0d54f2f94be6367cdcc32727b6313d 100644 (file)
@@ -65,7 +65,9 @@ const mbfl_encoding mbfl_encoding_uhc = {
        "UHC",
        (const char *(*)[])&mbfl_encoding_uhc_aliases,
        mblen_table_uhc,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_uhc_wchar,
+       &vtbl_wchar_uhc
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_uhc = {
index 3e008e803573a26246c0a0fe4225eabc14792159..a4864cd3aca7945d84b0571018e7e735ae74a2ea 100644 (file)
@@ -42,7 +42,9 @@ const mbfl_encoding mbfl_encoding_utf16 = {
        "UTF-16",
        (const char *(*)[])&mbfl_encoding_utf16_aliases,
        NULL,
-       MBFL_ENCTYPE_MWC2BE
+       MBFL_ENCTYPE_MWC2BE,
+       &vtbl_utf16_wchar,
+       &vtbl_wchar_utf16
 };
 
 const mbfl_encoding mbfl_encoding_utf16be = {
@@ -51,7 +53,9 @@ const mbfl_encoding mbfl_encoding_utf16be = {
        "UTF-16BE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MWC2BE
+       MBFL_ENCTYPE_MWC2BE,
+       &vtbl_utf16be_wchar,
+       &vtbl_wchar_utf16be
 };
 
 const mbfl_encoding mbfl_encoding_utf16le = {
@@ -60,7 +64,9 @@ const mbfl_encoding mbfl_encoding_utf16le = {
        "UTF-16LE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_MWC2LE
+       MBFL_ENCTYPE_MWC2LE,
+       &vtbl_utf16le_wchar,
+       &vtbl_wchar_utf16le
 };
 
 const struct mbfl_convert_vtbl vtbl_utf16_wchar = {
index 852bca200298b9a1c14a576eb342e63d2cefc7d1..5b02362b5d11f500aedb732775cb7414101026c4 100644 (file)
@@ -42,7 +42,9 @@ const mbfl_encoding mbfl_encoding_utf32 = {
        "UTF-32",
        (const char *(*)[])&mbfl_encoding_utf32_aliases,
        NULL,
-       MBFL_ENCTYPE_WCS4BE
+       MBFL_ENCTYPE_WCS4BE,
+       &vtbl_utf32_wchar,
+       &vtbl_wchar_utf32
 };
 
 const mbfl_encoding mbfl_encoding_utf32be = {
@@ -51,7 +53,9 @@ const mbfl_encoding mbfl_encoding_utf32be = {
        "UTF-32BE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_WCS4BE
+       MBFL_ENCTYPE_WCS4BE,
+       &vtbl_utf32be_wchar,
+       &vtbl_wchar_utf32be
 };
 
 const mbfl_encoding mbfl_encoding_utf32le = {
@@ -60,7 +64,9 @@ const mbfl_encoding mbfl_encoding_utf32le = {
        "UTF-32LE",
        NULL,
        NULL,
-       MBFL_ENCTYPE_WCS4LE
+       MBFL_ENCTYPE_WCS4LE,
+       &vtbl_utf32le_wchar,
+       &vtbl_wchar_utf32le
 };
 
 const struct mbfl_convert_vtbl vtbl_utf32_wchar = {
index db0979c25de4361858008090902af07103d19dcf..f31da86b6c01297ed9924d677f62bbbfae38c0b1 100644 (file)
@@ -57,7 +57,9 @@ const mbfl_encoding mbfl_encoding_utf7 = {
        "UTF-7",
        (const char *(*)[])&mbfl_encoding_utf7_aliases,
        NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
+       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE,
+       &vtbl_utf7_wchar,
+       &vtbl_wchar_utf7
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_utf7 = {
index e81e0860d22bcdd8ffc2e4af5e0fdc2245470006..1e2ad5b9599a7a5bb963176d1cec731759d10e56 100644 (file)
@@ -63,7 +63,9 @@ const mbfl_encoding mbfl_encoding_utf8 = {
        "UTF-8",
        (const char *(*)[])&mbfl_encoding_utf8_aliases,
        mblen_table_utf8,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_utf8_wchar,
+       &vtbl_wchar_utf8
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_utf8 = {
index 41e02bf3149dc390531bdd5a70e0552fed0e1b9e..7132d9ccd65895b05bb6fcc9982e210c37c55cb1 100644 (file)
@@ -52,7 +52,9 @@ const mbfl_encoding mbfl_encoding_utf8_docomo = {
        "UTF-8",
        (const char *(*)[])&mbfl_encoding_utf8_docomo_aliases,
        mblen_table_utf8,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_utf8_docomo_wchar,
+       &vtbl_wchar_utf8_docomo
 };
 
 const mbfl_encoding mbfl_encoding_utf8_kddi_a = {
@@ -61,7 +63,9 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_a = {
        "UTF-8",
        (const char *(*)[])&mbfl_encoding_utf8_kddi_a_aliases,
        mblen_table_utf8,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_utf8_kddi_a_wchar,
+       &vtbl_wchar_utf8_kddi_a
 };
 
 const mbfl_encoding mbfl_encoding_utf8_kddi_b = {
@@ -70,7 +74,9 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_b = {
        "UTF-8",
        (const char *(*)[])&mbfl_encoding_utf8_kddi_b_aliases,
        mblen_table_utf8,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_utf8_kddi_b_wchar,
+       &vtbl_wchar_utf8_kddi_b
 };
 
 const mbfl_encoding mbfl_encoding_utf8_sb = {
@@ -79,7 +85,9 @@ const mbfl_encoding mbfl_encoding_utf8_sb = {
        "UTF-8",
        (const char *(*)[])&mbfl_encoding_utf8_sb_aliases,
        mblen_table_utf8,
-       MBFL_ENCTYPE_MBCS
+       MBFL_ENCTYPE_MBCS,
+       &vtbl_utf8_sb_wchar,
+       &vtbl_wchar_utf8_sb
 };
 
 const struct mbfl_identify_vtbl vtbl_identify_utf8_docomo = {
index b8cdfcaf792a8d640fb6ee7c312a0444fb41da76..5464fac4339e8d99bea7d2fbe3e2bd48a9a0ecd8 100644 (file)
@@ -40,7 +40,9 @@ const mbfl_encoding mbfl_encoding_uuencode = {
        "x-uuencode",
        NULL,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       NULL,
+       NULL
 };
 
 const struct mbfl_convert_vtbl vtbl_uuencode_8bit = {
index 55c5c1d27d5f48f95c9ec3ea4d20ed7ebefca9a6..8f18525feb87354a4888dd515e83607616e0ae10 100644 (file)
@@ -149,7 +149,7 @@ mbfl_buffer_converter_new(
        /* create convert filter */
        convd->filter1 = NULL;
 convd->filter2 = NULL;
-       if (mbfl_convert_filter_get_vtbl(convd->from->no_encoding, convd->to->no_encoding) != NULL) {
+       if (mbfl_convert_filter_get_vtbl(convd->from, convd->to) != NULL) {
                convd->filter1 = mbfl_convert_filter_new(convd->from, convd->to, mbfl_memory_device_output, NULL, &convd->device);
        } else {
                convd->filter2 = mbfl_convert_filter_new(&mbfl_encoding_wchar, convd->to, mbfl_memory_device_output, NULL, &convd->device);
@@ -523,7 +523,7 @@ mbfl_convert_encoding(
 
        filter1 = NULL;
        filter2 = NULL;
-       if (mbfl_convert_filter_get_vtbl(string->encoding->no_encoding, toenc->no_encoding) != NULL) {
+       if (mbfl_convert_filter_get_vtbl(string->encoding, toenc) != NULL) {
                filter1 = mbfl_convert_filter_new(string->encoding, toenc, mbfl_memory_device_output, 0, &device);
        } else {
                filter2 = mbfl_convert_filter_new(&mbfl_encoding_wchar, toenc, mbfl_memory_device_output, 0, &device);
index ed79746f6af55ddfeea64a265c8deb2d50bfbd19..4faa9b8b1bb069ebe4d0067bec6b4fb108e1f9fd 100644 (file)
@@ -46,5 +46,7 @@ const mbfl_encoding mbfl_encoding_8bit = {
        "8bit",
        (const char *(*)[])&mbfl_encoding_8bit_aliases,
        NULL,
-       MBFL_ENCTYPE_SBCS
+       MBFL_ENCTYPE_SBCS,
+       NULL,
+       NULL
 };
index b19432f76a4a5ef9495a40054ae8e83c04235342..a9c6fd42048179f6148b24cbf44c03ef3d5b06c0 100644 (file)
@@ -46,7 +46,9 @@ const mbfl_encoding mbfl_encoding_pass = {
        NULL,
        (const char *(*)[])&mbfl_encoding_pass_aliases,
        NULL,
-       0
+       0,
+       NULL,
+       NULL
 };
 
 const struct mbfl_convert_vtbl vtbl_pass = {
index ace81b4c7263aa2458f4a10b10df5f2c69becc11..97142a16cb04e9e8c96c57306e901fdc871760a3 100644 (file)
@@ -44,5 +44,7 @@ const mbfl_encoding mbfl_encoding_wchar = {
        NULL,
        NULL,
        NULL,
-       MBFL_ENCTYPE_WCS4BE
+       MBFL_ENCTYPE_WCS4BE,
+       NULL,
+       NULL
 };
index 0d9f25ddc80c052c6d63fb95a929154c8fc05165..1f4d81ae66c5dd660222c12770ff24d35c89d142 100644 (file)
@@ -110,173 +110,6 @@ static char mbfl_hexchar_table[] = {
        0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
 };
 
-/* Input filters going from encoding -> wchar */
-static const struct mbfl_convert_vtbl *mbfl_input_filter_list[] = {
-       &vtbl_utf8_wchar,
-       &vtbl_eucjp_wchar,
-       &vtbl_sjis_wchar,
-       &vtbl_sjis_open_wchar,
-       &vtbl_sjis2004_wchar,
-       &vtbl_cp51932_wchar,
-       &vtbl_jis_wchar,
-       &vtbl_jis_ms_wchar,
-       &vtbl_2022jp_wchar,
-       &vtbl_2022jpms_wchar,
-       &vtbl_2022jp_2004_wchar,
-       &vtbl_2022jp_kddi_wchar,
-       &vtbl_eucjpwin_wchar,
-       &vtbl_eucjp2004_wchar,
-       &vtbl_cp932_wchar,
-       &vtbl_sjis_docomo_wchar,
-       &vtbl_sjis_kddi_wchar,
-       &vtbl_sjis_sb_wchar,
-       &vtbl_sjis_mac_wchar,
-       &vtbl_utf8_docomo_wchar,
-       &vtbl_utf8_kddi_a_wchar,
-       &vtbl_utf8_kddi_b_wchar,
-       &vtbl_utf8_sb_wchar,
-       &vtbl_euccn_wchar,
-       &vtbl_cp936_wchar,
-       &vtbl_gb18030_wchar,
-       &vtbl_hz_wchar,
-       &vtbl_euctw_wchar,
-       &vtbl_big5_wchar,
-       &vtbl_cp950_wchar,
-       &vtbl_euckr_wchar,
-       &vtbl_uhc_wchar,
-       &vtbl_2022kr_wchar,
-       &vtbl_cp1251_wchar,
-       &vtbl_cp866_wchar,
-       &vtbl_koi8r_wchar,
-       &vtbl_koi8u_wchar,
-       &vtbl_cp1252_wchar,
-       &vtbl_cp1254_wchar,
-       &vtbl_cp50220_wchar,
-       &vtbl_cp50220raw_wchar,
-       &vtbl_cp50221_wchar,
-       &vtbl_cp50222_wchar,
-       &vtbl_ascii_wchar,
-       &vtbl_8859_1_wchar,
-       &vtbl_8859_2_wchar,
-       &vtbl_8859_3_wchar,
-       &vtbl_8859_4_wchar,
-       &vtbl_8859_5_wchar,
-       &vtbl_8859_6_wchar,
-       &vtbl_8859_7_wchar,
-       &vtbl_8859_8_wchar,
-       &vtbl_8859_9_wchar,
-       &vtbl_8859_10_wchar,
-       &vtbl_8859_13_wchar,
-       &vtbl_8859_14_wchar,
-       &vtbl_8859_15_wchar,
-       &vtbl_html_wchar,
-       &vtbl_utf7_wchar,
-       &vtbl_utf7imap_wchar,
-       &vtbl_utf16_wchar,
-       &vtbl_utf16be_wchar,
-       &vtbl_utf16le_wchar,
-       &vtbl_utf32_wchar,
-       &vtbl_utf32be_wchar,
-       &vtbl_utf32le_wchar,
-       &vtbl_ucs4_wchar,
-       &vtbl_ucs4be_wchar,
-       &vtbl_ucs4le_wchar,
-       &vtbl_ucs2_wchar,
-       &vtbl_ucs2be_wchar,
-       &vtbl_ucs2le_wchar,
-       &vtbl_byte4be_wchar,
-       &vtbl_byte4le_wchar,
-       &vtbl_byte2be_wchar,
-       &vtbl_byte2le_wchar,
-       &vtbl_armscii8_wchar,
-       &vtbl_cp850_wchar,
-       NULL
-};
-
-/* Output filters going from wchar -> encoding */
-static const struct mbfl_convert_vtbl *mbfl_output_filter_list[] = {
-       &vtbl_wchar_utf8,
-       &vtbl_wchar_eucjp,
-       &vtbl_wchar_sjis,
-       &vtbl_wchar_sjis_open,
-       &vtbl_wchar_sjis2004,
-       &vtbl_wchar_cp51932,
-       &vtbl_wchar_jis,
-       &vtbl_wchar_jis_ms,
-       &vtbl_wchar_2022jp,
-       &vtbl_wchar_2022jpms,
-       &vtbl_wchar_2022jp_2004,
-       &vtbl_wchar_2022jp_kddi,
-       &vtbl_wchar_eucjpwin,
-       &vtbl_wchar_eucjp2004,
-       &vtbl_wchar_cp932,
-       &vtbl_wchar_sjis_docomo,
-       &vtbl_wchar_sjis_kddi,
-       &vtbl_wchar_sjis_sb,
-       &vtbl_wchar_sjis_mac,
-       &vtbl_wchar_utf8_docomo,
-       &vtbl_wchar_utf8_kddi_a,
-       &vtbl_wchar_utf8_kddi_b,
-       &vtbl_wchar_utf8_sb,
-       &vtbl_wchar_euccn,
-       &vtbl_wchar_cp936,
-       &vtbl_wchar_gb18030,
-       &vtbl_wchar_hz,
-       &vtbl_wchar_euctw,
-       &vtbl_wchar_big5,
-       &vtbl_wchar_cp950,
-       &vtbl_wchar_euckr,
-       &vtbl_wchar_uhc,
-       &vtbl_wchar_2022kr,
-       &vtbl_wchar_cp1251,
-       &vtbl_wchar_cp866,
-       &vtbl_wchar_koi8r,
-       &vtbl_wchar_koi8u,
-       &vtbl_wchar_cp1252,
-       &vtbl_wchar_cp1254,
-       &vtbl_wchar_cp50220,
-       &vtbl_wchar_cp50220raw,
-       &vtbl_wchar_cp50221,
-       &vtbl_wchar_cp50222,
-       &vtbl_wchar_ascii,
-       &vtbl_wchar_8859_1,
-       &vtbl_wchar_8859_2,
-       &vtbl_wchar_8859_3,
-       &vtbl_wchar_8859_4,
-       &vtbl_wchar_8859_5,
-       &vtbl_wchar_8859_6,
-       &vtbl_wchar_8859_7,
-       &vtbl_wchar_8859_8,
-       &vtbl_wchar_8859_9,
-       &vtbl_wchar_8859_10,
-       &vtbl_wchar_8859_13,
-       &vtbl_wchar_8859_14,
-       &vtbl_wchar_8859_15,
-       &vtbl_wchar_html,
-       &vtbl_wchar_utf7,
-       &vtbl_wchar_utf7imap,
-       &vtbl_wchar_utf16,
-       &vtbl_wchar_utf16be,
-       &vtbl_wchar_utf16le,
-       &vtbl_wchar_utf32,
-       &vtbl_wchar_utf32be,
-       &vtbl_wchar_utf32le,
-       &vtbl_wchar_ucs4,
-       &vtbl_wchar_ucs4be,
-       &vtbl_wchar_ucs4le,
-       &vtbl_wchar_ucs2,
-       &vtbl_wchar_ucs2be,
-       &vtbl_wchar_ucs2le,
-       &vtbl_wchar_byte4be,
-       &vtbl_wchar_byte4le,
-       &vtbl_wchar_byte2be,
-       &vtbl_wchar_byte2le,
-       &vtbl_wchar_armscii8,
-       &vtbl_wchar_cp850,
-       NULL
-};
-
-/* Special filters that don't fall in either category */
 static const struct mbfl_convert_vtbl *mbfl_special_filter_list[] = {
        &vtbl_8bit_b64,
        &vtbl_b64_8bit,
@@ -337,7 +170,7 @@ mbfl_convert_filter_new(
        mbfl_convert_filter * filter;
        const struct mbfl_convert_vtbl *vtbl;
 
-       vtbl = mbfl_convert_filter_get_vtbl(from->no_encoding, to->no_encoding);
+       vtbl = mbfl_convert_filter_get_vtbl(from, to);
 
        if (vtbl == NULL) {
                vtbl = &vtbl_pass;
@@ -420,7 +253,7 @@ void mbfl_convert_filter_reset(mbfl_convert_filter *filter,
        /* destruct old filter */
        (*filter->filter_dtor)(filter);
 
-       vtbl = mbfl_convert_filter_get_vtbl(from->no_encoding, to->no_encoding);
+       vtbl = mbfl_convert_filter_get_vtbl(from, to);
 
        if (vtbl == NULL) {
                vtbl = &vtbl_pass;
@@ -597,38 +430,33 @@ mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
        return ret;
 }
 
-const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to)
+const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(
+               const mbfl_encoding *from, const mbfl_encoding *to)
 {
-       const struct mbfl_convert_vtbl *vtbl;
-       const struct mbfl_convert_vtbl **list;
-       int i;
-
-       if (to == mbfl_no_encoding_base64 ||
-           to == mbfl_no_encoding_qprint ||
-           to == mbfl_no_encoding_7bit) {
-               from = mbfl_no_encoding_8bit;
-       } else if (from == mbfl_no_encoding_base64 ||
-                          from == mbfl_no_encoding_qprint ||
-                          from == mbfl_no_encoding_uuencode) {
-               to = mbfl_no_encoding_8bit;
+       if (to->no_encoding == mbfl_no_encoding_base64 ||
+           to->no_encoding == mbfl_no_encoding_qprint ||
+           to->no_encoding == mbfl_no_encoding_7bit) {
+               from = &mbfl_encoding_8bit;
+       } else if (from->no_encoding == mbfl_no_encoding_base64 ||
+                          from->no_encoding == mbfl_no_encoding_qprint ||
+                          from->no_encoding == mbfl_no_encoding_uuencode) {
+               to = &mbfl_encoding_8bit;
        }
 
-       if (to == mbfl_no_encoding_wchar) {
-               list = mbfl_input_filter_list;
-       } else if (from == mbfl_no_encoding_wchar) {
-               list = mbfl_output_filter_list;
+       if (to->no_encoding == mbfl_no_encoding_wchar) {
+               return from->input_filter;
+       } else if (from->no_encoding == mbfl_no_encoding_wchar) {
+               return to->output_filter;
        } else {
-               list = mbfl_special_filter_list;
-       }
-
-       i = 0;
-       while ((vtbl = list[i++]) != NULL){
-               if (vtbl->from == from && vtbl->to == to) {
-                       return vtbl;
+               int i = 0;
+               const struct mbfl_convert_vtbl *vtbl;
+               while ((vtbl = mbfl_special_filter_list[i++]) != NULL){
+                       if (vtbl->from == from->no_encoding && vtbl->to == to->no_encoding) {
+                               return vtbl;
+                       }
                }
+               return NULL;
        }
-
-       return NULL;
 }
 
 /*
index fd0b60777bc1337d12fb64695c3ddbb15efa0cd8..af440becd2307082dfd21440c81b4e2be4f48d82 100644 (file)
@@ -56,16 +56,6 @@ struct _mbfl_convert_filter {
        void *opaque;
 };
 
-struct mbfl_convert_vtbl {
-       enum mbfl_no_encoding from;
-       enum mbfl_no_encoding to;
-       void (*filter_ctor)(mbfl_convert_filter *filter);
-       void (*filter_dtor)(mbfl_convert_filter *filter);
-       int (*filter_function)(int c, mbfl_convert_filter *filter);
-       int (*filter_flush)(mbfl_convert_filter *filter);
-       void (*filter_copy)(mbfl_convert_filter *src, mbfl_convert_filter *dest);
-};
-
 MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new(
     const mbfl_encoding *from,
     const mbfl_encoding *to,
@@ -83,7 +73,7 @@ MBFLAPI extern int mbfl_convert_filter_flush(mbfl_convert_filter *filter);
 MBFLAPI extern void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to);
 MBFLAPI extern void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist);
 MBFLAPI extern int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter);
-MBFLAPI extern const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to);
+MBFLAPI extern const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(const mbfl_encoding *from, const mbfl_encoding *to);
 
 MBFLAPI extern void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter);
 MBFLAPI extern int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter);
index e03c2acaffc54865a8e44cb42f3862b8f74bf09a..77c5daeeffbaf44e9698b3b782ec7af1ec1508da 100644 (file)
@@ -127,7 +127,9 @@ static const mbfl_encoding mbfl_encoding_auto = {
        NULL,
        (const char *(*)[])&mbfl_encoding_auto_aliases,
        NULL,
-       0
+       0,
+       NULL,
+       NULL
 };
 
 static const mbfl_encoding *mbfl_encoding_ptr_list[] = {
index d080f7b6a4b7e70e57a4bce78275370f23a88d8d..2952977fd88e6431c1451b446ca206247f58cf47 100644 (file)
@@ -128,6 +128,17 @@ enum mbfl_no_encoding {
 
 typedef enum mbfl_no_encoding mbfl_encoding_id;
 
+struct _mbfl_convert_filter;
+struct mbfl_convert_vtbl {
+       enum mbfl_no_encoding from;
+       enum mbfl_no_encoding to;
+       void (*filter_ctor)(struct _mbfl_convert_filter *filter);
+       void (*filter_dtor)(struct _mbfl_convert_filter *filter);
+       int (*filter_function)(int c, struct _mbfl_convert_filter *filter);
+       int (*filter_flush)(struct _mbfl_convert_filter *filter);
+       void (*filter_copy)(struct _mbfl_convert_filter *src, struct _mbfl_convert_filter *dest);
+};
+
 /*
  * encoding
  */
@@ -138,6 +149,8 @@ typedef struct _mbfl_encoding {
        const char *(*aliases)[];
        const unsigned char *mblen_table;
        unsigned int flag;
+       const struct mbfl_convert_vtbl *input_filter;
+       const struct mbfl_convert_vtbl *output_filter;
 } mbfl_encoding;
 
 MBFLAPI extern const mbfl_encoding * mbfl_name2encoding(const char *name);