36 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
37 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
38 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
39 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
40 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
41 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
42 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
43 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
44 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
45 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
46 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
47 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
48 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
49 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
50 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
51 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
64static size_t mb_utf8_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
66static zend_string* mb_cut_utf8(
unsigned char *str,
size_t from,
size_t len,
unsigned char *
end);
68static size_t mb_utf8_docomo_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
70static size_t mb_utf8_kddi_a_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
72static size_t mb_utf8_kddi_b_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
74static size_t mb_utf8_sb_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
77static bool mbfilter_conv_map_tbl(
int c,
int *w,
unsigned int n,
const unsigned short map[][3])
79 for (
unsigned int i = 0; i <
n; i++) {
80 if (map[i][0] <= c && c <= map[i][1]) {
81 *w = c - map[i][0] + map[i][2];
88static bool mbfilter_conv_r_map_tbl(
int c,
int *w,
unsigned int n,
const unsigned short map[][3])
91 for (
unsigned int i = 0; i <
n; i++) {
92 if (map[i][2] <= c && c <= map[i][2] - map[i][0] + map[i][1]) {
93 *w = c + map[i][0] - map[i][2];
100static const unsigned short mbfl_docomo2uni_pua[4][3] = {
101 {0x28c2, 0x292f, 0xe63e},
102 {0x2930, 0x2934, 0xe6ac},
103 {0x2935, 0x2951, 0xe6b1},
104 {0x2952, 0x29db, 0xe6ce},
107static const unsigned short mbfl_kddi2uni_pua[7][3] = {
108 {0x26ec, 0x2838, 0xe468},
109 {0x284c, 0x2863, 0xe5b5},
110 {0x24b8, 0x24ca, 0xe5cd},
111 {0x24cb, 0x2545, 0xea80},
112 {0x2839, 0x284b, 0xeafb},
113 {0x2546, 0x25c0, 0xeb0e},
114 {0x25c1, 0x25c6, 0xeb89},
117static const unsigned short mbfl_kddi2uni_pua_b[8][3] = {
118 {0x24b8, 0x24f6, 0xec40},
119 {0x24f7, 0x2573, 0xec80},
120 {0x2574, 0x25b2, 0xed40},
121 {0x25b3, 0x25c6, 0xed80},
122 {0x26ec, 0x272a, 0xef40},
123 {0x272b, 0x27a7, 0xef80},
124 {0x27a8, 0x27e6, 0xf040},
125 {0x27e7, 0x2863, 0xf080},
128static const unsigned short mbfl_sb2uni_pua[6][3] = {
129 {0x27a9, 0x2802, 0xe101},
130 {0x2808, 0x2861, 0xe201},
131 {0x2921, 0x297a, 0xe001},
132 {0x2980, 0x29cc, 0xe301},
133 {0x2a99, 0x2ae4, 0xe401},
134 {0x2af8, 0x2b35, 0xe501},
137static const char *mbfl_encoding_utf8_aliases[] = {
"utf8",
NULL};
143 mbfl_encoding_utf8_aliases,
159 mbfl_filt_conv_utf8_wchar,
160 mbfl_filt_conv_utf8_wchar_flush,
169 mbfl_filt_conv_wchar_utf8,
174static const char *mbfl_encoding_utf8_docomo_aliases[] = {
"UTF-8-DOCOMO",
"UTF8-DOCOMO",
NULL};
175static const char *mbfl_encoding_utf8_kddi_b_aliases[] = {
"UTF-8-Mobile#KDDI",
"UTF-8-KDDI",
"UTF8-KDDI",
NULL};
176static const char *mbfl_encoding_utf8_sb_aliases[] = {
"UTF-8-SOFTBANK",
"UTF8-SOFTBANK",
NULL};
180 "UTF-8-Mobile#DOCOMO",
182 mbfl_encoding_utf8_docomo_aliases,
187 mb_utf8_docomo_to_wchar,
188 mb_wchar_to_utf8_docomo,
195 "UTF-8-Mobile#KDDI-A",
202 mb_utf8_kddi_a_to_wchar,
203 mb_wchar_to_utf8_kddi_a,
210 "UTF-8-Mobile#KDDI-B",
212 mbfl_encoding_utf8_kddi_b_aliases,
217 mb_utf8_kddi_b_to_wchar,
218 mb_wchar_to_utf8_kddi_b,
225 "UTF-8-Mobile#SOFTBANK",
227 mbfl_encoding_utf8_sb_aliases,
243 mbfl_filt_conv_utf8_mobile_wchar,
244 mbfl_filt_conv_utf8_wchar_flush,
253 mbfl_filt_conv_wchar_utf8_mobile,
263 mbfl_filt_conv_utf8_mobile_wchar,
264 mbfl_filt_conv_utf8_wchar_flush,
273 mbfl_filt_conv_wchar_utf8_mobile,
283 mbfl_filt_conv_utf8_mobile_wchar,
284 mbfl_filt_conv_utf8_wchar_flush,
293 mbfl_filt_conv_wchar_utf8_mobile,
303 mbfl_filt_conv_utf8_mobile_wchar,
304 mbfl_filt_conv_utf8_wchar_flush,
313 mbfl_filt_conv_wchar_utf8_mobile,
318#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
336 }
else if (c >= 0xc2 && c <= 0xdf) {
338 filter->
cache = c & 0x1f;
339 }
else if (c >= 0xe0 && c <= 0xef) {
341 filter->
cache = c & 0xf;
342 }
else if (c >= 0xf0 && c <= 0xf4) {
344 filter->
cache = c & 0x7;
346 CK(mbfl_filt_put_invalid_char(filter));
352 if (c >= 0x80 && c <= 0xbf) {
353 s = (filter->
cache<<6) | (c & 0x3f);
357 CK(mbfl_filt_put_invalid_char(filter));
362 s = (filter->
cache<<6) | (c & 0x3f);
363 c1 = filter->
cache & 0xf;
365 if ((c >= 0x80 && c <= 0xbf) &&
366 ((c1 == 0x0 && c >= 0xa0) ||
367 (c1 == 0xd && c < 0xa0) ||
368 (c1 > 0x0 && c1 != 0xd))) {
372 CK(mbfl_filt_put_invalid_char(filter));
377 s = (filter->
cache<<6) | (c & 0x3f);
378 c1 = filter->
cache & 0x7;
380 if ((c >= 0x80 && c <= 0xbf) &&
381 ((c1 == 0x0 && c >= 0x90) ||
382 (c1 == 0x4 && c < 0x90) ||
383 (c1 > 0x0 && c1 != 0x4))) {
387 CK(mbfl_filt_put_invalid_char(filter));
392 if (c >= 0x80 && c <= 0xbf) {
393 filter->
cache = (filter->
cache<<6) | (c & 0x3f);
396 CK(mbfl_filt_put_invalid_char(filter));
423 if (c >= 0 && c < 0x110000) {
426 }
else if (c < 0x800) {
429 }
else if (c < 0x10000) {
446static size_t mb_utf8_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
448 unsigned char *
p = *in, *e =
p + *in_len;
449 uint32_t *
out =
buf, *limit =
buf + bufsize;
451 while (
p < e &&
out < limit) {
452 unsigned char c = *
p++;
456 }
else if (c < 0xC2) {
458 }
else if (c <= 0xDF) {
460 unsigned char c2 = *
p++;
461 if ((c2 & 0xC0) != 0x80) {
465 *
out++ = ((c & 0x1F) << 6) | (c2 & 0x3F);
470 }
else if (c <= 0xEF) {
472 unsigned char c2 = *
p++;
473 unsigned char c3 = *
p++;
474 if ((c2 & 0xC0) != 0x80 || (c == 0xE0 && c2 < 0xA0) || (c == 0xED && c2 >= 0xA0)) {
477 }
else if ((c3 & 0xC0) != 0x80) {
481 uint32_t decoded = ((c & 0xF) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
488 if (
p < e && (c != 0xE0 || *
p >= 0xA0) && (c != 0xED || *
p < 0xA0) && (*
p & 0xC0) == 0x80) {
490 if (
p < e && (*
p & 0xC0) == 0x80) {
495 }
else if (c <= 0xF4) {
497 unsigned char c2 = *
p++;
498 unsigned char c3 = *
p++;
499 unsigned char c4 = *
p++;
503 if ((c2 & 0xC0) != 0x80 || (c == 0xF0 && c2 < 0x90) || (c == 0xF4 && c2 >= 0x90)) {
506 }
else if ((c3 & 0xC0) != 0x80) {
509 }
else if ((c4 & 0xC0) != 0x80) {
513 uint32_t decoded = ((c & 0x7) << 18) | ((c2 & 0x3F) << 12) | ((c3 & 0x3F) << 6) | (c4 & 0x3F);
520 unsigned char c2 = *
p;
521 if ((c == 0xF0 && c2 >= 0x90) || (c == 0xF4 && c2 < 0x90) || (c >= 0xF1 && c <= 0xF3)) {
522 while (
p < e && (*
p & 0xC0) == 0x80) {
540 unsigned char *
out, *limit;
547 out = mb_convert_buf_add(
out, w & 0xFF);
548 }
else if (w < 0x800) {
550 out = mb_convert_buf_add2(
out, ((w >> 6) & 0x1F) | 0xC0, (w & 0x3F) | 0x80);
551 }
else if (w < 0x10000) {
553 out = mb_convert_buf_add3(
out, ((w >> 12) & 0xF) | 0xE0, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
554 }
else if (w < 0x110000) {
556 out = mb_convert_buf_add4(
out, ((w >> 18) & 0x7) | 0xF0, ((w >> 12) & 0x3F) | 0x80, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
571 while (
start > str && ((
signed char)*
start) < -64) {
578 while (_end >
start && ((
signed char)*_end) < -64) {
581 return zend_string_init_fast((
char*)
start, _end -
start);
586 int s, s1 = 0, c1 = 0, snd = 0;
589 switch (filter->
status & 0xff) {
593 }
else if (c >= 0xc2 && c <= 0xdf) {
595 filter->
cache = c & 0x1f;
596 }
else if (c >= 0xe0 && c <= 0xef) {
598 filter->
cache = c & 0xf;
599 }
else if (c >= 0xf0 && c <= 0xf4) {
601 filter->
cache = c & 0x7;
603 CK(mbfl_filt_put_invalid_char(filter));
611 if (c >= 0x80 && c <= 0xbf) {
612 s = (filter->
cache << 6) | (c & 0x3f);
630 CK(mbfl_filt_put_invalid_char(filter));
636 s = (filter->
cache << 6) | (c & 0x3f);
637 c1 = filter->
cache & 0xf;
639 if ((c >= 0x80 && c <= 0xbf) &&
640 ((c1 == 0x0 && c >= 0xa0) ||
641 (c1 == 0xd && c < 0xa0) ||
642 (c1 > 0x0 && c1 != 0xd))) {
646 CK(mbfl_filt_put_invalid_char(filter));
652 s = (filter->
cache << 6) | (c & 0x3f);
653 c1 = filter->
cache & 0x7;
655 if ((c >= 0x80 && c <= 0xbf) &&
656 ((c1 == 0x0 && c >= 0x90) ||
657 (c1 == 0x4 && c < 0x90) ||
658 (c1 > 0x0 && c1 != 0x4))) {
662 CK(mbfl_filt_put_invalid_char(filter));
668 if (c >= 0x80 && c <= 0xbf) {
669 filter->
cache = (filter->
cache << 6) | (c & 0x3f);
672 CK(mbfl_filt_put_invalid_char(filter));
685 if (c >= 0 && c < 0x110000) {
701 }
else if (c < 0x800) {
704 }
else if (c < 0x10000) {
726#define NFLAGS(c) (0x1F1A5+(int)(c))
728static const char nflags_s[10][2] = {
"CN",
"DE",
"ES",
"FR",
"GB",
"IT",
"JP",
"KR",
"RU",
"US"};
729static const int nflags_code_kddi[10] = { 0x2549, 0x2546, 0x24C0, 0x2545, 0x2548, 0x2547, 0x2750, 0x254A, 0x24C1, 0x27F7 };
730static const int nflags_code_sb[10] = { 0x2B0A, 0x2B05, 0x2B08, 0x2B04, 0x2B07, 0x2B06, 0x2B02, 0x2B0B, 0x2B09, 0x2B03 };
732static size_t mb_mobile_utf8_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state,
const unsigned short emoji_map[][3],
int (*convert_emoji)(
int s,
int *snd),
int n)
734 unsigned char *
p = *in, *e =
p + *in_len;
735 uint32_t *
out =
buf, *limit =
buf + bufsize - 1;
737 while (
p < e &&
out < limit) {
738 unsigned char c = *
p++;
744 }
else if (c >= 0xC2 && c <= 0xDF &&
p < e) {
745 unsigned char c2 = *
p++;
747 if ((c2 & 0xC0) == 0x80) {
748 s = ((c & 0x1F) << 6) | (c2 & 0x3F);
754 }
else if (c >= 0xE0 && c <= 0xEF) {
757 if (
p < e && (c != 0xE0 || *
p >= 0xA0) && (c != 0xED || *
p < 0xA0) && (*
p & 0xC0) == 0x80) {
759 if (
p < e && (*
p & 0xC0) == 0x80) {
765 unsigned char c2 = *
p++;
766 unsigned char c3 = *
p++;
768 if ((c2 & 0xC0) != 0x80 || (c == 0xE0 && c2 < 0xA0) || (c == 0xED && c2 >= 0xA0)) {
772 }
else if ((c3 & 0xC0) != 0x80) {
777 s = ((c & 0xF) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
779 }
else if (c >= 0xF0 && c <= 0xF4) {
783 unsigned char c2 = *
p;
784 if ((c == 0xF0 && c2 >= 0x90) || (c == 0xF4 && c2 < 0x90) || (c >= 0xF1 && c <= 0xF3)) {
785 while (
p < e && (*
p & 0xC0) == 0x80) {
792 unsigned char c2 = *
p++;
793 unsigned char c3 = *
p++;
794 unsigned char c4 = *
p++;
796 if ((c2 & 0xC0) != 0x80 || (c == 0xF0 && c2 < 0x90) || (c == 0xF4 && c2 >= 0x90)) {
800 }
else if ((c3 & 0xC0) != 0x80) {
804 }
else if ((c4 & 0xC0) != 0x80) {
809 s = ((c & 0x7) << 18) | ((c2 & 0x3F) << 12) | ((c3 & 0x3F) << 6) | (c4 & 0x3F);
817 if (mbfilter_conv_r_map_tbl(
s, &s1,
n, emoji_map)) {
818 s = convert_emoji(s1, &snd);
831static size_t mb_utf8_docomo_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
838 unsigned char *
out, *limit;
848 if ((w ==
'#' || (w >=
'0' && w <=
'9')) &&
len) {
849 uint32_t w2 = *in++;
len--;
854 }
else if (w ==
'0') {
857 s = 0x2966 + (w -
'1');
862 }
else if (w == 0xA9) {
864 }
else if (w == 0xAE) {
866 }
else if (w >= mb_tbl_uni_docomo2code2_min && w <= mb_tbl_uni_docomo2code2_max) {
867 int i =
mbfl_bisec_srch2(w, mb_tbl_uni_docomo2code2_key, mb_tbl_uni_docomo2code2_len);
869 s = mb_tbl_uni_docomo2code2_value[i];
871 }
else if (w >= mb_tbl_uni_docomo2code3_min && w <= mb_tbl_uni_docomo2code3_max) {
872 int i =
mbfl_bisec_srch2(w - 0x10000, mb_tbl_uni_docomo2code3_key, mb_tbl_uni_docomo2code3_len);
874 s = mb_tbl_uni_docomo2code3_value[i];
876 }
else if (w >= mb_tbl_uni_docomo2code5_min && w <= mb_tbl_uni_docomo2code5_max) {
877 int i =
mbfl_bisec_srch2(w - 0xF0000, mb_tbl_uni_docomo2code5_key, mb_tbl_uni_docomo2code5_len);
879 s = mb_tbl_uni_docomo2code5_val[i];
883 if (
s && mbfilter_conv_map_tbl(
s, &c1, 4, mbfl_docomo2uni_pua)) {
888 out = mb_convert_buf_add(
out, w);
889 }
else if (w <= 0x7FF) {
891 out = mb_convert_buf_add2(
out, ((w >> 6) & 0x1F) | 0xC0, (w & 0x3F) | 0x80);
892 }
else if (w <= 0xFFFF) {
894 out = mb_convert_buf_add3(
out, ((w >> 12) & 0xF) | 0xE0, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
897 out = mb_convert_buf_add4(
out, ((w >> 18) & 0x7) | 0xF0, ((w >> 12) & 0x3F) | 0x80, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
908static size_t mb_utf8_kddi_a_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
915 unsigned char *
out, *limit;
925 if ((w ==
'#' || (w >=
'0' && w <=
'9')) &&
len) {
926 uint32_t w2 = *in++;
len--;
931 }
else if (w ==
'0') {
934 s = 0x27A6 + (w -
'1');
941 uint32_t w2 = *in++;
len--;
944 for (
int i = 0; i < 10; i++) {
945 if (w ==
NFLAGS(nflags_s[i][0]) && w2 ==
NFLAGS(nflags_s[i][1])) {
946 s = nflags_code_kddi[i];
958 }
else if (w == 0xA9) {
960 }
else if (w == 0xAE) {
962 }
else if (w >= mb_tbl_uni_kddi2code2_min && w <= mb_tbl_uni_kddi2code2_max) {
963 int i =
mbfl_bisec_srch2(w, mb_tbl_uni_kddi2code2_key, mb_tbl_uni_kddi2code2_len);
965 s = mb_tbl_uni_kddi2code2_value[i];
967 }
else if (w >= mb_tbl_uni_kddi2code3_min && w <= mb_tbl_uni_kddi2code3_max) {
968 int i =
mbfl_bisec_srch2(w - 0x10000, mb_tbl_uni_kddi2code3_key, mb_tbl_uni_kddi2code3_len);
970 s = mb_tbl_uni_kddi2code3_value[i];
972 }
else if (w >= mb_tbl_uni_kddi2code5_min && w <= mb_tbl_uni_kddi2code5_max) {
973 int i =
mbfl_bisec_srch2(w - 0xF0000, mb_tbl_uni_kddi2code5_key, mb_tbl_uni_kddi2code5_len);
975 s = mb_tbl_uni_kddi2code5_val[i];
980 if (
s && mbfilter_conv_map_tbl(
s, &c1,
n, emoji_map)) {
985 out = mb_convert_buf_add(
out, w);
986 }
else if (w <= 0x7FF) {
988 out = mb_convert_buf_add2(
out, ((w >> 6) & 0x1F) | 0xC0, (w & 0x3F) | 0x80);
989 }
else if (w <= 0xFFFF) {
991 out = mb_convert_buf_add3(
out, ((w >> 12) & 0xF) | 0xE0, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
994 out = mb_convert_buf_add4(
out, ((w >> 18) & 0x7) | 0xF0, ((w >> 12) & 0x3F) | 0x80, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
1007 mb_wchar_to_utf8_kddi(in,
len,
buf,
end, mbfl_kddi2uni_pua, 7, mb_wchar_to_utf8_kddi_a);
1010static size_t mb_utf8_kddi_b_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
1017 mb_wchar_to_utf8_kddi(in,
len,
buf,
end, mbfl_kddi2uni_pua_b, 8, mb_wchar_to_utf8_kddi_b);
1020static size_t mb_utf8_sb_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
1027 unsigned char *
out, *limit;
1037 if ((w ==
'#' || (w >=
'0' && w <=
'9')) &&
len) {
1038 uint32_t w2 = *in++;
len--;
1043 }
else if (w ==
'0') {
1046 s = 0x2823 + (w -
'1');
1053 uint32_t w2 = *in++;
len--;
1056 for (
int i = 0; i < 10; i++) {
1057 if (w ==
NFLAGS(nflags_s[i][0]) && w2 ==
NFLAGS(nflags_s[i][1])) {
1058 s = nflags_code_sb[i];
1070 }
else if (w == 0xA9) {
1072 }
else if (w == 0xAE) {
1074 }
else if (w >= mb_tbl_uni_sb2code2_min && w <= mb_tbl_uni_sb2code2_max) {
1075 int i =
mbfl_bisec_srch2(w, mb_tbl_uni_sb2code2_key, mb_tbl_uni_sb2code2_len);
1077 s = mb_tbl_uni_sb2code2_value[i];
1079 }
else if (w >= mb_tbl_uni_sb2code3_min && w <= mb_tbl_uni_sb2code3_max) {
1080 int i =
mbfl_bisec_srch2(w - 0x10000, mb_tbl_uni_sb2code3_key, mb_tbl_uni_sb2code3_len);
1082 s = mb_tbl_uni_sb2code3_value[i];
1084 }
else if (w >= mb_tbl_uni_sb2code5_min && w <= mb_tbl_uni_sb2code5_max) {
1085 int i =
mbfl_bisec_srch2(w - 0xF0000, mb_tbl_uni_sb2code5_key, mb_tbl_uni_sb2code5_len);
1087 s = mb_tbl_uni_sb2code5_val[i];
1092 if (
s && mbfilter_conv_map_tbl(
s, &c1, 6, mbfl_sb2uni_pua)) {
1097 out = mb_convert_buf_add(
out, w);
1098 }
else if (w <= 0x7FF) {
1100 out = mb_convert_buf_add2(
out, ((w >> 6) & 0x1F) | 0xC0, (w & 0x3F) | 0x80);
1101 }
else if (w <= 0xFFFF) {
1103 out = mb_convert_buf_add3(
out, ((w >> 12) & 0xF) | 0xE0, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
1106 out = mb_convert_buf_add4(
out, ((w >> 18) & 0x7) | 0xF0, ((w >> 12) & 0x3F) | 0x80, ((w >> 6) & 0x3F) | 0x80, (w & 0x3F) | 0x80);
zend_ffi_ctype_name_buf buf
int mbfilter_sjis_emoji_docomo2unicode(int s, int *snd)
int mbfilter_sjis_emoji_kddi2unicode(int s, int *snd)
int mbfilter_unicode2sjis_emoji_kddi_sjis(int c, int *s1, mbfl_convert_filter *filter)
int mbfilter_unicode2sjis_emoji_sb(int c, int *s1, mbfl_convert_filter *filter)
int mbfilter_unicode2sjis_emoji_docomo(int c, int *s1, mbfl_convert_filter *filter)
int mbfilter_sjis_emoji_sb2unicode(int s, int *snd)
int mbfl_filt_conv_sjis_mobile_flush(mbfl_convert_filter *filter)
const struct mbfl_convert_vtbl vtbl_utf8_docomo_wchar
const struct mbfl_convert_vtbl vtbl_utf8_sb_wchar
const mbfl_encoding mbfl_encoding_utf8_kddi_b
const struct mbfl_convert_vtbl vtbl_utf8_kddi_a_wchar
const mbfl_encoding mbfl_encoding_utf8_sb
const struct mbfl_convert_vtbl vtbl_utf8_kddi_b_wchar
const struct mbfl_convert_vtbl vtbl_wchar_utf8
const mbfl_encoding mbfl_encoding_utf8_kddi_a
const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_b
int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n)
const unsigned char mblen_table_utf8[]
const struct mbfl_convert_vtbl vtbl_wchar_utf8_docomo
const struct mbfl_convert_vtbl vtbl_wchar_utf8_sb
const struct mbfl_convert_vtbl vtbl_utf8_wchar
int mbfl_filt_conv_sjis_mobile_flush(mbfl_convert_filter *filter)
const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_a
const mbfl_encoding mbfl_encoding_utf8
const mbfl_encoding mbfl_encoding_utf8_docomo
int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter)
int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter)
struct _mbfl_convert_filter mbfl_convert_filter
@ mbfl_no_encoding_utf8_kddi_a
@ mbfl_no_encoding_utf8_docomo
@ mbfl_no_encoding_utf8_kddi_b
@ mbfl_no_encoding_utf8_sb
#define MB_CONVERT_BUF_STORE(buf, _out, _limit)
#define MB_CONVERT_BUF_ENSURE(buf, out, limit, needed)
#define MB_CONVERT_ERROR(buf, out, limit, bad_cp, conv_fn)
void(* mb_from_wchar_fn)(uint32_t *in, size_t in_len, mb_convert_buf *out, bool end)
#define MB_CONVERT_BUF_LOAD(buf, _out, _limit)
unsigned const char * end
const mbfl_encoding * from
output_function_t output_function
flush_function_t flush_function
enum mbfl_no_encoding from
enum mbfl_no_encoding no_encoding
struct _zend_string zend_string
#define EMPTY_SWITCH_DEFAULT_CASE()