tools/JavaSourceHighlighter.st
branchdevelopment
changeset 2707 165badf6c997
parent 2703 cec245f60b30
child 2708 648286432b9a
--- a/tools/JavaSourceHighlighter.st	Tue Sep 03 14:09:43 2013 +0100
+++ b/tools/JavaSourceHighlighter.st	Thu Sep 05 03:29:47 2013 +0100
@@ -23,28 +23,15 @@
 Object subclass:#JavaSourceHighlighter
 	instanceVariableNames:'preferences cachedStringEmphasis cachedStringColor sourceText
 		sourceIndex'
-	classVariableNames:'FormattedSourceCache'
+	classVariableNames:''
 	poolDictionaries:''
 	category:'Languages-Java-Tools-Source'
 !
 
-PPParser subclass:#BlockParser
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:JavaSourceHighlighter
-!
-
-JavaParseNodeBuilder subclass:#Builder
+Object subclass:#Marker
 	instanceVariableNames:'highlighter'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:JavaSourceHighlighter
-!
-
-JavaParser subclass:#Parser
-	instanceVariableNames:'stream'
-	classVariableNames:''
+	classVariableNames:'MARK_KEYWORD MARK_NUMBER MARK_STRING MARK_CHARACTER MARK_COMMENT
+		MARK_JAVADOC MARK_KEYWORD_FLOW'
 	poolDictionaries:''
 	privateIn:JavaSourceHighlighter
 !
@@ -202,9 +189,10 @@
     ] on: Error do:[
 
     ].
-        ^ sourceText
+    ^ sourceText
 
     "Created: / 04-08-2013 / 00:25:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 05-09-2013 / 02:54:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 formatExpression:source in:class
@@ -294,14 +282,20 @@
         sourceText := source asText.
     ].
 
-    scanner := Scanner for: source.  
-    builder := Builder new.
-    builder highlighter: self.
-    scanner highlighter: self.
-    parser := Parser newStartingAt: kind.
-    parser builder: builder.
-    parser stream: scanner.
-    tree := parser parse: scanner.
+    scanner := Scanner for: source.
+    scanner highlighter: self.     
+    [
+        [ scanner nextToken ~~ #EOF ] whileTrue.
+    ] on: Error do:[
+    ]. 
+
+"/    builder := Builder new.
+"/    builder highlighter: self.
+"/    scanner highlighter: self.
+"/    parser := Parser newStartingAt: kind.
+"/    parser builder: builder.
+"/    parser stream: scanner.
+"/    tree := parser parse: scanner.
 
     ^ cacheIt ifTrue:[
         document sourceText: sourceText.
@@ -315,7 +309,7 @@
     ]
 
     "Created: / 17-03-2012 / 14:02:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 30-08-2013 / 01:53:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 05-09-2013 / 02:56:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaSourceHighlighter methodsFor:'syntax detection'!
@@ -441,6 +435,24 @@
     "Modified: / 07-08-2013 / 00:28:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+markKeywordFlowFrom:pos1 to:pos2
+    self 
+        markFrom:pos1 to:pos2 
+        withEmphasis:preferences controlFlowSelectorEmphasis
+        color:preferences controlFlowSelectorColor
+
+    "Created: / 05-09-2013 / 03:09:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+markKeywordFrom:pos1 to:pos2
+    self 
+        markFrom:pos1 to:pos2 
+        withEmphasis:preferences jsKeywordEmphasis
+        color:preferences jsKeywordColor
+
+    "Created: / 05-09-2013 / 03:09:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 markLocalIdentifierFrom:pos1 to:pos2
     self 
         markFrom:pos1 to:pos2 
@@ -601,189 +613,46 @@
     "Modified: / 4.3.1999 / 12:56:13 / cg"
 ! !
 
-!JavaSourceHighlighter::BlockParser methodsFor:'parsing'!
-
-parseOn: aStream
-
-    | start stop scanner stack t |
-
+!JavaSourceHighlighter::Marker class methodsFor:'initialization'!
 
-    scanner := aStream. "/give it better name so the code is readable...
-    stack := Stack new:10.
-    t := scanner nextToken.
-    t ~~ ${ ifTrue:[
-        ^ PPFailure message: ('unexpected token (got ', (scanner tokenValue ? nil) printString , ' expecting { )') at: aStream position
-    ].
-    stack push: t.
-    [ t ~~ #EOF and:[ stack notEmpty ] ] whileTrue:[
-        "/Skip all non-paren like tokens...    
-        t := scanner nextToken.
-        [ ('{}[]()' includes: t) or: [ t == #EOF ] ] whileFalse:[
-            t := scanner nextToken.    
-        ].
-        ('{[(' includes: t) ifTrue:[
-            stack push: t.
-        ] ifFalse:[
-            | opening |
-
-            opening := '{[(' at: ('}])' indexOf: t).
-            stack top == opening ifTrue:[
-                stack pop
-            ] ifFalse:[
-                ^ PPFailure message: ('mispatched (got ''', t , ''' expecting ''', ('}])' at: ('{[(' indexOf: stack top)) , ''' )') at: aStream position
-            ]
-        ]
-    ].
-
-    stop := aStream position.
-    ^JavaScanner::Token new
-        type: #__Block__;
-        value: nil;
-        startPosition: start;
-        endPosition: stop;
-        yourself.
-
-
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
 
     "
-        ( JavaBlockParser new trim , ';' asParser trim) parse: '{ } ;'
-
+    !!!! IMPORTANT !!!!!!
+    When changing / adding constants, make sure they
+    are in sync with those defined in Smaltalk
+    stx.libjava.tools.source.JavaSourceMarker !!!!!!
     "
 
-    "Modified: / 04-08-2013 / 01:42:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!JavaSourceHighlighter::Builder methodsFor:'accessing'!
-
-highlighter
-    ^ highlighter
-!
-
-highlighter:something
-    highlighter := something.
-! !
-
-!JavaSourceHighlighter::Builder methodsFor:'building'!
-
-newComment: text
+    self lookupObject: JavaLookup instance.
+    
+    MARK_KEYWORD := 1.
+    MARK_NUMBER := 2.
+    MARK_STRING := 3.
+    MARK_CHARACTER := 4.
+    MARK_COMMENT := 5.
+    MARK_JAVADOC := 6.
+    MARK_KEYWORD_FLOW := 7.
 
-    highlighter markCommentFrom:start to: stop.
-    ^super newComment: text
-
-    "Created: / 09-03-2012 / 17:11:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-newJavaDoc: text
-
-    highlighter markCommentFrom:start to: stop.
-    ^super newJavaDoc: text
-
-    "Created: / 09-03-2012 / 17:11:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-newStringLiteral: text
-
-    highlighter markStringFrom:start to: stop.
-    ^super newStringLiteral: text
-
-    "Created: / 22-04-2013 / 18:22:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 05-09-2013 / 03:14:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!JavaSourceHighlighter::Parser methodsFor:'accessing'!
-
-highlighter
-
-    ^builder highlighter
-
-    "Created: / 17-03-2012 / 19:11:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-stream
-    ^ stream
-!
-
-stream:something
-    stream := something.
-! !
-
-!JavaSourceHighlighter::Parser methodsFor:'grammar-classes-method'!
-
-constructorNameIdentifier
+!JavaSourceHighlighter::Marker methodsFor:'syntax detection'!
 
-    ^super constructorNameIdentifier ==> [:token|
-        self highlighter
-            markSelector: token value 
-                    from: token startPosition to: token endPosition
-    ]
-
-    "Created: / 17-03-2012 / 19:12:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-identifier
+mark: kind from:pos1 to:pos2
 
-    ^(JavaParserI::TokenParser for: #Identifier)
-
-    "Created: / 16-12-2012 / 10:29:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 17-01-2013 / 11:10:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-methodNameIdentifier
-
-    ^super methodNameIdentifier ==> [:token|
-        self highlighter
-            markSelector: token value 
-                    from: token startPosition to: token endPosition
-    ]
+    kind == MARK_KEYWORD        ifTrue:[ ^ highlighter markKeywordFrom: pos1 to: pos2 ].
+    kind == MARK_KEYWORD_FLOW   ifTrue:[ ^ highlighter markKeywordFlowFrom: pos1 to: pos2 ].
 
-    "Created: / 17-03-2012 / 19:13:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-typeNameIdentifier
-
-    ^super typeNameIdentifier ==> [:token|
-        self highlighter
-            markSelector: token value 
-                    from: token startPosition to: token endPosition
-    ]
-
-    "Created: / 17-03-2012 / 19:44:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!JavaSourceHighlighter::Parser methodsFor:'grammar-literals-string'!
-
-stringLiteral 
-
-    ^super stringLiteral ==> [:stringToken|
-        builder 
-            start: stringToken startPosition; 
-            stop: stringToken endPosition;
-            newStringLiteral: stringToken value
-    ]
+    kind == MARK_NUMBER         ifTrue:[ ^ highlighter markConstantFrom: pos1 to: pos2 ].
+    kind == MARK_STRING         ifTrue:[ ^ highlighter markConstantFrom: pos1 to: pos2 ].
+    kind == MARK_CHARACTER      ifTrue:[ ^ highlighter markConstantFrom: pos1 to: pos2 ].
 
-    "Created: / 17-03-2012 / 17:31:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 22-04-2013 / 18:13:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!JavaSourceHighlighter::Parser methodsFor:'utility'!
-
-tokenFor: aString
+    kind == MARK_COMMENT       ifTrue:[ ^ highlighter markCommentFrom: pos1 to: pos2 ].
+    kind == MARK_JAVADOC       ifTrue:[ ^ highlighter markCommentFrom: pos1 to: pos2 ].
 
-"/    | p |
-"/
-"/    p := keywords at: aString ifAbsent:[nil].
-"/    p notNil ifTrue:[ 
-"/        ^ (self asToken: p) ==> [:token| 
-"/            | start stop |
-"/
-"/            stop := stream position.
-"/            start := stop - keyword size.
-"/            builder highlighter markKeyword: keyword from:start to:stop
-"/        ].
-"/    ].
-
-    ^super tokenFor: aString
-
-    "Created: / 10-03-2012 / 11:52:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 05-09-2013 / 03:03:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaSourceHighlighter::Scanner methodsFor:'accessing'!
@@ -913,3 +782,5 @@
     ^ 'Id'
 ! !
 
+
+JavaSourceHighlighter::Marker initialize!