+Den V. Tsopa <tdv@edisoft.ru>
Hironori Sato <satoh@jpnnet.com>
+Marcus Boerger <helly@php.net>
+Moriyoshi Koizumi <moriyoshi@php.net>
+Rui Hirokawa <hirokawa@php.net>
Shigeru Kanemoto <sgk@happysize.co.jp>
Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
-U. Kenkichi <kenkichi@axes.co.jp>
Tateyama <tateyan@amy.hi-ho.ne.jp>
-Moriyoshi Koizumi <moriyoshi@php.net>
-Rui Hirokawa <hirokawa@php.net>
-Other gracious contributors
+U. Kenkichi <kenkichi@axes.co.jp>
+Wez Furlong <wez@thebrainroom.com>
-EXTRA_DIST=AUTHORS DISCLAIMER
+EXTRA_DIST=AUTHORS DISCLAIMER LICENSE Makefile.bcc32 \
+ config.h.bcc32 config.h.vc6 \
+ libmbfl.dsp libmbfl.dsw libmbfl.sln libmbfl.vcproj mbfl.rc \
+ mksbcc32.bat rules.mak.bcc32
SUBDIRS = nls filters mbfl
all: mbfl.dll mbfl.lib
mbfl.lib: mbfl.dll
- implib mbfl.lib mbfl.dll
+ implib -a mbfl.lib mbfl.dll
-mbfl.dll: compile mbfl.def mbfl.res
+mbfl.dll: compile mbfl.res
@if exist linker.rsp del linker.rsp
@for %i in ($(SUBDIRS)) do @for %j in (%i\*.obj) do @echo %j+ >> linker.rsp
- ilink32 $(LDFLAGS) @linker.rsp,mbfl.dll,,$(LIBS),mbfl.def,mbfl.res
+ ilink32 $(LDFLAGS) @linker.rsp,mbfl.dll,,$(LIBS),,mbfl.res
del linker.rsp
mbfl.res: mbfl.rc
clean:
@for %i in ($(SUBDIRS)) do $(COMSPEC) /C mksbcc32.bat $(MAKE) %i clean
+ @if exist linker.rsp del linker.rsp
+ @if exist mbfl.RES del mbfl.RES
@if exist mbfl.dll del mbfl.dll
@if exist mbfl.lib del mbfl.lib
@if exist config.h del config.h
See the file INSTALL for building and installation instructions.
-# $Id: README,v 1.1.2.2 2003/08/24 18:18:51 moriyoshi Exp
+# $Id$
/* Define to 1 if you have the <assert.h> header file. */
#undef HAVE_ASSERT_H
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Name of package */
+#undef PACKAGE
+
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
+/* Version number of package */
+#undef VERSION
+
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
# Process this file with autoconf to produce a configure script.
-AC_INIT([libmbfl],[1.0.0])
-AM_INIT_AUTOMAKE
-AC_CONFIG_SRCDIR([mbfl/mbfilter.c])
-AC_CONFIG_HEADER([config.h])
+AC_INIT(mbfl/mbfilter.c)
+AM_INIT_AUTOMAKE(libmbfl, 1.0.0)
+AC_CONFIG_SRCDIR(mbfl/mbfilter.c)
+AM_CONFIG_HEADER(config.h)
+
+SHLIB_VERSION="1:0:0"
+AC_SUBST(SHLIB_VERSION)
# Checks for programs.
AC_PROG_CC
+EXTRA_DIST=Makefile.bcc32
noinst_LTLIBRARIES=libmbfl_filters.la
INCLUDES=-I../mbfl
-libmbfl_filters_la_SOURCES=mbfilter_cp936.c mbfilter_hz.c mbfilter_euc_tw.c mbfilter_big5.c mbfilter_euc_jp.c mbfilter_jis.c mbfilter_iso8859_1.c mbfilter_iso8859_2.c mbfilter_cp1252.c mbfilter_cp1251.c mbfilter_ascii.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_htmlent.c mbfilter_byte2.c mbfilter_byte4.c mbfilter_uuencode.c mbfilter_base64.c mbfilter_sjis.c mbfilter_7bit.c mbfilter_qprint.c mbfilter_ucs4.c mbfilter_ucs2.c mbfilter_utf32.c mbfilter_utf16.c mbfilter_utf8.c mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_euc_jp_win.c mbfilter_cp932.c mbfilter_euc_cn.c mbfilter_euc_kr.c mbfilter_uhc.c mbfilter_iso2022_kr.c mbfilter_cp866.c mbfilter_koi8r.c html_entities.c
+libmbfl_filters_la_LDFLAGS=-version-info $(SHLIB_VERSION)
+libmbfl_filters_la_SOURCES=mbfilter_cp936.c mbfilter_hz.c mbfilter_euc_tw.c mbfilter_big5.c mbfilter_euc_jp.c mbfilter_jis.c mbfilter_iso8859_1.c mbfilter_iso8859_2.c mbfilter_cp1252.c mbfilter_cp1251.c mbfilter_ascii.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_htmlent.c mbfilter_byte2.c mbfilter_byte4.c mbfilter_uuencode.c mbfilter_base64.c mbfilter_sjis.c mbfilter_7bit.c mbfilter_qprint.c mbfilter_ucs4.c mbfilter_ucs2.c mbfilter_utf32.c mbfilter_utf16.c mbfilter_utf8.c mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_euc_jp_win.c mbfilter_cp932.c mbfilter_euc_cn.c mbfilter_euc_kr.c mbfilter_uhc.c mbfilter_iso2022_kr.c mbfilter_cp866.c mbfilter_koi8r.c html_entities.c cp932_table.h html_entities.h mbfilter_7bit.h mbfilter_ascii.h mbfilter_base64.h mbfilter_big5.h mbfilter_byte2.h mbfilter_byte4.h mbfilter_cp1251.h mbfilter_cp1252.h mbfilter_cp866.h mbfilter_cp932.h mbfilter_cp936.h mbfilter_euc_cn.h mbfilter_euc_jp.h mbfilter_euc_jp_win.h mbfilter_euc_kr.h mbfilter_euc_tw.h mbfilter_htmlent.h mbfilter_hz.h mbfilter_iso2022_kr.h mbfilter_iso8859_1.h mbfilter_iso8859_10.h mbfilter_iso8859_13.h mbfilter_iso8859_14.h mbfilter_iso8859_15.h mbfilter_iso8859_2.h mbfilter_iso8859_3.h mbfilter_iso8859_4.h mbfilter_iso8859_5.h mbfilter_iso8859_6.h mbfilter_iso8859_7.h mbfilter_iso8859_8.h mbfilter_iso8859_9.h mbfilter_jis.h mbfilter_koi8r.h mbfilter_qprint.h mbfilter_sjis.h mbfilter_ucs2.h mbfilter_ucs4.h mbfilter_uhc.h mbfilter_utf16.h mbfilter_utf32.h mbfilter_utf7.h mbfilter_utf7imap.h mbfilter_utf8.h mbfilter_uuencode.h unicode_prop.h unicode_table_big5.h unicode_table_cns11643.h unicode_table_cp1251.h unicode_table_cp1252.h unicode_table_cp866.h unicode_table_cp932_ext.h unicode_table_cp936.h unicode_table_iso8859_10.h unicode_table_iso8859_13.h unicode_table_iso8859_14.h unicode_table_iso8859_15.h unicode_table_iso8859_2.h unicode_table_iso8859_3.h unicode_table_iso8859_4.h unicode_table_iso8859_5.h unicode_table_iso8859_6.h unicode_table_iso8859_7.h unicode_table_iso8859_8.h unicode_table_iso8859_9.h unicode_table_jis.h unicode_table_koi8r.h unicode_table_uhc.h
#endif
#include "mbfilter.h"
-#include <string.h>
+#include "html_entities.h"
-const mbfl_html_entity mbfl_html_entity_list[] = { /*
- {"quot", 34}, DO NOT CONVERT THESE AUTOMATICALLY
+const mbfl_html_entity_entry mbfl_html_entity_list[] = {
+ {"quot", 34},
{"amp", 38},
{"lt", 60},
- {"gt", 62}, */
+ {"gt", 62},
{"nbsp", 160},
{"iexcl", 161},
{"cent", 162},
#ifndef MBFL_HTML_ENTITIES_H
#define MBFL_HTML_ENTITIES_H
-#include "mbfilter.h"
+typedef struct _mbfl_html_entity_entry {
+ char * name;
+ int code;
+} mbfl_html_entity_entry;
-extern mbfl_html_entity mbfl_html_entity_list[];
+extern const mbfl_html_entity_entry mbfl_html_entity_list[];
#endif /* MBFL_HTML_ENTITIES_H */
#include "mbfilter_htmlent.h"
#include "html_entities.h"
-static const unsigned char mblen_table_html[] = { /* 0x00, 0x80 - 0xFF, only valid for numeric entities */
+static const int htmlentitifieds[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
static const char *mbfl_encoding_html_ent_aliases[] = {"HTML", "html", NULL};
const mbfl_encoding mbfl_encoding_html_ent = {
mbfl_no_encoding_html_ent,
"HTML-ENTITIES",
- "US-ASCII",
+ "HTML-ENTITIES",
(const char *(*)[])&mbfl_encoding_html_ent_aliases,
- NULL, /* mblen_table_html, Do not use table instead calulate length based on entities actually used */
+ NULL,
MBFL_ENCTYPE_HTML_ENT
};
*/
int mbfl_filt_conv_html_enc(int c, mbfl_convert_filter *filter)
{
- int tmp[10];
- int i = 0, p = 0, e;
+ int tmp[64];
+ int i;
unsigned int uc;
+ const mbfl_html_entity_entry *e;
- if (c<256 && mblen_table_html[c]==1) {
+ if (c < sizeof(htmlentitifieds) / sizeof(htmlentitifieds[0]) &&
+ htmlentitifieds[c] != 1) {
CK((*filter->output_function)(c, filter->data));
} else {
- /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE, "mbfl_filt_conv_html_enc(0x%08X = %d)", c, c);*/
CK((*filter->output_function)('&', filter->data));
- while (1) {
- e = mbfl_html_entity_list[i].code;
- if (c < e || e == -1) {
- break;
- }
- if (c == e) {
- while(mbfl_html_entity_list[i].name[p]) {
- CK((*filter->output_function)((int)mbfl_html_entity_list[i].name[p++], filter->data));
+ for (i = 0; (e = &mbfl_html_entity_list[i])->name != NULL; i++) {
+ if (c == e->code) {
+ char *p;
+
+ for (p = e->name; *p != '\0'; p++) {
+ CK((*filter->output_function)((int)*p, filter->data));
}
- break;
+ goto last;
}
- i++;
}
- i=0;
- if (!p) {
+
+ {
+ int *p = tmp + sizeof(tmp);
+
CK((*filter->output_function)('#', filter->data));
+
uc = (unsigned int)c;
+
+ *(--p) = '\0';
do {
- tmp[i++] = '0'+uc%10;
+ *(--p) = "0123456789"[uc % 10];
uc /= 10;
} while (uc);
- do {
- CK((*filter->output_function)(tmp[--i], filter->data));
- } while (i);
+
+ for (; *p != '\0'; p++) {
+ CK((*filter->output_function)(*p, filter->data));
+ }
}
+ last:
CK((*filter->output_function)(';', filter->data));
}
return c;
int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
{
int pos, ent = 0;
- mbfl_html_entity *entity;
+ mbfl_html_entity_entry *entity;
char *buffer = (char*)filter->cache;
if (!filter->status) {
/*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE, "mbstring decoded '%s'=%d", buffer, ent);*/
} else {
/* named entity */
- entity = (mbfl_html_entity *)mbfl_html_entity_list;
+ entity = (mbfl_html_entity_entry *)mbfl_html_entity_list;
while (entity->name) {
if (!strcmp(buffer+1, entity->name)) {
ent = entity->code;
+EXTRA_DIST=Makefile.bcc32
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_filters_la=../filters/libmbfl_filters.la
libmbfl_nls_la=../nls/libmbfl_nls.la
libmbfl_la_LIBADD=$(libmbfl_filters_la) $(libmbfl_nls_la)
+libmbfl_la_LDFLAGS=-version-info $(SHLIB_VERSION)
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 mbfl_defs.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_defs.h mbfl_filter_output.h mbfilter_pass.h mbfilter_wchar.h mbfilter_8bit.h
$(libmbfl_filters_la):
$(MAKE) -C `dirname $(libmbfl_filters_la)`
* encoding detector
*/
mbfl_encoding_detector *
-mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz)
+mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int elistsz)
{
mbfl_encoding_detector *identd;
int i, num;
mbfl_identify_filter *filter;
- if (elist == NULL || eliztsz <= 0) {
+ if (elist == NULL || elistsz <= 0) {
return NULL;
}
if (identd == NULL) {
return NULL;
}
- identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter *));
+ identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter *));
if (identd->filter_list == NULL) {
mbfl_free(identd);
return NULL;
/* create filters */
i = 0;
num = 0;
- while (i < eliztsz) {
+ while (i < elistsz) {
filter = mbfl_identify_filter_new(elist[i]);
if (filter != NULL) {
identd->filter_list[num] = filter;
* identify encoding
*/
const mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz, int strict)
+mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict)
{
int i, n, num, bad;
unsigned char *p;
- const struct mbfl_identify_vtbl *vtbl;
mbfl_identify_filter *flist, *filter;
const mbfl_encoding *encoding;
- /* initialize */
- flist = (mbfl_identify_filter *)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter));
+ /* flist is an array of mbfl_identify_filter instances */
+ flist = (mbfl_identify_filter *)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter));
if (flist == NULL) {
return NULL;
}
- i = 0;
+
num = 0;
if (elist != NULL) {
- while (i < eliztsz) {
- vtbl = mbfl_identify_filter_get_vtbl(elist[i]);
- if (vtbl != NULL) {
- filter = &flist[num];
- mbfl_identify_filter_set_vtbl(filter, vtbl);
- filter->encoding = mbfl_no2encoding(vtbl->encoding);
- (*filter->filter_ctor)(filter);
+ for (i = 0; i < elistsz; i++) {
+ if (!mbfl_identify_filter_init(&flist[num], elist[i])) {
num++;
}
- i++;
}
}
/* feed data */
n = string->len;
p = string->val;
+
if (p != NULL) {
+ bad = 0;
while (n > 0) {
- i = 0;
- bad = 0;
- while (i < num) {
+ for (i = 0; i < num; i++) {
filter = &flist[i];
(*filter->filter_function)(*p, filter);
if (filter->flag) {
bad++;
}
- i++;
}
if ((num - 1) <= bad && !strict) {
break;
}
/* judge */
- i = num - 1;
- bad = 1;
encoding = NULL;
- while (i >= 0) {
+
+ for (i = 0; i < num; i++) {
filter = &flist[i];
- if (filter->flag) {
- bad++;
- } else {
+ if (!filter->flag) {
encoding = filter->encoding;
+ break;
}
- i--;
}
-#if 0
- if (bad < num) {
- encoding = NULL;
- }
-#endif
- i = 0;
- while (i < num) {
- filter = &flist[i];
- (*filter->filter_dtor)(filter);
- i++;
+ /* cleanup */
+ /* dtors should be called in reverse order */
+ i = num; while (--i >= 0) {
+ mbfl_identify_filter_cleanup(&flist[i]);
}
+
mbfl_free((void *)flist);
return encoding;
}
const char*
-mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz, int strict)
+mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict)
{
const mbfl_encoding *encoding;
- encoding = mbfl_identify_encoding(string, elist, eliztsz, strict);
+ encoding = mbfl_identify_encoding(string, elist, elistsz, strict);
if (encoding != NULL &&
encoding->no_encoding > mbfl_no_encoding_charset_min &&
encoding->no_encoding < mbfl_no_encoding_charset_max) {
}
const enum mbfl_no_encoding
-mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz)
+mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz)
{
const mbfl_encoding *encoding;
- encoding = mbfl_identify_encoding(string, elist, eliztsz, 0);
+ encoding = mbfl_identify_encoding(string, elist, elistsz, 0);
if (encoding != NULL &&
encoding->no_encoding > mbfl_no_encoding_charset_min &&
encoding->no_encoding < mbfl_no_encoding_charset_max) {
int filter_list_size;
};
-MBFLAPI extern mbfl_encoding_detector * mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz);
+MBFLAPI extern mbfl_encoding_detector * mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int elistsz);
MBFLAPI extern void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd);
MBFLAPI extern int mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string);
MBFLAPI extern enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *identd);
* identify encoding
*/
MBFLAPI extern const mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz, int strict);
+mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict);
MBFLAPI extern const char *
-mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz, int strict);
+mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict);
MBFLAPI extern const enum mbfl_no_encoding
-mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz);
+mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz);
/*
* strlen
mbfl_string *result,
enum mbfl_no_encoding outcode);
-
/*
* convert HTML numeric entity
*/
MBFLAPI extern mbfl_string *
mbfl_html_numeric_entity(mbfl_string *string, mbfl_string *result, int *convmap, int mapsize, int type);
-
/*
* convert of harfwidth and fullwidth for japanese
*/
MBFLAPI extern mbfl_string *
mbfl_ja_jp_hantozen(mbfl_string *string, mbfl_string *result, int mode);
-/*
- * HTML Entity table
- */
-typedef struct _mbfl_html_entity {
- char * name;
- int code;
-} mbfl_html_entity;
-
#endif /* MBFL_MBFILTER_H */
#include "mbfl_defs.h"
#include "mbfilter.h"
-extern const mbfl_encoding mbfl_encoding_8bit;
+MBFLAPI extern const mbfl_encoding mbfl_encoding_8bit;
#endif /* MBFL_MBFILTER_8BIT_H */
#include "mbfl_defs.h"
#include "mbfilter.h"
-extern const mbfl_encoding mbfl_encoding_pass;
-extern const struct mbfl_convert_vtbl vtbl_pass;
+MBFLAPI extern const mbfl_encoding mbfl_encoding_pass;
+MBFLAPI extern const struct mbfl_convert_vtbl vtbl_pass;
MBFLAPI extern int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter);
#include "mbfl_defs.h"
#include "mbfilter.h"
-extern const mbfl_encoding mbfl_encoding_wchar;
+MBFLAPI extern const mbfl_encoding mbfl_encoding_wchar;
#endif /* MBFL_MBFILTER_WCHAR_H */
#include "filters/mbfilter_ucs2.h"
#include "filters/mbfilter_htmlent.h"
+static void mbfl_convert_filter_reset_vtbl(mbfl_convert_filter *filter);
+
/* hex character table "0123456789ABCDEF" */
static char mbfl_hexchar_table[] = {
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
filter->illegal_substchar = 0x3f; /* '?' */
/* setup the function table */
- mbfl_convert_filter_select_vtbl(filter);
+ mbfl_convert_filter_reset_vtbl(filter);
/* constructor */
(*filter->filter_ctor)(filter);
return (filter->flush_function ? (*filter->flush_function)(filter->data) : 0);
}
-void
-mbfl_convert_filter_reset(
- mbfl_convert_filter *filter,
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to)
+void mbfl_convert_filter_reset(mbfl_convert_filter *filter,
+ enum mbfl_no_encoding from, enum mbfl_no_encoding to)
{
/* destruct old filter */
(*filter->filter_dtor)(filter);
filter->to = mbfl_no2encoding(to);
/* set the vtbl */
- mbfl_convert_filter_select_vtbl(filter);
+ mbfl_convert_filter_reset_vtbl(filter);
/* construct new filter */
(*filter->filter_ctor)(filter);
return ret;
}
-void mbfl_convert_filter_set_vtbl(mbfl_convert_filter *filter, const struct mbfl_convert_vtbl *vtbl)
-{
- if (filter && vtbl) {
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
- filter->filter_flush = vtbl->filter_flush;
- }
-}
-
-
const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to)
{
const struct mbfl_convert_vtbl *vtbl;
}
-void mbfl_convert_filter_select_vtbl(mbfl_convert_filter *filter)
+static void mbfl_convert_filter_reset_vtbl(mbfl_convert_filter *filter)
{
const struct mbfl_convert_vtbl *vtbl;
if (vtbl == NULL) {
vtbl = &vtbl_pass;
}
- mbfl_convert_filter_set_vtbl(filter, vtbl);
+
+ filter->filter_ctor = vtbl->filter_ctor;
+ filter->filter_dtor = vtbl->filter_dtor;
+ filter->filter_function = vtbl->filter_function;
+ filter->filter_flush = vtbl->filter_flush;
}
/*
MBFLAPI extern void mbfl_convert_filter_reset(mbfl_convert_filter *filter, enum mbfl_no_encoding from, enum mbfl_no_encoding to);
MBFLAPI extern void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist);
MBFLAPI extern int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter);
-MBFLAPI extern void mbfl_convert_filter_select_vtbl(mbfl_convert_filter *filter);
MBFLAPI extern const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to);
MBFLAPI extern void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter);
/*
* identify filter
*/
-
-void mbfl_identify_filter_set_vtbl(mbfl_identify_filter *filter, const struct mbfl_identify_vtbl *vtbl)
-{
- if (filter && vtbl) {
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
- }
-}
-
const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding)
{
const struct mbfl_identify_vtbl * vtbl;
return vtbl;
}
-void mbfl_identify_filter_select_vtbl(mbfl_identify_filter *filter)
-{
- const struct mbfl_identify_vtbl *vtbl;
-
- vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
- if (vtbl == NULL) {
- vtbl = &vtbl_identify_false;
- }
- mbfl_identify_filter_set_vtbl(filter, vtbl);
-}
-
mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding)
{
- mbfl_identify_filter * filter;
+ mbfl_identify_filter *filter;
/* allocate */
filter = (mbfl_identify_filter *)mbfl_malloc(sizeof(mbfl_identify_filter));
return NULL;
}
+ if (mbfl_identify_filter_init(filter, encoding)) {
+ mbfl_free(filter);
+ return NULL;
+ }
+
+ return filter;
+}
+
+int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding)
+{
+ const struct mbfl_identify_vtbl *vtbl;
+
/* encoding structure */
filter->encoding = mbfl_no2encoding(encoding);
if (filter->encoding == NULL) {
filter->score = 0;
/* setup the function table */
- mbfl_identify_filter_select_vtbl(filter);
+ vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
+ if (vtbl == NULL) {
+ vtbl = &vtbl_identify_false;
+ }
+ filter->filter_ctor = vtbl->filter_ctor;
+ filter->filter_dtor = vtbl->filter_dtor;
+ filter->filter_function = vtbl->filter_function;
/* constructor */
(*filter->filter_ctor)(filter);
- return filter;
+ return 0;
}
void mbfl_identify_filter_delete(mbfl_identify_filter *filter)
{
- if (filter) {
- (*filter->filter_dtor)(filter);
- mbfl_free((void*)filter);
+ if (filter == NULL) {
+ return;
}
+
+ mbfl_identify_filter_cleanup(filter);
+ mbfl_free((void*)filter);
+}
+
+void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter)
+{
+ (*filter->filter_dtor)(filter);
}
void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter)
int (*filter_function)(int c, mbfl_identify_filter *filter);
};
-MBFLAPI extern void mbfl_identify_filter_set_vtbl(mbfl_identify_filter *filter, const struct mbfl_identify_vtbl *vtbl);
MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding);
-MBFLAPI extern void mbfl_identify_filter_select_vtbl(mbfl_identify_filter *filter);
MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding);
MBFLAPI extern void mbfl_identify_filter_delete(mbfl_identify_filter *filter);
+MBFLAPI extern mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding);
+MBFLAPI void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter);
MBFLAPI extern void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter);
MBFLAPI extern void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter);
+EXTRA_DIST=Makefile.bcc32
noinst_LTLIBRARIES=libmbfl_nls.la
INCLUDES=-I../mbfl
-libmbfl_nls_la_SOURCES=nls_ja.c nls_de.c nls_en.c nls_kr.c nls_ru.c nls_zh.c nls_uni.c nls_neutral.c
+libmbfl_nls_la_LDFLAGS=-version-info $(SHLIB_VERSION)
+libmbfl_nls_la_SOURCES=nls_ja.c nls_de.c nls_en.c nls_kr.c nls_ru.c nls_zh.c nls_uni.c nls_neutral.c nls_ja.h nls_de.h nls_en.h nls_kr.h nls_ru.h nls_zh.h nls_uni.h nls_neutral.h