class: SyntaxHighlighter2
authorClaus Gittinger <cg@exept.de>
Fri, 27 Feb 2015 21:20:50 +0100
changeset 15456 44e323d6539f
parent 15455 9091f8069ac3
child 15457 93dc0626c36a
class: SyntaxHighlighter2 added: #markBlockArgumentIdentifierFrom:to: comment/format in: #elements: changed:7 methods
SyntaxHighlighter2.st
--- a/SyntaxHighlighter2.st	Fri Feb 27 20:16:27 2015 +0100
+++ b/SyntaxHighlighter2.st	Fri Feb 27 21:20:50 2015 +0100
@@ -276,10 +276,10 @@
     ^ elements
 !
 
-elements:aParseTreeIndex
+elements:aParseTreeIndexCollection
     "the element collection, to collect variables, selectors etc. into"
 
-    elements := aParseTreeIndex.
+    elements := aParseTreeIndexCollection.
 
     "Modified (comment): / 21-08-2011 / 09:13:31 / cg"
 !
@@ -694,11 +694,12 @@
 
     savedLastSelectorElement := lastSelectorElement.
     lastSelectorElement := nil.
+
     node := super expression.
     ((node ~~ #Error) and:[node isMessage]) ifTrue:[
         [ lastSelectorElement notNil ] whileTrue:[
             lastSelectorElement node parent: node.
-            lastSelectorElement := lastSelectorElement prev.
+            lastSelectorElement := lastSelectorElement previousElement.
         ].
     ].
     lastSelectorElement := savedLastSelectorElement.
@@ -920,26 +921,41 @@
 
 !SyntaxHighlighter2 methodsFor:'syntax detection'!
 
+markBlockArgumentIdentifierFrom:pos1 to:pos2
+    "in addition to marking, remember the variable reference"
+
+    | node |
+
+    super markBlockArgumentIdentifierFrom:pos1 to:pos2.
+
+    node := VariableNode blockArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
+    node block:currentBlock.
+    self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
+!
+
 markLocalVariableDeclaration: name from:pos1 to:pos2
+    "in addition to marking, remember the variable reference"
+
     | type node |
 
     super markLocalVariableDeclaration: name from:pos1 to:pos2.
 
     type := currentBlock notNil ifTrue:[#BlockVariable] ifFalse:[#MethodVariable].
     node := VariableNode type: type name: name.
-    node startPosition: pos1 endPosition: pos2.
+    node block:currentBlock. "/ which is nil for method locals
     self rememberVariableElementFor: node from: pos1 to: pos2 assigned: false.
 
     "Created: / 25-02-2014 / 20:22:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 markMethodArgumentIdentifierFrom:pos1 to:pos2
+    "in addition to marking, remember the variable reference"
+
     | node |
 
     super markMethodArgumentIdentifierFrom:pos1 to:pos2.
 
     node := VariableNode methodArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
-    node startPosition: pos1 endPosition: pos2.    
     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
 
     "Created: / 24-07-2010 / 09:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -955,12 +971,12 @@
      marked specially (and not as an error when the class is not yet loaded -
      the code is correct as JavaClassAccessor loads it lazily"
     (aReceiverNode isJavaPackageReference) ifTrue:[
-	self
-	    markFrom:pos1 to:pos2
-	    withEmphasis:preferences globalClassIdentifierEmphasis
-	    color: preferences globalClassIdentifierColor
+        self
+            markFrom:pos1 to:pos2
+            withEmphasis:preferences globalClassIdentifierEmphasis
+            color: preferences globalClassIdentifierColor
     ] ifFalse:[
-	super markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode.
+        super markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode.
     ].
 
     "don't create symbols for partial typed selectors"
@@ -969,12 +985,12 @@
     element := elements newElementFor: (SelectorNode value: selectorString from: pos1 to: pos2).
 
     (lastSelectorElement notNil "and:[lastSelectorElement value = selectorString]") ifTrue:[
-	lastSelectorElement next: element.
+        lastSelectorElement nextElement: element.
     ].
     elements add: element.
     lastSelectorElement := "(self isValidUnarySelector:tokenType)"false
-				ifTrue:[nil]
-				ifFalse:[element].
+                                ifTrue:[nil]
+                                ifFalse:[element].
 
     "Created: / 14-02-2010 / 17:40:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 14-02-2010 / 19:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -983,12 +999,13 @@
 !
 
 markSelfFrom:pos1 to:pos2
+    "in addition to marking, remember the variable reference"
+
     | node |
 
     super markSelfFrom:pos1 to:pos2.
 
     node := SelfNode new.
-    node startPosition: pos1 endPosition: pos2.  
     node type: #Self.
     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
 
@@ -997,12 +1014,13 @@
 !
 
 markSuperFrom:pos1 to:pos2
+    "in addition to marking, remember the variable reference"
+
     | node |
 
     super markSuperFrom:pos1 to:pos2.
 
     node := SuperNode new.
-    node startPosition: pos1 endPosition: pos2.  
     node type: #Super.
     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
 
@@ -1029,20 +1047,26 @@
 !
 
 rememberVariableElementFor:node from:pos1 to:pos2 assigned:assigned
-    |name typeSymbol element prev|
+    |name typeSymbol key element prev|
+
+    node startPosition: pos1 endPosition: pos2.    
 
     name := node name.
-    typeSymbol := node type.
-    prev := (lastVariableElements at:typeSymbol ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
+    typeSymbol := key := node type.
+    (typeSymbol == #BlockArg or:[typeSymbol == #BlockVariable]) ifTrue:[
+        key := (typeSymbol -> node block)
+    ].
+
+    prev := (lastVariableElements at:key ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
     (prev notNil and:[prev start == pos1]) ifTrue:[
-"/        prev assigned:assigned.
+        "/ prev assigned:assigned.
         ^ self
     ].
 
     element := elements newElementFor: node.
 
-    prev notNil ifTrue:[prev next:element].
-    (lastVariableElements at:typeSymbol) at:name put:element.
+    prev notNil ifTrue:[prev nextElement:element].
+    (lastVariableElements at:key) at:name put:element.
 
     elements add: element.
 
@@ -1052,14 +1076,14 @@
 !SyntaxHighlighter2 class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
+    ^ '$Id: SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
 ! !