diff --git a/ChangeLog b/ChangeLog index 0e19d54c0..fc62c9ef9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2000-04-08 Adam Fedor + + * Source/NSString.m: Include NSISOLatin2StringEncoding coding. + * Source/Unicode.m (encode_chartouni): Implement latin2 encoding. + (encode_unitochar): Likewise. (patches from + Stefan Urbanek ). + 2000-04-05 Richard Frith-Macdonald * Source/NSCalendarDate.m: Bugfix intialising from string. diff --git a/Headers/gnustep/unicode/latin2.h b/Headers/gnustep/unicode/latin2.h new file mode 100644 index 000000000..60bdd8935 --- /dev/null +++ b/Headers/gnustep/unicode/latin2.h @@ -0,0 +1,274 @@ +/* Created by Stefan Urbanek on 2000 Apr 6 */ + +// ISO_8859-2 to Unicode maping + +const unsigned int Latin2_conv_base = 0x80; + +unichar Latin2_char_to_uni_table[] = +{ + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x0085, + 0x0086, + 0x0087, + 0x0088, + 0x0089, + 0x008A, + 0x008B, + 0x008C, + 0x008D, + 0x008E, + 0x008F, + 0x0090, + 0x0091, + 0x0092, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0097, + 0x0098, + 0x0099, + 0x009A, + 0x009B, + 0x009C, + 0x009D, + 0x009E, + 0x009F, + 0x00A0, + 0x0104, + 0x02D8, + 0x0141, + 0x00A4, + 0x013D, + 0x015A, + 0x00A7, + 0x00A8, + 0x0160, + 0x015E, + 0x0164, + 0x0179, + 0x00AD, + 0x017D, + 0x017B, + 0x00B0, + 0x0105, + 0x02DB, + 0x0142, + 0x00B4, + 0x013E, + 0x015B, + 0x02C7, + 0x00B8, + 0x0161, + 0x015F, + 0x0165, + 0x017A, + 0x02DD, + 0x017E, + 0x017C, + 0x0154, + 0x00C1, + 0x00C2, + 0x0102, + 0x00C4, + 0x0139, + 0x0106, + 0x00C7, + 0x010C, + 0x00C9, + 0x0118, + 0x00CB, + 0x011A, + 0x00CD, + 0x00CE, + 0x010E, + 0x0110, + 0x0143, + 0x0147, + 0x00D3, + 0x00D4, + 0x0150, + 0x00D6, + 0x00D7, + 0x0158, + 0x016E, + 0x00DA, + 0x0170, + 0x00DC, + 0x00DD, + 0x0162, + 0x00DF, + 0x0155, + 0x00E1, + 0x00E2, + 0x0103, + 0x00E4, + 0x013A, + 0x0107, + 0x00E7, + 0x010D, + 0x00E9, + 0x0119, + 0x00EB, + 0x011B, + 0x00ED, + 0x00EE, + 0x010F, + 0x0111, + 0x0144, + 0x0148, + 0x00F3, + 0x00F4, + 0x0151, + 0x00F6, + 0x00F7, + 0x0159, + 0x016F, + 0x00FA, + 0x0171, + 0x00FC, + 0x00FD, + 0x0163, + 0x02D9, +}; + +// Unicode to ISO_8859-2 maping + +const unsigned int Latin2_uni_to_char_table_size = 128; + +struct _ucc_ Latin2_uni_to_char_table[]= +{ + {0x0080,0x80}, + {0x0081,0x81}, + {0x0082,0x82}, + {0x0083,0x83}, + {0x0084,0x84}, + {0x0085,0x85}, + {0x0086,0x86}, + {0x0087,0x87}, + {0x0088,0x88}, + {0x0089,0x89}, + {0x008A,0x8A}, + {0x008B,0x8B}, + {0x008C,0x8C}, + {0x008D,0x8D}, + {0x008E,0x8E}, + {0x008F,0x8F}, + {0x0090,0x90}, + {0x0091,0x91}, + {0x0092,0x92}, + {0x0093,0x93}, + {0x0094,0x94}, + {0x0095,0x95}, + {0x0096,0x96}, + {0x0097,0x97}, + {0x0098,0x98}, + {0x0099,0x99}, + {0x009A,0x9A}, + {0x009B,0x9B}, + {0x009C,0x9C}, + {0x009D,0x9D}, + {0x009E,0x9E}, + {0x009F,0x9F}, + {0x00A0,0xA0}, + {0x00A4,0xA4}, + {0x00A7,0xA7}, + {0x00A8,0xA8}, + {0x00AD,0xAD}, + {0x00B0,0xB0}, + {0x00B4,0xB4}, + {0x00B8,0xB8}, + {0x00C1,0xC1}, + {0x00C2,0xC2}, + {0x00C4,0xC4}, + {0x00C7,0xC7}, + {0x00C9,0xC9}, + {0x00CB,0xCB}, + {0x00CD,0xCD}, + {0x00CE,0xCE}, + {0x00D3,0xD3}, + {0x00D4,0xD4}, + {0x00D6,0xD6}, + {0x00D7,0xD7}, + {0x00DA,0xDA}, + {0x00DC,0xDC}, + {0x00DD,0xDD}, + {0x00DF,0xDF}, + {0x00E1,0xE1}, + {0x00E2,0xE2}, + {0x00E4,0xE4}, + {0x00E7,0xE7}, + {0x00E9,0xE9}, + {0x00EB,0xEB}, + {0x00ED,0xED}, + {0x00EE,0xEE}, + {0x00F3,0xF3}, + {0x00F4,0xF4}, + {0x00F6,0xF6}, + {0x00F7,0xF7}, + {0x00FA,0xFA}, + {0x00FC,0xFC}, + {0x00FD,0xFD}, + {0x0102,0xC3}, + {0x0103,0xE3}, + {0x0104,0xA1}, + {0x0105,0xB1}, + {0x0106,0xC6}, + {0x0107,0xE6}, + {0x010C,0xC8}, + {0x010D,0xE8}, + {0x010E,0xCF}, + {0x010F,0xEF}, + {0x0110,0xD0}, + {0x0111,0xF0}, + {0x0118,0xCA}, + {0x0119,0xEA}, + {0x011A,0xCC}, + {0x011B,0xEC}, + {0x0139,0xC5}, + {0x013A,0xE5}, + {0x013D,0xA5}, + {0x013E,0xB5}, + {0x0141,0xA3}, + {0x0142,0xB3}, + {0x0143,0xD1}, + {0x0144,0xF1}, + {0x0147,0xD2}, + {0x0148,0xF2}, + {0x0150,0xD5}, + {0x0151,0xF5}, + {0x0154,0xC0}, + {0x0155,0xE0}, + {0x0158,0xD8}, + {0x0159,0xF8}, + {0x015A,0xA6}, + {0x015B,0xB6}, + {0x015E,0xAA}, + {0x015F,0xBA}, + {0x0160,0xA9}, + {0x0161,0xB9}, + {0x0162,0xDE}, + {0x0163,0xFE}, + {0x0164,0xAB}, + {0x0165,0xBB}, + {0x016E,0xD9}, + {0x016F,0xF9}, + {0x0170,0xDB}, + {0x0171,0xFB}, + {0x0179,0xAC}, + {0x017A,0xBC}, + {0x017B,0xAF}, + {0x017C,0xBF}, + {0x017D,0xAE}, + {0x017E,0xBE}, + {0x02C7,0xB7}, + {0x02D8,0xA2}, + {0x02D9,0xFF}, + {0x02DB,0xB2}, + {0x02DD,0xBD}, +}; + diff --git a/Source/GNUmakefile b/Source/GNUmakefile index 752dad7ed..b477c46b7 100644 --- a/Source/GNUmakefile +++ b/Source/GNUmakefile @@ -436,6 +436,7 @@ UNICODE_HEADERS = \ unicode/caseconv.h \ unicode/cop.h \ unicode/cyrillic.h \ +unicode/latin2.h \ unicode/decomp.h \ unicode/nextstep.h diff --git a/Source/NSString.m b/Source/NSString.m index 4339d0d02..ec402a03a 100644 --- a/Source/NSString.m +++ b/Source/NSString.m @@ -86,7 +86,7 @@ // NSSymbolStringEncoding, // NSNonLossyASCIIStringEncoding, // NSShiftJISStringEncoding, -// NSISOLatin2StringEncoding, + NSISOLatin2StringEncoding, NSUnicodeStringEncoding, // NSWindowsCP1251StringEncoding, // NSWindowsCP1252StringEncoding, @@ -1754,6 +1754,7 @@ handle_printf_atsign (FILE *stream, if ((encoding==NSASCIIStringEncoding) || (encoding==NSISOLatin1StringEncoding) + || (encoding==NSISOLatin2StringEncoding) || (encoding==NSNEXTSTEPStringEncoding) || (encoding==NSNonLossyASCIIStringEncoding) || (encoding==NSSymbolStringEncoding) diff --git a/Source/Unicode.m b/Source/Unicode.m index 85ced21d8..32bf88d1f 100644 --- a/Source/Unicode.m +++ b/Source/Unicode.m @@ -27,6 +27,7 @@ struct _ucc_ {unichar from; char to;}; #include "unicode/cyrillic.h" +#include "unicode/latin2.h" #include "unicode/nextstep.h" #include "unicode/caseconv.h" #include "unicode/cop.h" @@ -62,6 +63,13 @@ encode_chartouni(char c, NSStringEncoding enc) else return(Cyrillic_char_to_uni_table[(unc)c - Cyrillic_conv_base]); } + if ((enc == NSISOLatin2StringEncoding)) + { + if ((unc)c < Latin2_conv_base) + return (unichar)((unc)c); + else + return(Latin2_char_to_uni_table[(unc)c - Latin2_conv_base]); + } #if 0 if ((enc == NSSymbolStringEncoding)) @@ -123,6 +131,18 @@ encode_unitochar(unichar u, NSStringEncoding enc) } } + if ((enc == NSISOLatin2StringEncoding)) + { + if (u <(unichar)Latin2_conv_base) + return (char)u; + else + { + while (((res = u-Latin2_uni_to_char_table[i++].from) > 0) + && (i < Latin2_uni_to_char_table_size)); + return res ? 0 : Latin2_uni_to_char_table[--i].to; + } + } + #if 0 if ((enc == NSSymbolStringEncoding)) {