Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,603 changes: 572 additions & 4,031 deletions ext/mbstring/libmbfl/filters/mbfilter_cjk.c

Large diffs are not rendered by default.

4 changes: 0 additions & 4 deletions ext/mbstring/libmbfl/filters/mbfilter_cjk.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,4 @@ int mbfilter_sjis_emoji_docomo2unicode(int s, int *snd);
int mbfilter_sjis_emoji_kddi2unicode(int s, int *snd);
int mbfilter_sjis_emoji_sb2unicode(int s, int *snd);

int mbfilter_unicode2sjis_emoji_docomo(int c, int *s1, mbfl_convert_filter *filter);
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);

#endif /* MBFL_MBFILTER_CJK_H */
5 changes: 0 additions & 5 deletions ext/mbstring/libmbfl/filters/mbfilter_cp51932.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,5 @@
#include "mbfilter.h"

extern const mbfl_encoding mbfl_encoding_cp51932;
extern const struct mbfl_convert_vtbl vtbl_cp51932_wchar;
extern const struct mbfl_convert_vtbl vtbl_wchar_cp51932;

int mbfl_filt_conv_cp51932_wchar(int c, mbfl_convert_filter *filter);
int mbfl_filt_conv_wchar_cp51932(int c, mbfl_convert_filter *filter);

#endif /* MBFL_MBFILTER_CP51932_H */
150 changes: 2 additions & 148 deletions ext/mbstring/libmbfl/filters/mbfilter_singlebyte.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,70 +21,19 @@ static inline uint32_t coalesce(uint32_t a, uint32_t b)
return a ? a : b;
}

/* Helper for single-byte encodings which use a conversion table */
static int mbfl_conv_singlebyte_table(int c, mbfl_convert_filter *filter, int tbl_min, const unsigned short tbl[])
{
if (c >= 0 && c < tbl_min) {
CK((*filter->output_function)(c, filter->data));
} else if (c < 0) {
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
} else {
CK((*filter->output_function)(coalesce(tbl[c - tbl_min], MBFL_BAD_INPUT), filter->data));
}
return 0;
}

static int mbfl_conv_reverselookup_table(int c, mbfl_convert_filter *filter, int tbl_min, const unsigned short tbl[])
{
if (c >= 0 && c < tbl_min) {
CK((*filter->output_function)(c, filter->data));
} else if (c < 0 || c == MBFL_BAD_INPUT) {
CK(mbfl_filt_conv_illegal_output(c, filter));
} else {
for (int i = 0; i < 256 - tbl_min; i++) {
if (c == tbl[i]) {
CK((*filter->output_function)(i + tbl_min, filter->data));
return 0;
}
}
CK(mbfl_filt_conv_illegal_output(c, filter));
}
return 0;
}

/* Initialize data structures for a single-byte encoding */
#define DEF_SB(id, name, mime_name, aliases) \
static int mbfl_filt_conv_##id##_wchar(int c, mbfl_convert_filter *filter); \
static int mbfl_filt_conv_wchar_##id(int c, mbfl_convert_filter *filter); \
static size_t mb_##id##_to_wchar(unsigned char **in, size_t *in_len, uint32_t *buf, size_t bufsize, unsigned int *state); \
static void mb_wchar_to_##id(uint32_t *in, size_t len, mb_convert_buf *buf, bool end); \
static const struct mbfl_convert_vtbl vtbl_##id##_wchar = { \
mbfl_no_encoding_##id, \
mbfl_no_encoding_wchar, \
mbfl_filt_conv_common_ctor, \
NULL, \
mbfl_filt_conv_##id##_wchar, \
mbfl_filt_conv_common_flush, \
NULL \
}; \
static const struct mbfl_convert_vtbl vtbl_wchar_##id = { \
mbfl_no_encoding_wchar, \
mbfl_no_encoding_##id, \
mbfl_filt_conv_common_ctor, \
NULL, \
mbfl_filt_conv_wchar_##id, \
mbfl_filt_conv_common_flush, \
NULL \
}; \
const mbfl_encoding mbfl_encoding_##id = { \
mbfl_no_encoding_##id, \
name, \
mime_name, \
aliases, \
NULL, \
MBFL_ENCTYPE_SBCS, \
&vtbl_##id##_wchar, \
&vtbl_wchar_##id, \
NULL, \
NULL, \
mb_##id##_to_wchar, \
mb_wchar_to_##id, \
NULL, \
Expand All @@ -93,12 +42,6 @@ static int mbfl_conv_reverselookup_table(int c, mbfl_convert_filter *filter, int

/* For single-byte encodings which use a conversion table */
#define DEF_SB_TBL(id, name, mime_name, aliases, tbl_min, tbl) \
static int mbfl_filt_conv_##id##_wchar(int c, mbfl_convert_filter *filter) { \
return mbfl_conv_singlebyte_table(c, filter, tbl_min, tbl); \
} \
static int mbfl_filt_conv_wchar_##id(int c, mbfl_convert_filter *filter) { \
return mbfl_conv_reverselookup_table(c, filter, tbl_min, tbl); \
} \
static size_t mb_##id##_to_wchar(unsigned char **in, size_t *in_len, uint32_t *buf, size_t bufsize, unsigned int *state) \
{ \
unsigned char *p = *in, *e = p + *in_len; \
Expand Down Expand Up @@ -140,22 +83,6 @@ static int mbfl_conv_reverselookup_table(int c, mbfl_convert_filter *filter, int
static const char *ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "IBM-367", "cp367", "csASCII", NULL};
DEF_SB(ascii, "ASCII", "US-ASCII", ascii_aliases);

static int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter)
{
CK((*filter->output_function)((c < 0x80) ? c : MBFL_BAD_INPUT, filter->data));
return 0;
}

static int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter)
{
if (c >= 0 && c < 0x80 && c != MBFL_BAD_INPUT) {
CK((*filter->output_function)(c, filter->data));
} else {
CK(mbfl_filt_conv_illegal_output(c, filter));
}
return 0;
}

static size_t mb_ascii_to_wchar(unsigned char **in, size_t *in_len, uint32_t *buf, size_t bufsize, unsigned int *state)
{
unsigned char *p = *in, *e = p + *in_len;
Expand Down Expand Up @@ -195,21 +122,6 @@ static void mb_wchar_to_ascii(uint32_t *in, size_t len, mb_convert_buf *buf, boo
static const char *iso8859_1_aliases[] = {"ISO8859-1", "latin1", NULL};
DEF_SB(8859_1, "ISO-8859-1", "ISO-8859-1", iso8859_1_aliases);

static int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter)
{
return (*filter->output_function)(c, filter->data);
}

static int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter)
{
if (c >= 0 && c < 0x100 && c != MBFL_BAD_INPUT) {
CK((*filter->output_function)(c, filter->data));
} else {
CK(mbfl_filt_conv_illegal_output(c, filter));
}
return 0;
}

static size_t mb_8859_1_to_wchar(unsigned char **in, size_t *in_len, uint32_t *buf, size_t bufsize, unsigned int *state)
{
unsigned char *p = *in, *e = p + *in_len;
Expand Down Expand Up @@ -494,38 +406,6 @@ static const unsigned short cp1252_ucs_table[] = {
};
DEF_SB(cp1252, "Windows-1252", "Windows-1252", cp1252_aliases);

static int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter)
{
if (c < 0 || c == MBFL_BAD_INPUT) {
CK(mbfl_filt_conv_illegal_output(c, filter));
} else if (c >= 0x100) {
for (int n = 0; n < 32; n++) {
if (c == cp1252_ucs_table[n]) {
CK((*filter->output_function)(0x80 + n, filter->data));
return 0;
}
}
CK(mbfl_filt_conv_illegal_output(c, filter));
} else if (c <= 0x7F || c >= 0xA0 || c == 0x81 || c == 0x8D || c == 0x8F || c == 0x90 || c == 0x9D) {
CK((*filter->output_function)(c, filter->data));
} else {
CK(mbfl_filt_conv_illegal_output(c, filter));
}
return 0;
}

static int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter)
{
int s;
if (c >= 0x80 && c < 0xA0) {
s = coalesce(cp1252_ucs_table[c - 0x80], MBFL_BAD_INPUT);
} else {
s = c;
}
CK((*filter->output_function)(s, filter->data));
return 0;
}

static size_t mb_cp1252_to_wchar(unsigned char **in, size_t *in_len, uint32_t *buf, size_t bufsize, unsigned int *state)
{
unsigned char *p = *in, *e = p + *in_len;
Expand Down Expand Up @@ -701,32 +581,6 @@ static const unsigned char ucs_armscii8_table[] = {
};
DEF_SB(armscii8, "ArmSCII-8", "ArmSCII-8", armscii8_aliases);

static int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter)
{
CK((*filter->output_function)((c < 0xA0) ? c : coalesce(armscii8_ucs_table[c - 0xA0], MBFL_BAD_INPUT), filter->data));
return 0;
}

static int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter)
{
if (c >= 0x28 && c <= 0x2F) {
CK((*filter->output_function)(ucs_armscii8_table[c - 0x28], filter->data));
} else if (c < 0 || c == MBFL_BAD_INPUT) {
CK(mbfl_filt_conv_illegal_output(c, filter));
} else if (c < 0xA0) {
CK((*filter->output_function)(c, filter->data));
} else {
for (int n = 0; n < 0x60; n++) {
if (c == armscii8_ucs_table[n]) {
CK((*filter->output_function)(0xA0 + n, filter->data));
return 0;
}
}
CK(mbfl_filt_conv_illegal_output(c, filter));
}
return 0;
}

static size_t mb_armscii8_to_wchar(unsigned char **in, size_t *in_len, uint32_t *buf, size_t bufsize, unsigned int *state)
{
unsigned char *p = *in, *e = p + *in_len;
Expand Down
Loading
Loading