some code
Jeff Cutsinger
seaslug at tunes.org
Tue Jul 20 22:25:32 PDT 2004
I've written a couple of extensions to the slate standard libs. They aren't
thoroughly tested. They aren't commented, but they seem self explanatory to me.
r@(ReadStream traits) upTo: c
[| char string |
char: r next.
string: ''.
[ ((char = c) \/ (r atEnd)) not ] whileTrue:
[ string: string ; { char }.
char: r next ].
(char = c)
ifTrue: [string]
ifFalse: [Nil]
].
r@(ReadStream traits) upToOneOf: c@(Collection traits)
[| char string |
char: r next.
string: ''.
[ ((c includes: char) \/ (r atEnd)) not ] whileTrue:
[ string: string ; { char }.
char: r next ].
(char = c)
ifTrue: [string]
ifFalse: [Nil]
].
r@(ReadStream traits) upTo: s@(String traits)
[| string sIndex |
string: (r upTo: s first).
string
ifNil: [sIndex: -1]
ifNotNil: [sIndex: 1].
[ (r atEnd) not /\ (sIndex ~= s size) ] whileTrue:
[ | char |
char: r next.
string: string ; { char }.
((s at: sIndex) = char)
ifTrue: [ sIndex: sIndex + 1 ]
ifFalse: [ sIndex: 0 ]. ].
(sIndex = s size)
ifTrue: [string copyFrom: 0 to: (string size - s size)]
ifFalse: [Nil]
].
"To go in string.slate"
s@(String traits) stripOneOf: c@(Collection traits) startingAt: start
[ | new |
new: (s copyFrom: 0 to: (start - 1)).
start below: s size
do: [ | :index |
(c includes: (s at: index))
ifFalse: [ new: new ; { (s at: index) }]].
new
].
s@(String traits) stripOneOf: c@(Collection traits)
[ s stripOneOf: c startingAt: 0 ].
s@(String traits) strip: c@(Character traits) startingAt: start
[ s stripOneOf: {c} startingAt: start ].
s@(String traits) strip: c@(Character traits)
[ s stripOneOf: {c} startingAt: 0 ].
s@(String traits) stripStartingAt: start
[ s stripOneOf: { $\s. $\n. $\t. $\r. $\0 } startingAt: start ].
s@(String traits) strip
[ s stripOneOf: { $\s. $\n. $\t. $\r. $\0 } startingAt: 0].
-seaslug
More information about the Slate
mailing list