Moriyoshi Koizumi
moriy****@users*****
2002年 12月 25日 (水) 02:32:14 JST
moriyoshi 02/12/25 02:32:14 Modified: mbfl Makefile.am mbfilter.c mbfilter.h Added: mbfl mbfl_buffer_converter.c mbfl_buffer_converter.h Log: Separated buffer_converter code from mbfilter.c Revision Changes Path 1.9 +2 -2 libmbfl/mbfl/Makefile.am Index: Makefile.am =================================================================== RCS file: /cvsroot/php-i18n/libmbfl/mbfl/Makefile.am,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- Makefile.am 20 Dec 2002 19:36:28 -0000 1.8 +++ Makefile.am 24 Dec 2002 17:32:14 -0000 1.9 @@ -1,10 +1,10 @@ lib_LTLIBRARIES=libmbfl.la -libmbfl_la_SOURCES=mbfilter.c mbfl_string.c mbfl_language.c mbfl_encoding.c mbfl_convert.c mbfl_ident.c mbfl_memory_device.c mbfl_allocators.c mbfl_filter_output.c mbfilter_pass.c mbfilter_wchar.c mbfilter_8bit.c +libmbfl_la_SOURCES=mbfilter.c mbfl_string.c mbfl_language.c mbfl_encoding.c mbfl_convert.c mbfl_ident.c mbfl_memory_device.c mbfl_allocators.c mbfl_filter_output.c mbfilter_pass.c mbfilter_wchar.c mbfilter_8bit.c mbfl_buffer_converter.c libmbfl_filters_la=../filters/libmbfl_filters.la libmbfl_nls_la=../nls/libmbfl_nls.la libmbfl_la_LIBADD=$(libmbfl_filters_la) $(libmbfl_nls_la) libmbfl_includedir=$(includedir)/mbfl -libmbfl_include_HEADERS=mbfilter.h mbfl_consts.h mbfl_encoding.h mbfl_language.h mbfl_string.h mbfl_convert.h mbfl_ident.h mbfl_memory_device.h mbfl_allocators.h +libmbfl_include_HEADERS=mbfilter.h mbfl_consts.h mbfl_encoding.h mbfl_language.h mbfl_string.h mbfl_convert.h mbfl_ident.h mbfl_memory_device.h mbfl_allocators.h mbfl_buffer_converter.h $(libmbfl_filters_la): $(MAKE) -C `dirname $(libmbfl_filters_la)` 1.13 +0 -245 libmbfl/mbfl/mbfilter.c Index: mbfilter.c =================================================================== RCS file: /cvsroot/php-i18n/libmbfl/mbfl/mbfilter.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- mbfilter.c 20 Dec 2002 22:15:38 -0000 1.12 +++ mbfilter.c 24 Dec 2002 17:32:14 -0000 1.13 @@ -104,255 +104,11 @@ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46 }; - - /* * encoding filter */ #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * buffering converter - */ -mbfl_buffer_converter * mbfl_buffer_converter_new(mbfl_encoding_id from, mbfl_encoding_id to, int buf_initsz) -{ - mbfl_buffer_converter *convd; - - /* allocate */ - convd = (mbfl_buffer_converter*)mbfl_malloc(sizeof (mbfl_buffer_converter)); - if (convd == NULL) { - return NULL; - } - - /* initialize */ - convd->from = mbfl_get_encoding_by_id(from); - convd->to = mbfl_get_encoding_by_id(to); - if (convd->from == NULL) { - convd->from = &mbfl_encoding_pass; - } - if (convd->to == NULL) { - convd->to = &mbfl_encoding_pass; - } - - /* create convert filter */ - convd->filter1 = NULL; - convd->filter2 = NULL; - if (mbfl_convert_filter_get_vtbl(convd->from->no_encoding, convd->to->no_encoding) != NULL) { - convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device); - } else { - convd->filter2 = mbfl_convert_filter_new(mbfl_encoding_id_wchar, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device); - if (convd->filter2 != NULL) { - convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, mbfl_encoding_id_wchar, (int (*)(int, void*))convd->filter2->filter_function, NULL, convd->filter2); - if (convd->filter1 == NULL) { - mbfl_convert_filter_delete(convd->filter2); - } - } - } - if (convd->filter1 == NULL) { - return NULL; - } - - mbfl_memory_device_init(&convd->device, buf_initsz, buf_initsz/4); - - return convd; -} - -void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd) -{ - if (convd != NULL) { - if (convd->filter1) { - mbfl_convert_filter_delete(convd->filter1); - } - if (convd->filter2) { - mbfl_convert_filter_delete(convd->filter2); - } - mbfl_memory_device_clear(&convd->device); - mbfl_free((void*)convd); - } -} - -void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd) -{ - mbfl_memory_device_reset(&convd->device); -} - -int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode) -{ - if (convd != NULL) { - if (convd->filter2 != NULL) { - convd->filter2->illegal_mode = mode; - } else if (convd->filter1 != NULL) { - convd->filter1->illegal_mode = mode; - } else { - return 0; - } - } - - return 1; -} - -int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar) -{ - if (convd != NULL) { - if (convd->filter2 != NULL) { - convd->filter2->illegal_substchar = substchar; - } else if (convd->filter1 != NULL) { - convd->filter1->illegal_substchar = substchar; - } else { - return 0; - } - } - - return 1; -} - -int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n) -{ - mbfl_convert_filter *filter; - int (*filter_function)(int c, mbfl_convert_filter *filter); - - if (convd != NULL && p != NULL) { - filter = convd->filter1; - if (filter != NULL) { - filter_function = filter->filter_function; - while (n > 0) { - if ((*filter_function)(*p++, filter) < 0) { - break; - } - n--; - } - } - } - - return n; -} - -int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string) -{ - int n; - unsigned char *p; - mbfl_convert_filter *filter; - int (*filter_function)(int c, mbfl_convert_filter *filter); - - if (convd == NULL || string == NULL) { - return -1; - } - mbfl_memory_device_realloc(&convd->device, convd->device.pos + string->len, string->len/4); - /* feed data */ - n = string->len; - p = string->val; - filter = convd->filter1; - if (filter != NULL) { - filter_function = filter->filter_function; - while (n > 0) { - if ((*filter_function)(*p++, filter) < 0) { - return -1; - } - n--; - } - } - - return 0; -} - -int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd) -{ - if (convd == NULL) { - return -1; - } - - if (convd->filter1 != NULL) { - mbfl_convert_filter_flush(convd->filter1); - } - if (convd->filter2 != NULL) { - mbfl_convert_filter_flush(convd->filter2); - } - - return 0; -} - -mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result) -{ - if (convd != NULL && result != NULL && convd->device.buffer != NULL) { - result->no_encoding = convd->to->no_encoding; - result->val = convd->device.buffer; - result->len = convd->device.pos; - } else { - result = NULL; - } - - return result; -} - -mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result) -{ - if (convd == NULL || result == NULL) { - return NULL; - } - result->no_encoding = convd->to->no_encoding; - return mbfl_memory_device_result(&convd->device, result); -} - -mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, - mbfl_string *result) -{ - if (convd == NULL || string == NULL || result == NULL) { - return NULL; - } - mbfl_buffer_converter_feed(convd, string); - if (convd->filter1 != NULL) { - mbfl_convert_filter_flush(convd->filter1); - } - if (convd->filter2 != NULL) { - mbfl_convert_filter_flush(convd->filter2); - } - result->no_encoding = convd->to->no_encoding; - return mbfl_memory_device_result(&convd->device, result); -} - - -/* - * encoding detector - */ -mbfl_encoding_detector * mbfl_encoding_detector_new(mbfl_encoding *elist, int eliztsz) -{ - mbfl_encoding_detector *identd; - - int i, num; - mbfl_identify_filter *filter; - - if (elist == NULL || eliztsz <= 0) { - return NULL; - } - - /* allocate */ - identd = (mbfl_encoding_detector*)mbfl_malloc(sizeof(mbfl_encoding_detector)); - if (identd == NULL) { - return NULL; - } - identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter *)); - if (identd->filter_list == NULL) { - mbfl_free(identd); - return NULL; - } - - /* create filters */ - i = 0; - num = 0; - while (i < eliztsz) { - filter = mbfl_identify_filter_new(&elist[i]); - if (filter != NULL) { - identd->filter_list[num] = filter; - num++; - } - i++; - } - identd->filter_list_size = num; - - return identd; -} - void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd) { int i; @@ -426,7 +182,6 @@ return encoding; } - /* * encoding converter 1.9 +0 -23 libmbfl/mbfl/mbfilter.h Index: mbfilter.h =================================================================== RCS file: /cvsroot/php-i18n/libmbfl/mbfl/mbfilter.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- mbfilter.h 20 Dec 2002 22:15:38 -0000 1.8 +++ mbfilter.h 24 Dec 2002 17:32:14 -0000 1.9 @@ -109,29 +109,6 @@ /* * buffering converter */ -typedef struct _mbfl_buffer_converter mbfl_buffer_converter; - -struct _mbfl_buffer_converter { - mbfl_convert_filter *filter1; - mbfl_convert_filter *filter2; - mbfl_memory_device device; - const mbfl_encoding *from; - const mbfl_encoding *to; -}; - -mbfl_buffer_converter * mbfl_buffer_converter_new(mbfl_encoding_id from, mbfl_encoding_id to, int buf_initsz); -void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd); -void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd); -int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode); -int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar); -int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n); -int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string); -int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd); -mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result); -mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result); -mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result); - - /* * encoding detector */ 1.1 libmbfl/mbfl/mbfl_buffer_converter.c Index: mbfl_buffer_converter.c =================================================================== /* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.c * by Moriyoshi Koizumi <moriy****@php*****> on 20 Dec 2002. The file * mbfilter.c is included in this package . * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stddef.h> #include "mbfl_allocators.h" #include "mbfl_buffer_converter.h" #include "mbfilter_pass.h" /* * buffering converter */ mbfl_buffer_converter * mbfl_buffer_converter_new(mbfl_encoding_id from, mbfl_encoding_id to, int buf_initsz) { mbfl_buffer_converter *convd; /* allocate */ convd = (mbfl_buffer_converter*)mbfl_malloc(sizeof (mbfl_buffer_converter)); if (convd == NULL) { return NULL; } /* initialize */ convd->from = mbfl_get_encoding_by_id(from); convd->to = mbfl_get_encoding_by_id(to); if (convd->from == NULL) { convd->from = &mbfl_encoding_pass; } if (convd->to == NULL) { convd->to = &mbfl_encoding_pass; } /* create convert filter */ convd->filter1 = NULL; convd->filter2 = NULL; if (mbfl_convert_filter_get_vtbl(convd->from->no_encoding, convd->to->no_encoding) != NULL) { convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device); } else { convd->filter2 = mbfl_convert_filter_new(mbfl_encoding_id_wchar, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device); if (convd->filter2 != NULL) { convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, mbfl_encoding_id_wchar, (int (*)(int, void*))convd->filter2->filter_function, NULL, convd->filter2); if (convd->filter1 == NULL) { mbfl_convert_filter_delete(convd->filter2); } } } if (convd->filter1 == NULL) { return NULL; } mbfl_memory_device_init(&convd->device, buf_initsz, buf_initsz/4); return convd; } void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd) { if (convd != NULL) { if (convd->filter1) { mbfl_convert_filter_delete(convd->filter1); } if (convd->filter2) { mbfl_convert_filter_delete(convd->filter2); } mbfl_memory_device_clear(&convd->device); mbfl_free((void*)convd); } } void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd) { mbfl_memory_device_reset(&convd->device); } int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode) { if (convd != NULL) { if (convd->filter2 != NULL) { convd->filter2->illegal_mode = mode; } else if (convd->filter1 != NULL) { convd->filter1->illegal_mode = mode; } else { return 0; } } return 1; } int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar) { if (convd != NULL) { if (convd->filter2 != NULL) { convd->filter2->illegal_substchar = substchar; } else if (convd->filter1 != NULL) { convd->filter1->illegal_substchar = substchar; } else { return 0; } } return 1; } int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n) { mbfl_convert_filter *filter; int (*filter_function)(int c, mbfl_convert_filter *filter); if (convd != NULL && p != NULL) { filter = convd->filter1; if (filter != NULL) { filter_function = filter->filter_function; while (n > 0) { if ((*filter_function)(*p++, filter) < 0) { break; } n--; } } } return n; } int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string) { int n; unsigned char *p; mbfl_convert_filter *filter; int (*filter_function)(int c, mbfl_convert_filter *filter); if (convd == NULL || string == NULL) { return -1; } mbfl_memory_device_realloc(&convd->device, convd->device.pos + string->len, string->len/4); /* feed data */ n = string->len; p = string->val; filter = convd->filter1; if (filter != NULL) { filter_function = filter->filter_function; while (n > 0) { if ((*filter_function)(*p++, filter) < 0) { return -1; } n--; } } return 0; } int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd) { if (convd == NULL) { return -1; } if (convd->filter1 != NULL) { mbfl_convert_filter_flush(convd->filter1); } if (convd->filter2 != NULL) { mbfl_convert_filter_flush(convd->filter2); } return 0; } mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result) { if (convd != NULL && result != NULL && convd->device.buffer != NULL) { result->no_encoding = convd->to->no_encoding; result->val = convd->device.buffer; result->len = convd->device.pos; } else { result = NULL; } return result; } mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result) { if (convd == NULL || result == NULL) { return NULL; } result->no_encoding = convd->to->no_encoding; return mbfl_memory_device_result(&convd->device, result); } mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result) { if (convd == NULL || string == NULL || result == NULL) { return NULL; } mbfl_buffer_converter_feed(convd, string); if (convd->filter1 != NULL) { mbfl_convert_filter_flush(convd->filter1); } if (convd->filter2 != NULL) { mbfl_convert_filter_flush(convd->filter2); } result->no_encoding = convd->to->no_encoding; return mbfl_memory_device_result(&convd->device, result); } /* * encoding detector */ mbfl_encoding_detector * mbfl_encoding_detector_new(mbfl_encoding *elist, int eliztsz) { mbfl_encoding_detector *identd; int i, num; mbfl_identify_filter *filter; if (elist == NULL || eliztsz <= 0) { return NULL; } /* allocate */ identd = (mbfl_encoding_detector*)mbfl_malloc(sizeof(mbfl_encoding_detector)); if (identd == NULL) { return NULL; } identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter *)); if (identd->filter_list == NULL) { mbfl_free(identd); return NULL; } /* create filters */ i = 0; num = 0; while (i < eliztsz) { filter = mbfl_identify_filter_new(&elist[i]); if (filter != NULL) { identd->filter_list[num] = filter; num++; } i++; } identd->filter_list_size = num; return identd; } 1.1 libmbfl/mbfl/mbfl_buffer_converter.h Index: mbfl_buffer_converter.h =================================================================== /* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi <moriy****@php*****> on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_BUFFER_CONVERTER_H #define MBFL_BUFFER_CONVERTER_H #include "mbfl_convert.h" #include "mbfl_memory_device.h" #include "mbfl_encoding.h" #include "mbfl_string.h" typedef struct _mbfl_buffer_converter mbfl_buffer_converter; struct _mbfl_buffer_converter { mbfl_convert_filter *filter1; mbfl_convert_filter *filter2; mbfl_memory_device device; const mbfl_encoding *from; const mbfl_encoding *to; }; mbfl_buffer_converter * mbfl_buffer_converter_new(mbfl_encoding_id from, mbfl_encoding_id to, int buf_initsz); void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd); void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd); int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode); int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar); int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n); int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string); int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd); mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result); mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result); mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result); #endif /* MBFL_BUFFER_CONVERTER_H */