[squeak-dev] The Trunk: Multilingual-mt.265.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Mar 8 15:46:35 UTC 2022
Marcel Taeumel uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-mt.265.mcz
==================== Summary ====================
Name: Multilingual-mt.265
Author: mt
Time: 8 March 2022, 4:46:32.314437 pm
UUID: 73f40056-c2a2-3e4b-8d3a-9a1d7595945d
Ancestors: Multilingual-mt.263
Fixes Latin-1 ByteString encoding for ShiftJISTextConverter.
=============== Diff against Multilingual-mt.263 ===============
Item was added:
+ ----- Method: ShiftJISTextConverter class>>initializeLatin1MapAndEncodings (in category 'class initialization') -----
+ initializeLatin1MapAndEncodings
+ "Initialize the latin1Map and latin1Encodings.
+ These variables ensure that conversions from latin1 ByteString is reasonably fast."
+
+ latin1Map := ByteArray new: 256 withAll: 1.
+ latin1Encodings := Array new: 256 withAll: nil.
+
+ 0 to: 127 do: [:i | latin1Map at: i+1 put: 0].
+ latin1Map at: 16r5C + 1 put: 1. "$\ ... cannot be encoded"
+ latin1Map at: 16r7E + 1 put: 1. "$~ ... cannot be encoded"
+
+ latin1Encodings at: 16rA5 "YEN SIGN" + 1 put: { 16r5C } asByteArray asString.!
Item was changed:
----- Method: ShiftJISTextConverter>>nextFromStream: (in category 'conversion') -----
nextFromStream: aStream
| character1 character2 value1 value2 char1Value result |
aStream isBinary ifTrue: [^ aStream basicNext].
character1 := aStream basicNext.
character1 isNil ifTrue: [^ nil].
char1Value := character1 asciiValue.
+ (char1Value < 16r81) ifTrue: [
+ char1Value = 16r5C "$\" ifTrue: [^ 16rA5 "YEN SIGN"].
+ char1Value = 16r7E "$~" ifTrue: [^ Character leadingChar: self leadingChar code: 16r203E "OVERLINE"].
+ ^ character1].
- (char1Value < 16r81) ifTrue: [^ character1].
(char1Value > 16rA0 and: [char1Value < 16rE0]) ifTrue: [^ self katakanaValue: char1Value].
character2 := aStream basicNext.
character2 = nil ifTrue: [^ nil "self errorMalformedInput"].
value1 := character1 asciiValue.
character1 asciiValue >= 224 ifTrue: [value1 := value1 - 64].
value1 := value1 - 129 bitShift: 1.
value2 := character2 asciiValue.
character2 asciiValue >= 128 ifTrue: [value2 := value2 - 1].
character2 asciiValue >= 158 ifTrue: [
value1 := value1 + 1.
value2 := value2 - 158
] ifFalse: [value2 := value2 - 64].
result := Character leadingChar: self leadingChar code: value1 * 94 + value2.
^ self toUnicode: result
!
Item was changed:
----- Method: ShiftJISTextConverter>>nextPut:toStream: (in category 'conversion') -----
nextPut: aCharacter toStream: aStream
| charCode leadingChar aChar |
aStream isBinary ifTrue: [^aCharacter storeBinaryOn: aStream].
aChar := aCharacter.
charCode := aCharacter charCode.
aChar isTraditionalDomestic ifFalse: [
(16rFF61 <= charCode and: [charCode <= 16rFF9F]) ifTrue: [
^aStream basicNextPut: (self sjisKatakanaFor: charCode) ].
+ aChar := (JISX0208 charFromUnicode: charCode) ifNil: [
- aChar := (JISX0208 charFromUnicode: charCode) ifNil: [
^aCharacter "an error or nil may be better" ].
charCode := aChar charCode ].
+ charCode = 16r203E "OVERLINE" ifTrue: [
+ aStream basicNextPut: $~. "16r7E"
+ ^ aChar].
(leadingChar := aChar leadingChar) = 0 ifTrue: [
charCode < 256 ifTrue: [
(latin1Encodings at: charCode + 1)
+ ifNil: [ (latin1Map at: charCode + 1) = 0 "Really no translation needed."
+ ifTrue: [ aStream basicNextPut: aChar ]
+ ifFalse: [ UndefinedConversion signalFor: charCode toEncoding: self ] ]
- ifNil: [ aStream basicNextPut: aChar ]
ifNotNil: [ :encodedString | aStream basicNextPutAll: encodedString ].
^aChar ].
^aStream basicNextPut: aChar ].
leadingChar = self leadingChar ifTrue: [
| upper lower |
upper := charCode // 94 + 33.
lower := charCode \\ 94 + 33.
upper \\ 2 = 1 ifTrue: [
upper := upper + 1 / 2 + 112.
lower := lower + 31
] ifFalse: [
upper := upper / 2 + 112.
lower := lower + 125
].
upper >= 160 ifTrue: [upper := upper + 64].
lower >= 127 ifTrue: [lower := lower + 1].
aStream
basicNextPut: (Character value: upper);
basicNextPut: (Character value: lower) ].
^aChar
!
Item was changed:
+ (PackageInfo named: 'Multilingual') postscript: 'ShiftJISTextConverter initializeLatin1MapAndEncodings.'!
- (PackageInfo named: 'Multilingual') postscript: 'LanguageEnvironment clearDefault.
- HandMorph clearInterpreters.'!
More information about the Squeak-dev
mailing list
|