Fraction.st
changeset 22607 4eb32d774d9c
parent 22254 30d452a7c004
child 22608 78704fb221f9
--- 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'!