hirokawa Sun, 21 Aug 2011 02:23:33 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=315250
Log: MFH: speed improvement of jisx0213 conversion. Changed paths: U php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c U php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c U php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/unicode_table_jis2004.h
Modified: php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c =================================================================== --- php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c 2011-08-21 02:22:53 UTC (rev 315249) +++ php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c 2011-08-21 02:23:33 UTC (rev 315250) @@ -39,8 +39,6 @@ #include "unicode_table_jis.h" extern int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); - -static int mbfl_filt_conv_2022jp_2004_flush(mbfl_convert_filter *filter); static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter); const mbfl_encoding mbfl_encoding_2022jp_2004 = { @@ -74,51 +72,9 @@ mbfl_filt_conv_common_ctor, mbfl_filt_conv_common_dtor, mbfl_filt_conv_wchar_jis2004, - mbfl_filt_conv_2022jp_2004_flush + mbfl_filt_conv_jis2004_flush }; -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -static int -mbfl_filt_conv_2022jp_2004_flush(mbfl_convert_filter *filter) -{ - int k, c1, c2, s1, s2; - - k = filter->cache; - - if ((filter->status & 0xf) == 1 && k >= 0 && k <= jisx0213_u2_tbl_len) { - s1 = jisx0213_u2_fb_tbl[k]; - c1 = (s1 >> 8) & 0x7f; - c2 = s1 & 0x7f; - - if ((filter->status & 0xff00) != 0x200) { - CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ - CK((*filter->output_function)(0x24, filter->data)); /* '$' */ - CK((*filter->output_function)(0x28, filter->data)); /* '(' */ - CK((*filter->output_function)(0x51, filter->data)); /* 'Q' */ - } - filter->status = 0x200; - CK((*filter->output_function)(c1, filter->data)); - CK((*filter->output_function)(c2, filter->data)); - } - filter->cache = 0; - - /* back to latin */ - if ((filter->status & 0xff00) != 0) { - CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ - CK((*filter->output_function)(0x28, filter->data)); /* '(' */ - CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ - } - - filter->status &= 0xff; - - if (filter->flush_function != NULL) { - return (*filter->flush_function)(filter->data); - } - - return 0; -} - static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter) { retry: Modified: php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c =================================================================== --- php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c 2011-08-21 02:22:53 UTC (rev 315249) +++ php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c 2011-08-21 02:23:33 UTC (rev 315250) @@ -34,8 +34,6 @@ #include "mbfilter.h" #include "mbfilter_sjis_2004.h" -#define UNICODE_TABLE_JIS2004_DEF - #include "unicode_table_jis2004.h" #include "unicode_table_jis.h" @@ -43,20 +41,6 @@ static int mbfl_filt_ident_sjis2004(int c, mbfl_identify_filter *filter); -static const int uni2sjis_tbl_range[][2] = { - {0x0000, 0x045f}, - {0x4e00, 0x9fff}, - {0xff00, 0xffe5}, - {0xfa0f, 0xfa6a}, -}; - -static const unsigned short *uni2sjis_tbl[] = { - ucs_a1_jisx0213_table, - ucs_i_jisx0213_table, - ucs_r_jisx0213_table, - ucs_r2_jisx0213_table, -}; - extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); extern int mbfl_bisec_srch(int w, const unsigned short *tbl, int n); extern int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n); @@ -236,7 +220,7 @@ w1 = (s1 << 8) | s2; if (w1 >= 0x2121) { - + /* conversion for combining characters */ if ((w1 >= 0x2477 && w1 <= 0x2479) || (w1 >= 0x2479 && w1 <= 0x247B) || (w1 >= 0x2577 && w1 <= 0x257E) || w1 == 0x2678 || w1 == 0x2B44 || (w1 >= 0x2B48 && w1 <= 0x2B4F) || (w1 >= 0x2B65 && w1 <= 0x2B66)) { @@ -248,6 +232,7 @@ } } + /* conversion for BMP */ if (w <= 0) { w1 = (s1 - 0x21)*94 + s2 - 0x21; if (w1 >= 0 && w1 < jisx0213_ucs_table_size) { @@ -255,6 +240,7 @@ } } + /* conversion for CJK Unified Ideographs ext.B (U+2XXXX) */ if (w <= 0) { w1 = (s1 << 8) | s2; k = mbfl_bisec_srch2(w1, jisx0213_jis_u5_key, jisx0213_u5_tbl_len); @@ -285,7 +271,7 @@ } break; - case 2: /* got 0x8e : EUC-JP-2004 */ + case 2: /* got 0x8e : EUC-JP-2004 kana */ filter->status = 0; if (c > 0xa0 && c < 0xe0) { w = 0xfec0 + c; @@ -300,41 +286,65 @@ } break; - case 3: /* got 0x8f, X 0213 plane 2 first char : EUC-JP-2004 */ + case 3: /* X 0213 plane 2 first char : EUC-JP-2004 (0x8f), ISO-2022-JP-2004 */ if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ CK((*filter->output_function)(c, filter->data)); filter->status = 0; } else { - filter->status++; - filter->cache = c; + if (filter->from->no_encoding == mbfl_no_encoding_eucjp2004) { + s1 = c - 0x80; + } else { + s1 = c; + } + if (s1 > 0x20 && s1 < 0x80) { + filter->cache = s1; + filter->status++; + } else { + if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + w = c | 0x8f00; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + } else { + w = c & 0x7f; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0213; + } + CK((*filter->output_function)(w, filter->data)); + } } break; - case 4: /* got 0x8f, X 0213 plane 2 second char */ + case 4: /* X 0213 plane 2 second char : EUC-JP-2004, ISO-2022-JP-2004 */ filter->status &= ~0xf; c1 = filter->cache; - c2 = c; if (filter->from->no_encoding == mbfl_no_encoding_eucjp2004) { - c1 -= 0x80; - c2 -= 0x80; + c2 = c - 0x80; + } else { + c2 = c; } s1 = c1 - 0x21; s2 = c2 - 0x21; - if (s1 >= 0 && s1 < 94 && s2 >= 0 && s2 < 94) { + if (((s1 >= 0 && s1 <= 4 && s1 != 1) || s1 == 7 || (s1 >= 11 && s1 <= 14) || + (s1 >= 77 && s1 < 94)) && s2 >= 0 && s2 < 94) { + /* calc offset from ku */ for (k = 0; k < jisx0213_p2_ofst_len; k++) { if (s1 == jisx0213_p2_ofst[k]-1) { break; } } k = k - (jisx0213_p2_ofst[k]-1); + + /* check for japanese chars in BMP */ s = (s1 + 94 + k)*94 + s2; if (s >= 0 && s < jisx0213_ucs_table_size) { w = jisx0213_ucs_table[s]; } else { w = 0; } + + /* check for japanese chars in CJK Unified Ideographs ext.B (U+2XXXX) */ if (w <= 0) { w1 = ((c1 + k + 94) << 8) | c2; k = mbfl_bisec_srch2(w1, jisx0213_jis_u5_key, jisx0213_u5_tbl_len); @@ -342,11 +352,13 @@ w = jisx0213_jis_u5_tbl[k] + 0x20000; } } + if (w <= 0) { w = ((c1 & 0x7f) << 8) | (c2 & 0x7f); w &= MBFL_WCSPLANE_MASK; w |= MBFL_WCSPLANE_JIS0213; } + CK((*filter->output_function)(w, filter->data)); } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ CK((*filter->output_function)(c, filter->data)); @@ -365,7 +377,7 @@ break; - case 5: /* X 0212 */ + case 5: /* X 0208 : ISO-2022-JP-2004 */ filter->status &= ~0xf; c1 = filter->cache; if (c > 0x20 && c < 0x7f) { @@ -382,7 +394,7 @@ CK((*filter->output_function)(w, filter->data)); break; - /* ESC */ + /* ESC : ISO-2022-JP-2004 */ /* case 0x06: */ /* case 0x16: */ /* case 0x26: */ @@ -401,7 +413,7 @@ } break; - /* ESC $ */ + /* ESC $ : ISO-2022-JP-2004 */ /* case 0x07: */ /* case 0x17: */ /* case 0x27: */ @@ -423,7 +435,7 @@ break; - /* ESC $ ( */ + /* ESC $ ( : ISO-2022-JP-2004 */ /* case 0x08: */ /* case 0x18: */ /* case 0x28: */ @@ -444,7 +456,7 @@ } break; - /* ESC ( */ + /* ESC ( : ISO-2022-JP-2004 */ /* case 0x09: */ /* case 0x19: */ /* case 0x29: */ @@ -476,8 +488,13 @@ retry: - if ((filter->status & 0xf)== 0 && ( c == 0x00E6 || - (c >= 0x0254 && c <= 0x02E9) || (c >= 0x304B && c <= 0x31F7))) { + /* check for 1st char of combining characters */ + if ((filter->status & 0xf)== 0 && ( + c == 0x00E6 || + (c >= 0x0254 && c <= 0x02E9) || + (c >= 0x304B && c <= 0x3053) || + (c >= 0x30AB && c <= 0x30C8) || + c == 0x31F7)) { for (k=0;k<jisx0213_u2_tbl_len;k++) { if (c == jisx0213_u2_tbl[2*k]) { filter->status++; @@ -487,6 +504,7 @@ } } + /* check for 2nd char of combining characters */ if ((filter->status & 0xf) == 1 && filter->cache >= 0 && filter->cache <= jisx0213_u2_tbl_len) { k = filter->cache; @@ -529,23 +547,26 @@ } } + /* check for major japanese chars */ if (s1 <= 0) { - for (k=0; k<sizeof(uni2sjis_tbl_range)/(sizeof(int)*2);k++) { - if (c >= uni2sjis_tbl_range[k][0] && c <= uni2sjis_tbl_range[k][1]) { - s1 = uni2sjis_tbl[k][c-uni2sjis_tbl_range[k][0]]; + for (k=0; k < uni2jis_tbl_len ;k++) { + if (c >= uni2jis_tbl_range[k][0] && c <= uni2jis_tbl_range[k][1]) { + s1 = uni2jis_tbl[k][c-uni2jis_tbl_range[k][0]]; break; } } } - if (c >= ucs_c1_jisx0213_min && c <= ucs_c1_jisx0213_max) { + /* check for japanese chars in compressed area */ + if (s1 <= 0 && c >= ucs_c1_jisx0213_min && c <= ucs_c1_jisx0213_max) { k = mbfl_bisec_srch(c, ucs_c1_jisx0213_tbl, ucs_c1_jisx0213_tbl_len); if (k >= 0) { s1 = ucs_c1_jisx0213_ofst[k] + c - ucs_c1_jisx0213_tbl[2*k]; } } - if (c >= jisx0213_u5_tbl_min && c <= jisx0213_u5_tbl_max) { + /* check for japanese chars in CJK Unified Ideographs ext.B (U+2XXXX) */ + if (s1 <= 0 && c >= jisx0213_u5_tbl_min && c <= jisx0213_u5_tbl_max) { k = mbfl_bisec_srch2(c - 0x20000, jisx0213_u5_jis_key, jisx0213_u5_tbl_len); if (k >= 0) { s1 = jisx0213_u5_jis_tbl[k]; @@ -649,6 +670,7 @@ int k, c1, c2, s1, s2; k = filter->cache; + filter->cache = 0; if (filter->status == 1 && k >= 0 && k <= jisx0213_u2_tbl_len) { s1 = jisx0213_u2_fb_tbl[k]; @@ -660,12 +682,29 @@ } else if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { s2 = (s1 & 0xff) | 0x80; s1 = ((s1 >> 8) & 0xff) | 0x80; + } else { + s2 = s1 & 0x7f; + s1 = (s1 >> 8) & 0x7f; + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x51, filter->data)); /* 'Q' */ + } + filter->status = 0x200; } CK((*filter->output_function)(s1, filter->data)); CK((*filter->output_function)(s2, filter->data)); } - filter->cache = 0; + + /* back to latin */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0; if (filter->flush_function != NULL) { Modified: php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/unicode_table_jis2004.h =================================================================== --- php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/unicode_table_jis2004.h 2011-08-21 02:22:53 UTC (rev 315249) +++ php/php-src/branches/PHP_5_4/ext/mbstring/libmbfl/filters/unicode_table_jis2004.h 2011-08-21 02:23:33 UTC (rev 315250) @@ -24,13 +24,11 @@ #ifndef UNICODE_TABLE_JIS2004_H #define UNICODE_TABLE_JIS2004_H -#ifdef UNICODE_TABLE_JIS2004_DEF - /* * Unicode table */ -const unsigned short jisx0213_ucs_table[] = { // 0x0000 - 0x2C0F +static const unsigned short jisx0213_ucs_table[] = { // 0x0000 - 0x2C0F /* plane 1 ku 1 */ 0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B, @@ -1593,10 +1591,10 @@ 0x9F69,0x0000,0x9F6D,0x9F70,0x9F75,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,}; -const int jisx0213_ucs_table_size = (sizeof(jisx0213_ucs_table)/sizeof(unsigned short)); +static const int jisx0213_ucs_table_size = (sizeof(jisx0213_ucs_table)/sizeof(unsigned short)); -const unsigned short ucs_a1_jisx0213_table[] = { // 0x0000 - 0x045f +static const unsigned short ucs_a1_jisx0213_table[] = { // 0x0000 - 0x045f /* 0000h */ 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, @@ -1749,12 +1747,51 @@ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, }; -const int ucs_a1_jisx0213_table_min = 0x0000; -const int ucs_a1_jisx0213_table_max = 0x0000 + +static const int ucs_a1_jisx0213_table_min = 0x0000; +static const int ucs_a1_jisx0213_table_max = 0x0000 + (sizeof(ucs_a1_jisx0213_table)/sizeof(unsigned short)); -const unsigned short ucs_i_jisx0213_table[] = { // 0x4e00 - 0x9fff +static const unsigned short ucs_hk_jisx0213_table[] = { // 0x3000 - 0x30ff +/* 3000h */ +0x2121,0x2122,0x2123,0x2137,0x0000,0x2139,0x213A,0x213B, +0x2152,0x2153,0x2154,0x2155,0x2156,0x2157,0x2158,0x2159, +0x215A,0x215B,0x2229,0x222E,0x214C,0x214D,0x225A,0x225B, +0x2258,0x2259,0x0000,0x0000,0x2141,0x2D60,0x0000,0x2D61, +0x2666,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2233,0x2234,0x2235,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2236,0x2237,0x233C,0x0000,0x0000, +0x0000,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427, +0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F, +0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437, +0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F, +0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447, +0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F, +0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457, +0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F, +0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, +0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, +0x2470,0x2471,0x2472,0x2473,0x2474,0x2475,0x2476,0x0000, +0x0000,0x0000,0x0000,0x212B,0x212C,0x2135,0x2136,0x2239, +0x237B,0x2521,0x2522,0x2523,0x2524,0x2525,0x2526,0x2527, +0x2528,0x2529,0x252A,0x252B,0x252C,0x252D,0x252E,0x252F, +0x2530,0x2531,0x2532,0x2533,0x2534,0x2535,0x2536,0x2537, +0x2538,0x2539,0x253A,0x253B,0x253C,0x253D,0x253E,0x253F, +0x2540,0x2541,0x2542,0x2543,0x2544,0x2545,0x2546,0x2547, +0x2548,0x2549,0x254A,0x254B,0x254C,0x254D,0x254E,0x254F, +0x2550,0x2551,0x2552,0x2553,0x2554,0x2555,0x2556,0x2557, +0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E,0x255F, +0x2560,0x2561,0x2562,0x2563,0x2564,0x2565,0x2566,0x2567, +0x2568,0x2569,0x256A,0x256B,0x256C,0x256D,0x256E,0x256F, +0x2570,0x2571,0x2572,0x2573,0x2574,0x2575,0x2576,0x2772, +0x2773,0x2774,0x2775,0x2126,0x213C,0x2133,0x2134,0x2238, +}; +static const int ucs_hk_jisx0213_min = 0x3000; +static const int ucs_hk_jisx0213_max = 0x30FF; + +static const unsigned short ucs_i_jisx0213_table[] = { // 0x4e00 - 0x9fff + /* 4E00h */ 0x306C,0x437A,0x7F22,0x3C37,0x0000,0x0000,0x0000,0x4B7C, 0x3E66,0x3B30,0x3E65,0x323C,0x0000,0x4954,0x4D3F,0x7F23, @@ -4544,11 +4581,11 @@ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, }; -const int ucs_i_jisx0213_table_min = 0x4E00; -const int ucs_i_jisx0213_table_max = 0x4E00 + (sizeof(ucs_i_jisx0213_table)/ +static const int ucs_i_jisx0213_table_min = 0x4E00; +static const int ucs_i_jisx0213_table_max = 0x4E00 + (sizeof(ucs_i_jisx0213_table)/ sizeof(unsigned short)); -const unsigned short ucs_r_jisx0213_table[] = { // 0xff00 - 0xffe5 +static const unsigned short ucs_r_jisx0213_table[] = { // 0xff00 - 0xffe5 /* FF00h */ 0x0000,0x212A,0x2230,0x2174,0x2170,0x2173,0x2175,0x222F, @@ -4581,11 +4618,11 @@ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x2131,0x0000,0x216F,}; -const int ucs_r_jisx0213_table_min = 0xFF00; -const int ucs_r_jisx0213_table_max = 0xFF00 + (sizeof(ucs_r_jisx0213_table)/ - sizeof(unsigned short)); +static const int ucs_r_jisx0213_table_min = 0xFF00; +static const int ucs_r_jisx0213_table_max = 0xFF00 + (sizeof(ucs_r_jisx0213_table)/ + sizeof(unsigned short)); -const unsigned short ucs_r2_jisx0213_table[] = { // 0xfa0f - 0xfa6a +static const unsigned short ucs_r2_jisx0213_table[] = { // 0xfa0f - 0xfa6a 0x2F4B, 0x2F57,0x4F72,0x0000,0x8679,0x757A,0x775A,0x776F,0x0000, 0x0000,0x793C,0x793D,0x7941,0x0000,0x0000,0x0000,0x7B3A, @@ -4600,10 +4637,10 @@ 0x7B6F,0x7B79,0x7C2F,0x7C30,0x7C38,0x7C3D,0x9369,0x7C59, 0x7D63,0x7D76,0x7D7B,}; -const int ucs_r2_jisx0213_min = 0xFA0F; -const int ucs_r2_jisx0213_max = 0xFA6A; +static const int ucs_r2_jisx0213_min = 0xFA0F; +static const int ucs_r2_jisx0213_max = 0xFA6A; -const unsigned short ucs_c1_jisx0213_tbl[] = { +static const unsigned short ucs_c1_jisx0213_tbl[] = { // 0x1e00 - 0x4dff 0x1E3E,0x1E3F,0x1F70,0x1F71,0x1F72,0x1F73,0x2010,0x2010, 0x2013,0x2013,0x2014,0x2014,0x2016,0x2016,0x2018,0x2019, @@ -4709,7 +4746,7 @@ 0x4C20,0x4C20,0x4CC4,0x4CC4,0x4CD1,0x4CD1,0x4D07,0x4D07, 0x4D77,0x4D77,}; -const unsigned short ucs_c1_jisx0213_ofst[] = { +static const unsigned short ucs_c1_jisx0213_ofst[] = { 0x2872,0x2B46,0x2B50,0x213E,0x237C,0x213D,0x2142,0x2146, 0x2148,0x2277,0x2340,0x2145,0x2144,0x2273,0x216C,0x2228, 0x286B,0x007E,0x2B58,0x2C7E,0x286C,0x2C7D,0x2921,0x216E, @@ -4763,12 +4800,13 @@ 0x9728,0x972A,0x9731,0x7E3E,0x973F,0x982A,0x982D,0x984B, 0x9860,}; -const int ucs_c1_jisx0213_tbl_len = sizeof(ucs_c1_jisx0213_ofst)/sizeof(unsigned short); +static const int ucs_c1_jisx0213_tbl_len = sizeof(ucs_c1_jisx0213_ofst)/sizeof(unsigned short); -const int ucs_c1_jisx0213_min = 0x1E00; -const int ucs_c1_jisx0213_max = 0x4DFF; +static const int ucs_c1_jisx0213_min = 0x1E00; +static const int ucs_c1_jisx0213_max = 0x4DFF; -const unsigned short jisx0213_jis_u5_tbl[] = { +/* CJK Unified ideographs Extension B: U+2XXXX */ +static const unsigned short jisx0213_jis_u5_tbl[] = { 0x000B,0x123D,0x131B,0x146E,0x18BD,0x0B9F,0x16B4,0x1E34, 0x31C4,0x35C4,0x373F,0x3763,0x3CFE,0x47F1,0x548E,0x550E, 0x5771,0x59C4,0x5DA1,0x6AFF,0x6E40,0x70F4,0x7684,0x8277, @@ -4808,7 +4846,7 @@ 0x9EC4,0x9EE9,0x9EDB,0x9FCE,0xA02F,0xA01A,0xA0F9,0xA082, 0x2218,0xA38C,0xA437,0xA5F1,0xA602,0xA61A,0xA6B2,}; -const unsigned short jisx0213_jis_u5_key[] = { +static const unsigned short jisx0213_jis_u5_key[] = { 0x2E22,0x2F42,0x2F4C,0x2F60,0x2F7B,0x4F54,0x4F63,0x4F6E, 0x753A,0x7572,0x7629,0x7632,0x7660,0x776C,0x787E,0x7929, 0x7947,0x7954,0x796E,0x7A5D,0x7B33,0x7B49,0x7B6C,0x7C49, @@ -4848,7 +4886,7 @@ 0x9767,0x976D,0x9770,0x9825,0x9829,0x982B,0x9832,0x9835, 0x9853,0x9858,0x985A,0x986E,0x9870,0x9872,0x9876,}; -const unsigned short jisx0213_u5_jis_tbl[] = { +static const unsigned short jisx0213_u5_jis_tbl[] = { 0x2E22,0x7F21,0x7F2B,0x7F2E,0x7F36,0x7F46,0x7F70,0x7F79, 0x7F77,0x8122,0x8125,0x8127,0x8131,0x8132,0x8138,0x813F, 0x8141,0x814A,0x8152,0x8153,0x8159,0x815C,0x4F54,0x8177, @@ -4888,7 +4926,7 @@ 0x9767,0x9770,0x976D,0x9825,0x982B,0x9829,0x9835,0x9832, 0x7E66,0x9858,0x985A,0x986E,0x9870,0x9872,0x9876,}; -const unsigned short jisx0213_u5_jis_key[] = { +static const unsigned short jisx0213_u5_jis_key[] = { 0x000B,0x0089,0x00A2,0x00A4,0x01A2,0x0213,0x032B,0x0371, 0x0381,0x03F9,0x044A,0x0509,0x05D6,0x0628,0x074F,0x0807, 0x083A,0x08B9,0x097C,0x099D,0x0AD3,0x0B1D,0x0B9F,0x0D45, @@ -4928,17 +4966,17 @@ 0x9EC4,0x9EDB,0x9EE9,0x9FCE,0xA01A,0xA02F,0xA082,0xA0F9, 0xA190,0xA38C,0xA437,0xA5F1,0xA602,0xA61A,0xA6B2,}; -const int jisx0213_u5_tbl_min = 0x2000B; -const int jisx0213_u5_tbl_max = 0x2A6B2; -const int jisx0213_u5_tbl_len = sizeof(jisx0213_u5_jis_key)/sizeof(unsigned short); +static const int jisx0213_u5_tbl_min = 0x2000B; +static const int jisx0213_u5_tbl_max = 0x2A6B2; +static const int jisx0213_u5_tbl_len = sizeof(jisx0213_u5_jis_key)/sizeof(unsigned short); -const unsigned short jisx0213_u2_key[] = { +static const unsigned short jisx0213_u2_key[] = { 0x2477,0x2478,0x2479,0x247A,0x247B,0x2577,0x2578,0x2579, 0x257A,0x257B,0x257C,0x257D,0x257E,0x2678,0x2B44,0x2B48, 0x2B49,0x2B4A,0x2B4B,0x2B4C,0x2B4D,0x2B4E,0x2B4F,0x2B65, 0x2B66}; -const unsigned short jisx0213_u2_tbl[] = { +static const unsigned short jisx0213_u2_tbl[] = { 0x304B,0x309A,0x304D,0x309A,0x304F,0x309A,0x3051,0x309A, 0x3053,0x309A,0x30AB,0x309A,0x30AD,0x309A,0x30AF,0x309A, 0x30B1,0x309A,0x30B3,0x309A,0x30BB,0x309A,0x30C4,0x309A, @@ -4947,80 +4985,52 @@ 0x0259,0x0301,0x025A,0x0300,0x025A,0x0301,0x02E9,0x02E5, 0x02E5,0x02E9}; -const unsigned short jisx0213_u2_fb_tbl[] = { +static const unsigned short jisx0213_u2_fb_tbl[] = { 0x242B,0x242D,0x242F,0x2431,0x2433,0x252B,0x252D,0x252F, 0x2531,0x2533,0x253B,0x2544,0x2548,0x2675,0x295C,0x2B38, 0x2B38,0x2B37,0x2B37,0x2B30,0x2B30,0x2B43,0x2B43,0x2B64, 0x2B60}; -const int jisx0213_u2_tbl_len = sizeof(jisx0213_u2_key)/sizeof(unsigned short); +static const int jisx0213_u2_tbl_len = sizeof(jisx0213_u2_key)/sizeof(unsigned short); -const unsigned short jisx0213_uni2sjis_cmap_key[] = { +static const unsigned short jisx0213_uni2sjis_cmap_key[] = { 0xf91d,0xf928,0xf929,0xf936,0xf970,0xf9d0,0xf9dc, 0xfe45,0xfe46,0xffe5, }; -const unsigned short jisx0213_uni2sjis_cmap_val[] = { +static const unsigned short jisx0213_uni2sjis_cmap_val[] = { 0x763b,0x742e,0x754e,0x7b4f,0x7649,0x7e24,0x7d5d, 0x233e,0x233d,0x216f, }; -const int jisx0213_uni2sjis_cmap_len = +static const int jisx0213_uni2sjis_cmap_len = sizeof(jisx0213_uni2sjis_cmap_key)/sizeof(unsigned short); -const unsigned short jisx0213_p2_ofst[] = { +static const unsigned short jisx0213_p2_ofst[] = { 1, 8, 3, 4, 5, 12, 13, 14, 15, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94}; -const int jisx0213_p2_ofst_len = +static const int jisx0213_p2_ofst_len = sizeof(jisx0213_p2_ofst)/sizeof(unsigned short); -#else +static const int uni2jis_tbl_range[][2] = { + {0x0000, 0x045f}, + {0x3000, 0x30ff}, + {0x4e00, 0x9fff}, + {0xff00, 0xffe5}, + {0xfa0f, 0xfa6a}, +}; -extern const unsigned short jisx0213_ucs_table[]; -extern const unsigned short ucs_a1_jisx0213_table[]; -extern const unsigned short ucs_i_jisx0213_table[]; -extern const unsigned short ucs_r_jisx0213_table[]; -extern const unsigned short ucs_r2_jisx0213_table[]; +static const unsigned short *uni2jis_tbl[] = { + ucs_a1_jisx0213_table, + ucs_hk_jisx0213_table, + ucs_i_jisx0213_table, + ucs_r_jisx0213_table, + ucs_r2_jisx0213_table, +}; -extern const unsigned short ucs_c1_jisx0213_table[]; -extern const unsigned short ucs_c1_jisx0213_ofst[]; -extern const unsigned short jisx0213_jis_u5_tbl[]; -extern const unsigned short jisx0213_jis_u5_key[]; -extern const unsigned short jisx0213_u5_jis_tbl[]; -extern const unsigned short jisx0213_u5_jis_key[]; -extern const unsigned short jisx0213_u2_key[]; -extern const unsigned short jisx0213_u2_tbl[]; -extern const unsigned short jisx0213_u2_fb_tbl[]; -extern const unsigned short jisx0213_uni2sjis_cmap_key[]; -extern const unsigned short jisx0213_uni2sjis_cmap_val[]; +static const int uni2jis_tbl_len = sizeof(uni2jis_tbl_range)/(sizeof(int)*2); -extern const int jisx0213_ucs_table_size; -extern const int ucs_a1_jisx0213_table_min; -extern const int ucs_a1_jisx0213_table_max; -extern const int ucs_i_jisx0213_table_min; -extern const int ucs_i_jisx0213_table_max; -extern int ucs_r_jisx0213_table_min; -extern int ucs_r_jisx0213_table_max; -extern int ucs_r2_jisx0213_table_min; -extern int ucs_r2_jisx0213_table_max; - -extern const int ucs_c1_jisx0213_tbl_len; -extern const int jisx0213_u5_tbl_min; -extern const int jisx0213_u5_tbl_max; -extern const int jisx0213_u5_tbl_len; -extern const int jisx0213_u2_tbl_len; -extern const int jisx0213_uni2sjis_cmap_len; - -extern const unsigned short ucs_c1_jisx0213_tbl[]; - -extern const int ucs_c1_jisx0213_min; -extern const int ucs_c1_jisx0213_max; - -extern const unsigned short jisx0213_p2_ofst[]; -extern const int jisx0213_p2_ofst_len; - -#endif /* UNICODE_TABLE_JIS2004_DEF */ #endif /* UNICODE_TABLE_JIS2004_H */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php