SmallSenseSmalltalkEditSupport.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 06 Aug 2013 02:55:01 +0100
changeset 53 84e9840dd522
parent 52 3ca8f7181ed5
child 61 14e6a63a43a5
permissions -rw-r--r--
Inprovement in code completion: close completion list after Tab pressed if there are no more alternatives.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:smallsense' }"
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
SmallSenseEditSupport subclass:#SmallSenseSmalltalkEditSupport
41
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
     4
	instanceVariableNames:'lastTypedKey0 lastTypedKey1 lastTypedKey2 lastTypedKey3'
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
42
48307f46ff8e Edit support cut off to a new service. Added SmallSense syntax highlighting service.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
     7
	category:'SmallSense-Services'
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
40
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
    10
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
!SmallSenseSmalltalkEditSupport methodsFor:'accessing'!
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
language
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
    "superclass SmallSenseEditorSupport says that I am responsible to implement this method"
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    ^SmalltalkLanguage instance
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    "Modified: / 24-07-2013 / 23:46:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
! !
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!SmallSenseSmalltalkEditSupport methodsFor:'editing'!
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
insertElectricBlockOpenedBy: openText closedBy: closeText
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    | line col |
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
    textView undoableDo:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
        textView insertStringAtCursor: (openText ? '') , Character cr , Character cr, closeText , Character cr.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
        line := textView cursorLine - 1.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
        col := textView cursorCol  + 3.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
        textView cursorLine: line col: col.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
    ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
    "Created: / 25-07-2013 / 10:41:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
! !
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
!SmallSenseSmalltalkEditSupport methodsFor:'event handling'!
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
52
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    38
doKeyPressKeyComplete
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    39
    |cls 
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    40
"/     crsrPos interval node checkedNode
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    41
"/     char start stop selectorSoFar matchingSelectors
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    42
    codeView |
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    43
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    44
    codeView := service codeView.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    45
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    46
    cls := codeView classHolder value.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    47
    cls isNil ifTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    48
        codeView showInfo:'No class'.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    49
        ^ true.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    50
    ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    51
    UserInformation handle:[:ex |
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    52
        codeView showInfo:(ex messageText).
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    53
        ex proceed.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    54
    ] do:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    55
        codeView withWaitCursorDo:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    56
            codeView textView keyRelease: #Control_L x:0 y:0.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    57
            SmallSenseCompletionWindow openForView: codeView class: cls.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    58
        ]
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    59
    ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    60
    ^ true.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    61
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    62
"/
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    63
"/    interval := self selectedInterval.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    64
"/    interval isEmpty ifTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    65
"/        crsrPos := codeView characterPositionOfCursor - 1.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    66
"/        char := codeView characterUnderCursor.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    67
"/        [crsrPos > 1 and:[char isSeparator or:['.' includes:char]]] whileTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    68
"/            crsrPos := crsrPos - 1.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    69
"/            char := codeView characterAtCharacterPosition:crsrPos.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    70
"/        ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    71
"/        interval := crsrPos to:crsrPos.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    72
"/    ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    73
"/
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    74
"/    node := self findNodeForInterval:interval allowErrors:true.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    75
"/    [node isNil] whileTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    76
"/        "/ expand to the left ...
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    77
"/        interval start > 1 ifFalse:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    78
"/            self showInfo:'No parseNode found'.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    79
"/            ^ self.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    80
"/        ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    81
"/        interval start:(interval start - 1).
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    82
"/        node := self findNodeForInterval:interval allowErrors:true.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    83
"/    ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    84
"/
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    85
"/    node isVariable ifTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    86
"/        self codeCompletionForVariable:node inClass:cls.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    87
"/        ^ self.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    88
"/    ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    89
"/
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    90
"/    checkedNode := node.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    91
"/    [checkedNode notNil] whileTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    92
"/        checkedNode isMessage ifTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    93
"/            self codeCompletionForMessage:checkedNode inClass:cls.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    94
"/            ^ self
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    95
"/        ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    96
"/        checkedNode isMethod ifTrue:[
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    97
"/            self codeCompletionForMethod:checkedNode inClass:cls.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    98
"/            ^ self.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
    99
"/        ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   100
"/        checkedNode := checkedNode parent.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   101
"/    ].
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   102
"/
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   103
"/    self showInfo:'Node is neither variable nor message.'.
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   104
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   105
    "Created: / 04-08-2013 / 02:33:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   106
    "Modified: / 04-08-2013 / 11:38:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   107
!
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   108
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
keyPress: key x:x y:y in: view
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    "Handles an event in given view (a subview of codeView).
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
     If the method returns true, the event will not be processed
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
     by the view."
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
41
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   115
    view ~~ textView ifTrue:[ ^ false ].
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   116
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   117
    lastTypedKey3 := lastTypedKey2.
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   118
    lastTypedKey2 := lastTypedKey1.
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   119
    lastTypedKey1 := lastTypedKey0.
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   120
    lastTypedKey0 := key.
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
    key == $^ ifTrue:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
        ^ self keyPressReturnToken
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
    ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    key == #Return ifTrue:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
        ^ self keyPressReturn
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    ]. 
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
52
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   129
    ^ super keyPress: key x:x y:y in: view
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    "Created: / 07-03-2010 / 09:36:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
52
3ca8f7181ed5 Factored out common support for code completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   132
    "Modified: / 04-08-2013 / 02:31:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
!
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
keyPressReturn
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    | line tokens i t |
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
41
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   138
    ('[|' includes: lastTypedKey1) ifFalse:[ ^ false ].
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    line := textView listAt: textView cursorLine.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    line isNil ifTrue:[ ^ false ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
    line := line string.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
    line size > textView cursorCol ifTrue: [ ^ false ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    (line indexOfAny:'[|') == 0 ifTrue:[ ^ false ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    i := line size.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    [ (line at: i) isSeparator and:[i > 0] ] whileTrue:[ i := i - 1 ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
    i == 0 ifTrue:[ ^ false ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    (line at: i) == $[ ifTrue:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
        self insertElectricBlockOpenedBy: nil closedBy: ']'.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
        ^ true
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
    tokens := self tokensAtCursorLine.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    i := tokens size.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    t := tokens at: i.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
    t == $[ ifTrue:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
        self insertElectricBlockOpenedBy: nil closedBy: ']'.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
        ^ true
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
    ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
    t == $| ifTrue:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
        i := i - 1.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
        [ i > 1 and:[ (tokens at: i) == #Identifier and:[ (tokens at: i - 1) == $: ]] ] whileTrue:[ i := i - 2 ].
40
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   161
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   162
        (i ~~ 0 and: [(tokens at: i) == $[]) ifTrue:[
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
            self insertElectricBlockOpenedBy: nil closedBy: ']'.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
            ^ true
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
        ].
40
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   166
        i := tokens size  - 1.
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   167
        [ i > 0 and:[ (tokens at: i) == #Identifier ] ] whileTrue:[ i := i - 1 ].
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   168
        (i ~~ 0 and: [(tokens at: i) == $|]) ifTrue:[
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   169
            RBFormatter emptyLineAfterTemporaries ifTrue:[
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   170
                textView undoableDo:[
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   171
                    textView insertStringAtCursor: (Character cr asString , Character cr , Character cr)
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   172
                ].
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   173
                ^ true
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   174
            ]
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   175
        ]
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
    ^ false.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
    "Created: / 25-07-2013 / 00:02:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
41
6bbd154db308 Added preference to enable/disable 'electric edit' support (disabled bu default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   180
    "Modified: / 26-07-2013 / 12:16:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
39
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
!
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
keyPressReturnToken
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    RBFormatter spaceAfterReturnToken ifTrue:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
        textView undoableDo:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
            textView  insertStringAtCursor:'^ ' 
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
        ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
        ^ true
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
    ^ false
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    "Created: / 24-07-2013 / 23:59:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
! !
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
!SmallSenseSmalltalkEditSupport methodsFor:'private'!
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
tokensAtCursorLine
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
    | scanner token |
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
    scanner := Scanner for: (service textView listAt: service textView cursorLine) string.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
    ^ OrderedCollection streamContents:[:tokens |
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
        [ token := scanner nextToken.token ~~ #EOF ] whileTrue:[
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
            tokens nextPut: token.
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
        ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    ].
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    "Created: / 25-07-2013 / 00:07:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
! !
748389119d0a Initial support for per-language edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
40
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   210
!SmallSenseSmalltalkEditSupport class methodsFor:'documentation'!
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   211
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   212
version_HG
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   213
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   214
    ^ '$Changeset: <not expanded> $'
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   215
! !
85eaf579889b Support for elecring blank line after smalltelk temporaries.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   216