[squeak-dev] The Trunk: Multilingual-nice.50.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[squeak-dev] The Trunk: Multilingual-nice.50.mcz

commits-2
Nicolas Cellier uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-nice.50.mcz

==================== Summary ====================

Name: Multilingual-nice.50
Author: nice
Time: 5 October 2009, 8:52:58 am
UUID: 713520f0-e41d-4c59-91e5-51b1860cbc0c
Ancestors: Multilingual-nice.49

Apply cleanup from http://bugs.squeak.org/view.php?id=6395
Character>>asUnicodeChar seems weird:
- either it returns an Integer ($A asUnicodeChar)
- or a Character (16r100000F asCharacter asUnicodeChar)

Method comment says this method should be replaced...
It has a unique sender CompoundTextConverter>>nextFromStream:

The fix from Yoshiki is:
1) fix the behaviour to allways answer a Character
2) move the method in CompoundTextConverter>>toUnicode:

=============== Diff against Multilingual-nice.49 ===============

Item was added:
+ ----- Method: CompoundTextConverter>>toUnicode: (in category 'private') -----
+ toUnicode: aChar
+
+ | table charset v |
+ aChar leadingChar = 0 ifTrue: [^ aChar].
+ charset := EncodedCharSet charsetAt: aChar leadingChar.
+ charset isCharset ifFalse: [^ aChar].
+ table := charset ucsTable.
+ table isNil ifTrue: [^ Character value: 16rFFFD].
+
+ v := table at: aChar charCode + 1.
+ v = -1 ifTrue: [^ Character value: 16rFFFD].
+
+ ^ Character leadingChar: charset unicodeLeadingChar code: v.!

Item was changed:
  ----- Method: CompoundTextConverter>>nextFromStream: (in category 'conversion') -----
  nextFromStream: aStream
 
  | character character2 size leadingChar offset result |
  aStream isBinary ifTrue: [^ aStream basicNext].
 
  character := aStream basicNext.
  character ifNil: [^ nil].
  character == Character escape ifTrue: [
  self parseShiftSeqFromStream: aStream.
  character := aStream basicNext.
  character ifNil: [^ nil]].
  character asciiValue < 128 ifTrue: [
  size := state g0Size.
  leadingChar := state g0Leading.
  offset := 16r21.
  ] ifFalse: [
  size :=state g1Size.
  leadingChar := state g1Leading.
  offset := 16rA1.
  ].
  size = 1 ifTrue: [
  leadingChar = 0
  ifTrue: [^ character]
  ifFalse: [^ Character leadingChar: leadingChar code: character asciiValue]
  ].
  size = 2 ifTrue: [
  character2 := aStream basicNext.
  character2 ifNil: [^ nil. "self errorMalformedInput"].
  character := character asciiValue - offset.
  character2 := character2 asciiValue - offset.
  result := Character leadingChar: leadingChar code: character * 94 + character2.
+ ^ self toUnicode: result
- ^ result asUnicodeChar.
- "^ self toUnicode: result"
  ].
  self error: 'unsupported encoding'.
  !