[squeak-dev] The Trunk: Multilingual-nice.190.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Oct 10 00:28:32 UTC 2013
Nicolas Cellier uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-nice.190.mcz
==================== Summary ====================
Name: Multilingual-nice.190
Author: nice
Time: 10 October 2013, 2:27:55.714 am
UUID: 9a594ba3-cf12-435a-b2d6-df250176e3a0
Ancestors: Multilingual-nice.189
Hardcode [^#endOfRun] and [^#crossedX] instead of [^stopConditions endOfRun] and [^stopConditions crossedX].
The possibility of having a different symbol are never used and cost an indirection in character scanning inner loop.
They also are a barrier to the restoring of primitive 103 for slow machines.
We'll then can get rid of TextStopConditions.
=============== Diff against Multilingual-nice.189 ===============
Item was changed:
----- Method: CharacterScanner>>scanJapaneseCharactersFrom:to:in:rightX: (in category '*Multilingual-Display') -----
scanJapaneseCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX
"this is a scanning method for
multibyte Japanese characters in a WideString - hence the isBreakable:in:in:
a font that does not do character-pair kerning "
| ascii encoding nextDestX startEncoding char charset |
lastIndex := startIndex.
lastIndex > stopIndex ifTrue: [^self handleEndOfRunAt: stopIndex].
startEncoding := (sourceString at: startIndex) leadingChar.
charset := EncodedCharSet charsetAt: startEncoding.
[lastIndex <= stopIndex] whileTrue: [
char := sourceString at: lastIndex.
encoding := char leadingChar.
+ encoding ~= startEncoding
+ ifTrue: [lastIndex := lastIndex - 1. ^#endOfRun].
- encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^ stopConditions endOfRun].
ascii := char charCode.
+ (encoding = 0 and: [ascii < 256 and:[(stopConditions at: ascii + 1) ~~ nil]])
- (encoding = 0 and: [ascii < 256 and:[(stopConditions at: ascii + 1) notNil]])
ifTrue: [^ stopConditions at: ascii + 1].
+ (self isBreakableAt: lastIndex in: sourceString in: charset)
+ ifTrue: [ self registerBreakableIndex].
- (self isBreakableAt: lastIndex in: sourceString in: charset) ifTrue: [
- self registerBreakableIndex.
- ].
nextDestX := destX + (font widthOf: char).
+ nextDestX > rightX
+ ifTrue: [^#crossedX].
- nextDestX > rightX ifTrue: [^ stopConditions crossedX].
destX := nextDestX + kern.
lastIndex := lastIndex + 1.
].
^self handleEndOfRunAt: stopIndex!
Item was changed:
----- Method: CharacterScanner>>scanKernableMultibyteCharactersFrom:to:in:rightX: (in category '*Multilingual-Display') -----
scanKernableMultibyteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX
"this is a scanning method for
multibyte characters in a WideString
a font that does do character-pair kerning via widthAndKernedWidthOfLeft:right:into:"
| ascii encoding nextDestX startEncoding floatDestX widthAndKernedWidth nextChar atEndOfRun char |
lastIndex := startIndex.
lastIndex > stopIndex ifTrue: [^self handleEndOfRunAt: stopIndex].
startEncoding := (sourceString at: startIndex) leadingChar.
floatDestX := destX.
widthAndKernedWidth := Array new: 2.
atEndOfRun := false.
[lastIndex <= stopIndex] whileTrue: [
char := sourceString at: lastIndex.
encoding := char leadingChar.
+ encoding ~= startEncoding
+ ifTrue: [lastIndex := lastIndex - 1. ^#endOfRun].
- encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^ stopConditions endOfRun].
ascii := char charCode.
+ (ascii < 256 and: [(stopConditions at: ascii + 1) ~~ nil])
+ ifTrue: [^ stopConditions at: ascii + 1].
- (ascii < 256 and: [(stopConditions at: ascii + 1) ~~ nil]) ifTrue: [^ stopConditions at: ascii + 1].
nextChar := (lastIndex + 1 <= stopIndex)
ifTrue:[sourceString at: lastIndex + 1]
ifFalse:[
atEndOfRun := true.
"if there is a next char in sourceString, then get the kern
and store it in pendingKernX"
lastIndex + 1 <= sourceString size
ifTrue:[sourceString at: lastIndex + 1]
ifFalse:[ nil]].
font
widthAndKernedWidthOfLeft: char
right: nextChar
into: widthAndKernedWidth.
nextDestX := floatDestX + (widthAndKernedWidth at: 1).
+ nextDestX > rightX ifTrue: [^#crossedX].
- nextDestX > rightX ifTrue: [^ stopConditions crossedX].
floatDestX := floatDestX + kern + (widthAndKernedWidth at: 2).
atEndOfRun
ifTrue:[
pendingKernX := (widthAndKernedWidth at: 2) - (widthAndKernedWidth at: 1).
floatDestX := floatDestX - pendingKernX].
destX := floatDestX .
lastIndex := lastIndex + 1.
].
^self handleEndOfRunAt: stopIndex!
Item was changed:
----- Method: CharacterScanner>>scanMultibyteCharactersFrom:to:in:rightX: (in category '*Multilingual-Display') -----
scanMultibyteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX
"this is a scanning method for
multibyte characters in a WideString
a font that does not do character-pair kerning"
| char ascii encoding nextDestX startEncoding |
lastIndex := startIndex.
startEncoding := (sourceString at: startIndex) leadingChar.
[lastIndex <= stopIndex] whileTrue: [
char := sourceString at: lastIndex.
encoding := char leadingChar.
+ encoding ~= startEncoding
+ ifTrue: [lastIndex := lastIndex - 1. ^#endOfRun].
- encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^ stopConditions endOfRun].
ascii := char charCode.
+ (ascii < 256 and: [(stopConditions at: ascii + 1) ~~ nil])
+ ifTrue: [^ stopConditions at: ascii + 1].
+ "bump nextDestX by the width of the current character"
+ nextDestX := destX + (font widthOf: char).
+ nextDestX > rightX ifTrue: [^#crossedX].
- (ascii < 256 and: [(stopConditions at: ascii + 1) ~~ nil]) ifTrue: [^ stopConditions at: ascii + 1].
- "bump nextDestX by the width of the current character"
- nextDestX := destX + (font widthOf: char).
- nextDestX > rightX ifTrue: [^ stopConditions crossedX].
destX := nextDestX + kern .
lastIndex := lastIndex + 1.
].
^self handleEndOfRunAt: stopIndex!
More information about the Squeak-dev
mailing list
|