[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