--- 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!