[squeak-dev] The Trunk: ShoutCore-ul.54.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Aug 12 21:24:30 UTC 2015


Levente Uzonyi uploaded a new version of ShoutCore to project The Trunk:
http://source.squeak.org/trunk/ShoutCore-ul.54.mcz

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

Name: ShoutCore-ul.54
Author: ul
Time: 12 August 2015, 10:39:34.306 pm
UUID: 4329b6b2-95a5-4c41-8fe3-d489f4458293
Ancestors: ShoutCore-ul.53

- added missing #shoutParserClass to PseudoClass
- faster SHTextStylerST80>>setAttributesIn:fromRanges:

=============== Diff against ShoutCore-ul.53 ===============

Item was added:
+ ----- Method: PseudoClass>>shoutParserClass (in category '*ShoutCore') -----
+ shoutParserClass
+ 
+ 	^SHParserST80
+ !

Item was changed:
  ----- Method: SHTextStylerST80>>setAttributesIn:fromRanges: (in category 'private') -----
  setAttributesIn: aText fromRanges: ranges
+ 
+ 	| defaultAttributes newRuns newValues lastAttributes oldRuns nextIndex lastCount | 		
- 	| charAttr defaultAttr attr newRuns newValues lastAttr oldRuns lastCount | 		
- 		
  	oldRuns := aText runs.
+ 	defaultAttributes := self attributesFor: #default.
- 	defaultAttr := self attributesFor: #default.
- 	charAttr := Array new: aText size withAll: defaultAttr.
- 	ranges do: [ :range |
- 		(self attributesFor: range type) ifNotNil: [ :attribute |
- 			charAttr from: range start to: range end put: attribute ] ].
  	newRuns := OrderedCollection new: ranges size * 2 + 1.
  	newValues := OrderedCollection new: ranges size * 2 + 1.
+ 	lastAttributes := nil.
+ 	nextIndex := 1.
- 	lastAttr := nil.
  	lastCount := 0.
+ 	ranges do: [ :range |
+ 		| attributes |
+ 		nextIndex < range start ifTrue: [ 
+ 			lastAttributes == defaultAttributes 
+ 				ifTrue: [
+ 					lastCount := lastCount + range start - nextIndex.
+ 					newRuns at: newRuns size put: lastCount ]
+ 				ifFalse: [
+ 					lastCount := range start - nextIndex.
+ 					newRuns addLast: lastCount. 
+ 					lastAttributes := defaultAttributes.
+ 					newValues addLast: lastAttributes ].
+ 			nextIndex := range start ].
+ 		attributes := (self attributesFor: range type) ifNil: [ defaultAttributes ].
+ 		lastAttributes == attributes
+ 			ifTrue: [ 
+ 				lastCount := lastCount + range end - nextIndex + 1.
- 	1 to: charAttr size do: [ :i |
- 		(attr := charAttr at: i) == lastAttr
- 			ifTrue: [
- 				lastCount := lastCount + 1.
  				newRuns at: newRuns size put: lastCount ]
  			ifFalse: [
+ 				lastCount := range end - nextIndex + 1.
+ 				newRuns addLast: lastCount.
+ 				lastAttributes := attributes.
+ 				newValues addLast: lastAttributes ].
+ 		nextIndex := range end + 1 ].
+ 	nextIndex <= aText size ifTrue: [
+ 		lastAttributes == defaultAttributes 
+ 				ifTrue: [
+ 					lastCount := lastCount + aText size - nextIndex + 1.
+ 					newRuns at: newRuns size put: lastCount ]
+ 				ifFalse: [
+ 					lastCount := aText size - nextIndex + 1.
+ 					newRuns addLast: lastCount.
+ 					lastAttributes := defaultAttributes.
+ 					newValues addLast: lastAttributes ] ].
- 				newRuns addLast: 1.
- 				lastCount := 1.
- 				lastAttr := newValues addLast: attr ] ].
  	aText runs: (RunArray runs: newRuns values: newValues).
+ 	oldRuns withStartStopAndValueDo: [ :start :stop :attribs |
- 	oldRuns withStartStopAndValueDo:[:start :stop :attribs|
  		(attribs anySatisfy: [ :each | each shoutShouldPreserve ]) ifTrue: [
  			attribs do: [ :each | aText addAttribute: each from: start to: stop ] ] ].
  	!



More information about the Squeak-dev mailing list