CharacterEncoderImplementations__MS_Ansi.st
changeset 11000 2cc8e7ba3be6
parent 9269 f629c9eafec6
child 14203 b19842b57af5
child 17711 39faaaf888b4
--- a/CharacterEncoderImplementations__MS_Ansi.st	Tue May 06 22:17:51 2008 +0200
+++ b/CharacterEncoderImplementations__MS_Ansi.st	Wed May 07 16:46:49 2008 +0200
@@ -9,7 +9,6 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 "
-
 "{ Package: 'stx:libbasic' }"
 
 "{ NameSpace: CharacterEncoderImplementations }"
@@ -330,279 +329,294 @@
 decode:codeArg
     |code "{ Class: SmallInteger }"|
 
-    code := codeArg.
-    code <= 16r7F ifTrue:[ ^ code ].
-    code > 16rFF ifTrue:[
-        ^ codeArg.
-    ].
-    [
-        |t|
-        t := #(
-           "16r0080"    16r0000 " invalid " 
-           "16r0081"    16r0000 " invalid " 
-           "16r0082"    16r201A " SINGLE LOW-9 QUOTATION MARK " 
-           "16r0083"    16r0192 " LATIN SMALL LETTER F WITH HOOK " 
-           "16r0084"    16r201E " DOUBLE LOW-9 QUOTATION MARK " 
-           "16r0085"    16r2026 " HORIZONTAL ELLIPSIS " 
-           "16r0086"    16r2020 " DAGGER " 
-           "16r0087"    16r2021 " DOUBLE DAGGER " 
-           "16r0088"    16r02C6 " MODIFIER LETTER CIRCUMFLEX ACCENT " 
-           "16r0089"    16r2030 " PER MILLE SIGN " 
-           "16r008A"    16r0160 " LATIN CAPITAL LETTER S WITH CARON " 
-           "16r008B"    16r2039 " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
-           "16r008C"    16r0152 " LATIN CAPITAL LIGATURE OE " 
-           "16r008D"    16r0000 " invalid " 
-           "16r008E"    16r0000 " invalid " 
-           "16r008F"    16r0000 " invalid " 
-           "16r0090"    16r0000 " invalid " 
-           "16r0091"    16r2018 " LEFT SINGLE QUOTATION MARK " 
-           "16r0092"    16r2019 " RIGHT SINGLE QUOTATION MARK " 
-           "16r0093"    16r201C " LEFT DOUBLE QUOTATION MARK " 
-           "16r0094"    16r201D " RIGHT DOUBLE QUOTATION MARK " 
-           "16r0095"    16r2022 " BULLET " 
-           "16r0096"    16r2013 " EN DASH " 
-           "16r0097"    16r2014 " EM DASH " 
-           "16r0098"    16r02DC " SMALL TILDE " 
-           "16r0099"    16r2122 " TRADE MARK SIGN " 
-           "16r009A"    16r0161 " LATIN SMALL LETTER S WITH CARON " 
-           "16r009B"    16r203A " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
-           "16r009C"    16r0153 " LATIN SMALL LIGATURE OE " 
-           "16r009D"    16r0000 " invalid " 
-           "16r009E"    16r0000 " invalid " 
-           "16r009F"    16r0178 " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
-           "16r00A0"    16r00A0 " NO-BREAK SPACE " 
-           "16r00A1"    16r00A1 " INVERTED EXCLAMATION MARK " 
-           "16r00A2"    16r00A2 " CENT SIGN " 
-           "16r00A3"    16r00A3 " POUND SIGN " 
-           "16r00A4"    16r00A4 " CURRENCY SIGN " 
-           "16r00A5"    16r00A5 " YEN SIGN " 
-           "16r00A6"    16r00A6 " BROKEN BAR " 
-           "16r00A7"    16r00A7 " SECTION SIGN " 
-           "16r00A8"    16r00A8 " DIAERESIS " 
-           "16r00A9"    16r00A9 " COPYRIGHT SIGN " 
-           "16r00AA"    16r00AA " FEMININE ORDINAL INDICATOR " 
-           "16r00AB"    16r00AB " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
-           "16r00AC"    16r00AC " NOT SIGN " 
-           "16r00AD"    16r00AD " SOFT HYPHEN " 
-           "16r00AE"    16r00AE " REGISTERED SIGN " 
-           "16r00AF"    16r00AF " MACRON " 
-           "16r00B0"    16r00B0 " DEGREE SIGN " 
-           "16r00B1"    16r00B1 " PLUS-MINUS SIGN " 
-           "16r00B2"    16r00B2 " SUPERSCRIPT TWO " 
-           "16r00B3"    16r00B3 " SUPERSCRIPT THREE " 
-           "16r00B4"    16r00B4 " ACUTE ACCENT " 
-           "16r00B5"    16r00B5 " MICRO SIGN " 
-           "16r00B6"    16r00B6 " PILCROW SIGN " 
-           "16r00B7"    16r00B7 " MIDDLE DOT " 
-           "16r00B8"    16r00B8 " CEDILLA " 
-           "16r00B9"    16r00B9 " SUPERSCRIPT ONE " 
-           "16r00BA"    16r00BA " MASCULINE ORDINAL INDICATOR " 
-           "16r00BB"    16r00BB " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
-           "16r00BC"    16r00BC " VULGAR FRACTION ONE QUARTER " 
-           "16r00BD"    16r00BD " VULGAR FRACTION ONE HALF " 
-           "16r00BE"    16r00BE " VULGAR FRACTION THREE QUARTERS " 
-           "16r00BF"    16r00BF " INVERTED QUESTION MARK " 
-           "16r00C0"    16r00C0 " LATIN CAPITAL LETTER A WITH GRAVE " 
-           "16r00C1"    16r00C1 " LATIN CAPITAL LETTER A WITH ACUTE " 
-           "16r00C2"    16r00C2 " LATIN CAPITAL LETTER A WITH CIRCUMFLEX " 
-           "16r00C3"    16r00C3 " LATIN CAPITAL LETTER A WITH TILDE " 
-           "16r00C4"    16r00C4 " LATIN CAPITAL LETTER A WITH DIAERESIS " 
-           "16r00C5"    16r00C5 " LATIN CAPITAL LETTER A WITH RING ABOVE " 
-           "16r00C6"    16r00C6 " LATIN CAPITAL LETTER AE " 
-           "16r00C7"    16r00C7 " LATIN CAPITAL LETTER C WITH CEDILLA " 
-           "16r00C8"    16r00C8 " LATIN CAPITAL LETTER E WITH GRAVE " 
-           "16r00C9"    16r00C9 " LATIN CAPITAL LETTER E WITH ACUTE " 
-           "16r00CA"    16r00CA " LATIN CAPITAL LETTER E WITH CIRCUMFLEX " 
-           "16r00CB"    16r00CB " LATIN CAPITAL LETTER E WITH DIAERESIS " 
-           "16r00CC"    16r00CC " LATIN CAPITAL LETTER I WITH GRAVE " 
-           "16r00CD"    16r00CD " LATIN CAPITAL LETTER I WITH ACUTE " 
-           "16r00CE"    16r00CE " LATIN CAPITAL LETTER I WITH CIRCUMFLEX " 
-           "16r00CF"    16r00CF " LATIN CAPITAL LETTER I WITH DIAERESIS " 
-           "16r00D0"    16r00D0 " LATIN CAPITAL LETTER ETH (Icelandic) " 
-           "16r00D1"    16r00D1 " LATIN CAPITAL LETTER N WITH TILDE " 
-           "16r00D2"    16r00D2 " LATIN CAPITAL LETTER O WITH GRAVE " 
-           "16r00D3"    16r00D3 " LATIN CAPITAL LETTER O WITH ACUTE " 
-           "16r00D4"    16r00D4 " LATIN CAPITAL LETTER O WITH CIRCUMFLEX " 
-           "16r00D5"    16r00D5 " LATIN CAPITAL LETTER O WITH TILDE " 
-           "16r00D6"    16r00D6 " LATIN CAPITAL LETTER O WITH DIAERESIS " 
-           "16r00D7"    16r00D7 " MULTIPLICATION SIGN " 
-           "16r00D8"    16r00D8 " LATIN CAPITAL LETTER O WITH STROKE " 
-           "16r00D9"    16r00D9 " LATIN CAPITAL LETTER U WITH GRAVE " 
-           "16r00DA"    16r00DA " LATIN CAPITAL LETTER U WITH ACUTE " 
-           "16r00DB"    16r00DB " LATIN CAPITAL LETTER U WITH CIRCUMFLEX " 
-           "16r00DC"    16r00DC " LATIN CAPITAL LETTER U WITH DIAERESIS " 
-           "16r00DD"    16r00DD " LATIN CAPITAL LETTER Y WITH ACUTE " 
-           "16r00DE"    16r00DE " LATIN CAPITAL LETTER THORN (Icelandic) " 
-           "16r00DF"    16r00DF " LATIN SMALL LETTER SHARP S (German) " 
-           "16r00E0"    16r00E0 " LATIN SMALL LETTER A WITH GRAVE " 
-           "16r00E1"    16r00E1 " LATIN SMALL LETTER A WITH ACUTE " 
-           "16r00E2"    16r00E2 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
-           "16r00E3"    16r00E3 " LATIN SMALL LETTER A WITH TILDE " 
-           "16r00E4"    16r00E4 " LATIN SMALL LETTER A WITH DIAERESIS " 
-           "16r00E5"    16r00E5 " LATIN SMALL LETTER A WITH RING ABOVE " 
-           "16r00E6"    16r00E6 " LATIN SMALL LETTER AE " 
-           "16r00E7"    16r00E7 " LATIN SMALL LETTER C WITH CEDILLA " 
-           "16r00E8"    16r00E8 " LATIN SMALL LETTER E WITH GRAVE " 
-           "16r00E9"    16r00E9 " LATIN SMALL LETTER E WITH ACUTE " 
-           "16r00EA"    16r00EA " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
-           "16r00EB"    16r00EB " LATIN SMALL LETTER E WITH DIAERESIS " 
-           "16r00EC"    16r00EC " LATIN SMALL LETTER I WITH GRAVE " 
-           "16r00ED"    16r00ED " LATIN SMALL LETTER I WITH ACUTE " 
-           "16r00EE"    16r00EE " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
-           "16r00EF"    16r00EF " LATIN SMALL LETTER I WITH DIAERESIS " 
-           "16r00F0"    16r00F0 " LATIN SMALL LETTER ETH (Icelandic) " 
-           "16r00F1"    16r00F1 " LATIN SMALL LETTER N WITH TILDE " 
-           "16r00F2"    16r00F2 " LATIN SMALL LETTER O WITH GRAVE " 
-           "16r00F3"    16r00F3 " LATIN SMALL LETTER O WITH ACUTE " 
-           "16r00F4"    16r00F4 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
-           "16r00F5"    16r00F5 " LATIN SMALL LETTER O WITH TILDE " 
-           "16r00F6"    16r00F6 " LATIN SMALL LETTER O WITH DIAERESIS " 
-           "16r00F7"    16r00F7 " DIVISION SIGN " 
-           "16r00F8"    16r00F8 " LATIN SMALL LETTER O WITH STROKE " 
-           "16r00F9"    16r00F9 " LATIN SMALL LETTER U WITH GRAVE " 
-           "16r00FA"    16r00FA " LATIN SMALL LETTER U WITH ACUTE " 
-           "16r00FB"    16r00FB " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
-           "16r00FC"    16r00FC " LATIN SMALL LETTER U WITH DIAERESIS " 
-           "16r00FD"    16r00FD " LATIN SMALL LETTER Y WITH ACUTE " 
-           "16r00FE"    16r00FE " LATIN SMALL LETTER THORN (Icelandic) " 
-           "16r00FF"    16r00FF " LATIN SMALL LETTER Y WITH DIAERESIS " 
-           ) at:(code - 16r7F).
-        t == 0 ifFalse:[^ t].
-        ^ self decodingError.
-    ] value.
+    "/ mh - it seems that microsoft has fixed ms-ansi to be unicode compatible
+    "/ with XP, Vista etc.
+    "/ as W95 is not supported anyhow, simply return identity here...
+    ^ codeArg.
+
+"/    code := codeArg.
+"/    code <= 16r7F ifTrue:[ ^ code ].
+"/    code > 16rFF ifTrue:[
+"/        ^ codeArg.
+"/    ].
+"/    [
+"/        |t|
+"/        t := #(
+"/           "16r0080"    16r0000 " invalid " 
+"/           "16r0081"    16r0000 " invalid " 
+"/           "16r0082"    16r201A " SINGLE LOW-9 QUOTATION MARK " 
+"/           "16r0083"    16r0192 " LATIN SMALL LETTER F WITH HOOK " 
+"/           "16r0084"    16r201E " DOUBLE LOW-9 QUOTATION MARK " 
+"/           "16r0085"    16r2026 " HORIZONTAL ELLIPSIS " 
+"/           "16r0086"    16r2020 " DAGGER " 
+"/           "16r0087"    16r2021 " DOUBLE DAGGER " 
+"/           "16r0088"    16r02C6 " MODIFIER LETTER CIRCUMFLEX ACCENT " 
+"/           "16r0089"    16r2030 " PER MILLE SIGN " 
+"/           "16r008A"    16r0160 " LATIN CAPITAL LETTER S WITH CARON " 
+"/           "16r008B"    16r2039 " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
+"/           "16r008C"    16r0152 " LATIN CAPITAL LIGATURE OE " 
+"/           "16r008D"    16r0000 " invalid " 
+"/           "16r008E"    16r0000 " invalid " 
+"/           "16r008F"    16r0000 " invalid " 
+"/           "16r0090"    16r0000 " invalid " 
+"/           "16r0091"    16r2018 " LEFT SINGLE QUOTATION MARK " 
+"/           "16r0092"    16r2019 " RIGHT SINGLE QUOTATION MARK " 
+"/           "16r0093"    16r201C " LEFT DOUBLE QUOTATION MARK " 
+"/           "16r0094"    16r201D " RIGHT DOUBLE QUOTATION MARK " 
+"/           "16r0095"    16r2022 " BULLET " 
+"/           "16r0096"    16r2013 " EN DASH " 
+"/           "16r0097"    16r2014 " EM DASH " 
+"/           "16r0098"    16r02DC " SMALL TILDE " 
+"/           "16r0099"    16r2122 " TRADE MARK SIGN " 
+"/           "16r009A"    16r0161 " LATIN SMALL LETTER S WITH CARON " 
+"/           "16r009B"    16r203A " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
+"/           "16r009C"    16r0153 " LATIN SMALL LIGATURE OE " 
+"/           "16r009D"    16r0000 " invalid " 
+"/           "16r009E"    16r0000 " invalid " 
+"/           "16r009F"    16r0178 " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
+"/           "16r00A0"    16r00A0 " NO-BREAK SPACE " 
+"/           "16r00A1"    16r00A1 " INVERTED EXCLAMATION MARK " 
+"/           "16r00A2"    16r00A2 " CENT SIGN " 
+"/           "16r00A3"    16r00A3 " POUND SIGN " 
+"/           "16r00A4"    16r00A4 " CURRENCY SIGN " 
+"/           "16r00A5"    16r00A5 " YEN SIGN " 
+"/           "16r00A6"    16r00A6 " BROKEN BAR " 
+"/           "16r00A7"    16r00A7 " SECTION SIGN " 
+"/           "16r00A8"    16r00A8 " DIAERESIS " 
+"/           "16r00A9"    16r00A9 " COPYRIGHT SIGN " 
+"/           "16r00AA"    16r00AA " FEMININE ORDINAL INDICATOR " 
+"/           "16r00AB"    16r00AB " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+"/           "16r00AC"    16r00AC " NOT SIGN " 
+"/           "16r00AD"    16r00AD " SOFT HYPHEN " 
+"/           "16r00AE"    16r00AE " REGISTERED SIGN " 
+"/           "16r00AF"    16r00AF " MACRON " 
+"/           "16r00B0"    16r00B0 " DEGREE SIGN " 
+"/           "16r00B1"    16r00B1 " PLUS-MINUS SIGN " 
+"/           "16r00B2"    16r00B2 " SUPERSCRIPT TWO " 
+"/           "16r00B3"    16r00B3 " SUPERSCRIPT THREE " 
+"/           "16r00B4"    16r00B4 " ACUTE ACCENT " 
+"/           "16r00B5"    16r00B5 " MICRO SIGN " 
+"/           "16r00B6"    16r00B6 " PILCROW SIGN " 
+"/           "16r00B7"    16r00B7 " MIDDLE DOT " 
+"/           "16r00B8"    16r00B8 " CEDILLA " 
+"/           "16r00B9"    16r00B9 " SUPERSCRIPT ONE " 
+"/           "16r00BA"    16r00BA " MASCULINE ORDINAL INDICATOR " 
+"/           "16r00BB"    16r00BB " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+"/           "16r00BC"    16r00BC " VULGAR FRACTION ONE QUARTER " 
+"/           "16r00BD"    16r00BD " VULGAR FRACTION ONE HALF " 
+"/           "16r00BE"    16r00BE " VULGAR FRACTION THREE QUARTERS " 
+"/           "16r00BF"    16r00BF " INVERTED QUESTION MARK " 
+"/           "16r00C0"    16r00C0 " LATIN CAPITAL LETTER A WITH GRAVE " 
+"/           "16r00C1"    16r00C1 " LATIN CAPITAL LETTER A WITH ACUTE " 
+"/           "16r00C2"    16r00C2 " LATIN CAPITAL LETTER A WITH CIRCUMFLEX " 
+"/           "16r00C3"    16r00C3 " LATIN CAPITAL LETTER A WITH TILDE " 
+"/           "16r00C4"    16r00C4 " LATIN CAPITAL LETTER A WITH DIAERESIS " 
+"/           "16r00C5"    16r00C5 " LATIN CAPITAL LETTER A WITH RING ABOVE " 
+"/           "16r00C6"    16r00C6 " LATIN CAPITAL LETTER AE " 
+"/           "16r00C7"    16r00C7 " LATIN CAPITAL LETTER C WITH CEDILLA " 
+"/           "16r00C8"    16r00C8 " LATIN CAPITAL LETTER E WITH GRAVE " 
+"/           "16r00C9"    16r00C9 " LATIN CAPITAL LETTER E WITH ACUTE " 
+"/           "16r00CA"    16r00CA " LATIN CAPITAL LETTER E WITH CIRCUMFLEX " 
+"/           "16r00CB"    16r00CB " LATIN CAPITAL LETTER E WITH DIAERESIS " 
+"/           "16r00CC"    16r00CC " LATIN CAPITAL LETTER I WITH GRAVE " 
+"/           "16r00CD"    16r00CD " LATIN CAPITAL LETTER I WITH ACUTE " 
+"/           "16r00CE"    16r00CE " LATIN CAPITAL LETTER I WITH CIRCUMFLEX " 
+"/           "16r00CF"    16r00CF " LATIN CAPITAL LETTER I WITH DIAERESIS " 
+"/           "16r00D0"    16r00D0 " LATIN CAPITAL LETTER ETH (Icelandic) " 
+"/           "16r00D1"    16r00D1 " LATIN CAPITAL LETTER N WITH TILDE " 
+"/           "16r00D2"    16r00D2 " LATIN CAPITAL LETTER O WITH GRAVE " 
+"/           "16r00D3"    16r00D3 " LATIN CAPITAL LETTER O WITH ACUTE " 
+"/           "16r00D4"    16r00D4 " LATIN CAPITAL LETTER O WITH CIRCUMFLEX " 
+"/           "16r00D5"    16r00D5 " LATIN CAPITAL LETTER O WITH TILDE " 
+"/           "16r00D6"    16r00D6 " LATIN CAPITAL LETTER O WITH DIAERESIS " 
+"/           "16r00D7"    16r00D7 " MULTIPLICATION SIGN " 
+"/           "16r00D8"    16r00D8 " LATIN CAPITAL LETTER O WITH STROKE " 
+"/           "16r00D9"    16r00D9 " LATIN CAPITAL LETTER U WITH GRAVE " 
+"/           "16r00DA"    16r00DA " LATIN CAPITAL LETTER U WITH ACUTE " 
+"/           "16r00DB"    16r00DB " LATIN CAPITAL LETTER U WITH CIRCUMFLEX " 
+"/           "16r00DC"    16r00DC " LATIN CAPITAL LETTER U WITH DIAERESIS " 
+"/           "16r00DD"    16r00DD " LATIN CAPITAL LETTER Y WITH ACUTE " 
+"/           "16r00DE"    16r00DE " LATIN CAPITAL LETTER THORN (Icelandic) " 
+"/           "16r00DF"    16r00DF " LATIN SMALL LETTER SHARP S (German) " 
+"/           "16r00E0"    16r00E0 " LATIN SMALL LETTER A WITH GRAVE " 
+"/           "16r00E1"    16r00E1 " LATIN SMALL LETTER A WITH ACUTE " 
+"/           "16r00E2"    16r00E2 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
+"/           "16r00E3"    16r00E3 " LATIN SMALL LETTER A WITH TILDE " 
+"/           "16r00E4"    16r00E4 " LATIN SMALL LETTER A WITH DIAERESIS " 
+"/           "16r00E5"    16r00E5 " LATIN SMALL LETTER A WITH RING ABOVE " 
+"/           "16r00E6"    16r00E6 " LATIN SMALL LETTER AE " 
+"/           "16r00E7"    16r00E7 " LATIN SMALL LETTER C WITH CEDILLA " 
+"/           "16r00E8"    16r00E8 " LATIN SMALL LETTER E WITH GRAVE " 
+"/           "16r00E9"    16r00E9 " LATIN SMALL LETTER E WITH ACUTE " 
+"/           "16r00EA"    16r00EA " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
+"/           "16r00EB"    16r00EB " LATIN SMALL LETTER E WITH DIAERESIS " 
+"/           "16r00EC"    16r00EC " LATIN SMALL LETTER I WITH GRAVE " 
+"/           "16r00ED"    16r00ED " LATIN SMALL LETTER I WITH ACUTE " 
+"/           "16r00EE"    16r00EE " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
+"/           "16r00EF"    16r00EF " LATIN SMALL LETTER I WITH DIAERESIS " 
+"/           "16r00F0"    16r00F0 " LATIN SMALL LETTER ETH (Icelandic) " 
+"/           "16r00F1"    16r00F1 " LATIN SMALL LETTER N WITH TILDE " 
+"/           "16r00F2"    16r00F2 " LATIN SMALL LETTER O WITH GRAVE " 
+"/           "16r00F3"    16r00F3 " LATIN SMALL LETTER O WITH ACUTE " 
+"/           "16r00F4"    16r00F4 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
+"/           "16r00F5"    16r00F5 " LATIN SMALL LETTER O WITH TILDE " 
+"/           "16r00F6"    16r00F6 " LATIN SMALL LETTER O WITH DIAERESIS " 
+"/           "16r00F7"    16r00F7 " DIVISION SIGN " 
+"/           "16r00F8"    16r00F8 " LATIN SMALL LETTER O WITH STROKE " 
+"/           "16r00F9"    16r00F9 " LATIN SMALL LETTER U WITH GRAVE " 
+"/           "16r00FA"    16r00FA " LATIN SMALL LETTER U WITH ACUTE " 
+"/           "16r00FB"    16r00FB " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
+"/           "16r00FC"    16r00FC " LATIN SMALL LETTER U WITH DIAERESIS " 
+"/           "16r00FD"    16r00FD " LATIN SMALL LETTER Y WITH ACUTE " 
+"/           "16r00FE"    16r00FE " LATIN SMALL LETTER THORN (Icelandic) " 
+"/           "16r00FF"    16r00FF " LATIN SMALL LETTER Y WITH DIAERESIS " 
+"/           ) at:(code - 16r7F).
+"/        t == 0 ifFalse:[^ t].
+"/        ^ self decodingError.
+"/    ] value.
 !
 
 encode:unicodeArg
     |unicode "{ Class: SmallInteger }"|
 
-    unicode := unicodeArg.
-    unicode > 16r2122 ifTrue:[
-        ^ unicode.
-    ].
-    unicode <= 16r151 ifTrue:[
-        ^ unicode
-    ].
-    unicode <= 16r2DC ifTrue:[
-        unicode <= 16r192 ifTrue:[
-            unicode <= 16r178 ifTrue:[
-                unicode <= 16r161 ifTrue:[
-                    [
-                        |t|
-                        t := #[
-                           "16r0152"    16r8C " LATIN CAPITAL LIGATURE OE " 
-                           "16r0153"    16r9C " LATIN SMALL LIGATURE OE " 
-                           "16r0154"    16r00 " invalid " 
-                           "16r0155"    16r00 " invalid " 
-                           "16r0156"    16r00 " invalid " 
-                           "16r0157"    16r00 " invalid " 
-                           "16r0158"    16r00 " invalid " 
-                           "16r0159"    16r00 " invalid " 
-                           "16r015A"    16r00 " invalid " 
-                           "16r015B"    16r00 " invalid " 
-                           "16r015C"    16r00 " invalid " 
-                           "16r015D"    16r00 " invalid " 
-                           "16r015E"    16r00 " invalid " 
-                           "16r015F"    16r00 " invalid " 
-                           "16r0160"    16r8A " LATIN CAPITAL LETTER S WITH CARON " 
-                           "16r0161"    16r9A " LATIN SMALL LETTER S WITH CARON " 
-                           ] at:(unicode - 16r151).
-                        t == 0 ifFalse:[^ t].
-                        ^ unicode
-                    ] value.
-                ].
-                unicode <= 16r177 ifTrue:[
-                    ^ unicode
-                ].
-                ^  "16r0178" 16r009F " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
-            ].
-            unicode <= 16r191 ifTrue:[
-                ^ unicode
-            ].
-            ^  "16r0192" 16r0083 " LATIN SMALL LETTER F WITH HOOK " 
-        ].
-        unicode <= 16r2C5 ifTrue:[
-            ^ unicode
-        ].
-        unicode == 16r2C6 ifTrue:[
-            ^  "16r02C6" 16r0088 " MODIFIER LETTER CIRCUMFLEX ACCENT " 
-        ].
-        unicode <= 16r2DB ifTrue:[
-            ^ unicode
-        ].
-        ^  "16r02DC" 16r0098 " SMALL TILDE " 
-    ].
-    unicode <= 16r2012 ifTrue:[
-        ^ unicode
-    ].
-    unicode <= 16r203A ifTrue:[
-        [
-            |t|
-            t := #[
-               "16r2013"    16r96 " EN DASH " 
-               "16r2014"    16r97 " EM DASH " 
-               "16r2015"    16r00 " invalid " 
-               "16r2016"    16r00 " invalid " 
-               "16r2017"    16r00 " invalid " 
-               "16r2018"    16r91 " LEFT SINGLE QUOTATION MARK " 
-               "16r2019"    16r92 " RIGHT SINGLE QUOTATION MARK " 
-               "16r201A"    16r82 " SINGLE LOW-9 QUOTATION MARK " 
-               "16r201B"    16r00 " invalid " 
-               "16r201C"    16r93 " LEFT DOUBLE QUOTATION MARK " 
-               "16r201D"    16r94 " RIGHT DOUBLE QUOTATION MARK " 
-               "16r201E"    16r84 " DOUBLE LOW-9 QUOTATION MARK " 
-               "16r201F"    16r00 " invalid " 
-               "16r2020"    16r86 " DAGGER " 
-               "16r2021"    16r87 " DOUBLE DAGGER " 
-               "16r2022"    16r95 " BULLET " 
-               "16r2023"    16r00 " invalid " 
-               "16r2024"    16r00 " invalid " 
-               "16r2025"    16r00 " invalid " 
-               "16r2026"    16r85 " HORIZONTAL ELLIPSIS " 
-               "16r2027"    16r00 " invalid " 
-               "16r2028"    16r00 " invalid " 
-               "16r2029"    16r00 " invalid " 
-               "16r202A"    16r00 " invalid " 
-               "16r202B"    16r00 " invalid " 
-               "16r202C"    16r00 " invalid " 
-               "16r202D"    16r00 " invalid " 
-               "16r202E"    16r00 " invalid " 
-               "16r202F"    16r00 " invalid " 
-               "16r2030"    16r89 " PER MILLE SIGN " 
-               "16r2031"    16r00 " invalid " 
-               "16r2032"    16r00 " invalid " 
-               "16r2033"    16r00 " invalid " 
-               "16r2034"    16r00 " invalid " 
-               "16r2035"    16r00 " invalid " 
-               "16r2036"    16r00 " invalid " 
-               "16r2037"    16r00 " invalid " 
-               "16r2038"    16r00 " invalid " 
-               "16r2039"    16r8B " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
-               "16r203A"    16r9B " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
-               ] at:(unicode - 16r2012).
-            t == 0 ifFalse:[^ t].
-            ^ unicode
-        ] value.
-    ].
-    unicode <= 16r2121 ifTrue:[
-        ^ unicode
-    ].
-    ^  "16r2122" 16r0099 " TRADE MARK SIGN " 
+    "/ mh - it seems that microsoft has fixed ms-ansi to be unicode compatible
+    "/ with XP, Vista etc.
+    "/ as W95 is not supported anyhow, simply return identity here...
+    ^ unicodeArg.
+
+"/    unicode := unicodeArg.
+"/    unicode > 16r2122 ifTrue:[
+"/        ^ unicode.
+"/    ].
+"/    unicode <= 16r151 ifTrue:[
+"/        ^ unicode
+"/    ].
+"/    unicode <= 16r2DC ifTrue:[
+"/        unicode <= 16r192 ifTrue:[
+"/            unicode <= 16r178 ifTrue:[
+"/                unicode <= 16r161 ifTrue:[
+"/                    [
+"/                        |t|
+"/                        t := #[
+"/                           "16r0152"    16r8C " LATIN CAPITAL LIGATURE OE " 
+"/                           "16r0153"    16r9C " LATIN SMALL LIGATURE OE " 
+"/                           "16r0154"    16r00 " invalid " 
+"/                           "16r0155"    16r00 " invalid " 
+"/                           "16r0156"    16r00 " invalid " 
+"/                           "16r0157"    16r00 " invalid " 
+"/                           "16r0158"    16r00 " invalid " 
+"/                           "16r0159"    16r00 " invalid " 
+"/                           "16r015A"    16r00 " invalid " 
+"/                           "16r015B"    16r00 " invalid " 
+"/                           "16r015C"    16r00 " invalid " 
+"/                           "16r015D"    16r00 " invalid " 
+"/                           "16r015E"    16r00 " invalid " 
+"/                           "16r015F"    16r00 " invalid " 
+"/                           "16r0160"    16r8A " LATIN CAPITAL LETTER S WITH CARON " 
+"/                           "16r0161"    16r9A " LATIN SMALL LETTER S WITH CARON " 
+"/                           ] at:(unicode - 16r151).
+"/                        t == 0 ifFalse:[^ t].
+"/                        ^ unicode
+"/                    ] value.
+"/                ].
+"/                unicode <= 16r177 ifTrue:[
+"/                    ^ unicode
+"/                ].
+"/                ^  "16r0178" 16r009F " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
+"/            ].
+"/            unicode <= 16r191 ifTrue:[
+"/                ^ unicode
+"/            ].
+"/            ^  "16r0192" 16r0083 " LATIN SMALL LETTER F WITH HOOK " 
+"/        ].
+"/        unicode <= 16r2C5 ifTrue:[
+"/            ^ unicode
+"/        ].
+"/        unicode == 16r2C6 ifTrue:[
+"/            ^  "16r02C6" 16r0088 " MODIFIER LETTER CIRCUMFLEX ACCENT " 
+"/        ].
+"/        unicode <= 16r2DB ifTrue:[
+"/            ^ unicode
+"/        ].
+"/        ^  "16r02DC" 16r0098 " SMALL TILDE " 
+"/    ].
+"/    unicode <= 16r2012 ifTrue:[
+"/        ^ unicode
+"/    ].
+"/    unicode <= 16r203A ifTrue:[
+"/        [
+"/            |t|
+"/            t := #(
+"/               "16r2013"    16r2013 "16r96" " EN DASH " 
+"/               "16r2014"    16r2014 "16r97" " EM DASH " 
+"/               "16r2015"    16r00 " invalid " 
+"/               "16r2016"    16r00 " invalid " 
+"/               "16r2017"    16r00 " invalid " 
+"/               "16r2018"    16r91 " LEFT SINGLE QUOTATION MARK " 
+"/               "16r2019"    16r92 " RIGHT SINGLE QUOTATION MARK " 
+"/               "16r201A"    16r82 " SINGLE LOW-9 QUOTATION MARK " 
+"/               "16r201B"    16r00 " invalid " 
+"/               "16r201C"    16r93 " LEFT DOUBLE QUOTATION MARK " 
+"/               "16r201D"    16r94 " RIGHT DOUBLE QUOTATION MARK " 
+"/               "16r201E"    16r84 " DOUBLE LOW-9 QUOTATION MARK " 
+"/               "16r201F"    16r00 " invalid " 
+"/               "16r2020"    16r86 " DAGGER " 
+"/               "16r2021"    16r87 " DOUBLE DAGGER " 
+"/               "16r2022"    16r95 " BULLET " 
+"/               "16r2023"    16r00 " invalid " 
+"/               "16r2024"    16r00 " invalid " 
+"/               "16r2025"    16r00 " invalid " 
+"/               "16r2026"    16r85 " HORIZONTAL ELLIPSIS " 
+"/               "16r2027"    16r00 " invalid " 
+"/               "16r2028"    16r00 " invalid " 
+"/               "16r2029"    16r00 " invalid " 
+"/               "16r202A"    16r00 " invalid " 
+"/               "16r202B"    16r00 " invalid " 
+"/               "16r202C"    16r00 " invalid " 
+"/               "16r202D"    16r00 " invalid " 
+"/               "16r202E"    16r00 " invalid " 
+"/               "16r202F"    16r00 " invalid " 
+"/               "16r2030"    16r89 " PER MILLE SIGN " 
+"/               "16r2031"    16r00 " invalid " 
+"/               "16r2032"    16r00 " invalid " 
+"/               "16r2033"    16r00 " invalid " 
+"/               "16r2034"    16r00 " invalid " 
+"/               "16r2035"    16r00 " invalid " 
+"/               "16r2036"    16r00 " invalid " 
+"/               "16r2037"    16r00 " invalid " 
+"/               "16r2038"    16r00 " invalid " 
+"/               "16r2039"    16r8B " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
+"/               "16r203A"    16r9B " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
+"/               ) at:(unicode - 16r2012).
+"/            t == 0 ifFalse:[^ t].
+"/            ^ unicode
+"/        ] value.
+"/    ].
+"/    unicode <= 16r2121 ifTrue:[
+"/        ^ unicode
+"/    ].
+"/    ^  "16r2122" 16r0099 " TRADE MARK SIGN " 
 !
 
 encodeString:aStringOrUnicodeString
     "redefined to speedup simple 8 bit strings"
 
-    aStringOrUnicodeString bitsPerCharacter == 8 ifTrue:[
-        "/ all between 0 and FF
-        (aStringOrUnicodeString contains8BitCharacters) ifFalse:[
-             ^ aStringOrUnicodeString
-        ]
-    ].
-    ^ super encodeString:aStringOrUnicodeString
+    "/ mh - it seems that microsoft has fixed ms-ansi to be unicode compatible
+    "/ with XP, Vista etc.
+    "/ as W95 is not supported anyhow, simply return identity here...
+    ^ aStringOrUnicodeString.
+
+"/    aStringOrUnicodeString bitsPerCharacter == 8 ifTrue:[
+"/        "/ all between 0 and FF
+"/        (aStringOrUnicodeString contains8BitCharacters) ifFalse:[
+"/             ^ aStringOrUnicodeString
+"/        ]
+"/    ].
+"/    ^ super encodeString:aStringOrUnicodeString
 ! !
 
 !MS_Ansi class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__MS_Ansi.st,v 1.6 2006-03-13 16:07:07 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__MS_Ansi.st,v 1.7 2008-05-07 14:46:49 mb Exp $'
 ! !