CharacterEncoder.st
changeset 7938 a53aae4a05bb
parent 7932 ee233bf44df5
child 7941 60b266e1fb8c
--- a/CharacterEncoder.st	Thu Feb 12 19:03:12 2004 +0100
+++ b/CharacterEncoder.st	Thu Feb 12 19:37:17 2004 +0100
@@ -10,7 +10,7 @@
  hereby transferred.
 "
 
-"{ Package: 'stx:libcompat' }"
+"{ Package: 'stx:libbasic' }"
 
 Object subclass:#CharacterEncoder
 	instanceVariableNames:'name alternativeNames'
@@ -201,7 +201,7 @@
 	privateIn:CharacterEncoder
 !
 
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_9
+CharacterEncoder::ISO8859_1 subclass:#ISO8859_9
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -868,15 +868,36 @@
     ^ #()
 !
 
-isEncoding:subSet subSetOf:superSet
-    subSet = superSet ifTrue:[^ true].
-    (subSet asLowercase match:superSet asLowercase) ifTrue:[^ true].
-    ((subSet = 'iso8859*') or:[subSet = 'iso8859-*']) ifTrue:[
-	('ascii*' match:superSet asLowercase) ifTrue:[^ true].
-    ].
-    (subSet = 'ascii') ifTrue:[
-	('iso8859*' match:superSet asLowercase) ifTrue:[^ true].
-    ].
+isEncoding:subSetEncodingArg subSetOf:superSetEncodingArg
+    "return true, if superSetEncoding encoding includes all characters of subSetEncoding"
+
+    |subSetEncoding superSetEncoding|
+
+    subSetEncodingArg = superSetEncodingArg ifTrue:[^ true].
+    subSetEncoding := subSetEncodingArg asLowercase.
+    superSetEncoding := superSetEncodingArg asLowercase.
+
+    (subSetEncoding match:superSetEncoding) ifTrue:[^ true].
+
+    (('iso10646*' match:superSetEncoding) or:[superSetEncoding = 'unicode']) ifTrue:[
+        ('ascii*' match:subSetEncoding) ifTrue:[^ true].
+        ('iso8859*' match:subSetEncoding) ifTrue:[^ true].
+        ('jis*' match:subSetEncoding) ifTrue:[^ true].
+        ('koi8*' match:subSetEncoding) ifTrue:[^ true].
+        ('ksc*' match:subSetEncoding) ifTrue:[^ true].
+        ('big*' match:subSetEncoding) ifTrue:[^ true].
+        ('cns*' match:subSetEncoding) ifTrue:[^ true].
+        ('gb2312*' match:subSetEncoding) ifTrue:[^ true].
+    ].
+
+    "/ if the subSet is iso8859-*, that means ascii (i.e. the lower 7 bits of iso8859 only).
+    ((subSetEncoding = 'iso8859*') or:[subSetEncoding = 'iso8859-*']) ifTrue:[
+        ('ascii*' match:superSetEncoding) ifTrue:[^ true].
+    ].
+    (subSetEncoding = 'ascii') ifTrue:[
+        ('iso8859*' match:superSetEncoding) ifTrue:[^ true].
+    ].
+
     "/ TODO: check the charSets mappingTables...
     "/ self halt.
     ^ false.
@@ -1022,14 +1043,14 @@
 
     sender := thisContext sender.
     ((sender selector == #encode:) or:[sender selector == #decode:]) ifFalse:[
-	badCodePoint := sender argAt:1
+        badCodePoint := sender methodHome argAt:1
     ].
     ^ (EncodingFailedError new)
-	defaultValue:(self defaultDecoderValue);
-	parameter:badCodePoint;
-	errorString:'invalid code'; 
-	suspendedContext:sender;
-	raiseRequest
+        defaultValue:(self defaultDecoderValue);
+        parameter:badCodePoint;
+        errorString:'invalid code'; 
+        suspendedContext:sender;
+        raiseRequest
 !
 
 defaultDecoderValue
@@ -1055,14 +1076,14 @@
 
     sender := thisContext sender.
     ((sender selector == #encode:) or:[sender selector == #decode:]) ifFalse:[
-	badCodePoint := sender argAt:1
+        badCodePoint := sender methodHome argAt:1
     ].
     ^ (EncodingFailedError new)
-	defaultValue:(self defaultEncoderValue);
-	parameter:badCodePoint;
-	errorString:'unrepresentable unicode'; 
-	suspendedContext:sender;
-	raiseRequest
+        defaultValue:(self defaultEncoderValue);
+        parameter:badCodePoint;
+        errorString:'unrepresentable unicode'; 
+        suspendedContext:sender;
+        raiseRequest
 ! !
 
 !CharacterEncoder methodsFor:'private'!
@@ -2017,7 +2038,7 @@
 !CharacterEncoder::ISO10646_1 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'unicode' )
+    ^ #( 'unicode' 'iso-10646-1' )
 !
 
 nameOfEncoding
@@ -2623,7 +2644,7 @@
 !CharacterEncoder::ISO8859_1 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'latin-1' 'latin1' 'iso-ir-100' 'ibm-819' 'ms-cp819')
+    ^ #( 'iso-8859-1' 'latin-1' 'latin1' 'iso-ir-100' 'ibm-819' 'ms-cp819' )
 ! !
 
 !CharacterEncoder::ISO8859_1 methodsFor:'encoding & decoding'!
@@ -2980,7 +3001,7 @@
 !CharacterEncoder::ISO8859_10 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'latin6' 'latin-6' 'iso-ir-157')
+    ^ #( 'iso-8859-10' 'latin6' 'latin-6' 'iso-ir-157')
 ! !
 
 !CharacterEncoder::ISO8859_10 methodsFor:'encoding & decoding'!
@@ -3659,6 +3680,12 @@
 "
 ! !
 
+!CharacterEncoder::ISO8859_11 class methodsFor:'queries'!
+
+alternativeNamesOfEncoding
+    ^ #( 'iso-8859-11' )
+! !
+
 !CharacterEncoder::ISO8859_11 methodsFor:'encoding & decoding'!
 
 decode:codeArg
@@ -4199,6 +4226,12 @@
 "
 ! !
 
+!CharacterEncoder::ISO8859_13 class methodsFor:'queries'!
+
+alternativeNamesOfEncoding
+    ^ #( 'iso-8859-13' )
+! !
+
 !CharacterEncoder::ISO8859_13 methodsFor:'encoding & decoding'!
 
 decode:codeArg
@@ -4886,6 +4919,12 @@
 "
 ! !
 
+!CharacterEncoder::ISO8859_14 class methodsFor:'queries'!
+
+alternativeNamesOfEncoding
+    ^ #( 'iso-8859-14' )
+! !
+
 !CharacterEncoder::ISO8859_14 methodsFor:'encoding & decoding'!
 
 decode:codeArg
@@ -5619,7 +5658,7 @@
 !CharacterEncoder::ISO8859_15 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'latin9' 'latin-9' 'iso-ir-203')
+    ^ #( 'iso-8859-15' 'latin9' 'latin-9' 'iso-ir-203')
 ! !
 
 !CharacterEncoder::ISO8859_15 methodsFor:'encoding & decoding'!
@@ -6205,6 +6244,12 @@
 "
 ! !
 
+!CharacterEncoder::ISO8859_16 class methodsFor:'queries'!
+
+alternativeNamesOfEncoding
+    ^ #( 'iso-8859-16' )
+! !
+
 !CharacterEncoder::ISO8859_16 methodsFor:'encoding & decoding'!
 
 decode:codeArg
@@ -6889,7 +6934,7 @@
 !CharacterEncoder::ISO8859_2 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'latin2' 'latin-2' 'iso-ir-101')
+    ^ #( 'iso-8859-2' 'latin2' 'latin-2' 'iso-ir-101')
 ! !
 
 !CharacterEncoder::ISO8859_2 methodsFor:'encoding & decoding'!
@@ -7588,7 +7633,7 @@
 !CharacterEncoder::ISO8859_3 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'latin3' 'latin-3' 'iso-ir-109')
+    ^ #( 'iso-8859-3' 'latin3' 'latin-3' 'iso-ir-109')
 ! !
 
 !CharacterEncoder::ISO8859_3 methodsFor:'encoding & decoding'!
@@ -8247,7 +8292,7 @@
 !CharacterEncoder::ISO8859_4 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'latin4' 'latin-4' 'iso-ir-110')
+    ^ #( 'iso-8859-4' 'latin4' 'latin-4' 'iso-ir-110')
 ! !
 
 !CharacterEncoder::ISO8859_4 methodsFor:'encoding & decoding'!
@@ -8950,7 +8995,7 @@
 !CharacterEncoder::ISO8859_5 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'cyrillic' 'iso-ir-144' )
+    ^ #( 'iso-8859-5' 'cyrillic' 'iso-ir-144' )
 ! !
 
 !CharacterEncoder::ISO8859_5 methodsFor:'encoding & decoding'!
@@ -9488,7 +9533,7 @@
 !CharacterEncoder::ISO8859_6 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'arabic' 'asmo-708' 'ecma-114' 'iso-ir-127' )
+    ^ #( 'iso-8859-6' 'arabic' 'asmo-708' 'ecma-114' 'iso-ir-127' )
 ! !
 
 !CharacterEncoder::ISO8859_6 methodsFor:'encoding & decoding'!
@@ -10036,7 +10081,7 @@
 !CharacterEncoder::ISO8859_7 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'greek' 'iso-ir-126' 'ecma-118')
+    ^ #( 'iso-8859-7' 'greek' 'iso-ir-126' 'ecma-118')
 ! !
 
 !CharacterEncoder::ISO8859_7 methodsFor:'encoding & decoding'!
@@ -10621,7 +10666,7 @@
 !CharacterEncoder::ISO8859_8 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'hebrew' 'iso-ir-138' )
+    ^ #( 'iso-8859-8' 'hebrew' 'iso-ir-138' )
 ! !
 
 !CharacterEncoder::ISO8859_8 methodsFor:'encoding & decoding'!
@@ -11162,7 +11207,7 @@
 !CharacterEncoder::ISO8859_9 class methodsFor:'queries'!
 
 alternativeNamesOfEncoding
-    ^ #( 'latin5' 'latin-5' 'iso-ir-148')
+    ^ #( 'iso-8859-9' 'latin5' 'latin-5' 'iso-ir-148')
 ! !
 
 !CharacterEncoder::ISO8859_9 methodsFor:'encoding & decoding'!
@@ -11174,60 +11219,29 @@
     |code "{ Class: SmallInteger }"|
 
     code := codeArg.
-    code <= 16rCF ifTrue:[ ^ code ].
-    code > 16rFF ifTrue:[
-	^ self decodingError.
-    ].
-    ^ #(
-       "16r00D0"    16r011E " LATIN CAPITAL LETTER G WITH BREVE " 
-       "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"    16r0130 " LATIN CAPITAL LETTER I WITH DOT ABOVE " 
-       "16r00DE"    16r015E " LATIN CAPITAL LETTER S WITH CEDILLA " 
-       "16r00DF"    16r00DF " LATIN SMALL LETTER SHARP S " 
-       "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"    16r011F " LATIN SMALL LETTER G WITH BREVE " 
-       "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"    16r0131 " LATIN SMALL LETTER DOTLESS I " 
-       "16r00FE"    16r015F " LATIN SMALL LETTER S WITH CEDILLA " 
-       "16r00FF"    16r00FF " LATIN SMALL LETTER Y WITH DIAERESIS " 
-       ) at:(code - 16rCF).
+    code > 16rCF ifTrue:[
+        code <= 16rFE ifTrue:[
+            code == 16rD0 ifTrue:[
+                ^  "16r00D0" 16r011E " LATIN CAPITAL LETTER G WITH BREVE " 
+            ].
+            code == 16rDD ifTrue:[
+                ^  "16r00DD" 16r0130 " LATIN CAPITAL LETTER I WITH DOT ABOVE " 
+            ].
+            code == 16rDE ifTrue:[
+                ^  "16r00DE" 16r015E " LATIN CAPITAL LETTER S WITH CEDILLA " 
+            ].
+            code == 16rF0 ifTrue:[
+                ^  "16r00F0" 16r011F " LATIN SMALL LETTER G WITH BREVE " 
+            ].
+            code == 16rFD ifTrue:[
+                ^  "16r00FD" 16r0131 " LATIN SMALL LETTER DOTLESS I " 
+            ].
+            code == 16rFE ifTrue:[
+                ^  "16r00FE" 16r015F " LATIN SMALL LETTER S WITH CEDILLA " 
+            ].
+        ].
+    ].
+    ^ super decode:code
 !
 
 encode:unicodeArg
@@ -11237,88 +11251,35 @@
     |unicode "{ Class: SmallInteger }"|
 
     unicode := unicodeArg.
-    unicode <= 16rCF ifTrue:[ ^ unicode ].
-    unicode > 16r15F ifTrue:[
-	^ self encodingError.
-    ].
-    unicode <= 16r131 ifTrue:[
-	unicode <= 16rFF ifTrue:[
-		(#[
-		   "16r00D0"    0 " invalid " 
-		   "16r00D1"    1 " LATIN CAPITAL LETTER N WITH TILDE " 
-		   "16r00D2"    1 " LATIN CAPITAL LETTER O WITH GRAVE " 
-		   "16r00D3"    1 " LATIN CAPITAL LETTER O WITH ACUTE " 
-		   "16r00D4"    1 " LATIN CAPITAL LETTER O WITH CIRCUMFLEX " 
-		   "16r00D5"    1 " LATIN CAPITAL LETTER O WITH TILDE " 
-		   "16r00D6"    1 " LATIN CAPITAL LETTER O WITH DIAERESIS " 
-		   "16r00D7"    1 " MULTIPLICATION SIGN " 
-		   "16r00D8"    1 " LATIN CAPITAL LETTER O WITH STROKE " 
-		   "16r00D9"    1 " LATIN CAPITAL LETTER U WITH GRAVE " 
-		   "16r00DA"    1 " LATIN CAPITAL LETTER U WITH ACUTE " 
-		   "16r00DB"    1 " LATIN CAPITAL LETTER U WITH CIRCUMFLEX " 
-		   "16r00DC"    1 " LATIN CAPITAL LETTER U WITH DIAERESIS " 
-		   "16r00DD"    0 " invalid " 
-		   "16r00DE"    0 " invalid " 
-		   "16r00DF"    1 " LATIN SMALL LETTER SHARP S " 
-		   "16r00E0"    1 " LATIN SMALL LETTER A WITH GRAVE " 
-		   "16r00E1"    1 " LATIN SMALL LETTER A WITH ACUTE " 
-		   "16r00E2"    1 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
-		   "16r00E3"    1 " LATIN SMALL LETTER A WITH TILDE " 
-		   "16r00E4"    1 " LATIN SMALL LETTER A WITH DIAERESIS " 
-		   "16r00E5"    1 " LATIN SMALL LETTER A WITH RING ABOVE " 
-		   "16r00E6"    1 " LATIN SMALL LETTER AE " 
-		   "16r00E7"    1 " LATIN SMALL LETTER C WITH CEDILLA " 
-		   "16r00E8"    1 " LATIN SMALL LETTER E WITH GRAVE " 
-		   "16r00E9"    1 " LATIN SMALL LETTER E WITH ACUTE " 
-		   "16r00EA"    1 " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
-		   "16r00EB"    1 " LATIN SMALL LETTER E WITH DIAERESIS " 
-		   "16r00EC"    1 " LATIN SMALL LETTER I WITH GRAVE " 
-		   "16r00ED"    1 " LATIN SMALL LETTER I WITH ACUTE " 
-		   "16r00EE"    1 " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
-		   "16r00EF"    1 " LATIN SMALL LETTER I WITH DIAERESIS " 
-		   "16r00F0"    0 " invalid " 
-		   "16r00F1"    1 " LATIN SMALL LETTER N WITH TILDE " 
-		   "16r00F2"    1 " LATIN SMALL LETTER O WITH GRAVE " 
-		   "16r00F3"    1 " LATIN SMALL LETTER O WITH ACUTE " 
-		   "16r00F4"    1 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
-		   "16r00F5"    1 " LATIN SMALL LETTER O WITH TILDE " 
-		   "16r00F6"    1 " LATIN SMALL LETTER O WITH DIAERESIS " 
-		   "16r00F7"    1 " DIVISION SIGN " 
-		   "16r00F8"    1 " LATIN SMALL LETTER O WITH STROKE " 
-		   "16r00F9"    1 " LATIN SMALL LETTER U WITH GRAVE " 
-		   "16r00FA"    1 " LATIN SMALL LETTER U WITH ACUTE " 
-		   "16r00FB"    1 " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
-		   "16r00FC"    1 " LATIN SMALL LETTER U WITH DIAERESIS " 
-		   "16r00FD"    0 " invalid " 
-		   "16r00FE"    0 " invalid " 
-		   "16r00FF"    1 " LATIN SMALL LETTER Y WITH DIAERESIS " 
-		] at:(unicode - 207)) ~~ 0 ifTrue:[^ unicode].
-		^ self encodingError.
-	].
-	unicode <= 16r11D ifTrue:[
-	    ^ self encodingError.
-	].
-	unicode <= 16r11F ifTrue:[
-	    ^ #[
-	       "16r011E"    16rD0 " LATIN CAPITAL LETTER G WITH BREVE " 
-	       "16r011F"    16rF0 " LATIN SMALL LETTER G WITH BREVE " 
-	       ] at:(unicode - 16r11D).
-	].
-	unicode <= 16r12F ifTrue:[
-	    ^ self encodingError.
-	].
-	^ #[
-	   "16r0130"    16rDD " LATIN CAPITAL LETTER I WITH DOT ABOVE " 
-	   "16r0131"    16rFD " LATIN SMALL LETTER DOTLESS I " 
-	   ] at:(unicode - 16r12F).
-    ].
-    unicode <= 16r15D ifTrue:[
-	^ self encodingError.
-    ].
-    ^ #[
-       "16r015E"    16rDE " LATIN CAPITAL LETTER S WITH CEDILLA " 
-       "16r015F"    16rFE " LATIN SMALL LETTER S WITH CEDILLA " 
-       ] at:(unicode - 16r15D).
+    unicode > 16rCF ifTrue:[
+        ((unicode == 16rDD)
+         or:[(unicode == 16rDE)
+         or:[(unicode == 16rF0)
+         or:[(unicode == 16rD0)
+         or:[(unicode == 16rFD)
+         or:[(unicode == 16rFE)]]]]]) ifTrue:[
+            ^ self decodingError.
+        ].
+        unicode == 16r11E ifTrue:[
+            ^  "16r011E" 16r00D0 " LATIN CAPITAL LETTER G WITH BREVE " 
+        ].
+        unicode == 16r11F ifTrue:[
+            ^  "16r011F" 16r00F0 " LATIN SMALL LETTER G WITH BREVE " 
+        ].
+        unicode == 16r130 ifTrue:[
+            ^  "16r0130" 16r00DD " LATIN CAPITAL LETTER I WITH DOT ABOVE " 
+        ].
+        unicode == 16r131 ifTrue:[
+            ^  "16r0131" 16r00FD " LATIN SMALL LETTER DOTLESS I " 
+        ].
+        unicode == 16r15E ifTrue:[
+            ^  "16r015E" 16r00DE " LATIN CAPITAL LETTER S WITH CEDILLA " 
+        ].
+        unicode == 16r15F ifTrue:[
+            ^  "16r015F" 16r00FE " LATIN SMALL LETTER S WITH CEDILLA " 
+        ].
+    ].
+    ^ super encode:unicode
 ! !
 
 !CharacterEncoder::InverseEncoder class methodsFor:'documentation'!
@@ -45179,6 +45140,450 @@
 "
 ! !
 
+!CharacterEncoder::MAC_Greek methodsFor:'encoding & decoding'!
+
+decode:codeArg
+    "Automagically generated by generateCode - do not modify.
+     Decode from my encoding into unicode."
+
+    |code "{ Class: SmallInteger }"|
+
+    code := codeArg.
+    code <= 16r1F ifTrue:[
+        ^ self decodingError.
+    ].
+    code <= 16r7E ifTrue:[ ^ code ].
+    code > 16rFF ifTrue:[
+        ^ self decodingError.
+    ].
+    [
+        |t|
+        t := #(
+           "16r007F"    16r0000 " invalid " 
+           "16r0080"    16r00C4 " LATIN CAPITAL LETTER A WITH DIAERESIS " 
+           "16r0081"    16r00B9 " SUPERSCRIPT ONE " 
+           "16r0082"    16r00B2 " SUPERSCRIPT TWO " 
+           "16r0083"    16r00C9 " LATIN CAPITAL LETTER E WITH ACUTE " 
+           "16r0084"    16r00B3 " SUPERSCRIPT THREE " 
+           "16r0085"    16r00D6 " LATIN CAPITAL LETTER O WITH DIAERESIS " 
+           "16r0086"    16r00DC " LATIN CAPITAL LETTER U WITH DIAERESIS " 
+           "16r0087"    16r0385 " GREEK DIALYTIKA TONOS " 
+           "16r0088"    16r00E0 " LATIN SMALL LETTER A WITH GRAVE " 
+           "16r0089"    16r00E2 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
+           "16r008A"    16r00E4 " LATIN SMALL LETTER A WITH DIAERESIS " 
+           "16r008B"    16r0384 " GREEK TONOS " 
+           "16r008C"    16r00A8 " DIAERESIS " 
+           "16r008D"    16r00E7 " LATIN SMALL LETTER C WITH CEDILLA " 
+           "16r008E"    16r00E9 " LATIN SMALL LETTER E WITH ACUTE " 
+           "16r008F"    16r00E8 " LATIN SMALL LETTER E WITH GRAVE " 
+           "16r0090"    16r00EA " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
+           "16r0091"    16r00EB " LATIN SMALL LETTER E WITH DIAERESIS " 
+           "16r0092"    16r00A3 " POUND SIGN " 
+           "16r0093"    16r2122 " TRADE MARK SIGN " 
+           "16r0094"    16r00EE " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
+           "16r0095"    16r00EF " LATIN SMALL LETTER I WITH DIAERESIS " 
+           "16r0096"    16r2022 " BULLET " 
+           "16r0097"    16r00BD " VULGAR FRACTION ONE HALF " 
+           "16r0098"    16r2030 " PER MILLE SIGN " 
+           "16r0099"    16r00F4 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
+           "16r009A"    16r00F6 " LATIN SMALL LETTER O WITH DIAERESIS " 
+           "16r009B"    16r00A6 " BROKEN BAR " 
+           "16r009C"    16r20AC " EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN " 
+           "16r009D"    16r00F9 " LATIN SMALL LETTER U WITH GRAVE " 
+           "16r009E"    16r00FB " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
+           "16r009F"    16r00FC " LATIN SMALL LETTER U WITH DIAERESIS " 
+           "16r00A0"    16r2020 " DAGGER " 
+           "16r00A1"    16r0393 " GREEK CAPITAL LETTER GAMMA " 
+           "16r00A2"    16r0394 " GREEK CAPITAL LETTER DELTA " 
+           "16r00A3"    16r0398 " GREEK CAPITAL LETTER THETA " 
+           "16r00A4"    16r039B " GREEK CAPITAL LETTER LAMDA " 
+           "16r00A5"    16r039E " GREEK CAPITAL LETTER XI " 
+           "16r00A6"    16r03A0 " GREEK CAPITAL LETTER PI " 
+           "16r00A7"    16r00DF " LATIN SMALL LETTER SHARP S " 
+           "16r00A8"    16r00AE " REGISTERED SIGN " 
+           "16r00A9"    16r00A9 " COPYRIGHT SIGN " 
+           "16r00AA"    16r03A3 " GREEK CAPITAL LETTER SIGMA " 
+           "16r00AB"    16r03AA " GREEK CAPITAL LETTER IOTA WITH DIALYTIKA " 
+           "16r00AC"    16r00A7 " SECTION SIGN " 
+           "16r00AD"    16r2260 " NOT EQUAL TO " 
+           "16r00AE"    16r00B0 " DEGREE SIGN " 
+           "16r00AF"    16r00B7 " MIDDLE DOT " 
+           "16r00B0"    16r0391 " GREEK CAPITAL LETTER ALPHA " 
+           "16r00B1"    16r00B1 " PLUS-MINUS SIGN " 
+           "16r00B2"    16r2264 " LESS-THAN OR EQUAL TO " 
+           "16r00B3"    16r2265 " GREATER-THAN OR EQUAL TO " 
+           "16r00B4"    16r00A5 " YEN SIGN " 
+           "16r00B5"    16r0392 " GREEK CAPITAL LETTER BETA " 
+           "16r00B6"    16r0395 " GREEK CAPITAL LETTER EPSILON " 
+           "16r00B7"    16r0396 " GREEK CAPITAL LETTER ZETA " 
+           "16r00B8"    16r0397 " GREEK CAPITAL LETTER ETA " 
+           "16r00B9"    16r0399 " GREEK CAPITAL LETTER IOTA " 
+           "16r00BA"    16r039A " GREEK CAPITAL LETTER KAPPA " 
+           "16r00BB"    16r039C " GREEK CAPITAL LETTER MU " 
+           "16r00BC"    16r03A6 " GREEK CAPITAL LETTER PHI " 
+           "16r00BD"    16r03AB " GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA " 
+           "16r00BE"    16r03A8 " GREEK CAPITAL LETTER PSI " 
+           "16r00BF"    16r03A9 " GREEK CAPITAL LETTER OMEGA " 
+           "16r00C0"    16r03AC " GREEK SMALL LETTER ALPHA WITH TONOS " 
+           "16r00C1"    16r039D " GREEK CAPITAL LETTER NU " 
+           "16r00C2"    16r00AC " NOT SIGN " 
+           "16r00C3"    16r039F " GREEK CAPITAL LETTER OMICRON " 
+           "16r00C4"    16r03A1 " GREEK CAPITAL LETTER RHO " 
+           "16r00C5"    16r2248 " ALMOST EQUAL TO " 
+           "16r00C6"    16r03A4 " GREEK CAPITAL LETTER TAU " 
+           "16r00C7"    16r00AB " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+           "16r00C8"    16r00BB " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+           "16r00C9"    16r2026 " HORIZONTAL ELLIPSIS " 
+           "16r00CA"    16r00A0 " NO-BREAK SPACE " 
+           "16r00CB"    16r03A5 " GREEK CAPITAL LETTER UPSILON " 
+           "16r00CC"    16r03A7 " GREEK CAPITAL LETTER CHI " 
+           "16r00CD"    16r0386 " GREEK CAPITAL LETTER ALPHA WITH TONOS " 
+           "16r00CE"    16r0388 " GREEK CAPITAL LETTER EPSILON WITH TONOS " 
+           "16r00CF"    16r0153 " LATIN SMALL LIGATURE OE " 
+           "16r00D0"    16r2013 " EN DASH " 
+           "16r00D1"    16r2015 " HORIZONTAL BAR " 
+           "16r00D2"    16r201C " LEFT DOUBLE QUOTATION MARK " 
+           "16r00D3"    16r201D " RIGHT DOUBLE QUOTATION MARK " 
+           "16r00D4"    16r2018 " LEFT SINGLE QUOTATION MARK " 
+           "16r00D5"    16r2019 " RIGHT SINGLE QUOTATION MARK " 
+           "16r00D6"    16r00F7 " DIVISION SIGN " 
+           "16r00D7"    16r0389 " GREEK CAPITAL LETTER ETA WITH TONOS " 
+           "16r00D8"    16r038A " GREEK CAPITAL LETTER IOTA WITH TONOS " 
+           "16r00D9"    16r038C " GREEK CAPITAL LETTER OMICRON WITH TONOS " 
+           "16r00DA"    16r038E " GREEK CAPITAL LETTER UPSILON WITH TONOS " 
+           "16r00DB"    16r03AD " GREEK SMALL LETTER EPSILON WITH TONOS " 
+           "16r00DC"    16r03AE " GREEK SMALL LETTER ETA WITH TONOS " 
+           "16r00DD"    16r03AF " GREEK SMALL LETTER IOTA WITH TONOS " 
+           "16r00DE"    16r03CC " GREEK SMALL LETTER OMICRON WITH TONOS " 
+           "16r00DF"    16r038F " GREEK CAPITAL LETTER OMEGA WITH TONOS " 
+           "16r00E0"    16r03CD " GREEK SMALL LETTER UPSILON WITH TONOS " 
+           "16r00E1"    16r03B1 " GREEK SMALL LETTER ALPHA " 
+           "16r00E2"    16r03B2 " GREEK SMALL LETTER BETA " 
+           "16r00E3"    16r03C8 " GREEK SMALL LETTER PSI " 
+           "16r00E4"    16r03B4 " GREEK SMALL LETTER DELTA " 
+           "16r00E5"    16r03B5 " GREEK SMALL LETTER EPSILON " 
+           "16r00E6"    16r03C6 " GREEK SMALL LETTER PHI " 
+           "16r00E7"    16r03B3 " GREEK SMALL LETTER GAMMA " 
+           "16r00E8"    16r03B7 " GREEK SMALL LETTER ETA " 
+           "16r00E9"    16r03B9 " GREEK SMALL LETTER IOTA " 
+           "16r00EA"    16r03BE " GREEK SMALL LETTER XI " 
+           "16r00EB"    16r03BA " GREEK SMALL LETTER KAPPA " 
+           "16r00EC"    16r03BB " GREEK SMALL LETTER LAMDA " 
+           "16r00ED"    16r03BC " GREEK SMALL LETTER MU " 
+           "16r00EE"    16r03BD " GREEK SMALL LETTER NU " 
+           "16r00EF"    16r03BF " GREEK SMALL LETTER OMICRON " 
+           "16r00F0"    16r03C0 " GREEK SMALL LETTER PI " 
+           "16r00F1"    16r03CE " GREEK SMALL LETTER OMEGA WITH TONOS " 
+           "16r00F2"    16r03C1 " GREEK SMALL LETTER RHO " 
+           "16r00F3"    16r03C3 " GREEK SMALL LETTER SIGMA " 
+           "16r00F4"    16r03C4 " GREEK SMALL LETTER TAU " 
+           "16r00F5"    16r03B8 " GREEK SMALL LETTER THETA " 
+           "16r00F6"    16r03C9 " GREEK SMALL LETTER OMEGA " 
+           "16r00F7"    16r03C2 " GREEK SMALL LETTER FINAL SIGMA " 
+           "16r00F8"    16r03C7 " GREEK SMALL LETTER CHI " 
+           "16r00F9"    16r03C5 " GREEK SMALL LETTER UPSILON " 
+           "16r00FA"    16r03B6 " GREEK SMALL LETTER ZETA " 
+           "16r00FB"    16r03CA " GREEK SMALL LETTER IOTA WITH DIALYTIKA " 
+           "16r00FC"    16r03CB " GREEK SMALL LETTER UPSILON WITH DIALYTIKA " 
+           "16r00FD"    16r0390 " GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS " 
+           "16r00FE"    16r03B0 " GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS " 
+           "16r00FF"    16r00AD " SOFT HYPHEN # before Mac OS 9.2.2, was undefined " 
+           ) at:(code - 16r7E).
+        t == 0 ifFalse:[^ t].
+        ^ self decodingError.
+    ] value.
+!
+
+encode:unicodeArg
+    "Automagically generated by generateCode - do not modify.
+     Encode from unicode into my encoding."
+
+    |unicode "{ Class: SmallInteger }"|
+
+    unicode := unicodeArg.
+    unicode <= 16r1F ifTrue:[
+        ^ self decodingError.
+    ].
+    unicode <= 16r7E ifTrue:[ ^ unicode ].
+    unicode > 16r2265 ifTrue:[
+        ^ self encodingError.
+    ].
+    unicode <= 16r9F ifTrue:[
+        ^ self encodingError
+    ].
+    unicode <= 16r3CE ifTrue:[
+        unicode <= 16r153 ifTrue:[
+            unicode <= 16rFC ifTrue:[
+                [
+                    |t|
+                    t := #[
+                       "16r00A0"    16rCA " NO-BREAK SPACE " 
+                       "16r00A1"    16r00 " invalid " 
+                       "16r00A2"    16r00 " invalid " 
+                       "16r00A3"    16r92 " POUND SIGN " 
+                       "16r00A4"    16r00 " invalid " 
+                       "16r00A5"    16rB4 " YEN SIGN " 
+                       "16r00A6"    16r9B " BROKEN BAR " 
+                       "16r00A7"    16rAC " SECTION SIGN " 
+                       "16r00A8"    16r8C " DIAERESIS " 
+                       "16r00A9"    16rA9 " COPYRIGHT SIGN " 
+                       "16r00AA"    16r00 " invalid " 
+                       "16r00AB"    16rC7 " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+                       "16r00AC"    16rC2 " NOT SIGN " 
+                       "16r00AD"    16rFF " SOFT HYPHEN # before Mac OS 9.2.2, was undefined " 
+                       "16r00AE"    16rA8 " REGISTERED SIGN " 
+                       "16r00AF"    16r00 " invalid " 
+                       "16r00B0"    16rAE " DEGREE SIGN " 
+                       "16r00B1"    16rB1 " PLUS-MINUS SIGN " 
+                       "16r00B2"    16r82 " SUPERSCRIPT TWO " 
+                       "16r00B3"    16r84 " SUPERSCRIPT THREE " 
+                       "16r00B4"    16r00 " invalid " 
+                       "16r00B5"    16r00 " invalid " 
+                       "16r00B6"    16r00 " invalid " 
+                       "16r00B7"    16rAF " MIDDLE DOT " 
+                       "16r00B8"    16r00 " invalid " 
+                       "16r00B9"    16r81 " SUPERSCRIPT ONE " 
+                       "16r00BA"    16r00 " invalid " 
+                       "16r00BB"    16rC8 " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+                       "16r00BC"    16r00 " invalid " 
+                       "16r00BD"    16r97 " VULGAR FRACTION ONE HALF " 
+                       "16r00BE"    16r00 " invalid " 
+                       "16r00BF"    16r00 " invalid " 
+                       "16r00C0"    16r00 " invalid " 
+                       "16r00C1"    16r00 " invalid " 
+                       "16r00C2"    16r00 " invalid " 
+                       "16r00C3"    16r00 " invalid " 
+                       "16r00C4"    16r80 " LATIN CAPITAL LETTER A WITH DIAERESIS " 
+                       "16r00C5"    16r00 " invalid " 
+                       "16r00C6"    16r00 " invalid " 
+                       "16r00C7"    16r00 " invalid " 
+                       "16r00C8"    16r00 " invalid " 
+                       "16r00C9"    16r83 " LATIN CAPITAL LETTER E WITH ACUTE " 
+                       "16r00CA"    16r00 " invalid " 
+                       "16r00CB"    16r00 " invalid " 
+                       "16r00CC"    16r00 " invalid " 
+                       "16r00CD"    16r00 " invalid " 
+                       "16r00CE"    16r00 " invalid " 
+                       "16r00CF"    16r00 " invalid " 
+                       "16r00D0"    16r00 " invalid " 
+                       "16r00D1"    16r00 " invalid " 
+                       "16r00D2"    16r00 " invalid " 
+                       "16r00D3"    16r00 " invalid " 
+                       "16r00D4"    16r00 " invalid " 
+                       "16r00D5"    16r00 " invalid " 
+                       "16r00D6"    16r85 " LATIN CAPITAL LETTER O WITH DIAERESIS " 
+                       "16r00D7"    16r00 " invalid " 
+                       "16r00D8"    16r00 " invalid " 
+                       "16r00D9"    16r00 " invalid " 
+                       "16r00DA"    16r00 " invalid " 
+                       "16r00DB"    16r00 " invalid " 
+                       "16r00DC"    16r86 " LATIN CAPITAL LETTER U WITH DIAERESIS " 
+                       "16r00DD"    16r00 " invalid " 
+                       "16r00DE"    16r00 " invalid " 
+                       "16r00DF"    16rA7 " LATIN SMALL LETTER SHARP S " 
+                       "16r00E0"    16r88 " LATIN SMALL LETTER A WITH GRAVE " 
+                       "16r00E1"    16r00 " invalid " 
+                       "16r00E2"    16r89 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
+                       "16r00E3"    16r00 " invalid " 
+                       "16r00E4"    16r8A " LATIN SMALL LETTER A WITH DIAERESIS " 
+                       "16r00E5"    16r00 " invalid " 
+                       "16r00E6"    16r00 " invalid " 
+                       "16r00E7"    16r8D " LATIN SMALL LETTER C WITH CEDILLA " 
+                       "16r00E8"    16r8F " LATIN SMALL LETTER E WITH GRAVE " 
+                       "16r00E9"    16r8E " LATIN SMALL LETTER E WITH ACUTE " 
+                       "16r00EA"    16r90 " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
+                       "16r00EB"    16r91 " LATIN SMALL LETTER E WITH DIAERESIS " 
+                       "16r00EC"    16r00 " invalid " 
+                       "16r00ED"    16r00 " invalid " 
+                       "16r00EE"    16r94 " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
+                       "16r00EF"    16r95 " LATIN SMALL LETTER I WITH DIAERESIS " 
+                       "16r00F0"    16r00 " invalid " 
+                       "16r00F1"    16r00 " invalid " 
+                       "16r00F2"    16r00 " invalid " 
+                       "16r00F3"    16r00 " invalid " 
+                       "16r00F4"    16r99 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
+                       "16r00F5"    16r00 " invalid " 
+                       "16r00F6"    16r9A " LATIN SMALL LETTER O WITH DIAERESIS " 
+                       "16r00F7"    16rD6 " DIVISION SIGN " 
+                       "16r00F8"    16r00 " invalid " 
+                       "16r00F9"    16r9D " LATIN SMALL LETTER U WITH GRAVE " 
+                       "16r00FA"    16r00 " invalid " 
+                       "16r00FB"    16r9E " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
+                       "16r00FC"    16r9F " LATIN SMALL LETTER U WITH DIAERESIS " 
+                       ] at:(unicode - 16r9F).
+                    t == 0 ifFalse:[^ t].
+                    ^ self encodingError
+                ] value.
+            ].
+            unicode <= 16r152 ifTrue:[
+                ^ self encodingError
+            ].
+            ^  "16r0153" 16r00CF " LATIN SMALL LIGATURE OE " 
+        ].
+        unicode <= 16r383 ifTrue:[
+            ^ self encodingError
+        ].
+        [
+            |t|
+            t := #[
+               "16r0384"    16r8B " GREEK TONOS " 
+               "16r0385"    16r87 " GREEK DIALYTIKA TONOS " 
+               "16r0386"    16rCD " GREEK CAPITAL LETTER ALPHA WITH TONOS " 
+               "16r0387"    16r00 " invalid " 
+               "16r0388"    16rCE " GREEK CAPITAL LETTER EPSILON WITH TONOS " 
+               "16r0389"    16rD7 " GREEK CAPITAL LETTER ETA WITH TONOS " 
+               "16r038A"    16rD8 " GREEK CAPITAL LETTER IOTA WITH TONOS " 
+               "16r038B"    16r00 " invalid " 
+               "16r038C"    16rD9 " GREEK CAPITAL LETTER OMICRON WITH TONOS " 
+               "16r038D"    16r00 " invalid " 
+               "16r038E"    16rDA " GREEK CAPITAL LETTER UPSILON WITH TONOS " 
+               "16r038F"    16rDF " GREEK CAPITAL LETTER OMEGA WITH TONOS " 
+               "16r0390"    16rFD " GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS " 
+               "16r0391"    16rB0 " GREEK CAPITAL LETTER ALPHA " 
+               "16r0392"    16rB5 " GREEK CAPITAL LETTER BETA " 
+               "16r0393"    16rA1 " GREEK CAPITAL LETTER GAMMA " 
+               "16r0394"    16rA2 " GREEK CAPITAL LETTER DELTA " 
+               "16r0395"    16rB6 " GREEK CAPITAL LETTER EPSILON " 
+               "16r0396"    16rB7 " GREEK CAPITAL LETTER ZETA " 
+               "16r0397"    16rB8 " GREEK CAPITAL LETTER ETA " 
+               "16r0398"    16rA3 " GREEK CAPITAL LETTER THETA " 
+               "16r0399"    16rB9 " GREEK CAPITAL LETTER IOTA " 
+               "16r039A"    16rBA " GREEK CAPITAL LETTER KAPPA " 
+               "16r039B"    16rA4 " GREEK CAPITAL LETTER LAMDA " 
+               "16r039C"    16rBB " GREEK CAPITAL LETTER MU " 
+               "16r039D"    16rC1 " GREEK CAPITAL LETTER NU " 
+               "16r039E"    16rA5 " GREEK CAPITAL LETTER XI " 
+               "16r039F"    16rC3 " GREEK CAPITAL LETTER OMICRON " 
+               "16r03A0"    16rA6 " GREEK CAPITAL LETTER PI " 
+               "16r03A1"    16rC4 " GREEK CAPITAL LETTER RHO " 
+               "16r03A2"    16r00 " invalid " 
+               "16r03A3"    16rAA " GREEK CAPITAL LETTER SIGMA " 
+               "16r03A4"    16rC6 " GREEK CAPITAL LETTER TAU " 
+               "16r03A5"    16rCB " GREEK CAPITAL LETTER UPSILON " 
+               "16r03A6"    16rBC " GREEK CAPITAL LETTER PHI " 
+               "16r03A7"    16rCC " GREEK CAPITAL LETTER CHI " 
+               "16r03A8"    16rBE " GREEK CAPITAL LETTER PSI " 
+               "16r03A9"    16rBF " GREEK CAPITAL LETTER OMEGA " 
+               "16r03AA"    16rAB " GREEK CAPITAL LETTER IOTA WITH DIALYTIKA " 
+               "16r03AB"    16rBD " GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA " 
+               "16r03AC"    16rC0 " GREEK SMALL LETTER ALPHA WITH TONOS " 
+               "16r03AD"    16rDB " GREEK SMALL LETTER EPSILON WITH TONOS " 
+               "16r03AE"    16rDC " GREEK SMALL LETTER ETA WITH TONOS " 
+               "16r03AF"    16rDD " GREEK SMALL LETTER IOTA WITH TONOS " 
+               "16r03B0"    16rFE " GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS " 
+               "16r03B1"    16rE1 " GREEK SMALL LETTER ALPHA " 
+               "16r03B2"    16rE2 " GREEK SMALL LETTER BETA " 
+               "16r03B3"    16rE7 " GREEK SMALL LETTER GAMMA " 
+               "16r03B4"    16rE4 " GREEK SMALL LETTER DELTA " 
+               "16r03B5"    16rE5 " GREEK SMALL LETTER EPSILON " 
+               "16r03B6"    16rFA " GREEK SMALL LETTER ZETA " 
+               "16r03B7"    16rE8 " GREEK SMALL LETTER ETA " 
+               "16r03B8"    16rF5 " GREEK SMALL LETTER THETA " 
+               "16r03B9"    16rE9 " GREEK SMALL LETTER IOTA " 
+               "16r03BA"    16rEB " GREEK SMALL LETTER KAPPA " 
+               "16r03BB"    16rEC " GREEK SMALL LETTER LAMDA " 
+               "16r03BC"    16rED " GREEK SMALL LETTER MU " 
+               "16r03BD"    16rEE " GREEK SMALL LETTER NU " 
+               "16r03BE"    16rEA " GREEK SMALL LETTER XI " 
+               "16r03BF"    16rEF " GREEK SMALL LETTER OMICRON " 
+               "16r03C0"    16rF0 " GREEK SMALL LETTER PI " 
+               "16r03C1"    16rF2 " GREEK SMALL LETTER RHO " 
+               "16r03C2"    16rF7 " GREEK SMALL LETTER FINAL SIGMA " 
+               "16r03C3"    16rF3 " GREEK SMALL LETTER SIGMA " 
+               "16r03C4"    16rF4 " GREEK SMALL LETTER TAU " 
+               "16r03C5"    16rF9 " GREEK SMALL LETTER UPSILON " 
+               "16r03C6"    16rE6 " GREEK SMALL LETTER PHI " 
+               "16r03C7"    16rF8 " GREEK SMALL LETTER CHI " 
+               "16r03C8"    16rE3 " GREEK SMALL LETTER PSI " 
+               "16r03C9"    16rF6 " GREEK SMALL LETTER OMEGA " 
+               "16r03CA"    16rFB " GREEK SMALL LETTER IOTA WITH DIALYTIKA " 
+               "16r03CB"    16rFC " GREEK SMALL LETTER UPSILON WITH DIALYTIKA " 
+               "16r03CC"    16rDE " GREEK SMALL LETTER OMICRON WITH TONOS " 
+               "16r03CD"    16rE0 " GREEK SMALL LETTER UPSILON WITH TONOS " 
+               "16r03CE"    16rF1 " GREEK SMALL LETTER OMEGA WITH TONOS " 
+               ] at:(unicode - 16r383).
+            t == 0 ifFalse:[^ t].
+            ^ self encodingError
+        ] value.
+    ].
+    unicode <= 16r2012 ifTrue:[
+        ^ self encodingError
+    ].
+    unicode <= 16r2122 ifTrue:[
+        unicode <= 16r2030 ifTrue:[
+            [
+                |t|
+                t := #[
+                   "16r2013"    16rD0 " EN DASH " 
+                   "16r2014"    16r00 " invalid " 
+                   "16r2015"    16rD1 " HORIZONTAL BAR " 
+                   "16r2016"    16r00 " invalid " 
+                   "16r2017"    16r00 " invalid " 
+                   "16r2018"    16rD4 " LEFT SINGLE QUOTATION MARK " 
+                   "16r2019"    16rD5 " RIGHT SINGLE QUOTATION MARK " 
+                   "16r201A"    16r00 " invalid " 
+                   "16r201B"    16r00 " invalid " 
+                   "16r201C"    16rD2 " LEFT DOUBLE QUOTATION MARK " 
+                   "16r201D"    16rD3 " RIGHT DOUBLE QUOTATION MARK " 
+                   "16r201E"    16r00 " invalid " 
+                   "16r201F"    16r00 " invalid " 
+                   "16r2020"    16rA0 " DAGGER " 
+                   "16r2021"    16r00 " invalid " 
+                   "16r2022"    16r96 " BULLET " 
+                   "16r2023"    16r00 " invalid " 
+                   "16r2024"    16r00 " invalid " 
+                   "16r2025"    16r00 " invalid " 
+                   "16r2026"    16rC9 " 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"    16r98 " PER MILLE SIGN " 
+                   ] at:(unicode - 16r2012).
+                t == 0 ifFalse:[^ t].
+                ^ self encodingError
+            ] value.
+        ].
+        unicode <= 16r20AB ifTrue:[
+            ^ self encodingError
+        ].
+        unicode == 16r20AC ifTrue:[
+            ^  "16r20AC" 16r009C " EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN " 
+        ].
+        unicode <= 16r2121 ifTrue:[
+            ^ self encodingError
+        ].
+        ^  "16r2122" 16r0093 " TRADE MARK SIGN " 
+    ].
+    unicode <= 16r2247 ifTrue:[
+        ^ self encodingError
+    ].
+    unicode == 16r2248 ifTrue:[
+        ^  "16r2248" 16r00C5 " ALMOST EQUAL TO " 
+    ].
+    unicode <= 16r225F ifTrue:[
+        ^ self encodingError
+    ].
+    [
+        |t|
+        t := #[
+           "16r2260"    16rAD " NOT EQUAL TO " 
+           "16r2261"    16r00 " invalid " 
+           "16r2262"    16r00 " invalid " 
+           "16r2263"    16r00 " invalid " 
+           "16r2264"    16rB2 " LESS-THAN OR EQUAL TO " 
+           "16r2265"    16rB3 " GREATER-THAN OR EQUAL TO " 
+           ] at:(unicode - 16r225F).
+        t == 0 ifFalse:[^ t].
+        ^ self encodingError
+    ] value.
+! !
+
 !CharacterEncoder::MAC_Hebrew class methodsFor:'mapping'!
 
 mapFileURL1_relativePathName
@@ -48763,6 +49168,511 @@
     ^ #( 'ms-arabic' 'ms-cp1256' 'cp1256'  'microsoft-arabic' )
 ! !
 
+!CharacterEncoder::MS_Arabic methodsFor:'encoding & decoding'!
+
+decode:codeArg
+    "Automagically generated by generateCode - do not modify.
+     Decode from my encoding into unicode."
+
+    |code "{ Class: SmallInteger }"|
+
+    code := codeArg.
+    code <= 16r7F ifTrue:[ ^ code ].
+    code > 16rFF ifTrue:[
+        ^ self decodingError.
+    ].
+    [
+        |t|
+        t := #(
+           "16r0080"    16r060C " ARABIC COMMA " 
+           "16r0081"    16r0660 " ARABIC-INDIC DIGIT ZERO " 
+           "16r0082"    16r201A " SINGLE LOW-9 QUOTATION MARK " 
+           "16r0083"    16r0661 " ARABIC-INDIC DIGIT ONE " 
+           "16r0084"    16r201E " DOUBLE LOW-9 QUOTATION MARK " 
+           "16r0085"    16r2026 " HORIZONTAL ELLIPSIS " 
+           "16r0086"    16r2020 " DAGGER " 
+           "16r0087"    16r2021 " DOUBLE DAGGER " 
+           "16r0088"    16r0662 " ARABIC-INDIC DIGIT TWO " 
+           "16r0089"    16r0663 " ARABIC-INDIC DIGIT THREE " 
+           "16r008A"    16r0664 " ARABIC-INDIC DIGIT FOUR " 
+           "16r008B"    16r2039 " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
+           "16r008C"    16r0665 " ARABIC-INDIC DIGIT FIVE " 
+           "16r008D"    16r0666 " ARABIC-INDIC DIGIT SIX " 
+           "16r008E"    16r0667 " ARABIC-INDIC DIGIT SEVEN " 
+           "16r008F"    16r0668 " ARABIC-INDIC DIGIT EIGHT " 
+           "16r0090"    16r0669 " ARABIC-INDIC DIGIT NINE " 
+           "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"    16r061B " ARABIC SEMICOLON " 
+           "16r0099"    16r2122 " TRADE MARK SIGN " 
+           "16r009A"    16r061F " ARABIC QUESTION MARK " 
+           "16r009B"    16r203A " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
+           "16r009C"    16r0621 " ARABIC LETTER HAMZA " 
+           "16r009D"    16r0622 " ARABIC LETTER ALEF WITH MADDA ABOVE " 
+           "16r009E"    16r0623 " ARABIC LETTER ALEF WITH HAMZA ABOVE " 
+           "16r009F"    16r0178 " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
+           "16r00A0"    16r00A0 " NO-BREAK SPACE " 
+           "16r00A1"    16r0624 " ARABIC LETTER WAW WITH HAMZA ABOVE " 
+           "16r00A2"    16r0625 " ARABIC LETTER ALEF WITH HAMZA BELOW " 
+           "16r00A3"    16r00A3 " POUND SIGN " 
+           "16r00A4"    16r00A4 " CURRENCY SIGN " 
+           "16r00A5"    16r0626 " ARABIC LETTER YEH WITH HAMZA ABOVE " 
+           "16r00A6"    16r00A6 " BROKEN BAR " 
+           "16r00A7"    16r00A7 " SECTION SIGN " 
+           "16r00A8"    16r0627 " ARABIC LETTER ALEF " 
+           "16r00A9"    16r00A9 " COPYRIGHT SIGN " 
+           "16r00AA"    16r0628 " ARABIC LETTER BEH " 
+           "16r00AB"    16r00AB " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+           "16r00AC"    16r00AC " NOT SIGN " 
+           "16r00AD"    16r00AD " SOFT HYPHEN " 
+           "16r00AE"    16r00AE " REGISTERED SIGN " 
+           "16r00AF"    16r067E " ARABIC LETTER PEH " 
+           "16r00B0"    16r00B0 " DEGREE SIGN " 
+           "16r00B1"    16r00B1 " PLUS-MINUS SIGN " 
+           "16r00B2"    16r0629 " ARABIC LETTER TEH MARBUTA " 
+           "16r00B3"    16r062A " ARABIC LETTER TEH " 
+           "16r00B4"    16r062B " ARABIC LETTER THEH " 
+           "16r00B5"    16r00B5 " MICRO SIGN " 
+           "16r00B6"    16r00B6 " PILCROW SIGN " 
+           "16r00B7"    16r00B7 " MIDDLE DOT " 
+           "16r00B8"    16r062C " ARABIC LETTER JEEM " 
+           "16r00B9"    16r0686 " ARABIC LETTER TCHEH " 
+           "16r00BA"    16r062D " ARABIC LETTER HAH " 
+           "16r00BB"    16r00BB " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+           "16r00BC"    16r062E " ARABIC LETTER KHAH " 
+           "16r00BD"    16r062F " ARABIC LETTER DAL " 
+           "16r00BE"    16r0630 " ARABIC LETTER THAL " 
+           "16r00BF"    16r0631 " ARABIC LETTER REH " 
+           "16r00C0"    16r00C0 " LATIN CAPITAL LETTER A WITH GRAVE " 
+           "16r00C1"    16r0632 " ARABIC LETTER ZAIN " 
+           "16r00C2"    16r00C2 " LATIN CAPITAL LETTER A WITH CIRCUMFLEX " 
+           "16r00C3"    16r0698 " ARABIC LETTER JEH " 
+           "16r00C4"    16r0633 " ARABIC LETTER SEEN " 
+           "16r00C5"    16r0634 " ARABIC LETTER SHEEN " 
+           "16r00C6"    16r0635 " ARABIC LETTER SAD " 
+           "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"    16r0636 " ARABIC LETTER DAD " 
+           "16r00CD"    16r0637 " ARABIC LETTER TAH " 
+           "16r00CE"    16r00CE " LATIN CAPITAL LETTER I WITH CIRCUMFLEX " 
+           "16r00CF"    16r00CF " LATIN CAPITAL LETTER I WITH DIAERESIS " 
+           "16r00D0"    16r3113 " BOPOMOFO LETTER ZH " 
+           "16r00D1"    16r0639 " ARABIC LETTER AIN " 
+           "16r00D2"    16r063A " ARABIC LETTER GHAIN " 
+           "16r00D3"    16r0640 " ARABIC TATWEEL " 
+           "16r00D4"    16r00D4 " LATIN CAPITAL LETTER O WITH CIRCUMFLEX " 
+           "16r00D5"    16r0641 " ARABIC LETTER FEH " 
+           "16r00D6"    16r0642 " ARABIC LETTER QAF " 
+           "16r00D7"    16r00D7 " MULTIPLICATION SIGN " 
+           "16r00D8"    16r0643 " ARABIC LETTER KAF " 
+           "16r00D9"    16r00D9 " LATIN CAPITAL LETTER U WITH GRAVE " 
+           "16r00DA"    16r06AF " ARABIC LETTER GAF " 
+           "16r00DB"    16r00DB " LATIN CAPITAL LETTER U WITH CIRCUMFLEX " 
+           "16r00DC"    16r00DC " LATIN CAPITAL LETTER U WITH DIAERESIS " 
+           "16r00DD"    16r0644 " ARABIC LETTER LAM " 
+           "16r00DE"    16r0645 " ARABIC LETTER MEEM " 
+           "16r00DF"    16r0646 " ARABIC LETTER NOON " 
+           "16r00E0"    16r00E0 " LATIN SMALL LETTER A WITH GRAVE " 
+           "16r00E1"    16r0647 " ARABIC LETTER HEH " 
+           "16r00E2"    16r00E2 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
+           "16r00E3"    16r0681 " ARABIC LETTER HAH WITH HAMZA ABOVE " 
+           "16r00E4"    16r0648 " ARABIC LETTER WAW " 
+           "16r00E5"    16r0649 " ARABIC LETTER ALEF MAKSURA " 
+           "16r00E6"    16r064A " ARABIC LETTER YEH " 
+           "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"    16r064B " ARABIC FATHATAN " 
+           "16r00ED"    16r064C " ARABIC DAMMATAN " 
+           "16r00EE"    16r00EE " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
+           "16r00EF"    16r00EF " LATIN SMALL LETTER I WITH DIAERESIS " 
+           "16r00F0"    16r064D " ARABIC KASRATAN " 
+           "16r00F1"    16r064E " ARABIC FATHA " 
+           "16r00F2"    16r064F " ARABIC DAMMA " 
+           "16r00F3"    16r0650 " ARABIC KASRA " 
+           "16r00F4"    16r00F4 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
+           "16r00F5"    16r0651 " ARABIC SHADDA " 
+           "16r00F6"    16r0652 " ARABIC SUKUN " 
+           "16r00F7"    16r00F7 " DIVISION SIGN " 
+           "16r00F8"    16r0000 " invalid " 
+           "16r00F9"    16r00F9 " LATIN SMALL LETTER U WITH GRAVE " 
+           "16r00FA"    16r0000 " invalid " 
+           "16r00FB"    16r00FB " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
+           "16r00FC"    16r00FC " LATIN SMALL LETTER U WITH DIAERESIS " 
+           "16r00FD"    16r200E " LEFT-TO-RIGHT MARK " 
+           "16r00FE"    16r200F " RIGHT-TO-LEFT MARK " 
+           "16r00FF"    16r00FF " LATIN SMALL LETTER Y WITH DIAERESIS " 
+           ) at:(code - 16r7F).
+        t == 0 ifFalse:[^ t].
+        ^ self decodingError.
+    ] value.
+!
+
+encode:unicodeArg
+    "Automagically generated by generateCode - do not modify.
+     Encode from unicode into my encoding."
+
+    |unicode "{ Class: SmallInteger }"|
+
+    unicode := unicodeArg.
+    unicode <= 16r7F ifTrue:[ ^ unicode ].
+    unicode > 16r3113 ifTrue:[
+        ^ self encodingError.
+    ].
+    unicode <= 16r9F ifTrue:[
+        ^ self encodingError.
+    ].
+    unicode <= 16r6AF ifTrue:[
+        unicode <= 16r178 ifTrue:[
+            unicode <= 16rFF ifTrue:[
+                    (#[
+                       "16r00A0"    1 " NO-BREAK SPACE " 
+                       "16r00A1"    0 " invalid " 
+                       "16r00A2"    0 " invalid " 
+                       "16r00A3"    1 " POUND SIGN " 
+                       "16r00A4"    1 " CURRENCY SIGN " 
+                       "16r00A5"    0 " invalid " 
+                       "16r00A6"    1 " BROKEN BAR " 
+                       "16r00A7"    1 " SECTION SIGN " 
+                       "16r00A8"    0 " invalid " 
+                       "16r00A9"    1 " COPYRIGHT SIGN " 
+                       "16r00AA"    0 " invalid " 
+                       "16r00AB"    1 " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+                       "16r00AC"    1 " NOT SIGN " 
+                       "16r00AD"    1 " SOFT HYPHEN " 
+                       "16r00AE"    1 " REGISTERED SIGN " 
+                       "16r00AF"    0 " invalid " 
+                       "16r00B0"    1 " DEGREE SIGN " 
+                       "16r00B1"    1 " PLUS-MINUS SIGN " 
+                       "16r00B2"    0 " invalid " 
+                       "16r00B3"    0 " invalid " 
+                       "16r00B4"    0 " invalid " 
+                       "16r00B5"    1 " MICRO SIGN " 
+                       "16r00B6"    1 " PILCROW SIGN " 
+                       "16r00B7"    1 " MIDDLE DOT " 
+                       "16r00B8"    0 " invalid " 
+                       "16r00B9"    0 " invalid " 
+                       "16r00BA"    0 " invalid " 
+                       "16r00BB"    1 " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+                       "16r00BC"    0 " invalid " 
+                       "16r00BD"    0 " invalid " 
+                       "16r00BE"    0 " invalid " 
+                       "16r00BF"    0 " invalid " 
+                       "16r00C0"    1 " LATIN CAPITAL LETTER A WITH GRAVE " 
+                       "16r00C1"    0 " invalid " 
+                       "16r00C2"    1 " LATIN CAPITAL LETTER A WITH CIRCUMFLEX " 
+                       "16r00C3"    0 " invalid " 
+                       "16r00C4"    0 " invalid " 
+                       "16r00C5"    0 " invalid " 
+                       "16r00C6"    0 " invalid " 
+                       "16r00C7"    1 " LATIN CAPITAL LETTER C WITH CEDILLA " 
+                       "16r00C8"    1 " LATIN CAPITAL LETTER E WITH GRAVE " 
+                       "16r00C9"    1 " LATIN CAPITAL LETTER E WITH ACUTE " 
+                       "16r00CA"    1 " LATIN CAPITAL LETTER E WITH CIRCUMFLEX " 
+                       "16r00CB"    1 " LATIN CAPITAL LETTER E WITH DIAERESIS " 
+                       "16r00CC"    0 " invalid " 
+                       "16r00CD"    0 " invalid " 
+                       "16r00CE"    1 " LATIN CAPITAL LETTER I WITH CIRCUMFLEX " 
+                       "16r00CF"    1 " LATIN CAPITAL LETTER I WITH DIAERESIS " 
+                       "16r00D0"    0 " invalid " 
+                       "16r00D1"    0 " invalid " 
+                       "16r00D2"    0 " invalid " 
+                       "16r00D3"    0 " invalid " 
+                       "16r00D4"    1 " LATIN CAPITAL LETTER O WITH CIRCUMFLEX " 
+                       "16r00D5"    0 " invalid " 
+                       "16r00D6"    0 " invalid " 
+                       "16r00D7"    1 " MULTIPLICATION SIGN " 
+                       "16r00D8"    0 " invalid " 
+                       "16r00D9"    1 " LATIN CAPITAL LETTER U WITH GRAVE " 
+                       "16r00DA"    0 " invalid " 
+                       "16r00DB"    1 " LATIN CAPITAL LETTER U WITH CIRCUMFLEX " 
+                       "16r00DC"    1 " LATIN CAPITAL LETTER U WITH DIAERESIS " 
+                       "16r00DD"    0 " invalid " 
+                       "16r00DE"    0 " invalid " 
+                       "16r00DF"    0 " invalid " 
+                       "16r00E0"    1 " LATIN SMALL LETTER A WITH GRAVE " 
+                       "16r00E1"    0 " invalid " 
+                       "16r00E2"    1 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
+                       "16r00E3"    0 " invalid " 
+                       "16r00E4"    0 " invalid " 
+                       "16r00E5"    0 " invalid " 
+                       "16r00E6"    0 " invalid " 
+                       "16r00E7"    1 " LATIN SMALL LETTER C WITH CEDILLA " 
+                       "16r00E8"    1 " LATIN SMALL LETTER E WITH GRAVE " 
+                       "16r00E9"    1 " LATIN SMALL LETTER E WITH ACUTE " 
+                       "16r00EA"    1 " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
+                       "16r00EB"    1 " LATIN SMALL LETTER E WITH DIAERESIS " 
+                       "16r00EC"    0 " invalid " 
+                       "16r00ED"    0 " invalid " 
+                       "16r00EE"    1 " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
+                       "16r00EF"    1 " LATIN SMALL LETTER I WITH DIAERESIS " 
+                       "16r00F0"    0 " invalid " 
+                       "16r00F1"    0 " invalid " 
+                       "16r00F2"    0 " invalid " 
+                       "16r00F3"    0 " invalid " 
+                       "16r00F4"    1 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
+                       "16r00F5"    0 " invalid " 
+                       "16r00F6"    0 " invalid " 
+                       "16r00F7"    1 " DIVISION SIGN " 
+                       "16r00F8"    0 " invalid " 
+                       "16r00F9"    1 " LATIN SMALL LETTER U WITH GRAVE " 
+                       "16r00FA"    0 " invalid " 
+                       "16r00FB"    1 " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
+                       "16r00FC"    1 " LATIN SMALL LETTER U WITH DIAERESIS " 
+                       "16r00FD"    0 " invalid " 
+                       "16r00FE"    0 " invalid " 
+                       "16r00FF"    1 " LATIN SMALL LETTER Y WITH DIAERESIS " 
+                    ] at:(unicode - 159)) ~~ 0 ifTrue:[^ unicode].
+                    ^ self encodingError.
+            ].
+            unicode <= 16r177 ifTrue:[
+                ^ self encodingError.
+            ].
+            ^  "16r0178" 16r009F " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
+        ].
+        unicode <= 16r60B ifTrue:[
+            ^ self encodingError.
+        ].
+        [
+            |t|
+            t := #[
+               "16r060C"    16r80 " ARABIC COMMA " 
+               "16r060D"    16r00 " invalid " 
+               "16r060E"    16r00 " invalid " 
+               "16r060F"    16r00 " invalid " 
+               "16r0610"    16r00 " invalid " 
+               "16r0611"    16r00 " invalid " 
+               "16r0612"    16r00 " invalid " 
+               "16r0613"    16r00 " invalid " 
+               "16r0614"    16r00 " invalid " 
+               "16r0615"    16r00 " invalid " 
+               "16r0616"    16r00 " invalid " 
+               "16r0617"    16r00 " invalid " 
+               "16r0618"    16r00 " invalid " 
+               "16r0619"    16r00 " invalid " 
+               "16r061A"    16r00 " invalid " 
+               "16r061B"    16r98 " ARABIC SEMICOLON " 
+               "16r061C"    16r00 " invalid " 
+               "16r061D"    16r00 " invalid " 
+               "16r061E"    16r00 " invalid " 
+               "16r061F"    16r9A " ARABIC QUESTION MARK " 
+               "16r0620"    16r00 " invalid " 
+               "16r0621"    16r9C " ARABIC LETTER HAMZA " 
+               "16r0622"    16r9D " ARABIC LETTER ALEF WITH MADDA ABOVE " 
+               "16r0623"    16r9E " ARABIC LETTER ALEF WITH HAMZA ABOVE " 
+               "16r0624"    16rA1 " ARABIC LETTER WAW WITH HAMZA ABOVE " 
+               "16r0625"    16rA2 " ARABIC LETTER ALEF WITH HAMZA BELOW " 
+               "16r0626"    16rA5 " ARABIC LETTER YEH WITH HAMZA ABOVE " 
+               "16r0627"    16rA8 " ARABIC LETTER ALEF " 
+               "16r0628"    16rAA " ARABIC LETTER BEH " 
+               "16r0629"    16rB2 " ARABIC LETTER TEH MARBUTA " 
+               "16r062A"    16rB3 " ARABIC LETTER TEH " 
+               "16r062B"    16rB4 " ARABIC LETTER THEH " 
+               "16r062C"    16rB8 " ARABIC LETTER JEEM " 
+               "16r062D"    16rBA " ARABIC LETTER HAH " 
+               "16r062E"    16rBC " ARABIC LETTER KHAH " 
+               "16r062F"    16rBD " ARABIC LETTER DAL " 
+               "16r0630"    16rBE " ARABIC LETTER THAL " 
+               "16r0631"    16rBF " ARABIC LETTER REH " 
+               "16r0632"    16rC1 " ARABIC LETTER ZAIN " 
+               "16r0633"    16rC4 " ARABIC LETTER SEEN " 
+               "16r0634"    16rC5 " ARABIC LETTER SHEEN " 
+               "16r0635"    16rC6 " ARABIC LETTER SAD " 
+               "16r0636"    16rCC " ARABIC LETTER DAD " 
+               "16r0637"    16rCD " ARABIC LETTER TAH " 
+               "16r0638"    16r00 " invalid " 
+               "16r0639"    16rD1 " ARABIC LETTER AIN " 
+               "16r063A"    16rD2 " ARABIC LETTER GHAIN " 
+               "16r063B"    16r00 " invalid " 
+               "16r063C"    16r00 " invalid " 
+               "16r063D"    16r00 " invalid " 
+               "16r063E"    16r00 " invalid " 
+               "16r063F"    16r00 " invalid " 
+               "16r0640"    16rD3 " ARABIC TATWEEL " 
+               "16r0641"    16rD5 " ARABIC LETTER FEH " 
+               "16r0642"    16rD6 " ARABIC LETTER QAF " 
+               "16r0643"    16rD8 " ARABIC LETTER KAF " 
+               "16r0644"    16rDD " ARABIC LETTER LAM " 
+               "16r0645"    16rDE " ARABIC LETTER MEEM " 
+               "16r0646"    16rDF " ARABIC LETTER NOON " 
+               "16r0647"    16rE1 " ARABIC LETTER HEH " 
+               "16r0648"    16rE4 " ARABIC LETTER WAW " 
+               "16r0649"    16rE5 " ARABIC LETTER ALEF MAKSURA " 
+               "16r064A"    16rE6 " ARABIC LETTER YEH " 
+               "16r064B"    16rEC " ARABIC FATHATAN " 
+               "16r064C"    16rED " ARABIC DAMMATAN " 
+               "16r064D"    16rF0 " ARABIC KASRATAN " 
+               "16r064E"    16rF1 " ARABIC FATHA " 
+               "16r064F"    16rF2 " ARABIC DAMMA " 
+               "16r0650"    16rF3 " ARABIC KASRA " 
+               "16r0651"    16rF5 " ARABIC SHADDA " 
+               "16r0652"    16rF6 " ARABIC SUKUN " 
+               "16r0653"    16r00 " invalid " 
+               "16r0654"    16r00 " invalid " 
+               "16r0655"    16r00 " invalid " 
+               "16r0656"    16r00 " invalid " 
+               "16r0657"    16r00 " invalid " 
+               "16r0658"    16r00 " invalid " 
+               "16r0659"    16r00 " invalid " 
+               "16r065A"    16r00 " invalid " 
+               "16r065B"    16r00 " invalid " 
+               "16r065C"    16r00 " invalid " 
+               "16r065D"    16r00 " invalid " 
+               "16r065E"    16r00 " invalid " 
+               "16r065F"    16r00 " invalid " 
+               "16r0660"    16r81 " ARABIC-INDIC DIGIT ZERO " 
+               "16r0661"    16r83 " ARABIC-INDIC DIGIT ONE " 
+               "16r0662"    16r88 " ARABIC-INDIC DIGIT TWO " 
+               "16r0663"    16r89 " ARABIC-INDIC DIGIT THREE " 
+               "16r0664"    16r8A " ARABIC-INDIC DIGIT FOUR " 
+               "16r0665"    16r8C " ARABIC-INDIC DIGIT FIVE " 
+               "16r0666"    16r8D " ARABIC-INDIC DIGIT SIX " 
+               "16r0667"    16r8E " ARABIC-INDIC DIGIT SEVEN " 
+               "16r0668"    16r8F " ARABIC-INDIC DIGIT EIGHT " 
+               "16r0669"    16r90 " ARABIC-INDIC DIGIT NINE " 
+               "16r066A"    16r00 " invalid " 
+               "16r066B"    16r00 " invalid " 
+               "16r066C"    16r00 " invalid " 
+               "16r066D"    16r00 " invalid " 
+               "16r066E"    16r00 " invalid " 
+               "16r066F"    16r00 " invalid " 
+               "16r0670"    16r00 " invalid " 
+               "16r0671"    16r00 " invalid " 
+               "16r0672"    16r00 " invalid " 
+               "16r0673"    16r00 " invalid " 
+               "16r0674"    16r00 " invalid " 
+               "16r0675"    16r00 " invalid " 
+               "16r0676"    16r00 " invalid " 
+               "16r0677"    16r00 " invalid " 
+               "16r0678"    16r00 " invalid " 
+               "16r0679"    16r00 " invalid " 
+               "16r067A"    16r00 " invalid " 
+               "16r067B"    16r00 " invalid " 
+               "16r067C"    16r00 " invalid " 
+               "16r067D"    16r00 " invalid " 
+               "16r067E"    16rAF " ARABIC LETTER PEH " 
+               "16r067F"    16r00 " invalid " 
+               "16r0680"    16r00 " invalid " 
+               "16r0681"    16rE3 " ARABIC LETTER HAH WITH HAMZA ABOVE " 
+               "16r0682"    16r00 " invalid " 
+               "16r0683"    16r00 " invalid " 
+               "16r0684"    16r00 " invalid " 
+               "16r0685"    16r00 " invalid " 
+               "16r0686"    16rB9 " ARABIC LETTER TCHEH " 
+               "16r0687"    16r00 " invalid " 
+               "16r0688"    16r00 " invalid " 
+               "16r0689"    16r00 " invalid " 
+               "16r068A"    16r00 " invalid " 
+               "16r068B"    16r00 " invalid " 
+               "16r068C"    16r00 " invalid " 
+               "16r068D"    16r00 " invalid " 
+               "16r068E"    16r00 " invalid " 
+               "16r068F"    16r00 " invalid " 
+               "16r0690"    16r00 " invalid " 
+               "16r0691"    16r00 " invalid " 
+               "16r0692"    16r00 " invalid " 
+               "16r0693"    16r00 " invalid " 
+               "16r0694"    16r00 " invalid " 
+               "16r0695"    16r00 " invalid " 
+               "16r0696"    16r00 " invalid " 
+               "16r0697"    16r00 " invalid " 
+               "16r0698"    16rC3 " ARABIC LETTER JEH " 
+               "16r0699"    16r00 " invalid " 
+               "16r069A"    16r00 " invalid " 
+               "16r069B"    16r00 " invalid " 
+               "16r069C"    16r00 " invalid " 
+               "16r069D"    16r00 " invalid " 
+               "16r069E"    16r00 " invalid " 
+               "16r069F"    16r00 " invalid " 
+               "16r06A0"    16r00 " invalid " 
+               "16r06A1"    16r00 " invalid " 
+               "16r06A2"    16r00 " invalid " 
+               "16r06A3"    16r00 " invalid " 
+               "16r06A4"    16r00 " invalid " 
+               "16r06A5"    16r00 " invalid " 
+               "16r06A6"    16r00 " invalid " 
+               "16r06A7"    16r00 " invalid " 
+               "16r06A8"    16r00 " invalid " 
+               "16r06A9"    16r00 " invalid " 
+               "16r06AA"    16r00 " invalid " 
+               "16r06AB"    16r00 " invalid " 
+               "16r06AC"    16r00 " invalid " 
+               "16r06AD"    16r00 " invalid " 
+               "16r06AE"    16r00 " invalid " 
+               "16r06AF"    16rDA " ARABIC LETTER GAF " 
+               ] at:(unicode - 16r60B).
+            t == 0 ifFalse:[^ t].
+            ^ self encodingError
+        ] value.
+    ].
+    unicode <= 16r200D ifTrue:[
+        ^ self encodingError.
+    ].
+    unicode <= 16r2122 ifTrue:[
+        unicode <= 16r203A ifTrue:[
+            unicode <= 16r2026 ifTrue:[
+                [
+                    |t|
+                    t := #[
+                       "16r200E"    16rFD " LEFT-TO-RIGHT MARK " 
+                       "16r200F"    16rFE " RIGHT-TO-LEFT MARK " 
+                       "16r2010"    16r00 " invalid " 
+                       "16r2011"    16r00 " invalid " 
+                       "16r2012"    16r00 " invalid " 
+                       "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 " 
+                       ] at:(unicode - 16r200D).
+                    t == 0 ifFalse:[^ t].
+                    ^ self encodingError
+                ] value.
+            ].
+            unicode <= 16r2038 ifTrue:[
+                ^ self encodingError.
+            ].
+            ^ #[
+               "16r2039"    16r8B " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
+               "16r203A"    16r9B " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
+               ] at:(unicode - 16r2038).
+        ].
+        unicode <= 16r2121 ifTrue:[
+            ^ self encodingError.
+        ].
+        ^  "16r2122" 16r0099 " TRADE MARK SIGN " 
+    ].
+    unicode <= 16r3112 ifTrue:[
+        ^ self encodingError.
+    ].
+    ^  "16r3113" 16r00D0 " BOPOMOFO LETTER ZH " 
+! !
+
 !CharacterEncoder::MS_Cyrillic class methodsFor:'mapping'!
 
 mapFileURL2_relativePathName
@@ -51288,7 +52198,7 @@
 !CharacterEncoder class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.17 2004-02-12 11:04:19 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.18 2004-02-12 18:37:17 cg Exp $'
 ! !
 
 CharacterEncoder initialize!