RosettaCodeData/Task/Rot-13/Slate/rot-13-2.slate

23 lines
540 B
Plaintext

ch@(String Character traits) rot13
[| value |
upper ::= ch isUppercase.
value := ch toLowercase as: Integer.
(value >= 97) /\ [value < 110]
ifTrue: [value += 13]
ifFalse: [(value > 109) /\ [value <= 122]
ifTrue: [value -= 13]].
upper
ifTrue: [(value as: String Character) toUppercase]
ifFalse: [value as: String Character]
].
s@(String traits) rot13
[
result ::= s newSameSize.
s doWithIndex: [| :each :index | result at: index put: each rot13].
result
].
slate[37]> 'abc123' rot13.
'nop123'