Nicolas Cellier uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-nice.193.mcz ==================== Summary ==================== Name: Collections-nice.193 Author: nice Time: 16 November 2009, 5:50:18 am UUID: a94e2d4b-aa4b-c94c-b082-05ad77bef91c Ancestors: Collections-nice.192 Handle more crlf cases =============== Diff against Collections-nice.192 =============== Item was changed: ----- Method: PositionableStream>>nextLine (in category 'accessing') ----- nextLine + "Answer next line (may be empty), or nil if at end. + Handle a zoo of line delimiters CR, LF, or CR-LF pair" - "Answer next line (may be empty), or nil if at end" + | newStream element crlf | self atEnd ifTrue: [^nil]. + crlf := CharacterSet crlf. + newStream := WriteStream on: (collection species new: 100). + [self atEnd ifTrue: [^newStream contents]. + crlf includes: (element := self next)] + whileFalse: [newStream nextPut: element]. + element = Character cr ifTrue: [self peekFor: Character lf]. "handle an eventual CR LF pair" + ^newStream contents! - ^self upTo: Character cr! Item was changed: ----- Method: String>>withInternetLineEndings (in category 'internet') ----- withInternetLineEndings + "change line endings from CR's to CRLF's. This is probably in prepration for sending a string over the Internet" + ^self class + new: self size * 16 // 15 "provisions for CR-LF pairs" + streamContents: [ :stream | + self lineIndicesDo: [:start :endWithoutDelimiters :end | + stream nextPutAll: (self copyFrom: start to: endWithoutDelimiters). + endWithoutDelimiters = end ifFalse: [ stream cr; lf] ] ]! - "change line endings from CR's to CRLF's. This is probably in - prepration for sending a string over the Internet" - | cr lf | - cr := Character cr. - lf := Character linefeed. - ^self class streamContents: [ :stream | - self do: [ :c | - stream nextPut: c. - c = cr ifTrue:[ stream nextPut: lf ]. ] ].! 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 crlf inPos outPos outString lineEndPos newOutPos | - | cr lf input c crlf inPos outPos outString lineEndPos newOutPos | cr := Character cr. lf := Character linefeed. + crlf := CharacterSet crlf. - crlf := CharacterSet new. - crlf add: cr; add: lf. inPos := 1. outPos := 1. + outString := String new: self size. - outString := - String new: self size. [ lineEndPos := self indexOfAnyOf: crlf startingAt: inPos ifAbsent: [0]. lineEndPos ~= 0 ] whileTrue: [ newOutPos := outPos + (lineEndPos - inPos + 1). outString replaceFrom: outPos to: newOutPos - 2 with: self startingAt: inPos. outString at: newOutPos-1 put: cr. outPos := newOutPos. ((self at: lineEndPos) = cr and: [ lineEndPos < self size and: [ (self at: lineEndPos+1) = lf ] ]) ifTrue: [ "CRLF ending" inPos := lineEndPos + 2 ] ifFalse: [ "CR or LF ending" inPos := lineEndPos + 1 ]. ]. "no more 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>>withBlanksTrimmed (in category 'converting') ----- withBlanksTrimmed "Return a copy of the receiver from which leading and trailing blanks have been trimmed." | first last | + first := self indexOfAnyOf: CSNonSeparators startingAt: 1 ifAbsent: [0]. - first := self findFirst: [ :c | c isSeparator not ]. first = 0 ifTrue: [ ^'' ]. "no non-separator character" + last := self lastIndexOfAnyOf: CSNonSeparators startingAt: self size ifAbsent: [self size]. - last := self findLast: [ :c | c isSeparator not ]. (first = 1 and: [ last = self size ]) ifTrue: [ ^self copy ]. ^self copyFrom: first to: last ! |
Free forum by Nabble | Edit this page |