*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Tue, 09 Mar 2004 00:05:08 +0100
changeset 8118 efc99c0f68bc
parent 8117 2ad20fde13a3
child 8119 56fd0cf42779
*** empty log message ***
CharacterEncoder.st
CharacterEncoderImplementation.st
CharacterEncoderImplementations__ISO10646_1.st
CharacterEncoderImplementations__MS_Symbol.st
CharacterEncoderImplementations__MS_Turkish.st
Date.st
Encoder_ISO10646_1.st
Encoder_MS_Symbol.st
Encoder_MS_Turkish.st
resources/de.rs
resources/it.rs
resources/sv.rs
--- a/CharacterEncoder.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/CharacterEncoder.st	Tue Mar 09 00:05:08 2004 +0100
@@ -10,48 +10,14 @@
  hereby transferred.
 "
 
-"{ Package: 'stx:libbasic' }"
-
-Object subclass:#CharacterEncoder
-	instanceVariableNames:'implementation'
-	classVariableNames:'EncoderClassesByName EncodersByName CachedEncoders LastEncoder
-		AccessLock'
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
+'From Smalltalk/X, Version:5.2.1 on 09-03-2004 at 12:03:25 am'                  !
 
 "{ Package: 'stx:libbasic' }"
 
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#ASCII
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-nil subclass:#BIG5
+Object subclass:#CharacterEncoder
 	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#CNS11643
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#CP437
-	instanceVariableNames:''
-	classVariableNames:''
+	classVariableNames:'EncoderClassesByName EncodersByName CachedEncoders LastEncoder
+		AccessLock NullEncoderInstance'
 	poolDictionaries:''
 	category:'Collections-Text-Encodings'
 !
@@ -70,206 +36,6 @@
 	privateIn:CharacterEncoder
 !
 
-nil subclass:#GB2313_1980
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#HANGUL
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-CharacterEncoder subclass:#ISO10646_1
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#ISO10646_to_UTF8
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#ISO8859_1
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#SingleByteEncoder
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-SingleByteEncoder class instanceVariableNames:'mySingleInstance'
-
-"
- No other class instance variables are inherited by this class.
-"
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#ISO8859_11
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#ISO8859_13
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#ISO8859_14
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder subclass:#ISO8859_15
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_16
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_2
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_3
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_4
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_5
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_6
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_7
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_8
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-ISO8859_1 subclass:#ISO8859_9
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
 CharacterEncoder subclass:#InverseEncoder
 	instanceVariableNames:'decoder'
 	classVariableNames:''
@@ -277,356 +43,6 @@
 	privateIn:CharacterEncoder
 !
 
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#JIS0201
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-nil subclass:#JIS0208
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#JIS0208_to_JIS7
-	instanceVariableNames:''
-	classVariableNames:'Jis7KanjiEscapeSequence Jis7RomanEscapeSequence
-		JisISO2022EscapeSequence Jis7KanjiOldEscapeSequence'
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#JIS0212
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#JOHAB
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#KOI7
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#KOI8_R
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-CharacterEncoder::CharacterEncoder::KOI8_R subclass:#KOI8_U
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#KSC5601
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Arabic
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_CentralEuropean
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Croatian
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Cyrillic
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Dingbats
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Farsi
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Greek
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Hebrew
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Iceland
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-nil subclass:#MAC_Japanese
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-nil subclass:#MAC_Korean
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Roman
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Romanian
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Symbol
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-nil subclass:#MAC_Thai
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MAC_Turkish
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Ansi
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Arabic
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Baltic
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Cyrillic
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_EastEuropean
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Greek
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Hebrew
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Symbol
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#MS_Turkish
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#NEXT
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
 CharacterEncoder subclass:#NullEncoder
 	instanceVariableNames:''
 	classVariableNames:''
@@ -634,13 +50,6 @@
 	privateIn:CharacterEncoder
 !
 
-CharacterEncoder::NullEncoder class instanceVariableNames:'mySingleInstance'
-
-"
- No other class instance variables are inherited by this class.
-"
-!
-
 CharacterEncoder subclass:#OtherEncoding
 	instanceVariableNames:''
 	classVariableNames:''
@@ -648,24 +57,6 @@
 	privateIn:CharacterEncoder
 !
 
-nil subclass:#SJIS
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:CharacterEncoder
-!
-
-"{ Package: 'stx:libbasic' }"
-
-"{ NameSpace: CharacterEncoder }"
-
-CharacterEncoder::SingleByteEncoder subclass:#ISO8859_10
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Collections-Text-Encodings'
-!
-
 CharacterEncoder subclass:#TwoStepEncoder
 	instanceVariableNames:'encoder1 encoder2'
 	classVariableNames:''
@@ -783,27 +174,6 @@
 
 !CharacterEncoder class methodsFor:'instance creation'!
 
-cachedEncoderToEncodeFrom:oldEncoding into:newEncoding
-    |encoders encoder|
-
-    oldEncoding isSymbol ifFalse:[self halt:'symbol argument expected'].
-    newEncoding isSymbol ifFalse:[self halt:'symbol argument expected'].
-
-    encoders := CachedEncoders at:oldEncoding ifAbsent:nil.
-    encoders notNil ifTrue:[
-        encoder := encoders at:newEncoding ifAbsent:nil.
-        encoder notNil ifTrue:[^ encoder].
-    ].
-
-    encoder := self encoderToEncodeFrom:oldEncoding into:newEncoding.
-
-    encoders isNil ifTrue:[
-        CachedEncoders at:oldEncoding put:(encoders := IdentityDictionary new).
-    ].
-    encoders at:newEncoding put:encoder.
-    ^ encoder.
-!
-
 encoderFor:encodingNameSymbol
     "given the name of an encoding, return an encoder-instance which can map these from/into unicode."
 
@@ -811,7 +181,7 @@
         encoderFor:encodingNameSymbol 
         ifAbsent:[
             self error:'no encoder for ' , encodingNameSymbol mayProceed:true.
-            NullEncoder new
+            NullEncoderInstance
         ]
 
     "
@@ -830,64 +200,76 @@
 encoderFor:encodingNameSymbol ifAbsent:exceptionValue
     "given the name of an encoding, return an encoder-instance which can map these from/into unicode."
 
-    |enc cls lcName name|
+    |enc cls lcName name unicodeEncoders unicodeEncoderClasses|
+
+    encodingNameSymbol isNil ifTrue:[ ^ NullEncoderInstance].
 
-    encodingNameSymbol isNil ifTrue:[ ^ NullEncoder new].
+    lcName := encodingNameSymbol asLowercase.
+    name := lcName asSymbolIfInterned.
+    name isNil ifTrue:[name := lcName].
 
-    encodingNameSymbol includesMatchCharacters ifTrue:[
-        self allSubclassesDo:[:cls |
-            cls nameOfDecodedCode == #'unicode' ifTrue:[
-                (cls namesOfEncoding contains:[:any | encodingNameSymbol matches:any]) ifTrue:[
-                    ^ cls new.
-                ]
+    name includesMatchCharacters ifTrue:[
+        unicodeEncoders := EncodersByName at:#unicode ifAbsent:nil.
+        unicodeEncoders notNil ifTrue:[
+            unicodeEncoders keysAndValuesDo:[:eachEncodingAlias :eachEncoderInstance |
+                (name matches:eachEncodingAlias) ifTrue:[
+                    ^ eachEncoderInstance.
+                ].
+            ].
+        ].
+
+        unicodeEncoderClasses := EncoderClassesByName at:#unicode.
+        unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClass |
+            (name matches:eachEncodingAlias) ifTrue:[
+                ^ eachEncoderClass new.
             ].
         ].
         ^ exceptionValue value
     ].
 
-    lcName := encodingNameSymbol asLowercase asSymbolIfInterned.
-    name := lcName ? encodingNameSymbol.
+    AccessLock critical:[
+        unicodeEncoders := EncodersByName at:#unicode ifAbsent:nil.
+        unicodeEncoders isNil ifTrue:[
+            EncodersByName at:#unicode put:(unicodeEncoders := Dictionary new).
+        ].
+        enc := unicodeEncoders at:name ifAbsent:nil.
 
-    AccessLock critical:[
-        enc := EncodersByName at:name ifAbsent:nil.
+        enc isNil ifTrue:[
+            unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
+            cls := unicodeEncoderClasses at:name ifAbsent:nil.
+            cls notNil ifTrue:[
+                enc := cls new.
+                unicodeEncoders at:name put:enc.
+            ].
+        ].
     ].
-    enc notNil ifTrue:[^ enc ].
-
-    cls := EncoderClassesByName at:name ifAbsent:nil.
-    cls notNil ifTrue:[
-        enc := cls new.
-        AccessLock critical:[
-            EncodersByName at:name put:enc.
-        ].
+    enc notNil ifTrue:[
         ^ enc 
     ].
 
-    self allSubclassesDo:[:cls |
-        cls nameOfDecodedCode == #'unicode' ifTrue:[
-            (cls namesOfEncoding includes:name) ifTrue:[
-                enc := cls new.
+    "/ no direct encoder from unicode->name
+    "/ search for unicode->any and: any->name
+    unicodeEncoderClasses := EncoderClassesByName at:#unicode ifAbsent:nil.
+    unicodeEncoderClasses keysAndValuesDo:[:eachEncodingAlias :eachEncoderClass |
+        |dict2|
+
+        dict2 := EncoderClassesByName at:eachEncodingAlias ifAbsent:nil.
+        dict2 notNil ifTrue:[
+            cls := dict2 at:name ifAbsent:nil.
+            cls notNil ifTrue:[
+                enc := TwoStepEncoder new
+                    encoder1:(self encoderFor:eachEncodingAlias)
+                    encoder2:(cls new).
+
                 AccessLock critical:[
-                    EncodersByName at:name put:enc.    
+                    unicodeEncoders at:name put:enc.    
                 ].
+self halt.
                 ^ enc.
             ]
         ].
     ].
 
-    self allSubclassesDo:[:cls |
-        (cls namesOfEncoding includes:name) ifTrue:[
-            "/ ok, found some other encoder - need a compound encoder then.
-            "/ the one found encodes into what we need, but needs something else as input.
-            
-            enc := TwoStepEncoder new
-                encoder1:(self encoderFor:(cls nameOfDecodedCode))
-                encoder2:(cls new).
-            AccessLock critical:[
-                EncodersByName at:name put:enc.    
-            ].
-            ^ enc.
-        ].
-    ].
     ^ exceptionValue value
 
     "
@@ -904,75 +286,67 @@
 !
 
 encoderToEncodeFrom:oldEncodingArg into:newEncodingArg
-    |oldEncoding newEncoding encoder decoder|
+    |oldEncoding newEncoding encoders encoderClasses encoder decoder cls|
+
+    oldEncodingArg isSymbol ifFalse:[self halt:'symbol argument expected'].
+    newEncodingArg isSymbol ifFalse:[self halt:'symbol argument expected'].
 
     oldEncoding := oldEncodingArg ? #'unicode'.
     oldEncoding == #'iso10646-1' ifTrue:[ oldEncoding :=  #'unicode'].
     newEncoding := newEncodingArg ? #'unicode'.
     newEncoding == #'iso10646-1' ifTrue:[ newEncoding :=  #'unicode'].
 
-    oldEncoding == newEncoding ifTrue:[^ NullEncoder new].
-    (oldEncoding match:newEncoding) ifTrue:[^ NullEncoder new].
-    "/ (newEncoding match:oldEncoding) ifTrue:[^ NullEncoder new].
-
-    (oldEncoding == #unicode) ifTrue:[
-        (newEncoding == #unicode) ifTrue:[^ NullEncoder new].
+    oldEncoding == newEncoding ifTrue:[^ NullEncoderInstance].
+    (oldEncoding match:newEncoding) ifTrue:[^ NullEncoderInstance].
 
-        "/ unicode -> something
-        ^ self encoderFor:newEncoding.
-    ].
-    (newEncoding == #unicode) ifTrue:[
-        "/ something -> unicode 
-        decoder := self encoderFor:oldEncoding.
-        ^ CharacterEncoderImplementations::InverseEncoder new decoder:decoder.
+    AccessLock critical:[
+        encoders := EncodersByName at:oldEncoding ifAbsent:nil.
+        encoders isNil ifTrue:[
+            EncodersByName at:oldEncoding put:(encoders := Dictionary new).
+        ].
+        encoder := encoders at:newEncodingArg ifAbsent:nil.
+        encoder isNil ifTrue:[
+            encoderClasses := EncoderClassesByName at:oldEncoding ifAbsent:nil.
+            encoderClasses isNil ifTrue:[
+                EncoderClassesByName at:oldEncoding put:(encoders := Dictionary new).
+            ].
+            cls := encoders at:name ifAbsent:nil.
+            cls notNil ifTrue:[
+                encoder := cls new.
+                encoders at:name put:encoder.
+            ].
+        ].
     ].
 
-    "/ look for a specialized encoder...
-    self allSubclassesDo:[:cls |
-        (cls namesOfEncoding includes:oldEncoding) ifTrue:[
-            |encoderForDecodedCode|
+    encoder isNil ifTrue:[
+        (newEncoding == #unicode) ifTrue:[
+            "/ something -> unicode 
+            decoder := self encoderFor:oldEncoding.
+            encoder := InverseEncoder new decoder:decoder.
+        ] ifFalse:[
+            "/ do it as: oldEncoding -> unicode -> newEncoding
 
-            encoderForDecodedCode := self encoderFor:(cls nameOfDecodedCode).
-            (encoderForDecodedCode namesOfEncoding includes:newEncoding) ifTrue:[
-                ^ CharacterEncoderImplementations::InverseEncoder new decoder:cls new. 
-            ]
-        ].
-        (cls namesOfEncoding includes:newEncoding) ifTrue:[
-            |encoderForDecodedCode|
+            "/ something -> unicode 
+            decoder := self encoderFor:oldEncoding.
 
-            encoderForDecodedCode := self encoderFor:(cls nameOfDecodedCode).
-            (encoderForDecodedCode namesOfEncoding includes:oldEncoding) ifTrue:[
-                ^ cls new. 
-            ]
+            "/ unicode -> something
+            encoder := self encoderFor:newEncoding.
+            encoder := CompoundEncoder new encoder:encoder decoder:decoder.
         ].
     ].
-    
-    "/ do it as: oldEncoding -> unicode -> newEncoding
-
-    "/ something -> unicode 
-    decoder := self encoderFor:oldEncoding.
 
-    "/ unicode -> something
-    encoder := self encoderFor:newEncoding.
-    ^ CharacterEncoderImplementations::CompoundEncoder new encoder:encoder decoder:decoder.
+    AccessLock critical:[
+        (EncodersByName at:oldEncoding) at:newEncoding put:encoder
+    ].
+    ^ encoder
 
-    "
+    "   CharacterEncoder initialize
      CharacterEncoder encoderToEncodeFrom:#'latin1' into:#'jis7'      
-     CharacterEncoder encoderToEncodeFrom:'koi8-r' into:#'mac-cyrillic'              
+     CharacterEncoder encoderToEncodeFrom:#'koi8-r' into:#'mac-cyrillic'              
      CharacterEncoder encoderToEncodeFrom:#'ms-arabic' into:#'mac-arabic'           
      CharacterEncoder encoderToEncodeFrom:#'iso8859-5' into:#'koi8-r'           
      CharacterEncoder encoderToEncodeFrom:#'koi8-r' into:#'koi8-u'       
     "
-!
-
-new
-    self isAbstract ifTrue:[self error].
-    ^ self basicNew implementation:(CharacterEncoderImplementations at:(self nameWithoutPrefix)) new.
-
-    "
-     CharacterEncoder new 
-     CharacterEncoder::ASCII new 
-    "
 ! !
 
 !CharacterEncoder class methodsFor:'Compatibility-ST80'!
@@ -998,39 +372,150 @@
 
 initialize
     AccessLock := Semaphore forMutualExclusion.
+    NullEncoderInstance := NullEncoder new.
 
     EncodersByName := IdentityDictionary new.
     EncoderClassesByName := IdentityDictionary new.
     CachedEncoders := IdentityDictionary new.
 
-"/    EncoderClassesByName at:#'iso8859-1' put:ISO8859_1.    
-"/    EncoderClassesByName at:#'iso8859-2' put:ISO8859_2.    
-"/    EncoderClassesByName at:#'iso8859-3' put:ISO8859_3.    
-"/    EncoderClassesByName at:#'iso8859-4' put:ISO8859_4.    
-"/    EncoderClassesByName at:#'iso8859-5' put:ISO8859_5.    
-"/    EncoderClassesByName at:#'iso8859-6' put:ISO8859_6.    
-"/    EncoderClassesByName at:#'iso8859-7' put:ISO8859_7.    
-"/    EncoderClassesByName at:#'iso8859-8' put:ISO8859_8.    
-"/    EncoderClassesByName at:#'iso8859-9' put:ISO8859_9.    
-"/    EncoderClassesByName at:#'iso8859-10' put:ISO8859_10.    
-"/    EncoderClassesByName at:#'iso8859-11' put:ISO8859_11.    
-"/    EncoderClassesByName at:#'iso8859-13' put:ISO8859_13.    
-"/    EncoderClassesByName at:#'iso8859-14' put:ISO8859_14.    
-"/    EncoderClassesByName at:#'iso8859-15' put:ISO8859_15.    
-"/    EncoderClassesByName at:#'iso8859-16' put:ISO8859_16.    
-"/
-"/    EncoderClassesByName at:#'big5' put:BIG5.    
-"/    EncoderClassesByName at:#'cns11643' put:CNS11643.    
-"/    EncoderClassesByName at:#'gb2313-1980' put:GB2313_1980.    
-"/    EncoderClassesByName at:#'jis0201' put:JIS0201.    
-"/    EncoderClassesByName at:#'jis0208' put:JIS0208.    
-"/    EncoderClassesByName at:#'jis0212' put:JIS0212.    
-"/    EncoderClassesByName at:#'sjis' put:SJIS.    
-"/    EncoderClassesByName at:#'ksc5601' put:KSC5601.    
-"/    EncoderClassesByName at:#'koi8-r' put:KOI8_R.    
-"/    EncoderClassesByName at:#'koi8-u' put:KOI8_U.    
-"/
-"/    EncoderClassesByName at:#'next' put:NEXT.    
+    "/ class decoded-name array-of-encodingNames
+    #(
+        (ASCII              unicode     ( ascii 'us-ascii' 'iso-ir-6' 'ibm-367' 'ms-cp367' 'cp367'  'iso646-us' 'ibm-cp367' ))
+
+        (BIG5               unicode     ( big5 ))
+
+        (CNS11643           unicode     ( 'cns11643' ))
+
+        (CP437              unicode     ( 'cp437'  'cp-437' 'ibm-437' 'ms-cp437' 'microsoft-cp437' 'ibm-cp437' ))
+
+        (GB2313_1980        unicode     ( 'gb2313' 'gb2313-1980' ))
+
+        (HANGUL             unicode     ( 'hangul' ))
+
+        (ISO10646_1         unicode     ( unicode 'iso10646_1' 'iso10646-1' 'iso-10646-1' ))
+
+        (ISO10646_to_UTF8   unicode     ( utf8 'utf-8' ))
+
+        (ISO8859_1          unicode     ( 'iso8859_1' 'iso8859-1' 'iso-8859-1' 'latin-1' 'latin1' 'iso-ir-100' 'ibm-819' 'ms-cp819' 'ibm-cp819' ))
+
+        (ISO8859_2          unicode     ( 'iso8859_2' 'iso8859-2' 'iso-8859-2' 'latin2' 'latin-2' 'iso-ir-101'))
+
+        (ISO8859_3          unicode     ( 'iso8859_3' 'iso8859-3' 'iso-8859-3' 'latin3' 'latin-3' 'iso-ir-109'))
+
+        (ISO8859_4          unicode     ( 'iso8859_4' 'iso8859-4' 'iso-8859-4' 'latin4' 'latin-4' 'iso-ir-110'))
+
+        (ISO8859_5          unicode     ( 'iso8859_5' 'iso8859-5' 'iso-8859-5' 'cyrillic' 'iso-ir-144' ))
+
+        (ISO8859_6          unicode     ( 'iso8859_6' 'iso8859-6' 'iso-8859-6' 'arabic' 'asmo-708' 'ecma-114' 'iso-ir-127' ))
+
+        (ISO8859_7          unicode     ( 'iso8859_7' 'iso8859-7' 'iso-8859-7' 'greek' 'iso-ir-126' 'ecma-118'))
+
+        (ISO8859_8          unicode     ( 'iso8859_8' 'iso8859-8' 'iso-8859-8' 'hebrew' 'iso-ir-138' ))
+
+        (ISO8859_9          unicode     ( 'iso8859_9' 'iso8859-9' 'iso-8859-9' 'latin5' 'latin-5' 'iso-ir-148'))
+
+        (ISO8859_10         unicode     ( 'iso8859_10' 'iso8859-10' 'iso-8859-10' 'latin6' 'latin-6' 'iso-ir-157'))
+
+        (ISO8859_11         unicode     ( 'iso8859_11' 'iso8859-11' 'iso-8859-11' 'thai' ))
+
+        (ISO8859_13         unicode     ( 'iso8859_13' 'iso8859-13' 'iso-8859-13' 'latin7' 'latin-7' ))
+
+        (ISO8859_14         unicode     ( 'iso8859_14' 'iso8859-14' 'iso-8859-14' 'latin8' 'latin-8' 'latin-celtic' ))
+
+        (ISO8859_15         unicode     ( 'iso8859_15' 'iso8859-15' 'iso-8859-15' 'latin9' 'latin-9' 'iso-ir-203'))
+
+        (ISO8859_16         unicode     ( 'iso8859_16' 'iso8859-16' 'iso-8859-16' 'latin10' 'latin-10' ))
+
+        (JIS0201            unicode     ( 'jis0201' #'jisx0201.1976-0'))
+
+        (JIS0208            unicode     ( jis0208 'jisx0208' 'jisx0208.1983-0' 'jisx0208.1990-0'))
+
+        (JIS0208_to_JIS7    jis0208     ( jis7 'jis-7' 'x-jis7' 'x-iso2022-jp' 'iso2022-jp'))
+
+        (JIS0212            unicode     ( 'jis0212' ))
+
+        (JOHAB              unicode     ( 'johab' ))
+
+        (KOI7               unicode     ( 'koi7' ))
+
+        (KOI8_R             unicode     ( #'koi8-r' 'cp878' ))
+
+        (KOI8_U             unicode     ( #'koi8-u' ))
+
+        (KSC5601            unicode     ( #'ksc5601' ))
+
+        (MAC_Arabic         unicode     ( #'mac-arabic' 'macarabic' ))
+
+        (MAC_CentralEuropean unicode    ( #'mac-centraleuropean' #'mac-centraleurope' 'maccentraleurope' 'maccentraleuropean' ))
+
+        (MAC_Croatian       unicode     ( #'mac-croatian' 'maccroatian'))
+
+        (MAC_Cyrillic       unicode     ( #'mac-cyrillic' 'maccyrillic' ))
+
+        (MAC_Dingbats       unicode     ( #'mac-dingbats'  'macdingbats'  'macdingbat'))
+
+        (MAC_Farsi          unicode     ( #'mac-farsi' 'macfarsi' ))
+
+        (MAC_Greek          unicode     ( #'mac-greek' #'macgreek' ))
+
+        (MAC_Hebrew         unicode     ( #'mac-hebrew' #'machebrew'  ))
+
+        (MAC_Iceland        unicode     ( #'mac-iceland' #'maciceland'  ))
+
+        (MAC_Japanese       unicode     ( #'mac-japanese' #'macjapanese'  ))
+
+        (MAC_Korean         unicode     ( #'mac-korean' #'mackorean'  ))
+
+        (MAC_Roman          unicode     ( #'mac-roman' #'macroman'  ))
+
+        (MAC_Romanian       unicode     ( #'mac-romanian' #'macromanian'  ))
+
+        (MAC_Symbol         unicode     ( #'mac-symbol' #'macsymbol'  ))
+
+        (MAC_Thai           unicode     ( #'mac-thai' #'macthai'  ))
+
+        (MAC_Turkish        unicode     ( #'mac-turkish' #'macturkish'  ))
+
+        (MS_Ansi            unicode     ( #'ms-ansi' 'ms-cp1252' 'microsoft-cp1252' 'cp1252' 'microsoft-ansi' 'windows-1252' 'windows-latin1'))
+
+        (MS_Arabic          unicode     ( 'ms-arabic' 'ms-cp1256' 'microsoft-cp1256' 'cp1256'  'microsoft-arabic' 'windows-1256'  ))
+
+        (MS_Baltic          unicode     ( 'ms-baltic' 'ms-cp1257' 'microsoft-cp1257' 'cp1257' 'microsoft-baltic' 'windows-1257'  ))
+
+        (MS_Cyrillic        unicode     ( 'ms-cyrillic' 'ms-cp1251' 'microsoft-cp1251' 'cp1251' 'microsoft-cyrillic' 'windows-1251'  ))
+
+        (MS_EastEuropean    unicode     ( 'ms-easteuropean' 'ms-ee' 'cp1250' 'ms-cp1250' 'microsoft-cp1250' 'microsoft-easteuropean' 'windows-1250'  ))
+
+        (MS_Greek           unicode     ( 'ms-greek' 'ms-cp1253' 'microsoft-cp1253' 'cp1253' 'microsoft-greek' 'windows-1253' ))
+
+        (MS_Hebrew          unicode     ( 'ms-hebrew' 'ms-cp1255' 'microsoft-cp1255' 'cp1255' 'microsoft-hebrew' 'windows-1255' ))
+
+"/        (MS_Symbol           unicode     ( 'ms-symbol' 'microsoft-symbol'  ))
+
+        (MS_Turkish         unicode     ( 'ms-turkish' 'ms-cp1254' 'microsoft-cp1254' 'cp1254' 'microsoft-turkish' 'windows-1254'  ))
+
+        (NEXT               unicode     ( 'next' 'nextstep'  ))
+
+        (SJIS               unicode     ( 'sjis' 'shiftjis'  ))
+    ) triplesDo:[:className :decodesTo :encodesTo |
+        |implClass dict|
+
+        implClass := (Smalltalk at:#CharacterEncoderImplementations) at:className.
+        implClass isNil ifTrue:[
+            self halt:'missing encoder-class'
+        ] ifFalse:[
+            dict := EncoderClassesByName at:decodesTo ifAbsent:nil.
+            dict isNil ifTrue:[
+                EncoderClassesByName at:decodesTo put:(dict := Dictionary new).
+            ].
+            encodesTo do:[:eachEncodingAlias |
+                (dict includesKey:eachEncodingAlias) ifTrue:[
+                    self halt:'conflicting alias'
+                ].
+                dict at:eachEncodingAlias put:implClass.    
+            ]
+        ].
+    ].
 
     "
      self initialize
@@ -1089,7 +574,7 @@
             ]
         ]
     ].
-    encoder := self cachedEncoderToEncodeFrom:oldEncoding into:newEncoding.
+    encoder := self encoderToEncodeFrom:oldEncoding into:newEncoding.
     ^ encoder encode:codePoint.
 !
 
@@ -1128,7 +613,7 @@
         ]
     ].
 
-    encoder := self cachedEncoderToEncodeFrom:oldEncoding into:newEncoding.
+    encoder := self encoderToEncodeFrom:oldEncoding into:newEncoding.
     ^ encoder encodeString:aString.
 !
 
@@ -1273,10 +758,6 @@
     ^ (self nameWithoutPrefix asLowercase copyReplaceAll:$_ with:$-) asSymbol
 !
 
-namesOfEncoding
-    ^ Array with:(self nameWithoutPrefix asLowercase asSymbol)
-!
-
 supportedExternalEncodings
     "return an array of arrays containing the names of supported
      encodings which are supported for external resources (i.e. files).
@@ -1334,13 +815,34 @@
 decode:anEncoding
     "given an integer in my encoding, return a unicode codePoint for it"
 
-    ^ implementation decode:anEncoding
+    self subclassResponsibility
 !
 
 decodeString:anEncodedString
     "given a string in my encoding, return a unicode-string for it"
 
-    ^ implementation decodeString:anEncodedString
+    |newString|
+
+    newString := String new:(anEncodedString size).
+    1 to:anEncodedString size do:[:idx |
+        |myCode uniCodePoint|
+
+        myCode := (anEncodedString at:idx) codePoint.
+        uniCodePoint := self decode:myCode.
+        uniCodePoint > 16rFF ifTrue:[
+            uniCodePoint > 16rFFFF ifTrue:[
+                newString bitsPerCharacter < 32 ifTrue:[
+                    newString := Unicode32String fromString:newString.
+                ]
+            ] ifFalse:[
+                newString bitsPerCharacter < 16 ifTrue:[
+                    newString := Unicode16String fromString:newString.
+                ]
+            ].
+        ].
+        newString at:idx put:(Character value:uniCodePoint).
+    ].
+    ^ newString
 
     "
      ISO8859_1 decodeString:'hello'
@@ -1350,13 +852,21 @@
 encode:aCodePoint
     "given a codePoint in unicode, return a byte in my encoding for it"
 
-    ^ implementation encode:aCodePoint
+    self subclassResponsibility
 !
 
 encodeString:aUnicodeString
     "given a string in unicode, return a string in my encoding for it"
 
-    ^ implementation encodeString:aUnicodeString
+    |newString myCode uniCodePoint|
+
+    newString := self newString:(aUnicodeString size).
+    1 to:aUnicodeString size do:[:idx |
+        uniCodePoint := (aUnicodeString at:idx) codePoint.
+        myCode := self encode:uniCodePoint.
+        newString at:idx put:(Character value:myCode).
+    ].
+    ^ newString
 ! !
 
 !CharacterEncoder methodsFor:'error handling'!
@@ -1424,17 +934,6 @@
 
 !CharacterEncoder methodsFor:'private'!
 
-implementation:anImplInstance
-    implementation := anImplInstance  
-!
-
-initialize
-
-    "
-     ISO8859_1 new initialize
-    "
-!
-
 newString:size
     self subclassResponsibility
 ! !
@@ -1445,14 +944,6 @@
     ^ false
 !
 
-maxCode
-    ^ implementation maxCode
-!
-
-minCode
-    ^ implementation minCode
-!
-
 nameOfDecodedCode
     "Most coders decode from their code into unicode / encode from unicode into their code.
      There are a few exceptions to this, though - these must redefine this."
@@ -1464,26 +955,10 @@
     ^ self class nameOfEncoding
 !
 
-namesOfEncoding
-    ^ self class namesOfEncoding
-!
-
 userFriendlyNameOfEncoding
     ^ self class userFriendlyNameOfEncoding
 ! !
 
-!ASCII class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ascii' 'us-ascii' 'iso-ir-6' 'ibm-367' 'ms-cp367' 'cp367'  'iso646-us' 'ibm-cp367')
-! !
-
-!CP437 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'cp437'  'cp-437' 'ibm-437' 'ms-cp437' 'microsoft-cp437' 'ibm-cp437' )
-! !
-
 !CharacterEncoder::CompoundEncoder class methodsFor:'documentation'!
 
 documentation
@@ -1550,235 +1025,6 @@
 "
 ! !
 
-!CharacterEncoder::ISO10646_1 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'unicode' 'iso10646-1' 'iso-10646-1' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Unicode'
-! !
-
-!CharacterEncoder::ISO10646_1 methodsFor:'encoding & decoding'!
-
-decode:aCode
-    ^ aCode
-!
-
-decodeString:aString
-    ^ aString
-!
-
-encode:aCode
-    ^ aCode
-!
-
-encodeString:aString
-    ^ aString
-! !
-
-!CharacterEncoder::ISO10646_to_UTF8 class methodsFor:'queries'!
-
-nameOfEncoding
-    "I encode utf8 into unicode and vice versa"
-
-    ^ #'utf8'
-!
-
-namesOfEncoding
-    "I encode utf8 into unicode and vice versa"
-
-    ^ #( 'utf8' 'utf-8' )
-! !
-
-!ISO8859_1 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-1' 'iso-8859-1' 'latin-1' 'latin1' 'iso-ir-100' 'ibm-819' 'ms-cp819' 'ibm-cp819' )
-! !
-
-!ISO8859_1 methodsFor:'encoding & decoding'!
-
-decode:codeArg
-    "Automagically generated by generateCode - do not modify.
-     Decode from my encoding into unicode."
-
-    |code "{ Class: SmallInteger }"|
-
-    code := codeArg.
-    code > 16rFF ifTrue:[
-	^ self decodingError.
-    ].
-    ^ code.
-!
-
-encode:unicodeArg
-    "Automagically generated by generateCode - do not modify.
-     Encode from unicode into my encoding."
-
-    |unicode "{ Class: SmallInteger }"|
-
-    unicode := unicodeArg.
-    unicode > 16rFF ifTrue:[
-        ^ self encodingError.
-    ].
-    ^ unicode.
-! !
-
-!ISO8859_1 methodsFor:'private'!
-
-newString:size
-    ^ String new:size
-! !
-
-!SingleByteEncoder class methodsFor:'instance creation'!
-
-new
-    "singleton - there is only one"
-
-    mySingleInstance isNil ifTrue:[
-        mySingleInstance := super new.
-    ].
-    ^ mySingleInstance
-! !
-
-!SingleByteEncoder class methodsFor:'private'!
-
-flushSingletons
-    mySingleInstance := nil.
-    super flushSingletons
-
-    "
-     self flushSingletons
-    "
-! !
-
-!SingleByteEncoder class methodsFor:'queries'!
-
-maxCode
-    ^ 255 
-!
-
-minCode
-    ^ 0 
-! !
-
-!SingleByteEncoder class methodsFor:'testing'!
-
-isAbstract
-    self == CharacterEncoder::SingleByteEncoder ifTrue:[^ true].
-    ^ super isAbstract
-! !
-
-!SingleByteEncoder methodsFor:'private'!
-
-newString:size
-    ^ String uninitializedNew:size
-! !
-
-!ISO8859_11 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-11' 'iso-8859-11' 'thai' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Thai'
-! !
-
-!ISO8859_13 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-13' 'iso-8859-13' 'latin7' 'latin-7' )
-! !
-
-!ISO8859_14 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-14' 'iso-8859-14' 'latin8' 'latin-8' 'latin-celtic' )
-! !
-
-!ISO8859_15 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-15' 'iso-8859-15' 'latin9' 'latin-9' 'iso-ir-203')
-! !
-
-!ISO8859_16 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-16' 'iso-8859-16' 'latin10' 'latin-10' )
-! !
-
-!ISO8859_2 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-2' 'iso-8859-2' 'latin2' 'latin-2' 'iso-ir-101')
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Central European'
-! !
-
-!ISO8859_3 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-3' 'iso-8859-3' 'latin3' 'latin-3' 'iso-ir-109')
-! !
-
-!ISO8859_4 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-4' 'iso-8859-4' 'latin4' 'latin-4' 'iso-ir-110')
-! !
-
-!ISO8859_5 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-5' 'iso-8859-5' 'cyrillic' 'iso-ir-144' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Cyrillic'
-! !
-
-!ISO8859_6 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-6' 'iso-8859-6' 'arabic' 'asmo-708' 'ecma-114' 'iso-ir-127' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Arabic'
-! !
-
-!ISO8859_7 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-7' 'iso-8859-7' 'greek' 'iso-ir-126' 'ecma-118')
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Greek'
-! !
-
-!ISO8859_8 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-8' 'iso-8859-8' 'hebrew' 'iso-ir-138' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Hebrew'
-! !
-
-!ISO8859_9 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-9' 'iso-8859-9' 'latin5' 'latin-5' 'iso-ir-148')
-! !
-
 !CharacterEncoder::InverseEncoder class methodsFor:'documentation'!
 
 documentation
@@ -1821,463 +1067,6 @@
         nextPutAll:(decoder nameOfDecodedCode)
 ! !
 
-!JIS0201 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'jis0201' #'jisx0201.1976-0')
-! !
-
-!CharacterEncoder::JIS0208 class methodsFor:'constants'!
-
-defaultRomanCharacterValue
-    ^ 16r2222
-!
-
-romanTable
-    "return a table to decode from roman ascii to 16 bit JIS."
-
-    ^ #(
-	    " "    "excla"          " # "   " $ "   " % "   " & "   " ' "
-	  16r2121 16r212a 16r2149 16r2174 16r2170 16r2173 16r2175 16r2147     "/ 20
-	    " ( "   " ) "   " * "   " + "   " , "   " - "   " . "   " / "
-	  16r214a 16r214b 16r2176 16r215c 16r2124 16r215d 16r2125 16r213f     "/ 28
-	    " 0 "   " 1 "   " 2 "   " 3 "   " 4 "   " 5 "   " 6 "   " 7 "
-	  16r2330 16r2331 16r2332 16r2333 16r2334 16r2335 16r2336 16r2337     "/ 30
-	    " 8 "   " 9 "   " : "   " ; "   " < "   " = "   " > "   " ? "
-	  16r2338 16r2339 16r2127 16r2128 16r2163 16r2161 16r2164 16r2129     "/ 38
-	    " @ "   " A "   " B "   " C "   " D "   " E "   " F "   " G "
-	  16r2177 16r2341 16r2342 16r2343 16r2344 16r2345 16r2346 16r2347     "/ 40
-	    " H "   " I "   " J "   " K "   " L "   " M "   " N "   " O "
-	  16r2348 16r2349 16r234a 16r234b 16r234c 16r234d 16r234e 16r234f     "/ 48
-	    " P "   " Q "   " R "   " S "   " T "   " U "   " V "   " W "
-	  16r2350 16r2351 16r2352 16r2353 16r2354 16r2355 16r2356 16r2357     "/ 50
-	    " X "   " Y "   " Z "   " [ "   " \ "   " ] "   " ^ "   " _ "
-	  16r2358 16r2359 16r235a 16r214e 16r2140 16r214f 16r2130 16r2132     "/ 58
-	    " ` "   " a "   " b "   " c "   " d "   " e "   " f "   " g "
-	  16r2146 16r2361 16r2362 16r2363 16r2364 16r2365 16r2366 16r2367     "/ 60
-	    " h "   " i "   " j "   " k "   " l "   " m "   " n "   " o "
-	  16r2368 16r2369 16r236a 16r236b 16r236c 16r236d 16r236e 16r236f     "/ 68
-	    " p "   " q "   " r "   " s "   " t "   " u "   " v "   " w "
-	  16r2370 16r2371 16r2372 16r2373 16r2374 16r2375 16r2376 16r2377     "/ 70
-	    " x "   " y "   " z "   " { "   " | "   " } "  " ~ "
-	  16r2378 16r2379 16r237a 16r2150 16r2143 16r2151 16r2141 16r2121     "/ 78
-
-	  "/ actually: half-width katakana
-
-	  16r2121 16r2123 16r2156 16r2157 16r2122 16r2126 16r2572 16r2521     "/ 80
-	  16r2523 16r2525 16r2527 16r2529 16r2563 16r2565 16r2567 16r2543     "/ 88
-	  16r213c 16r2522 16r2524 16r2526 16r2528 16r252a 16r252b 16r252d     "/ 90
-	  16r252f 16r2531 16r2533 16r2535 16r2537 16r2539 16r253b 16r253d     "/ 98
-	  16r253f 16r2541 16r2544 16r2546 16r2548 16r254a 16r254b 16r254c     "/ A0
-	  16r254d 16r254e 16r254f 16r2552 16r2555 16r2558 16r255b 16r255e     "/ A8
-	  16r255f 16r2560 16r2561 16r2562 16r2564 16r2566 16r2568 16r2569     "/ B0
-	  16r256a 16r256b 16r256c 16r256d 16r256f 16r2573 16r212b 16r212c     "/ B8
-      ).
-
-    "Created: 30.6.1997 / 14:25:53 / cg"
-    "Modified: 30.6.1997 / 19:11:45 / cg"
-! !
-
-!CharacterEncoder::JIS0208 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'jis0208' 'jisx0208' 'jisx0208.1983-0' 'jisx0208.1990-0')
-! !
-
-!CharacterEncoder::JIS0208_to_JIS7 class methodsFor:'constants'!
-
-jis7KanjiEscapeSequence
-    "return the escape sequence used to switch to kanji in jis7 encoded strings.
-     This happens to be the same as ISO2022-JP's escape sequence."
-
-    Jis7KanjiEscapeSequence isNil ifTrue:[
-	Jis7KanjiEscapeSequence := Character esc asString , '$B'.
-    ].
-    ^ Jis7KanjiEscapeSequence.
-
-    "Created: 26.2.1996 / 17:38:08 / cg"
-    "Modified: 30.6.1997 / 16:03:16 / cg"
-!
-
-jis7KanjiOldEscapeSequence
-    "return the escape sequence used to switch to kanji in some old jis7 encoded strings."
-
-    Jis7KanjiOldEscapeSequence isNil ifTrue:[
-        Jis7KanjiOldEscapeSequence := Character esc asString , '$@'..
-    ].
-    ^ Jis7KanjiOldEscapeSequence.
-!
-
-jis7RomanEscapeSequence
-    "return the escape sequence used to switch to roman in jis7 encoded strings"
-
-    Jis7RomanEscapeSequence isNil ifTrue:[
-	Jis7RomanEscapeSequence := Character esc asString , '(J'.
-    ].
-    ^ Jis7RomanEscapeSequence.
-
-    "Created: 26.2.1996 / 17:38:08 / cg"
-    "Modified: 30.6.1997 / 16:03:16 / cg"
-!
-
-jisISO2022EscapeSequence
-    "return the escape sequence used to switch to kanji in iso2022 encoded strings"
-
-    JisISO2022EscapeSequence isNil ifTrue:[
-        JisISO2022EscapeSequence := Character esc asString , '&@' , Character esc asString , '$B'.
-    ].
-    ^ JisISO2022EscapeSequence.
-! !
-
-!CharacterEncoder::JIS0208_to_JIS7 class methodsFor:'documentation'!
-
-examples
-"
-  Encoding (jis0208 to jis-7)
-     |t|
-
-     t := JIS0208_to_JIS7 decodeString:'hello'.
-     JIS0208_to_JIS7 encodeString:t. 
-
-
-
- Decoding (jis-7 to jis0208):
-
-     JIS0208_to_JIS7 decodeString:'hello'  
-
- ending with a crippled escape:
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     JIS0208_to_JIS7 decodeString:s
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     s := s copyWith:$A.
-     JIS0208_to_JIS7 decodeString:s
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     s := s copyWith:$$.
-     JIS0208_to_JIS7 decodeString:s
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     s := s copyWith:$$.
-     s := s copyWith:$A.
-     JIS0208_to_JIS7 decodeString:s
-
- ending with a KANJI-in,  but no more chars:
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     s := s copyWith:$$.
-     s := s copyWith:$B.
-     JIS0208_to_JIS7 decodeString:s
-
- ending with a KANJI-in, followed by $3 (KO):
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     s := s copyWith:$$.
-     s := s copyWith:$B.
-     s := s , '$3'.
-     JIS0208_to_JIS7 decodeString:s
-
- ending with a KANJI-in, followed by $3$l$OF| (KO RE HA NI):
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     s := s copyWith:$$.
-     s := s copyWith:$B.
-     s := s , '$3$l$OF|'.
-     JIS0208_to_JIS7 decodeString:s
-
- a KO in between:
-
-     |s|
-     s := 'hello' copyWith:Character esc.
-     s := s copyWith:$$.
-     s := s copyWith:$B.
-     s := s , '$3'.
-     s := s copyWith:Character esc.
-     s := s copyWith:$(.
-     s := s copyWith:$B.
-     s := s , 'hello'.
-     JIS0208_to_JIS7 decodeString:s
-
- I dont know what that means ;-):
-
-     |s t l|
-     s := 'kterm ' copyWith:Character esc.
-     s := s copyWith:$$.
-     s := s copyWith:$B.
-     s := s , '$N4A;zC<Kv%(%_%e%l!!<%?'.
-     s := s copyWith:Character esc.
-     s := s copyWith:$(.
-     s := s copyWith:$B.
-     s := s , ' kterm'.
-     t := JIS0208_to_JIS7 decodeString:s.
-
-     l := Label new.
-     l label:t.
-     l font:(Font family:'k14' face:nil style:nil size:nil).
-     l font:(Font family:'gothic' size:17).
-     l font:(Font family:'mincho' size:23).
-     l realize
-"
-! !
-
-!CharacterEncoder::JIS0208_to_JIS7 class methodsFor:'queries'!
-
-nameOfDecodedCode
-    "I encode jis0208 into jis7 and vice versa"
-
-    ^ #'jis0208'
-!
-
-nameOfEncoding
-    "I encode jis0208 into jis7 and vice versa"
-
-    ^ #'jis7'
-!
-
-namesOfEncoding
-    "I encode jis0208 into jis7 and vice versa"
-
-    ^ #( 'jis7' 'jis-7' 'x-jis7' 'x-iso2022-jp' 'iso2022-jp')
-! !
-
-!CharacterEncoder::JIS0212 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'jis0212' )
-! !
-
-!CharacterEncoder::JOHAB class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'johab' )
-! !
-
-!KOI7 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'koi7' )
-! !
-
-!KOI8_R class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'koi8-r' 'cp878' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Cyrillic'
-! !
-
-!CharacterEncoder::KOI8_U class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'koi8-u' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Cyrillic (Ukraine)'
-! !
-
-!CharacterEncoder::KSC5601 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'ksc5601' )
-! !
-
-!MAC_Arabic class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-arabic' 'macarabic' )
-! !
-
-!MAC_CentralEuropean class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-centraleuropean' #'mac-centraleurope' 'maccentraleurope' 'maccentraleuropean' )
-! !
-
-!MAC_Croatian class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-croatian' 'maccroatian')
-! !
-
-!MAC_Cyrillic class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-cyrillic' 'maccyrillic' )
-! !
-
-!MAC_Dingbats class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-dingbats'  'macdingbats'  'macdingbat')
-! !
-
-!MAC_Farsi class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-farsi' )
-! !
-
-!MAC_Greek class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-greek' #'macgreek' )
-! !
-
-!MAC_Hebrew class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-hebrew' #'machebrew'  )
-! !
-
-!MAC_Iceland class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-iceland'  #'maciceland')
-! !
-
-!CharacterEncoder::MAC_Japanese class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-japanese' )
-! !
-
-!CharacterEncoder::MAC_Korean class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-korean' )
-! !
-
-!MAC_Roman class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-roman' #'macroman')
-! !
-
-!MAC_Romanian class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-romanian' #'macromania' )
-! !
-
-!MAC_Symbol class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-symbol' #'macsymbol'  )
-! !
-
-!CharacterEncoder::MAC_Thai class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-thai'  #'macthai' )
-! !
-
-!MAC_Turkish class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'mac-tukish'  #'macturkish' )
-! !
-
-!MS_Ansi class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( #'ms-ansi' 'ms-cp1252' 'microsoft-cp1252' 'cp1252' 'microsoft-ansi' 'windows-1252' 'windows-latin1')
-! !
-
-!MS_Arabic class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-arabic' 'ms-cp1256' 'microsoft-cp1256' 'cp1256'  'microsoft-arabic' 'windows-1256'  )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Arabic'
-! !
-
-!MS_Baltic class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-baltic' 'ms-cp1257' 'microsoft-cp1257' 'cp1257' 'microsoft-baltic' 'windows-1257'  )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Baltic'
-! !
-
-!MS_Cyrillic class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-cyrillic' 'ms-cp1251' 'microsoft-cp1251' 'cp1251' 'microsoft-cyrillic' 'windows-1251'  )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Cyrillic'
-! !
-
-!MS_EastEuropean class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-easteuropean' 'ms-ee' 'cp1250' 'ms-cp1250' 'microsoft-cp1250' 'microsoft-easteuropean' 'windows-1250'  )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'East European'
-! !
-
-!MS_Greek class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-greek' 'ms-cp1253' 'microsoft-cp1253' 'cp1253' 'microsoft-greek' 'windows-1253' )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Greek'
-! !
-
-!MS_Hebrew class methodsFor:'mapping'!
-
-userFriendlyNameOfEncoding
-    ^ 'Hebrew'
-! !
-
-!MS_Hebrew class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-hebrew' 'ms-cp1255' 'microsoft-cp1255' 'cp1255' 'microsoft-hebrew' 'windows-1255' )
-! !
-
-!MS_Symbol class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-symbol' 'ms-cp1254' 'microsoft-cp1254' 'cp1254' 'microsoft-symbol' 'windows-1254'  )
-! !
-
-!MS_Turkish class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'ms-turkish' 'ms-cp1254' 'microsoft-cp1254' 'cp1254' 'microsoft-turkish' 'windows-1254'  )
-!
-
-userFriendlyNameOfEncoding
-    ^ 'Turkish'
-! !
-
-!NEXT class methodsFor:'mapping'!
-
-namesOfEncoding
-    ^ #( 'next' 'nextstep'  )
-! !
-
 !CharacterEncoder::NullEncoder class methodsFor:'documentation'!
 
 documentation
@@ -2286,28 +1075,6 @@
 "
 ! !
 
-!CharacterEncoder::NullEncoder class methodsFor:'instance creation'!
-
-new
-    "singleton - there is only one"
-
-    mySingleInstance isNil ifTrue:[
-	mySingleInstance := self basicNew initialize.
-    ].
-    ^ mySingleInstance
-! !
-
-!CharacterEncoder::NullEncoder class methodsFor:'private'!
-
-flushSingletons
-    mySingleInstance := nil.
-    super flushSingletons
-
-    "
-     self flushSingletons
-    "
-! !
-
 !CharacterEncoder::NullEncoder methodsFor:'encoding & decoding'!
 
 decode:aCode
@@ -2340,18 +1107,6 @@
 generateEncoderCode
 ! !
 
-!CharacterEncoder::SJIS class methodsFor:'mapping'!
-
-namesOfEncoding
-    ^ #( 'sjis' 'shiftjis'  )
-! !
-
-!ISO8859_10 class methodsFor:'queries'!
-
-namesOfEncoding
-    ^ #( 'iso8859-10' 'iso-8859-10' 'latin6' 'latin-6' 'iso-ir-157')
-! !
-
 !CharacterEncoder::TwoStepEncoder class methodsFor:'documentation'!
 
 documentation
@@ -2405,7 +1160,7 @@
 !CharacterEncoder class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.51 2004-03-08 17:06:33 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.52 2004-03-08 23:04:03 cg Exp $'
 ! !
 
 CharacterEncoder initialize!
--- a/CharacterEncoderImplementation.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/CharacterEncoderImplementation.st	Tue Mar 09 00:05:08 2004 +0100
@@ -10,67 +10,14 @@
 !
 
 
-!CharacterEncoderImplementation methodsFor:'encoding & decoding'!
-
-decode:anEncoding
-    "given an integer in my encoding, return a unicode codePoint for it"
-
-    self subclassResponsibility
-!
-
-decodeString:anEncodedString
-    "given a string in my encoding, return a unicode-string for it"
-
-    |newString|
-
-    newString := String new:(anEncodedString size).
-    1 to:anEncodedString size do:[:idx |
-        |myCode uniCodePoint|
+!CharacterEncoderImplementation class methodsFor:'instance creation'!
 
-        myCode := (anEncodedString at:idx) codePoint.
-        uniCodePoint := self decode:myCode.
-        uniCodePoint > 16rFF ifTrue:[
-            uniCodePoint > 16rFFFF ifTrue:[
-                newString bitsPerCharacter < 32 ifTrue:[
-                    newString := Unicode32String fromString:newString.
-                ]
-            ] ifFalse:[
-                newString bitsPerCharacter < 16 ifTrue:[
-                    newString := Unicode16String fromString:newString.
-                ]
-            ].
-        ].
-        newString at:idx put:(Character value:uniCodePoint).
-    ].
-    ^ newString
-
-    "
-     ISO8859_1 decodeString:'hello'
-    "
-!
-
-encode:aCodePoint
-    "given a codePoint in unicode, return a byte in my encoding for it"
-
-    self subclassResponsibility
-!
-
-encodeString:aUnicodeString
-    "given a string in unicode, return a string in my encoding for it"
-
-    |newString myCode uniCodePoint|
-
-    newString := self newString:(aUnicodeString size).
-    1 to:aUnicodeString size do:[:idx |
-        uniCodePoint := (aUnicodeString at:idx) codePoint.
-        myCode := self encode:uniCodePoint.
-        newString at:idx put:(Character value:myCode).
-    ].
-    ^ newString
+new
+    ^ self basicNew
 ! !
 
 !CharacterEncoderImplementation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/CharacterEncoderImplementation.st,v 1.1 2004-03-08 17:08:27 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/CharacterEncoderImplementation.st,v 1.2 2004-03-08 23:03:50 cg Exp $'
 ! !
--- a/CharacterEncoderImplementations__ISO10646_1.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/CharacterEncoderImplementations__ISO10646_1.st	Tue Mar 09 00:05:08 2004 +0100
@@ -2,7 +2,7 @@
 
 "{ NameSpace: CharacterEncoderImplementations }"
 
-CharacterEncoderImplementation subclass:#ISO10646_1
+CharacterEncoder subclass:#ISO10646_1
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -37,5 +37,5 @@
 !ISO10646_1 class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__ISO10646_1.st,v 1.2 2004-03-08 17:09:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__ISO10646_1.st,v 1.3 2004-03-08 23:03:53 cg Exp $'
 ! !
--- a/CharacterEncoderImplementations__MS_Symbol.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/CharacterEncoderImplementations__MS_Symbol.st	Tue Mar 09 00:05:08 2004 +0100
@@ -13,11 +13,37 @@
 !MS_Symbol class methodsFor:'mapping'!
 
 mapFileURL2_relativePathName
-    ^ 'CP1254'
+    ^ 'CP1258'
+!
+
+mapping
+"
+# From: http://std.dkuug.dk/i18n/charmaps/CP1258
+
+<!!DOCTYPE HTML PUBLIC '-//IETF//DTD HTML 2.0//EN'>
+<HTML><HEAD>
+<TITLE>300 Multiple Choices</TITLE>
+</HEAD><BODY>
+<H1>Multiple Choices</H1>
+The document name you requested (<code>/i18n/charmaps/CP1258</code>) could not be found on this server.
+However, we found documents with names similar to the one you requested.<p>Available documents:
+<ul>
+<li><a href='/i18n/charmaps/CP1250'>/i18n/charmaps/CP1250</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1251'>/i18n/charmaps/CP1251</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1252'>/i18n/charmaps/CP1252</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1253'>/i18n/charmaps/CP1253</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1254'>/i18n/charmaps/CP1254</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1255'>/i18n/charmaps/CP1255</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1256'>/i18n/charmaps/CP1256</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1257'>/i18n/charmaps/CP1257</a> (mistyped character)
+</ul>
+</BODY></HTML>
+
+"
 ! !
 
 !MS_Symbol class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__MS_Symbol.st,v 1.2 2004-03-08 17:09:54 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__MS_Symbol.st,v 1.3 2004-03-08 23:03:46 cg Exp $'
 ! !
--- a/CharacterEncoderImplementations__MS_Turkish.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/CharacterEncoderImplementations__MS_Turkish.st	Tue Mar 09 00:05:08 2004 +0100
@@ -13,7 +13,7 @@
 !MS_Turkish class methodsFor:'mapping'!
 
 mapFileURL2_relativePathName
-    ^ 'CP1254'
+    ^ 'CP1258'
 !
 
 mapping
@@ -285,5 +285,5 @@
 !MS_Turkish class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__MS_Turkish.st,v 1.2 2004-03-08 17:07:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderImplementations__MS_Turkish.st,v 1.3 2004-03-08 23:03:48 cg Exp $'
 ! !
--- a/Date.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/Date.st	Tue Mar 09 00:05:08 2004 +0100
@@ -675,6 +675,9 @@
 !
 
 defaultFormatString
+    (DefaultFormats isNil or:[EnvironmentChange]) ifTrue:[
+	self initNames
+    ].
     ^ DefaultFormats at:Language ifAbsent:(DefaultFormats at:#en).
 
     "
@@ -811,6 +814,9 @@
 !
 
 longFormatString
+    (LongFormats isNil or:[EnvironmentChange]) ifTrue:[
+	self initNames
+    ].
     ^ LongFormats at:Language ifAbsent:(LongFormats at:#en).
 
     "
@@ -894,6 +900,9 @@
 !
 
 shortFormatString
+    (ShortFormats isNil or:[EnvironmentChange]) ifTrue:[
+	self initNames
+    ].
     ^ ShortFormats at:Language ifAbsent:(ShortFormats at:#en).
 
     "
@@ -990,10 +999,10 @@
 
 initialize
     "check for case where Resource-classes are absent"
-    ResourcePack isNil ifTrue:[
-	self initNames
-    ] ifFalse:[
-	Smalltalk addDependent:self.
+    self initNames.
+
+    Smalltalk addDependent:self.
+    Language ~= 'en' ifTrue:[
 	EnvironmentChange := true
     ]
 !
@@ -1140,14 +1149,14 @@
                       'nov'
                       'dec').
 
-    DayNames at:'en' put:enDayNames.
-    DayAbbrevs at:'en' put:enDayAbbrevs.
-    MonthNames at:'en' put:enMonthNames.
-    MonthAbbrevs at:'en' put:enMonthAbbrevs.
-
-    DefaultFormats at:'en' put:(enDefaultFormat := '%d-%m-%y').
-    ShortFormats at:'en' put:(enShortFormat := '%d-%m-%y').
-    LongFormats at:'en' put:(enLongFormat := '%(dayName), %d-%m-%y').
+    DayNames at:#'en' put:enDayNames.
+    DayAbbrevs at:#'en' put:enDayAbbrevs.
+    MonthNames at:#'en' put:enMonthNames.
+    MonthAbbrevs at:#'en' put:enMonthAbbrevs.
+
+    DefaultFormats at:#'en' put:(enDefaultFormat := '%d-%m-%y').
+    ShortFormats at:#'en' put:(enShortFormat := '%d-%m-%y').
+    LongFormats at:#'en' put:(enLongFormat := '%(dayName), %d-%m-%y').
 
     lang := Smalltalk language asSymbol.
     lang ~~ #'en' ifTrue:[
@@ -2274,6 +2283,9 @@
 
     |format|
 
+    (DefaultFormats isNil or:[EnvironmentChange]) ifTrue:[
+	self initNames
+    ].
     format := DefaultFormats at:Language ifAbsent:[DefaultFormats at:#en].
     self printOn:aStream format:format.
 
@@ -2393,7 +2405,7 @@
 !Date class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Date.st,v 1.85 2004-03-08 15:44:44 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Date.st,v 1.86 2004-03-08 23:05:08 cg Exp $'
 ! !
 
 Date initialize!
--- a/Encoder_ISO10646_1.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/Encoder_ISO10646_1.st	Tue Mar 09 00:05:08 2004 +0100
@@ -2,7 +2,7 @@
 
 "{ NameSpace: CharacterEncoderImplementations }"
 
-CharacterEncoderImplementation subclass:#ISO10646_1
+CharacterEncoder subclass:#ISO10646_1
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -37,5 +37,5 @@
 !ISO10646_1 class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Encoder_ISO10646_1.st,v 1.2 2004-03-08 17:09:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Encoder_ISO10646_1.st,v 1.3 2004-03-08 23:03:53 cg Exp $'
 ! !
--- a/Encoder_MS_Symbol.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/Encoder_MS_Symbol.st	Tue Mar 09 00:05:08 2004 +0100
@@ -13,11 +13,37 @@
 !MS_Symbol class methodsFor:'mapping'!
 
 mapFileURL2_relativePathName
-    ^ 'CP1254'
+    ^ 'CP1258'
+!
+
+mapping
+"
+# From: http://std.dkuug.dk/i18n/charmaps/CP1258
+
+<!!DOCTYPE HTML PUBLIC '-//IETF//DTD HTML 2.0//EN'>
+<HTML><HEAD>
+<TITLE>300 Multiple Choices</TITLE>
+</HEAD><BODY>
+<H1>Multiple Choices</H1>
+The document name you requested (<code>/i18n/charmaps/CP1258</code>) could not be found on this server.
+However, we found documents with names similar to the one you requested.<p>Available documents:
+<ul>
+<li><a href='/i18n/charmaps/CP1250'>/i18n/charmaps/CP1250</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1251'>/i18n/charmaps/CP1251</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1252'>/i18n/charmaps/CP1252</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1253'>/i18n/charmaps/CP1253</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1254'>/i18n/charmaps/CP1254</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1255'>/i18n/charmaps/CP1255</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1256'>/i18n/charmaps/CP1256</a> (mistyped character)
+<li><a href='/i18n/charmaps/CP1257'>/i18n/charmaps/CP1257</a> (mistyped character)
+</ul>
+</BODY></HTML>
+
+"
 ! !
 
 !MS_Symbol class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Encoder_MS_Symbol.st,v 1.2 2004-03-08 17:09:54 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Encoder_MS_Symbol.st,v 1.3 2004-03-08 23:03:46 cg Exp $'
 ! !
--- a/Encoder_MS_Turkish.st	Mon Mar 08 20:05:11 2004 +0100
+++ b/Encoder_MS_Turkish.st	Tue Mar 09 00:05:08 2004 +0100
@@ -13,7 +13,7 @@
 !MS_Turkish class methodsFor:'mapping'!
 
 mapFileURL2_relativePathName
-    ^ 'CP1254'
+    ^ 'CP1258'
 !
 
 mapping
@@ -285,5 +285,5 @@
 !MS_Turkish class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Encoder_MS_Turkish.st,v 1.2 2004-03-08 17:07:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Encoder_MS_Turkish.st,v 1.3 2004-03-08 23:03:48 cg Exp $'
 ! !
--- a/resources/de.rs	Mon Mar 08 20:05:11 2004 +0100
+++ b/resources/de.rs	Tue Mar 09 00:05:08 2004 +0100
@@ -1,12 +1,18 @@
 #encoding iso8859-1
 
-; $Header: /cvs/stx/stx/libbasic/resources/de.rs,v 1.1 2004-03-08 14:18:29 cg Exp $
+; $Header: /cvs/stx/stx/libbasic/resources/de.rs,v 1.2 2004-03-08 23:04:35 cg Exp $
 ;
 ; German strings
 ;
 ; this file contains 8bit national characters;
 ; DONT EDIT this file with an old vi !
 
+SHORTDATEFORMAT '%D.%M.%y'
+DATEFORMAT      '%D.%(ShortMonthName).%y'
+LONGDATEFORMAT  '%(DayName), den %D.%M.%y'
+
+TIMEFORMAT      '%h:%m:%s'
+
 'monday'      'Montag'
 'tuesday'     'Dienstag'
 'wednesday'   'Mittwoch'
--- a/resources/it.rs	Mon Mar 08 20:05:11 2004 +0100
+++ b/resources/it.rs	Tue Mar 09 00:05:08 2004 +0100
@@ -1,12 +1,16 @@
 #encoding iso8859-1
 
-; $Header: /cvs/stx/stx/libbasic/resources/it.rs,v 1.1 2004-03-08 14:18:29 cg Exp $
+; $Header: /cvs/stx/stx/libbasic/resources/it.rs,v 1.2 2004-03-08 23:04:35 cg Exp $
 ;
 ; Italian strings
 ;
 ; this file contains 8bit national characters;
 ; DONT EDIT this file with an old vi !
 
+SHORTDATEFORMAT '%D/%M/%y'
+DATEFORMAT      '%D/%M/%y'
+LONGDATEFORMAT  '%D/%M/%y'
+
 'monday'        'lunedi'
 'tuesday'       'martedi'
 'wednesday'     'mercoledi'
--- a/resources/sv.rs	Mon Mar 08 20:05:11 2004 +0100
+++ b/resources/sv.rs	Tue Mar 09 00:05:08 2004 +0100
@@ -1,12 +1,16 @@
 #encoding iso8859-1
 
-; $Header: /cvs/stx/stx/libbasic/resources/sv.rs,v 1.1 2004-03-08 14:18:29 cg Exp $
+; $Header: /cvs/stx/stx/libbasic/resources/sv.rs,v 1.2 2004-03-08 23:04:35 cg Exp $
 ;
 ; Swedish strings
 ;
 ; this file contains 8bit national characters;
 ; DONT EDIT this file with an old vi !
 
+SHORTDATEFORMAT '%y-%M-%d'
+DATEFORMAT      '%y-%M-%d'
+LONGDATEFORMAT  '%y-%M-%d'
+
 'monday'        'måndag'
 'tuesday'       'tisdag'
 'wednesday'     'onsdag'