Nicolas Cellier uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-nice.280.mcz ==================== Summary ==================== Name: Collections-nice.280 Author: nice Time: 19 January 2010, 12:43:28.817 am UUID: daaafc43-9896-4a4a-88cd-ac3c4255a745 Ancestors: Collections-nice.279 Fast-up linesDo: & co Same idea than withSqueakLineEndings =============== Diff against Collections-nice.279 =============== Item was changed: ----- Method: Collection>>do:displayingProgress:every: (in category 'enumerating') ----- do: aBlock displayingProgress: aStringOrBlock every: msecs "Enumerate aBlock displaying progress information. If the argument is a string, use a static label for the process. If the argument is a block, evaluate it with the element to retrieve the label. The msecs argument ensures that updates happen at most every msecs. Example: Smalltalk allClasses do:[:aClass| (Delay forMilliseconds: 1) wait] displayingProgress:[:aClass| 'Processing ', aClass name] every: 0. Smalltalk allClasses do:[:aClass| (Delay forMilliseconds: 1) wait] displayingProgress:[:aClass| 'Processing ', aClass name] every: 100. " + | size labelBlock count oldLabel lastUpdate | - | count size labelBlock oldLabel newLabel lastUpdate | labelBlock := aStringOrBlock isString ifTrue:[[:item| aStringOrBlock]] ifFalse:[aStringOrBlock]. oldLabel := nil. count := lastUpdate := 0. size := self size. '' displayProgressAt: Sensor cursorPoint from: 0 to: size during:[:bar | + self do:[:each| | newLabel | - self do:[:each| "Special handling for first and last element" (count = 0 or:[count+1 = size or:[(Time millisecondsSince: lastUpdate) >= msecs]]) ifTrue:[ bar value: count. oldLabel = (newLabel := labelBlock value: each) ifFalse:[ ProgressNotification signal: '' extra: (oldLabel := newLabel). ]. lastUpdate := Time millisecondClockValue. ]. aBlock value: each. count := count + 1. ]]! Item was changed: ----- Method: Text>>emphasisAt: (in category 'emphasis') ----- emphasisAt: characterIndex "Answer the fontfor characters in the run beginning at characterIndex." + | attributes | - | attributes emph | self size = 0 ifTrue: [^ 0]. "null text tolerates access" - emph := 0. attributes := runs at: characterIndex. + ^attributes inject: 0 into: + [:emph :att | emph bitOr: att emphasisCode]. - attributes do: - [:att | emph := emph bitOr: att emphasisCode]. - ^ emph ! Item was changed: ----- Method: String>>lineIndicesDo: (in category 'accessing') ----- lineIndicesDo: aBlock "execute aBlock with 3 arguments for each line: - start index of line - end index of line without line delimiter - end index of line including line delimiter(s) CR, LF or CRLF" + | cr lf start sz nextLF nextCR | - | start end endWithoutDelimiters | start := 1. + sz := self size. + cr := Character cr. + nextCR := self indexOf: cr startingAt: 1. + lf := Character lf. + nextLF := self indexOf: lf startingAt: 1. + [ start <= sz ] whileTrue: [ + (nextLF = 0 and: [ nextCR = 0 ]) + ifTrue: [ "No more CR, nor LF, the string is over" + aBlock value: start value: sz value: sz. + ^self ]. + (nextCR = 0 or: [ 0 < nextLF and: [ nextLF < nextCR ] ]) + ifTrue: [ "Found a LF" + aBlock value: start value: nextLF - 1 value: nextLF. + start := 1 + nextLF. + nextLF := self indexOf: lf startingAt: start ] + ifFalse: [ 1 + nextCR = nextLF + ifTrue: [ "Found a CR-LF pair" + aBlock value: start value: nextCR - 1 value: nextLF. + start := 1 + nextLF. + nextCR := self indexOf: cr startingAt: start. + nextLF := self indexOf: lf startingAt: start ] + ifFalse: [ "Found a CR" + aBlock value: start value: nextCR - 1 value: nextCR. + start := 1 + nextCR. + nextCR := self indexOf: cr startingAt: start ]]]! - [ start <= self size ] whileTrue: [ - end := self indexOfAnyOf: CSLineEnders startingAt: start ifAbsent: [ 0 ]. - end = 0 - ifTrue: [endWithoutDelimiters := end := self size] - ifFalse: [endWithoutDelimiters := end - 1. - (end < self size - and: [(self at: end + 1) = Character lf - and: [(self at: end) = Character cr]]) - ifTrue: [end := end + 1]]. - aBlock value: start value: endWithoutDelimiters value: end. - start := end + 1]! |
Free forum by Nabble | Edit this page |