--- a/Fraction.st Mon Mar 12 15:54:12 2018 +0100
+++ b/Fraction.st Wed Mar 14 18:01:25 2018 +0100
@@ -195,37 +195,46 @@
!
readFrom:aStringOrStream onError:exceptionBlock
- |s numerator denominator|
+ |s numerator denominator hasParen result|
"/ sigh - care for subclasses...
self == Fraction ifFalse:[
- ^ super readFrom:aStringOrStream onError:exceptionBlock
+ ^ super readFrom:aStringOrStream onError:exceptionBlock
].
s := aStringOrStream readStream.
s skipSeparators.
- s peekOrNil == $( ifTrue:[
- s next.
- ].
+ hasParen := s peekFor:$(.
numerator := super readFrom:s onError:[^ exceptionBlock value].
numerator isInteger ifTrue:[
- s skipSeparators.
- (s peekOrNil == $/) ifTrue:[
- s next.
- denominator := Integer readFrom:s onError:[^ exceptionBlock value].
- ^ self numerator:numerator denominator:denominator
- ].
- ^ numerator
+ s skipSeparators.
+ (s peekFor:$/) ifTrue:[
+ denominator := Integer readFrom:s onError:[^ exceptionBlock value].
+ result := self numerator:numerator denominator:denominator
+ ].
+ result := numerator.
].
- ^ numerator asFraction
+ hasParen ifTrue:[
+ s skipSeparators.
+ (s peekFor:$)) ifFalse:exceptionBlock.
+ ].
+ result notNil ifTrue:[
+ ^ result.
+ ].
+ ^ numerator asFraction.
+
"
- Fraction readFrom:'1'
- Fraction readFrom:'2'
- Fraction readFrom:'1.5'
- Fraction readFrom:'1/5'
+ Fraction readFromString:'1'
+ Fraction readFromString:'2'
+ Fraction readFromString:'1.5'
+ Fraction readFromString:'1/5'
+ Fraction readFromString:'(1/5)'
+ Fraction readFromString:'(1/5'
"
+
+ "Modified: / 14-03-2018 / 17:56:59 / stefan"
! !
!Fraction class methodsFor:'class initialization'!