SyntaxHighlighter2.st
changeset 15456 44e323d6539f
parent 15446 d4cda7a1df4e
child 15473 cab2f398e8da
equal deleted inserted replaced
15455:9091f8069ac3 15456:44e323d6539f
   274 
   274 
   275 elements
   275 elements
   276     ^ elements
   276     ^ elements
   277 !
   277 !
   278 
   278 
   279 elements:aParseTreeIndex
   279 elements:aParseTreeIndexCollection
   280     "the element collection, to collect variables, selectors etc. into"
   280     "the element collection, to collect variables, selectors etc. into"
   281 
   281 
   282     elements := aParseTreeIndex.
   282     elements := aParseTreeIndexCollection.
   283 
   283 
   284     "Modified (comment): / 21-08-2011 / 09:13:31 / cg"
   284     "Modified (comment): / 21-08-2011 / 09:13:31 / cg"
   285 !
   285 !
   286 
   286 
   287 tree: aParseNode
   287 tree: aParseNode
   692 expression
   692 expression
   693     | node savedLastSelectorElement |
   693     | node savedLastSelectorElement |
   694 
   694 
   695     savedLastSelectorElement := lastSelectorElement.
   695     savedLastSelectorElement := lastSelectorElement.
   696     lastSelectorElement := nil.
   696     lastSelectorElement := nil.
       
   697 
   697     node := super expression.
   698     node := super expression.
   698     ((node ~~ #Error) and:[node isMessage]) ifTrue:[
   699     ((node ~~ #Error) and:[node isMessage]) ifTrue:[
   699         [ lastSelectorElement notNil ] whileTrue:[
   700         [ lastSelectorElement notNil ] whileTrue:[
   700             lastSelectorElement node parent: node.
   701             lastSelectorElement node parent: node.
   701             lastSelectorElement := lastSelectorElement prev.
   702             lastSelectorElement := lastSelectorElement previousElement.
   702         ].
   703         ].
   703     ].
   704     ].
   704     lastSelectorElement := savedLastSelectorElement.
   705     lastSelectorElement := savedLastSelectorElement.
   705     ^node
   706     ^node
   706 
   707 
   918     "Created: / 16-02-2012 / 23:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   919     "Created: / 16-02-2012 / 23:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   919 ! !
   920 ! !
   920 
   921 
   921 !SyntaxHighlighter2 methodsFor:'syntax detection'!
   922 !SyntaxHighlighter2 methodsFor:'syntax detection'!
   922 
   923 
       
   924 markBlockArgumentIdentifierFrom:pos1 to:pos2
       
   925     "in addition to marking, remember the variable reference"
       
   926 
       
   927     | node |
       
   928 
       
   929     super markBlockArgumentIdentifierFrom:pos1 to:pos2.
       
   930 
       
   931     node := VariableNode blockArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
       
   932     node block:currentBlock.
       
   933     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
       
   934 !
       
   935 
   923 markLocalVariableDeclaration: name from:pos1 to:pos2
   936 markLocalVariableDeclaration: name from:pos1 to:pos2
       
   937     "in addition to marking, remember the variable reference"
       
   938 
   924     | type node |
   939     | type node |
   925 
   940 
   926     super markLocalVariableDeclaration: name from:pos1 to:pos2.
   941     super markLocalVariableDeclaration: name from:pos1 to:pos2.
   927 
   942 
   928     type := currentBlock notNil ifTrue:[#BlockVariable] ifFalse:[#MethodVariable].
   943     type := currentBlock notNil ifTrue:[#BlockVariable] ifFalse:[#MethodVariable].
   929     node := VariableNode type: type name: name.
   944     node := VariableNode type: type name: name.
   930     node startPosition: pos1 endPosition: pos2.
   945     node block:currentBlock. "/ which is nil for method locals
   931     self rememberVariableElementFor: node from: pos1 to: pos2 assigned: false.
   946     self rememberVariableElementFor: node from: pos1 to: pos2 assigned: false.
   932 
   947 
   933     "Created: / 25-02-2014 / 20:22:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   948     "Created: / 25-02-2014 / 20:22:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   934 !
   949 !
   935 
   950 
   936 markMethodArgumentIdentifierFrom:pos1 to:pos2
   951 markMethodArgumentIdentifierFrom:pos1 to:pos2
       
   952     "in addition to marking, remember the variable reference"
       
   953 
   937     | node |
   954     | node |
   938 
   955 
   939     super markMethodArgumentIdentifierFrom:pos1 to:pos2.
   956     super markMethodArgumentIdentifierFrom:pos1 to:pos2.
   940 
   957 
   941     node := VariableNode methodArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
   958     node := VariableNode methodArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
   942     node startPosition: pos1 endPosition: pos2.    
       
   943     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
   959     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
   944 
   960 
   945     "Created: / 24-07-2010 / 09:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   961     "Created: / 24-07-2010 / 09:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   946     "Modified: / 21-08-2011 / 09:27:26 / cg"
   962     "Modified: / 21-08-2011 / 09:27:26 / cg"
   947     "Modified: / 25-02-2014 / 12:15:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   963     "Modified: / 25-02-2014 / 12:15:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   953 
   969 
   954     "Special hack for Java class references - I would like to have them
   970     "Special hack for Java class references - I would like to have them
   955      marked specially (and not as an error when the class is not yet loaded -
   971      marked specially (and not as an error when the class is not yet loaded -
   956      the code is correct as JavaClassAccessor loads it lazily"
   972      the code is correct as JavaClassAccessor loads it lazily"
   957     (aReceiverNode isJavaPackageReference) ifTrue:[
   973     (aReceiverNode isJavaPackageReference) ifTrue:[
   958 	self
   974         self
   959 	    markFrom:pos1 to:pos2
   975             markFrom:pos1 to:pos2
   960 	    withEmphasis:preferences globalClassIdentifierEmphasis
   976             withEmphasis:preferences globalClassIdentifierEmphasis
   961 	    color: preferences globalClassIdentifierColor
   977             color: preferences globalClassIdentifierColor
   962     ] ifFalse:[
   978     ] ifFalse:[
   963 	super markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode.
   979         super markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode.
   964     ].
   980     ].
   965 
   981 
   966     "don't create symbols for partial typed selectors"
   982     "don't create symbols for partial typed selectors"
   967     selectorSymbol := selectorString asSymbolIfInterned.
   983     selectorSymbol := selectorString asSymbolIfInterned.
   968 
   984 
   969     element := elements newElementFor: (SelectorNode value: selectorString from: pos1 to: pos2).
   985     element := elements newElementFor: (SelectorNode value: selectorString from: pos1 to: pos2).
   970 
   986 
   971     (lastSelectorElement notNil "and:[lastSelectorElement value = selectorString]") ifTrue:[
   987     (lastSelectorElement notNil "and:[lastSelectorElement value = selectorString]") ifTrue:[
   972 	lastSelectorElement next: element.
   988         lastSelectorElement nextElement: element.
   973     ].
   989     ].
   974     elements add: element.
   990     elements add: element.
   975     lastSelectorElement := "(self isValidUnarySelector:tokenType)"false
   991     lastSelectorElement := "(self isValidUnarySelector:tokenType)"false
   976 				ifTrue:[nil]
   992                                 ifTrue:[nil]
   977 				ifFalse:[element].
   993                                 ifFalse:[element].
   978 
   994 
   979     "Created: / 14-02-2010 / 17:40:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   995     "Created: / 14-02-2010 / 17:40:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   980     "Modified: / 14-02-2010 / 19:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   996     "Modified: / 14-02-2010 / 19:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   981     "Modified (format): / 21-08-2011 / 09:18:21 / cg"
   997     "Modified (format): / 21-08-2011 / 09:18:21 / cg"
   982     "Modified: / 19-04-2012 / 09:53:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   998     "Modified: / 19-04-2012 / 09:53:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   983 !
   999 !
   984 
  1000 
   985 markSelfFrom:pos1 to:pos2
  1001 markSelfFrom:pos1 to:pos2
       
  1002     "in addition to marking, remember the variable reference"
       
  1003 
   986     | node |
  1004     | node |
   987 
  1005 
   988     super markSelfFrom:pos1 to:pos2.
  1006     super markSelfFrom:pos1 to:pos2.
   989 
  1007 
   990     node := SelfNode new.
  1008     node := SelfNode new.
   991     node startPosition: pos1 endPosition: pos2.  
       
   992     node type: #Self.
  1009     node type: #Self.
   993     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
  1010     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
   994 
  1011 
   995     "Created: / 21-08-2011 / 09:15:45 / cg"
  1012     "Created: / 21-08-2011 / 09:15:45 / cg"
   996     "Modified: / 25-02-2014 / 21:56:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1013     "Modified: / 25-02-2014 / 21:56:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   997 !
  1014 !
   998 
  1015 
   999 markSuperFrom:pos1 to:pos2
  1016 markSuperFrom:pos1 to:pos2
       
  1017     "in addition to marking, remember the variable reference"
       
  1018 
  1000     | node |
  1019     | node |
  1001 
  1020 
  1002     super markSuperFrom:pos1 to:pos2.
  1021     super markSuperFrom:pos1 to:pos2.
  1003 
  1022 
  1004     node := SuperNode new.
  1023     node := SuperNode new.
  1005     node startPosition: pos1 endPosition: pos2.  
       
  1006     node type: #Super.
  1024     node type: #Super.
  1007     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
  1025     self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
  1008 
  1026 
  1009     "Created: / 25-02-2014 / 21:57:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1027     "Created: / 25-02-2014 / 21:57:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1010 !
  1028 !
  1027     "Modified: / 21-08-2011 / 09:26:30 / cg"
  1045     "Modified: / 21-08-2011 / 09:26:30 / cg"
  1028     "Modified: / 25-02-2014 / 14:07:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1046     "Modified: / 25-02-2014 / 14:07:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1029 !
  1047 !
  1030 
  1048 
  1031 rememberVariableElementFor:node from:pos1 to:pos2 assigned:assigned
  1049 rememberVariableElementFor:node from:pos1 to:pos2 assigned:assigned
  1032     |name typeSymbol element prev|
  1050     |name typeSymbol key element prev|
       
  1051 
       
  1052     node startPosition: pos1 endPosition: pos2.    
  1033 
  1053 
  1034     name := node name.
  1054     name := node name.
  1035     typeSymbol := node type.
  1055     typeSymbol := key := node type.
  1036     prev := (lastVariableElements at:typeSymbol ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
  1056     (typeSymbol == #BlockArg or:[typeSymbol == #BlockVariable]) ifTrue:[
       
  1057         key := (typeSymbol -> node block)
       
  1058     ].
       
  1059 
       
  1060     prev := (lastVariableElements at:key ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
  1037     (prev notNil and:[prev start == pos1]) ifTrue:[
  1061     (prev notNil and:[prev start == pos1]) ifTrue:[
  1038 "/        prev assigned:assigned.
  1062         "/ prev assigned:assigned.
  1039         ^ self
  1063         ^ self
  1040     ].
  1064     ].
  1041 
  1065 
  1042     element := elements newElementFor: node.
  1066     element := elements newElementFor: node.
  1043 
  1067 
  1044     prev notNil ifTrue:[prev next:element].
  1068     prev notNil ifTrue:[prev nextElement:element].
  1045     (lastVariableElements at:typeSymbol) at:name put:element.
  1069     (lastVariableElements at:key) at:name put:element.
  1046 
  1070 
  1047     elements add: element.
  1071     elements add: element.
  1048 
  1072 
  1049     "Created: / 25-02-2014 / 12:13:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1073     "Created: / 25-02-2014 / 12:13:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1050 ! !
  1074 ! !
  1051 
  1075 
  1052 !SyntaxHighlighter2 class methodsFor:'documentation'!
  1076 !SyntaxHighlighter2 class methodsFor:'documentation'!
  1053 
  1077 
  1054 version
  1078 version
  1055     ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
  1079     ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
  1056 !
  1080 !
  1057 
  1081 
  1058 version_CVS
  1082 version_CVS
  1059     ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
  1083     ^ '$Header: /cvs/stx/stx/libtool/SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
  1060 !
  1084 !
  1061 
  1085 
  1062 version_SVN
  1086 version_SVN
  1063     ^ '$Id: SyntaxHighlighter2.st,v 1.24 2015-02-27 13:22:39 cg Exp $'
  1087     ^ '$Id: SyntaxHighlighter2.st,v 1.25 2015-02-27 20:20:50 cg Exp $'
  1064 ! !
  1088 ! !
  1065 
  1089