--- 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!