Return to mbfilter_iso8859_3.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / mbstring / libmbfl / filters |
1.1 misho 1: /* 2: * "streamable kanji code filter and converter" 3: * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. 4: * 5: * LICENSE NOTICES 6: * 7: * This file is part of "streamable kanji code filter and converter", 8: * which is distributed under the terms of GNU Lesser General Public 9: * License (version 2) as published by the Free Software Foundation. 10: * 11: * This software is distributed in the hope that it will be useful, 12: * but WITHOUT ANY WARRANTY; without even the implied warranty of 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14: * GNU Lesser General Public License for more details. 15: * 16: * You should have received a copy of the GNU Lesser General Public 17: * License along with "streamable kanji code filter and converter"; 18: * if not, write to the Free Software Foundation, Inc., 59 Temple Place, 19: * Suite 330, Boston, MA 02111-1307 USA 20: * 21: * The author of this file: 22: * 23: */ 24: /* 25: * The source code included in this files was separated from mbfilter.c 26: * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. 27: * 28: */ 29: 30: #ifdef HAVE_CONFIG_H 31: #include "config.h" 32: #endif 33: 34: #include "mbfilter.h" 35: #include "mbfilter_iso8859_3.h" 36: #include "unicode_table_iso8859_3.h" 37: 38: static const char *mbfl_encoding_8859_3_aliases[] = {"ISO_8859-3", "latin3", NULL}; 39: 40: const mbfl_encoding mbfl_encoding_8859_3 = { 41: mbfl_no_encoding_8859_3, 42: "ISO-8859-3", 43: "ISO-8859-3", 44: (const char *(*)[])&mbfl_encoding_8859_3_aliases, 45: NULL, 46: MBFL_ENCTYPE_SBCS 47: }; 48: 49: const struct mbfl_identify_vtbl vtbl_identify_8859_3 = { 50: mbfl_no_encoding_8859_3, 51: mbfl_filt_ident_common_ctor, 52: mbfl_filt_ident_common_dtor, 53: mbfl_filt_ident_true 54: }; 55: 56: const struct mbfl_convert_vtbl vtbl_8859_3_wchar = { 57: mbfl_no_encoding_8859_3, 58: mbfl_no_encoding_wchar, 59: mbfl_filt_conv_common_ctor, 60: mbfl_filt_conv_common_dtor, 61: mbfl_filt_conv_8859_3_wchar, 62: mbfl_filt_conv_common_flush 63: }; 64: 65: const struct mbfl_convert_vtbl vtbl_wchar_8859_3 = { 66: mbfl_no_encoding_wchar, 67: mbfl_no_encoding_8859_3, 68: mbfl_filt_conv_common_ctor, 69: mbfl_filt_conv_common_dtor, 70: mbfl_filt_conv_wchar_8859_3, 71: mbfl_filt_conv_common_flush 72: }; 73: 74: 75: #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) 76: 77: /* 78: * ISO-8859-3 => wchar 79: */ 80: int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter) 81: { 82: int s; 83: 84: if (c >= 0 && c < 0xa0) { 85: s = c; 86: } else if (c >= 0xa0 && c < 0x100) { 87: s = iso8859_3_ucs_table[c - 0xa0]; 88: if (s <= 0) { 89: s = c; 90: s &= MBFL_WCSPLANE_MASK; 91: s |= MBFL_WCSPLANE_8859_3; 92: } 93: } else { 94: s = c; 95: s &= MBFL_WCSGROUP_MASK; 96: s |= MBFL_WCSGROUP_THROUGH; 97: } 98: 99: CK((*filter->output_function)(s, filter->data)); 100: 101: return c; 102: } 103: 104: /* 105: * wchar => ISO-8859-3 106: */ 107: int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter) 108: { 109: int s, n; 110: 111: if (c >= 0 && c < 0xa0) { 112: s = c; 113: } else { 114: s = -1; 115: n = 95; 116: while (n >= 0) { 117: if (c == iso8859_3_ucs_table[n]) { 118: s = 0xa0 + n; 119: break; 120: } 121: n--; 122: } 123: if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_3) { 124: s = c & MBFL_WCSPLANE_MASK; 125: } 126: } 127: 128: if (s >= 0) { 129: CK((*filter->output_function)(s, filter->data)); 130: } else { 131: if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { 132: CK(mbfl_filt_conv_illegal_output(c, filter)); 133: } 134: } 135: 136: return c; 137: } 138: 139: