109 if (from >= string->
len) {
114 result->encoding =
string->encoding;
118 const unsigned char *
end =
NULL;
125 if (length >= string->
len - from) {
126 length =
string->len - from;
129 start =
string->val + from;
134 if (length >= string->
len - from) {
135 length =
string->len - from;
138 start =
string->val + from;
141 if (length >= string->
len - from) {
142 length =
string->len - from;
145 start =
string->val + from;
148 const unsigned char *mbtab =
encoding->mblen_table;
149 const unsigned char *
p, *q;
153 for (m = 0,
p = string->
val, q =
p + from;
154 p < q;
p += (m = mbtab[*
p]));
163 if (length >= string->
len - (
start - string->
val)) {
164 end =
string->val +
string->len;
166 for (q =
p + length;
p < q;
p += (m = mbtab[*
p]));
180 w =
ecalloc(sz + 8,
sizeof(
unsigned char));
193 const unsigned char *
p, *q, *r;
197 const unsigned char *
p;
224 for (q = string->
val + from;
p < q;
p++) {
231 encoder->
data = decoder;
233 q =
string->val +
string->len;
239 _bk.pos = device.
pos;
241 if (length > q -
p) {
248 for (r =
p + length - 20;
p < r;
p++) {
254 if (device.
pos > length) {
256 device.
pos = _bk.pos;
276 if (device.
pos > length) {
277 if (bk.decoder.filter_dtor)
278 bk.decoder.filter_dtor(&bk.decoder);
279 if (bk.encoder.filter_dtor)
280 bk.encoder.filter_dtor(&bk.encoder);
283 device.
pos = _bk.pos;
292 if (_bk.decoder.filter_dtor)
293 _bk.decoder.filter_dtor(&_bk.decoder);
294 if (_bk.encoder.filter_dtor)
295 _bk.encoder.filter_dtor(&_bk.encoder);
315 if (device.
pos > length) {
333 _bk.pos = device.
pos;
338 if (device.
pos > length) {
339 if (_bk.decoder.filter_dtor)
340 _bk.decoder.filter_dtor(&_bk.decoder);
341 if (_bk.encoder.filter_dtor)
342 _bk.encoder.filter_dtor(&_bk.encoder);
356 if (bk.decoder.filter_dtor)
357 bk.decoder.filter_dtor(&bk.decoder);
358 if (bk.encoder.filter_dtor)
359 bk.encoder.filter_dtor(&bk.encoder);
362 device.
pos = _bk.pos;
376 if (bk.decoder.filter_dtor)
377 bk.decoder.filter_dtor(&bk.decoder);
378 if (bk.encoder.filter_dtor)
379 bk.encoder.filter_dtor(&bk.encoder);
mbfl_string * mbfl_strcut(mbfl_string *string, mbfl_string *result, size_t from, size_t length)
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE
const mbfl_encoding mbfl_encoding_wchar
#define MBFL_ENCTYPE_SBCS
#define MBFL_ENCTYPE_WCS4
#define MBFL_ENCTYPE_WCS2
void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest)
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_delete(mbfl_convert_filter *filter)
struct _mbfl_convert_filter mbfl_convert_filter
int(* output_function_t)(int, void *)
int(* flush_function_t)(void *)
int mbfl_filter_output_null(int c, void *data)
mbfl_string * mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result)
void mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz)
int mbfl_memory_device_output(int c, void *data)
struct _mbfl_memory_device mbfl_memory_device
void mbfl_string_init(mbfl_string *string)
struct _mbfl_string mbfl_string
unsigned const char * end
unsigned const char * pos
xmlCharEncodingHandlerPtr encoding
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
const mbfl_encoding * encoding
#define ecalloc(nmemb, size)