CharacterEncoder.st
changeset 8122 29670db31014
parent 8120 bafc72f60618
child 8126 33f9c4850e84
--- a/CharacterEncoder.st	Tue Mar 09 00:26:52 2004 +0100
+++ b/CharacterEncoder.st	Tue Mar 09 00:55:50 2004 +0100
@@ -15,7 +15,9 @@
 Object subclass:#CharacterEncoder
 	instanceVariableNames:''
 	classVariableNames:'EncoderClassesByName EncodersByName CachedEncoders LastEncoder
-		AccessLock NullEncoderInstance'
+		AccessLock NullEncoderInstance Jis7KanjiEscapeSequence
+		Jis7RomanEscapeSequence JisISO2022EscapeSequence
+		Jis7KanjiOldEscapeSequence'
 	poolDictionaries:''
 	category:'Collections-Text-Encodings'
 !
@@ -265,7 +267,6 @@
                 AccessLock critical:[
                     unicodeEncoders at:name put:enc.    
                 ].
-self halt.
                 ^ enc.
             ]
         ].
@@ -300,6 +301,11 @@
     oldEncoding == newEncoding ifTrue:[^ NullEncoderInstance].
     (oldEncoding match:newEncoding) ifTrue:[^ NullEncoderInstance].
 
+    (oldEncoding == #unicode) ifTrue:[
+        "/ something -> unicode 
+        ^ self encoderFor:newEncoding.
+    ].
+
     AccessLock critical:[
         encoders := EncodersByName at:oldEncoding ifAbsent:nil.
         encoders isNil ifTrue:[
@@ -309,7 +315,7 @@
         encoder isNil ifTrue:[
             encoderClasses := EncoderClassesByName at:oldEncoding ifAbsent:nil.
             encoderClasses isNil ifTrue:[
-                EncoderClassesByName at:oldEncoding put:(encoders := Dictionary new).
+                EncoderClassesByName at:oldEncoding put:(encoderClasses := Dictionary new).
             ].
             cls := encoderClasses at:newEncoding ifAbsent:nil.
             cls notNil ifTrue:[
@@ -432,6 +438,8 @@
 
         (JIS0208_to_JIS7    jis0208     ( jis7 'jis-7' 'x-jis7' 'x-iso2022-jp' 'iso2022-jp'))
 
+        (JIS0208_to_EUC     jis0208     ( euc #'x-euc-jp' ))
+
         (JIS0212            unicode     ( 'jis0212' ))
 
         (JOHAB              unicode     ( 'johab' ))
@@ -496,7 +504,7 @@
 
         (NEXT               unicode     ( 'next' 'nextstep'  ))
 
-        (SJIS               unicode     ( 'sjis' 'shiftjis'  ))
+        (SJIS               unicode     ( 'sjis' 'shiftjis' 'x-sjis' #'x-shift-jis' #'shift-jis'))
     ) triplesDo:[:className :decodesTo :encodesTo |
         |implClass dict|
 
@@ -522,6 +530,51 @@
     "
 ! !
 
+!CharacterEncoder 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 class methodsFor:'encoding & decoding'!
 
 decode:aCodePoint
@@ -1160,7 +1213,7 @@
 !CharacterEncoder class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.54 2004-03-08 23:21:49 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.55 2004-03-08 23:55:40 cg Exp $'
 ! !
 
 CharacterEncoder initialize!