An awkward pretty print is a good sign you need to simplify. I would use
another method for the case statement. You couldn't use collect because
for each character as you are not collecting characters but strings when
you escape.
Perhaps something like...
escapeString: aString
^ String streamContents:
[:aStream |
aString do:
[:eachCharacter |
aStream nextPutAll: (self escapeCharacter: eachCharacter)]
escapeCharacter: aCharacter
aCharacter = $< ifTrue: [^ '<'].
aCharacter = $> ifTrue: [^ '>'].
aCharacter = $' ifTrue: [^ '''].
aCharacter = $& ifTrue: [^ '&'].
^ aCharacter asString
I use #streamContents: a lot as #, causes a lot of unnecessary Strings
to be created and also unnecessary work.
I rarely use the pretty printer but instead aim to keep my methods short
and simple.
Regards,
Zulq.
Mark Volkmann wrote:
Here is how one of my methods was pretty printed.
escape: aString
"escapes special characters in XML text"
| result |
result := ''.
aString
do: [:char | result := result
, (char caseOf: {
[$<] -> ['<'].
[$>] -> ['>'].
[$'] -> ['''].
[$"] -> ['"'].
[$&] -> ['&']}
otherwise: [char asString])].
^ result
Yikes! To my beginner eyes, that doesn't look good. What's the deal with
the excessive indentation?
BTW, comments better ways to do what this code does are welcomed. Could
I use collect for this?
---
Mark Volkmann
_______________________________________________
Beginners mailing list
Beginners@lists.squeakfoundation.org
http://lists.squeakfoundation.org/mailman/listinfo/beginners