diff --git a/ChangeLog b/ChangeLog index fb5e9291fd464e..4f952d08b1b6e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Dec 10 14:00:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org> + + * transcode.c: new file to provide encoding conversion features. + code contributed by Martin Duerst. + Mon Dec 10 13:50:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org> * re.c (rb_reg_search): return byte offset. [ruby-dev:32452] diff --git a/common.mk b/common.mk index 9c3f7d5a363daa..543088bb8211d8 100644 --- a/common.mk +++ b/common.mk @@ -65,6 +65,8 @@ COMMONOBJS = array.$(OBJEXT) \ string.$(OBJEXT) \ struct.$(OBJEXT) \ time.$(OBJEXT) \ + transcode.$(OBJEXT) \ + transcode_data_iso_8859.$(OBJEXT) \ util.$(OBJEXT) \ variable.$(OBJEXT) \ version.$(OBJEXT) \ @@ -530,7 +532,7 @@ sprintf.$(OBJEXT): {$(VPATH)}sprintf.c {$(VPATH)}ruby.h {$(VPATH)}config.h \ st.$(OBJEXT): {$(VPATH)}st.c {$(VPATH)}config.h {$(VPATH)}st.h {$(VPATH)}defines.h string.$(OBJEXT): {$(VPATH)}string.c {$(VPATH)}ruby.h {$(VPATH)}config.h \ {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \ - {$(VPATH)}re.h {$(VPATH)}regex.h {$(VPATH)}encoding.h + {$(VPATH)}re.h {$(VPATH)}regex.h {$(VPATH)}encoding.h struct.$(OBJEXT): {$(VPATH)}struct.c {$(VPATH)}ruby.h {$(VPATH)}config.h \ {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h thread.$(OBJEXT): {$(VPATH)}thread.c {$(VPATH)}eval_intern.h \ @@ -540,6 +542,9 @@ thread.$(OBJEXT): {$(VPATH)}thread.c {$(VPATH)}eval_intern.h \ {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \ {$(VPATH)}node.h {$(VPATH)}util.h \ {$(VPATH)}signal.h {$(VPATH)}st.h {$(VPATH)}dln.h +transcode.$(OBJEXT): {$(VPATH)}transcode.c {$(VPATH)}transcode_data.h {$(VPATH)}ruby.h {$(VPATH)}config.h \ + {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}encoding.h +transcode_data_iso_8859.$(OBJEXT): {$(VPATH)}transcode_data_iso_8859.c {$(VPATH)}transcode_data.h cont.$(OBJEXT): {$(VPATH)}cont.c {$(VPATH)}eval_intern.h \ {$(VPATH)}ruby.h {$(VPATH)}vm_core.h {$(VPATH)}id.h {$(VPATH)}config.h \ {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \ diff --git a/inits.c b/inits.c index 3006bf60984015..04a67731e55d17 100644 --- a/inits.c +++ b/inits.c @@ -16,6 +16,7 @@ void Init_Array(void); void Init_Bignum(void); void Init_Binding(void); void Init_Comparable(void); +void Init_transcode(void); void Init_Dir(void); void Init_Enumerable(void); void Init_Enumerator(void); @@ -77,6 +78,7 @@ rb_call_inits() Init_Struct(); Init_Regexp(); Init_pack(); + Init_transcode(); Init_marshal(); Init_Range(); Init_IO(); diff --git a/string.c b/string.c index 7111578256b864..9ed5dfa0575491 100644 --- a/string.c +++ b/string.c @@ -179,7 +179,7 @@ str_alloc(VALUE klass) return (VALUE)str; } -static VALUE +VALUE str_new(VALUE klass, const char *ptr, long len) { VALUE str; @@ -625,7 +625,7 @@ str_modifiable(VALUE str) rb_raise(rb_eSecurityError, "Insecure: can't modify string"); } -static int +int str_independent(VALUE str) { str_modifiable(str); diff --git a/test/ruby/test_transcode.rb b/test/ruby/test_transcode.rb new file mode 100644 index 00000000000000..2993e2f0067a8f --- /dev/null +++ b/test/ruby/test_transcode.rb @@ -0,0 +1,44 @@ +# -*- encoding: US-ASCII -*- # make sure this runs in binary mode + +class String + # different name, because we should be able to remove this later + def fix_encoding (encoding) + force_encoding(encoding) + end +end + +require 'test/unit' +class TestConvert < Test::Unit::TestCase + def test_can_call + # we don't have semantics for conversion without attribute yet + # maybe 'convert to UTF-8' would be nice :-) + assert_raise(ArgumentError) { 'abc'.encode } + assert_raise(ArgumentError) { 'abc'.encode! } + assert_raise(ArgumentError) { 'abc'.force_encoding('Shift_JIS').encode('UTF-8') } # temporary + assert_raise(ArgumentError) { 'abc'.force_encoding('Shift_JIS').encode!('UTF-8') } # temporary + assert_raise(ArgumentError) { 'abc'.encode('foo', 'bar') } + assert_raise(ArgumentError) { 'abc'.encode!('foo', 'bar') } + assert_raise(ArgumentError) { 'abc'.force_encoding('utf-8').encode('foo') } + assert_raise(ArgumentError) { 'abc'.force_encoding('utf-8').encode!('foo') } + assert_equal('abc'.force_encoding('utf-8').encode('iso-8859-1'), 'abc') # temporary, fix encoding + assert_equal("D\xFCrst".force_encoding('iso-8859-1').encode('utf-8').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-1').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-2').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-3').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-4').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-9').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-10').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-13').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-14').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\xFCrst".encode('utf-8', 'iso-8859-15').fix_encoding('utf-8'), "D\u00FCrst") + assert_equal("D\u00FCrst".encode('iso-8859-1'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-2'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-3'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-4'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-9'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-10'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-13'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-14'), "D\xFCrst") + assert_equal("D\u00FCrst".encode('iso-8859-15'), "D\xFCrst") + end +end \ No newline at end of file diff --git a/transcode.c b/transcode.c new file mode 100644 index 00000000000000..697332fa5e9789 --- /dev/null +++ b/transcode.c @@ -0,0 +1,438 @@ +/********************************************************************** + + transcode.c - + + $Author: duerst $ + $Date: 2007-10-30 16:10:22 +0900 (Tue, 30 Oct 2007) $ + created at: Tue Oct 30 16:10:22 JST 2007 + + Copyright (C) 2007 Martin Duerst + +**********************************************************************/ + +#include "ruby/ruby.h" +#include "ruby/encoding.h" + +#include "transcode_data.h" + + +/* + * prototypes and macros copied from string.c (temporarily !!!) + */ +VALUE str_new(VALUE klass, const char *ptr, long len); +int str_independent(VALUE str); +#define STR_NOCAPA_P(s) (FL_TEST(s,STR_NOEMBED) && FL_ANY(s,ELTS_SHARED|STR_ASSOC)) +#define STR_NOEMBED FL_USER1 +#define STR_ASSOC FL_USER3 +#define STR_SET_NOEMBED(str) do {\ + FL_SET(str, STR_NOEMBED);\ + STR_SET_EMBED_LEN(str, 0);\ +} while (0) +#define STR_UNSET_NOCAPA(s) do {\ + if (FL_TEST(s,STR_NOEMBED)) FL_UNSET(s,(ELTS_SHARED|STR_ASSOC));\ +} while (0) +#define STR_SET_EMBED_LEN(str, n) do { \ + long tmp_n = (n);\ + RBASIC(str)->flags &= ~RSTRING_EMBED_LEN_MASK;\ + RBASIC(str)->flags |= (tmp_n) << RSTRING_EMBED_LEN_SHIFT;\ +} while (0) +#define STR_SET_LEN(str, n) do { \ + if (STR_EMBED_P(str)) {\ + STR_SET_EMBED_LEN(str, n);\ + }\ + else {\ + RSTRING(str)->as.heap.len = (n);\ + }\ +} while (0) +#define STR_EMBED_P(str) (!FL_TEST(str, STR_NOEMBED)) +#define RESIZE_CAPA(str,capacity) do {\ + if (STR_EMBED_P(str)) {\ + if ((capacity) > RSTRING_EMBED_LEN_MAX) {\ + char *tmp = ALLOC_N(char, capacity+1);\ + memcpy(tmp, RSTRING_PTR(str), RSTRING_LEN(str));\ + RSTRING(str)->as.heap.ptr = tmp;\ + RSTRING(str)->as.heap.len = RSTRING_LEN(str);\ + STR_SET_NOEMBED(str);\ + RSTRING(str)->as.heap.aux.capa = (capacity);\ + }\ + }\ + else {\ + REALLOC_N(RSTRING(str)->as.heap.ptr, char, (capacity)+1);\ + if (!STR_NOCAPA_P(str))\ + RSTRING(str)->as.heap.aux.capa = (capacity);\ + }\ +} while (0) +/* end of copied prototypes and macros */ + + + +/* + * Dispatch data and logic + */ + +/* extern declarations, should use some include file here */ +extern const BYTE_LOOKUP from_ISO_8859_1; +extern const BYTE_LOOKUP from_ISO_8859_2; +extern const BYTE_LOOKUP from_ISO_8859_3; +extern const BYTE_LOOKUP from_ISO_8859_4; +extern const BYTE_LOOKUP from_ISO_8859_5; +extern const BYTE_LOOKUP from_ISO_8859_6; +extern const BYTE_LOOKUP from_ISO_8859_7; +extern const BYTE_LOOKUP from_ISO_8859_8; +extern const BYTE_LOOKUP from_ISO_8859_9; +extern const BYTE_LOOKUP from_ISO_8859_10; +extern const BYTE_LOOKUP from_ISO_8859_11; +extern const BYTE_LOOKUP from_ISO_8859_13; +extern const BYTE_LOOKUP from_ISO_8859_14; +extern const BYTE_LOOKUP from_ISO_8859_15; + +extern const BYTE_LOOKUP to_ISO_8859_1; +extern const BYTE_LOOKUP to_ISO_8859_2; +extern const BYTE_LOOKUP to_ISO_8859_3; +extern const BYTE_LOOKUP to_ISO_8859_4; +extern const BYTE_LOOKUP to_ISO_8859_5; +extern const BYTE_LOOKUP to_ISO_8859_6; +extern const BYTE_LOOKUP to_ISO_8859_7; +extern const BYTE_LOOKUP to_ISO_8859_8; +extern const BYTE_LOOKUP to_ISO_8859_9; +extern const BYTE_LOOKUP to_ISO_8859_10; +extern const BYTE_LOOKUP to_ISO_8859_11; +extern const BYTE_LOOKUP to_ISO_8859_13; +extern const BYTE_LOOKUP to_ISO_8859_14; +extern const BYTE_LOOKUP to_ISO_8859_15; + + +/* declarations probably need to go into separate header file, e.g. transcode.h */ + +/* static structure, one per supported encoding pair */ +typedef struct { + const char *from_encoding; + const char *to_encoding; + BYTE_LOOKUP *conv_tree_start; + int max_output; + int from_utf8; +} transcoder; + +/* todo: dynamic structure, one per conversion (stream) */ + +/* in the future, add some mechanism for dynamically adding stuff here */ +#define MAX_TRANSCODERS 29 /* todo: fix: this number has to be adjusted by hand */ +static transcoder transcoder_table[MAX_TRANSCODERS]; + +/* not sure why it's not possible to do relocatable initializations */ +/* maybe the code here can be removed (changed to simple initialization) */ +/* if we move this to another file???? */ +static void +register_transcoder (const char *from_e, const char *to_e, + const BYTE_LOOKUP *tree_start, int max_output, int from_utf8) +{ + static int n = 0; + if (n >= MAX_TRANSCODERS) { + /* we are initializing, is it okay to use rb_raise here? */ + rb_raise(rb_eRuntimeError /*change exception*/, "not enough transcoder slots"); + } + transcoder_table[n].from_encoding = from_e; + transcoder_table[n].to_encoding = to_e; + transcoder_table[n].conv_tree_start = (BYTE_LOOKUP *)tree_start; + transcoder_table[n].max_output = max_output; + transcoder_table[n].from_utf8 = from_utf8; + + n++; +} + +static void +init_transcoder_table (void) +{ + register_transcoder("ISO-8859-1", "UTF-8", &from_ISO_8859_1, 2, 0); + register_transcoder("ISO-8859-2", "UTF-8", &from_ISO_8859_2, 2, 0); + register_transcoder("ISO-8859-3", "UTF-8", &from_ISO_8859_3, 2, 0); + register_transcoder("ISO-8859-4", "UTF-8", &from_ISO_8859_4, 2, 0); + register_transcoder("ISO-8859-5", "UTF-8", &from_ISO_8859_5, 3, 0); + register_transcoder("ISO-8859-6", "UTF-8", &from_ISO_8859_6, 2, 0); + register_transcoder("ISO-8859-7", "UTF-8", &from_ISO_8859_7, 3, 0); + register_transcoder("ISO-8859-8", "UTF-8", &from_ISO_8859_8, 3, 0); + register_transcoder("ISO-8859-9", "UTF-8", &from_ISO_8859_9, 2, 0); + register_transcoder("ISO-8859-10", "UTF-8", &from_ISO_8859_10, 3, 0); + register_transcoder("ISO-8859-11", "UTF-8", &from_ISO_8859_11, 3, 0); + register_transcoder("ISO-8859-13", "UTF-8", &from_ISO_8859_13, 3, 0); + register_transcoder("ISO-8859-14", "UTF-8", &from_ISO_8859_14, 3, 0); + register_transcoder("ISO-8859-15", "UTF-8", &from_ISO_8859_15, 3, 0); + register_transcoder("UTF-8", "ISO-8859-1", &to_ISO_8859_1, 1, 1); + register_transcoder("UTF-8", "ISO-8859-2", &to_ISO_8859_2, 1, 1); + register_transcoder("UTF-8", "ISO-8859-3", &to_ISO_8859_3, 1, 1); + register_transcoder("UTF-8", "ISO-8859-4", &to_ISO_8859_4, 1, 1); + register_transcoder("UTF-8", "ISO-8859-5", &to_ISO_8859_5, 1, 1); + register_transcoder("UTF-8", "ISO-8859-6", &to_ISO_8859_6, 1, 1); + register_transcoder("UTF-8", "ISO-8859-7", &to_ISO_8859_7, 1, 1); + register_transcoder("UTF-8", "ISO-8859-8", &to_ISO_8859_8, 1, 1); + register_transcoder("UTF-8", "ISO-8859-9", &to_ISO_8859_9, 1, 1); + register_transcoder("UTF-8", "ISO-8859-10", &to_ISO_8859_10, 1, 1); + register_transcoder("UTF-8", "ISO-8859-11", &to_ISO_8859_11, 1, 1); + register_transcoder("UTF-8", "ISO-8859-13", &to_ISO_8859_13, 1, 1); + register_transcoder("UTF-8", "ISO-8859-14", &to_ISO_8859_14, 1, 1); + register_transcoder("UTF-8", "ISO-8859-15", &to_ISO_8859_15, 1, 1); + register_transcoder(NULL, NULL, NULL, 0, 0); +} + + +static transcoder* +transcode_dispatch (char* from_encoding, char* to_encoding) +{ + transcoder *candidate = transcoder_table; + + for (candidate = transcoder_table; candidate->from_encoding; candidate++) + if (0==strcasecmp(from_encoding, candidate->from_encoding) + && 0==strcasecmp(to_encoding, candidate->to_encoding)) + break; + /* in the future, add multistep transcoding logic here */ + return candidate->from_encoding ? candidate : NULL; +} + +/* dynamic structure, one per conversion (similar to iconv_t) */ +/* may carry conversion state (e.g. for iso-2022-jp) */ +typedef struct { + VALUE ruby_string_dest; /* the String used as the conversion destination, + or NULL if something else is being converted */ +} transcoding; + + +/* + * Transcoding engine logic + */ +static void +transcode_loop (unsigned char **in_pos, unsigned char **out_pos, + unsigned char *in_stop, unsigned char *out_stop, + transcoder *my_transcoder, + transcoding *my_transcoding) +{ + unsigned char *input = *in_pos, *output = *out_pos; + unsigned char *in_p = *in_pos, *out_p = *out_pos; + BYTE_LOOKUP *conv_tree_start = my_transcoder->conv_tree_start; + BYTE_LOOKUP *next_table; + unsigned int next_offset; + unsigned int next_info; + unsigned char next_byte; + int from_utf8 = my_transcoder->from_utf8; + unsigned char *out_s = out_stop - my_transcoder->max_output + 1; + while (in_p < in_stop) { + unsigned char *char_start = in_p; + next_table = conv_tree_start; + if (out_p >= out_s) { + VALUE dest_string = my_transcoding->ruby_string_dest; + if (!dest_string) { + rb_raise(rb_eArgError /*@@@change exception*/, "Unable to obtain more space for transcoding"); + } + else { + int len = (out_p - *out_pos); + int new_len = (len + my_transcoder->max_output) * 2; + RESIZE_CAPA(dest_string, new_len); + STR_SET_LEN(dest_string, new_len); + *out_pos = RSTRING_PTR(dest_string); + out_p = *out_pos + len; + out_s = *out_pos + new_len - my_transcoder->max_output; + } + } + next_byte = *in_p++; + follow_byte: + next_offset = next_table->base[next_byte]; + next_info = (unsigned int)next_table->info[next_offset]; + switch (next_info & 0x1F) { + case NOMAP: + *out_p++ = next_byte; + continue; + case 0x00: case 0x04: case 0x08: case 0x0C: + case 0x10: case 0x14: case 0x18: case 0x1C: + if (in_p >= in_stop) { + /* todo: deal with the case of backtracking */ + /* todo: deal with incomplete input (streaming) */ + goto illegal; + } + next_byte = *in_p++; + if (from_utf8) { + if ((next_byte&0xC0) == 0x80) + next_byte -= 0x80; + else + goto illegal; + } + next_table = (BYTE_LOOKUP*)next_info; + goto follow_byte; + /* maybe rewrite the following cases to use fallthrough???? */ + case ZERObt: /* drop input */ + continue; + case ONEbt: + *out_p++ = getBT1(next_info); + continue; + case TWObt: + *out_p++ = getBT1(next_info); + *out_p++ = getBT2(next_info); + continue; + case FOURbt: + *out_p++ = getBT0(next_info); + case THREEbt: /* fall through */ + *out_p++ = getBT1(next_info); + *out_p++ = getBT2(next_info); + *out_p++ = getBT3(next_info); + continue; + case ILLEGAL: + goto illegal; + case UNDEF: + /* todo: add code for alternative behaviors */ + rb_raise(rb_eRuntimeError /*@@@change exception*/, "conversion undefined for byte sequence"); + continue; + } + continue; + illegal: + /* deal with illegal byte sequence */ + /* todo: add code for alternative behaviors */ + rb_raise(rb_eRuntimeError /*change exception*/, "illegal byte sequence"); + continue; + } + /* cleanup */ + *in_pos = in_p; + *out_pos = out_p; +} + + +/* + * String-specific code + */ + +static VALUE +str_transcode(int argc, VALUE *argv, VALUE str, int bang) +{ + VALUE dest; + long blen, slen, len; + char *buf, *bp, *sp, *fromp; + int tainted = 0; + rb_encoding *from_enc, *to_enc; + char *from_e, *to_e; + transcoder *my_transcoder; + int idx; + transcoding my_transcoding; + + if (argc<1 || argc>2) { + rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc); + } + to_enc = NULL; /* todo: work out later, 'to' parameter may be Encoding, + or we want an encoding to set on result */ + to_e = RSTRING_PTR(StringValue(argv[0])); + if (argc==1) { + from_enc = rb_enc_get(str); + from_e = (char *)rb_enc_name(from_enc); + } + else { + from_enc = NULL; /* todo: work out later, 'from' parameter may be Encoding */ + from_e = RSTRING_PTR(StringValue(argv[1])); + } + + /* strcasecmp: hope we are in C locale or locale-insensitive */ + if (0==strcasecmp(from_e, to_e)) { /* TODO: add tests for US-ASCII-clean data and ASCII-compatible encodings */ + if (bang) return str; + return rb_str_dup(str); + } + if (!(my_transcoder = transcode_dispatch(from_e, to_e))) { + rb_raise(rb_eArgError, "transcoding not supported (from %s to %s)", from_e, to_e); + } + + fromp = sp = RSTRING_PTR(str); + slen = RSTRING_LEN(str); + blen = slen + 30; /* len + margin */ + dest = str_new(0, 0, blen); + bp = buf = RSTRING_PTR(dest); + my_transcoding.ruby_string_dest = dest; + + rb_str_locktmp(dest); + + /* for simple testing: */ + transcode_loop((unsigned char **)&fromp, (unsigned char **)&bp, + (unsigned char*)(sp+slen), (unsigned char*)(bp+blen), + my_transcoder, &my_transcoding); + if (fromp != sp+slen) { + rb_raise(rb_eArgError, "not fully converted, %d bytes left", sp+slen-fromp); + } + buf = RSTRING_PTR(dest); + blen = RSTRING_LEN(dest); + *bp = '\0'; + rb_str_unlocktmp(dest); + if (bang) { + if (str_independent(str) && !STR_EMBED_P(str)) { + free(RSTRING_PTR(str)); + } + STR_SET_NOEMBED(str); + STR_UNSET_NOCAPA(str); + RSTRING(str)->as.heap.ptr = buf; + RSTRING(str)->as.heap.aux.capa = blen; + RSTRING(dest)->as.heap.ptr = 0; + RSTRING(dest)->as.heap.len = 0; + } + else { + RBASIC(dest)->klass = rb_obj_class(str); + OBJ_INFECT(dest, str); + str = dest; + } + STR_SET_LEN(str, bp - buf); + + /* set encoding */ /* would like to have an easier way to do this */ + if ((idx = rb_enc_find_index(to_e)) < 0) { + if ((idx = rb_enc_find_index("ASCII-8BIT")) < 0) { + rb_raise(rb_eArgError, "unknown encoding name: ASCII-8BIT"); + } + } + rb_enc_associate(str, rb_enc_from_index(idx)); + + if (tainted) OBJ_TAINT(str); /* is this needed??? */ + return str; +} + +/* + * call-seq: + * str.encode!(encoding) => str + * str.encode!(to_encoding, from_encoding) => str + * + * With one argument, transcodes the contents of <i>str</i> from + * str.encoding to +encoding+. + * With two arguments, transcodes the contents of <i>str</i> from + * from_encoding to to_encoding. + * Returns the string even if no changes were made. + */ + +static VALUE +rb_str_transcode_bang(int argc, VALUE *argv, VALUE str) +{ + return str_transcode(argc, argv, str, 1); +} + +/* + * call-seq: + * str.encode(encoding) => str + * + * With one argument, returns a copy of <i>str</i> transcoded + * to encoding +encoding+. + * With two arguments, returns a copy of <i>str</i> transcoded + * from from_encoding to to_encoding. + */ + +static VALUE +rb_str_transcode(int argc, VALUE *argv, VALUE str) +{ + return str_transcode(argc, argv, str, 0); +} + +/* function to fool the optimizer (avoid inlining transcode_loop) */ +void +transcode_fool_the_optimizer (void) +{ + unsigned char **in_pos, **out_pos, *in_stop, *out_stop; + transcoder *my_transcoder; + transcoding *my_transcoding; + transcode_loop(in_pos, out_pos, in_stop, out_stop, + my_transcoder, my_transcoding); +} + +void +Init_transcode(void) +{ + init_transcoder_table(); + rb_define_method(rb_cString, "encode", rb_str_transcode, -1); + rb_define_method(rb_cString, "encode!", rb_str_transcode_bang, -1); +} diff --git a/transcode_data.h b/transcode_data.h new file mode 100644 index 00000000000000..42e09214586e8f --- /dev/null +++ b/transcode_data.h @@ -0,0 +1,40 @@ +typedef unsigned char base_element; +typedef const void * const info_element; + +typedef struct byte_lookup { + const base_element *base; + const void * const * const info; +} BYTE_LOOKUP; + +#ifdef TRANSCODE_DATA +/* data file needs to treat this as a pointer, to remove warnings */ +#define PType (const void * const) +#else +/* in code, this is treated as just an integer */ +#define PType (int) +#endif + +#define NOMAP (PType 0x01) /* single byte direct map */ +#define ONEbt (0x02) /* one byte payload */ +#define TWObt (0x03) /* two bytes payload */ +#define THREEbt (0x05) /* three bytes payload */ +#define FOURbt (0x06) /* four bytes payload, UTF-8 only, macros start at getBT0 */ +#define ILLEGAL (PType 0x07) /* illegal byte sequence */ +#define UNDEF (PType 0x09) /* legal but undefined */ +#define ZERObt (PType 0x0A) /* zero bytes of payload, i.e. remove */ + +#define output1(b1) ((void*)((((unsigned char)(b1))<<8)|ONEbt)) +#define output2(b1,b2) ((void*)((((unsigned char)(b1))<<8)|(((unsigned char)(b2))<<16)|TWObt)) +#define output3(b1,b2,b3) ((void*)((((unsigned char)(b1))<<8)|(((unsigned char)(b2))<<16)|(((unsigned char)(b3))<<24)|THREEbt)) +#define output4(b0,b1,b2,b3) ((void*)((((unsigned char)(b1))<< 8)|(((unsigned char)(b2))<<16)|(((unsigned char)(b3))<<24)|((((unsigned char)(b0))&0x07)<<5)|FOURbt)) + +#define getBT1(a) (((a)>> 8)&0xFF) +#define getBT2(a) (((a)>>16)&0xFF) +#define getBT3(a) (((a)>>24)&0xFF) +#define getBT0(a) ((((a)>> 5)&0x07)|0xF0) /* for UTF-8 only!!! */ + +/* do we need these??? maybe not, can be done with simple tables */ +#define ONETRAIL /* legal but undefined if one more trailing UTF-8 */ +#define TWOTRAIL /* legal but undefined if two more trailing UTF-8 */ +#define THREETRAIL /* legal but undefined if three more trailing UTF-8 */ + diff --git a/transcode_data_iso_8859.c b/transcode_data_iso_8859.c new file mode 100644 index 00000000000000..087932ae389388 --- /dev/null +++ b/transcode_data_iso_8859.c @@ -0,0 +1,3260 @@ +#define TRANSCODE_DATA +#include "transcode_data.h" + +static const unsigned char +from_ISO_8859_1_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_1_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC2','\xA1'), output2('\xC2','\xA2'), + output2('\xC2','\xA3'), output2('\xC2','\xA4'), + output2('\xC2','\xA5'), output2('\xC2','\xA6'), + output2('\xC2','\xA7'), output2('\xC2','\xA8'), + output2('\xC2','\xA9'), output2('\xC2','\xAA'), + output2('\xC2','\xAB'), output2('\xC2','\xAC'), + output2('\xC2','\xAD'), output2('\xC2','\xAE'), + output2('\xC2','\xAF'), output2('\xC2','\xB0'), + output2('\xC2','\xB1'), output2('\xC2','\xB2'), + output2('\xC2','\xB3'), output2('\xC2','\xB4'), + output2('\xC2','\xB5'), output2('\xC2','\xB6'), + output2('\xC2','\xB7'), output2('\xC2','\xB8'), + output2('\xC2','\xB9'), output2('\xC2','\xBA'), + output2('\xC2','\xBB'), output2('\xC2','\xBC'), + output2('\xC2','\xBD'), output2('\xC2','\xBE'), + output2('\xC2','\xBF'), output2('\xC3','\x80'), + output2('\xC3','\x81'), output2('\xC3','\x82'), + output2('\xC3','\x83'), output2('\xC3','\x84'), + output2('\xC3','\x85'), output2('\xC3','\x86'), + output2('\xC3','\x87'), output2('\xC3','\x88'), + output2('\xC3','\x89'), output2('\xC3','\x8A'), + output2('\xC3','\x8B'), output2('\xC3','\x8C'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC3','\x8F'), output2('\xC3','\x90'), + output2('\xC3','\x91'), output2('\xC3','\x92'), + output2('\xC3','\x93'), output2('\xC3','\x94'), + output2('\xC3','\x95'), output2('\xC3','\x96'), + output2('\xC3','\x97'), output2('\xC3','\x98'), + output2('\xC3','\x99'), output2('\xC3','\x9A'), + output2('\xC3','\x9B'), output2('\xC3','\x9C'), + output2('\xC3','\x9D'), output2('\xC3','\x9E'), + output2('\xC3','\x9F'), output2('\xC3','\xA0'), + output2('\xC3','\xA1'), output2('\xC3','\xA2'), + output2('\xC3','\xA3'), output2('\xC3','\xA4'), + output2('\xC3','\xA5'), output2('\xC3','\xA6'), + output2('\xC3','\xA7'), output2('\xC3','\xA8'), + output2('\xC3','\xA9'), output2('\xC3','\xAA'), + output2('\xC3','\xAB'), output2('\xC3','\xAC'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC3','\xAF'), output2('\xC3','\xB0'), + output2('\xC3','\xB1'), output2('\xC3','\xB2'), + output2('\xC3','\xB3'), output2('\xC3','\xB4'), + output2('\xC3','\xB5'), output2('\xC3','\xB6'), + output2('\xC3','\xB7'), output2('\xC3','\xB8'), + output2('\xC3','\xB9'), output2('\xC3','\xBA'), + output2('\xC3','\xBB'), output2('\xC3','\xBC'), + output2('\xC3','\xBD'), output2('\xC3','\xBE'), + output2('\xC3','\xBF'), +}; +const BYTE_LOOKUP +from_ISO_8859_1 = { + from_ISO_8859_1_offsets, + from_ISO_8859_1_infos +}; + +static const unsigned char +to_ISO_8859_1_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, +}; +static const void* const +to_ISO_8859_1_C2_infos[64] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA1'), output1('\xA2'), output1('\xA3'), + output1('\xA4'), output1('\xA5'), output1('\xA6'), output1('\xA7'), + output1('\xA8'), output1('\xA9'), output1('\xAA'), output1('\xAB'), + output1('\xAC'), output1('\xAD'), output1('\xAE'), output1('\xAF'), + output1('\xB0'), output1('\xB1'), output1('\xB2'), output1('\xB3'), + output1('\xB4'), output1('\xB5'), output1('\xB6'), output1('\xB7'), + output1('\xB8'), output1('\xB9'), output1('\xBA'), output1('\xBB'), + output1('\xBC'), output1('\xBD'), output1('\xBE'), output1('\xBF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_1_C2 = { + to_ISO_8859_1_C2_offsets, + to_ISO_8859_1_C2_infos +}; + +static const unsigned char +to_ISO_8859_1_C3_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, +}; +static const void* const +to_ISO_8859_1_C3_infos[64] = { + output1('\xC0'), output1('\xC1'), output1('\xC2'), output1('\xC3'), + output1('\xC4'), output1('\xC5'), output1('\xC6'), output1('\xC7'), + output1('\xC8'), output1('\xC9'), output1('\xCA'), output1('\xCB'), + output1('\xCC'), output1('\xCD'), output1('\xCE'), output1('\xCF'), + output1('\xD0'), output1('\xD1'), output1('\xD2'), output1('\xD3'), + output1('\xD4'), output1('\xD5'), output1('\xD6'), output1('\xD7'), + output1('\xD8'), output1('\xD9'), output1('\xDA'), output1('\xDB'), + output1('\xDC'), output1('\xDD'), output1('\xDE'), output1('\xDF'), + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE3'), + output1('\xE4'), output1('\xE5'), output1('\xE6'), output1('\xE7'), + output1('\xE8'), output1('\xE9'), output1('\xEA'), output1('\xEB'), + output1('\xEC'), output1('\xED'), output1('\xEE'), output1('\xEF'), + output1('\xF0'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF7'), + output1('\xF8'), output1('\xF9'), output1('\xFA'), output1('\xFB'), + output1('\xFC'), output1('\xFD'), output1('\xFE'), output1('\xFF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_1_C3 = { + to_ISO_8859_1_C3_offsets, + to_ISO_8859_1_C3_infos +}; + +static const unsigned char +to_ISO_8859_1_offsets[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, 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, 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, 2, -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 void* const +to_ISO_8859_1_infos[3] = { + NOMAP, &to_ISO_8859_1_C2, &to_ISO_8859_1_C3, +}; +const BYTE_LOOKUP +to_ISO_8859_1 = { + to_ISO_8859_1_offsets, + to_ISO_8859_1_infos +}; + +static const unsigned char +from_ISO_8859_2_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_2_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC4','\x84'), output2('\xCB','\x98'), + output2('\xC5','\x81'), output2('\xC2','\xA4'), + output2('\xC4','\xBD'), output2('\xC5','\x9A'), + output2('\xC2','\xA7'), output2('\xC2','\xA8'), + output2('\xC5','\xA0'), output2('\xC5','\x9E'), + output2('\xC5','\xA4'), output2('\xC5','\xB9'), + output2('\xC2','\xAD'), output2('\xC5','\xBD'), + output2('\xC5','\xBB'), output2('\xC2','\xB0'), + output2('\xC4','\x85'), output2('\xCB','\x9B'), + output2('\xC5','\x82'), output2('\xC2','\xB4'), + output2('\xC4','\xBE'), output2('\xC5','\x9B'), + output2('\xCB','\x87'), output2('\xC2','\xB8'), + output2('\xC5','\xA1'), output2('\xC5','\x9F'), + output2('\xC5','\xA5'), output2('\xC5','\xBA'), + output2('\xCB','\x9D'), output2('\xC5','\xBE'), + output2('\xC5','\xBC'), output2('\xC5','\x94'), + output2('\xC3','\x81'), output2('\xC3','\x82'), + output2('\xC4','\x82'), output2('\xC3','\x84'), + output2('\xC4','\xB9'), output2('\xC4','\x86'), + output2('\xC3','\x87'), output2('\xC4','\x8C'), + output2('\xC3','\x89'), output2('\xC4','\x98'), + output2('\xC3','\x8B'), output2('\xC4','\x9A'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC4','\x8E'), output2('\xC4','\x90'), + output2('\xC5','\x83'), output2('\xC5','\x87'), + output2('\xC3','\x93'), output2('\xC3','\x94'), + output2('\xC5','\x90'), output2('\xC3','\x96'), + output2('\xC3','\x97'), output2('\xC5','\x98'), + output2('\xC5','\xAE'), output2('\xC3','\x9A'), + output2('\xC5','\xB0'), output2('\xC3','\x9C'), + output2('\xC3','\x9D'), output2('\xC5','\xA2'), + output2('\xC3','\x9F'), output2('\xC5','\x95'), + output2('\xC3','\xA1'), output2('\xC3','\xA2'), + output2('\xC4','\x83'), output2('\xC3','\xA4'), + output2('\xC4','\xBA'), output2('\xC4','\x87'), + output2('\xC3','\xA7'), output2('\xC4','\x8D'), + output2('\xC3','\xA9'), output2('\xC4','\x99'), + output2('\xC3','\xAB'), output2('\xC4','\x9B'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC4','\x8F'), output2('\xC4','\x91'), + output2('\xC5','\x84'), output2('\xC5','\x88'), + output2('\xC3','\xB3'), output2('\xC3','\xB4'), + output2('\xC5','\x91'), output2('\xC3','\xB6'), + output2('\xC3','\xB7'), output2('\xC5','\x99'), + output2('\xC5','\xAF'), output2('\xC3','\xBA'), + output2('\xC5','\xB1'), output2('\xC3','\xBC'), + output2('\xC3','\xBD'), output2('\xC5','\xA3'), + output2('\xCB','\x99'), +}; +const BYTE_LOOKUP +from_ISO_8859_2 = { + from_ISO_8859_2_offsets, + from_ISO_8859_2_infos +}; + +static const unsigned char +to_ISO_8859_2_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, 33, -1, -1, 34, 35, -1, -1, -1, -1, 36, -1, -1, + 37, -1, -1, -1, 38, -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_2_C2_infos[40] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA4'), output1('\xA7'), output1('\xA8'), + output1('\xAD'), output1('\xB0'), output1('\xB4'), output1('\xB8'), +}; +static const BYTE_LOOKUP +to_ISO_8859_2_C2 = { + to_ISO_8859_2_C2_offsets, + to_ISO_8859_2_C2_infos +}; + +static const unsigned char +to_ISO_8859_2_C3_offsets[64] = { + -1, 0, 1, -1, 2, -1, -1, 3, -1, 4, -1, 5, -1, 6, 7, -1, + -1, -1, -1, 8, 9, -1, 10, 11, -1, -1, 12, -1, 13, 14, -1, 15, + -1, 16, 17, -1, 18, -1, -1, 19, -1, 20, -1, 21, -1, 22, 23, -1, + -1, -1, -1, 24, 25, -1, 26, 27, -1, -1, 28, -1, 29, 30, -1, -1, +}; +static const void* const +to_ISO_8859_2_C3_infos[31] = { + output1('\xC1'), output1('\xC2'), output1('\xC4'), output1('\xC7'), + output1('\xC9'), output1('\xCB'), output1('\xCD'), output1('\xCE'), + output1('\xD3'), output1('\xD4'), output1('\xD6'), output1('\xD7'), + output1('\xDA'), output1('\xDC'), output1('\xDD'), output1('\xDF'), + output1('\xE1'), output1('\xE2'), output1('\xE4'), output1('\xE7'), + output1('\xE9'), output1('\xEB'), output1('\xED'), output1('\xEE'), + output1('\xF3'), output1('\xF4'), output1('\xF6'), output1('\xF7'), + output1('\xFA'), output1('\xFC'), output1('\xFD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_2_C3 = { + to_ISO_8859_2_C3_offsets, + to_ISO_8859_2_C3_infos +}; + +static const unsigned char +to_ISO_8859_2_C4_offsets[64] = { + -1, -1, 0, 1, 2, 3, 4, 5, -1, -1, -1, -1, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, -1, -1, 12, 13, 14, 15, -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, 16, 17, -1, -1, 18, 19, -1, +}; +static const void* const +to_ISO_8859_2_C4_infos[20] = { + output1('\xC3'), output1('\xE3'), output1('\xA1'), output1('\xB1'), + output1('\xC6'), output1('\xE6'), output1('\xC8'), output1('\xE8'), + output1('\xCF'), output1('\xEF'), output1('\xD0'), output1('\xF0'), + output1('\xCA'), output1('\xEA'), output1('\xCC'), output1('\xEC'), + output1('\xC5'), output1('\xE5'), output1('\xA5'), output1('\xB5'), +}; +static const BYTE_LOOKUP +to_ISO_8859_2_C4 = { + to_ISO_8859_2_C4_offsets, + to_ISO_8859_2_C4_infos +}; + +static const unsigned char +to_ISO_8859_2_C5_offsets[64] = { + -1, 0, 1, 2, 3, -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, + 6, 7, -1, -1, 8, 9, -1, -1, 10, 11, 12, 13, -1, -1, 14, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + 24, 25, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, -1, +}; +static const void* const +to_ISO_8859_2_C5_infos[32] = { + output1('\xA3'), output1('\xB3'), output1('\xD1'), output1('\xF1'), + output1('\xD2'), output1('\xF2'), output1('\xD5'), output1('\xF5'), + output1('\xC0'), output1('\xE0'), output1('\xD8'), output1('\xF8'), + output1('\xA6'), output1('\xB6'), output1('\xAA'), output1('\xBA'), + output1('\xA9'), output1('\xB9'), output1('\xDE'), output1('\xFE'), + output1('\xAB'), output1('\xBB'), output1('\xD9'), output1('\xF9'), + output1('\xDB'), output1('\xFB'), output1('\xAC'), output1('\xBC'), + output1('\xAF'), output1('\xBF'), output1('\xAE'), output1('\xBE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_2_C5 = { + to_ISO_8859_2_C5_offsets, + to_ISO_8859_2_C5_infos +}; + +static const unsigned char +to_ISO_8859_2_CB_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, -1, 3, -1, 4, -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 void* const +to_ISO_8859_2_CB_infos[5] = { + output1('\xB7'), output1('\xA2'), output1('\xFF'), output1('\xB2'), + output1('\xBD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_2_CB = { + to_ISO_8859_2_CB_offsets, + to_ISO_8859_2_CB_infos +}; + +static const unsigned char +to_ISO_8859_2_offsets[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, 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, 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, 2, 3, 4, -1, -1, -1, -1, -1, 5, -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 void* const +to_ISO_8859_2_infos[6] = { + NOMAP, &to_ISO_8859_2_C2, &to_ISO_8859_2_C3, &to_ISO_8859_2_C4, + &to_ISO_8859_2_C5, &to_ISO_8859_2_CB, +}; +const BYTE_LOOKUP +to_ISO_8859_2 = { + to_ISO_8859_2_offsets, + to_ISO_8859_2_infos +}; + +static const unsigned char +from_ISO_8859_3_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, -1, 38, 39, 40, 41, 42, 43, 44, 45, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 61, + 62, 63, 64, -1, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, -1, 95, 96, 97, 98, 99,100,101,102,103,104,105,106, + -1,107,108,109,110,111,112,113, 114,115,116,117,118,119,120,121, +}; +static const void* const +from_ISO_8859_3_infos[122] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC4','\xA6'), output2('\xCB','\x98'), + output2('\xC2','\xA3'), output2('\xC2','\xA4'), + output2('\xC4','\xA4'), output2('\xC2','\xA7'), + output2('\xC2','\xA8'), output2('\xC4','\xB0'), + output2('\xC5','\x9E'), output2('\xC4','\x9E'), + output2('\xC4','\xB4'), output2('\xC2','\xAD'), + output2('\xC5','\xBB'), output2('\xC2','\xB0'), + output2('\xC4','\xA7'), output2('\xC2','\xB2'), + output2('\xC2','\xB3'), output2('\xC2','\xB4'), + output2('\xC2','\xB5'), output2('\xC4','\xA5'), + output2('\xC2','\xB7'), output2('\xC2','\xB8'), + output2('\xC4','\xB1'), output2('\xC5','\x9F'), + output2('\xC4','\x9F'), output2('\xC4','\xB5'), + output2('\xC2','\xBD'), output2('\xC5','\xBC'), + output2('\xC3','\x80'), output2('\xC3','\x81'), + output2('\xC3','\x82'), output2('\xC3','\x84'), + output2('\xC4','\x8A'), output2('\xC4','\x88'), + output2('\xC3','\x87'), output2('\xC3','\x88'), + output2('\xC3','\x89'), output2('\xC3','\x8A'), + output2('\xC3','\x8B'), output2('\xC3','\x8C'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC3','\x8F'), output2('\xC3','\x91'), + output2('\xC3','\x92'), output2('\xC3','\x93'), + output2('\xC3','\x94'), output2('\xC4','\xA0'), + output2('\xC3','\x96'), output2('\xC3','\x97'), + output2('\xC4','\x9C'), output2('\xC3','\x99'), + output2('\xC3','\x9A'), output2('\xC3','\x9B'), + output2('\xC3','\x9C'), output2('\xC5','\xAC'), + output2('\xC5','\x9C'), output2('\xC3','\x9F'), + output2('\xC3','\xA0'), output2('\xC3','\xA1'), + output2('\xC3','\xA2'), output2('\xC3','\xA4'), + output2('\xC4','\x8B'), output2('\xC4','\x89'), + output2('\xC3','\xA7'), output2('\xC3','\xA8'), + output2('\xC3','\xA9'), output2('\xC3','\xAA'), + output2('\xC3','\xAB'), output2('\xC3','\xAC'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC3','\xAF'), output2('\xC3','\xB1'), + output2('\xC3','\xB2'), output2('\xC3','\xB3'), + output2('\xC3','\xB4'), output2('\xC4','\xA1'), + output2('\xC3','\xB6'), output2('\xC3','\xB7'), + output2('\xC4','\x9D'), output2('\xC3','\xB9'), + output2('\xC3','\xBA'), output2('\xC3','\xBB'), + output2('\xC3','\xBC'), output2('\xC5','\xAD'), + output2('\xC5','\x9D'), output2('\xCB','\x99'), +}; +const BYTE_LOOKUP +from_ISO_8859_3 = { + from_ISO_8859_3_offsets, + from_ISO_8859_3_infos +}; + +static const unsigned char +to_ISO_8859_3_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, 33, 34, -1, -1, 35, 36, -1, -1, -1, -1, 37, -1, -1, + 38, -1, 39, 40, 41, 42, -1, 43, 44, -1, -1, -1, -1, 45, -1, -1, +}; +static const void* const +to_ISO_8859_3_C2_infos[46] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA3'), output1('\xA4'), output1('\xA7'), + output1('\xA8'), output1('\xAD'), output1('\xB0'), output1('\xB2'), + output1('\xB3'), output1('\xB4'), output1('\xB5'), output1('\xB7'), + output1('\xB8'), output1('\xBD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_3_C2 = { + to_ISO_8859_3_C2_offsets, + to_ISO_8859_3_C2_infos +}; + +static const unsigned char +to_ISO_8859_3_C3_offsets[64] = { + 0, 1, 2, -1, 3, -1, -1, 4, 5, 6, 7, 8, 9, 10, 11, 12, + -1, 13, 14, 15, 16, -1, 17, 18, -1, 19, 20, 21, 22, -1, -1, 23, + 24, 25, 26, -1, 27, -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, + -1, 37, 38, 39, 40, -1, 41, 42, -1, 43, 44, 45, 46, -1, -1, -1, +}; +static const void* const +to_ISO_8859_3_C3_infos[47] = { + output1('\xC0'), output1('\xC1'), output1('\xC2'), output1('\xC4'), + output1('\xC7'), output1('\xC8'), output1('\xC9'), output1('\xCA'), + output1('\xCB'), output1('\xCC'), output1('\xCD'), output1('\xCE'), + output1('\xCF'), output1('\xD1'), output1('\xD2'), output1('\xD3'), + output1('\xD4'), output1('\xD6'), output1('\xD7'), output1('\xD9'), + output1('\xDA'), output1('\xDB'), output1('\xDC'), output1('\xDF'), + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE4'), + output1('\xE7'), output1('\xE8'), output1('\xE9'), output1('\xEA'), + output1('\xEB'), output1('\xEC'), output1('\xED'), output1('\xEE'), + output1('\xEF'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF6'), output1('\xF7'), output1('\xF9'), + output1('\xFA'), output1('\xFB'), output1('\xFC'), +}; +static const BYTE_LOOKUP +to_ISO_8859_3_C3 = { + to_ISO_8859_3_C3_offsets, + to_ISO_8859_3_C3_infos +}; + +static const unsigned char +to_ISO_8859_3_C4_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, 6, 7, + 8, 9, -1, -1, 10, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + 14, 15, -1, -1, 16, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_3_C4_infos[18] = { + output1('\xC6'), output1('\xE6'), output1('\xC5'), output1('\xE5'), + output1('\xD8'), output1('\xF8'), output1('\xAB'), output1('\xBB'), + output1('\xD5'), output1('\xF5'), output1('\xA6'), output1('\xB6'), + output1('\xA1'), output1('\xB1'), output1('\xA9'), output1('\xB9'), + output1('\xAC'), output1('\xBC'), +}; +static const BYTE_LOOKUP +to_ISO_8859_3_C4 = { + to_ISO_8859_3_C4_offsets, + to_ISO_8859_3_C4_infos +}; + +static const unsigned char +to_ISO_8859_3_C5_offsets[64] = { + -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, 0, 1, 2, 3, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, 7, -1, -1, -1, +}; +static const void* const +to_ISO_8859_3_C5_infos[8] = { + output1('\xDE'), output1('\xFE'), output1('\xAA'), output1('\xBA'), + output1('\xDD'), output1('\xFD'), output1('\xAF'), output1('\xBF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_3_C5 = { + to_ISO_8859_3_C5_offsets, + to_ISO_8859_3_C5_infos +}; + +static const unsigned char +to_ISO_8859_3_CB_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 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, +}; +static const void* const +to_ISO_8859_3_CB_infos[2] = { + output1('\xA2'), output1('\xFF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_3_CB = { + to_ISO_8859_3_CB_offsets, + to_ISO_8859_3_CB_infos +}; + +static const unsigned char +to_ISO_8859_3_offsets[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, 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, 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, 2, 3, 4, -1, -1, -1, -1, -1, 5, -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 void* const +to_ISO_8859_3_infos[6] = { + NOMAP, &to_ISO_8859_3_C2, &to_ISO_8859_3_C3, &to_ISO_8859_3_C4, + &to_ISO_8859_3_C5, &to_ISO_8859_3_CB, +}; +const BYTE_LOOKUP +to_ISO_8859_3 = { + to_ISO_8859_3_offsets, + to_ISO_8859_3_infos +}; + +static const unsigned char +from_ISO_8859_4_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_4_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC4','\x84'), output2('\xC4','\xB8'), + output2('\xC5','\x96'), output2('\xC2','\xA4'), + output2('\xC4','\xA8'), output2('\xC4','\xBB'), + output2('\xC2','\xA7'), output2('\xC2','\xA8'), + output2('\xC5','\xA0'), output2('\xC4','\x92'), + output2('\xC4','\xA2'), output2('\xC5','\xA6'), + output2('\xC2','\xAD'), output2('\xC5','\xBD'), + output2('\xC2','\xAF'), output2('\xC2','\xB0'), + output2('\xC4','\x85'), output2('\xCB','\x9B'), + output2('\xC5','\x97'), output2('\xC2','\xB4'), + output2('\xC4','\xA9'), output2('\xC4','\xBC'), + output2('\xCB','\x87'), output2('\xC2','\xB8'), + output2('\xC5','\xA1'), output2('\xC4','\x93'), + output2('\xC4','\xA3'), output2('\xC5','\xA7'), + output2('\xC5','\x8A'), output2('\xC5','\xBE'), + output2('\xC5','\x8B'), output2('\xC4','\x80'), + output2('\xC3','\x81'), output2('\xC3','\x82'), + output2('\xC3','\x83'), output2('\xC3','\x84'), + output2('\xC3','\x85'), output2('\xC3','\x86'), + output2('\xC4','\xAE'), output2('\xC4','\x8C'), + output2('\xC3','\x89'), output2('\xC4','\x98'), + output2('\xC3','\x8B'), output2('\xC4','\x96'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC4','\xAA'), output2('\xC4','\x90'), + output2('\xC5','\x85'), output2('\xC5','\x8C'), + output2('\xC4','\xB6'), output2('\xC3','\x94'), + output2('\xC3','\x95'), output2('\xC3','\x96'), + output2('\xC3','\x97'), output2('\xC3','\x98'), + output2('\xC5','\xB2'), output2('\xC3','\x9A'), + output2('\xC3','\x9B'), output2('\xC3','\x9C'), + output2('\xC5','\xA8'), output2('\xC5','\xAA'), + output2('\xC3','\x9F'), output2('\xC4','\x81'), + output2('\xC3','\xA1'), output2('\xC3','\xA2'), + output2('\xC3','\xA3'), output2('\xC3','\xA4'), + output2('\xC3','\xA5'), output2('\xC3','\xA6'), + output2('\xC4','\xAF'), output2('\xC4','\x8D'), + output2('\xC3','\xA9'), output2('\xC4','\x99'), + output2('\xC3','\xAB'), output2('\xC4','\x97'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC4','\xAB'), output2('\xC4','\x91'), + output2('\xC5','\x86'), output2('\xC5','\x8D'), + output2('\xC4','\xB7'), output2('\xC3','\xB4'), + output2('\xC3','\xB5'), output2('\xC3','\xB6'), + output2('\xC3','\xB7'), output2('\xC3','\xB8'), + output2('\xC5','\xB3'), output2('\xC3','\xBA'), + output2('\xC3','\xBB'), output2('\xC3','\xBC'), + output2('\xC5','\xA9'), output2('\xC5','\xAB'), + output2('\xCB','\x99'), +}; +const BYTE_LOOKUP +from_ISO_8859_4 = { + from_ISO_8859_4_offsets, + from_ISO_8859_4_infos +}; + +static const unsigned char +to_ISO_8859_4_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, 33, -1, -1, 34, 35, -1, -1, -1, -1, 36, -1, 37, + 38, -1, -1, -1, 39, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_4_C2_infos[41] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA4'), output1('\xA7'), output1('\xA8'), + output1('\xAD'), output1('\xAF'), output1('\xB0'), output1('\xB4'), + output1('\xB8'), +}; +static const BYTE_LOOKUP +to_ISO_8859_4_C2 = { + to_ISO_8859_4_C2_offsets, + to_ISO_8859_4_C2_infos +}; + +static const unsigned char +to_ISO_8859_4_C3_offsets[64] = { + -1, 0, 1, 2, 3, 4, 5, -1, -1, 6, -1, 7, -1, 8, 9, -1, + -1, -1, -1, -1, 10, 11, 12, 13, 14, -1, 15, 16, 17, -1, -1, 18, + -1, 19, 20, 21, 22, 23, 24, -1, -1, 25, -1, 26, -1, 27, 28, -1, + -1, -1, -1, -1, 29, 30, 31, 32, 33, -1, 34, 35, 36, -1, -1, -1, +}; +static const void* const +to_ISO_8859_4_C3_infos[37] = { + output1('\xC1'), output1('\xC2'), output1('\xC3'), output1('\xC4'), + output1('\xC5'), output1('\xC6'), output1('\xC9'), output1('\xCB'), + output1('\xCD'), output1('\xCE'), output1('\xD4'), output1('\xD5'), + output1('\xD6'), output1('\xD7'), output1('\xD8'), output1('\xDA'), + output1('\xDB'), output1('\xDC'), output1('\xDF'), output1('\xE1'), + output1('\xE2'), output1('\xE3'), output1('\xE4'), output1('\xE5'), + output1('\xE6'), output1('\xE9'), output1('\xEB'), output1('\xED'), + output1('\xEE'), output1('\xF4'), output1('\xF5'), output1('\xF6'), + output1('\xF7'), output1('\xF8'), output1('\xFA'), output1('\xFB'), + output1('\xFC'), +}; +static const BYTE_LOOKUP +to_ISO_8859_4_C3 = { + to_ISO_8859_4_C3_offsets, + to_ISO_8859_4_C3_infos +}; + +static const unsigned char +to_ISO_8859_4_C4_offsets[64] = { + 0, 1, -1, -1, 2, 3, -1, -1, -1, -1, -1, -1, 4, 5, -1, -1, + 6, 7, 8, 9, -1, -1, 10, 11, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, 14, 15, -1, -1, -1, -1, 16, 17, 18, 19, -1, -1, 20, 21, + -1, -1, -1, -1, -1, -1, 22, 23, 24, -1, -1, 25, 26, -1, -1, -1, +}; +static const void* const +to_ISO_8859_4_C4_infos[27] = { + output1('\xC0'), output1('\xE0'), output1('\xA1'), output1('\xB1'), + output1('\xC8'), output1('\xE8'), output1('\xD0'), output1('\xF0'), + output1('\xAA'), output1('\xBA'), output1('\xCC'), output1('\xEC'), + output1('\xCA'), output1('\xEA'), output1('\xAB'), output1('\xBB'), + output1('\xA5'), output1('\xB5'), output1('\xCF'), output1('\xEF'), + output1('\xC7'), output1('\xE7'), output1('\xD3'), output1('\xF3'), + output1('\xA2'), output1('\xA6'), output1('\xB6'), +}; +static const BYTE_LOOKUP +to_ISO_8859_4_C4 = { + to_ISO_8859_4_C4_offsets, + to_ISO_8859_4_C4_infos +}; + +static const unsigned char +to_ISO_8859_4_C5_offsets[64] = { + -1, -1, -1, -1, -1, 0, 1, -1, -1, -1, 2, 3, 4, 5, -1, -1, + -1, -1, -1, -1, -1, -1, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, + 8, 9, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, + -1, -1, 16, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 19, -1, +}; +static const void* const +to_ISO_8859_4_C5_infos[20] = { + output1('\xD1'), output1('\xF1'), output1('\xBD'), output1('\xBF'), + output1('\xD2'), output1('\xF2'), output1('\xA3'), output1('\xB3'), + output1('\xA9'), output1('\xB9'), output1('\xAC'), output1('\xBC'), + output1('\xDD'), output1('\xFD'), output1('\xDE'), output1('\xFE'), + output1('\xD9'), output1('\xF9'), output1('\xAE'), output1('\xBE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_4_C5 = { + to_ISO_8859_4_C5_offsets, + to_ISO_8859_4_C5_infos +}; + +static const unsigned char +to_ISO_8859_4_CB_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 2, -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 void* const +to_ISO_8859_4_CB_infos[3] = { + output1('\xB7'), output1('\xFF'), output1('\xB2'), +}; +static const BYTE_LOOKUP +to_ISO_8859_4_CB = { + to_ISO_8859_4_CB_offsets, + to_ISO_8859_4_CB_infos +}; + +static const unsigned char +to_ISO_8859_4_offsets[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, 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, 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, 2, 3, 4, -1, -1, -1, -1, -1, 5, -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 void* const +to_ISO_8859_4_infos[6] = { + NOMAP, &to_ISO_8859_4_C2, &to_ISO_8859_4_C3, &to_ISO_8859_4_C4, + &to_ISO_8859_4_C5, &to_ISO_8859_4_CB, +}; +const BYTE_LOOKUP +to_ISO_8859_4 = { + to_ISO_8859_4_offsets, + to_ISO_8859_4_infos +}; + +static const unsigned char +from_ISO_8859_5_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_5_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xD0','\x81'), output2('\xD0','\x82'), + output2('\xD0','\x83'), output2('\xD0','\x84'), + output2('\xD0','\x85'), output2('\xD0','\x86'), + output2('\xD0','\x87'), output2('\xD0','\x88'), + output2('\xD0','\x89'), output2('\xD0','\x8A'), + output2('\xD0','\x8B'), output2('\xD0','\x8C'), + output2('\xC2','\xAD'), output2('\xD0','\x8E'), + output2('\xD0','\x8F'), output2('\xD0','\x90'), + output2('\xD0','\x91'), output2('\xD0','\x92'), + output2('\xD0','\x93'), output2('\xD0','\x94'), + output2('\xD0','\x95'), output2('\xD0','\x96'), + output2('\xD0','\x97'), output2('\xD0','\x98'), + output2('\xD0','\x99'), output2('\xD0','\x9A'), + output2('\xD0','\x9B'), output2('\xD0','\x9C'), + output2('\xD0','\x9D'), output2('\xD0','\x9E'), + output2('\xD0','\x9F'), output2('\xD0','\xA0'), + output2('\xD0','\xA1'), output2('\xD0','\xA2'), + output2('\xD0','\xA3'), output2('\xD0','\xA4'), + output2('\xD0','\xA5'), output2('\xD0','\xA6'), + output2('\xD0','\xA7'), output2('\xD0','\xA8'), + output2('\xD0','\xA9'), output2('\xD0','\xAA'), + output2('\xD0','\xAB'), output2('\xD0','\xAC'), + output2('\xD0','\xAD'), output2('\xD0','\xAE'), + output2('\xD0','\xAF'), output2('\xD0','\xB0'), + output2('\xD0','\xB1'), output2('\xD0','\xB2'), + output2('\xD0','\xB3'), output2('\xD0','\xB4'), + output2('\xD0','\xB5'), output2('\xD0','\xB6'), + output2('\xD0','\xB7'), output2('\xD0','\xB8'), + output2('\xD0','\xB9'), output2('\xD0','\xBA'), + output2('\xD0','\xBB'), output2('\xD0','\xBC'), + output2('\xD0','\xBD'), output2('\xD0','\xBE'), + output2('\xD0','\xBF'), output2('\xD1','\x80'), + output2('\xD1','\x81'), output2('\xD1','\x82'), + output2('\xD1','\x83'), output2('\xD1','\x84'), + output2('\xD1','\x85'), output2('\xD1','\x86'), + output2('\xD1','\x87'), output2('\xD1','\x88'), + output2('\xD1','\x89'), output2('\xD1','\x8A'), + output2('\xD1','\x8B'), output2('\xD1','\x8C'), + output2('\xD1','\x8D'), output2('\xD1','\x8E'), + output2('\xD1','\x8F'), output3('\xE2','\x84','\x96'), + output2('\xD1','\x91'), output2('\xD1','\x92'), + output2('\xD1','\x93'), output2('\xD1','\x94'), + output2('\xD1','\x95'), output2('\xD1','\x96'), + output2('\xD1','\x97'), output2('\xD1','\x98'), + output2('\xD1','\x99'), output2('\xD1','\x9A'), + output2('\xD1','\x9B'), output2('\xD1','\x9C'), + output2('\xC2','\xA7'), output2('\xD1','\x9E'), + output2('\xD1','\x9F'), +}; +const BYTE_LOOKUP +from_ISO_8859_5 = { + from_ISO_8859_5_offsets, + from_ISO_8859_5_infos +}; + +static const unsigned char +to_ISO_8859_5_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, 34, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_5_C2_infos[35] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xFD'), output1('\xAD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_5_C2 = { + to_ISO_8859_5_C2_offsets, + to_ISO_8859_5_C2_infos +}; + +static const unsigned char +to_ISO_8859_5_D0_offsets[64] = { + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, +}; +static const void* const +to_ISO_8859_5_D0_infos[62] = { + output1('\xA1'), output1('\xA2'), output1('\xA3'), output1('\xA4'), + output1('\xA5'), output1('\xA6'), output1('\xA7'), output1('\xA8'), + output1('\xA9'), output1('\xAA'), output1('\xAB'), output1('\xAC'), + output1('\xAE'), output1('\xAF'), output1('\xB0'), output1('\xB1'), + output1('\xB2'), output1('\xB3'), output1('\xB4'), output1('\xB5'), + output1('\xB6'), output1('\xB7'), output1('\xB8'), output1('\xB9'), + output1('\xBA'), output1('\xBB'), output1('\xBC'), output1('\xBD'), + output1('\xBE'), output1('\xBF'), output1('\xC0'), output1('\xC1'), + output1('\xC2'), output1('\xC3'), output1('\xC4'), output1('\xC5'), + output1('\xC6'), output1('\xC7'), output1('\xC8'), output1('\xC9'), + output1('\xCA'), output1('\xCB'), output1('\xCC'), output1('\xCD'), + output1('\xCE'), output1('\xCF'), output1('\xD0'), output1('\xD1'), + output1('\xD2'), output1('\xD3'), output1('\xD4'), output1('\xD5'), + output1('\xD6'), output1('\xD7'), output1('\xD8'), output1('\xD9'), + output1('\xDA'), output1('\xDB'), output1('\xDC'), output1('\xDD'), + output1('\xDE'), output1('\xDF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_5_D0 = { + to_ISO_8859_5_D0_offsets, + to_ISO_8859_5_D0_infos +}; + +static const unsigned char +to_ISO_8859_5_D1_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 28, 29, + -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 void* const +to_ISO_8859_5_D1_infos[30] = { + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE3'), + output1('\xE4'), output1('\xE5'), output1('\xE6'), output1('\xE7'), + output1('\xE8'), output1('\xE9'), output1('\xEA'), output1('\xEB'), + output1('\xEC'), output1('\xED'), output1('\xEE'), output1('\xEF'), + output1('\xF1'), output1('\xF2'), output1('\xF3'), output1('\xF4'), + output1('\xF5'), output1('\xF6'), output1('\xF7'), output1('\xF8'), + output1('\xF9'), output1('\xFA'), output1('\xFB'), output1('\xFC'), + output1('\xFE'), output1('\xFF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_5_D1 = { + to_ISO_8859_5_D1_offsets, + to_ISO_8859_5_D1_infos +}; + +static const unsigned char +to_ISO_8859_5_E2_84_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 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, +}; +static const void* const +to_ISO_8859_5_E2_84_infos[1] = { + output1('\xF0'), +}; +static const BYTE_LOOKUP +to_ISO_8859_5_E2_84 = { + to_ISO_8859_5_E2_84_offsets, + to_ISO_8859_5_E2_84_infos +}; + +static const unsigned char +to_ISO_8859_5_E2_offsets[64] = { + -1, -1, -1, -1, 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, +}; +static const void* const +to_ISO_8859_5_E2_infos[1] = { + &to_ISO_8859_5_E2_84, +}; +static const BYTE_LOOKUP +to_ISO_8859_5_E2 = { + to_ISO_8859_5_E2_offsets, + to_ISO_8859_5_E2_infos +}; + +static const unsigned char +to_ISO_8859_5_offsets[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, 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, 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, + 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4, -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 void* const +to_ISO_8859_5_infos[5] = { + NOMAP, &to_ISO_8859_5_C2, &to_ISO_8859_5_D0, &to_ISO_8859_5_D1, + &to_ISO_8859_5_E2, +}; +const BYTE_LOOKUP +to_ISO_8859_5 = { + to_ISO_8859_5_offsets, + to_ISO_8859_5_infos +}; + +static const unsigned char +from_ISO_8859_6_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, -1, -1, 34, -1, -1, -1, -1, -1, -1, -1, 35, 36, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, 38, + -1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, -1, -1, -1, -1, -1, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +from_ISO_8859_6_infos[84] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC2','\xA4'), output2('\xD8','\x8C'), + output2('\xC2','\xAD'), output2('\xD8','\x9B'), + output2('\xD8','\x9F'), output2('\xD8','\xA1'), + output2('\xD8','\xA2'), output2('\xD8','\xA3'), + output2('\xD8','\xA4'), output2('\xD8','\xA5'), + output2('\xD8','\xA6'), output2('\xD8','\xA7'), + output2('\xD8','\xA8'), output2('\xD8','\xA9'), + output2('\xD8','\xAA'), output2('\xD8','\xAB'), + output2('\xD8','\xAC'), output2('\xD8','\xAD'), + output2('\xD8','\xAE'), output2('\xD8','\xAF'), + output2('\xD8','\xB0'), output2('\xD8','\xB1'), + output2('\xD8','\xB2'), output2('\xD8','\xB3'), + output2('\xD8','\xB4'), output2('\xD8','\xB5'), + output2('\xD8','\xB6'), output2('\xD8','\xB7'), + output2('\xD8','\xB8'), output2('\xD8','\xB9'), + output2('\xD8','\xBA'), output2('\xD9','\x80'), + output2('\xD9','\x81'), output2('\xD9','\x82'), + output2('\xD9','\x83'), output2('\xD9','\x84'), + output2('\xD9','\x85'), output2('\xD9','\x86'), + output2('\xD9','\x87'), output2('\xD9','\x88'), + output2('\xD9','\x89'), output2('\xD9','\x8A'), + output2('\xD9','\x8B'), output2('\xD9','\x8C'), + output2('\xD9','\x8D'), output2('\xD9','\x8E'), + output2('\xD9','\x8F'), output2('\xD9','\x90'), + output2('\xD9','\x91'), output2('\xD9','\x92'), +}; +const BYTE_LOOKUP +from_ISO_8859_6 = { + from_ISO_8859_6_offsets, + from_ISO_8859_6_infos +}; + +static const unsigned char +to_ISO_8859_6_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, 34, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_6_C2_infos[35] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA4'), output1('\xAD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_6_C2 = { + to_ISO_8859_6_C2_offsets, + to_ISO_8859_6_C2_infos +}; + +static const unsigned char +to_ISO_8859_6_D8_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_6_D8_infos[29] = { + output1('\xAC'), output1('\xBB'), output1('\xBF'), output1('\xC1'), + output1('\xC2'), output1('\xC3'), output1('\xC4'), output1('\xC5'), + output1('\xC6'), output1('\xC7'), output1('\xC8'), output1('\xC9'), + output1('\xCA'), output1('\xCB'), output1('\xCC'), output1('\xCD'), + output1('\xCE'), output1('\xCF'), output1('\xD0'), output1('\xD1'), + output1('\xD2'), output1('\xD3'), output1('\xD4'), output1('\xD5'), + output1('\xD6'), output1('\xD7'), output1('\xD8'), output1('\xD9'), + output1('\xDA'), +}; +static const BYTE_LOOKUP +to_ISO_8859_6_D8 = { + to_ISO_8859_6_D8_offsets, + to_ISO_8859_6_D8_infos +}; + +static const unsigned char +to_ISO_8859_6_D9_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, -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 void* const +to_ISO_8859_6_D9_infos[19] = { + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE3'), + output1('\xE4'), output1('\xE5'), output1('\xE6'), output1('\xE7'), + output1('\xE8'), output1('\xE9'), output1('\xEA'), output1('\xEB'), + output1('\xEC'), output1('\xED'), output1('\xEE'), output1('\xEF'), + output1('\xF0'), output1('\xF1'), output1('\xF2'), +}; +static const BYTE_LOOKUP +to_ISO_8859_6_D9 = { + to_ISO_8859_6_D9_offsets, + to_ISO_8859_6_D9_infos +}; + +static const unsigned char +to_ISO_8859_6_offsets[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, 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, 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, 2, 3, -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 void* const +to_ISO_8859_6_infos[4] = { + NOMAP, &to_ISO_8859_6_C2, &to_ISO_8859_6_D8, &to_ISO_8859_6_D9, +}; +const BYTE_LOOKUP +to_ISO_8859_6 = { + to_ISO_8859_6_offsets, + to_ISO_8859_6_infos +}; + +static const unsigned char +from_ISO_8859_7_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, -1, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, -1, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99,100,101,102, 103,104,105,106,107,108,109,110, + 111,112,113,114,115,116,117,118, 119,120,121,122,123,124,125, -1, +}; +static const void* const +from_ISO_8859_7_infos[126] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output3('\xE2','\x80','\x98'), output3('\xE2','\x80','\x99'), + output2('\xC2','\xA3'), output3('\xE2','\x82','\xAC'), + output3('\xE2','\x82','\xAF'), output2('\xC2','\xA6'), + output2('\xC2','\xA7'), output2('\xC2','\xA8'), + output2('\xC2','\xA9'), output2('\xCD','\xBA'), + output2('\xC2','\xAB'), output2('\xC2','\xAC'), + output2('\xC2','\xAD'), output3('\xE2','\x80','\x95'), + output2('\xC2','\xB0'), output2('\xC2','\xB1'), + output2('\xC2','\xB2'), output2('\xC2','\xB3'), + output2('\xCE','\x84'), output2('\xCE','\x85'), + output2('\xCE','\x86'), output2('\xC2','\xB7'), + output2('\xCE','\x88'), output2('\xCE','\x89'), + output2('\xCE','\x8A'), output2('\xC2','\xBB'), + output2('\xCE','\x8C'), output2('\xC2','\xBD'), + output2('\xCE','\x8E'), output2('\xCE','\x8F'), + output2('\xCE','\x90'), output2('\xCE','\x91'), + output2('\xCE','\x92'), output2('\xCE','\x93'), + output2('\xCE','\x94'), output2('\xCE','\x95'), + output2('\xCE','\x96'), output2('\xCE','\x97'), + output2('\xCE','\x98'), output2('\xCE','\x99'), + output2('\xCE','\x9A'), output2('\xCE','\x9B'), + output2('\xCE','\x9C'), output2('\xCE','\x9D'), + output2('\xCE','\x9E'), output2('\xCE','\x9F'), + output2('\xCE','\xA0'), output2('\xCE','\xA1'), + output2('\xCE','\xA3'), output2('\xCE','\xA4'), + output2('\xCE','\xA5'), output2('\xCE','\xA6'), + output2('\xCE','\xA7'), output2('\xCE','\xA8'), + output2('\xCE','\xA9'), output2('\xCE','\xAA'), + output2('\xCE','\xAB'), output2('\xCE','\xAC'), + output2('\xCE','\xAD'), output2('\xCE','\xAE'), + output2('\xCE','\xAF'), output2('\xCE','\xB0'), + output2('\xCE','\xB1'), output2('\xCE','\xB2'), + output2('\xCE','\xB3'), output2('\xCE','\xB4'), + output2('\xCE','\xB5'), output2('\xCE','\xB6'), + output2('\xCE','\xB7'), output2('\xCE','\xB8'), + output2('\xCE','\xB9'), output2('\xCE','\xBA'), + output2('\xCE','\xBB'), output2('\xCE','\xBC'), + output2('\xCE','\xBD'), output2('\xCE','\xBE'), + output2('\xCE','\xBF'), output2('\xCF','\x80'), + output2('\xCF','\x81'), output2('\xCF','\x82'), + output2('\xCF','\x83'), output2('\xCF','\x84'), + output2('\xCF','\x85'), output2('\xCF','\x86'), + output2('\xCF','\x87'), output2('\xCF','\x88'), + output2('\xCF','\x89'), output2('\xCF','\x8A'), + output2('\xCF','\x8B'), output2('\xCF','\x8C'), + output2('\xCF','\x8D'), output2('\xCF','\x8E'), +}; +const BYTE_LOOKUP +from_ISO_8859_7 = { + from_ISO_8859_7_offsets, + from_ISO_8859_7_infos +}; + +static const unsigned char +to_ISO_8859_7_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, 33, -1, -1, 34, 35, 36, 37, -1, 38, 39, 40, -1, -1, + 41, 42, 43, 44, -1, -1, -1, 45, -1, -1, -1, 46, -1, 47, -1, -1, +}; +static const void* const +to_ISO_8859_7_C2_infos[48] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA3'), output1('\xA6'), output1('\xA7'), + output1('\xA8'), output1('\xA9'), output1('\xAB'), output1('\xAC'), + output1('\xAD'), output1('\xB0'), output1('\xB1'), output1('\xB2'), + output1('\xB3'), output1('\xB7'), output1('\xBB'), output1('\xBD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_7_C2 = { + to_ISO_8859_7_C2_offsets, + to_ISO_8859_7_C2_infos +}; + +static const unsigned char +to_ISO_8859_7_CD_offsets[64] = { + -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, 0, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_7_CD_infos[1] = { + output1('\xAA'), +}; +static const BYTE_LOOKUP +to_ISO_8859_7_CD = { + to_ISO_8859_7_CD_offsets, + to_ISO_8859_7_CD_infos +}; + +static const unsigned char +to_ISO_8859_7_CE_offsets[64] = { + -1, -1, -1, -1, 0, 1, 2, -1, 3, 4, 5, -1, 6, -1, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, +}; +static const void* const +to_ISO_8859_7_CE_infos[56] = { + output1('\xB4'), output1('\xB5'), output1('\xB6'), output1('\xB8'), + output1('\xB9'), output1('\xBA'), output1('\xBC'), output1('\xBE'), + output1('\xBF'), output1('\xC0'), output1('\xC1'), output1('\xC2'), + output1('\xC3'), output1('\xC4'), output1('\xC5'), output1('\xC6'), + output1('\xC7'), output1('\xC8'), output1('\xC9'), output1('\xCA'), + output1('\xCB'), output1('\xCC'), output1('\xCD'), output1('\xCE'), + output1('\xCF'), output1('\xD0'), output1('\xD1'), output1('\xD3'), + output1('\xD4'), output1('\xD5'), output1('\xD6'), output1('\xD7'), + output1('\xD8'), output1('\xD9'), output1('\xDA'), output1('\xDB'), + output1('\xDC'), output1('\xDD'), output1('\xDE'), output1('\xDF'), + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE3'), + output1('\xE4'), output1('\xE5'), output1('\xE6'), output1('\xE7'), + output1('\xE8'), output1('\xE9'), output1('\xEA'), output1('\xEB'), + output1('\xEC'), output1('\xED'), output1('\xEE'), output1('\xEF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_7_CE = { + to_ISO_8859_7_CE_offsets, + to_ISO_8859_7_CE_infos +}; + +static const unsigned char +to_ISO_8859_7_CF_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -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 void* const +to_ISO_8859_7_CF_infos[15] = { + output1('\xF0'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF7'), + output1('\xF8'), output1('\xF9'), output1('\xFA'), output1('\xFB'), + output1('\xFC'), output1('\xFD'), output1('\xFE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_7_CF = { + to_ISO_8859_7_CF_offsets, + to_ISO_8859_7_CF_infos +}; + +static const unsigned char +to_ISO_8859_7_E2_80_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, 1, 2, -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 void* const +to_ISO_8859_7_E2_80_infos[3] = { + output1('\xAF'), output1('\xA1'), output1('\xA2'), +}; +static const BYTE_LOOKUP +to_ISO_8859_7_E2_80 = { + to_ISO_8859_7_E2_80_offsets, + to_ISO_8859_7_E2_80_infos +}; + +static const unsigned char +to_ISO_8859_7_E2_82_offsets[64] = { + -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, 0, -1, -1, 1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_7_E2_82_infos[2] = { + output1('\xA4'), output1('\xA5'), +}; +static const BYTE_LOOKUP +to_ISO_8859_7_E2_82 = { + to_ISO_8859_7_E2_82_offsets, + to_ISO_8859_7_E2_82_infos +}; + +static const unsigned char +to_ISO_8859_7_E2_offsets[64] = { + 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, +}; +static const void* const +to_ISO_8859_7_E2_infos[2] = { + &to_ISO_8859_7_E2_80, &to_ISO_8859_7_E2_82, +}; +static const BYTE_LOOKUP +to_ISO_8859_7_E2 = { + to_ISO_8859_7_E2_offsets, + to_ISO_8859_7_E2_infos +}; + +static const unsigned char +to_ISO_8859_7_offsets[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, 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, 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, 2, 3, 4, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5, -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 void* const +to_ISO_8859_7_infos[6] = { + NOMAP, &to_ISO_8859_7_C2, &to_ISO_8859_7_CD, &to_ISO_8859_7_CE, + &to_ISO_8859_7_CF, &to_ISO_8859_7_E2, +}; +const BYTE_LOOKUP +to_ISO_8859_7 = { + to_ISO_8859_7_offsets, + to_ISO_8859_7_infos +}; + +static const unsigned char +from_ISO_8859_8_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -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, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, -1, -1, 91, 92, -1, +}; +static const void* const +from_ISO_8859_8_infos[93] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC2','\xA2'), output2('\xC2','\xA3'), + output2('\xC2','\xA4'), output2('\xC2','\xA5'), + output2('\xC2','\xA6'), output2('\xC2','\xA7'), + output2('\xC2','\xA8'), output2('\xC2','\xA9'), + output2('\xC3','\x97'), output2('\xC2','\xAB'), + output2('\xC2','\xAC'), output2('\xC2','\xAD'), + output2('\xC2','\xAE'), output2('\xC2','\xAF'), + output2('\xC2','\xB0'), output2('\xC2','\xB1'), + output2('\xC2','\xB2'), output2('\xC2','\xB3'), + output2('\xC2','\xB4'), output2('\xC2','\xB5'), + output2('\xC2','\xB6'), output2('\xC2','\xB7'), + output2('\xC2','\xB8'), output2('\xC2','\xB9'), + output2('\xC3','\xB7'), output2('\xC2','\xBB'), + output2('\xC2','\xBC'), output2('\xC2','\xBD'), + output2('\xC2','\xBE'), output3('\xE2','\x80','\x97'), + output2('\xD7','\x90'), output2('\xD7','\x91'), + output2('\xD7','\x92'), output2('\xD7','\x93'), + output2('\xD7','\x94'), output2('\xD7','\x95'), + output2('\xD7','\x96'), output2('\xD7','\x97'), + output2('\xD7','\x98'), output2('\xD7','\x99'), + output2('\xD7','\x9A'), output2('\xD7','\x9B'), + output2('\xD7','\x9C'), output2('\xD7','\x9D'), + output2('\xD7','\x9E'), output2('\xD7','\x9F'), + output2('\xD7','\xA0'), output2('\xD7','\xA1'), + output2('\xD7','\xA2'), output2('\xD7','\xA3'), + output2('\xD7','\xA4'), output2('\xD7','\xA5'), + output2('\xD7','\xA6'), output2('\xD7','\xA7'), + output2('\xD7','\xA8'), output2('\xD7','\xA9'), + output2('\xD7','\xAA'), output3('\xE2','\x80','\x8E'), + output3('\xE2','\x80','\x8F'), +}; +const BYTE_LOOKUP +from_ISO_8859_8 = { + from_ISO_8859_8_offsets, + from_ISO_8859_8_infos +}; + +static const unsigned char +to_ISO_8859_8_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, 56, 57, 58, 59, -1, +}; +static const void* const +to_ISO_8859_8_C2_infos[60] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA2'), output1('\xA3'), output1('\xA4'), + output1('\xA5'), output1('\xA6'), output1('\xA7'), output1('\xA8'), + output1('\xA9'), output1('\xAB'), output1('\xAC'), output1('\xAD'), + output1('\xAE'), output1('\xAF'), output1('\xB0'), output1('\xB1'), + output1('\xB2'), output1('\xB3'), output1('\xB4'), output1('\xB5'), + output1('\xB6'), output1('\xB7'), output1('\xB8'), output1('\xB9'), + output1('\xBB'), output1('\xBC'), output1('\xBD'), output1('\xBE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_8_C2 = { + to_ISO_8859_8_C2_offsets, + to_ISO_8859_8_C2_infos +}; + +static const unsigned char +to_ISO_8859_8_C3_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 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, +}; +static const void* const +to_ISO_8859_8_C3_infos[2] = { + output1('\xAA'), output1('\xBA'), +}; +static const BYTE_LOOKUP +to_ISO_8859_8_C3 = { + to_ISO_8859_8_C3_offsets, + to_ISO_8859_8_C3_infos +}; + +static const unsigned char +to_ISO_8859_8_D7_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_8_D7_infos[27] = { + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE3'), + output1('\xE4'), output1('\xE5'), output1('\xE6'), output1('\xE7'), + output1('\xE8'), output1('\xE9'), output1('\xEA'), output1('\xEB'), + output1('\xEC'), output1('\xED'), output1('\xEE'), output1('\xEF'), + output1('\xF0'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF7'), + output1('\xF8'), output1('\xF9'), output1('\xFA'), +}; +static const BYTE_LOOKUP +to_ISO_8859_8_D7 = { + to_ISO_8859_8_D7_offsets, + to_ISO_8859_8_D7_infos +}; + +static const unsigned char +to_ISO_8859_8_E2_80_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, + -1, -1, -1, -1, -1, -1, -1, 2, -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 void* const +to_ISO_8859_8_E2_80_infos[3] = { + output1('\xFD'), output1('\xFE'), output1('\xDF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_8_E2_80 = { + to_ISO_8859_8_E2_80_offsets, + to_ISO_8859_8_E2_80_infos +}; + +static const unsigned char +to_ISO_8859_8_E2_offsets[64] = { + 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, +}; +static const void* const +to_ISO_8859_8_E2_infos[1] = { + &to_ISO_8859_8_E2_80, +}; +static const BYTE_LOOKUP +to_ISO_8859_8_E2 = { + to_ISO_8859_8_E2_offsets, + to_ISO_8859_8_E2_infos +}; + +static const unsigned char +to_ISO_8859_8_offsets[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, 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, 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, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4, -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 void* const +to_ISO_8859_8_infos[5] = { + NOMAP, &to_ISO_8859_8_C2, &to_ISO_8859_8_C3, &to_ISO_8859_8_D7, + &to_ISO_8859_8_E2, +}; +const BYTE_LOOKUP +to_ISO_8859_8 = { + to_ISO_8859_8_offsets, + to_ISO_8859_8_infos +}; + +static const unsigned char +from_ISO_8859_9_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_9_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC2','\xA1'), output2('\xC2','\xA2'), + output2('\xC2','\xA3'), output2('\xC2','\xA4'), + output2('\xC2','\xA5'), output2('\xC2','\xA6'), + output2('\xC2','\xA7'), output2('\xC2','\xA8'), + output2('\xC2','\xA9'), output2('\xC2','\xAA'), + output2('\xC2','\xAB'), output2('\xC2','\xAC'), + output2('\xC2','\xAD'), output2('\xC2','\xAE'), + output2('\xC2','\xAF'), output2('\xC2','\xB0'), + output2('\xC2','\xB1'), output2('\xC2','\xB2'), + output2('\xC2','\xB3'), output2('\xC2','\xB4'), + output2('\xC2','\xB5'), output2('\xC2','\xB6'), + output2('\xC2','\xB7'), output2('\xC2','\xB8'), + output2('\xC2','\xB9'), output2('\xC2','\xBA'), + output2('\xC2','\xBB'), output2('\xC2','\xBC'), + output2('\xC2','\xBD'), output2('\xC2','\xBE'), + output2('\xC2','\xBF'), output2('\xC3','\x80'), + output2('\xC3','\x81'), output2('\xC3','\x82'), + output2('\xC3','\x83'), output2('\xC3','\x84'), + output2('\xC3','\x85'), output2('\xC3','\x86'), + output2('\xC3','\x87'), output2('\xC3','\x88'), + output2('\xC3','\x89'), output2('\xC3','\x8A'), + output2('\xC3','\x8B'), output2('\xC3','\x8C'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC3','\x8F'), output2('\xC4','\x9E'), + output2('\xC3','\x91'), output2('\xC3','\x92'), + output2('\xC3','\x93'), output2('\xC3','\x94'), + output2('\xC3','\x95'), output2('\xC3','\x96'), + output2('\xC3','\x97'), output2('\xC3','\x98'), + output2('\xC3','\x99'), output2('\xC3','\x9A'), + output2('\xC3','\x9B'), output2('\xC3','\x9C'), + output2('\xC4','\xB0'), output2('\xC5','\x9E'), + output2('\xC3','\x9F'), output2('\xC3','\xA0'), + output2('\xC3','\xA1'), output2('\xC3','\xA2'), + output2('\xC3','\xA3'), output2('\xC3','\xA4'), + output2('\xC3','\xA5'), output2('\xC3','\xA6'), + output2('\xC3','\xA7'), output2('\xC3','\xA8'), + output2('\xC3','\xA9'), output2('\xC3','\xAA'), + output2('\xC3','\xAB'), output2('\xC3','\xAC'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC3','\xAF'), output2('\xC4','\x9F'), + output2('\xC3','\xB1'), output2('\xC3','\xB2'), + output2('\xC3','\xB3'), output2('\xC3','\xB4'), + output2('\xC3','\xB5'), output2('\xC3','\xB6'), + output2('\xC3','\xB7'), output2('\xC3','\xB8'), + output2('\xC3','\xB9'), output2('\xC3','\xBA'), + output2('\xC3','\xBB'), output2('\xC3','\xBC'), + output2('\xC4','\xB1'), output2('\xC5','\x9F'), + output2('\xC3','\xBF'), +}; +const BYTE_LOOKUP +from_ISO_8859_9 = { + from_ISO_8859_9_offsets, + from_ISO_8859_9_infos +}; + +static const unsigned char +to_ISO_8859_9_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, +}; +static const void* const +to_ISO_8859_9_C2_infos[64] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA1'), output1('\xA2'), output1('\xA3'), + output1('\xA4'), output1('\xA5'), output1('\xA6'), output1('\xA7'), + output1('\xA8'), output1('\xA9'), output1('\xAA'), output1('\xAB'), + output1('\xAC'), output1('\xAD'), output1('\xAE'), output1('\xAF'), + output1('\xB0'), output1('\xB1'), output1('\xB2'), output1('\xB3'), + output1('\xB4'), output1('\xB5'), output1('\xB6'), output1('\xB7'), + output1('\xB8'), output1('\xB9'), output1('\xBA'), output1('\xBB'), + output1('\xBC'), output1('\xBD'), output1('\xBE'), output1('\xBF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_9_C2 = { + to_ISO_8859_9_C2_offsets, + to_ISO_8859_9_C2_infos +}; + +static const unsigned char +to_ISO_8859_9_C3_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, -1, 57, +}; +static const void* const +to_ISO_8859_9_C3_infos[58] = { + output1('\xC0'), output1('\xC1'), output1('\xC2'), output1('\xC3'), + output1('\xC4'), output1('\xC5'), output1('\xC6'), output1('\xC7'), + output1('\xC8'), output1('\xC9'), output1('\xCA'), output1('\xCB'), + output1('\xCC'), output1('\xCD'), output1('\xCE'), output1('\xCF'), + output1('\xD1'), output1('\xD2'), output1('\xD3'), output1('\xD4'), + output1('\xD5'), output1('\xD6'), output1('\xD7'), output1('\xD8'), + output1('\xD9'), output1('\xDA'), output1('\xDB'), output1('\xDC'), + output1('\xDF'), output1('\xE0'), output1('\xE1'), output1('\xE2'), + output1('\xE3'), output1('\xE4'), output1('\xE5'), output1('\xE6'), + output1('\xE7'), output1('\xE8'), output1('\xE9'), output1('\xEA'), + output1('\xEB'), output1('\xEC'), output1('\xED'), output1('\xEE'), + output1('\xEF'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF7'), + output1('\xF8'), output1('\xF9'), output1('\xFA'), output1('\xFB'), + output1('\xFC'), output1('\xFF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_9_C3 = { + to_ISO_8859_9_C3_offsets, + to_ISO_8859_9_C3_infos +}; + +static const unsigned char +to_ISO_8859_9_C4_offsets[64] = { + -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, 0, 1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_9_C4_infos[4] = { + output1('\xD0'), output1('\xF0'), output1('\xDD'), output1('\xFD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_9_C4 = { + to_ISO_8859_9_C4_offsets, + to_ISO_8859_9_C4_infos +}; + +static const unsigned char +to_ISO_8859_9_C5_offsets[64] = { + -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, 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, +}; +static const void* const +to_ISO_8859_9_C5_infos[2] = { + output1('\xDE'), output1('\xFE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_9_C5 = { + to_ISO_8859_9_C5_offsets, + to_ISO_8859_9_C5_infos +}; + +static const unsigned char +to_ISO_8859_9_offsets[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, 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, 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, 2, 3, 4, -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 void* const +to_ISO_8859_9_infos[5] = { + NOMAP, &to_ISO_8859_9_C2, &to_ISO_8859_9_C3, &to_ISO_8859_9_C4, + &to_ISO_8859_9_C5, +}; +const BYTE_LOOKUP +to_ISO_8859_9 = { + to_ISO_8859_9_offsets, + to_ISO_8859_9_infos +}; + +static const unsigned char +from_ISO_8859_10_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_10_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC4','\x84'), output2('\xC4','\x92'), + output2('\xC4','\xA2'), output2('\xC4','\xAA'), + output2('\xC4','\xA8'), output2('\xC4','\xB6'), + output2('\xC2','\xA7'), output2('\xC4','\xBB'), + output2('\xC4','\x90'), output2('\xC5','\xA0'), + output2('\xC5','\xA6'), output2('\xC5','\xBD'), + output2('\xC2','\xAD'), output2('\xC5','\xAA'), + output2('\xC5','\x8A'), output2('\xC2','\xB0'), + output2('\xC4','\x85'), output2('\xC4','\x93'), + output2('\xC4','\xA3'), output2('\xC4','\xAB'), + output2('\xC4','\xA9'), output2('\xC4','\xB7'), + output2('\xC2','\xB7'), output2('\xC4','\xBC'), + output2('\xC4','\x91'), output2('\xC5','\xA1'), + output2('\xC5','\xA7'), output2('\xC5','\xBE'), + output3('\xE2','\x80','\x95'), output2('\xC5','\xAB'), + output2('\xC5','\x8B'), output2('\xC4','\x80'), + output2('\xC3','\x81'), output2('\xC3','\x82'), + output2('\xC3','\x83'), output2('\xC3','\x84'), + output2('\xC3','\x85'), output2('\xC3','\x86'), + output2('\xC4','\xAE'), output2('\xC4','\x8C'), + output2('\xC3','\x89'), output2('\xC4','\x98'), + output2('\xC3','\x8B'), output2('\xC4','\x96'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC3','\x8F'), output2('\xC3','\x90'), + output2('\xC5','\x85'), output2('\xC5','\x8C'), + output2('\xC3','\x93'), output2('\xC3','\x94'), + output2('\xC3','\x95'), output2('\xC3','\x96'), + output2('\xC5','\xA8'), output2('\xC3','\x98'), + output2('\xC5','\xB2'), output2('\xC3','\x9A'), + output2('\xC3','\x9B'), output2('\xC3','\x9C'), + output2('\xC3','\x9D'), output2('\xC3','\x9E'), + output2('\xC3','\x9F'), output2('\xC4','\x81'), + output2('\xC3','\xA1'), output2('\xC3','\xA2'), + output2('\xC3','\xA3'), output2('\xC3','\xA4'), + output2('\xC3','\xA5'), output2('\xC3','\xA6'), + output2('\xC4','\xAF'), output2('\xC4','\x8D'), + output2('\xC3','\xA9'), output2('\xC4','\x99'), + output2('\xC3','\xAB'), output2('\xC4','\x97'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC3','\xAF'), output2('\xC3','\xB0'), + output2('\xC5','\x86'), output2('\xC5','\x8D'), + output2('\xC3','\xB3'), output2('\xC3','\xB4'), + output2('\xC3','\xB5'), output2('\xC3','\xB6'), + output2('\xC5','\xA9'), output2('\xC3','\xB8'), + output2('\xC5','\xB3'), output2('\xC3','\xBA'), + output2('\xC3','\xBB'), output2('\xC3','\xBC'), + output2('\xC3','\xBD'), output2('\xC3','\xBE'), + output2('\xC4','\xB8'), +}; +const BYTE_LOOKUP +from_ISO_8859_10 = { + from_ISO_8859_10_offsets, + from_ISO_8859_10_infos +}; + +static const unsigned char +to_ISO_8859_10_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, 34, -1, -1, + 35, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_10_C2_infos[37] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA7'), output1('\xAD'), output1('\xB0'), + output1('\xB7'), +}; +static const BYTE_LOOKUP +to_ISO_8859_10_C2 = { + to_ISO_8859_10_C2_offsets, + to_ISO_8859_10_C2_infos +}; + +static const unsigned char +to_ISO_8859_10_C3_offsets[64] = { + -1, 0, 1, 2, 3, 4, 5, -1, -1, 6, -1, 7, -1, 8, 9, 10, + 11, -1, -1, 12, 13, 14, 15, -1, 16, -1, 17, 18, 19, 20, 21, 22, + -1, 23, 24, 25, 26, 27, 28, -1, -1, 29, -1, 30, -1, 31, 32, 33, + 34, -1, -1, 35, 36, 37, 38, -1, 39, -1, 40, 41, 42, 43, 44, -1, +}; +static const void* const +to_ISO_8859_10_C3_infos[45] = { + output1('\xC1'), output1('\xC2'), output1('\xC3'), output1('\xC4'), + output1('\xC5'), output1('\xC6'), output1('\xC9'), output1('\xCB'), + output1('\xCD'), output1('\xCE'), output1('\xCF'), output1('\xD0'), + output1('\xD3'), output1('\xD4'), output1('\xD5'), output1('\xD6'), + output1('\xD8'), output1('\xDA'), output1('\xDB'), output1('\xDC'), + output1('\xDD'), output1('\xDE'), output1('\xDF'), output1('\xE1'), + output1('\xE2'), output1('\xE3'), output1('\xE4'), output1('\xE5'), + output1('\xE6'), output1('\xE9'), output1('\xEB'), output1('\xED'), + output1('\xEE'), output1('\xEF'), output1('\xF0'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF8'), + output1('\xFA'), output1('\xFB'), output1('\xFC'), output1('\xFD'), + output1('\xFE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_10_C3 = { + to_ISO_8859_10_C3_offsets, + to_ISO_8859_10_C3_infos +}; + +static const unsigned char +to_ISO_8859_10_C4_offsets[64] = { + 0, 1, -1, -1, 2, 3, -1, -1, -1, -1, -1, -1, 4, 5, -1, -1, + 6, 7, 8, 9, -1, -1, 10, 11, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, 14, 15, -1, -1, -1, -1, 16, 17, 18, 19, -1, -1, 20, 21, + -1, -1, -1, -1, -1, -1, 22, 23, 24, -1, -1, 25, 26, -1, -1, -1, +}; +static const void* const +to_ISO_8859_10_C4_infos[27] = { + output1('\xC0'), output1('\xE0'), output1('\xA1'), output1('\xB1'), + output1('\xC8'), output1('\xE8'), output1('\xA9'), output1('\xB9'), + output1('\xA2'), output1('\xB2'), output1('\xCC'), output1('\xEC'), + output1('\xCA'), output1('\xEA'), output1('\xA3'), output1('\xB3'), + output1('\xA5'), output1('\xB5'), output1('\xA4'), output1('\xB4'), + output1('\xC7'), output1('\xE7'), output1('\xA6'), output1('\xB6'), + output1('\xFF'), output1('\xA8'), output1('\xB8'), +}; +static const BYTE_LOOKUP +to_ISO_8859_10_C4 = { + to_ISO_8859_10_C4_offsets, + to_ISO_8859_10_C4_infos +}; + +static const unsigned char +to_ISO_8859_10_C5_offsets[64] = { + -1, -1, -1, -1, -1, 0, 1, -1, -1, -1, 2, 3, 4, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6, 7, -1, -1, -1, -1, 8, 9, 10, 11, 12, 13, -1, -1, -1, -1, + -1, -1, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, 17, -1, +}; +static const void* const +to_ISO_8859_10_C5_infos[18] = { + output1('\xD1'), output1('\xF1'), output1('\xAF'), output1('\xBF'), + output1('\xD2'), output1('\xF2'), output1('\xAA'), output1('\xBA'), + output1('\xAB'), output1('\xBB'), output1('\xD7'), output1('\xF7'), + output1('\xAE'), output1('\xBE'), output1('\xD9'), output1('\xF9'), + output1('\xAC'), output1('\xBC'), +}; +static const BYTE_LOOKUP +to_ISO_8859_10_C5 = { + to_ISO_8859_10_C5_offsets, + to_ISO_8859_10_C5_infos +}; + +static const unsigned char +to_ISO_8859_10_E2_80_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 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, +}; +static const void* const +to_ISO_8859_10_E2_80_infos[1] = { + output1('\xBD'), +}; +static const BYTE_LOOKUP +to_ISO_8859_10_E2_80 = { + to_ISO_8859_10_E2_80_offsets, + to_ISO_8859_10_E2_80_infos +}; + +static const unsigned char +to_ISO_8859_10_E2_offsets[64] = { + 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, +}; +static const void* const +to_ISO_8859_10_E2_infos[1] = { + &to_ISO_8859_10_E2_80, +}; +static const BYTE_LOOKUP +to_ISO_8859_10_E2 = { + to_ISO_8859_10_E2_offsets, + to_ISO_8859_10_E2_infos +}; + +static const unsigned char +to_ISO_8859_10_offsets[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, 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, 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, 2, 3, 4, -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, 5, -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 void* const +to_ISO_8859_10_infos[6] = { + NOMAP, &to_ISO_8859_10_C2, &to_ISO_8859_10_C3, &to_ISO_8859_10_C4, + &to_ISO_8859_10_C5, &to_ISO_8859_10_E2, +}; +const BYTE_LOOKUP +to_ISO_8859_10 = { + to_ISO_8859_10_offsets, + to_ISO_8859_10_infos +}; + +static const unsigned char +from_ISO_8859_11_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, -1, -1, -1, 92, + 93, 94, 95, 96, 97, 98, 99,100, 101,102,103,104,105,106,107,108, + 109,110,111,112,113,114,115,116, 117,118,119,120, -1, -1, -1, -1, +}; +static const void* const +from_ISO_8859_11_infos[121] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output3('\xE0','\xB8','\x81'), output3('\xE0','\xB8','\x82'), + output3('\xE0','\xB8','\x83'), output3('\xE0','\xB8','\x84'), + output3('\xE0','\xB8','\x85'), output3('\xE0','\xB8','\x86'), + output3('\xE0','\xB8','\x87'), output3('\xE0','\xB8','\x88'), + output3('\xE0','\xB8','\x89'), output3('\xE0','\xB8','\x8A'), + output3('\xE0','\xB8','\x8B'), output3('\xE0','\xB8','\x8C'), + output3('\xE0','\xB8','\x8D'), output3('\xE0','\xB8','\x8E'), + output3('\xE0','\xB8','\x8F'), output3('\xE0','\xB8','\x90'), + output3('\xE0','\xB8','\x91'), output3('\xE0','\xB8','\x92'), + output3('\xE0','\xB8','\x93'), output3('\xE0','\xB8','\x94'), + output3('\xE0','\xB8','\x95'), output3('\xE0','\xB8','\x96'), + output3('\xE0','\xB8','\x97'), output3('\xE0','\xB8','\x98'), + output3('\xE0','\xB8','\x99'), output3('\xE0','\xB8','\x9A'), + output3('\xE0','\xB8','\x9B'), output3('\xE0','\xB8','\x9C'), + output3('\xE0','\xB8','\x9D'), output3('\xE0','\xB8','\x9E'), + output3('\xE0','\xB8','\x9F'), output3('\xE0','\xB8','\xA0'), + output3('\xE0','\xB8','\xA1'), output3('\xE0','\xB8','\xA2'), + output3('\xE0','\xB8','\xA3'), output3('\xE0','\xB8','\xA4'), + output3('\xE0','\xB8','\xA5'), output3('\xE0','\xB8','\xA6'), + output3('\xE0','\xB8','\xA7'), output3('\xE0','\xB8','\xA8'), + output3('\xE0','\xB8','\xA9'), output3('\xE0','\xB8','\xAA'), + output3('\xE0','\xB8','\xAB'), output3('\xE0','\xB8','\xAC'), + output3('\xE0','\xB8','\xAD'), output3('\xE0','\xB8','\xAE'), + output3('\xE0','\xB8','\xAF'), output3('\xE0','\xB8','\xB0'), + output3('\xE0','\xB8','\xB1'), output3('\xE0','\xB8','\xB2'), + output3('\xE0','\xB8','\xB3'), output3('\xE0','\xB8','\xB4'), + output3('\xE0','\xB8','\xB5'), output3('\xE0','\xB8','\xB6'), + output3('\xE0','\xB8','\xB7'), output3('\xE0','\xB8','\xB8'), + output3('\xE0','\xB8','\xB9'), output3('\xE0','\xB8','\xBA'), + output3('\xE0','\xB8','\xBF'), output3('\xE0','\xB9','\x80'), + output3('\xE0','\xB9','\x81'), output3('\xE0','\xB9','\x82'), + output3('\xE0','\xB9','\x83'), output3('\xE0','\xB9','\x84'), + output3('\xE0','\xB9','\x85'), output3('\xE0','\xB9','\x86'), + output3('\xE0','\xB9','\x87'), output3('\xE0','\xB9','\x88'), + output3('\xE0','\xB9','\x89'), output3('\xE0','\xB9','\x8A'), + output3('\xE0','\xB9','\x8B'), output3('\xE0','\xB9','\x8C'), + output3('\xE0','\xB9','\x8D'), output3('\xE0','\xB9','\x8E'), + output3('\xE0','\xB9','\x8F'), output3('\xE0','\xB9','\x90'), + output3('\xE0','\xB9','\x91'), output3('\xE0','\xB9','\x92'), + output3('\xE0','\xB9','\x93'), output3('\xE0','\xB9','\x94'), + output3('\xE0','\xB9','\x95'), output3('\xE0','\xB9','\x96'), + output3('\xE0','\xB9','\x97'), output3('\xE0','\xB9','\x98'), + output3('\xE0','\xB9','\x99'), output3('\xE0','\xB9','\x9A'), + output3('\xE0','\xB9','\x9B'), +}; +const BYTE_LOOKUP +from_ISO_8859_11 = { + from_ISO_8859_11_offsets, + from_ISO_8859_11_infos +}; + +static const unsigned char +to_ISO_8859_11_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -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 void* const +to_ISO_8859_11_C2_infos[33] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), +}; +static const BYTE_LOOKUP +to_ISO_8859_11_C2 = { + to_ISO_8859_11_C2_offsets, + to_ISO_8859_11_C2_infos +}; + +static const unsigned char +to_ISO_8859_11_E0_B8_offsets[64] = { + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 58, +}; +static const void* const +to_ISO_8859_11_E0_B8_infos[59] = { + output1('\xA1'), output1('\xA2'), output1('\xA3'), output1('\xA4'), + output1('\xA5'), output1('\xA6'), output1('\xA7'), output1('\xA8'), + output1('\xA9'), output1('\xAA'), output1('\xAB'), output1('\xAC'), + output1('\xAD'), output1('\xAE'), output1('\xAF'), output1('\xB0'), + output1('\xB1'), output1('\xB2'), output1('\xB3'), output1('\xB4'), + output1('\xB5'), output1('\xB6'), output1('\xB7'), output1('\xB8'), + output1('\xB9'), output1('\xBA'), output1('\xBB'), output1('\xBC'), + output1('\xBD'), output1('\xBE'), output1('\xBF'), output1('\xC0'), + output1('\xC1'), output1('\xC2'), output1('\xC3'), output1('\xC4'), + output1('\xC5'), output1('\xC6'), output1('\xC7'), output1('\xC8'), + output1('\xC9'), output1('\xCA'), output1('\xCB'), output1('\xCC'), + output1('\xCD'), output1('\xCE'), output1('\xCF'), output1('\xD0'), + output1('\xD1'), output1('\xD2'), output1('\xD3'), output1('\xD4'), + output1('\xD5'), output1('\xD6'), output1('\xD7'), output1('\xD8'), + output1('\xD9'), output1('\xDA'), output1('\xDF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_11_E0_B8 = { + to_ISO_8859_11_E0_B8_offsets, + to_ISO_8859_11_E0_B8_infos +}; + +static const unsigned char +to_ISO_8859_11_E0_B9_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -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 void* const +to_ISO_8859_11_E0_B9_infos[28] = { + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE3'), + output1('\xE4'), output1('\xE5'), output1('\xE6'), output1('\xE7'), + output1('\xE8'), output1('\xE9'), output1('\xEA'), output1('\xEB'), + output1('\xEC'), output1('\xED'), output1('\xEE'), output1('\xEF'), + output1('\xF0'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF7'), + output1('\xF8'), output1('\xF9'), output1('\xFA'), output1('\xFB'), +}; +static const BYTE_LOOKUP +to_ISO_8859_11_E0_B9 = { + to_ISO_8859_11_E0_B9_offsets, + to_ISO_8859_11_E0_B9_infos +}; + +static const unsigned char +to_ISO_8859_11_E0_offsets[64] = { + -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, 0, 1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_11_E0_infos[2] = { + &to_ISO_8859_11_E0_B8, &to_ISO_8859_11_E0_B9, +}; +static const BYTE_LOOKUP +to_ISO_8859_11_E0 = { + to_ISO_8859_11_E0_offsets, + to_ISO_8859_11_E0_infos +}; + +static const unsigned char +to_ISO_8859_11_offsets[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, 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, 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, + 2, -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 void* const +to_ISO_8859_11_infos[3] = { + NOMAP, &to_ISO_8859_11_C2, &to_ISO_8859_11_E0, +}; +const BYTE_LOOKUP +to_ISO_8859_11 = { + to_ISO_8859_11_offsets, + to_ISO_8859_11_infos +}; + +static const unsigned char +from_ISO_8859_13_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_13_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output3('\xE2','\x80','\x9D'), output2('\xC2','\xA2'), + output2('\xC2','\xA3'), output2('\xC2','\xA4'), + output3('\xE2','\x80','\x9E'), output2('\xC2','\xA6'), + output2('\xC2','\xA7'), output2('\xC3','\x98'), + output2('\xC2','\xA9'), output2('\xC5','\x96'), + output2('\xC2','\xAB'), output2('\xC2','\xAC'), + output2('\xC2','\xAD'), output2('\xC2','\xAE'), + output2('\xC3','\x86'), output2('\xC2','\xB0'), + output2('\xC2','\xB1'), output2('\xC2','\xB2'), + output2('\xC2','\xB3'), output3('\xE2','\x80','\x9C'), + output2('\xC2','\xB5'), output2('\xC2','\xB6'), + output2('\xC2','\xB7'), output2('\xC3','\xB8'), + output2('\xC2','\xB9'), output2('\xC5','\x97'), + output2('\xC2','\xBB'), output2('\xC2','\xBC'), + output2('\xC2','\xBD'), output2('\xC2','\xBE'), + output2('\xC3','\xA6'), output2('\xC4','\x84'), + output2('\xC4','\xAE'), output2('\xC4','\x80'), + output2('\xC4','\x86'), output2('\xC3','\x84'), + output2('\xC3','\x85'), output2('\xC4','\x98'), + output2('\xC4','\x92'), output2('\xC4','\x8C'), + output2('\xC3','\x89'), output2('\xC5','\xB9'), + output2('\xC4','\x96'), output2('\xC4','\xA2'), + output2('\xC4','\xB6'), output2('\xC4','\xAA'), + output2('\xC4','\xBB'), output2('\xC5','\xA0'), + output2('\xC5','\x83'), output2('\xC5','\x85'), + output2('\xC3','\x93'), output2('\xC5','\x8C'), + output2('\xC3','\x95'), output2('\xC3','\x96'), + output2('\xC3','\x97'), output2('\xC5','\xB2'), + output2('\xC5','\x81'), output2('\xC5','\x9A'), + output2('\xC5','\xAA'), output2('\xC3','\x9C'), + output2('\xC5','\xBB'), output2('\xC5','\xBD'), + output2('\xC3','\x9F'), output2('\xC4','\x85'), + output2('\xC4','\xAF'), output2('\xC4','\x81'), + output2('\xC4','\x87'), output2('\xC3','\xA4'), + output2('\xC3','\xA5'), output2('\xC4','\x99'), + output2('\xC4','\x93'), output2('\xC4','\x8D'), + output2('\xC3','\xA9'), output2('\xC5','\xBA'), + output2('\xC4','\x97'), output2('\xC4','\xA3'), + output2('\xC4','\xB7'), output2('\xC4','\xAB'), + output2('\xC4','\xBC'), output2('\xC5','\xA1'), + output2('\xC5','\x84'), output2('\xC5','\x86'), + output2('\xC3','\xB3'), output2('\xC5','\x8D'), + output2('\xC3','\xB5'), output2('\xC3','\xB6'), + output2('\xC3','\xB7'), output2('\xC5','\xB3'), + output2('\xC5','\x82'), output2('\xC5','\x9B'), + output2('\xC5','\xAB'), output2('\xC3','\xBC'), + output2('\xC5','\xBC'), output2('\xC5','\xBE'), + output3('\xE2','\x80','\x99'), +}; +const BYTE_LOOKUP +from_ISO_8859_13 = { + from_ISO_8859_13_offsets, + from_ISO_8859_13_infos +}; + +static const unsigned char +to_ISO_8859_13_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 33, 34, 35, -1, 36, 37, -1, 38, -1, 39, 40, 41, 42, -1, + 43, 44, 45, 46, -1, 47, 48, 49, -1, 50, -1, 51, 52, 53, 54, -1, +}; +static const void* const +to_ISO_8859_13_C2_infos[55] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA2'), output1('\xA3'), output1('\xA4'), + output1('\xA6'), output1('\xA7'), output1('\xA9'), output1('\xAB'), + output1('\xAC'), output1('\xAD'), output1('\xAE'), output1('\xB0'), + output1('\xB1'), output1('\xB2'), output1('\xB3'), output1('\xB5'), + output1('\xB6'), output1('\xB7'), output1('\xB9'), output1('\xBB'), + output1('\xBC'), output1('\xBD'), output1('\xBE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_13_C2 = { + to_ISO_8859_13_C2_offsets, + to_ISO_8859_13_C2_infos +}; + +static const unsigned char +to_ISO_8859_13_C3_offsets[64] = { + -1, -1, -1, -1, 0, 1, 2, -1, -1, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4, -1, 5, 6, 7, 8, -1, -1, -1, 9, -1, -1, 10, + -1, -1, -1, -1, 11, 12, 13, -1, -1, 14, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 15, -1, 16, 17, 18, 19, -1, -1, -1, 20, -1, -1, -1, +}; +static const void* const +to_ISO_8859_13_C3_infos[21] = { + output1('\xC4'), output1('\xC5'), output1('\xAF'), output1('\xC9'), + output1('\xD3'), output1('\xD5'), output1('\xD6'), output1('\xD7'), + output1('\xA8'), output1('\xDC'), output1('\xDF'), output1('\xE4'), + output1('\xE5'), output1('\xBF'), output1('\xE9'), output1('\xF3'), + output1('\xF5'), output1('\xF6'), output1('\xF7'), output1('\xB8'), + output1('\xFC'), +}; +static const BYTE_LOOKUP +to_ISO_8859_13_C3 = { + to_ISO_8859_13_C3_offsets, + to_ISO_8859_13_C3_infos +}; + +static const unsigned char +to_ISO_8859_13_C4_offsets[64] = { + 0, 1, -1, -1, 2, 3, 4, 5, -1, -1, -1, -1, 6, 7, -1, -1, + -1, -1, 8, 9, -1, -1, 10, 11, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, 14, 15, -1, -1, -1, -1, -1, -1, 16, 17, -1, -1, 18, 19, + -1, -1, -1, -1, -1, -1, 20, 21, -1, -1, -1, 22, 23, -1, -1, -1, +}; +static const void* const +to_ISO_8859_13_C4_infos[24] = { + output1('\xC2'), output1('\xE2'), output1('\xC0'), output1('\xE0'), + output1('\xC3'), output1('\xE3'), output1('\xC8'), output1('\xE8'), + output1('\xC7'), output1('\xE7'), output1('\xCB'), output1('\xEB'), + output1('\xC6'), output1('\xE6'), output1('\xCC'), output1('\xEC'), + output1('\xCE'), output1('\xEE'), output1('\xC1'), output1('\xE1'), + output1('\xCD'), output1('\xED'), output1('\xCF'), output1('\xEF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_13_C4 = { + to_ISO_8859_13_C4_offsets, + to_ISO_8859_13_C4_infos +}; + +static const unsigned char +to_ISO_8859_13_C5_offsets[64] = { + -1, 0, 1, 2, 3, 4, 5, -1, -1, -1, -1, -1, 6, 7, -1, -1, + -1, -1, -1, -1, -1, -1, 8, 9, -1, -1, 10, 11, -1, -1, -1, -1, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 14, 15, -1, -1, -1, -1, + -1, -1, 16, 17, -1, -1, -1, -1, -1, 18, 19, 20, 21, 22, 23, -1, +}; +static const void* const +to_ISO_8859_13_C5_infos[24] = { + output1('\xD9'), output1('\xF9'), output1('\xD1'), output1('\xF1'), + output1('\xD2'), output1('\xF2'), output1('\xD4'), output1('\xF4'), + output1('\xAA'), output1('\xBA'), output1('\xDA'), output1('\xFA'), + output1('\xD0'), output1('\xF0'), output1('\xDB'), output1('\xFB'), + output1('\xD8'), output1('\xF8'), output1('\xCA'), output1('\xEA'), + output1('\xDD'), output1('\xFD'), output1('\xDE'), output1('\xFE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_13_C5 = { + to_ISO_8859_13_C5_offsets, + to_ISO_8859_13_C5_infos +}; + +static const unsigned char +to_ISO_8859_13_E2_80_offsets[64] = { + -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, 0, -1, -1, 1, 2, 3, -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 void* const +to_ISO_8859_13_E2_80_infos[4] = { + output1('\xFF'), output1('\xB4'), output1('\xA1'), output1('\xA5'), +}; +static const BYTE_LOOKUP +to_ISO_8859_13_E2_80 = { + to_ISO_8859_13_E2_80_offsets, + to_ISO_8859_13_E2_80_infos +}; + +static const unsigned char +to_ISO_8859_13_E2_offsets[64] = { + 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, +}; +static const void* const +to_ISO_8859_13_E2_infos[1] = { + &to_ISO_8859_13_E2_80, +}; +static const BYTE_LOOKUP +to_ISO_8859_13_E2 = { + to_ISO_8859_13_E2_offsets, + to_ISO_8859_13_E2_infos +}; + +static const unsigned char +to_ISO_8859_13_offsets[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, 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, 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, 2, 3, 4, -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, 5, -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 void* const +to_ISO_8859_13_infos[6] = { + NOMAP, &to_ISO_8859_13_C2, &to_ISO_8859_13_C3, &to_ISO_8859_13_C4, + &to_ISO_8859_13_C5, &to_ISO_8859_13_E2, +}; +const BYTE_LOOKUP +to_ISO_8859_13 = { + to_ISO_8859_13_offsets, + to_ISO_8859_13_infos +}; + +static const unsigned char +from_ISO_8859_14_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_14_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output3('\xE1','\xB8','\x82'), output3('\xE1','\xB8','\x83'), + output2('\xC2','\xA3'), output2('\xC4','\x8A'), + output2('\xC4','\x8B'), output3('\xE1','\xB8','\x8A'), + output2('\xC2','\xA7'), output3('\xE1','\xBA','\x80'), + output2('\xC2','\xA9'), output3('\xE1','\xBA','\x82'), + output3('\xE1','\xB8','\x8B'), output3('\xE1','\xBB','\xB2'), + output2('\xC2','\xAD'), output2('\xC2','\xAE'), + output2('\xC5','\xB8'), output3('\xE1','\xB8','\x9E'), + output3('\xE1','\xB8','\x9F'), output2('\xC4','\xA0'), + output2('\xC4','\xA1'), output3('\xE1','\xB9','\x80'), + output3('\xE1','\xB9','\x81'), output2('\xC2','\xB6'), + output3('\xE1','\xB9','\x96'), output3('\xE1','\xBA','\x81'), + output3('\xE1','\xB9','\x97'), output3('\xE1','\xBA','\x83'), + output3('\xE1','\xB9','\xA0'), output3('\xE1','\xBB','\xB3'), + output3('\xE1','\xBA','\x84'), output3('\xE1','\xBA','\x85'), + output3('\xE1','\xB9','\xA1'), output2('\xC3','\x80'), + output2('\xC3','\x81'), output2('\xC3','\x82'), + output2('\xC3','\x83'), output2('\xC3','\x84'), + output2('\xC3','\x85'), output2('\xC3','\x86'), + output2('\xC3','\x87'), output2('\xC3','\x88'), + output2('\xC3','\x89'), output2('\xC3','\x8A'), + output2('\xC3','\x8B'), output2('\xC3','\x8C'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC3','\x8F'), output2('\xC5','\xB4'), + output2('\xC3','\x91'), output2('\xC3','\x92'), + output2('\xC3','\x93'), output2('\xC3','\x94'), + output2('\xC3','\x95'), output2('\xC3','\x96'), + output3('\xE1','\xB9','\xAA'), output2('\xC3','\x98'), + output2('\xC3','\x99'), output2('\xC3','\x9A'), + output2('\xC3','\x9B'), output2('\xC3','\x9C'), + output2('\xC3','\x9D'), output2('\xC5','\xB6'), + output2('\xC3','\x9F'), output2('\xC3','\xA0'), + output2('\xC3','\xA1'), output2('\xC3','\xA2'), + output2('\xC3','\xA3'), output2('\xC3','\xA4'), + output2('\xC3','\xA5'), output2('\xC3','\xA6'), + output2('\xC3','\xA7'), output2('\xC3','\xA8'), + output2('\xC3','\xA9'), output2('\xC3','\xAA'), + output2('\xC3','\xAB'), output2('\xC3','\xAC'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC3','\xAF'), output2('\xC5','\xB5'), + output2('\xC3','\xB1'), output2('\xC3','\xB2'), + output2('\xC3','\xB3'), output2('\xC3','\xB4'), + output2('\xC3','\xB5'), output2('\xC3','\xB6'), + output3('\xE1','\xB9','\xAB'), output2('\xC3','\xB8'), + output2('\xC3','\xB9'), output2('\xC3','\xBA'), + output2('\xC3','\xBB'), output2('\xC3','\xBC'), + output2('\xC3','\xBD'), output2('\xC5','\xB7'), + output2('\xC3','\xBF'), +}; +const BYTE_LOOKUP +from_ISO_8859_14 = { + from_ISO_8859_14_offsets, + from_ISO_8859_14_infos +}; + +static const unsigned char +to_ISO_8859_14_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, 33, -1, -1, -1, 34, -1, 35, -1, -1, -1, 36, 37, -1, + -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_14_C2_infos[39] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA3'), output1('\xA7'), output1('\xA9'), + output1('\xAD'), output1('\xAE'), output1('\xB6'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_C2 = { + to_ISO_8859_14_C2_offsets, + to_ISO_8859_14_C2_infos +}; + +static const unsigned char +to_ISO_8859_14_C3_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + -1, 16, 17, 18, 19, 20, 21, -1, 22, 23, 24, 25, 26, 27, -1, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + -1, 45, 46, 47, 48, 49, 50, -1, 51, 52, 53, 54, 55, 56, -1, 57, +}; +static const void* const +to_ISO_8859_14_C3_infos[58] = { + output1('\xC0'), output1('\xC1'), output1('\xC2'), output1('\xC3'), + output1('\xC4'), output1('\xC5'), output1('\xC6'), output1('\xC7'), + output1('\xC8'), output1('\xC9'), output1('\xCA'), output1('\xCB'), + output1('\xCC'), output1('\xCD'), output1('\xCE'), output1('\xCF'), + output1('\xD1'), output1('\xD2'), output1('\xD3'), output1('\xD4'), + output1('\xD5'), output1('\xD6'), output1('\xD8'), output1('\xD9'), + output1('\xDA'), output1('\xDB'), output1('\xDC'), output1('\xDD'), + output1('\xDF'), output1('\xE0'), output1('\xE1'), output1('\xE2'), + output1('\xE3'), output1('\xE4'), output1('\xE5'), output1('\xE6'), + output1('\xE7'), output1('\xE8'), output1('\xE9'), output1('\xEA'), + output1('\xEB'), output1('\xEC'), output1('\xED'), output1('\xEE'), + output1('\xEF'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF8'), + output1('\xF9'), output1('\xFA'), output1('\xFB'), output1('\xFC'), + output1('\xFD'), output1('\xFF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_C3 = { + to_ISO_8859_14_C3_offsets, + to_ISO_8859_14_C3_infos +}; + +static const unsigned char +to_ISO_8859_14_C4_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 3, -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 void* const +to_ISO_8859_14_C4_infos[4] = { + output1('\xA4'), output1('\xA5'), output1('\xB2'), output1('\xB3'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_C4 = { + to_ISO_8859_14_C4_offsets, + to_ISO_8859_14_C4_infos +}; + +static const unsigned char +to_ISO_8859_14_C5_offsets[64] = { + -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, 0, 1, 2, 3, 4, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_14_C5_infos[5] = { + output1('\xD0'), output1('\xF0'), output1('\xDE'), output1('\xFE'), + output1('\xAF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_C5 = { + to_ISO_8859_14_C5_offsets, + to_ISO_8859_14_C5_infos +}; + +static const unsigned char +to_ISO_8859_14_E1_B8_offsets[64] = { + -1, -1, 0, 1, -1, -1, -1, -1, -1, -1, 2, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, + -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 void* const +to_ISO_8859_14_E1_B8_infos[6] = { + output1('\xA1'), output1('\xA2'), output1('\xA6'), output1('\xAB'), + output1('\xB0'), output1('\xB1'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_E1_B8 = { + to_ISO_8859_14_E1_B8_offsets, + to_ISO_8859_14_E1_B8_infos +}; + +static const unsigned char +to_ISO_8859_14_E1_B9_offsets[64] = { + 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, + 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, 6, 7, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_14_E1_B9_infos[8] = { + output1('\xB4'), output1('\xB5'), output1('\xB7'), output1('\xB9'), + output1('\xBB'), output1('\xBF'), output1('\xD7'), output1('\xF7'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_E1_B9 = { + to_ISO_8859_14_E1_B9_offsets, + to_ISO_8859_14_E1_B9_infos +}; + +static const unsigned char +to_ISO_8859_14_E1_BA_offsets[64] = { + 0, 1, 2, 3, 4, 5, -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 void* const +to_ISO_8859_14_E1_BA_infos[6] = { + output1('\xA8'), output1('\xB8'), output1('\xAA'), output1('\xBA'), + output1('\xBD'), output1('\xBE'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_E1_BA = { + to_ISO_8859_14_E1_BA_offsets, + to_ISO_8859_14_E1_BA_infos +}; + +static const unsigned char +to_ISO_8859_14_E1_BB_offsets[64] = { + -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, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_14_E1_BB_infos[2] = { + output1('\xAC'), output1('\xBC'), +}; +static const BYTE_LOOKUP +to_ISO_8859_14_E1_BB = { + to_ISO_8859_14_E1_BB_offsets, + to_ISO_8859_14_E1_BB_infos +}; + +static const unsigned char +to_ISO_8859_14_E1_offsets[64] = { + -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, 0, 1, 2, 3, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_14_E1_infos[4] = { + &to_ISO_8859_14_E1_B8, &to_ISO_8859_14_E1_B9, + &to_ISO_8859_14_E1_BA, &to_ISO_8859_14_E1_BB, +}; +static const BYTE_LOOKUP +to_ISO_8859_14_E1 = { + to_ISO_8859_14_E1_offsets, + to_ISO_8859_14_E1_infos +}; + +static const unsigned char +to_ISO_8859_14_offsets[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, 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, 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, 2, 3, 4, -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, 5, -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 void* const +to_ISO_8859_14_infos[6] = { + NOMAP, &to_ISO_8859_14_C2, &to_ISO_8859_14_C3, &to_ISO_8859_14_C4, + &to_ISO_8859_14_C5, &to_ISO_8859_14_E1, +}; +const BYTE_LOOKUP +to_ISO_8859_14 = { + to_ISO_8859_14_offsets, + to_ISO_8859_14_infos +}; + +static const unsigned char +from_ISO_8859_15_offsets[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, 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, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120, 121,122,123,124,125,126,127,128, +}; +static const void* const +from_ISO_8859_15_infos[129] = { + NOMAP, output2('\xC2','\x80'), + output2('\xC2','\x81'), output2('\xC2','\x82'), + output2('\xC2','\x83'), output2('\xC2','\x84'), + output2('\xC2','\x85'), output2('\xC2','\x86'), + output2('\xC2','\x87'), output2('\xC2','\x88'), + output2('\xC2','\x89'), output2('\xC2','\x8A'), + output2('\xC2','\x8B'), output2('\xC2','\x8C'), + output2('\xC2','\x8D'), output2('\xC2','\x8E'), + output2('\xC2','\x8F'), output2('\xC2','\x90'), + output2('\xC2','\x91'), output2('\xC2','\x92'), + output2('\xC2','\x93'), output2('\xC2','\x94'), + output2('\xC2','\x95'), output2('\xC2','\x96'), + output2('\xC2','\x97'), output2('\xC2','\x98'), + output2('\xC2','\x99'), output2('\xC2','\x9A'), + output2('\xC2','\x9B'), output2('\xC2','\x9C'), + output2('\xC2','\x9D'), output2('\xC2','\x9E'), + output2('\xC2','\x9F'), output2('\xC2','\xA0'), + output2('\xC2','\xA1'), output2('\xC2','\xA2'), + output2('\xC2','\xA3'), output3('\xE2','\x82','\xAC'), + output2('\xC2','\xA5'), output2('\xC5','\xA0'), + output2('\xC2','\xA7'), output2('\xC5','\xA1'), + output2('\xC2','\xA9'), output2('\xC2','\xAA'), + output2('\xC2','\xAB'), output2('\xC2','\xAC'), + output2('\xC2','\xAD'), output2('\xC2','\xAE'), + output2('\xC2','\xAF'), output2('\xC2','\xB0'), + output2('\xC2','\xB1'), output2('\xC2','\xB2'), + output2('\xC2','\xB3'), output2('\xC5','\xBD'), + output2('\xC2','\xB5'), output2('\xC2','\xB6'), + output2('\xC2','\xB7'), output2('\xC5','\xBE'), + output2('\xC2','\xB9'), output2('\xC2','\xBA'), + output2('\xC2','\xBB'), output2('\xC5','\x92'), + output2('\xC5','\x93'), output2('\xC5','\xB8'), + output2('\xC2','\xBF'), output2('\xC3','\x80'), + output2('\xC3','\x81'), output2('\xC3','\x82'), + output2('\xC3','\x83'), output2('\xC3','\x84'), + output2('\xC3','\x85'), output2('\xC3','\x86'), + output2('\xC3','\x87'), output2('\xC3','\x88'), + output2('\xC3','\x89'), output2('\xC3','\x8A'), + output2('\xC3','\x8B'), output2('\xC3','\x8C'), + output2('\xC3','\x8D'), output2('\xC3','\x8E'), + output2('\xC3','\x8F'), output2('\xC3','\x90'), + output2('\xC3','\x91'), output2('\xC3','\x92'), + output2('\xC3','\x93'), output2('\xC3','\x94'), + output2('\xC3','\x95'), output2('\xC3','\x96'), + output2('\xC3','\x97'), output2('\xC3','\x98'), + output2('\xC3','\x99'), output2('\xC3','\x9A'), + output2('\xC3','\x9B'), output2('\xC3','\x9C'), + output2('\xC3','\x9D'), output2('\xC3','\x9E'), + output2('\xC3','\x9F'), output2('\xC3','\xA0'), + output2('\xC3','\xA1'), output2('\xC3','\xA2'), + output2('\xC3','\xA3'), output2('\xC3','\xA4'), + output2('\xC3','\xA5'), output2('\xC3','\xA6'), + output2('\xC3','\xA7'), output2('\xC3','\xA8'), + output2('\xC3','\xA9'), output2('\xC3','\xAA'), + output2('\xC3','\xAB'), output2('\xC3','\xAC'), + output2('\xC3','\xAD'), output2('\xC3','\xAE'), + output2('\xC3','\xAF'), output2('\xC3','\xB0'), + output2('\xC3','\xB1'), output2('\xC3','\xB2'), + output2('\xC3','\xB3'), output2('\xC3','\xB4'), + output2('\xC3','\xB5'), output2('\xC3','\xB6'), + output2('\xC3','\xB7'), output2('\xC3','\xB8'), + output2('\xC3','\xB9'), output2('\xC3','\xBA'), + output2('\xC3','\xBB'), output2('\xC3','\xBC'), + output2('\xC3','\xBD'), output2('\xC3','\xBE'), + output2('\xC3','\xBF'), +}; +const BYTE_LOOKUP +from_ISO_8859_15 = { + from_ISO_8859_15_offsets, + from_ISO_8859_15_infos +}; + +static const unsigned char +to_ISO_8859_15_C2_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, -1, 36, -1, 37, -1, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, -1, 49, 50, 51, -1, 52, 53, 54, -1, -1, -1, 55, +}; +static const void* const +to_ISO_8859_15_C2_infos[56] = { + output1('\x80'), output1('\x81'), output1('\x82'), output1('\x83'), + output1('\x84'), output1('\x85'), output1('\x86'), output1('\x87'), + output1('\x88'), output1('\x89'), output1('\x8A'), output1('\x8B'), + output1('\x8C'), output1('\x8D'), output1('\x8E'), output1('\x8F'), + output1('\x90'), output1('\x91'), output1('\x92'), output1('\x93'), + output1('\x94'), output1('\x95'), output1('\x96'), output1('\x97'), + output1('\x98'), output1('\x99'), output1('\x9A'), output1('\x9B'), + output1('\x9C'), output1('\x9D'), output1('\x9E'), output1('\x9F'), + output1('\xA0'), output1('\xA1'), output1('\xA2'), output1('\xA3'), + output1('\xA5'), output1('\xA7'), output1('\xA9'), output1('\xAA'), + output1('\xAB'), output1('\xAC'), output1('\xAD'), output1('\xAE'), + output1('\xAF'), output1('\xB0'), output1('\xB1'), output1('\xB2'), + output1('\xB3'), output1('\xB5'), output1('\xB6'), output1('\xB7'), + output1('\xB9'), output1('\xBA'), output1('\xBB'), output1('\xBF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_15_C2 = { + to_ISO_8859_15_C2_offsets, + to_ISO_8859_15_C2_infos +}; + +static const unsigned char +to_ISO_8859_15_C3_offsets[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, +}; +static const void* const +to_ISO_8859_15_C3_infos[64] = { + output1('\xC0'), output1('\xC1'), output1('\xC2'), output1('\xC3'), + output1('\xC4'), output1('\xC5'), output1('\xC6'), output1('\xC7'), + output1('\xC8'), output1('\xC9'), output1('\xCA'), output1('\xCB'), + output1('\xCC'), output1('\xCD'), output1('\xCE'), output1('\xCF'), + output1('\xD0'), output1('\xD1'), output1('\xD2'), output1('\xD3'), + output1('\xD4'), output1('\xD5'), output1('\xD6'), output1('\xD7'), + output1('\xD8'), output1('\xD9'), output1('\xDA'), output1('\xDB'), + output1('\xDC'), output1('\xDD'), output1('\xDE'), output1('\xDF'), + output1('\xE0'), output1('\xE1'), output1('\xE2'), output1('\xE3'), + output1('\xE4'), output1('\xE5'), output1('\xE6'), output1('\xE7'), + output1('\xE8'), output1('\xE9'), output1('\xEA'), output1('\xEB'), + output1('\xEC'), output1('\xED'), output1('\xEE'), output1('\xEF'), + output1('\xF0'), output1('\xF1'), output1('\xF2'), output1('\xF3'), + output1('\xF4'), output1('\xF5'), output1('\xF6'), output1('\xF7'), + output1('\xF8'), output1('\xF9'), output1('\xFA'), output1('\xFB'), + output1('\xFC'), output1('\xFD'), output1('\xFE'), output1('\xFF'), +}; +static const BYTE_LOOKUP +to_ISO_8859_15_C3 = { + to_ISO_8859_15_C3_offsets, + to_ISO_8859_15_C3_infos +}; + +static const unsigned char +to_ISO_8859_15_C5_offsets[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, 5, 6, -1, +}; +static const void* const +to_ISO_8859_15_C5_infos[7] = { + output1('\xBC'), output1('\xBD'), output1('\xA6'), output1('\xA8'), + output1('\xBE'), output1('\xB4'), output1('\xB8'), +}; +static const BYTE_LOOKUP +to_ISO_8859_15_C5 = { + to_ISO_8859_15_C5_offsets, + to_ISO_8859_15_C5_infos +}; + +static const unsigned char +to_ISO_8859_15_E2_82_offsets[64] = { + -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, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static const void* const +to_ISO_8859_15_E2_82_infos[1] = { + output1('\xA4'), +}; +static const BYTE_LOOKUP +to_ISO_8859_15_E2_82 = { + to_ISO_8859_15_E2_82_offsets, + to_ISO_8859_15_E2_82_infos +}; + +static const unsigned char +to_ISO_8859_15_E2_offsets[64] = { + -1, -1, 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, +}; +static const void* const +to_ISO_8859_15_E2_infos[1] = { + &to_ISO_8859_15_E2_82, +}; +static const BYTE_LOOKUP +to_ISO_8859_15_E2 = { + to_ISO_8859_15_E2_offsets, + to_ISO_8859_15_E2_infos +}; + +static const unsigned char +to_ISO_8859_15_offsets[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, 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, 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, 2, -1, 3, -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, 4, -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 void* const +to_ISO_8859_15_infos[5] = { + NOMAP, &to_ISO_8859_15_C2, &to_ISO_8859_15_C3, &to_ISO_8859_15_C5, + &to_ISO_8859_15_E2, +}; +const BYTE_LOOKUP +to_ISO_8859_15 = { + to_ISO_8859_15_offsets, + to_ISO_8859_15_infos +}; +