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

commits at source.squeak.org commits at source.squeak.org
Thu Sep 26 22:56:15 UTC 2013


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

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

Name: Multilingual-nice.175
Author: nice
Time: 27 September 2013, 12:55:42.866 am
UUID: 58c9e390-b2ac-4f1b-a842-81c9a43f7f86
Ancestors: Multilingual-tpr.174

Let MultiCharacterScanner properly handle #space stopCondition.
Restore DefaultStopsCondition at Space to just #space as it should.
Remove NilCondition and SpaceCondition.
Add a ColumnBreakStopConditions, this avoids any reason to copy the stopConditions.
Set stopConditions where it should be set (not in setFont, that's too weird).
Remove maxAscii handling: the font/fontSet shouldn't display charCode maxAscii when you ask maxAscii+10, should it?
Don't catch an Exception, just an Error.

=============== Diff against Multilingual-tpr.174 ===============

Item was removed:
- ----- Method: MultiCanvasCharacterScanner>>setStopConditions (in category 'stop conditions') -----
- setStopConditions
- 	"Set the font and the stop conditions for the current run."
- 	
- 	self setFont.
- 	self setConditionArray: (textStyle alignment = Justified ifTrue: [#paddedSpace]).
- !

Item was added:
+ ----- Method: MultiCanvasCharacterScanner>>space (in category 'stop conditions') -----
+ space
+ 	"Don't display the space, just skip the spaceWidth."
+ 
+ 	pendingKernX := 0.
+ 	destX := destX + spaceWidth.
+ 	lastIndex := lastIndex + 1.
+ 	^ false!

Item was removed:
- ----- Method: MultiCharacterBlockScanner>>setStopConditions (in category 'stop conditions') -----
- setStopConditions
- 	"Set the font and the stop conditions for the current run."
- 	
- 	self setFont.
- 	self setConditionArray: (alignment = Justified ifTrue: [#paddedSpace]).
- !

Item was added:
+ ----- Method: MultiCharacterBlockScanner>>space (in category 'stop conditions') -----
+ space
+ 	"Account for spaceWidth"
+ 
+ 	spaceCount := spaceCount + 1.
+ 	lastSpaceOrTabExtent := lastCharacterExtent copy.
+ 	self lastSpaceOrTabExtentSetX:  spaceWidth.
+ 	(destX + lastSpaceOrTabExtent x)  >= characterPoint x
+ 		ifTrue: [lastCharacterExtent := lastSpaceOrTabExtent copy.
+ 				^self crossedX].
+ 	lastIndex := lastIndex + 1.
+ 	destX := destX + lastSpaceOrTabExtent x.
+ 	^ false
+ !

Item was changed:
  Object subclass: #MultiCharacterScanner
  	instanceVariableNames: 'destX lastIndex destY stopConditions text textStyle alignment leftMargin rightMargin font line runStopIndex spaceCount spaceWidth emphasisCode kern indentationLevel wantsColumnBreaks pendingKernX baselineY firstDestX lastWidth'
+ 	classVariableNames: 'ColumnBreakStopConditions DefaultStopConditions PaddedSpaceCondition'
- 	classVariableNames: 'DefaultStopConditions NilCondition PaddedSpaceCondition SpaceCondition'
  	poolDictionaries: 'TextConstants'
  	category: 'Multilingual-Scanning'!

Item was changed:
  ----- Method: MultiCharacterScanner class>>initialize (in category 'class initialization') -----
  initialize
  "
  	MultiCharacterScanner initialize
  "
  	| a |
  	a := TextStopConditions new.
  	a at: 1 + 1 put: #embeddedObject.
+ 	a at: Space asciiValue + 1 put: #space.
  	a at: Tab asciiValue + 1 put: #tab.
  	a at: CR asciiValue + 1 put: #cr.
  	a at: Character lf asciiValue + 1 put: #cr.
  	
- 	NilCondition := a copy.
  	DefaultStopConditions := a copy.
  
+ 	ColumnBreakStopConditions := a copy.
+ 	ColumnBreakStopConditions at: TextComposer characterForColumnBreak asciiValue + 1 put: #columnBreak.
+ 
  	PaddedSpaceCondition := a copy.
  	PaddedSpaceCondition at: Space asciiValue + 1 put: #paddedSpace.
- 	
- 	SpaceCondition := a copy.
- 	SpaceCondition at: Space asciiValue + 1 put: #space.
  !

Item was changed:
  ----- Method: MultiCharacterScanner>>scanMultiCharactersFrom:to:in:rightX:stopConditions:kern: (in category 'scanning') -----
  scanMultiCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta
  
+ 	| ascii encoding f nextDestX startEncoding floatDestX widthAndKernedWidth nextChar atEndOfRun |
- 	| ascii encoding f nextDestX maxAscii startEncoding floatDestX widthAndKernedWidth nextChar atEndOfRun |
  	lastIndex := startIndex.
  	lastIndex > stopIndex ifTrue: [lastIndex := stopIndex. ^ stops endOfRun].
  	startEncoding := (sourceString at: startIndex) leadingChar.
  	font ifNil: [font := (TextConstants at: #DefaultMultiStyle) fontArray at: 1].
  	((font isMemberOf: StrikeFontSet) or: [font isKindOf: TTCFontSet]) ifTrue: [
+ 		f := [font fontArray at: startEncoding + 1] ifError: [nil].
- 		f := [font fontArray at: startEncoding + 1]
- 			on: Exception do: [:ex | nil].
  		f ifNil: [ f := font fontArray at: 1].
- 		maxAscii := f maxAscii.
  		spaceWidth := f widthOf: Space.
- 	] ifFalse: [
- 		maxAscii := font maxAscii.
  	].
  	floatDestX := destX.
  	widthAndKernedWidth := Array new: 2.
  	atEndOfRun := false.
  	[lastIndex <= stopIndex] whileTrue: [
  		encoding := (sourceString at: lastIndex) leadingChar.
  		encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^ stops endOfRun].
  		ascii := (sourceString at: lastIndex) charCode.
+ 		(ascii < 256 and: [(stops at: ascii + 1) ~~ nil]) ifTrue: [^ stops at: ascii + 1].
- 		ascii > maxAscii ifTrue: [ascii := maxAscii].
- 		(encoding = 0 and: [ascii < 256 and: [(stops at: ascii + 1) ~~ nil]]) ifTrue: [^ stops at: ascii + 1].
  		(self isBreakableAt: lastIndex in: sourceString in: Latin1Environment) ifTrue: [
  			self registerBreakableIndex.
  		].
  		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: (sourceString at: lastIndex) 
  			right: nextChar
  			into: widthAndKernedWidth.
  		nextDestX := floatDestX + (widthAndKernedWidth at: 1).
  		nextDestX > rightX ifTrue: [destX ~= firstDestX ifTrue: [^stops crossedX]].
  		floatDestX := floatDestX + kernDelta + (widthAndKernedWidth at: 2).
  		atEndOfRun 
  			ifTrue:[
  				pendingKernX := (widthAndKernedWidth at: 2) - (widthAndKernedWidth at: 1).
  				floatDestX := floatDestX - pendingKernX].
  		destX := floatDestX .
  		lastIndex := lastIndex + 1.
  	].
  	lastIndex := stopIndex.
  	^ stops endOfRun!

Item was changed:
  ----- Method: MultiCharacterScanner>>setConditionArray: (in category 'private') -----
+ setConditionArray: aStopConditionOrNil
+ 	"This method is to be removed"
- setConditionArray: aSymbol
  
+ 	^stopConditions := DefaultStopConditions!
- 	aSymbol == #paddedSpace ifTrue: [^stopConditions := PaddedSpaceCondition "copy"].
- 	"aSymbol == #space ifTrue: [^stopConditions := SpaceCondition copy]."
- 	aSymbol == nil ifTrue: [^stopConditions := NilCondition "copy"].
- 	self error: 'undefined stopcondition for space character'.
- !

Item was added:
+ ----- Method: MultiCharacterScanner>>setStopConditions (in category 'private') -----
+ setStopConditions
+ 	"Set the font and the stop conditions for the current run."
+ 	
+ 	self setFont.
+ 	self setStopConditionsOrNil: (alignment = Justified ifTrue: [PaddedSpaceCondition]).!

Item was added:
+ ----- Method: MultiCharacterScanner>>setStopConditionsOrNil: (in category 'private') -----
+ setStopConditionsOrNil: aStopConditionOrNil
+ 
+ 	aStopConditionOrNil ifNotNil: [^stopConditions := aStopConditionOrNil].
+ 	^stopConditions := DefaultStopConditions!

Item was changed:
  ----- Method: MultiCompositionScanner>>setStopConditions (in category 'stop conditions') -----
  setStopConditions
  	"Set the font and the stop conditions for the current run."
  	
+ 	self setFont.
+ 	self setStopConditionsOrNil: (wantsColumnBreaks == true ifTrue: [ColumnBreakStopConditions])!
- 	self setFont!

Item was added:
+ ----- Method: MultiCompositionScanner>>space (in category 'stop conditions') -----
+ space
+ 	"Record left x and character index of the space character just encounted. 
+ 	Used for wrap-around. Answer whether the character has crossed the 
+ 	right edge of the composition rectangle of the paragraph."
+ 
+ 	pendingKernX := 0.
+ 	breakAtSpace := true.
+ 	spaceX := destX.
+ 	destX := spaceX + spaceWidth.
+ 	spaceCount := spaceCount + 1.
+ 	lineHeightAtBreak := lineHeight.
+ 	baselineAtBreak := baseline.
+ 	breakableIndex := lastIndex.
+ 	lastIndex := lastIndex + 1.
+ 	destX > rightMargin ifTrue: 	[^self crossedX].
+ 	^false
+ 
+ !

Item was removed:
- ----- Method: MultiDisplayScanner>>setStopConditions (in category 'stop conditions') -----
- setStopConditions
- 	"Set the font and the stop conditions for the current run."
- 	
- 	self setFont.
- 	self setConditionArray: (alignment = Justified ifTrue: [#paddedSpace]).
- 
- "
- 	alignment = Justified ifTrue: [
- 		stopConditions == DefaultStopConditions 
- 			ifTrue:[stopConditions := stopConditions copy].
- 		stopConditions at: Space asciiValue + 1 put: #paddedSpace]
- "!

Item was added:
+ ----- Method: MultiDisplayScanner>>space (in category 'stop conditions') -----
+ space
+ 	"Don't display the space, just skip the spaceWidth"
+ 
+ 	spaceCount := spaceCount + 1.
+ 	destX := destX + spaceWidth.
+ 	lastIndex := lastIndex + 1.
+ 	pendingKernX := 0.
+ 	^ false!



More information about the Squeak-dev mailing list