SmallSense__SmalltalkEditSupport.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 04 Mar 2015 09:51:20 +0000
changeset 444 a47f43af21d6
parent 396 015297b155fe
child 445 783f2a4af9c2
permissions -rw-r--r--
Smalltalk electric snippets: make iterator variable naming logic more configurable * UserPreferences current smallSenseSmalltalkIterationVariableNamePrefixWithEach: If set, then variable name is prefixed with "each", i.e., `eachPerson`. Defaults to `false`. Thanks Alexander Zottnick for suggestion. * UserPreferences current smallSenseSmalltalkIterationVariableNameMaxLength: Length limit for generated variable name, if the name is longer than this limit, fall back to generic `each` to make the code more concise. Defaults to 14 (subject to change). These preferences are "hidden" for now, i.e., there is no configuration UI for them. One has to add the setting to her/his user startup file.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     1
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     2
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 260
diff changeset
     3
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     4
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     5
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     7
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     8
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     9
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    10
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    13
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    14
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    16
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    18
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 247
diff changeset
    19
"{ Package: 'stx:goodies/smallsense' }"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: SmallSense }"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
EditSupport subclass:#SmalltalkEditSupport
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
	instanceVariableNames:'lastTypedKey0 lastTypedKey1 lastTypedKey2 lastTypedKey3'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    27
	category:'SmallSense-Smalltalk'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    30
!SmalltalkEditSupport class methodsFor:'documentation'!
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    31
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    32
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    33
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    34
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 260
diff changeset
    35
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    36
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    37
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    38
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    39
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    40
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    41
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    42
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    43
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    44
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    45
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    46
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    47
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    48
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    49
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    50
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    51
! !
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    53
!SmalltalkEditSupport class methodsFor:'utilities'!
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    54
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    55
indent: text by: level
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    56
    ^ String streamContents:[ :out |
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    57
        | in |
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    58
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    59
        in := text readStream.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    60
        [ in atEnd ] whileFalse:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    61
            in peek == Character cr ifTrue:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    62
                out nextPut: in next.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    63
                out next: level put: Character space.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    64
            ] ifFalse:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    65
                out nextPut: in next.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    66
            ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    67
        ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    68
    ]
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    69
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    70
    "Created: / 04-05-2014 / 23:29:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    71
!
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    72
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    73
undent: stringOrStringCollection
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    74
    | lines indent tabwidth ignoreIndentOfFirstLineIfZero indentOfFirstLineIsZero |
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    75
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    76
    stringOrStringCollection isStringCollection ifTrue:[ 
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    77
        ignoreIndentOfFirstLineIfZero := false.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    78
        stringOrStringCollection removeLast.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    79
        lines := stringOrStringCollection.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    80
    ] ifFalse:[
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    81
        ignoreIndentOfFirstLineIfZero := true.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    82
        lines := stringOrStringCollection asStringCollection.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    83
    ].
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    84
    tabwidth := (ListView userDefaultTabPositions = ListView tab4Positions) ifTrue:[ 4 ] ifFalse: [ 8 ].
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    85
    indent := nil.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    86
    indentOfFirstLineIsZero := false.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    87
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    88
    1 to: lines size do:[:lineNo |
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    89
        | line lineIndent |
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    90
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
    91
        line := lines at: lineNo.
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    92
        lineIndent := line indexOfNonSeparator.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    93
        (lineIndent ~~ 0) ifTrue:[
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    94
            indent isNil ifTrue:[
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    95
                indent := ((lineIndent - 1) // tabwidth) * tabwidth.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    96
            ] ifFalse:[ 
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    97
                indent := (((lineIndent - 1) // tabwidth) * tabwidth) min: indent.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    98
            ].
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    99
            indent == 0 ifTrue:[
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   100
                (lineNo == 1 and:[ignoreIndentOfFirstLineIfZero]) ifTrue:[
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   101
                    indent := nil.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   102
                    indentOfFirstLineIsZero := true.
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   103
                ] ifFalse:[
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   104
                    ^ stringOrStringCollection isStringCollection
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   105
                        ifTrue:[ stringOrStringCollection asStringWithoutFinalCR ]
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   106
                        ifFalse:[ stringOrStringCollection ]
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   107
                ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   108
            ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   109
        ].
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   110
    ].
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   111
    1 to: lines size do:[:lineNr |  
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   112
        (lineNr ~~ 1 or:[indentOfFirstLineIsZero not]) ifTrue:[ 
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   113
            lines at: lineNr put: ((lines at: lineNr) copyFrom: indent + 1).
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   114
        ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   115
    ].
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   116
    ^ lines asStringWithoutFinalCR
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   117
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   118
    "Created: / 04-05-2014 / 23:09:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
257
623cefc35e2e Fix for DNU when indent-on-paste is enabled.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   119
    "Modified: / 23-07-2014 / 23:24:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   120
! !
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   121
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
!SmalltalkEditSupport methodsFor:'accessing'!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
language
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    "superclass SmallSenseEditorSupport says that I am responsible to implement this method"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    ^SmalltalkLanguage instance
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    "Modified: / 24-07-2013 / 23:46:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   132
!SmalltalkEditSupport methodsFor:'accessing-classes'!
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   133
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   134
completionEngineClass
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   135
    ^ SmalltalkCompletionEngine
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   136
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   137
    "Created: / 02-10-2013 / 13:30:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   138
!
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   139
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   140
scannerClass
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   141
    "Returns a class to use for scanning lines. If nil, scanning is
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   142
     not supported and scanLine* methods will return an empty array."
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   143
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   144
    ^ Scanner
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   145
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   146
    "Created: / 22-10-2013 / 00:39:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
117
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   147
! !
441529422c2f Completion support refactored to make it more pluggable/extendable.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   148
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
!SmalltalkEditSupport methodsFor:'editing'!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   151
electricInsert:stringOrLines advanceCursorBy:offsetOrNil
155
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   152
    | ignore |
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   153
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   154
    (stringOrLines isString and:[ stringOrLines first == lastTypedKey0 ]) ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   155
        ignore := stringOrLines copyFrom:2.
155
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   156
    ].
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   157
    ^ self
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   158
            electricInsert:stringOrLines
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   159
            advanceCursorBy:offsetOrNil
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   160
            ignoreKeystrokes:ignore
155
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   161
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   162
    "Created: / 20-01-2014 / 09:27:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   163
!
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   164
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   165
electricInsertSnippet
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   166
    lastTypedKey0 == Character space ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   167
        ^ self electricInsertSnippetAfterSpace
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   168
    ].
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   169
    lastTypedKey0 == $: ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   170
        ^ self electricInsertSnippetAfterDoubleColon
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   171
    ].
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   172
    ^ false.
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   173
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   174
    "Created: / 22-10-2013 / 02:55:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   175
!
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   176
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   177
electricInsertSnippetAfterDoubleColon
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   178
    | tokens  lastToken0  lastValue0 |
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   179
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   180
    tokens := self scanLineAtCursor.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   181
    tokens isEmptyOrNil ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   182
        ^ false
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   183
    ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   184
    lastToken0 := tokens at:(tokens size - 3).
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   185
    lastToken0 = 'Error' ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   186
        ^ false
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   187
    ].
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   188
    (tokens last > textView cursorCol) ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   189
        ^ false
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   190
    ].
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   191
    ((lastToken0 == #Identifier)
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   192
        and:[ (textView cursorCol - 1) == tokens last ])
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   193
            ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   194
                lastValue0 := tokens at:tokens size - 2.
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   195
                tokens size > 4 ifTrue:[
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   196
                    (#( #do #select #reject #detect #contains #allSatisfy #anySatisfy )
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   197
                        includes:lastValue0)
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   198
                            ifTrue:[
444
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   199
                                | collectionName iterationVariableName space part1 part2 |
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   200
444
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   201
                                space := RBFormatter spaceAfterKeywordSelector ifTrue:[' '] ifFalse:[ '' ].
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   202
                                iterationVariableName := 'each'.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   203
                                tokens size > 4 ifTrue:[
444
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   204
                                    collectionName := tokens at:tokens size - 6.
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   205
                                    iterationVariableName := self iterationVariableNameForCollectionNamed: collectionName.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   206
                                ].
444
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   207
                                part1 := ':' , space , '[:' , iterationVariableName , ' | '.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   208
                                part2 := ' ]'.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   209
                                self electricInsert:part1 , part2 advanceCursorBy:part1 size.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   210
                                ^ true.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   211
                            ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   212
                    RBFormatter spaceAfterKeywordSelector ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   213
                        self electricInsert:': '.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   214
                        ^ true.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   215
                    ]
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   216
                ].
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   217
            ].
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   218
    ^ false.
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   219
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   220
    "Created: / 22-10-2013 / 03:05:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
444
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   221
    "Modified (format): / 04-03-2015 / 07:54:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   222
!
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   223
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   224
electricInsertSnippetAfterSpace
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   225
    | tokens  lastToken0  lastValue0 |
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   226
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   227
    tokens := self scanLineAtCursor.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   228
    tokens isEmptyOrNil ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   229
        ^ false
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   230
    ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   231
    lastToken0 := tokens at:(tokens size - 3).
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   232
    lastToken0 = 'Error' ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   233
        ^ false
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   234
    ].
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   235
    (tokens last > textView cursorCol) ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   236
        ^ false
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   237
    ].
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   238
    lastToken0 == #Keyword ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   239
        lastValue0 := tokens at:tokens size - 2.
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   240
        tokens size > 4 ifTrue:[
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   241
            (#( #do: #select: #reject: #detect: #contains: #allSatisfy: #anySatisfy: )
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   242
                includes:lastValue0)
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   243
                    ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   244
                        | collectionName  eachName  part1  part2 |
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   245
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   246
                        eachName := 'each'.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   247
                        tokens size > 4 ifTrue:[
234
97857872ee47 Initial set of tests for GroovyCompletionEngineSimple (along with some fixes)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 219
diff changeset
   248
                            ((collectionName := tokens at:tokens size - 6) last = $s) ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   249
                                (collectionName endsWith:'ses') ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   250
                                    eachName := collectionName copyButLast:2
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   251
                                ] ifFalse:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   252
                                    eachName := collectionName copyButLast:1
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   253
                                ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   254
                            ].
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   255
                        ].
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   256
                        part1 := ' [:' , eachName , ' | '.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   257
                        part2 := ' ]'.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   258
                        self electricInsert:part1 , part2 advanceCursorBy:part1 size.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   259
                        ^ true.
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   260
                    ].
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   261
        ]
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   262
    ].
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   263
    ^ false.
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   264
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   265
    "Created: / 22-10-2013 / 03:00:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   266
    "Modified: / 12-02-2015 / 00:02:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
!SmalltalkEditSupport methodsFor:'event handling'!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
keyPress: key x:x y:y in: view
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
    "Handles an event in given view (a subview of codeView).
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
     If the method returns true, the event will not be processed
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
     by the view."
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
    view ~~ textView ifTrue:[ ^ false ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
155
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   279
    (self keyPressIgnored: key) ifTrue:[
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   280
        ^ true.
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   281
    ].
155
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   282
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
    lastTypedKey3 := lastTypedKey2.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
    lastTypedKey2 := lastTypedKey1.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
    lastTypedKey1 := lastTypedKey0.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
    lastTypedKey0 := key.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   288
    key == #CodeCompletion ifTrue:[
219
c69943a410fd Do not cache completion controller in edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 217
diff changeset
   289
        | controller |
c69943a410fd Do not cache completion controller in edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 217
diff changeset
   290
c69943a410fd Do not cache completion controller in edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 217
diff changeset
   291
        (controller := self textView completionSupport) notNil ifTrue:[
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   292
            ^ controller handleKeyPress:key x:x y:y
217
6ff466b83ff9 Fixes and improvements for Java/Groovy completion (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   293
        ].
6ff466b83ff9 Fixes and improvements for Java/Groovy completion (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   294
        ^ false
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   295
    ].
217
6ff466b83ff9 Fixes and improvements for Java/Groovy completion (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 176
diff changeset
   296
89
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   297
    key == #BackSpace ifTrue:[
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   298
        backspaceIsUndo ifTrue:[
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   299
             textView undo.
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   300
             backspaceIsUndo := false.
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   301
             ^ true.
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   302
        ].
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   303
    ].
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   304
    backspaceIsUndo := false.
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   305
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   306
    key == #Paste ifTrue:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   307
        ^ self keyPressPaste.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   308
    ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   309
89
8ff5fb2b27bf Improvement in (Smalltalk)EditSupport.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 84
diff changeset
   310
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
    key == $^ ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
        ^ self keyPressReturnToken
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
    ].
135
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   314
    key == #Return ifTrue: [
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
        ^ self keyPressReturn
104
3b05b2d777dd Some more support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   316
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
135
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   318
    key == $: ifTrue: [
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   319
        ^ self keyPressDoubleColon.
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   320
    ].
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   321
135
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   322
    key == $= ifTrue: [
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   323
        ^ self keyPressEqual
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   324
    ].
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   325
155
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   326
    key == Character space ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   327
        ^ self electricInsertSnippet
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   328
    ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   329
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   330
    key == $[ ifTrue:[
160
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   331
        ^ self keyPressOpenBracket.
155
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   332
    ].
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   333
d792aed09149 Initial support for ignoring keystrokes to avoid duplicate text when electric insert is active.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   334
    ^ false.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
    "Created: / 07-03-2010 / 09:36:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
219
c69943a410fd Do not cache completion controller in edit support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 217
diff changeset
   337
    "Modified: / 18-05-2014 / 12:45:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   338
!
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   339
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   340
keyPressDoubleColon
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   341
    ^ self electricInsertSnippetAfterDoubleColon
134
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   342
e34ee6ceb7c8 Initial support for "electric snippets".
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   343
    "Created: / 22-10-2013 / 03:08:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
135
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   346
keyPressEqual
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   347
    | line |
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   348
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   349
    line := textView listAt:textView cursorLine.
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   350
    line isNil ifTrue:[ ^ false ].
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   351
    line := line string.
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   352
    line size > textView cursorCol ifTrue: [ ^ false ].
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   353
    line size < (textView cursorCol - 1) ifTrue: [ ^ false ].
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   354
    (line at: textView cursorCol - 1) == $: ifTrue: [
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   355
        self electricInsert:'= '.
135
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   356
        ^ true
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   357
    ].
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   358
    ^ false
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   359
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   360
    "Created: / 22-10-2013 / 11:01:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   361
!
f40d2ac07f38 Electric editing for Smalltalk: autoinsert space fter assignment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   362
160
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   363
keyPressOpenBracket
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   364
    "Opening `[` has been pressed. Complete closing bracket and position
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   365
     cursor in between them, but only of there's no other text on current line"
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   366
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   367
    | line |
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   368
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   369
    line := textView listAt: textView cursorLine.
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   370
    line notNil ifTrue:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   371
        line := line string.
160
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   372
        line size > textView cursorCol ifTrue: [
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   373
            line size downTo: textView cursorCol - 1 do:[:i |
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   374
                (line at:i) == Character space ifFalse:[ ^ false ].
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   375
            ]
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   376
        ].
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   377
    ].
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   378
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   379
    RBFormatter spaceAfterBlockStart ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   380
        RBFormatter spaceBeforeBlockEnd ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   381
            self electricInsert:'[  ]' advanceCursorBy: 2.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   382
        ] ifFalse:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   383
            self electricInsert:'[ ]' advanceCursorBy: 2.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   384
        ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   385
    ] ifFalse:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   386
        RBFormatter spaceBeforeBlockEnd ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   387
            self electricInsert:'[ ]' advanceCursorBy: 1.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   388
        ] ifFalse:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   389
            self electricInsert:'[]' advanceCursorBy: 1.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   390
        ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   391
    ].
160
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   392
    ^ true.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   393
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   394
    "Created: / 22-01-2014 / 21:35:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
160
89a001a355b4 Fix in edit support - when typing an opening bracket (`[`) eceltric insert closing only theres no more text on current line.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 159
diff changeset
   395
    "Modified: / 29-01-2014 / 10:30:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   396
!
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   397
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   398
keyPressPaste
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   399
    | textSelected textPasted currentLineNo currentLine currentLineIsEmpty |
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   400
255
c32b4a6595d6 Added preference to enable / disable indent-on-paste feature.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   401
    UserPreferences current smallSenseSmalltalkIndentOnPasteEnabled ifFalse:[ ^ false ].
c32b4a6595d6 Added preference to enable / disable indent-on-paste feature.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   402
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   403
    textView checkModificationsAllowed ifTrue:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   404
        textSelected := textPasted := textView getTextSelectionOrTextSelectionFromHistory.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   405
        currentLineNo := textView currentLine.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   406
        currentLineIsEmpty := true.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   407
        ((currentLineNo > textView list size)
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   408
            or:[ (currentLine := textView list at: currentLineNo) isNil
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   409
                or:[ (currentLineIsEmpty := currentLine indexOfNonSeparator == 0) ]]) ifTrue:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   410
                    | indent |
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   411
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   412
                    currentLineIsEmpty ifTrue:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   413
                        indent := textView leftIndentForLine: currentLineNo.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   414
                        textView setCursorCol: indent + 1.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   415
                    ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   416
                    textPasted := self class undent: textPasted.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   417
                    textPasted := self class indent: textPasted by: textView cursorCol - 1.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   418
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   419
                ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   420
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   421
        textView undoablePasteOrReplace: textPasted info: nil.
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   422
    ].
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   423
    ^ true
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   424
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   425
    "Created: / 03-05-2014 / 01:08:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
255
c32b4a6595d6 Added preference to enable / disable indent-on-paste feature.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   426
    "Modified: / 19-07-2014 / 00:13:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   427
!
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   428
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
keyPressReturn
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   430
    | line tokens c i t currentLineIndent closingBracketIndex |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
    line := textView listAt: textView cursorLine.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
    line isNil ifTrue:[ ^ false ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
    line := line string.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   435
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   436
    "/ Check whether there is any text afer cursor
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   437
    "/ except of single closing `]`. If there's some text
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   438
    "/ don't do anything smart. If there's only single closing
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   439
    "/ ']', then remeber it.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   440
    closingBracketIndex := 0.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   441
    line size > textView cursorCol ifTrue: [
246
9e5790683f85 Fix in SmalltalkEditSupport>>keyPressReturn: care for empty lines when ] is pressed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   442
        line size downTo: ((textView cursorCol - 1) max: 1) do:[:i |
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   443
            (c :=line at:i) == Character space ifFalse:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   444
                (c == $] and:[closingBracketIndex == 0]) ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   445
                    closingBracketIndex := i.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   446
                ] ifFalse:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   447
                    ^ false
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   448
                ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   449
            ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   450
        ]
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   451
    ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   452
84
1d05306a49f8 Added support for electric eol-comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   453
    (line indexOfAny:'[|/') == 0 ifTrue:[ ^ false ].
1d05306a49f8 Added support for electric eol-comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   454
1d05306a49f8 Added support for electric eol-comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   455
    "/ Insert "/ at the beggining of the line if current line starts with "/
144
a43236d0c411 Indentation fixes for electric-inserted code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   456
    i := currentLineIndent := line indexOfNonSeparator.
84
1d05306a49f8 Added support for electric eol-comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   457
    (i ~~ 0 and:[ i < line size and:[(line at:i) == $" and:[(line at:i + 1) == $/]]]) ifTrue:[
144
a43236d0c411 Indentation fixes for electric-inserted code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   458
        "/ OK, current line contains eol-comment. Split into
a43236d0c411 Indentation fixes for electric-inserted code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   459
        "/ two actions so backspace deletes only the inserted '"/ ' text
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   460
        self electricInsert:#( '' '' ) advanceCursorBy:(1 @ i).
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   461
        self electricInsert:'"/ '.
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   462
        ^ true
84
1d05306a49f8 Added support for electric eol-comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   463
    ].
1d05306a49f8 Added support for electric eol-comments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   464
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   465
    "/ Now insert/reindent closing bracket ( ']' ) for block, byt only
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   466
    "/ if current preference is C-style blocks
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   467
    RBFormatter cStyleBlocks ifFalse:[ ^ false ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   468
    "/ There are two possible cases:
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   469
    "/ (i)  there is no single closing bracket on the line, then
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   470
    "/      add closing ] but only iff last typed character is
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   471
    "/      either [ or |  !!!!!!!! Otherwise we would get annoying behaviour
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   472
    "/      when there's already valid code and someone position cursor after
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   473
    "/      opening bracket and press enter.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   474
    "/ (ii) there's single closing bracket on current line
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   475
    "/      (closingBracketIndex is non-zero)
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   476
    (closingBracketIndex == 0 and:[('[|' includes: lastTypedKey1) not]) ifTrue:[ ^ false ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   477
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   478
    i := textView cursorCol - 1.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
    [ (line at: i) isSeparator and:[i > 0] ] whileTrue:[ i := i - 1 ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
    i == 0 ifTrue:[ ^ false ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
    (line at: i) == $[ ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   482
        self electricDo:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   483
            closingBracketIndex ~~ 0 ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   484
                self electricDeleteCharacterAtCol: closingBracketIndex
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   485
            ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   486
            self electricInsertBlockOpenedBy:nil closedBy:'].'.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   487
        ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
        ^ true
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
    tokens := self tokensAtCursorLine.
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   491
    tokens isEmpty ifTrue:[ ^ false ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
    i := tokens size.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
    t := tokens at: i.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
    t == $[ ifTrue:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   495
        self electricDo:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   496
            closingBracketIndex ~~ 0 ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   497
                self electricDeleteCharacterAtCol: closingBracketIndex
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   498
            ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   499
            self electricInsertBlockOpenedBy:nil closedBy:'].'.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   500
        ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
        ^ true
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
    t == $| ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
        i := i - 1.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
        [ i > 1 and:[ (tokens at: i) == #Identifier and:[ (tokens at: i - 1) == $: ]] ] whileTrue:[ i := i - 2 ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
        (i ~~ 0 and: [(tokens at: i) == $[]) ifTrue:[
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   508
            self electricDo:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   509
                closingBracketIndex ~~ 0 ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   510
                    self electricDeleteCharacterAtCol: closingBracketIndex
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   511
                ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   512
                self electricInsertBlockOpenedBy:nil closedBy:'].'.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   513
            ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
            ^ true
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
        i := tokens size  - 1.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
        [ i > 0 and:[ (tokens at: i) == #Identifier ] ] whileTrue:[ i := i - 1 ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
        (i ~~ 0 and: [(tokens at: i) == $|]) ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
            RBFormatter emptyLineAfterTemporaries ifTrue:[
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   520
                self electricDo:[
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   521
                    closingBracketIndex ~~ 0 ifTrue:[
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   522
                        self electricDeleteCharacterAtCol: closingBracketIndex
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   523
                    ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   524
                    self electricInsert:#( '' '' '' ) advanceCursorBy:2 @ currentLineIndent.
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   525
                ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
                ^ true
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
            ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
        ]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
    ^ false.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
    "Created: / 25-07-2013 / 00:02:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
246
9e5790683f85 Fix in SmalltalkEditSupport>>keyPressReturn: care for empty lines when ] is pressed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   533
    "Modified: / 23-06-2014 / 20:22:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   536
keyPressReturnToken
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   537
    RBFormatter spaceAfterReturnToken ifTrue:[
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   538
        self electricDo:[
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   539
            textView insertStringAtCursor:'^ '
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
        ^ true
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   543
    ^ false
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
    "Created: / 24-07-2013 / 23:59:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   546
    "Modified: / 22-01-2014 / 21:10:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   547
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   549
!SmalltalkEditSupport methodsFor:'initialization'!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   550
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   551
initializeForService: anEditService
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   552
    super initializeForService: anEditService.
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   553
    anEditService textView autoIndent:true.
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   554
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   555
    "Created: / 27-09-2013 / 13:22:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   556
    "Modified: / 11-02-2015 / 23:59:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   557
! !
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   558
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
!SmalltalkEditSupport methodsFor:'private'!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
444
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   561
iterationVariableNameForCollectionNamed: collectionName
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   562
    | eachName |
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   563
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   564
    eachName := 'each'.
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   565
    ((collectionName) last = $s) ifTrue:[
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   566
        (collectionName endsWith:'ses') ifTrue:[
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   567
            eachName := collectionName copyButLast:2
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   568
        ] ifFalse:[
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   569
            eachName := collectionName copyButLast:1
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   570
        ].
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   571
        UserPreferences current smallSenseSmalltalkIterationVariableNamePrefixWithEach ifTrue:[ 
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   572
            eachName := 'each' , eachName capitalized.
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   573
        ].
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   574
        eachName size > UserPreferences current smallSenseSmalltalkIterationVariableNameMaxLength ifTrue:[ 
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   575
            eachName := 'each'.
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   576
        ].
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   577
    ].
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   578
    ^ eachName
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   579
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   580
    "Created: / 04-03-2015 / 07:52:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   581
!
a47f43af21d6 Smalltalk electric snippets: make iterator variable naming logic more configurable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 396
diff changeset
   582
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
tokensAtCursorLine
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   584
    | line scanner token |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   586
    line := (textView listAt: textView cursorLine) string.
242
7a056a0ab77c [mq]: indent-on-paste.patch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 234
diff changeset
   587
    line := line copyTo: textView cursorCol - 1.
159
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   588
    line isEmpty ifTrue:[ ^ #() ].
289c7ef539af Improved support for electric bracket.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 155
diff changeset
   589
    scanner := Scanner for: line.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
    ^ OrderedCollection streamContents:[:tokens |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
        [ token := scanner nextToken.token ~~ #EOF ] whileTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   592
            tokens nextPut: token.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   593
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   594
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
    "Created: / 25-07-2013 / 00:07:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
395
25ed27eaeaae Completion: added support for SmallSense completion in an inspector views.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 374
diff changeset
   597
    "Modified: / 12-02-2015 / 00:02:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
!SmalltalkEditSupport class methodsFor:'documentation'!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
version_HG
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
    ^ '$Changeset: <not expanded> $'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606