diff options
Diffstat (limited to 'ext/mbstring/libmbfl/filters/mbfilter_htmlent.c')
-rw-r--r-- | ext/mbstring/libmbfl/filters/mbfilter_htmlent.c | 260 |
1 files changed, 0 insertions, 260 deletions
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c deleted file mode 100644 index 40c24c3424..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * "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 part: Marcus Boerger <helly@php.net> - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_STRING_H -#include <string.h> -#endif - -#ifdef HAVE_STRINGS_H -#include <strings.h> -#endif - -#include "mbfilter.h" -#include "mbfilter_htmlent.h" -#include "html_entities.h" - -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, - 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", - "HTML-ENTITIES", - (const char *(*)[])&mbfl_encoding_html_ent_aliases, - NULL, - MBFL_ENCTYPE_HTML_ENT -}; - -const struct mbfl_convert_vtbl vtbl_wchar_html = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_html_ent, - mbfl_filt_conv_common_ctor, - mbfl_filt_conv_common_dtor, - mbfl_filt_conv_html_enc, - mbfl_filt_conv_html_enc_flush -}; - -const struct mbfl_convert_vtbl vtbl_html_wchar = { - mbfl_no_encoding_html_ent, - mbfl_no_encoding_wchar, - mbfl_filt_conv_html_dec_ctor, - mbfl_filt_conv_html_dec_dtor, - mbfl_filt_conv_html_dec, - mbfl_filt_conv_html_dec_flush }; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * any => HTML - */ -int mbfl_filt_conv_html_enc(int c, mbfl_convert_filter *filter) -{ - int tmp[64]; - int i; - unsigned int uc; - const mbfl_html_entity_entry *e; - - if (c < sizeof(htmlentitifieds) / sizeof(htmlentitifieds[0]) && - htmlentitifieds[c] != 1) { - CK((*filter->output_function)(c, filter->data)); - } else { - CK((*filter->output_function)('&', 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)); - } - goto last; - } - } - - { - int *p = tmp + sizeof(tmp) / sizeof(tmp[0]); - - CK((*filter->output_function)('#', filter->data)); - - uc = (unsigned int)c; - - *(--p) = '\0'; - do { - *(--p) = "0123456789"[uc % 10]; - uc /= 10; - } while (uc); - - 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_enc_flush(mbfl_convert_filter *filter) -{ - filter->status = 0; - filter->opaque = NULL; - return 0; -} - -/* - * HTML => any - */ -#define html_enc_buffer_size 16 -static const char html_entity_chars[] = "#0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - -void mbfl_filt_conv_html_dec_ctor(mbfl_convert_filter *filter) -{ - filter->status = 0; - filter->opaque = mbfl_malloc(html_enc_buffer_size+1); -} - -void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter) -{ - filter->status = 0; - if (filter->opaque) - { - mbfl_free((void*)filter->opaque); - } - filter->opaque = NULL; -} - -int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter) -{ - int pos, ent = 0; - mbfl_html_entity_entry *entity; - char *buffer = (char*)filter->opaque; - - if (!filter->status) { - if (c == '&' ) { - filter->status = 1; - buffer[0] = '&'; - } else { - CK((*filter->output_function)(c, filter->data)); - } - } else { - if (c == ';') { - buffer[filter->status] = 0; - if (buffer[1]=='#') { - /* numeric entity */ - for (pos=2; pos<filter->status; pos++) { - ent = ent*10 + (buffer[pos] - '0'); - } - CK((*filter->output_function)(ent, filter->data)); - filter->status = 0; - /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE, "mbstring decoded '%s'=%d", buffer, ent);*/ - } else { - /* named entity */ - entity = (mbfl_html_entity_entry *)mbfl_html_entity_list; - while (entity->name) { - if (!strcmp(buffer+1, entity->name)) { - ent = entity->code; - break; - } - entity++; - } - if (ent) { - /* decoded */ - CK((*filter->output_function)(ent, filter->data)); - filter->status = 0; - /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE,"mbstring decoded '%s'=%d", buffer, ent);*/ - } else { - /* failure */ - buffer[filter->status++] = ';'; - buffer[filter->status] = 0; - /* php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring cannot decode '%s'", buffer); */ - mbfl_filt_conv_html_dec_flush(filter); - } - } - } else { - /* add character */ - buffer[filter->status++] = c; - /* add character and check */ - if (!strchr(html_entity_chars, c) || filter->status+1==html_enc_buffer_size || (c=='#' && filter->status>2)) - { - /* illegal character or end of buffer */ - if (c=='&') - filter->status--; - buffer[filter->status] = 0; - /* php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring cannot decode '%s'", buffer)l */ - mbfl_filt_conv_html_dec_flush(filter); - if (c=='&') - { - filter->status = 1; - buffer[0] = '&'; - } - } - } - } - return c; -} - -int mbfl_filt_conv_html_dec_flush(mbfl_convert_filter *filter) -{ - int status, pos = 0; - char *buffer; - - buffer = (char*)filter->opaque; - status = filter->status; - /* flush fragments */ - while (status--) { - CK((*filter->output_function)(buffer[pos++], filter->data)); - } - filter->status = 0; - /*filter->buffer = 0; of cause NOT*/ - return 0; -} - - |