printing
authorClaus Gittinger <cg@exept.de>
Wed, 20 Apr 2005 16:41:54 +0200
changeset 1588 4c3183dfaa5f
parent 1587 6d710d71d592
child 1589 e50e9f5bf31b
printing
CascadeNode.st
MessageNode.st
ParseNode.st
--- a/CascadeNode.st	Wed Apr 20 12:15:34 2005 +0200
+++ b/CascadeNode.st	Wed Apr 20 16:41:54 2005 +0200
@@ -133,49 +133,27 @@
 
 !CascadeNode methodsFor:'printing & storing'!
 
-printOn:aStream indent:i
-    |needParen selectorParts index index2 arg nargs|
+printOn:aStream indent:i 
+    |selectorParts|
 
-    index := 1.
-    selectorParts := OrderedCollection new.
-    [index == 0] whileFalse:[
-	index2 := selector indexOf:$: startingAt:index.
-	index2 ~~ 0 ifTrue:[
-	    selectorParts add:(selector copyFrom:index to:index2).
-	    index2 := index2 + 1
-	].
-	index := index2
-    ].
-
+    selectorParts := selector asCollectionOfSubstringsSeparatedBy:$:.
     receiver printOn:aStream indent:i.
     aStream nextPutAll:'; '.
-
-    nargs := argArray size.
-    nargs == 0 ifTrue:[
-	selector printOn:aStream
+    argArray size == 0 ifTrue:[
+        selector printOn:aStream
     ] ifFalse:[
-	1 to:nargs do:[:argIndex |
-	    aStream space.
-	    (selectorParts at:argIndex) printOn:aStream.
-	    aStream space.
-	    arg := argArray at:argIndex.
-	    needParen := false.
-	    arg isMessage ifTrue:[
-		arg isBinaryMessage ifFalse:[
-		    arg isUnaryMessage ifFalse:[
-			needParen := true
-		    ]
-		].
-	    ].
-	    needParen ifTrue:[
-		aStream nextPutAll:'('
-	    ].
-	    arg printOn:aStream indent:i.
-	    needParen ifTrue:[
-		aStream nextPutAll:') '
-	    ].
-	]
+        argArray 
+            with:selectorParts
+            do:[:arg :selPart | 
+                aStream 
+                    space;
+                    nextPutAll:selPart;
+                    nextPutAll:': '.
+                arg printOn:aStream indent:i + 4 parenthized:(arg precedence <= self precedence).
+            ]
     ]
+
+    "Modified: / 20-04-2005 / 14:35:39 / cg"
 ! !
 
 !CascadeNode methodsFor:'queries'!
@@ -189,5 +167,5 @@
 !CascadeNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.26 2004-03-19 13:25:46 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.27 2005-04-20 14:41:24 cg Exp $'
 ! !
--- a/MessageNode.st	Wed Apr 20 12:15:34 2005 +0200
+++ b/MessageNode.st	Wed Apr 20 16:41:54 2005 +0200
@@ -2823,91 +2823,39 @@
 
 !MessageNode methodsFor:'printing & storing'!
 
-printOn:aStream indent:i
-    |needParen selectorParts index index2 arg|
-
-    (#(whileTrue: whileFalse:) includes:selector) ifTrue:[
+printOn:aStream indent:i 
+    |selectorParts|
+
+    (#( whileTrue: whileFalse: ) includes:selector) ifTrue:[
         receiver isBlock ifTrue:[
             ^ self printWhileOn:aStream indent:i
         ].
     ].
-
-    index := 1.
-    selectorParts := OrderedCollection new.
-    [index == 0] whileFalse:[
-        index2 := selector indexOf:$: startingAt:index.
-        index2 ~~ 0 ifTrue:[
-            selectorParts add:(selector copyFrom:index to:index2).
-            index2 := index2 + 1
-        ].
-        index := index2
-    ].
-
-    needParen := false.
-    receiver isMessage ifTrue:[
-        receiver isUnaryMessage ifFalse:[
-            receiver isBinaryMessage ifFalse:[
-                needParen := true
-            ].
-        ].
-    ].
-    needParen ifTrue:[
-        aStream nextPutAll:'('
-    ].
-    receiver printOn:aStream indent:i.
-    needParen ifTrue:[
-        aStream nextPutAll:')'
-    ].
-
-    1 to:(argArray size) do:[:argIndex |
-        aStream cr.
-        aStream spaces:i+4.
-        (selectorParts at:argIndex) printOn:aStream.
-"/        aStream space.
-        arg := argArray at:argIndex.
-        needParen := false.
-        arg isMessage ifTrue:[
-            arg isBinaryMessage ifFalse:[
-                arg isUnaryMessage ifFalse:[
-                    needParen := true
-                ]
-            ].
-        ].
-        needParen ifTrue:[
-            aStream nextPutAll:'('
-        ].
-        arg printOn:aStream indent:i+4.
-        needParen ifTrue:[
-            aStream nextPutAll:') '
-        ].
-    ]
+    selectorParts := selector asCollectionOfSubstringsSeparatedBy:$:.
+    receiver printOn:aStream indent:i parenthized:(receiver precedence <= self precedence).
+    argArray with:selectorParts
+        do:[:arg :selPart | 
+            aStream
+                cr;
+                spaces:i + 4;
+                nextPutAll:(selPart , ':').
+            arg printOn:aStream indent:i + 4 parenthized:(arg precedence <= self precedence).
+        ]
+
+    "Modified: / 20-04-2005 / 14:29:16 / cg"
 !
 
 printWhileOn:aStream indent:i
-    |needParen arg|
-
     "special handling of whileTrue/whileFalse"
 
+    |arg|
+
     aStream nextPutAll:'['.
     receiver statements printOn:aStream indent:i.
-    aStream nextPutAll:'] whileTrue: '.
+    aStream nextPutAll:'] ',selector,' '.
 
     arg := argArray at:1.
-    needParen := false.
-    arg isMessage ifTrue:[
-	arg isBinaryMessage ifFalse:[
-	    arg isUnaryMessage ifFalse:[
-		needParen := true
-	    ]
-	].
-    ].
-    needParen ifTrue:[
-	aStream nextPutAll:'('
-    ].
-    arg printOn:aStream indent:i.
-    needParen ifTrue:[
-	aStream nextPutAll:') '
-    ].
+    arg printOn:aStream indent:i parenthized:(arg precedence <= self precedence).
 ! !
 
 !MessageNode methodsFor:'queries'!
@@ -2944,6 +2892,12 @@
     ^ argArray size
 !
 
+precedence
+    ^ 10
+
+    "Created: / 20-04-2005 / 14:10:59 / cg"
+!
+
 realReceiver
     receiver isCascade ifTrue:[
         ^ receiver realReceiver
@@ -2960,5 +2914,5 @@
 !MessageNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.143 2005-04-20 10:15:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.144 2005-04-20 14:40:39 cg Exp $'
 ! !
--- a/ParseNode.st	Wed Apr 20 12:15:34 2005 +0200
+++ b/ParseNode.st	Wed Apr 20 16:41:54 2005 +0200
@@ -172,6 +172,27 @@
     self printOn:aStream indent:0
 !
 
+printOn:aStream indent:indent
+    "append a user printed representation of the receiver to aStream.
+     The format is suitable for a human - not meant to be read back."
+
+    self subclassResponsibility
+
+    "Created: / 20-04-2005 / 14:21:46 / cg"
+!
+
+printOn:aStream indent:indent parenthized:parenthized
+    parenthized ifTrue:[
+        aStream nextPutAll:'('
+    ].
+    self printOn:aStream indent:indent.
+    parenthized ifTrue:[
+        aStream nextPutAll:')'
+    ].
+
+    "Created: / 20-04-2005 / 14:21:28 / cg"
+!
+
 printString
     |stream|
 
@@ -305,10 +326,14 @@
     ^ false
 
     "Created: 14.4.1996 / 00:46:44 / cg"
+!
+
+precedence
+    ^ 9999
 ! !
 
 !ParseNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.38 2004-07-07 09:17:55 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.39 2005-04-20 14:41:54 cg Exp $'
 ! !