koco-cvs Mailing List for Python Korean Codecs (Page 9)
Brought to you by:
perky
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
(88) |
May
(5) |
Jun
|
Jul
(27) |
Aug
|
Sep
|
Oct
(5) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(77) |
Feb
(3) |
Mar
|
Apr
(22) |
May
(123) |
Jun
(80) |
Jul
(83) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Hye-Shik C. <pe...@us...> - 2003-05-26 15:07:50
|
perky 03/05/26 08:07:49 Modified: tests test_encoding_shift_jis.py Log: Set tstring instead of teststring Revision Changes Path 1.2 +2 -2 cjkcodecs/tests/test_encoding_shift_jis.py Index: test_encoding_shift_jis.py =================================================================== RCS file: /cvsroot/koco/cjkcodecs/tests/test_encoding_shift_jis.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- test_encoding_shift_jis.py 26 May 2003 11:40:41 -0000 1.1 +++ test_encoding_shift_jis.py 26 May 2003 15:07:49 -0000 1.2 @@ -27,7 +27,7 @@ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# $Id: test_encoding_shift_jis.py,v 1.1 2003/05/26 11:40:41 perky Exp $ +# $Id: test_encoding_shift_jis.py,v 1.2 2003/05/26 15:07:49 perky Exp $ # from test import test_support @@ -36,7 +36,7 @@ class Test_SJIS(test_multibytecodec_support.TestBase, unittest.TestCase): encoding = 'shift_jis' - from sampletexts.shift_jis import teststring + from sampletexts.shift_jis import teststring as tstring errortests = ( # invalid bytes ("abc\x80\x80\x82\x84", "strict", None), |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 15:06:47
|
perky 03/05/26 08:06:46 Modified: src _shift_jis.c Log: Iterate correctly for JIS X 0201 Revision Changes Path 1.4 +13 -10 cjkcodecs/src/_shift_jis.c Index: _shift_jis.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_shift_jis.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- _shift_jis.c 26 May 2003 07:37:09 -0000 1.3 +++ _shift_jis.c 26 May 2003 15:06:45 -0000 1.4 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _shift_jis.c,v 1.3 2003/05/26 07:37:09 perky Exp $ + * $Id: _shift_jis.c,v 1.4 2003/05/26 15:06:45 perky Exp $ */ #include "codeccommon.h" @@ -89,10 +89,9 @@ { while (inleft > 0) { unsigned char c = **inbuf; - Py_UNICODE code; RESERVE_OUTBUF(1) - JISX0201_DECODE(c, code) + JISX0201_DECODE(c, **outbuf) else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)) { unsigned char c1, c2; @@ -106,23 +105,27 @@ c1 = (2 * c1 + (c2 < 0x5e ? 0 : 1) + 0x21); c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21; - TRYMAP_DEC(jisx0208, code, c1, c2); - else return 2; + TRYMAP_DEC(jisx0208, **outbuf, c1, c2) { + NEXT(2, 1) + continue; + } else + return 2; } else if (c >= 0xf0 && c <= 0xf9) { unsigned char c2; RESERVE_INBUF(2) c2 = (*inbuf)[1]; - if ((c2 >= 0x40 && c2 <= 0x7e) || (c2 >= 0x80 && c2 <= 0xfc)) - code = 0xe000 + 188 * (c - 0xf0) + + if ((c2 >= 0x40 && c2 <= 0x7e) || (c2 >= 0x80 && c2 <= 0xfc)) { + **outbuf = 0xe000 + 188 * (c - 0xf0) + (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41); - else + NEXT(2, 1) + continue; + } else return 2; } else return 2; - **outbuf = code; - NEXT(2, 1) + NEXT(1, 1) /* JIS X 0201 */ } return 0; |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 13:51:20
|
perky 03/05/26 06:51:19 Modified: tools genmap_japanese.py Log: Touch cp932encmap correctly. Revision Changes Path 1.6 +10 -4 cjkcodecs/tools/genmap_japanese.py Index: genmap_japanese.py =================================================================== RCS file: /cvsroot/koco/cjkcodecs/tools/genmap_japanese.py,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- genmap_japanese.py 17 May 2003 21:17:39 -0000 1.5 +++ genmap_japanese.py 26 May 2003 13:51:19 -0000 1.6 @@ -26,7 +26,7 @@ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# $Id: genmap_japanese.py,v 1.5 2003/05/17 21:17:39 perky Exp $ +# $Id: genmap_japanese.py,v 1.6 2003/05/26 13:51:19 perky Exp $ # from genmap_support import * @@ -75,10 +75,16 @@ sjisencmap[code >> 8][code & 0xff] = c1 << 8 | c2 for c1, m in cp932decmap.items(): for c2, code in m.items(): - if sjisencmap.has_key(c1) and sjisencmap[c1].has_key(c2) and \ - sjisencmap[c1][c2] != code: - cp932encmap.setdefault(code >> 8, {}) + cp932encmap.setdefault(code >> 8, {}) + if not cp932encmap[code >> 8].has_key(code & 0xff): cp932encmap[code >> 8][code & 0xff] = c1 << 8 | c2 +for c1, m in cp932encmap.items(): + for c2, code in m.items(): + if (sjisencmap.has_key(c1) and sjisencmap[c1].has_key(c2) and + sjisencmap[c1][c2] == code): + del cp932encmap[c1][c2] + if not cp932encmap[c1]: + del cp932encmap[c1] # Twinmap for both of JIS X 0208 (MSB unset) and JIS X 0212 (MSB set) for c1, m in jisx0208decmap.items(): |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 13:50:13
|
perky 03/05/26 06:50:10 Modified: src/maps map_cp932ext.h Log: Fix encoding map for roundtrip consistency. Revision Changes Path 1.4 +364 -1328 cjkcodecs/src/maps/map_cp932ext.h Index: map_cp932ext.h =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/maps/map_cp932ext.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- map_cp932ext.h 17 May 2003 20:58:58 -0000 1.3 +++ map_cp932ext.h 26 May 2003 13:50:09 -0000 1.4 @@ -1,5 +1,5 @@ /* - * $Id: map_cp932ext.h,v 1.3 2003/05/17 20:58:58 perky Exp $ + * $Id: map_cp932ext.h,v 1.4 2003/05/26 13:50:09 perky Exp $ */ static const Py_UNICODE __cp932ext_decmap[969] = { @@ -386,8 +386,9 @@ /* 0xFF */ {0, 0, 0}, }; -static const DBCHAR __cp932ext_encmap[17393] = { - 0x814e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, +static const DBCHAR __cp932ext_encmap[9686] = { + 0x8782, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0x8784, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, @@ -395,26 +396,17 @@ NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, + 0x875a, 0x875b, 0x875c, 0x875d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0xeeef, 0xeef0, 0xeef1, 0xeef2, 0xeef3, 0xeef4, + 0xeef5, 0xeef6, 0xeef7, 0xeef8, 0x8794, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8180, - 0x839f, 0x83a0, NOCHAR, 0x83a2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x83a8, NOCHAR, 0x83aa, 0x83ab, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x83b1, NOCHAR, NOCHAR, NOCHAR, 0x83b5, + NOCHAR, NOCHAR, 0x8798, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0x8161, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0x8793, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x83c1, NOCHAR, NOCHAR, NOCHAR, 0x83c5, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x83ca, NOCHAR, 0x83cc, NOCHAR, 0x83ce, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x83d3, NOCHAR, NOCHAR, - 0x83d6, 0x8446, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8449, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x844e, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8457, NOCHAR, - NOCHAR, NOCHAR, 0x845b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x8471, NOCHAR, NOCHAR, NOCHAR, 0x8475, 0x8477, NOCHAR, - 0x8479, 0x847a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8482, NOCHAR, 0x8484, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x848b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8490, 0x8165, - 0x8166, 0x8782, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, @@ -423,373 +415,231 @@ NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8755, NOCHAR, 0x8757, NOCHAR, - 0x8759, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x81a9, NOCHAR, 0x81a8, 0x81cd, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x81b8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x81e3, NOCHAR, NOCHAR, 0x81e5, NOCHAR, NOCHAR, 0x81da, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x81c8, 0x81c9, 0x81bf, - 0x81be, 0x81e7, 0x81e8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8188, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0x8799, 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, + 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, + 0x874d, 0x874e, 0x874f, 0x8750, 0x8751, 0x8752, 0x8753, 0x8780, + NOCHAR, 0x8781, 0x878a, 0x878b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0x878c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x81e0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8182, 0x81df, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x81bd, NOCHAR, NOCHAR, 0x81ba, 0x8749, NOCHAR, 0x874b, - 0x874c, NOCHAR, 0x874e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8753, - 0x849f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x84a1, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x84ad, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x84bc, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x84b2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x84bb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x84b8, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x84b9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8785, 0x8786, 0x8787, + 0x8788, 0x8789, 0x8765, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8769, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0x8760, NOCHAR, NOCHAR, NOCHAR, 0x8763, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0x8761, 0x876b, NOCHAR, NOCHAR, 0x876a, 0x8764, NOCHAR, + NOCHAR, NOCHAR, 0x876c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8766, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0x876e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0x875f, 0x876d, NOCHAR, NOCHAR, 0x8762, NOCHAR, NOCHAR, NOCHAR, + 0x8767, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8768, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0x877e, 0x878f, 0x878e, 0x878d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8772, 0x8773, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x81a0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0x876f, 0x8770, 0x8771, NOCHAR, NOCHAR, + 0x8775, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x81a3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x81a4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x819d, 0x819c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0x8774, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8783, 0xed4c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x81fc, - 0x819a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x818a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x81f4, NOCHAR, NOCHAR, - 0x81f3, 0x8171, NOCHAR, NOCHAR, 0x8174, NOCHAR, NOCHAR, NOCHAR, - 0x8178, 0x8179, 0x817a, NOCHAR, NOCHAR, 0x816b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x829f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x82a5, 0x82a6, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x82ab, 0x82ac, - 0x82ad, NOCHAR, 0x82af, NOCHAR, 0x82b1, NOCHAR, 0x82b3, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x82b8, 0x82b9, NOCHAR, 0x82bb, NOCHAR, - 0x82bd, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x82c5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x82d1, 0x82d2, 0x82d3, 0x82d4, - NOCHAR, NOCHAR, 0x82d7, NOCHAR, 0x82d9, NOCHAR, 0x82db, 0x82dc, - NOCHAR, 0x82de, 0x82df, NOCHAR, 0x82e1, NOCHAR, 0x82e3, NOCHAR, - 0x82e5, 0x82e6, 0x82e7, NOCHAR, NOCHAR, NOCHAR, 0x82eb, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x82f1, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x814b, 0x8154, 0x8155, - NOCHAR, NOCHAR, 0x8340, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8345, - NOCHAR, NOCHAR, NOCHAR, 0x8349, 0x834a, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x834f, 0x8350, NOCHAR, 0x8352, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8358, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8373, NOCHAR, 0x8375, - NOCHAR, 0x8377, NOCHAR, NOCHAR, NOCHAR, 0x837b, 0x837c, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8385, NOCHAR, - 0x8387, NOCHAR, 0x8389, 0x838a, NOCHAR, NOCHAR, NOCHAR, 0x838e, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8393, NOCHAR, NOCHAR, 0x8396, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8153, - 0x8760, NOCHAR, NOCHAR, NOCHAR, 0x8763, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x876a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8766, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x876e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x875f, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed4d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x8768, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0xed4e, 0xed4f, NOCHAR, NOCHAR, 0xed50, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x878d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed51, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xed52, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8774, 0x929a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x969c, - NOCHAR, NOCHAR, NOCHAR, 0x89ba, NOCHAR, NOCHAR, 0x975e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fe5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8adb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed54, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed53, NOCHAR, 0xed56, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed55, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x93e1, 0x8cc1, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x98a8, 0x8fe6, - NOCHAR, 0x89b3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9790, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8aa3, NOCHAR, - NOCHAR, NOCHAR, 0x98aa, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x975c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8cdc, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x98b1, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x98b6, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed45, NOCHAR, NOCHAR, NOCHAR, 0xed57, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x906d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8b77, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x95a7, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8e64, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x91e3, 0x8cde, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9360, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x98c4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x92cf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0xed5a, 0xed5b, NOCHAR, NOCHAR, NOCHAR, 0xed59, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x91cc, NOCHAR, 0x89bd, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x98c3, NOCHAR, NOCHAR, 0x98c6, 0x9b43, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x89c0, NOCHAR, 0x95b9, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed58, NOCHAR, 0xed5e, NOCHAR, + NOCHAR, NOCHAR, 0xed5c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8aa4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x89bf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9b44, NOCHAR, 0x9699, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x904e, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x95d6, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed5d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x98dc, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x98db, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x904d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x98eb, 0x98ed, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8cc2, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x937c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x98df, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x98e2, NOCHAR, 0x98e9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xed5f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x98ee, NOCHAR, NOCHAR, NOCHAR, - 0x98ef, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x98f2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x98f4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x91a4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x8e50, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed61, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9762, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x98fc, 0x9942, NOCHAR, 0x8dc2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x93ad, NOCHAR, - 0x919c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x966c, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9945, + 0xed60, 0xed62, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9949, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x994b, 0x8b56, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x994c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9951, 0x9950, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9952, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8f9e, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed63, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9744, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9955, NOCHAR, - NOCHAR, NOCHAR, 0x9957, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x88f2, NOCHAR, 0x8cb3, 0x8c5a, NOCHAR, 0x929b, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x96c6, NOCHAR, NOCHAR, 0x8e99, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x8a95, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x91b4, NOCHAR, 0x9354, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x897e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed64, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8eca, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8aa5, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x96bb, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x937e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x8de1, NOCHAR, 0x96e8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x90a6, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x929c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed65, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x967d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x899a, 0x906e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8aa0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed66, 0xed67, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x95ca, NOCHAR, NOCHAR, NOCHAR, 0x9798, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8dfc, 0x8c94, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x92e4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8a84, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9997, NOCHAR, 0x9996, NOCHAR, NOCHAR, - NOCHAR, 0x8a63, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x97ab, - NOCHAR, NOCHAR, NOCHAR, 0x9998, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9999, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x97f2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x8d85, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9675, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x99a5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x93ae, NOCHAR, NOCHAR, 0x8aa8, 0x96b1, - NOCHAR, NOCHAR, NOCHAR, 0x8f9f, NOCHAR, 0x95e5, NOCHAR, NOCHAR, - 0x90a8, 0x99a8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x99ac, NOCHAR, 0x99ad, NOCHAR, NOCHAR, 0x99ae, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x96dc, 0x99b3, NOCHAR, - NOCHAR, 0x99b4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9178, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x99bc, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8f5c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x99c1, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9250, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x99c4, - NOCHAR, 0x90e8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x99c5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x99c6, - NOCHAR, 0x88f3, 0x8aeb, NOCHAR, NOCHAR, 0x8b70, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x99c8, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed68, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed69, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xee5b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed6a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x8cfa, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8cb4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x99d0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x99d1, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8b8e, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x99d2, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9694, 0x8db3, NOCHAR, 0x9746, NOCHAR, NOCHAR, 0x8efb, + NOCHAR, NOCHAR, 0xed6b, 0xed6c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0xed6d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x99d5, NOCHAR, NOCHAR, NOCHAR, 0x8cfb, 0x8cc3, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x91fc, NOCHAR, NOCHAR, NOCHAR, 0x99d8, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed6e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x99db, 0x8944, NOCHAR, 0x96bc, NOCHAR, - NOCHAR, NOCHAR, 0x8cfc, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8c4e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8adc, 0x99df, NOCHAR, 0x99e2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9081, NOCHAR, NOCHAR, NOCHAR, 0x99dd, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8ce0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x8efc, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x99ed, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x99f1, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8cc4, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x99f2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x99ee, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9a42, 0x99f8, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9a40, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8a50, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x88f4, 0x9a43, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed6f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x99fb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9a45, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x8fa3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed70, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9a4d, 0x904f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed71, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9742, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x91c1, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9a55, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x96e2, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9a57, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9a5a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xed72, 0xed75, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9a65, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed74, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xed76, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9a62, 0x9a5b, NOCHAR, - NOCHAR, NOCHAR, 0x8a85, NOCHAR, 0x9a5f, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9a69, NOCHAR, 0x9172, - NOCHAR, NOCHAR, NOCHAR, 0x9a64, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9a6b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9a6a, - 0x89dc, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8ffa, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9158, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8a9a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8aed, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed77, 0xed78, + 0xed79, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed7a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, @@ -798,708 +648,452 @@ NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed7b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed7d, 0xed7c, + 0xed81, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed82, 0xed83, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x907d, 0x8ddd, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9aa8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9aad, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8da3, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed84, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed85, NOCHAR, 0xed86, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed87, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9082, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9ab0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9ab8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed88, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed89, 0xed8a, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x8fe9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9abc, - NOCHAR, 0x9ac0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x947c, 0x8aee, 0x9678, NOCHAR, - 0x93b0, NOCHAR, NOCHAR, 0x8c98, 0x91cd, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9ac4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8aac, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8981, NOCHAR, - NOCHAR, NOCHAR, 0x8fea, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x95bb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8996, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x906f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed8b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed8d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed8e, 0xed8f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9ad1, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x95ad, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9acf, - NOCHAR, 0x9ad4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x95c7, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9264, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8feb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9ad8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9ade, NOCHAR, 0x9ad3, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9adf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9173, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9ae3, - 0x9ae2, NOCHAR, NOCHAR, 0x9ae6, 0x9aea, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x96b2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9356, NOCHAR, NOCHAR, 0x9aed, 0x9aee, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9aef, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9af1, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9af4, NOCHAR, NOCHAR, NOCHAR, 0x967a, NOCHAR, NOCHAR, - NOCHAR, 0x9af7, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x8fa7, NOCHAR, 0x9244, NOCHAR, 0x9afb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9b41, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9444, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9764, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9baa, NOCHAR, 0x9b42, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9b45, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9685, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fa8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x88b7, NOCHAR, NOCHAR, NOCHAR, 0x88cf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8aad, - 0x9b51, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x9b4f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9b4e, 0x9050, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9b4d, NOCHAR, NOCHAR, NOCHAR, - 0x95d8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ce2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x984b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed90, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9b58, NOCHAR, NOCHAR, NOCHAR, 0x9577, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9b54, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x96b9, NOCHAR, + 0xed91, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x947d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9b5a, 0x8964, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9b6f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9b74, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8cc7, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xed92, 0xed93, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed96, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xed94, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8b58, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8b71, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8a51, 0x8983, NOCHAR, + NOCHAR, NOCHAR, 0xed97, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ee2, 0x9b83, 0x8af1, 0x93d0, - 0x96a7, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8aa6, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ab0, NOCHAR, 0x9051, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9052, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x9b8e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x91ce, 0x8ecb, 0x9b91, NOCHAR, 0x9b92, 0x9b93, NOCHAR, 0x91b8, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fad, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fae, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9b96, NOCHAR, 0x9b97, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x904b, NOCHAR, NOCHAR, NOCHAR, 0x9441, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8e72, NOCHAR, 0x9ba0, 0x9b9f, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ec6, NOCHAR, - NOCHAR, 0x9177, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed98, 0xed99, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed9a, 0xed9b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9ba8, NOCHAR, + NOCHAR, 0xed9c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x89aa, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ae2, NOCHAR, - 0x9bab, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x91d0, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9bad, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9bae, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0xed4b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed9d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x89e3, 0x9bb4, 0x9bb9, - 0x8de8, NOCHAR, NOCHAR, 0x9bc0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8a52, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9bc9, 0x9bc6, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9bca, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xed9e, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9bcf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9bd1, + NOCHAR, NOCHAR, NOCHAR, 0xed9f, 0xeda0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9bd2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9bd6, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9bd4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ade, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9bdb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8f42, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8b90, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x8cc8, NOCHAR, NOCHAR, 0x9462, 0x9be1, - 0x8af3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9be4, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9be3, 0x9be2, NOCHAR, - NOCHAR, 0x92e9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9083, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8e74, - NOCHAR, NOCHAR, NOCHAR, 0x91d1, 0x8b41, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fed, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xeda1, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0xeda2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x9be8, NOCHAR, NOCHAR, 0x9bf1, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x968b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x95bc, - 0x9bf0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9bf2, NOCHAR, NOCHAR, NOCHAR, 0x8ab2, NOCHAR, 0x8cb6, - NOCHAR, 0x9748, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8faf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fb0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x92ea, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x88c1, NOCHAR, NOCHAR, 0x9766, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9470, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x97f5, 0x984c, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8a66, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fb1, 0x9c46, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9c47, 0x9c48, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xeda4, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xeda3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x89f4, - 0x984d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x95be, NOCHAR, - NOCHAR, 0x98af, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x88f8, NOCHAR, 0x95a4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x92ed, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8cb7, 0x8cca, NOCHAR, 0x9c57, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ee3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9c5a, NOCHAR, NOCHAR, + NOCHAR, 0xeda6, 0xeda7, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9396, - NOCHAR, NOCHAR, 0x9c60, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x9c52, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0xeda5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8fb2, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x96f0, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x90aa, NOCHAR, 0x9c67, - 0x8c61, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8ce3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0xeda9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xeda8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8ce4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9053, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9c78, NOCHAR, NOCHAR, 0x9c76, - 0x8e76, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8b7d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0xedaa, 0xedab, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x97f6, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x89f8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8c62, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9749, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x88ab, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x96e3, 0x8f44, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x96f9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x88a4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9054, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedac, 0xedad, 0xedae, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x88d4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x977c, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedaf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x89af, - NOCHAR, NOCHAR, NOCHAR, 0x9ce9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9ce7, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9cec, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedb0, 0xedb1, 0xedb2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xedb5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedb3, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedb7, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, 0xedb8, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedb6, NOCHAR, NOCHAR, + 0xed47, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0xedb4, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x9ce5, NOCHAR, NOCHAR, 0x9cf0, NOCHAR, 0x9cf4, 0x9cf3, 0x9cf6, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedba, NOCHAR, + 0xedbb, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedb9, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, 0xedbd, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, 0x90ca, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x9d41, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x90ed, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9d44, - NOCHAR, NOCHAR, 0x9d46, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x965b, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8dcb, 0x9d48, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x95a5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + 0xedbe, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedbf, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x88b5, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9d51, NOCHAR, 0x8b5a, + NOCHAR, 0xedc0, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0xedc1, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x9d50, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9dab, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x9695, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9d5d, 0x9d64, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9d61, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x9d59, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x9d60, NOCHAR, NOCHAR, NOCHAR, 0x8b92, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, 0x8a87, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, 0x8c9d, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x8f45, 0x9d5c, 0x9d6c, - 0x88c2, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - 0x8b93, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, + NOCHAR, 0xedc2, 0xed4a, 0xedc3, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, - NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHAR, 0x9055, NOCHAR, NOCHAR, NOCHAR, NOCHAR, NOCHA... [truncated message content] |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 11:48:02
|
perky 03/05/26 04:48:01 Modified: tests test_encoding_cp932.py Log: Set tstring not teststring. Revision Changes Path 1.2 +2 -2 cjkcodecs/tests/test_encoding_cp932.py Index: test_encoding_cp932.py =================================================================== RCS file: /cvsroot/koco/cjkcodecs/tests/test_encoding_cp932.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- test_encoding_cp932.py 26 May 2003 11:40:41 -0000 1.1 +++ test_encoding_cp932.py 26 May 2003 11:48:01 -0000 1.2 @@ -27,7 +27,7 @@ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# $Id: test_encoding_cp932.py,v 1.1 2003/05/26 11:40:41 perky Exp $ +# $Id: test_encoding_cp932.py,v 1.2 2003/05/26 11:48:01 perky Exp $ # from test import test_support @@ -36,7 +36,7 @@ class Test_CP932(test_multibytecodec_support.TestBase, unittest.TestCase): encoding = 'cp932' - from sampletexts.shift_jis import teststring + from sampletexts.shift_jis import teststring as tstring errortests = ( # invalid bytes ("abc\x80\x80\x82\x84", "strict", None), |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 11:40:43
|
perky 03/05/26 04:40:42 Added: tests/sampletexts __init__.py euc_jp.py shift_jis.py Log: Add encoding tests for the japanese codecs. Revision Changes Path 1.1 cjkcodecs/tests/sampletexts/__init__.py <<Binary file>> 1.1 cjkcodecs/tests/sampletexts/euc_jp.py Index: euc_jp.py =================================================================== teststring = ( "\x50\x79\x74\x68\x6f\x6e\x20\xa4\xce\xb3\xab\xc8\xaf\xa4\xcf\xa1" "\xa2\x31\x39\x39\x30\x20\xc7\xaf\xa4\xb4\xa4\xed\xa4\xab\xa4\xe9" "\xb3\xab\xbb\xcf\xa4\xb5\xa4\xec\xa4\xc6\xa4\xa4\xa4\xde\xa4\xb9" "\xa1\xa3\x0a\xb3\xab\xc8\xaf\xbc\xd4\xa4\xce\x20\x47\x75\x69\x64" "\x6f\x20\x76\x61\x6e\x20\x52\x6f\x73\x73\x75\x6d\x20\xa4\xcf\xb6" "\xb5\xb0\xe9\xcd\xd1\xa4\xce\xa5\xd7\xa5\xed\xa5\xb0\xa5\xe9\xa5" "\xdf\xa5\xf3\xa5\xb0\xb8\xc0\xb8\xec\xa1\xd6\x41\x42\x43\xa1\xd7" "\xa4\xce\xb3\xab\xc8\xaf\xa4\xcb\xbb\xb2\xb2\xc3\xa4\xb7\xa4\xc6" "\xa4\xa4\xa4\xde\xa4\xb7\xa4\xbf\xa4\xac\xa1\xa2\x41\x42\x43\x20" "\xa4\xcf\xbc\xc2\xcd\xd1\xbe\xe5\xa4\xce\xcc\xdc\xc5\xaa\xa4\xcb" "\xa4\xcf\xa4\xa2\xa4\xde\xa4\xea\xc5\xac\xa4\xb7\xa4\xc6\xa4\xa4" "\xa4\xde\xa4\xbb\xa4\xf3\xa4\xc7\xa4\xb7\xa4\xbf\xa1\xa3\x0a\xa4" "\xb3\xa4\xce\xa4\xbf\xa4\xe1\xa1\xa2\x47\x75\x69\x64\x6f\x20\xa4" "\xcf\xa4\xe8\xa4\xea\xbc\xc2\xcd\xd1\xc5\xaa\xa4\xca\xa5\xd7\xa5" "\xed\xa5\xb0\xa5\xe9\xa5\xdf\xa5\xf3\xa5\xb0\xb8\xc0\xb8\xec\xa4" "\xce\xb3\xab\xc8\xaf\xa4\xf2\xb3\xab\xbb\xcf\xa4\xb7\xa1\xa2\xb1" "\xd1\xb9\xf1\x20\x42\x42\x53\x20\xca\xfc\xc1\xf7\xa4\xce\xa5\xb3" "\xa5\xe1\xa5\xc7\xa5\xa3\xc8\xd6\xc1\xc8\xa1\xd6\xa5\xe2\xa5\xf3" "\xa5\xc6\xa5\xa3\x20\xa5\xd1\xa5\xa4\xa5\xbd\xa5\xf3\xa1\xd7\xa4" "\xce\xa5\xd5\xa5\xa1\xa5\xf3\xa4\xc7\xa4\xa2\xa4\xeb\x20\x47\x75" "\x69\x64\x6f\x20\xa4\xcf\xa4\xb3\xa4\xce\xb8\xc0\xb8\xec\xa4\xf2" "\xa1\xd6\x50\x79\x74\x68\x6f\x6e\xa1\xd7\xa4\xc8\xcc\xbe\xa4\xc5" "\xa4\xb1\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3\x0a\xa4\xb3\xa4\xce\xa4" "\xe8\xa4\xa6\xa4\xca\xc7\xd8\xb7\xca\xa4\xab\xa4\xe9\xc0\xb8\xa4" "\xde\xa4\xec\xa4\xbf\x20\x50\x79\x74\x68\x6f\x6e\x20\xa4\xce\xb8" "\xc0\xb8\xec\xc0\xdf\xb7\xd7\xa4\xcf\xa1\xa2\xa1\xd6\xa5\xb7\xa5" "\xf3\xa5\xd7\xa5\xeb\xa1\xd7\xa4\xc7\xa1\xd6\xbd\xac\xc6\xc0\xa4" "\xac\xcd\xc6\xb0\xd7\xa1\xd7\xa4\xc8\xa4\xa4\xa4\xa6\xcc\xdc\xc9" "\xb8\xa4\xcb\xbd\xc5\xc5\xc0\xa4\xac\xc3\xd6\xa4\xab\xa4\xec\xa4" "\xc6\xa4\xa4\xa4\xde\xa4\xb9\xa1\xa3\x0a\xc2\xbf\xa4\xaf\xa4\xce" "\xa5\xb9\xa5\xaf\xa5\xea\xa5\xd7\xa5\xc8\xb7\xcf\xb8\xc0\xb8\xec" "\xa4\xc7\xa4\xcf\xa5\xe6\xa1\xbc\xa5\xb6\xa4\xce\xcc\xdc\xc0\xe8" "\xa4\xce\xcd\xf8\xca\xd8\xc0\xad\xa4\xf2\xcd\xa5\xc0\xe8\xa4\xb7" "\xa4\xc6\xbf\xa7\xa1\xb9\xa4\xca\xb5\xa1\xc7\xbd\xa4\xf2\xb8\xc0" "\xb8\xec\xcd\xd7\xc1\xc7\xa4\xc8\xa4\xb7\xa4\xc6\xbc\xe8\xa4\xea" "\xc6\xfe\xa4\xec\xa4\xeb\xbe\xec\xb9\xe7\xa4\xac\xc2\xbf\xa4\xa4" "\xa4\xce\xa4\xc7\xa4\xb9\xa4\xac\xa1\xa2\x50\x79\x74\x68\x6f\x6e" "\x20\xa4\xc7\xa4\xcf\xa4\xbd\xa4\xa6\xa4\xa4\xa4\xc3\xa4\xbf\xbe" "\xae\xba\xd9\xb9\xa9\xa4\xac\xc4\xc9\xb2\xc3\xa4\xb5\xa4\xec\xa4" "\xeb\xa4\xb3\xa4\xc8\xa4\xcf\xa4\xa2\xa4\xde\xa4\xea\xa4\xa2\xa4" "\xea\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3\x0a\xb8\xc0\xb8\xec\xbc\xab" "\xc2\xce\xa4\xce\xb5\xa1\xc7\xbd\xa4\xcf\xba\xc7\xbe\xae\xb8\xc2" "\xa4\xcb\xb2\xa1\xa4\xb5\xa4\xa8\xa1\xa2\xc9\xac\xcd\xd7\xa4\xca" "\xb5\xa1\xc7\xbd\xa4\xcf\xb3\xc8\xc4\xa5\xa5\xe2\xa5\xb8\xa5\xe5" "\xa1\xbc\xa5\xeb\xa4\xc8\xa4\xb7\xa4\xc6\xc4\xc9\xb2\xc3\xa4\xb9" "\xa4\xeb\xa1\xa2\xa4\xc8\xa4\xa4\xa4\xa6\xa4\xce\xa4\xac\x20\x50" "\x79\x74\x68\x6f\x6e\x20\xa4\xce\xa5\xdd\xa5\xea\xa5\xb7\xa1\xbc" "\xa4\xc7\xa4\xb9\xa1\xa3\x0a", "\x50\x79\x74\x68\x6f\x6e\x20\xe3\x81\xae\xe9\x96\x8b\xe7\x99\xba" "\xe3\x81\xaf\xe3\x80\x81\x31\x39\x39\x30\x20\xe5\xb9\xb4\xe3\x81" "\x94\xe3\x82\x8d\xe3\x81\x8b\xe3\x82\x89\xe9\x96\x8b\xe5\xa7\x8b" "\xe3\x81\x95\xe3\x82\x8c\xe3\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3" "\x81\x99\xe3\x80\x82\x0a\xe9\x96\x8b\xe7\x99\xba\xe8\x80\x85\xe3" "\x81\xae\x20\x47\x75\x69\x64\x6f\x20\x76\x61\x6e\x20\x52\x6f\x73" "\x73\x75\x6d\x20\xe3\x81\xaf\xe6\x95\x99\xe8\x82\xb2\xe7\x94\xa8" "\xe3\x81\xae\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb0\xe3\x83\xa9\xe3" "\x83\x9f\xe3\x83\xb3\xe3\x82\xb0\xe8\xa8\x80\xe8\xaa\x9e\xe3\x80" "\x8c\x41\x42\x43\xe3\x80\x8d\xe3\x81\xae\xe9\x96\x8b\xe7\x99\xba" "\xe3\x81\xab\xe5\x8f\x82\xe5\x8a\xa0\xe3\x81\x97\xe3\x81\xa6\xe3" "\x81\x84\xe3\x81\xbe\xe3\x81\x97\xe3\x81\x9f\xe3\x81\x8c\xe3\x80" "\x81\x41\x42\x43\x20\xe3\x81\xaf\xe5\xae\x9f\xe7\x94\xa8\xe4\xb8" "\x8a\xe3\x81\xae\xe7\x9b\xae\xe7\x9a\x84\xe3\x81\xab\xe3\x81\xaf" "\xe3\x81\x82\xe3\x81\xbe\xe3\x82\x8a\xe9\x81\xa9\xe3\x81\x97\xe3" "\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x81" "\xa7\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x82\x0a\xe3\x81\x93\xe3\x81" "\xae\xe3\x81\x9f\xe3\x82\x81\xe3\x80\x81\x47\x75\x69\x64\x6f\x20" "\xe3\x81\xaf\xe3\x82\x88\xe3\x82\x8a\xe5\xae\x9f\xe7\x94\xa8\xe7" "\x9a\x84\xe3\x81\xaa\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb0\xe3\x83" "\xa9\xe3\x83\x9f\xe3\x83\xb3\xe3\x82\xb0\xe8\xa8\x80\xe8\xaa\x9e" "\xe3\x81\xae\xe9\x96\x8b\xe7\x99\xba\xe3\x82\x92\xe9\x96\x8b\xe5" "\xa7\x8b\xe3\x81\x97\xe3\x80\x81\xe8\x8b\xb1\xe5\x9b\xbd\x20\x42" "\x42\x53\x20\xe6\x94\xbe\xe9\x80\x81\xe3\x81\xae\xe3\x82\xb3\xe3" "\x83\xa1\xe3\x83\x87\xe3\x82\xa3\xe7\x95\xaa\xe7\xb5\x84\xe3\x80" "\x8c\xe3\x83\xa2\xe3\x83\xb3\xe3\x83\x86\xe3\x82\xa3\x20\xe3\x83" "\x91\xe3\x82\xa4\xe3\x82\xbd\xe3\x83\xb3\xe3\x80\x8d\xe3\x81\xae" "\xe3\x83\x95\xe3\x82\xa1\xe3\x83\xb3\xe3\x81\xa7\xe3\x81\x82\xe3" "\x82\x8b\x20\x47\x75\x69\x64\x6f\x20\xe3\x81\xaf\xe3\x81\x93\xe3" "\x81\xae\xe8\xa8\x80\xe8\xaa\x9e\xe3\x82\x92\xe3\x80\x8c\x50\x79" "\x74\x68\x6f\x6e\xe3\x80\x8d\xe3\x81\xa8\xe5\x90\x8d\xe3\x81\xa5" "\xe3\x81\x91\xe3\x81\xbe\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x82\x0a" "\xe3\x81\x93\xe3\x81\xae\xe3\x82\x88\xe3\x81\x86\xe3\x81\xaa\xe8" "\x83\x8c\xe6\x99\xaf\xe3\x81\x8b\xe3\x82\x89\xe7\x94\x9f\xe3\x81" "\xbe\xe3\x82\x8c\xe3\x81\x9f\x20\x50\x79\x74\x68\x6f\x6e\x20\xe3" "\x81\xae\xe8\xa8\x80\xe8\xaa\x9e\xe8\xa8\xad\xe8\xa8\x88\xe3\x81" "\xaf\xe3\x80\x81\xe3\x80\x8c\xe3\x82\xb7\xe3\x83\xb3\xe3\x83\x97" "\xe3\x83\xab\xe3\x80\x8d\xe3\x81\xa7\xe3\x80\x8c\xe7\xbf\x92\xe5" "\xbe\x97\xe3\x81\x8c\xe5\xae\xb9\xe6\x98\x93\xe3\x80\x8d\xe3\x81" "\xa8\xe3\x81\x84\xe3\x81\x86\xe7\x9b\xae\xe6\xa8\x99\xe3\x81\xab" "\xe9\x87\x8d\xe7\x82\xb9\xe3\x81\x8c\xe7\xbd\xae\xe3\x81\x8b\xe3" "\x82\x8c\xe3\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99\xe3\x80" "\x82\x0a\xe5\xa4\x9a\xe3\x81\x8f\xe3\x81\xae\xe3\x82\xb9\xe3\x82" "\xaf\xe3\x83\xaa\xe3\x83\x97\xe3\x83\x88\xe7\xb3\xbb\xe8\xa8\x80" "\xe8\xaa\x9e\xe3\x81\xa7\xe3\x81\xaf\xe3\x83\xa6\xe3\x83\xbc\xe3" "\x82\xb6\xe3\x81\xae\xe7\x9b\xae\xe5\x85\x88\xe3\x81\xae\xe5\x88" "\xa9\xe4\xbe\xbf\xe6\x80\xa7\xe3\x82\x92\xe5\x84\xaa\xe5\x85\x88" "\xe3\x81\x97\xe3\x81\xa6\xe8\x89\xb2\xe3\x80\x85\xe3\x81\xaa\xe6" "\xa9\x9f\xe8\x83\xbd\xe3\x82\x92\xe8\xa8\x80\xe8\xaa\x9e\xe8\xa6" "\x81\xe7\xb4\xa0\xe3\x81\xa8\xe3\x81\x97\xe3\x81\xa6\xe5\x8f\x96" "\xe3\x82\x8a\xe5\x85\xa5\xe3\x82\x8c\xe3\x82\x8b\xe5\xa0\xb4\xe5" "\x90\x88\xe3\x81\x8c\xe5\xa4\x9a\xe3\x81\x84\xe3\x81\xae\xe3\x81" "\xa7\xe3\x81\x99\xe3\x81\x8c\xe3\x80\x81\x50\x79\x74\x68\x6f\x6e" "\x20\xe3\x81\xa7\xe3\x81\xaf\xe3\x81\x9d\xe3\x81\x86\xe3\x81\x84" "\xe3\x81\xa3\xe3\x81\x9f\xe5\xb0\x8f\xe7\xb4\xb0\xe5\xb7\xa5\xe3" "\x81\x8c\xe8\xbf\xbd\xe5\x8a\xa0\xe3\x81\x95\xe3\x82\x8c\xe3\x82" "\x8b\xe3\x81\x93\xe3\x81\xa8\xe3\x81\xaf\xe3\x81\x82\xe3\x81\xbe" "\xe3\x82\x8a\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3" "\x82\x93\xe3\x80\x82\x0a\xe8\xa8\x80\xe8\xaa\x9e\xe8\x87\xaa\xe4" "\xbd\x93\xe3\x81\xae\xe6\xa9\x9f\xe8\x83\xbd\xe3\x81\xaf\xe6\x9c" "\x80\xe5\xb0\x8f\xe9\x99\x90\xe3\x81\xab\xe6\x8a\xbc\xe3\x81\x95" "\xe3\x81\x88\xe3\x80\x81\xe5\xbf\x85\xe8\xa6\x81\xe3\x81\xaa\xe6" "\xa9\x9f\xe8\x83\xbd\xe3\x81\xaf\xe6\x8b\xa1\xe5\xbc\xb5\xe3\x83" "\xa2\xe3\x82\xb8\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xab\xe3\x81\xa8" "\xe3\x81\x97\xe3\x81\xa6\xe8\xbf\xbd\xe5\x8a\xa0\xe3\x81\x99\xe3" "\x82\x8b\xe3\x80\x81\xe3\x81\xa8\xe3\x81\x84\xe3\x81\x86\xe3\x81" "\xae\xe3\x81\x8c\x20\x50\x79\x74\x68\x6f\x6e\x20\xe3\x81\xae\xe3" "\x83\x9d\xe3\x83\xaa\xe3\x82\xb7\xe3\x83\xbc\xe3\x81\xa7\xe3\x81" "\x99\xe3\x80\x82\x0a") 1.1 cjkcodecs/tests/sampletexts/shift_jis.py Index: shift_jis.py =================================================================== teststring = ( "\x50\x79\x74\x68\x6f\x6e\x20\x82\xcc\x8a\x4a\x94\xad\x82\xcd\x81" "\x41\x31\x39\x39\x30\x20\x94\x4e\x82\xb2\x82\xeb\x82\xa9\x82\xe7" "\x8a\x4a\x8e\x6e\x82\xb3\x82\xea\x82\xc4\x82\xa2\x82\xdc\x82\xb7" "\x81\x42\x0a\x8a\x4a\x94\xad\x8e\xd2\x82\xcc\x20\x47\x75\x69\x64" "\x6f\x20\x76\x61\x6e\x20\x52\x6f\x73\x73\x75\x6d\x20\x82\xcd\x8b" "\xb3\x88\xe7\x97\x70\x82\xcc\x83\x76\x83\x8d\x83\x4f\x83\x89\x83" "\x7e\x83\x93\x83\x4f\x8c\xbe\x8c\xea\x81\x75\x41\x42\x43\x81\x76" "\x82\xcc\x8a\x4a\x94\xad\x82\xc9\x8e\x51\x89\xc1\x82\xb5\x82\xc4" "\x82\xa2\x82\xdc\x82\xb5\x82\xbd\x82\xaa\x81\x41\x41\x42\x43\x20" "\x82\xcd\x8e\xc0\x97\x70\x8f\xe3\x82\xcc\x96\xda\x93\x49\x82\xc9" "\x82\xcd\x82\xa0\x82\xdc\x82\xe8\x93\x4b\x82\xb5\x82\xc4\x82\xa2" "\x82\xdc\x82\xb9\x82\xf1\x82\xc5\x82\xb5\x82\xbd\x81\x42\x0a\x82" "\xb1\x82\xcc\x82\xbd\x82\xdf\x81\x41\x47\x75\x69\x64\x6f\x20\x82" "\xcd\x82\xe6\x82\xe8\x8e\xc0\x97\x70\x93\x49\x82\xc8\x83\x76\x83" "\x8d\x83\x4f\x83\x89\x83\x7e\x83\x93\x83\x4f\x8c\xbe\x8c\xea\x82" "\xcc\x8a\x4a\x94\xad\x82\xf0\x8a\x4a\x8e\x6e\x82\xb5\x81\x41\x89" "\x70\x8d\x91\x20\x42\x42\x53\x20\x95\xfa\x91\x97\x82\xcc\x83\x52" "\x83\x81\x83\x66\x83\x42\x94\xd4\x91\x67\x81\x75\x83\x82\x83\x93" "\x83\x65\x83\x42\x20\x83\x70\x83\x43\x83\x5c\x83\x93\x81\x76\x82" "\xcc\x83\x74\x83\x40\x83\x93\x82\xc5\x82\xa0\x82\xe9\x20\x47\x75" "\x69\x64\x6f\x20\x82\xcd\x82\xb1\x82\xcc\x8c\xbe\x8c\xea\x82\xf0" "\x81\x75\x50\x79\x74\x68\x6f\x6e\x81\x76\x82\xc6\x96\xbc\x82\xc3" "\x82\xaf\x82\xdc\x82\xb5\x82\xbd\x81\x42\x0a\x82\xb1\x82\xcc\x82" "\xe6\x82\xa4\x82\xc8\x94\x77\x8c\x69\x82\xa9\x82\xe7\x90\xb6\x82" "\xdc\x82\xea\x82\xbd\x20\x50\x79\x74\x68\x6f\x6e\x20\x82\xcc\x8c" "\xbe\x8c\xea\x90\xdd\x8c\x76\x82\xcd\x81\x41\x81\x75\x83\x56\x83" "\x93\x83\x76\x83\x8b\x81\x76\x82\xc5\x81\x75\x8f\x4b\x93\xbe\x82" "\xaa\x97\x65\x88\xd5\x81\x76\x82\xc6\x82\xa2\x82\xa4\x96\xda\x95" "\x57\x82\xc9\x8f\x64\x93\x5f\x82\xaa\x92\x75\x82\xa9\x82\xea\x82" "\xc4\x82\xa2\x82\xdc\x82\xb7\x81\x42\x0a\x91\xbd\x82\xad\x82\xcc" "\x83\x58\x83\x4e\x83\x8a\x83\x76\x83\x67\x8c\x6e\x8c\xbe\x8c\xea" "\x82\xc5\x82\xcd\x83\x86\x81\x5b\x83\x55\x82\xcc\x96\xda\x90\xe6" "\x82\xcc\x97\x98\x95\xd6\x90\xab\x82\xf0\x97\x44\x90\xe6\x82\xb5" "\x82\xc4\x90\x46\x81\x58\x82\xc8\x8b\x40\x94\x5c\x82\xf0\x8c\xbe" "\x8c\xea\x97\x76\x91\x66\x82\xc6\x82\xb5\x82\xc4\x8e\xe6\x82\xe8" "\x93\xfc\x82\xea\x82\xe9\x8f\xea\x8d\x87\x82\xaa\x91\xbd\x82\xa2" "\x82\xcc\x82\xc5\x82\xb7\x82\xaa\x81\x41\x50\x79\x74\x68\x6f\x6e" "\x20\x82\xc5\x82\xcd\x82\xbb\x82\xa4\x82\xa2\x82\xc1\x82\xbd\x8f" "\xac\x8d\xd7\x8d\x48\x82\xaa\x92\xc7\x89\xc1\x82\xb3\x82\xea\x82" "\xe9\x82\xb1\x82\xc6\x82\xcd\x82\xa0\x82\xdc\x82\xe8\x82\xa0\x82" "\xe8\x82\xdc\x82\xb9\x82\xf1\x81\x42\x0a\x8c\xbe\x8c\xea\x8e\xa9" "\x91\xcc\x82\xcc\x8b\x40\x94\x5c\x82\xcd\x8d\xc5\x8f\xac\x8c\xc0" "\x82\xc9\x89\x9f\x82\xb3\x82\xa6\x81\x41\x95\x4b\x97\x76\x82\xc8" "\x8b\x40\x94\x5c\x82\xcd\x8a\x67\x92\xa3\x83\x82\x83\x57\x83\x85" "\x81\x5b\x83\x8b\x82\xc6\x82\xb5\x82\xc4\x92\xc7\x89\xc1\x82\xb7" "\x82\xe9\x81\x41\x82\xc6\x82\xa2\x82\xa4\x82\xcc\x82\xaa\x20\x50" "\x79\x74\x68\x6f\x6e\x20\x82\xcc\x83\x7c\x83\x8a\x83\x56\x81\x5b" "\x82\xc5\x82\xb7\x81\x42\x0a", "\x50\x79\x74\x68\x6f\x6e\x20\xe3\x81\xae\xe9\x96\x8b\xe7\x99\xba" "\xe3\x81\xaf\xe3\x80\x81\x31\x39\x39\x30\x20\xe5\xb9\xb4\xe3\x81" "\x94\xe3\x82\x8d\xe3\x81\x8b\xe3\x82\x89\xe9\x96\x8b\xe5\xa7\x8b" "\xe3\x81\x95\xe3\x82\x8c\xe3\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3" "\x81\x99\xe3\x80\x82\x0a\xe9\x96\x8b\xe7\x99\xba\xe8\x80\x85\xe3" "\x81\xae\x20\x47\x75\x69\x64\x6f\x20\x76\x61\x6e\x20\x52\x6f\x73" "\x73\x75\x6d\x20\xe3\x81\xaf\xe6\x95\x99\xe8\x82\xb2\xe7\x94\xa8" "\xe3\x81\xae\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb0\xe3\x83\xa9\xe3" "\x83\x9f\xe3\x83\xb3\xe3\x82\xb0\xe8\xa8\x80\xe8\xaa\x9e\xe3\x80" "\x8c\x41\x42\x43\xe3\x80\x8d\xe3\x81\xae\xe9\x96\x8b\xe7\x99\xba" "\xe3\x81\xab\xe5\x8f\x82\xe5\x8a\xa0\xe3\x81\x97\xe3\x81\xa6\xe3" "\x81\x84\xe3\x81\xbe\xe3\x81\x97\xe3\x81\x9f\xe3\x81\x8c\xe3\x80" "\x81\x41\x42\x43\x20\xe3\x81\xaf\xe5\xae\x9f\xe7\x94\xa8\xe4\xb8" "\x8a\xe3\x81\xae\xe7\x9b\xae\xe7\x9a\x84\xe3\x81\xab\xe3\x81\xaf" "\xe3\x81\x82\xe3\x81\xbe\xe3\x82\x8a\xe9\x81\xa9\xe3\x81\x97\xe3" "\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x81" "\xa7\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x82\x0a\xe3\x81\x93\xe3\x81" "\xae\xe3\x81\x9f\xe3\x82\x81\xe3\x80\x81\x47\x75\x69\x64\x6f\x20" "\xe3\x81\xaf\xe3\x82\x88\xe3\x82\x8a\xe5\xae\x9f\xe7\x94\xa8\xe7" "\x9a\x84\xe3\x81\xaa\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb0\xe3\x83" "\xa9\xe3\x83\x9f\xe3\x83\xb3\xe3\x82\xb0\xe8\xa8\x80\xe8\xaa\x9e" "\xe3\x81\xae\xe9\x96\x8b\xe7\x99\xba\xe3\x82\x92\xe9\x96\x8b\xe5" "\xa7\x8b\xe3\x81\x97\xe3\x80\x81\xe8\x8b\xb1\xe5\x9b\xbd\x20\x42" "\x42\x53\x20\xe6\x94\xbe\xe9\x80\x81\xe3\x81\xae\xe3\x82\xb3\xe3" "\x83\xa1\xe3\x83\x87\xe3\x82\xa3\xe7\x95\xaa\xe7\xb5\x84\xe3\x80" "\x8c\xe3\x83\xa2\xe3\x83\xb3\xe3\x83\x86\xe3\x82\xa3\x20\xe3\x83" "\x91\xe3\x82\xa4\xe3\x82\xbd\xe3\x83\xb3\xe3\x80\x8d\xe3\x81\xae" "\xe3\x83\x95\xe3\x82\xa1\xe3\x83\xb3\xe3\x81\xa7\xe3\x81\x82\xe3" "\x82\x8b\x20\x47\x75\x69\x64\x6f\x20\xe3\x81\xaf\xe3\x81\x93\xe3" "\x81\xae\xe8\xa8\x80\xe8\xaa\x9e\xe3\x82\x92\xe3\x80\x8c\x50\x79" "\x74\x68\x6f\x6e\xe3\x80\x8d\xe3\x81\xa8\xe5\x90\x8d\xe3\x81\xa5" "\xe3\x81\x91\xe3\x81\xbe\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x82\x0a" "\xe3\x81\x93\xe3\x81\xae\xe3\x82\x88\xe3\x81\x86\xe3\x81\xaa\xe8" "\x83\x8c\xe6\x99\xaf\xe3\x81\x8b\xe3\x82\x89\xe7\x94\x9f\xe3\x81" "\xbe\xe3\x82\x8c\xe3\x81\x9f\x20\x50\x79\x74\x68\x6f\x6e\x20\xe3" "\x81\xae\xe8\xa8\x80\xe8\xaa\x9e\xe8\xa8\xad\xe8\xa8\x88\xe3\x81" "\xaf\xe3\x80\x81\xe3\x80\x8c\xe3\x82\xb7\xe3\x83\xb3\xe3\x83\x97" "\xe3\x83\xab\xe3\x80\x8d\xe3\x81\xa7\xe3\x80\x8c\xe7\xbf\x92\xe5" "\xbe\x97\xe3\x81\x8c\xe5\xae\xb9\xe6\x98\x93\xe3\x80\x8d\xe3\x81" "\xa8\xe3\x81\x84\xe3\x81\x86\xe7\x9b\xae\xe6\xa8\x99\xe3\x81\xab" "\xe9\x87\x8d\xe7\x82\xb9\xe3\x81\x8c\xe7\xbd\xae\xe3\x81\x8b\xe3" "\x82\x8c\xe3\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99\xe3\x80" "\x82\x0a\xe5\xa4\x9a\xe3\x81\x8f\xe3\x81\xae\xe3\x82\xb9\xe3\x82" "\xaf\xe3\x83\xaa\xe3\x83\x97\xe3\x83\x88\xe7\xb3\xbb\xe8\xa8\x80" "\xe8\xaa\x9e\xe3\x81\xa7\xe3\x81\xaf\xe3\x83\xa6\xe3\x83\xbc\xe3" "\x82\xb6\xe3\x81\xae\xe7\x9b\xae\xe5\x85\x88\xe3\x81\xae\xe5\x88" "\xa9\xe4\xbe\xbf\xe6\x80\xa7\xe3\x82\x92\xe5\x84\xaa\xe5\x85\x88" "\xe3\x81\x97\xe3\x81\xa6\xe8\x89\xb2\xe3\x80\x85\xe3\x81\xaa\xe6" "\xa9\x9f\xe8\x83\xbd\xe3\x82\x92\xe8\xa8\x80\xe8\xaa\x9e\xe8\xa6" "\x81\xe7\xb4\xa0\xe3\x81\xa8\xe3\x81\x97\xe3\x81\xa6\xe5\x8f\x96" "\xe3\x82\x8a\xe5\x85\xa5\xe3\x82\x8c\xe3\x82\x8b\xe5\xa0\xb4\xe5" "\x90\x88\xe3\x81\x8c\xe5\xa4\x9a\xe3\x81\x84\xe3\x81\xae\xe3\x81" "\xa7\xe3\x81\x99\xe3\x81\x8c\xe3\x80\x81\x50\x79\x74\x68\x6f\x6e" "\x20\xe3\x81\xa7\xe3\x81\xaf\xe3\x81\x9d\xe3\x81\x86\xe3\x81\x84" "\xe3\x81\xa3\xe3\x81\x9f\xe5\xb0\x8f\xe7\xb4\xb0\xe5\xb7\xa5\xe3" "\x81\x8c\xe8\xbf\xbd\xe5\x8a\xa0\xe3\x81\x95\xe3\x82\x8c\xe3\x82" "\x8b\xe3\x81\x93\xe3\x81\xa8\xe3\x81\xaf\xe3\x81\x82\xe3\x81\xbe" "\xe3\x82\x8a\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3" "\x82\x93\xe3\x80\x82\x0a\xe8\xa8\x80\xe8\xaa\x9e\xe8\x87\xaa\xe4" "\xbd\x93\xe3\x81\xae\xe6\xa9\x9f\xe8\x83\xbd\xe3\x81\xaf\xe6\x9c" "\x80\xe5\xb0\x8f\xe9\x99\x90\xe3\x81\xab\xe6\x8a\xbc\xe3\x81\x95" "\xe3\x81\x88\xe3\x80\x81\xe5\xbf\x85\xe8\xa6\x81\xe3\x81\xaa\xe6" "\xa9\x9f\xe8\x83\xbd\xe3\x81\xaf\xe6\x8b\xa1\xe5\xbc\xb5\xe3\x83" "\xa2\xe3\x82\xb8\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xab\xe3\x81\xa8" "\xe3\x81\x97\xe3\x81\xa6\xe8\xbf\xbd\xe5\x8a\xa0\xe3\x81\x99\xe3" "\x82\x8b\xe3\x80\x81\xe3\x81\xa8\xe3\x81\x84\xe3\x81\x86\xe3\x81" "\xae\xe3\x81\x8c\x20\x50\x79\x74\x68\x6f\x6e\x20\xe3\x81\xae\xe3" "\x83\x9d\xe3\x83\xaa\xe3\x82\xb7\xe3\x83\xbc\xe3\x81\xa7\xe3\x81" "\x99\xe3\x80\x82\x0a") |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 11:40:43
|
perky 03/05/26 04:40:41 Modified: tests test_multibytecodec_support.py Added: tests test_encoding_cp932.py test_encoding_euc_jp.py test_encoding_shift_jis.py Log: Add encoding tests for the japanese codecs. Revision Changes Path 1.2 +2 -1 cjkcodecs/tests/test_multibytecodec_support.py Index: test_multibytecodec_support.py =================================================================== RCS file: /cvsroot/koco/cjkcodecs/tests/test_multibytecodec_support.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- test_multibytecodec_support.py 26 May 2003 11:10:50 -0000 1.1 +++ test_multibytecodec_support.py 26 May 2003 11:40:41 -0000 1.2 @@ -27,11 +27,12 @@ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# $Id: test_multibytecodec_support.py,v 1.1 2003/05/26 11:10:50 perky Exp $ +# $Id: test_multibytecodec_support.py,v 1.2 2003/05/26 11:40:41 perky Exp $ # import sys, codecs import unittest +from StringIO import StringIO class TestBase: encoding = '' # codec name 1.1 cjkcodecs/tests/test_encoding_cp932.py Index: test_encoding_cp932.py =================================================================== #!/usr/bin/env python # # test_encoding_cp932.py: Encoding test for the CP932 codec # # Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $Id: test_encoding_cp932.py,v 1.1 2003/05/26 11:40:41 perky Exp $ # from test import test_support import test_multibytecodec_support import unittest class Test_CP932(test_multibytecodec_support.TestBase, unittest.TestCase): encoding = 'cp932' from sampletexts.shift_jis import teststring errortests = ( # invalid bytes ("abc\x80\x80\x82\x84", "strict", None), ("abc\xf8", "strict", None), ("abc\x80\x80\x82\x84", "replace", u"abc\ufffd\uff44"), ("abc\x80\x80\x82\x84\x88", "replace", u"abc\ufffd\uff44\ufffd"), ("abc\x80\x80\x82\x84", "ignore", u"abc\uff44"), # sjis vs cp932 ("\\\x7e", "replace", u"\\\x7e"), ("\x81\x5f\x81\x61\x81\x7c", "replace", u"\uff3c\u2225\uff0d"), ) def test_main(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(Test_CP932)) test_support.run_suite(suite) if __name__ == "__main__": test_main() # ex: ts=8 sts=4 et 1.1 cjkcodecs/tests/test_encoding_euc_jp.py Index: test_encoding_euc_jp.py =================================================================== #!/usr/bin/env python # # test_encoding_euc_jp.py: Encoding test for the EUC-JP codec # # Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $Id: test_encoding_euc_jp.py,v 1.1 2003/05/26 11:40:41 perky Exp $ # from test import test_support import test_multibytecodec_support import unittest class Test_EUC_JP(test_multibytecodec_support.TestBase, unittest.TestCase): encoding = 'euc_jp' from sampletexts.euc_jp import teststring as tstring errortests = ( # invalid bytes ("abc\x80\x80\xc1\xc4", "strict", None), ("abc\xc8", "strict", None), ("abc\x80\x80\xc1\xc4", "replace", u"abc\ufffd\u7956"), ("abc\x80\x80\xc1\xc4\xc8", "replace", u"abc\ufffd\u7956\ufffd"), ("abc\x80\x80\xc1\xc4", "ignore", u"abc\u7956"), ("abc\x8f\x83\x83", "replace", u"abc\ufffd"), ("\xc1\x64", "strict", None), ) def test_main(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(Test_EUC_JP)) test_support.run_suite(suite) if __name__ == "__main__": test_main() # ex: ts=8 sts=4 et 1.1 cjkcodecs/tests/test_encoding_shift_jis.py Index: test_encoding_shift_jis.py =================================================================== #!/usr/bin/env python # # test_encoding_shift_jis.py: Encoding test for the Shift-JIS codec # # Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $Id: test_encoding_shift_jis.py,v 1.1 2003/05/26 11:40:41 perky Exp $ # from test import test_support import test_multibytecodec_support import unittest class Test_SJIS(test_multibytecodec_support.TestBase, unittest.TestCase): encoding = 'shift_jis' from sampletexts.shift_jis import teststring errortests = ( # invalid bytes ("abc\x80\x80\x82\x84", "strict", None), ("abc\xf8", "strict", None), ("abc\x80\x80\x82\x84", "replace", u"abc\ufffd\uff44"), ("abc\x80\x80\x82\x84\x88", "replace", u"abc\ufffd\uff44\ufffd"), ("abc\x80\x80\x82\x84def", "ignore", u"abc\uff44def"), # sjis vs cp932 ("\\\x7e", "replace", u"\xa5\u203e"), ("\x81\x5f\x81\x61\x81\x7c", "replace", u"\x5c\u2016\u2212"), ) def test_main(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(Test_SJIS)) test_support.run_suite(suite) if __name__ == "__main__": test_main() # ex: ts=8 sts=4 et |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 11:34:11
|
perky 03/05/26 04:34:10 cjkcodecs/tests/sampletexts - New directory |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 11:10:51
|
perky 03/05/26 04:10:50 Added: tests test_mapping_cp932.py test_mapping_euc_jp.py test_mapping_shift_jis.py test_multibytecodec_support.py Log: Add unittests for japanese encodings. Revision Changes Path 1.1 cjkcodecs/tests/test_mapping_cp932.py Index: test_mapping_cp932.py =================================================================== #!/usr/bin/env python # # test_mapping_cp932.py: Mapping test for CP932 codec # # Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $Id: test_mapping_cp932.py,v 1.1 2003/05/26 11:10:50 perky Exp $ # from test import test_support import test_multibytecodec_support import os, unittest class TestCP932Map(test_multibytecodec_support.TestBase_Mapping, unittest.TestCase): encoding = 'cp932' mapfilename = 'CP932.TXT' def test_main(): if not os.path.exists('CP932.TXT'): raise test_support.TestSkipped( 'CP932.TXT not found, download from http://www.unicode.' 'org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT') suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestCP932Map)) test_support.run_suite(suite) if __name__ == "__main__": test_main() # ex: ts=8 sts=4 et 1.1 cjkcodecs/tests/test_mapping_euc_jp.py Index: test_mapping_euc_jp.py =================================================================== #!/usr/bin/env python # # test_mapping_euc_jp.py: Mapping test for EUC-JP codec # # Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $Id: test_mapping_euc_jp.py,v 1.1 2003/05/26 11:10:50 perky Exp $ # from test import test_support import test_multibytecodec_support import sys, codecs, os import unittest class TestEUCJPMap(test_multibytecodec_support.TestBase_Mapping, unittest.TestCase): encoding = 'euc_jp' mapfilename = 'EUC-JP.TXT' def test_main(): if not os.path.exists('EUC-JP.TXT'): raise test_support.TestSkipped( 'EUC-JP.TXT not found, download from http://people.freebsd' '.org/~perky/i18n/EUC-JP.TXT') suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestEUCJPMap)) test_support.run_suite(suite) if __name__ == "__main__": test_main() # ex: ts=8 sts=4 et 1.1 cjkcodecs/tests/test_mapping_shift_jis.py Index: test_mapping_shift_jis.py =================================================================== #!/usr/bin/env python # # test_mapping_shift_jis.py: Mapping test for SHIFT-JIS codec # # Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $Id: test_mapping_shift_jis.py,v 1.1 2003/05/26 11:10:50 perky Exp $ # from test import test_support import test_multibytecodec_support import sys, codecs, os import unittest class TestSJISMap(test_multibytecodec_support.TestBase_Mapping, unittest.TestCase): encoding = 'shift_jis' mapfilename = 'SHIFTJIS.TXT' def test_main(): if not os.path.exists('SHIFTJIS.TXT'): raise test_support.TestSkipped( 'SHIFTJIS.TXT not found, download from http://www.unicode.' 'org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT') suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestSJISMap)) test_support.run_suite(suite) if __name__ == "__main__": test_main() # ex: ts=8 sts=4 et 1.1 cjkcodecs/tests/test_multibytecodec_support.py Index: test_multibytecodec_support.py =================================================================== #!/usr/bin/env python # # test_multibytecodec_support.py: Common Unittest Routines # # Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $Id: test_multibytecodec_support.py,v 1.1 2003/05/26 11:10:50 perky Exp $ # import sys, codecs import unittest class TestBase: encoding = '' # codec name codec = None # codec tuple (with 4 elements) tstring = '' # string to test StreamReader errortests = None # must set. error test tuple roundtriptest = 1 # set if roundtrip is possible with unicode has_iso10646 = 0 # set if this encoding contains whole iso10646 map def setUp(self): if self.codec is None: self.codec = codecs.lookup(self.encoding) self.encode, self.decode, self.reader, self.writer = self.codec def test_chunkcoding(self): for native, utf8 in zip(*[StringIO(f).readlines() for f in self.tstring]): u = self.decode(native)[0] self.assertEqual(u, utf8.decode('utf-8')) if self.roundtriptest: self.assertEqual(native, self.encode(u)[0]) def test_errorhandle(self): for source, scheme, expected in self.errortests: if type(source) == type(''): func = self.decode else: func = self.encode if expected: result = func(source, scheme)[0] self.assertEqual(result, expected) else: self.assertRaises(UnicodeError, func, source, scheme) def test_xmlcharrefreplace(self): if self.has_iso10646: return s = u"\u0b13\u0b23\u0b60 nd eggs" self.assertEqual( self.encode(s, "xmlcharrefreplace")[0], "ଓଣୠ nd eggs" ) def test_customreplace(self): if self.has_iso10646: return import htmlentitydefs names = {} for (key, value) in htmlentitydefs.entitydefs.items(): if len(value)==1: names[value.decode('latin-1')] = self.decode(key)[0] else: names[unichr(int(value[2:-1]))] = self.decode(key)[0] def xmlcharnamereplace(exc): if not isinstance(exc, UnicodeEncodeError): raise TypeError("don't know how to handle %r" % exc) l = [] for c in exc.object[exc.start:exc.end]: try: l.append(u"&%s;" % names[c]) except KeyError: l.append(u"&#%d;" % ord(c)) return (u"".join(l), exc.end) codecs.register_error( "test.xmlcharnamereplace", xmlcharnamereplace) sin = u"\xab\u211c\xbb = \u2329\u1234\u232a" sout = "«ℜ» = ⟨ሴ⟩" self.assertEqual(self.encode(sin, "test.xmlcharnamereplace")[0], sout) def test_streamreader(self): UTF8Writer = codecs.lookup('utf-8')[3] for name in ["read", "readline", "readlines"]: for sizehint in [None, -1] + range(1, 33) + \ [64, 128, 256, 512, 1024]: istream = self.reader(StringIO(self.tstring[0])) ostream = UTF8Writer(StringIO()) func = getattr(istream, name) while 1: data = func(sizehint) if not data: break if name == "readlines": ostream.writelines(data) else: ostream.write(data) self.assertEqual(ostream.getvalue(), self.tstring[1]) class TestBase_Mapping(unittest.TestCase): pass_enctest = [] pass_dectest = [] def test_mapping(self): unichrs = lambda s: u''.join(map(unichr, map(eval, s.split('+')))) urt_wa = {} for line in open(self.mapfilename): if not line: break data = line.split('#')[0].strip().split() if len(data) != 2: continue csetval = eval(data[0]) if csetval <= 0x7F: csetch = chr(csetval & 0xff) elif csetval >= 0x1000000: csetch = chr(csetval >> 24) + chr((csetval >> 16) & 0xff) + \ chr((csetval >> 8) & 0xff) + chr(csetval & 0xff) elif csetval >= 0x10000: csetch = chr(csetval >> 16) + \ chr((csetval >> 8) & 0xff) + chr(csetval & 0xff) elif csetval >= 0x100: csetch = chr(csetval >> 8) + chr(csetval & 0xff) else: continue unich = unichrs(data[1]) if ord(unich) == 0xfffd or urt_wa.has_key(unich): continue urt_wa[unich] = csetch if (csetch, unich) not in self.pass_enctest: self.assertEqual(unich.encode(self.encoding), csetch) if (csetch, unich) not in self.pass_dectest: self.assertEqual(unicode(csetch, self.encoding), unich) # ex: ts=8 sts=4 et |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 08:11:58
|
perky 03/05/26 01:11:57 cjkcodecs/tests - New directory |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 07:57:53
|
perky 03/05/26 00:57:52 Added: src _cp932.c Log: Add cp932 codec. Revision Changes Path 1.1 cjkcodecs/src/_cp932.c Index: _cp932.c =================================================================== /* * _cp932.c: the CP932 codec * * Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $Id: _cp932.c,v 1.1 2003/05/26 07:57:52 perky Exp $ */ #include "codeccommon.h" ENCMAP(jisxcommon) ENCMAP(cp932ext) DECMAP(jisx0208) DECMAP(cp932ext) ENCODER(cp932) { while (inleft > 0) { Py_UNICODE c = **inbuf; DBCHAR code; unsigned char c1, c2; if (c < 0x80) { RESERVE_OUTBUF(1) **outbuf = (unsigned char)c; NEXT(1, 1) continue; } else if (c >= 0xff61 && c <= 0xff9f) { RESERVE_OUTBUF(1) **outbuf = (unsigned char)(c - 0xfec0); NEXT(1, 1) continue; } UCS4INVALID(c) RESERVE_OUTBUF(2) TRYMAP_ENC(cp932ext, code, c) { (*outbuf)[0] = code >> 8; (*outbuf)[1] = code & 0xff; } else TRYMAP_ENC(jisxcommon, code, c) { if (code & 0x8000) /* MSB set: JIS X 0212 */ return 1; /* JIS X 0208 */ c1 = code >> 8; c2 = code & 0xff; c2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21); c1 = (c1 - 0x21) >> 1; (*outbuf)[0] = c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1; (*outbuf)[1] = c2 < 0x3f ? c2 + 0x40 : c2 + 0x41; } else if (c >= 0xe000 && c < 0xe758) { /* User-defined area */ c1 = (Py_UNICODE)(c - 0xe000) / 188; c2 = (Py_UNICODE)(c - 0xe000) % 188; (*outbuf)[0] = c1 + 0xf0; (*outbuf)[1] = (c2 < 0x3f ? c2 + 0x40 : c2 + 0x41); } else return 1; NEXT(1, 2) } return 0; } DECODER(cp932) { while (inleft > 0) { unsigned char c = **inbuf, c2; Py_UNICODE code; RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; NEXT(1, 1) continue; } RESERVE_INBUF(2) c2 = (*inbuf)[1]; TRYMAP_DEC(cp932ext, code, c, c2); else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)) { if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc) return 2; c = (c < 0xe0 ? c - 0x81 : c - 0xc1); c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41); c = (2 * c + (c2 < 0x5e ? 0 : 1) + 0x21); c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21; TRYMAP_DEC(jisx0208, code, c, c2); else return 2; } else if (c >= 0xf0 && c <= 0xf9) { if ((c2 >= 0x40 && c2 <= 0x7e) || (c2 >= 0x80 && c2 <= 0xfc)) code = 0xe000 + 188 * (c - 0xf0) + (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41); else return 2; } else return 2; **outbuf = code; NEXT(2, 1) } return 0; } BEGIN_CODEC_REGISTRY(cp932) MAPOPEN(ja_JP) IMPORTMAP_DEC(jisx0208) IMPORTMAP_ENCDEC(cp932ext) IMPORTMAP_ENC(jisxcommon) MAPCLOSE() END_CODEC_REGISTRY(cp932) /* * ex: ts=8 sts=4 et */ |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 07:57:53
|
perky 03/05/26 00:57:52 Modified: . setup.py Log: Add cp932 codec. Revision Changes Path 1.13 +2 -2 cjkcodecs/setup.py Index: setup.py =================================================================== RCS file: /cvsroot/koco/cjkcodecs/setup.py,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- setup.py 26 May 2003 06:21:39 -0000 1.12 +++ setup.py 26 May 2003 07:57:51 -0000 1.13 @@ -27,7 +27,7 @@ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# $Id: setup.py,v 1.12 2003/05/26 06:21:39 perky Exp $ +# $Id: setup.py,v 1.13 2003/05/26 07:57:51 perky Exp $ # import sys @@ -36,7 +36,7 @@ extensions = [] encodings = { -'ja_JP': ['shift_jis', 'euc_jp'], #['cp932'], +'ja_JP': ['shift_jis', 'cp932', 'euc_jp'], 'ko_KR': ['euc_kr', 'cp949'], 'zh_CN': ['gb2312', 'gbk', 'gb18030'], 'zh_TW': ['big5', 'cp950'] |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 07:37:11
|
perky 03/05/26 00:37:10 Modified: src _big5.c _cp949.c _cp950.c _euc_jp.c _euc_kr.c _gb18030.c _gb2312.c _gbk.c _shift_jis.c codeccommon.h Log: Allow coding true block for TRYMAP_* Revision Changes Path 1.4 +3 -3 cjkcodecs/src/_big5.c Index: _big5.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_big5.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- _big5.c 22 May 2003 05:36:28 -0000 1.3 +++ _big5.c 26 May 2003 07:37:09 -0000 1.4 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _big5.c,v 1.3 2003/05/22 05:36:28 perky Exp $ + * $Id: _big5.c,v 1.4 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -50,7 +50,7 @@ RESERVE_OUTBUF(2) - TRYMAP_ENC(big5, code, c) + TRYMAP_ENC(big5, code, c); else return 1; (*outbuf)[0] = code >> 8; @@ -76,7 +76,7 @@ } RESERVE_INBUF(2) - TRYMAP_DEC(big5, code, c, (*inbuf)[1]) + TRYMAP_DEC(big5, code, c, (*inbuf)[1]); else return 2; **outbuf = code; 1.8 +4 -4 cjkcodecs/src/_cp949.c Index: _cp949.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_cp949.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- _cp949.c 22 May 2003 05:36:28 -0000 1.7 +++ _cp949.c 26 May 2003 07:37:09 -0000 1.8 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _cp949.c,v 1.7 2003/05/22 05:36:28 perky Exp $ + * $Id: _cp949.c,v 1.8 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -50,7 +50,7 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(cp949, code, c) + TRYMAP_ENC(cp949, code, c); else return 1; (*outbuf)[0] = (code >> 8) | 0x80; @@ -79,8 +79,8 @@ } RESERVE_INBUF(2) - TRYMAP_DEC(ksx1001, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) - else TRYMAP_DEC(cp949ext, code, c, (*inbuf)[1]) + TRYMAP_DEC(ksx1001, code, c ^ 0x80, (*inbuf)[1] ^ 0x80); + else TRYMAP_DEC(cp949ext, code, c, (*inbuf)[1]); else return 2; **outbuf = code; 1.4 +5 -5 cjkcodecs/src/_cp950.c Index: _cp950.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_cp950.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- _cp950.c 22 May 2003 05:36:28 -0000 1.3 +++ _cp950.c 26 May 2003 07:37:09 -0000 1.4 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _cp950.c,v 1.3 2003/05/22 05:36:28 perky Exp $ + * $Id: _cp950.c,v 1.4 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -51,8 +51,8 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(cp950ext, code, c) - else TRYMAP_ENC(big5, code, c) + TRYMAP_ENC(cp950ext, code, c); + else TRYMAP_ENC(big5, code, c); else return 1; (*outbuf)[0] = code >> 8; @@ -79,8 +79,8 @@ RESERVE_INBUF(2) - TRYMAP_DEC(cp950ext, code, c, (*inbuf)[1]) - else TRYMAP_DEC(big5, code, c, (*inbuf)[1]) + TRYMAP_DEC(cp950ext, code, c, (*inbuf)[1]); + else TRYMAP_DEC(big5, code, c, (*inbuf)[1]); else return 2; **outbuf = code; 1.2 +4 -4 cjkcodecs/src/_euc_jp.c Index: _euc_jp.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_euc_jp.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- _euc_jp.c 26 May 2003 06:21:40 -0000 1.1 +++ _euc_jp.c 26 May 2003 07:37:09 -0000 1.2 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _euc_jp.c,v 1.1 2003/05/26 06:21:40 perky Exp $ + * $Id: _euc_jp.c,v 1.2 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -50,7 +50,7 @@ UCS4INVALID(c) - TRYMAP_ENC(jisxcommon, code, c) + TRYMAP_ENC(jisxcommon, code, c); else if (c >= 0xff61 && c <= 0xff9f) { /* JIS X 0201 half-width katakana */ RESERVE_OUTBUF(2) @@ -127,7 +127,7 @@ c3 = (*inbuf)[2]; if (c2 < 0xf5) { /* JIS X 0212 */ - TRYMAP_DEC(jisx0212, **outbuf, c2 ^ 0x80, c3 ^ 0x80) + TRYMAP_DEC(jisx0212, **outbuf, c2 ^ 0x80, c3 ^ 0x80); else return 3; } else { /* User-defined area 2 */ @@ -143,7 +143,7 @@ c2 = (*inbuf)[1]; if (c < 0xf5) { /* JIS X 0208 */ - TRYMAP_DEC(jisx0208, **outbuf, c ^ 0x80, c2 ^ 0x80) + TRYMAP_DEC(jisx0208, **outbuf, c ^ 0x80, c2 ^ 0x80); else return 2; } else { /* User-defined area 1 */ 1.11 +3 -3 cjkcodecs/src/_euc_kr.c Index: _euc_kr.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_euc_kr.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- _euc_kr.c 22 May 2003 05:36:28 -0000 1.10 +++ _euc_kr.c 26 May 2003 07:37:09 -0000 1.11 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _euc_kr.c,v 1.10 2003/05/22 05:36:28 perky Exp $ + * $Id: _euc_kr.c,v 1.11 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -49,7 +49,7 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(cp949, code, c) + TRYMAP_ENC(cp949, code, c); else return 1; if (code & 0x8000) /* MSB set: CP949 */ @@ -79,7 +79,7 @@ RESERVE_INBUF(2) - TRYMAP_DEC(ksx1001, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) + TRYMAP_DEC(ksx1001, code, c ^ 0x80, (*inbuf)[1] ^ 0x80); else return 2; **outbuf = code; 1.5 +7 -6 cjkcodecs/src/_gb18030.c Index: _gb18030.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gb18030.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- _gb18030.c 22 May 2003 05:36:28 -0000 1.4 +++ _gb18030.c 26 May 2003 07:37:09 -0000 1.5 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gb18030.c,v 1.4 2003/05/22 05:36:28 perky Exp $ + * $Id: _gb18030.c,v 1.5 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -75,8 +75,9 @@ RESERVE_OUTBUF(2) GBK_PREENCODE(c, code) - else TRYMAP_ENC(gbcommon, code, c) - else TRYMAP_ENC(gb18030ext, code, c) { + else TRYMAP_ENC(gbcommon, code, c); + else TRYMAP_ENC(gb18030ext, code, c); + else { const struct _gb18030_to_unibmp_ranges *utrrange; RESERVE_OUTBUF(4) @@ -178,9 +179,9 @@ } GBK_PREDECODE(c, c2, code) - else TRYMAP_DEC(gb2312, code, c ^ 0x80, c2 ^ 0x80) - else TRYMAP_DEC(gbkext, code, c, c2) - else TRYMAP_DEC(gb18030ext, code, c, c2) + else TRYMAP_DEC(gb2312, code, c ^ 0x80, c2 ^ 0x80); + else TRYMAP_DEC(gbkext, code, c, c2); + else TRYMAP_DEC(gb18030ext, code, c, c2); else return 2; **outbuf = code; 1.6 +3 -3 cjkcodecs/src/_gb2312.c Index: _gb2312.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gb2312.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- _gb2312.c 22 May 2003 05:36:28 -0000 1.5 +++ _gb2312.c 26 May 2003 07:37:09 -0000 1.6 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gb2312.c,v 1.5 2003/05/22 05:36:28 perky Exp $ + * $Id: _gb2312.c,v 1.6 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -49,7 +49,7 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(gbcommon, code, c) + TRYMAP_ENC(gbcommon, code, c); else return 1; if (code & 0x8000) /* MSB set: GBK */ @@ -78,7 +78,7 @@ } RESERVE_INBUF(2) - TRYMAP_DEC(gb2312, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) + TRYMAP_DEC(gb2312, code, c ^ 0x80, (*inbuf)[1] ^ 0x80); else return 2; **outbuf = code; 1.5 +4 -4 cjkcodecs/src/_gbk.c Index: _gbk.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gbk.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- _gbk.c 22 May 2003 05:36:28 -0000 1.4 +++ _gbk.c 26 May 2003 07:37:09 -0000 1.5 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gbk.c,v 1.4 2003/05/22 05:36:28 perky Exp $ + * $Id: _gbk.c,v 1.5 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -53,7 +53,7 @@ RESERVE_OUTBUF(2) GBK_PREENCODE(c, code) - else TRYMAP_ENC(gbcommon, code, c) + else TRYMAP_ENC(gbcommon, code, c); else return 1; (*outbuf)[0] = (code >> 8) | 0x80; @@ -84,8 +84,8 @@ RESERVE_INBUF(2) GBK_PREDECODE(c, (*inbuf)[1], code) - else TRYMAP_DEC(gb2312, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) - else TRYMAP_DEC(gbkext, code, c, (*inbuf)[1]) + else TRYMAP_DEC(gb2312, code, c ^ 0x80, (*inbuf)[1] ^ 0x80); + else TRYMAP_DEC(gbkext, code, c, (*inbuf)[1]); else return 2; **outbuf = code; 1.3 +3 -3 cjkcodecs/src/_shift_jis.c Index: _shift_jis.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_shift_jis.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- _shift_jis.c 22 May 2003 05:36:28 -0000 1.2 +++ _shift_jis.c 26 May 2003 07:37:09 -0000 1.3 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _shift_jis.c,v 1.2 2003/05/22 05:36:28 perky Exp $ + * $Id: _shift_jis.c,v 1.3 2003/05/26 07:37:09 perky Exp $ */ #include "codeccommon.h" @@ -57,7 +57,7 @@ RESERVE_OUTBUF(2) if (code == NOCHAR) { - TRYMAP_ENC(jisxcommon, code, c) + TRYMAP_ENC(jisxcommon, code, c); else if (c >= 0xe000 && c < 0xe758) { /* user-defined area */ c1 = (Py_UNICODE)(c - 0xe000) / 188; @@ -106,7 +106,7 @@ c1 = (2 * c1 + (c2 < 0x5e ? 0 : 1) + 0x21); c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21; - TRYMAP_DEC(jisx0208, code, c1, c2) + TRYMAP_DEC(jisx0208, code, c1, c2); else return 2; } else if (c >= 0xf0 && c <= 0xf9) { unsigned char c2; 1.9 +3 -3 cjkcodecs/src/codeccommon.h Index: codeccommon.h =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/codeccommon.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- codeccommon.h 22 May 2003 05:36:28 -0000 1.8 +++ codeccommon.h 26 May 2003 07:37:09 -0000 1.9 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: codeccommon.h,v 1.8 2003/05/22 05:36:28 perky Exp $ + * $Id: codeccommon.h,v 1.9 2003/05/26 07:37:09 perky Exp $ */ #include "Python.h" @@ -133,13 +133,13 @@ #define _TRYMAP_ENC(m, assi, val) \ if ((m)->map != NULL && (val) >= (m)->bottom && \ (val)<= (m)->top && ((assi) = (m)->map[(val) - \ - (m)->bottom]) != NOCHAR) ; + (m)->bottom]) != NOCHAR) #define TRYMAP_ENC(charset, assi, uni) \ _TRYMAP_ENC(&charset##encmap[uni >> 8], assi, uni & 0xff) #define _TRYMAP_DEC(m, assi, val) \ if ((m)->map != NULL && (val) >= (m)->bottom && \ (val)<= (m)->top && ((assi) = (m)->map[(val) - \ - (m)->bottom]) != UNIINV) ; + (m)->bottom]) != UNIINV) #define TRYMAP_DEC(charset, assi, c1, c2) \ _TRYMAP_DEC(&charset##decmap[c1], assi, c2) |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 06:54:05
|
perky 03/05/25 23:54:04 Modified: src _shift_jis.c Log: Remove incorrect encoding round for shift-jis. Revision Changes Path 1.3 +1 -9 cjkcodecs/src/_shift_jis.c Index: _shift_jis.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_shift_jis.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- _shift_jis.c 22 May 2003 05:36:28 -0000 1.2 +++ _shift_jis.c 26 May 2003 06:54:04 -0000 1.3 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _shift_jis.c,v 1.2 2003/05/22 05:36:28 perky Exp $ + * $Id: _shift_jis.c,v 1.3 2003/05/26 06:54:04 perky Exp $ */ #include "codeccommon.h" @@ -45,14 +45,6 @@ JISX0201_ENCODE(c, code) else UCS4INVALID(c) else code = NOCHAR; - - if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) { - RESERVE_OUTBUF(1) - - **outbuf = (unsigned char)code; - NEXT(1, 1) - continue; - } RESERVE_OUTBUF(2) |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 06:21:41
|
perky 03/05/25 23:21:40 Modified: . setup.py Log: Add euc-jp codec. Revision Changes Path 1.12 +2 -2 cjkcodecs/setup.py Index: setup.py =================================================================== RCS file: /cvsroot/koco/cjkcodecs/setup.py,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- setup.py 22 May 2003 04:18:20 -0000 1.11 +++ setup.py 26 May 2003 06:21:39 -0000 1.12 @@ -27,7 +27,7 @@ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# $Id: setup.py,v 1.11 2003/05/22 04:18:20 perky Exp $ +# $Id: setup.py,v 1.12 2003/05/26 06:21:39 perky Exp $ # import sys @@ -36,7 +36,7 @@ extensions = [] encodings = { -'ja_JP': ['shift_jis'], #['cp932', 'euc_jp'], +'ja_JP': ['shift_jis', 'euc_jp'], #['cp932'], 'ko_KR': ['euc_kr', 'cp949'], 'zh_CN': ['gb2312', 'gbk', 'gb18030'], 'zh_TW': ['big5', 'cp950'] |
From: Hye-Shik C. <pe...@us...> - 2003-05-26 06:21:41
|
perky 03/05/25 23:21:40 Added: src _euc_jp.c Log: Add euc-jp codec. Revision Changes Path 1.1 cjkcodecs/src/_euc_jp.c Index: _euc_jp.c =================================================================== /* * _euc_jp.c: the EUC-JP codec * * Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $Id: _euc_jp.c,v 1.1 2003/05/26 06:21:40 perky Exp $ */ #include "codeccommon.h" ENCMAP(jisxcommon) DECMAP(jisx0208) DECMAP(jisx0212) ENCODER(euc_jp) { while (inleft > 0) { Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { RESERVE_OUTBUF(1) **outbuf = c; NEXT(1, 1) continue; } UCS4INVALID(c) TRYMAP_ENC(jisxcommon, code, c) else if (c >= 0xff61 && c <= 0xff9f) { /* JIS X 0201 half-width katakana */ RESERVE_OUTBUF(2) (*outbuf)[0] = 0x8e; (*outbuf)[1] = (unsigned char)(c - 0xfec0); NEXT(1, 2) continue; } else if (c >= 0xe000 && c < 0xe3ac) { /* User-defined area 1 */ RESERVE_OUTBUF(2) (*outbuf)[0] = (Py_UNICODE)(c - 0xe000) / 94 + 0xf5; (*outbuf)[1] = (Py_UNICODE)(c - 0xe000) % 94 + 0xa1; NEXT(1, 2) continue; } else if (c >= 0xe3ac && c < 0xe758) { /* User-defined area 2 */ RESERVE_OUTBUF(3) (*outbuf)[0] = 0x8f; (*outbuf)[1] = (Py_UNICODE)(c - 0xe3ac) / 94 + 0xf5; (*outbuf)[2] = (Py_UNICODE)(c - 0xe3ac) % 94 + 0xa1; NEXT(1, 3) continue; } else return 1; if (code & 0x8000) { /* JIS X 0212 */ RESERVE_OUTBUF(3) (*outbuf)[0] = 0x8f; (*outbuf)[1] = code >> 8; (*outbuf)[2] = (code & 0xFF) | 0x80; NEXT(1, 3) } else { /* JIS X 0208 */ RESERVE_OUTBUF(2) (*outbuf)[0] = (code >> 8) | 0x80; (*outbuf)[1] = (code & 0xFF) | 0x80; NEXT(1, 2) } } return 0; } DECODER(euc_jp) { while (inleft > 0) { unsigned char c = **inbuf; RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; NEXT(1, 1) continue; } if (c == 0x8e) { /* JIS X 0201 half-width katakana */ unsigned char c2; RESERVE_INBUF(2) c2 = (*inbuf)[1]; if (c2 >= 0xa1 && c2 <= 0xdf) { **outbuf = 0xfec0 + c2; NEXT(2, 1) } else return 2; } else if (c == 0x8f) { unsigned char c2, c3; RESERVE_INBUF(3) c2 = (*inbuf)[1]; c3 = (*inbuf)[2]; if (c2 < 0xf5) { /* JIS X 0212 */ TRYMAP_DEC(jisx0212, **outbuf, c2 ^ 0x80, c3 ^ 0x80) else return 3; } else { /* User-defined area 2 */ if (c2 == 0xff || c3 < 0xa1 || c3 == 0xff) return 3; **outbuf = 0xe3ac + 94 * (c2 - 0xf5) + (c3 - 0xa1); } NEXT(3, 1) } else { unsigned char c2; RESERVE_INBUF(2) c2 = (*inbuf)[1]; if (c < 0xf5) { /* JIS X 0208 */ TRYMAP_DEC(jisx0208, **outbuf, c ^ 0x80, c2 ^ 0x80) else return 2; } else { /* User-defined area 1 */ if (c2 < 0xa1 || c2 == 0xff) return 2; **outbuf = 0xe000 + 94 * (c - 0xf5) + (c2 - 0xa1); } NEXT(2, 1) } } return 0; } BEGIN_CODEC_REGISTRY(euc_jp) MAPOPEN(ja_JP) IMPORTMAP_DEC(jisx0208) IMPORTMAP_DEC(jisx0212) IMPORTMAP_ENC(jisxcommon) MAPCLOSE() END_CODEC_REGISTRY(euc_jp) /* * ex: ts=8 sts=4 et */ |
From: Hye-Shik C. <pe...@us...> - 2003-05-22 05:36:30
|
perky 03/05/21 22:36:29 Modified: src _big5.c _cp949.c _cp950.c _euc_kr.c _gb18030.c _gb2312.c _gbk.c _shift_jis.c codeccommon.h Log: More macroes. Revision Changes Path 1.3 +5 -5 cjkcodecs/src/_big5.c Index: _big5.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_big5.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- _big5.c 21 May 2003 23:52:11 -0000 1.2 +++ _big5.c 22 May 2003 05:36:28 -0000 1.3 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _big5.c,v 1.2 2003/05/21 23:52:11 perky Exp $ + * $Id: _big5.c,v 1.3 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -50,11 +50,11 @@ RESERVE_OUTBUF(2) - TRYMAP_ENC(&big5encmap[c >> 8], code, c & 0xff) + TRYMAP_ENC(big5, code, c) else return 1; - (*outbuf)[0] = (code >> 8) | 0x80; - (*outbuf)[1] = (code & 0xFF) | 0x80; + (*outbuf)[0] = code >> 8; + (*outbuf)[1] = code & 0xFF; NEXT(1, 2) } @@ -76,7 +76,7 @@ } RESERVE_INBUF(2) - TRYMAP_DEC(&big5decmap[c], code, (*inbuf)[1]) + TRYMAP_DEC(big5, code, c, (*inbuf)[1]) else return 2; **outbuf = code; 1.7 +4 -4 cjkcodecs/src/_cp949.c Index: _cp949.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_cp949.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- _cp949.c 21 May 2003 23:52:12 -0000 1.6 +++ _cp949.c 22 May 2003 05:36:28 -0000 1.7 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _cp949.c,v 1.6 2003/05/21 23:52:12 perky Exp $ + * $Id: _cp949.c,v 1.7 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -50,7 +50,7 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(&cp949encmap[c >> 8], code, c & 0xff) + TRYMAP_ENC(cp949, code, c) else return 1; (*outbuf)[0] = (code >> 8) | 0x80; @@ -79,8 +79,8 @@ } RESERVE_INBUF(2) - TRYMAP_DEC(&ksx1001decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) - else TRYMAP_DEC(&cp949extdecmap[c], code, (*inbuf)[1]) + TRYMAP_DEC(ksx1001, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) + else TRYMAP_DEC(cp949ext, code, c, (*inbuf)[1]) else return 2; **outbuf = code; 1.3 +7 -7 cjkcodecs/src/_cp950.c Index: _cp950.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_cp950.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- _cp950.c 21 May 2003 23:52:12 -0000 1.2 +++ _cp950.c 22 May 2003 05:36:28 -0000 1.3 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _cp950.c,v 1.2 2003/05/21 23:52:12 perky Exp $ + * $Id: _cp950.c,v 1.3 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -51,12 +51,12 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(&cp950extencmap[c >> 8], code, c & 0xff) - else TRYMAP_ENC(&big5encmap[c >> 8], code, c & 0xff) + TRYMAP_ENC(cp950ext, code, c) + else TRYMAP_ENC(big5, code, c) else return 1; - (*outbuf)[0] = (code >> 8) | 0x80; - (*outbuf)[1] = (code & 0xFF); + (*outbuf)[0] = code >> 8; + (*outbuf)[1] = code & 0xFF; NEXT(1, 2) } @@ -79,8 +79,8 @@ RESERVE_INBUF(2) - TRYMAP_DEC(&cp950extdecmap[c & 0x7f], code, (*inbuf)[1]) - else TRYMAP_DEC(&cp950extdecmap[c & 0x7f], code, (*inbuf)[1]) + TRYMAP_DEC(cp950ext, code, c, (*inbuf)[1]) + else TRYMAP_DEC(big5, code, c, (*inbuf)[1]) else return 2; **outbuf = code; 1.10 +3 -3 cjkcodecs/src/_euc_kr.c Index: _euc_kr.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_euc_kr.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- _euc_kr.c 21 May 2003 23:52:12 -0000 1.9 +++ _euc_kr.c 22 May 2003 05:36:28 -0000 1.10 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _euc_kr.c,v 1.9 2003/05/21 23:52:12 perky Exp $ + * $Id: _euc_kr.c,v 1.10 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -49,7 +49,7 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(&cp949encmap[c >> 8], code, c & 0xff) + TRYMAP_ENC(cp949, code, c) else return 1; if (code & 0x8000) /* MSB set: CP949 */ @@ -79,7 +79,7 @@ RESERVE_INBUF(2) - TRYMAP_DEC(&ksx1001decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) + TRYMAP_DEC(ksx1001, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) else return 2; **outbuf = code; 1.4 +6 -6 cjkcodecs/src/_gb18030.c Index: _gb18030.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gb18030.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- _gb18030.c 21 May 2003 23:52:12 -0000 1.3 +++ _gb18030.c 22 May 2003 05:36:28 -0000 1.4 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gb18030.c,v 1.3 2003/05/21 23:52:12 perky Exp $ + * $Id: _gb18030.c,v 1.4 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -75,8 +75,8 @@ RESERVE_OUTBUF(2) GBK_PREENCODE(c, code) - else TRYMAP_ENC(&gbcommonencmap[c >> 8], code, c && 0xff) - else TRYMAP_ENC(&gb18030extencmap[c >> 8], code, c && 0xff) { + else TRYMAP_ENC(gbcommon, code, c) + else TRYMAP_ENC(gb18030ext, code, c) { const struct _gb18030_to_unibmp_ranges *utrrange; RESERVE_OUTBUF(4) @@ -178,9 +178,9 @@ } GBK_PREDECODE(c, c2, code) - else TRYMAP_DEC(&gb2312decmap[c & 0x7f], code, c2 ^ 0x80) - else TRYMAP_DEC(&gbkextdecmap[c], code, c2) - else TRYMAP_DEC(&gb18030extdecmap[c], code, c2) + else TRYMAP_DEC(gb2312, code, c ^ 0x80, c2 ^ 0x80) + else TRYMAP_DEC(gbkext, code, c, c2) + else TRYMAP_DEC(gb18030ext, code, c, c2) else return 2; **outbuf = code; 1.5 +3 -3 cjkcodecs/src/_gb2312.c Index: _gb2312.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gb2312.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- _gb2312.c 21 May 2003 23:52:12 -0000 1.4 +++ _gb2312.c 22 May 2003 05:36:28 -0000 1.5 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gb2312.c,v 1.4 2003/05/21 23:52:12 perky Exp $ + * $Id: _gb2312.c,v 1.5 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -49,7 +49,7 @@ UCS4INVALID(c) RESERVE_OUTBUF(2) - TRYMAP_ENC(&gbcommonencmap[c >> 8], code, c & 0xff) + TRYMAP_ENC(gbcommon, code, c) else return 1; if (code & 0x8000) /* MSB set: GBK */ @@ -78,7 +78,7 @@ } RESERVE_INBUF(2) - TRYMAP_DEC(&gb2312decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) + TRYMAP_DEC(gb2312, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) else return 2; **outbuf = code; 1.4 +4 -4 cjkcodecs/src/_gbk.c Index: _gbk.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gbk.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- _gbk.c 21 May 2003 23:52:12 -0000 1.3 +++ _gbk.c 22 May 2003 05:36:28 -0000 1.4 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gbk.c,v 1.3 2003/05/21 23:52:12 perky Exp $ + * $Id: _gbk.c,v 1.4 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -53,7 +53,7 @@ RESERVE_OUTBUF(2) GBK_PREENCODE(c, code) - else TRYMAP_ENC(&gbcommonencmap[c >> 8], code, c & 0xff) + else TRYMAP_ENC(gbcommon, code, c) else return 1; (*outbuf)[0] = (code >> 8) | 0x80; @@ -84,8 +84,8 @@ RESERVE_INBUF(2) GBK_PREDECODE(c, (*inbuf)[1], code) - else TRYMAP_DEC(&gb2312decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) - else TRYMAP_DEC(&gbkextdecmap[c], code, (*inbuf)[1]) + else TRYMAP_DEC(gb2312, code, c ^ 0x80, (*inbuf)[1] ^ 0x80) + else TRYMAP_DEC(gbkext, code, c, (*inbuf)[1]) else return 2; **outbuf = code; 1.2 +3 -3 cjkcodecs/src/_shift_jis.c Index: _shift_jis.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_shift_jis.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- _shift_jis.c 22 May 2003 04:18:21 -0000 1.1 +++ _shift_jis.c 22 May 2003 05:36:28 -0000 1.2 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _shift_jis.c,v 1.1 2003/05/22 04:18:21 perky Exp $ + * $Id: _shift_jis.c,v 1.2 2003/05/22 05:36:28 perky Exp $ */ #include "codeccommon.h" @@ -57,7 +57,7 @@ RESERVE_OUTBUF(2) if (code == NOCHAR) { - TRYMAP_ENC(&jisxcommonencmap[c >> 8], code, c & 0xff) + TRYMAP_ENC(jisxcommon, code, c) else if (c >= 0xe000 && c < 0xe758) { /* user-defined area */ c1 = (Py_UNICODE)(c - 0xe000) / 188; @@ -106,7 +106,7 @@ c1 = (2 * c1 + (c2 < 0x5e ? 0 : 1) + 0x21); c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21; - TRYMAP_DEC(&jisx0208decmap[c1], code, c2) + TRYMAP_DEC(jisx0208, code, c1, c2) else return 2; } else if (c >= 0xf0 && c <= 0xf9) { unsigned char c2; 1.8 +7 -3 cjkcodecs/src/codeccommon.h Index: codeccommon.h =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/codeccommon.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- codeccommon.h 22 May 2003 04:18:21 -0000 1.7 +++ codeccommon.h 22 May 2003 05:36:28 -0000 1.8 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: codeccommon.h,v 1.7 2003/05/22 04:18:21 perky Exp $ + * $Id: codeccommon.h,v 1.8 2003/05/22 05:36:28 perky Exp $ */ #include "Python.h" @@ -130,14 +130,18 @@ if (outleft < (n)) \ return MBERR_TOOSMALL; -#define TRYMAP_ENC(m, assi, val) \ +#define _TRYMAP_ENC(m, assi, val) \ if ((m)->map != NULL && (val) >= (m)->bottom && \ (val)<= (m)->top && ((assi) = (m)->map[(val) - \ (m)->bottom]) != NOCHAR) ; -#define TRYMAP_DEC(m, assi, val) \ +#define TRYMAP_ENC(charset, assi, uni) \ + _TRYMAP_ENC(&charset##encmap[uni >> 8], assi, uni & 0xff) +#define _TRYMAP_DEC(m, assi, val) \ if ((m)->map != NULL && (val) >= (m)->bottom && \ (val)<= (m)->top && ((assi) = (m)->map[(val) - \ (m)->bottom]) != UNIINV) ; +#define TRYMAP_DEC(charset, assi, c1, c2) \ + _TRYMAP_DEC(&charset##decmap[c1], assi, c2) static int importmap(PyObject *mod, const char *symbol, |
From: Hye-Shik C. <pe...@us...> - 2003-05-22 04:18:21
|
perky 03/05/21 21:18:21 Modified: src codeccommon.h Added: src _shift_jis.c Log: Add shift-jis codec. Revision Changes Path 1.7 +3 -2 cjkcodecs/src/codeccommon.h Index: codeccommon.h =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/codeccommon.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- codeccommon.h 21 May 2003 23:52:12 -0000 1.6 +++ codeccommon.h 22 May 2003 04:18:21 -0000 1.7 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: codeccommon.h,v 1.6 2003/05/21 23:52:12 perky Exp $ + * $Id: codeccommon.h,v 1.7 2003/05/22 04:18:21 perky Exp $ */ #include "Python.h" @@ -54,7 +54,8 @@ if ((code) > 0xFFFF) \ return 1; #else -#define UCS4INVALID(code) +#define UCS4INVALID(code) \ + if (0) ; #endif #define BEGIN_CODEC_REGISTRY(encoding) \ 1.1 cjkcodecs/src/_shift_jis.c Index: _shift_jis.c =================================================================== /* * _shift_jis.c: the SHIFT-JIS codec * * Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $Id: _shift_jis.c,v 1.1 2003/05/22 04:18:21 perky Exp $ */ #include "codeccommon.h" #include "maps/alg_jisx0201.h" ENCMAP(jisxcommon) DECMAP(jisx0208) ENCODER(shift_jis) { while (inleft > 0) { Py_UNICODE c = **inbuf; DBCHAR code; unsigned char c1, c2; JISX0201_ENCODE(c, code) else UCS4INVALID(c) else code = NOCHAR; if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) { RESERVE_OUTBUF(1) **outbuf = (unsigned char)code; NEXT(1, 1) continue; } RESERVE_OUTBUF(2) if (code == NOCHAR) { TRYMAP_ENC(&jisxcommonencmap[c >> 8], code, c & 0xff) else if (c >= 0xe000 && c < 0xe758) { /* user-defined area */ c1 = (Py_UNICODE)(c - 0xe000) / 188; c2 = (Py_UNICODE)(c - 0xe000) % 188; (*outbuf)[0] = c1 + 0xf0; (*outbuf)[1] = (c2 < 0x3f ? c2 + 0x40 : c2 + 0x41); NEXT(1, 2) continue; } else return 1; if (code & 0x8000) /* MSB set: JIS X 0212 */ return 1; } c1 = code >> 8; c2 = code & 0xff; c2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21); c1 = (c1 - 0x21) >> 1; (*outbuf)[0] = c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1; (*outbuf)[1] = c2 < 0x3f ? c2 + 0x40 : c2 + 0x41; NEXT(1, 2) } return 0; } DECODER(shift_jis) { while (inleft > 0) { unsigned char c = **inbuf; Py_UNICODE code; RESERVE_OUTBUF(1) JISX0201_DECODE(c, code) else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)) { unsigned char c1, c2; RESERVE_INBUF(2) c2 = (*inbuf)[1]; if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc) return 2; c1 = (c < 0xe0 ? c - 0x81 : c - 0xc1); c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41); c1 = (2 * c1 + (c2 < 0x5e ? 0 : 1) + 0x21); c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21; TRYMAP_DEC(&jisx0208decmap[c1], code, c2) else return 2; } else if (c >= 0xf0 && c <= 0xf9) { unsigned char c2; RESERVE_INBUF(2) c2 = (*inbuf)[1]; if ((c2 >= 0x40 && c2 <= 0x7e) || (c2 >= 0x80 && c2 <= 0xfc)) code = 0xe000 + 188 * (c - 0xf0) + (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41); else return 2; } else return 2; **outbuf = code; NEXT(2, 1) } return 0; } BEGIN_CODEC_REGISTRY(shift_jis) MAPOPEN(ja_JP) IMPORTMAP_DEC(jisx0208) IMPORTMAP_ENC(jisxcommon) MAPCLOSE() END_CODEC_REGISTRY(shift_jis) /* * ex: ts=8 sts=4 et */ |
From: Hye-Shik C. <pe...@us...> - 2003-05-22 04:18:21
|
perky 03/05/21 21:18:20 Modified: . setup.py Log: Add shift-jis codec. Revision Changes Path 1.11 +102 -102 cjkcodecs/setup.py Index: setup.py =================================================================== RCS file: /cvsroot/koco/cjkcodecs/setup.py,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- setup.py 20 May 2003 11:20:56 -0000 1.10 +++ setup.py 22 May 2003 04:18:20 -0000 1.11 @@ -1,102 +1,102 @@ -#!/usr/bin/env python -# -# setup.py: CJK Codec Setup -# -# Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -# $Id: setup.py,v 1.10 2003/05/20 11:20:56 perky Exp $ -# - -import sys -from distutils.core import setup, Extension -from distutils.command.install import install - -extensions = [] -encodings = { -'ja_JP': [], # 'shift_jis', 'cp932', 'euc_jp' -'ko_KR': ['euc_kr', 'cp949'], -'zh_CN': ['gb2312', 'gbk', 'gb18030'], -'zh_TW': ['big5', 'cp950'] -} -locales = ['ja_JP', 'ko_KR', 'zh_CN', 'zh_TW'] - -for arg in sys.argv[1:]: # don't use getopt to ignore arguments for distutils - args = arg.split('=', 1) - if args[0] == '--disable-japanese': - locales.remove('ja_JP') - elif args[0] == '--disable-korean': - locales.remove('ko_KR') - elif args[0] == '--disable-simplified-chinese': - locales.remove('zh_CN') - elif args[0] == '--disable-traditional-chinese': - locales.remove('zh_TW') - elif args[0] == '--help': - print """\ -Language options: - --disable-japanese don't install Japanese codecs - --disable-korean don't install Korean codecs - --disable-simplified-chinese don't install Simplified Chinese codecs - --disable-traditional-chinese don't install Traditional Chinese codecs -""" - continue - else: - continue - - sys.argv.remove(arg) - -for loc in locales: - extensions.append(Extension('cjkcodecs.mapdata_'+loc, - ['src/maps/mapdata_%s.c'%loc])) - for enc in encodings[loc]: - extensions.append(Extension('cjkcodecs._'+enc, ['src/_%s.c'%enc])) - -class Install(install): - def initialize_options (self): - install.initialize_options(self) - if sys.hexversion >= 0x2010000: - self.extra_path = ("cjkcodecs", "import cjkcodecs.aliases") - else: - self.extra_path = "cjkcodecs" - def finalize_options (self): - org_install_lib = self.install_lib - install.finalize_options(self) - self.install_libbase = self.install_lib = \ - org_install_lib or self.install_purelib - -setup (name = "cjkcodecs", - version = "1.0", - description = "Python Unicode Codecs Collection for CJK Encodings", - author = "Hye-Shik Chang", - author_email = "pe...@Fr...", - url = "http://sourceforge.net/projects/koco", - cmdclass = {'install': Install}, - packages = ['cjkcodecs'], - ext_modules = - [Extension("cjkcodecs.multibytecodec", ["src/multibytecodec.c"])] - + extensions - ) - -# ex: ts=8 sts=4 et +#!/usr/bin/env python +# +# setup.py: CJK Codec Setup +# +# Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# $Id: setup.py,v 1.11 2003/05/22 04:18:20 perky Exp $ +# + +import sys +from distutils.core import setup, Extension +from distutils.command.install import install + +extensions = [] +encodings = { +'ja_JP': ['shift_jis'], #['cp932', 'euc_jp'], +'ko_KR': ['euc_kr', 'cp949'], +'zh_CN': ['gb2312', 'gbk', 'gb18030'], +'zh_TW': ['big5', 'cp950'] +} +locales = ['ja_JP', 'ko_KR', 'zh_CN', 'zh_TW'] + +for arg in sys.argv[1:]: # don't use getopt to ignore arguments for distutils + args = arg.split('=', 1) + if args[0] == '--disable-japanese': + locales.remove('ja_JP') + elif args[0] == '--disable-korean': + locales.remove('ko_KR') + elif args[0] == '--disable-simplified-chinese': + locales.remove('zh_CN') + elif args[0] == '--disable-traditional-chinese': + locales.remove('zh_TW') + elif args[0] == '--help': + print """\ +Language options: + --disable-japanese don't install Japanese codecs + --disable-korean don't install Korean codecs + --disable-simplified-chinese don't install Simplified Chinese codecs + --disable-traditional-chinese don't install Traditional Chinese codecs +""" + continue + else: + continue + + sys.argv.remove(arg) + +for loc in locales: + extensions.append(Extension('cjkcodecs.mapdata_'+loc, + ['src/maps/mapdata_%s.c'%loc])) + for enc in encodings[loc]: + extensions.append(Extension('cjkcodecs._'+enc, ['src/_%s.c'%enc])) + +class Install(install): + def initialize_options (self): + install.initialize_options(self) + if sys.hexversion >= 0x2010000: + self.extra_path = ("cjkcodecs", "import cjkcodecs.aliases") + else: + self.extra_path = "cjkcodecs" + def finalize_options (self): + org_install_lib = self.install_lib + install.finalize_options(self) + self.install_libbase = self.install_lib = \ + org_install_lib or self.install_purelib + +setup (name = "cjkcodecs", + version = "1.0", + description = "Python Unicode Codecs Collection for CJK Encodings", + author = "Hye-Shik Chang", + author_email = "pe...@Fr...", + url = "http://sourceforge.net/projects/koco", + cmdclass = {'install': Install}, + packages = ['cjkcodecs'], + ext_modules = + [Extension("cjkcodecs.multibytecodec", ["src/multibytecodec.c"])] + + extensions + ) + +# ex: ts=8 sts=4 et |
From: Hye-Shik C. <pe...@us...> - 2003-05-22 00:07:11
|
perky 03/05/21 16:52:12 Modified: src _big5.c _cp949.c _cp950.c _euc_kr.c _gb18030.c _gb2312.c _gbk.c codeccommon.h Log: Look! Codec codes are more puzzled now! ;) Revision Changes Path 1.2 +21 -63 cjkcodecs/src/_big5.c Index: _big5.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_big5.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- _big5.c 20 May 2003 11:20:56 -0000 1.1 +++ _big5.c 21 May 2003 23:52:11 -0000 1.2 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _big5.c,v 1.1 2003/05/20 11:20:56 perky Exp $ + * $Id: _big5.c,v 1.2 2003/05/21 23:52:11 perky Exp $ */ #include "codeccommon.h" @@ -37,32 +37,25 @@ ENCODER(big5) { while (inleft > 0) { - const encode_map *map; - Py_UNICODE c = **inbuf, clow; + Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } UCS4INVALID(c) - if (outleft < 2) - return MBERR_TOOSMALL; - map = &big5encmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) - return 1; + RESERVE_OUTBUF(2) + + TRYMAP_ENC(&big5encmap[c >> 8], code, c & 0xff) + else return 1; (*outbuf)[0] = (code >> 8) | 0x80; (*outbuf)[1] = (code & 0xFF) | 0x80; - (*outbuf) += 2; outleft -= 2; - (*inbuf)++; inleft--; + NEXT(1, 2) } return 0; @@ -71,68 +64,33 @@ DECODER(big5) { while (inleft > 0) { - const decode_map *map; - unsigned char c = **inbuf, c2; + unsigned char c = **inbuf; Py_UNICODE code; - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } - if (inleft < 2) - return MBERR_TOOFEW; - c2 = (*inbuf)[1]; - map = &big5decmap[c]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) - return 2; + RESERVE_INBUF(2) + TRYMAP_DEC(&big5decmap[c], code, (*inbuf)[1]) + else return 2; **outbuf = code; - (*outbuf)++; outleft--; - (*inbuf) += 2; inleft -= 2; + NEXT(2, 1) } return 0; } -CODECDEF(big5) -NOMETHODS(__methods) - -void -init_big5(void) -{ - PyObject *codec; - PyObject *m = NULL, *mod = NULL, *o = NULL; - - m = Py_InitModule("_big5", __methods); - - /* Import mapdata */ - MAPOPEN(mod, "zh_TW") - if (IMPORTMAP(mod, big5, &big5encmap, &big5decmap)) - goto errorexit; - MAPCLOSE(mod) - - /* Create Codec Instances */ - MULTIBYTECODEC_OPEN(mod, o) - REGISTERCODEC(m, o, codec) - MULTIBYTECODEC_CLOSE(mod, o) - - if (PyErr_Occurred()) - Py_FatalError("can't initialize the _big5 module"); - - return; - -errorexit: - Py_XDECREF(m); - Py_XDECREF(mod); - Py_XDECREF(o); -} +BEGIN_CODEC_REGISTRY(big5) + MAPOPEN(zh_TW) + IMPORTMAP_ENCDEC(big5) + MAPCLOSE() +END_CODEC_REGISTRY(big5) /* * ex: ts=8 sts=4 et 1.6 +23 -71 cjkcodecs/src/_cp949.c Index: _cp949.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_cp949.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- _cp949.c 20 May 2003 11:20:56 -0000 1.5 +++ _cp949.c 21 May 2003 23:52:12 -0000 1.6 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _cp949.c,v 1.5 2003/05/20 11:20:56 perky Exp $ + * $Id: _cp949.c,v 1.6 2003/05/21 23:52:12 perky Exp $ */ #include "codeccommon.h" @@ -38,35 +38,27 @@ ENCODER(cp949) { while (inleft > 0) { - const encode_map *map; - Py_UNICODE c = **inbuf, clow; + Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } UCS4INVALID(c) - if (outleft < 2) - return MBERR_TOOSMALL; - map = &cp949encmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) - return 1; + RESERVE_OUTBUF(2) + TRYMAP_ENC(&cp949encmap[c >> 8], code, c & 0xff) + else return 1; (*outbuf)[0] = (code >> 8) | 0x80; if (code & 0x8000) (*outbuf)[1] = (code & 0xFF); /* MSB set: CP949 */ else (*outbuf)[1] = (code & 0xFF) | 0x80; /* MSB unset: ks x 1001 */ - (*outbuf) += 2; outleft -= 2; - (*inbuf)++; inleft--; + NEXT(1, 2) } return 0; @@ -75,76 +67,36 @@ DECODER(cp949) { while (inleft > 0) { - const decode_map *map; - unsigned char c = **inbuf, c2; + unsigned char c = **inbuf; Py_UNICODE code; - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } - if (inleft < 2) - return MBERR_TOOFEW; - - c2 = (*inbuf)[1] ^ 0x80; - map = &ksx1001decmap[c & 0x7f]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) { - c2 ^= 0x80; - map = &cp949extdecmap[c]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) - return 2; - } + RESERVE_INBUF(2) + TRYMAP_DEC(&ksx1001decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) + else TRYMAP_DEC(&cp949extdecmap[c], code, (*inbuf)[1]) + else return 2; **outbuf = code; - (*outbuf)++; outleft--; - (*inbuf) += 2; inleft -= 2; + NEXT(2, 1) } return 0; } -CODECDEF(cp949) -NOMETHODS(__methods) - -void -init_cp949(void) -{ - PyObject *codec; - PyObject *m = NULL, *mod = NULL, *o = NULL; - - m = Py_InitModule("_cp949", __methods); - - /* Import mapdata */ - MAPOPEN(mod, "ko_KR") - if (IMPORTMAP(mod, ksx1001, NULL, &ksx1001decmap) || - IMPORTMAP(mod, cp949ext, NULL, &cp949extdecmap) || - IMPORTMAP(mod, cp949, &cp949encmap, NULL)) - goto errorexit; - MAPCLOSE(mod) - - /* Create Codec Instances */ - MULTIBYTECODEC_OPEN(mod, o) - REGISTERCODEC(m, o, codec) - MULTIBYTECODEC_CLOSE(mod, o) - - if (PyErr_Occurred()) - Py_FatalError("can't initialize the _cp949 module"); - - return; - -errorexit: - Py_XDECREF(m); - Py_XDECREF(mod); - Py_XDECREF(o); -} +BEGIN_CODEC_REGISTRY(cp949) + MAPOPEN(ko_KR) + IMPORTMAP_DEC(ksx1001) + IMPORTMAP_DEC(cp949ext) + IMPORTMAP_ENC(cp949) + MAPCLOSE() +END_CODEC_REGISTRY(cp949) /* * ex: ts=8 sts=4 et 1.2 +23 -72 cjkcodecs/src/_cp950.c Index: _cp950.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_cp950.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- _cp950.c 20 May 2003 11:20:56 -0000 1.1 +++ _cp950.c 21 May 2003 23:52:12 -0000 1.2 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _cp950.c,v 1.1 2003/05/20 11:20:56 perky Exp $ + * $Id: _cp950.c,v 1.2 2003/05/21 23:52:12 perky Exp $ */ #include "codeccommon.h" @@ -39,36 +39,25 @@ ENCODER(cp950) { while (inleft > 0) { - const encode_map *map; - Py_UNICODE c = **inbuf, clow; + Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } UCS4INVALID(c) - if (outleft < 2) - return MBERR_TOOSMALL; - map = &cp950extencmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) { - map = &big5encmap[c >> 8]; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) - return 1; - } + RESERVE_OUTBUF(2) + TRYMAP_ENC(&cp950extencmap[c >> 8], code, c & 0xff) + else TRYMAP_ENC(&big5encmap[c >> 8], code, c & 0xff) + else return 1; (*outbuf)[0] = (code >> 8) | 0x80; (*outbuf)[1] = (code & 0xFF); - (*outbuf) += 2; outleft -= 2; - (*inbuf)++; inleft--; + NEXT(1, 2) } return 0; @@ -77,74 +66,36 @@ DECODER(cp950) { while (inleft > 0) { - const decode_map *map; - unsigned char c = **inbuf, c2; + unsigned char c = **inbuf; Py_UNICODE code; - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } - if (inleft < 2) - return MBERR_TOOFEW; + RESERVE_INBUF(2) - c2 = (*inbuf)[1]; - map = &cp950extdecmap[c & 0x7f]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) { - map = &big5decmap[c]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) - return 2; - } + TRYMAP_DEC(&cp950extdecmap[c & 0x7f], code, (*inbuf)[1]) + else TRYMAP_DEC(&cp950extdecmap[c & 0x7f], code, (*inbuf)[1]) + else return 2; **outbuf = code; - (*outbuf)++; outleft--; - (*inbuf) += 2; inleft -= 2; + NEXT(2, 1) } return 0; } -CODECDEF(cp950) -NOMETHODS(__methods) - -void -init_cp950(void) -{ - PyObject *codec; - PyObject *m = NULL, *mod = NULL, *o = NULL; - - m = Py_InitModule("_cp950", __methods); - - /* Import mapdata */ - MAPOPEN(mod, "zh_TW") - if (IMPORTMAP(mod, big5, &big5encmap, &big5decmap) || - IMPORTMAP(mod, cp950ext, &cp950extencmap, &cp950extdecmap)) - goto errorexit; - MAPCLOSE(mod) - - /* Create Codec Instances */ - MULTIBYTECODEC_OPEN(mod, o) - REGISTERCODEC(m, o, codec) - MULTIBYTECODEC_CLOSE(mod, o) - - if (PyErr_Occurred()) - Py_FatalError("can't initialize the _cp950 module"); - - return; - -errorexit: - Py_XDECREF(m); - Py_XDECREF(mod); - Py_XDECREF(o); -} +BEGIN_CODEC_REGISTRY(cp950) + MAPOPEN(zh_TW) + IMPORTMAP_ENCDEC(big5) + IMPORTMAP_ENCDEC(cp950ext) + MAPCLOSE() +END_CODEC_REGISTRY(cp950) /* * ex: ts=8 sts=4 et 1.9 +23 -64 cjkcodecs/src/_euc_kr.c Index: _euc_kr.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_euc_kr.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- _euc_kr.c 20 May 2003 11:20:56 -0000 1.8 +++ _euc_kr.c 21 May 2003 23:52:12 -0000 1.9 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _euc_kr.c,v 1.8 2003/05/20 11:20:56 perky Exp $ + * $Id: _euc_kr.c,v 1.9 2003/05/21 23:52:12 perky Exp $ */ #include "codeccommon.h" @@ -37,34 +37,27 @@ ENCODER(euc_kr) { while (inleft > 0) { - const encode_map *map; - Py_UNICODE c = **inbuf, clow; + Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } UCS4INVALID(c) - if (outleft < 2) - return MBERR_TOOSMALL; - map = &cp949encmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) - return 1; + RESERVE_OUTBUF(2) + TRYMAP_ENC(&cp949encmap[c >> 8], code, c & 0xff) + else return 1; + if (code & 0x8000) /* MSB set: CP949 */ return 1; (*outbuf)[0] = (code >> 8) | 0x80; (*outbuf)[1] = (code & 0xFF) | 0x80; - (*outbuf) += 2; outleft -= 2; - (*inbuf)++; inleft--; + NEXT(1, 2) } return 0; @@ -73,69 +66,35 @@ DECODER(euc_kr) { while (inleft > 0) { - const decode_map *map; - unsigned char c = **inbuf, c2; + unsigned char c = **inbuf; Py_UNICODE code; - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } - if (inleft < 2) - return MBERR_TOOFEW; - c2 = (*inbuf)[1] ^ 0x80; - map = &ksx1001decmap[c & 0x7f]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) - return 2; + RESERVE_INBUF(2) + + TRYMAP_DEC(&ksx1001decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) + else return 2; **outbuf = code; - (*outbuf)++; outleft--; - (*inbuf) += 2; inleft -= 2; + NEXT(2, 1) } return 0; } -CODECDEF(euc_kr) -NOMETHODS(__methods) - -void -init_euc_kr(void) -{ - PyObject *codec; - PyObject *m = NULL, *mod = NULL, *o = NULL; - - m = Py_InitModule("_euc_kr", __methods); - - /* Import mapdata */ - MAPOPEN(mod, "ko_KR") - if (IMPORTMAP(mod, ksx1001, NULL, &ksx1001decmap) || - IMPORTMAP(mod, cp949, &cp949encmap, NULL)) - goto errorexit; - MAPCLOSE(mod) - - /* Create Codec Instances */ - MULTIBYTECODEC_OPEN(mod, o) - REGISTERCODEC(m, o, codec) - MULTIBYTECODEC_CLOSE(mod, o) - - if (PyErr_Occurred()) - Py_FatalError("can't initialize the _euc_kr module"); - - return; - -errorexit: - Py_XDECREF(m); - Py_XDECREF(mod); - Py_XDECREF(o); -} +BEGIN_CODEC_REGISTRY(euc_kr) + MAPOPEN(ko_KR) + IMPORTMAP_DEC(ksx1001) + IMPORTMAP_ENC(cp949) + MAPCLOSE() +END_CODEC_REGISTRY(euc_kr) /* * ex: ts=8 sts=4 et 1.3 +58 -122 cjkcodecs/src/_gb18030.c Index: _gb18030.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gb18030.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- _gb18030.c 20 May 2003 11:20:56 -0000 1.2 +++ _gb18030.c 21 May 2003 23:52:12 -0000 1.3 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gb18030.c,v 1.2 2003/05/20 11:20:56 perky Exp $ + * $Id: _gb18030.c,v 1.3 2003/05/21 23:52:12 perky Exp $ */ #include "codeccommon.h" @@ -42,16 +42,13 @@ ENCODER(gb18030) { while (inleft > 0) { - const encode_map *map; - Py_UNICODE c = **inbuf, clow; + Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } #if Py_UNICODE_SIZE == 4 @@ -60,8 +57,7 @@ else if (nc >= 0x10000) { Py_UNICODE tc = c; - if (outleft < 4) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(4) (*outbuf)[3] = (unsigned char)(tc % 10) + 0x30; tc /= 10; @@ -71,59 +67,46 @@ tc /= 10; (*outbuf)[0] = (unsigned char)(tc + 0x90); - (*outbuf) += 4; outleft -= 4; - (*inbuf)++; inleft--; + NEXT(1, 4) continue; } #endif - if (outleft < 2) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(2) GBK_PREENCODE(c, code) - else { - map = &gbcommonencmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) { - map = &gb18030extencmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) { - const struct _gb18030_to_unibmp_ranges *utrrange; - - if (outleft < 4) - return MBERR_TOOSMALL; - - for (utrrange = gb18030_to_unibmp_ranges; - utrrange->first != 0; - utrrange++) - if (utrrange->first <= c && c <= utrrange->last) { - Py_UNICODE tc; - - tc = c - utrrange->first + utrrange->base; - - (*outbuf)[3] = (unsigned char)(tc % 10) + 0x30; - tc /= 10; - (*outbuf)[2] = (unsigned char)(tc % 126) + 0x81; - tc /= 126; - (*outbuf)[1] = (unsigned char)(tc % 10) + 0x30; - tc /= 10; - (*outbuf)[0] = (unsigned char)tc + 0x81; - - (*outbuf) += 4; outleft -= 4; - (*inbuf)++; inleft--; - break; - } - - if (utrrange->first == 0) { - PyErr_SetString(PyExc_RuntimeError, - "unicode mapping invalid"); - return 1; - } - continue; + else TRYMAP_ENC(&gbcommonencmap[c >> 8], code, c && 0xff) + else TRYMAP_ENC(&gb18030extencmap[c >> 8], code, c && 0xff) { + const struct _gb18030_to_unibmp_ranges *utrrange; + + RESERVE_OUTBUF(4) + + for (utrrange = gb18030_to_unibmp_ranges; + utrrange->first != 0; + utrrange++) + if (utrrange->first <= c && c <= utrrange->last) { + Py_UNICODE tc; + + tc = c - utrrange->first + utrrange->base; + + (*outbuf)[3] = (unsigned char)(tc % 10) + 0x30; + tc /= 10; + (*outbuf)[2] = (unsigned char)(tc % 126) + 0x81; + tc /= 126; + (*outbuf)[1] = (unsigned char)(tc % 10) + 0x30; + tc /= 10; + (*outbuf)[0] = (unsigned char)tc + 0x81; + + NEXT(1, 4) + break; } + + if (utrrange->first == 0) { + PyErr_SetString(PyExc_RuntimeError, + "unicode mapping invalid"); + return 1; } + continue; } (*outbuf)[0] = (code >> 8) | 0x80; @@ -131,8 +114,8 @@ (*outbuf)[1] = (code & 0xFF); /* MSB set: GBK or GB18030ext */ else (*outbuf)[1] = (code & 0xFF) | 0x80; /* MSB unset: GB2312 */ - (*outbuf) += 2; outleft -= 2; - (*inbuf)++; inleft--; + + NEXT(1, 2) } return 0; @@ -141,22 +124,18 @@ DECODER(gb18030) { while (inleft > 0) { - const decode_map *map; unsigned char c = **inbuf, c2; Py_UNICODE code; - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } - if (inleft < 2) - return MBERR_TOOFEW; + RESERVE_INBUF(2) c2 = (*inbuf)[1]; if (c2 >= 0x30 && c2 <= 0x39) { /* 4 bytes seq */ @@ -164,8 +143,7 @@ unsigned char c3, c4; Py_UNICODE lseq; - if (inleft < 4) - return MBERR_TOOFEW; + RESERVE_INBUF(4) c3 = (*inbuf)[2]; c4 = (*inbuf)[3]; if (c < 0x81 || c3 < 0x81 || c4 < 0x30 || c4 > 0x39) @@ -181,8 +159,7 @@ lseq >= (utr + 1)->base; utr++) ; **outbuf = utr->first - utr->base + lseq; - (*outbuf)++; outleft--; - (*inbuf) += 4; inleft -= 4; + NEXT(4, 1) continue; } } @@ -192,8 +169,7 @@ (Py_UNICODE)c3 * 10 + c4; if (lseq <= 0x10FFFF) { **outbuf = lseq; - (*outbuf)++; outleft--; - (*inbuf) += 4; inleft -= 4; + NEXT(4, 1) continue; } } @@ -202,66 +178,26 @@ } GBK_PREDECODE(c, c2, code) - else { - c2 ^= 0x80; - map = &gb2312decmap[c & 0x7f]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) { - c2 ^= 0x80; - map = &gbkextdecmap[c]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) { - map = &gb18030extdecmap[c]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) - return 2; - } - } - } + else TRYMAP_DEC(&gb2312decmap[c & 0x7f], code, c2 ^ 0x80) + else TRYMAP_DEC(&gbkextdecmap[c], code, c2) + else TRYMAP_DEC(&gb18030extdecmap[c], code, c2) + else return 2; **outbuf = code; - (*outbuf)++; outleft--; - (*inbuf) += 2; inleft -= 2; + NEXT(2, 1) } return 0; } -CODECDEF(gb18030) -NOMETHODS(__methods) - -void -init_gb18030(void) -{ - PyObject *codec; - PyObject *m = NULL, *mod = NULL, *o = NULL; - - m = Py_InitModule("_gb18030", __methods); - - /* Import mapdata */ - MAPOPEN(mod, "zh_CN") - if (IMPORTMAP(mod, gb2312, NULL, &gb2312decmap) || - IMPORTMAP(mod, gbkext, NULL, &gbkextdecmap) || - IMPORTMAP(mod, gb18030ext, &gb18030extencmap, &gb18030extdecmap) || - IMPORTMAP(mod, gbcommon, &gbcommonencmap, NULL)) - goto errorexit; - MAPCLOSE(mod) - - /* Create Codec Instances */ - MULTIBYTECODEC_OPEN(mod, o) - REGISTERCODEC(m, o, codec) - MULTIBYTECODEC_CLOSE(mod, o) - - if (PyErr_Occurred()) - Py_FatalError("can't initialize the _gb18030 module"); - - return; - -errorexit: - Py_XDECREF(m); - Py_XDECREF(mod); - Py_XDECREF(o); -} +BEGIN_CODEC_REGISTRY(gb18030) + MAPOPEN(zh_CN) + IMPORTMAP_DEC(gb2312) + IMPORTMAP_DEC(gbkext) + IMPORTMAP_ENC(gbcommon) + IMPORTMAP_ENCDEC(gb18030ext) + MAPCLOSE() +END_CODEC_REGISTRY(gb18030) /* * ex: ts=8 sts=4 et 1.4 +22 -64 cjkcodecs/src/_gb2312.c Index: _gb2312.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gb2312.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- _gb2312.c 20 May 2003 11:20:56 -0000 1.3 +++ _gb2312.c 21 May 2003 23:52:12 -0000 1.4 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gb2312.c,v 1.3 2003/05/20 11:20:56 perky Exp $ + * $Id: _gb2312.c,v 1.4 2003/05/21 23:52:12 perky Exp $ */ #include "codeccommon.h" @@ -37,34 +37,27 @@ ENCODER(gb2312) { while (inleft > 0) { - const encode_map *map; - Py_UNICODE c = **inbuf, clow; + Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } UCS4INVALID(c) - if (outleft < 2) - return MBERR_TOOSMALL; - map = &gbcommonencmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) - return 1; + RESERVE_OUTBUF(2) + TRYMAP_ENC(&gbcommonencmap[c >> 8], code, c & 0xff) + else return 1; + if (code & 0x8000) /* MSB set: GBK */ return 1; (*outbuf)[0] = (code >> 8) | 0x80; (*outbuf)[1] = (code & 0xFF) | 0x80; - (*outbuf) += 2; outleft -= 2; - (*inbuf)++; inleft--; + NEXT(1, 2) } return 0; @@ -73,69 +66,34 @@ DECODER(gb2312) { while (inleft > 0) { - const decode_map *map; - unsigned char c = **inbuf, c2; + unsigned char c = **inbuf; Py_UNICODE code; - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } - if (inleft < 2) - return MBERR_TOOFEW; - c2 = (*inbuf)[1] ^ 0x80; - map = &gb2312decmap[c & 0x7f]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) - return 2; + RESERVE_INBUF(2) + TRYMAP_DEC(&gb2312decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) + else return 2; **outbuf = code; - (*outbuf)++; outleft--; - (*inbuf) += 2; inleft -= 2; + NEXT(2, 1) } return 0; } -CODECDEF(gb2312) -NOMETHODS(__methods) - -void -init_gb2312(void) -{ - PyObject *codec; - PyObject *m = NULL, *mod = NULL, *o = NULL; - - m = Py_InitModule("_gb2312", __methods); - - /* Import mapdata */ - MAPOPEN(mod, "zh_CN") - if (IMPORTMAP(mod, gb2312, NULL, &gb2312decmap) || - IMPORTMAP(mod, gbcommon, &gbcommonencmap, NULL)) - goto errorexit; - MAPCLOSE(mod) - - /* Create Codec Instances */ - MULTIBYTECODEC_OPEN(mod, o) - REGISTERCODEC(m, o, codec) - MULTIBYTECODEC_CLOSE(mod, o) - - if (PyErr_Occurred()) - Py_FatalError("can't initialize the _gb2312 module"); - - return; - -errorexit: - Py_XDECREF(m); - Py_XDECREF(mod); - Py_XDECREF(o); -} +BEGIN_CODEC_REGISTRY(gb2312) + MAPOPEN(zh_CN) + IMPORTMAP_DEC(gb2312) + IMPORTMAP_ENC(gbcommon) + MAPCLOSE() +END_CODEC_REGISTRY(gb2312) /* * ex: ts=8 sts=4 et 1.3 +23 -74 cjkcodecs/src/_gbk.c Index: _gbk.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_gbk.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- _gbk.c 20 May 2003 11:20:56 -0000 1.2 +++ _gbk.c 21 May 2003 23:52:12 -0000 1.3 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _gbk.c,v 1.2 2003/05/20 11:20:56 perky Exp $ + * $Id: _gbk.c,v 1.3 2003/05/21 23:52:12 perky Exp $ */ #include "codeccommon.h" @@ -39,39 +39,29 @@ ENCODER(gbk) { while (inleft > 0) { - const encode_map *map; - Py_UNICODE c = **inbuf, clow; + Py_UNICODE c = **inbuf; DBCHAR code; if (c < 0x80) { - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } UCS4INVALID(c) - if (outleft < 2) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(2) GBK_PREENCODE(c, code) - else { - map = &gbcommonencmap[c >> 8]; - clow = c & 0xff; - if (map->map == NULL || clow < map->bottom || clow > map->top || - (code = map->map[clow - map->bottom]) == NOCHAR) - return 1; - } + else TRYMAP_ENC(&gbcommonencmap[c >> 8], code, c & 0xff) + else return 1; (*outbuf)[0] = (code >> 8) | 0x80; if (code & 0x8000) (*outbuf)[1] = (code & 0xFF); /* MSB set: GBK */ else (*outbuf)[1] = (code & 0xFF) | 0x80; /* MSB unset: GB2312 */ - (*outbuf) += 2; outleft -= 2; - (*inbuf)++; inleft--; + NEXT(1, 2) } return 0; @@ -80,79 +70,38 @@ DECODER(gbk) { while (inleft > 0) { - const decode_map *map; - unsigned char c = **inbuf, c2; + unsigned char c = **inbuf; Py_UNICODE code; - if (outleft < 1) - return MBERR_TOOSMALL; + RESERVE_OUTBUF(1) if (c < 0x80) { **outbuf = c; - (*inbuf)++; inleft--; - (*outbuf)++; outleft--; + NEXT(1, 1) continue; } - if (inleft < 2) - return MBERR_TOOFEW; + RESERVE_INBUF(2) GBK_PREDECODE(c, (*inbuf)[1], code) - else { - c2 = (*inbuf)[1] ^ 0x80; - map = &gb2312decmap[c & 0x7f]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) { - c2 ^= 0x80; - map = &gbkextdecmap[c]; - if (map->map == NULL || c2 < map->bottom || c2 > map->top || - (code = map->map[c2 - map->bottom]) == UNIINV) - return 2; - } - } + else TRYMAP_DEC(&gb2312decmap[c & 0x7f], code, (*inbuf)[1] ^ 0x80) + else TRYMAP_DEC(&gbkextdecmap[c], code, (*inbuf)[1]) + else return 2; **outbuf = code; - (*outbuf)++; outleft--; - (*inbuf) += 2; inleft -= 2; + NEXT(2, 1) } return 0; } -CODECDEF(gbk) -NOMETHODS(__methods) - -void -init_gbk(void) -{ - PyObject *codec; - PyObject *m = NULL, *mod = NULL, *o = NULL; - - m = Py_InitModule("_gbk", __methods); - - /* Import mapdata */ - MAPOPEN(mod, "zh_CN") - if (IMPORTMAP(mod, gb2312, NULL, &gb2312decmap) || - IMPORTMAP(mod, gbkext, NULL, &gbkextdecmap) || - IMPORTMAP(mod, gbcommon, &gbcommonencmap, NULL)) - goto errorexit; - MAPCLOSE(mod) - - /* Create Codec Instances */ - MULTIBYTECODEC_OPEN(mod, o) - REGISTERCODEC(m, o, codec) - MULTIBYTECODEC_CLOSE(mod, o) - - if (PyErr_Occurred()) - Py_FatalError("can't initialize the _gbk module"); - - return; - -errorexit: - Py_XDECREF(m); - Py_XDECREF(mod); - Py_XDECREF(o); -} +BEGIN_CODEC_REGISTRY(gbk) + MAPOPEN(zh_CN) + IMPORTMAP_DEC(gb2312) + IMPORTMAP_DEC(gbkext) + IMPORTMAP_ENC(gbcommon) + MAPCLOSE() +END_CODEC_REGISTRY(gbk) /* * ex: ts=8 sts=4 et 1.6 +77 -27 cjkcodecs/src/codeccommon.h Index: codeccommon.h =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/codeccommon.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- codeccommon.h 20 May 2003 10:08:47 -0000 1.5 +++ codeccommon.h 21 May 2003 23:52:12 -0000 1.6 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: codeccommon.h,v 1.5 2003/05/20 10:08:47 perky Exp $ + * $Id: codeccommon.h,v 1.6 2003/05/21 23:52:12 perky Exp $ */ #include "Python.h" @@ -48,45 +48,95 @@ MultibyteCodec_State *state, \ const unsigned char **inbuf, size_t inleft, \ Py_UNICODE **outbuf, size_t outleft) -#define CODECDEF(encoding) \ + +#if Py_UNICODE_SIZE == 4 +#define UCS4INVALID(code) \ + if ((code) > 0xFFFF) \ + return 1; +#else +#define UCS4INVALID(code) +#endif + +#define BEGIN_CODEC_REGISTRY(encoding) \ static MultibyteCodec __codec = { \ #encoding, encoding##_encode, encoding##_decode \ - }; -#define NOMETHODS(name) \ - static struct PyMethodDef name[] = { \ + }; \ + \ + static struct PyMethodDef __methods[] = { \ {NULL, NULL}, \ - }; + }; \ + \ + void \ + init_##encoding(void) \ + { \ + PyObject *codec; \ + PyObject *m = NULL, *mod = NULL, *o = NULL; \ + \ + m = Py_InitModule("_" #encoding, __methods); -#define MAPOPEN(mod, locale) \ - mod = PyImport_ImportModule("mapdata_" locale); \ - if (mod == NULL) goto errorexit; -#define MAPCLOSE(mod) \ +#define MAPOPEN(locale) \ + mod = PyImport_ImportModule("mapdata_" #locale); \ + if (mod == NULL) goto errorexit; \ + if ( +#define IMPORTMAP_ENCDEC(charset) \ + importmap(mod, "__map_" #charset, &charset##encmap, \ + &charset##decmap) || +#define IMPORTMAP_ENC(charset) \ + importmap(mod, "__map_" #charset, &charset##encmap, \ + NULL) || +#define IMPORTMAP_DEC(charset) \ + importmap(mod, "__map_" #charset, NULL, \ + &charset##decmap) || +#define MAPCLOSE() \ + 0) goto errorexit; \ Py_DECREF(mod); -#define MULTIBYTECODEC_OPEN(mod, o) \ +#define END_CODEC_REGISTRY(encoding) \ mod = PyImport_ImportModule("multibytecodec"); \ if (mod == NULL) goto errorexit; \ o = PyObject_GetAttrString(mod, "__create_codec"); \ if (o == NULL || !PyCallable_Check(o)) \ - goto errorexit; -#define MULTIBYTECODEC_CLOSE(mod, o) \ - Py_DECREF(o); Py_DECREF(mod); - -#define IMPORTMAP(mod, encoding, em, dm) \ - importmap(mod, "__map_" #encoding, em, dm) -#define REGISTERCODEC(m, o, codec) \ + goto errorexit; \ + \ codec = createcodec(o, &__codec); \ if (codec == NULL) \ goto errorexit; \ - PyModule_AddObject(m, "codec", codec); - -#if Py_UNICODE_SIZE == 4 -#define UCS4INVALID(code) \ - if ((code) > 0xFFFF) \ - return 1; -#else -#define UCS4INVALID(code) -#endif + PyModule_AddObject(m, "codec", codec); \ + Py_DECREF(o); Py_DECREF(mod); \ + \ + if (PyErr_Occurred()) \ + Py_FatalError("can't initialize the _" #encoding \ + " module"); \ + \ + return; \ + \ +errorexit: \ + Py_XDECREF(m); \ + Py_XDECREF(mod); \ + Py_XDECREF(o); \ +} + +#define NEXT(i, o) \ + (*inbuf) += (i); \ + (inleft) -= (i); \ + (*outbuf) += (o); \ + (outleft) -= (o); + +#define RESERVE_INBUF(n) \ + if (inleft < (n)) \ + return MBERR_TOOFEW; +#define RESERVE_OUTBUF(n) \ + if (outleft < (n)) \ + return MBERR_TOOSMALL; + +#define TRYMAP_ENC(m, assi, val) \ + if ((m)->map != NULL && (val) >= (m)->bottom && \ + (val)<= (m)->top && ((assi) = (m)->map[(val) - \ + (m)->bottom]) != NOCHAR) ; +#define TRYMAP_DEC(m, assi, val) \ + if ((m)->map != NULL && (val) >= (m)->bottom && \ + (val)<= (m)->top && ((assi) = (m)->map[(val) - \ + (m)->bottom]) != UNIINV) ; static int importmap(PyObject *mod, const char *symbol, |
From: Hye-Shik C. <pe...@us...> - 2003-05-22 00:04:05
|
perky 03/05/21 17:04:04 Removed: . ROADMAP Log: Remove ROADMAP. I'll implement all of features mentioned on this document before release 1.0. Heh. |
From: Hye-Shik C. <pe...@us...> - 2003-05-20 12:21:02
|
perky 03/05/20 05:21:01 Added: . ROADMAP Log: Add the future vision ;) Revision Changes Path 1.1 cjkcodecs/ROADMAP Index: ROADMAP =================================================================== CJK codecs planned update details ================================= $Id: ROADMAP,v 1.1 2003/05/20 12:21:01 perky Exp $ --- version 1.0 - Supported encodings: big5, cp932, cp949, cp950, gb18030, gb2312, gbk, euc-jp, euc-kr, shift-jis - PEP293 full support. - StreamReader, StreamWriter is fully stateful. (StreamWriter doesn't buffer pending characters to wait to complete sequences) --- version 1.1 - Universal ISO-2022 framework. - Newly supported encodings: iso-2022-cn, iso-2022-jp, iso-2022-jp-1, iso-2022-jp-2, iso-2022-kr, johab - 'hangul' module will be imported from KoreanCodecs. --- version 1.2 - Incorporation of mapping for CNS 11643 planes and JIS X 1003 planes - Newly supported encodings: iso-2022-jp-3, iso-2022-tw, euc-jisx1003, euc-tw, shift-jisx1003 --- version 1.3 - Newly supported encodings: big5hkscs, hkscs, hzgb, mac_korean, mac_japanese - StreamWriter will be allow to buffer incomplete sequences on this version. - U+1100 Hangul Jamo sequences will be conjoined into syllable sequences transparently on encoding into korean encodings. |
From: Hye-Shik C. <pe...@us...> - 2003-05-20 11:52:52
|
perky 03/05/20 03:59:09 Modified: src/maps tweak_gbk.h Log: Add gb18030 and gbk codec. Revision Changes Path 1.2 +3 -3 cjkcodecs/src/maps/tweak_gbk.h Index: tweak_gbk.h =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/maps/tweak_gbk.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- tweak_gbk.h 17 May 2003 20:36:11 -0000 1.1 +++ tweak_gbk.h 20 May 2003 10:59:09 -0000 1.2 @@ -1,8 +1,8 @@ -/* $Id: tweak_gbk.h,v 1.1 2003/05/17 20:36:11 perky Exp $ */ +/* $Id: tweak_gbk.h,v 1.2 2003/05/20 10:59:09 perky Exp $ */ #define GBK_PREDECODE(dc1, dc2, assi) \ if ((dc1) == 0xa1 && (dc2) == 0xaa) (assi) = 0x2014; \ else if ((dc1) == 0xa1 && (dc2) == 0xa4) (assi) = 0x00b7; #define GBK_PREENCODE(code, assi) \ - if ((dc1) == 0x20 && (dc2) == 0x14) (assi) = 0xa1aa; \ - else if ((dc1) == 0x00 && (dc2) == 0xb7) (assi) = 0xa1a4; + if ((code) == 0x2014) (assi) = 0xa1aa; \ + else if ((code) == 0x00b7) (assi) = 0xa1a4; |
From: Hye-Shik C. <pe...@us...> - 2003-05-20 11:52:42
|
perky 03/05/20 03:59:09 Added: src _gb18030.c _gbk.c Log: Add gb18030 and gbk codec. Revision Changes Path 1.1 cjkcodecs/src/_gb18030.c Index: _gb18030.c =================================================================== /* * _gb18030.c: the GB18030 codec * * Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $Id: _gb18030.c,v 1.1 2003/05/20 10:59:08 perky Exp $ */ #include "codeccommon.h" #include "maps/tweak_gbk.h" #include "maps/map_gb18030uni.h" ENCMAP(gbcommon) ENCMAP(gb18030ext) DECMAP(gb2312) DECMAP(gbkext) DECMAP(gb18030ext) ENCODER(gb18030) { while (inleft > 0) { const encode_map *map; Py_UNICODE c = **inbuf, clow; DBCHAR code; if (c < 0x80) { if (outleft < 1) return MBERR_TOOSMALL; **outbuf = c; (*inbuf)++; inleft--; (*outbuf)++; outleft--; continue; } #if Py_UNICODE_SIZE == 4 else if (nc > 0x10FFFF) return 1; else if (nc >= 0x10000) { Py_UNICODE tc = c; if (outleft < 4) return MBERR_TOOSMALL; (*outbuf)[3] = (unsigned char)(tc % 10) + 0x30; tc /= 10; (*outbuf)[2] = (unsigned char)(tc % 126) + 0x81; tc /= 126; (*outbuf)[1] = (unsigned char)(tc % 10) + 0x30; tc /= 10; (*outbuf)[0] = (unsigned char)(tc + 0x90); (*outbuf) += 4; outleft -= 4; (*inbuf)++; inleft--; continue; } #endif if (outleft < 2) return MBERR_TOOSMALL; GBK_PREENCODE(c, code) else { map = &gbcommonencmap[c >> 8]; clow = c & 0xff; if (map->map == NULL || clow < map->bottom || clow > map->top || (code = map->map[clow - map->bottom]) == UNIINV) { map = &gb18030extencmap[c >> 8]; clow = c & 0xff; if (map->map == NULL || clow < map->bottom || clow > map->top || (code = map->map[clow - map->bottom]) == UNIINV) { const struct _gb18030_to_unibmp_ranges *utrrange; if (outleft < 4) return MBERR_TOOSMALL; for (utrrange = gb18030_to_unibmp_ranges; utrrange->first != 0; utrrange++) if (utrrange->first <= c && c <= utrrange->last) { Py_UNICODE tc; tc = c - utrrange->first + utrrange->base; (*outbuf)[3] = (unsigned char)(tc % 10) + 0x30; tc /= 10; (*outbuf)[2] = (unsigned char)(tc % 126) + 0x81; tc /= 126; (*outbuf)[1] = (unsigned char)(tc % 10) + 0x30; tc /= 10; (*outbuf)[0] = (unsigned char)tc + 0x81; (*outbuf) += 4; outleft -= 4; (*inbuf)++; inleft--; break; } if (utrrange->first == 0) { PyErr_SetString(PyExc_RuntimeError, "unicode mapping invalid"); return 1; } continue; } } } (*outbuf)[0] = (code >> 8) | 0x80; if (code & 0x8000) (*outbuf)[1] = (code & 0xFF); /* MSB set: GBK or GB18030ext */ else (*outbuf)[1] = (code & 0xFF) | 0x80; /* MSB unset: GB2312 */ (*outbuf) += 2; outleft -= 2; (*inbuf)++; inleft--; } return 0; } DECODER(gb18030) { while (inleft > 0) { const decode_map *map; unsigned char c = **inbuf, c2; Py_UNICODE code; if (outleft < 1) return MBERR_TOOSMALL; if (c < 0x80) { **outbuf = c; (*inbuf)++; inleft--; (*outbuf)++; outleft--; continue; } if (inleft < 2) return MBERR_TOOFEW; c2 = (*inbuf)[1]; if (c2 >= 0x30 && c2 <= 0x39) { /* 4 bytes seq */ const struct _gb18030_to_unibmp_ranges *utr; unsigned char c3, c4; Py_UNICODE lseq; if (inleft < 4) return MBERR_TOOFEW; c3 = (*inbuf)[2]; c4 = (*inbuf)[3]; if (c < 0x81 || c3 < 0x81 || c4 < 0x30 || c4 > 0x39) return 4; c -= 0x81; c2 -= 0x30; c3 -= 0x81; c4 -= 0x30; if (c < 4) { /* U+0080 - U+FFFF */ lseq = ((Py_UNICODE)c * 10 + c2) * 1260 + (Py_UNICODE)c3 * 10 + c4; if (lseq < 39420) { for (utr = gb18030_to_unibmp_ranges; lseq >= (utr + 1)->base; utr++) ; **outbuf = utr->first - utr->base + lseq; (*outbuf)++; outleft--; (*inbuf) += 4; inleft -= 4; continue; } } #if Py_UNICODE_SIZE == 4 else if (c >= 15) { /* U+10000 - U+10FFFF */ lseq = 0x10000 + (((Py_UNICODE)c-15) * 10 + c2) * 1260 + (Py_UNICODE)c3 * 10 + c4; if (lseq <= 0x10FFFF) { **outbuf = lseq; (*outbuf)++; outleft--; (*inbuf) += 4; inleft -= 4; continue; } } #endif return 4; } GBK_PREDECODE(c, c2, code) else { c2 ^= 0x80; map = &gb2312decmap[c & 0x7f]; if (map->map == NULL || c2 < map->bottom || c2 > map->top || (code = map->map[c2 - map->bottom]) == UNIINV) { c2 ^= 0x80; map = &gbkextdecmap[c]; if (map->map == NULL || c2 < map->bottom || c2 > map->top || (code = map->map[c2 - map->bottom]) == UNIINV) { map = &gb18030extdecmap[c]; if (map->map == NULL || c2 < map->bottom || c2 > map->top || (code = map->map[c2 - map->bottom]) == UNIINV) return 2; } } } **outbuf = code; (*outbuf)++; outleft--; (*inbuf) += 2; inleft -= 2; } return 0; } CODECDEF(gb18030) NOMETHODS(__methods) void init_gb18030(void) { PyObject *codec; PyObject *m = NULL, *mod = NULL, *o = NULL; m = Py_InitModule("_gb18030", __methods); /* Import mapdata */ MAPOPEN(mod, "zh_CN") if (IMPORTMAP(mod, gb2312, NULL, &gb2312decmap) || IMPORTMAP(mod, gbkext, NULL, &gbkextdecmap) || IMPORTMAP(mod, gb18030ext, &gb18030extencmap, &gb18030extdecmap) || IMPORTMAP(mod, gbcommon, &gbcommonencmap, NULL)) goto errorexit; MAPCLOSE(mod) /* Create Codec Instances */ MULTIBYTECODEC_OPEN(mod, o) REGISTERCODEC(m, o, codec) MULTIBYTECODEC_CLOSE(mod, o) if (PyErr_Occurred()) Py_FatalError("can't initialize the _gb18030 module"); return; errorexit: Py_XDECREF(m); Py_XDECREF(mod); Py_XDECREF(o); } /* * ex: ts=8 sts=4 et */ 1.1 cjkcodecs/src/_gbk.c Index: _gbk.c =================================================================== /* * _gbk.c: the GBK codec * * Copyright (C) 2003 Hye-Shik Chang <pe...@Fr...>. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $Id: _gbk.c,v 1.1 2003/05/20 10:59:08 perky Exp $ */ #include "codeccommon.h" #include "maps/tweak_gbk.h" ENCMAP(gbcommon) DECMAP(gb2312) DECMAP(gbkext) ENCODER(gbk) { while (inleft > 0) { const encode_map *map; Py_UNICODE c = **inbuf, clow; DBCHAR code; if (c < 0x80) { if (outleft < 1) return MBERR_TOOSMALL; **outbuf = c; (*inbuf)++; inleft--; (*outbuf)++; outleft--; continue; } UCS4INVALID(c) if (outleft < 2) return MBERR_TOOSMALL; GBK_PREENCODE(c, code) else { map = &gbcommonencmap[c >> 8]; clow = c & 0xff; if (map->map == NULL || clow < map->bottom || clow > map->top || (code = map->map[clow - map->bottom]) == UNIINV) return 1; } (*outbuf)[0] = (code >> 8) | 0x80; if (code & 0x8000) (*outbuf)[1] = (code & 0xFF); /* MSB set: GBK */ else (*outbuf)[1] = (code & 0xFF) | 0x80; /* MSB unset: GB2312 */ (*outbuf) += 2; outleft -= 2; (*inbuf)++; inleft--; } return 0; } DECODER(gbk) { while (inleft > 0) { const decode_map *map; unsigned char c = **inbuf, c2; Py_UNICODE code; if (outleft < 1) return MBERR_TOOSMALL; if (c < 0x80) { **outbuf = c; (*inbuf)++; inleft--; (*outbuf)++; outleft--; continue; } if (inleft < 2) return MBERR_TOOFEW; GBK_PREDECODE(c, (*inbuf)[1], code) else { c2 = (*inbuf)[1] ^ 0x80; map = &gb2312decmap[c & 0x7f]; if (map->map == NULL || c2 < map->bottom || c2 > map->top || (code = map->map[c2 - map->bottom]) == UNIINV) { c2 ^= 0x80; map = &gbkextdecmap[c]; if (map->map == NULL || c2 < map->bottom || c2 > map->top || (code = map->map[c2 - map->bottom]) == UNIINV) return 2; } } **outbuf = code; (*outbuf)++; outleft--; (*inbuf) += 2; inleft -= 2; } return 0; } CODECDEF(gbk) NOMETHODS(__methods) void init_gbk(void) { PyObject *codec; PyObject *m = NULL, *mod = NULL, *o = NULL; m = Py_InitModule("_gbk", __methods); /* Import mapdata */ MAPOPEN(mod, "zh_CN") if (IMPORTMAP(mod, gb2312, NULL, &gb2312decmap) || IMPORTMAP(mod, gbkext, NULL, &gbkextdecmap) || IMPORTMAP(mod, gbcommon, &gbcommonencmap, NULL)) goto errorexit; MAPCLOSE(mod) /* Create Codec Instances */ MULTIBYTECODEC_OPEN(mod, o) REGISTERCODEC(m, o, codec) MULTIBYTECODEC_CLOSE(mod, o) if (PyErr_Occurred()) Py_FatalError("can't initialize the _gbk module"); return; errorexit: Py_XDECREF(m); Py_XDECREF(mod); Py_XDECREF(o); } /* * ex: ts=8 sts=4 et */ |
From: Hye-Shik C. <pe...@us...> - 2003-05-20 11:44:33
|
perky 03/05/20 04:33:33 Added: src/maps alg_jisx0201.h Log: Add JIS X 0201 Algorithmic(really? :) encoder/decoder Revision Changes Path 1.1 cjkcodecs/src/maps/alg_jisx0201.h Index: alg_jisx0201.h =================================================================== /* $Id: alg_jisx0201.h,v 1.1 2003/05/20 11:33:32 perky Exp $ */ #define JISX0201_ENCODE(c, assi) \ if ((c) < 0x5c) (assi) = (c); \ else if ((c) > 0x5c && (c) < 0x7e) \ (assi) = (c); \ else if ((c) == 0x00a5) (assi) = 0x5c; \ else if ((c) == 0x203e) (assi) = 0x7e; \ else if ((c) >= 0xff61 && (c) <= 0xff9f) \ (assi) = (c) - 0xfec0; #define JISX0201_DECODE(c, assi) \ if ((c) < 0x5c) (assi) = (c); \ else if ((c) == 0x5c) (assi) = 0x00a5; \ else if ((c) < 0x7e) (assi) = (c); \ else if ((c) == 0x7e) (assi) = 0x203e; \ else if ((c) >= 0xa1 && (c) <= 0xdf) \ (assi) = 0xfec0 + (c); |