SmallSenseJavaEditSupport.st
changeset 51 a37e5df13fab
child 52 3ca8f7181ed5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSenseJavaEditSupport.st	Sun Aug 04 02:29:30 2013 +0100
@@ -0,0 +1,99 @@
+"{ Package: 'jv:smallsense' }"
+
+SmallSenseEditSupport subclass:#SmallSenseJavaEditSupport
+	instanceVariableNames:'lastTypedKey0 lastTypedKey1 lastTypedKey2 lastTypedKey3'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Services'
+!
+
+!SmallSenseJavaEditSupport methodsFor:'accessing'!
+
+language
+    "superclass SmallSenseEditSupport says that I am responsible to implement this method"
+
+    ^ (Smalltalk at:#JavaLanguage) instance.
+
+    "Modified: / 04-08-2013 / 02:07:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SmallSenseJavaEditSupport methodsFor:'event handling'!
+
+keyPress: key x:x y:y in: view
+
+    "Handles an event in given view (a subview of codeView).
+     If the method returns true, the event will not be processed
+     by the view."
+
+    view ~~ textView ifTrue:[ ^ false ].
+
+    lastTypedKey3 := lastTypedKey2.
+    lastTypedKey2 := lastTypedKey1.
+    lastTypedKey1 := lastTypedKey0.
+    lastTypedKey0 := key.
+
+    key == ${ ifTrue:[
+        ^ self keyPressOpenCurly
+    ].
+
+    ^ false.
+
+    "Created: / 07-03-2010 / 09:36:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-08-2013 / 01:54:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+keyPressOpenCurly
+    | line token i |
+
+    line := service codeView listAt: service codeView cursorLine.
+    line notEmptyOrNil ifTrue:[
+        i := line size.
+        [ (line at: i) isSeparator and:[i > 0] ] whileTrue:[ i := i - 1 ].
+        (i ~~ 0 and:[service codeView cursorCol < i]) ifTrue:[
+            ^ false.
+        ].
+    ] ifFalse:[
+        self insertElectricBlockOpenedBy: '{' closedBy: '}'. 
+        ^ true
+    ].
+
+    token := self tokenAtCursorLine.
+    (token isNil or:[token == #String]) ifTrue:[ ^ false ].
+
+    self insertElectricBlockOpenedBy: '{' closedBy: '}'. 
+    ^ true
+
+    "Created: / 04-08-2013 / 01:54:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SmallSenseJavaEditSupport methodsFor:'private'!
+
+tokenAtCursorLine
+    | scanner token |
+
+    scanner := (Smalltalk at:#JavaScanner) for: (service textView listAt: service textView cursorLine) string.
+
+    [ 
+        token := scanner nextToken.
+        (token ~~ #EOF and:[ scanner tokenEndPosition + 1 < service textView cursorCol ]) whileTrue.
+    ] on: Error do:[
+        token := nil.
+    ].
+    ^ token
+
+    "Created: / 04-08-2013 / 02:00:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+tokensAtCursorLine
+    | scanner token |
+
+    scanner := (Smalltalk at:#JavaScanner) for: (service textView listAt: service textView cursorLine) string.
+    ^ OrderedCollection streamContents:[:tokens |
+        [ token := scanner nextToken.token ~~ #EOF ] whileTrue:[
+            tokens nextPut: token.
+        ].
+    ].
+
+    "Created: / 04-08-2013 / 01:57:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+