55static char mbfl_hexchar_table[] = {
56 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
76 if (output_function !=
NULL) {
104 mbfl_convert_filter_init(filter,
from,
to, vtbl, output_function, flush_function,
data);
115 mbfl_convert_filter_init(filter, from_encoding, to_encoding, vtbl, output_function, flush_function,
data);
194 bool nonzero =
false;
195 int shift = 28,
ret = 0;
198 int n = (w >> shift) & 0xF;
235 switch (mode_backup) {
245 ret = mbfl_filt_conv_output_hex(w, filter);
256 ret = mbfl_filt_conv_output_hex(w, filter);
293 return from->input_filter;
295 return to->output_filter;
299 while ((vtbl = mbfl_special_filter_list[i++])) {
300 if (vtbl->
from ==
from->no_encoding && vtbl->
to ==
to->no_encoding) {
326 uint32_t wchar_buf[128];
327 unsigned int state = 0;
336 mb_convert_buf_init(&
buf, in_len, replacement_char, error_mode);
339 size_t out_len =
from->to_wchar(&in, &in_len, wchar_buf, 128, &
state);
341 to->from_wchar(wchar_buf, out_len, &
buf, !in_len);
344 *num_errors =
buf.errors;
345 return mb_convert_buf_result(&
buf,
to);
348static uint32_t* convert_cp_to_hex(uint32_t
cp, uint32_t *
out)
350 bool nonzero =
false;
354 int n = (
cp >> shift) & 0xF;
357 *
out++ = mbfl_hexchar_table[
n];
370static size_t mb_illegal_marker(uint32_t bad_cp, uint32_t *
out,
unsigned int err_mode, uint32_t replacement_char)
378 *
out++ = replacement_char;
385 *
out++ = replacement_char;
391 out = convert_cp_to_hex(bad_cp, &
out[2]);
395 out[0] =
'&';
out[1] =
'#';
out[2] =
'x';
396 out = convert_cp_to_hex(bad_cp, &
out[3]);
410 uint32_t repl_char =
buf->replacement_char;
411 unsigned int err_mode =
buf->error_mode;
420 buf->out = mb_convert_buf_add(
buf->out, 0xFF);
424 size_t len = mb_illegal_marker(bad_cp, temp, err_mode, repl_char);
428 buf->replacement_char =
'?';
433 fn(temp,
len,
buf,
false);
435 buf->replacement_char = repl_char;
436 buf->error_mode = err_mode;
zend_ffi_ctype_name_buf buf
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_BADUTF8
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR
const mbfl_encoding mbfl_encoding_8bit
const struct mbfl_convert_vtbl vtbl_8bit_b64
const mbfl_encoding mbfl_encoding_base64
const struct mbfl_convert_vtbl vtbl_b64_8bit
const struct mbfl_convert_vtbl vtbl_pass
const struct mbfl_convert_vtbl vtbl_qprint_8bit
const mbfl_encoding mbfl_encoding_qprint
const struct mbfl_convert_vtbl vtbl_8bit_qprint
const mbfl_encoding mbfl_encoding_uuencode
const struct mbfl_convert_vtbl vtbl_uuencode_8bit
const mbfl_encoding mbfl_encoding_wchar
void mb_illegal_output(uint32_t bad_cp, mb_from_wchar_fn fn, mb_convert_buf *buf)
void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest)
int mbfl_convert_filter_flush(mbfl_convert_filter *filter)
int mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter)
int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter)
int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p)
unsigned char * mbfl_convert_filter_feed_string(mbfl_convert_filter *filter, unsigned char *p, size_t len)
int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
zend_string * mb_fast_convert(unsigned char *in, size_t in_len, const mbfl_encoding *from, const mbfl_encoding *to, uint32_t replacement_char, unsigned int error_mode, unsigned int *num_errors)
const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(const mbfl_encoding *from, const mbfl_encoding *to)
void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter)
mbfl_convert_filter * mbfl_convert_filter_new2(const struct mbfl_convert_vtbl *vtbl, output_function_t output_function, flush_function_t flush_function, void *data)
mbfl_convert_filter * mbfl_convert_filter_new(const mbfl_encoding *from, const mbfl_encoding *to, output_function_t output_function, flush_function_t flush_function, void *data)
void mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src)
void mbfl_convert_filter_delete(mbfl_convert_filter *filter)
void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to)
struct _mbfl_convert_filter mbfl_convert_filter
int(* output_function_t)(int, void *)
int(* filter_flush_t)(mbfl_convert_filter *)
int(* flush_function_t)(void *)
const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
@ mbfl_no_encoding_base64
@ mbfl_no_encoding_qprint
@ mbfl_no_encoding_uuencode
#define MB_CONVERT_BUF_ENSURE(buf, out, limit, needed)
void(* mb_from_wchar_fn)(uint32_t *in, size_t in_len, mb_convert_buf *out, bool end)
int mbfl_filter_output_null(int c, void *data)
struct _mbfl_memory_device mbfl_memory_device
const mbfl_encoding * from
output_function_t output_function
int(* filter_function)(int c, mbfl_convert_filter *filter)
void(* filter_dtor)(mbfl_convert_filter *filter)
flush_function_t flush_function
filter_flush_t filter_flush
void(* filter_copy)(mbfl_convert_filter *src, mbfl_convert_filter *dest)
uint32_t illegal_substchar
enum mbfl_no_encoding from
int(* filter_flush)(struct _mbfl_convert_filter *filter)
int(* filter_function)(int c, struct _mbfl_convert_filter *filter)
void(* filter_ctor)(struct _mbfl_convert_filter *filter)
void(* filter_copy)(struct _mbfl_convert_filter *src, struct _mbfl_convert_filter *dest)
void(* filter_dtor)(struct _mbfl_convert_filter *filter)
struct _zend_string zend_string