[squeak-dev] The Trunk: Collections-ul.409.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Nov 23 08:58:13 UTC 2010


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

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

Name: Collections-ul.409
Author: ul
Time: 22 November 2010, 1:35:14.026 pm
UUID: 849eb41a-5717-9e44-ab23-eae36fb603bb
Ancestors: Collections-ul.408

- introduced String >> #withLineEndings:
- simplified and unified String's line-ending changing methods: #withInternetLineEndings, #withSqueakLineEndings  and #withUnixLineEndings

=============== Diff against Collections-ul.408 ===============

Item was changed:
  ----- Method: String>>withInternetLineEndings (in category 'internet') -----
  withInternetLineEndings
  	"change line endings from CR's and LF's to CRLF's.  This is probably in prepration for sending a string over the Internet"
  	
+ 	^self withLineEndings: String crlf!
- 	^self class
- 		new: self size * 16 // 15 "provisions for CR-LF pairs"
- 		streamContents: [ :stream |
- 			self lineIndicesDo: [:start :endWithoutDelimiters :end |
- 				stream next: 1 + endWithoutDelimiters - start putAll: self startingAt: start.
- 				endWithoutDelimiters = end ifFalse: [
- 					stream crlf ] ] ]!

Item was added:
+ ----- Method: String>>withLineEndings: (in category 'internet') -----
+ withLineEndings: lineEndingString
+ 
+ 	| stream |
+ 	stream := nil.
+ 	self lineIndicesDo: [ :start :endWithoutDelimiters :end |
+ 		(stream isNil and: [ endWithoutDelimiters ~= end ]) ifTrue: [
+ 			(self copyFrom: endWithoutDelimiters + 1 to: end) = lineEndingString ifFalse: [
+ 				stream := WriteStream with: self copy.
+ 				stream position: start - 1 ] ].
+ 		stream ifNotNil: [
+ 			stream next: endWithoutDelimiters - start + 1 putAll: self startingAt: start.
+ 			endWithoutDelimiters = end ifFalse: [
+ 				stream nextPutAll: lineEndingString ] ] ].
+ 	^stream
+ 		ifNil: [ self ]
+ 		ifNotNil: [ 
+ 			stream position = self size
+ 				ifTrue: [ stream originalContents ]
+ 				ifFalse: [ stream contents ] ]!

Item was changed:
  ----- Method: String>>withSqueakLineEndings (in category 'internet') -----
  withSqueakLineEndings
  	"Assume the string is textual, and that CR, LF, and CRLF are all valid line endings.
  	Replace each occurence with a single CR."
+ 	| cr lf indexLF indexCR |
- 	| cr lf inPos outPos outString newOutPos indexLF indexCR |
  	lf := Character linefeed.
  	indexLF := self indexOf: lf startingAt: 1.
  	indexLF = 0 ifTrue: [^self].
  	
  	cr := Character cr.
  	indexCR := self indexOf: cr startingAt: 1.
  	indexCR = 0 ifTrue: [^self copy replaceAll: lf with: cr].
  
+ 	^self withLineEndings: String cr!
- 	inPos := outPos := 1.
- 	outString := String new: self size.
- 
- 	["check if next CR (if any) is before next LF"
- 	(indexCR > 0 and: [indexCR < indexLF])
- 		ifTrue: [
- 			newOutPos := outPos + 1 + indexCR - inPos.
- 			outString replaceFrom: outPos to: newOutPos - 1 with: self startingAt: inPos.
- 			outPos := newOutPos.
- 			1 + indexCR = indexLF
- 				ifTrue: ["Caught a CR-LF pair"
- 					inPos := 1 + indexLF.
- 					indexLF := self  indexOf: lf startingAt: inPos]
- 				ifFalse: [inPos := 1 + indexCR].
- 			indexCR := self indexOf: cr startingAt: inPos]
- 		ifFalse: [
- 			newOutPos := outPos + 1 + indexLF - inPos.
- 			outString replaceFrom: outPos to: newOutPos - 2 with: self startingAt: inPos.
- 			outString at: newOutPos - 1 put: cr.
- 			outPos := newOutPos.
- 			inPos := 1 + indexLF.
- 			indexLF := self indexOf: lf startingAt: inPos].
- 	indexLF = 0]
- 		whileFalse.
- 
- 	"no more LF line endings.  copy the rest"
- 	newOutPos := outPos + (self size - inPos + 1).
- 	outString replaceFrom: outPos to: newOutPos - 1 with: self startingAt: inPos.
- 	^outString copyFrom: 1 to: newOutPos - 1!

Item was changed:
  ----- Method: String>>withUnixLineEndings (in category 'internet') -----
  withUnixLineEndings
  	"Assume the string is textual, and that CR, LF, and CRLF are all valid line endings.
  	Replace each occurence with a single LF."
+ 	| cr lf indexLF indexCR |
- 	| cr lf inPos outPos outString newOutPos indexLF indexCR |
  	cr := Character cr.
  	indexCR := self indexOf: cr startingAt: 1.
  	indexCR = 0 ifTrue: [^self].
  	
  	lf := Character linefeed.
  	indexLF := self indexOf: lf startingAt: 1.
  	indexLF = 0 ifTrue: [^self copy replaceAll: cr with: lf].
  
+ 	^self withLineEndings: String lf!
- 	inPos := outPos := 1.
- 	outString := String new: self size.
- 
- 	["check if next CR is before next LF or if there are no more LF"
- 	(indexLF = 0 or: [indexCR < indexLF])
- 		ifTrue: [
- 			newOutPos := outPos + 1 + indexCR - inPos.
- 			outString replaceFrom: outPos to: newOutPos - 2 with: self startingAt: inPos.
- 			outString at: newOutPos - 1 put: lf.
- 			outPos := newOutPos.
- 			1 + indexCR = indexLF
- 				ifTrue: ["Caught a CR-LF pair"
- 					inPos := 1 + indexLF.
- 					indexLF := self  indexOf: lf startingAt: inPos]
- 				ifFalse: [inPos := 1 + indexCR].
- 			indexCR := self indexOf: cr startingAt: inPos]
- 		ifFalse: [
- 			newOutPos := outPos + 1 + indexLF - inPos.
- 			outString replaceFrom: outPos to: newOutPos - 1 with: self startingAt: inPos.
- 			outPos := newOutPos.
- 			inPos := 1 + indexLF.
- 			indexLF := self indexOf: lf startingAt: inPos].
- 	indexCR = 0]
- 		whileFalse.
- 
- 	"no more CR line endings.  copy the rest"
- 	newOutPos := outPos + (self size - inPos + 1).
- 	outString replaceFrom: outPos to: newOutPos - 1 with: self startingAt: inPos.
- 	^outString copyFrom: 1 to: newOutPos - 1!




More information about the Squeak-dev mailing list