Tools__CodeHighlightingService.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 29 Jan 2012 12:53:39 +0000
branchjv
changeset 12123 4bde08cebd48
parent 11181 f04a38c369c9
child 12125 0c49a3b13e43
permissions -rw-r--r--
trunk branched into /branches/jv
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
10077
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
     2
 COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
10440
ad79e93dc9b7 no need to access BackgroundJob via Smalltalk - the bug
Claus Gittinger <cg@exept.de>
parents: 10439
diff changeset
     3
	      All Rights Reserved
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
10077
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
     5
Permission is hereby granted, free of charge, to any person
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
     6
obtaining a copy of this software and associated documentation
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
     7
files (the 'Software'), to deal in the Software without
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
     8
restriction, including without limitation the rights to use,
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
     9
copy, modify, merge, publish, distribute, sublicense, and/or sell
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    10
copies of the Software, and to permit persons to whom the
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    11
Software is furnished to do so, subject to the following
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    12
conditions:
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    13
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    14
The above copyright notice and this permission notice shall be
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    15
included in all copies or substantial portions of the Software.
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    16
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    17
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    18
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    19
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    20
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    21
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    22
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    23
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    24
OTHER DEALINGS IN THE SOFTWARE.
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
"
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
"{ Package: 'stx:libtool' }"
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"{ NameSpace: Tools }"
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
    30
CodeViewService subclass:#CodeHighlightingService
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
    31
	instanceVariableNames:'job done'
10439
6a41520db1be variable renamed in: #initialize
Claus Gittinger <cg@exept.de>
parents: 10438
diff changeset
    32
	classVariableNames:''
6a41520db1be variable renamed in: #initialize
Claus Gittinger <cg@exept.de>
parents: 10438
diff changeset
    33
	poolDictionaries:''
6a41520db1be variable renamed in: #initialize
Claus Gittinger <cg@exept.de>
parents: 10438
diff changeset
    34
	category:'Interface-CodeView'
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
!
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!CodeHighlightingService class methodsFor:'documentation'!
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
copyright
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
10077
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    41
 COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
10440
ad79e93dc9b7 no need to access BackgroundJob via Smalltalk - the bug
Claus Gittinger <cg@exept.de>
parents: 10439
diff changeset
    42
	      All Rights Reserved
10077
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    43
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    44
Permission is hereby granted, free of charge, to any person
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    45
obtaining a copy of this software and associated documentation
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    46
files (the 'Software'), to deal in the Software without
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    47
restriction, including without limitation the rights to use,
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    48
copy, modify, merge, publish, distribute, sublicense, and/or sell
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    49
copies of the Software, and to permit persons to whom the
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    50
Software is furnished to do so, subject to the following
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    51
conditions:
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
10077
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    53
The above copyright notice and this permission notice shall be
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    54
included in all copies or substantial portions of the Software.
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    55
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    56
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    57
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    58
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    59
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    60
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    61
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    62
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
d2b07a20c425 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9980
diff changeset
    63
OTHER DEALINGS IN THE SOFTWARE.
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
"
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
! !
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!CodeHighlightingService class methodsFor:'accessing'!
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
label
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    "Answers short label - for UI"
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    ^'Syntax Highlighting'
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    "Created: / 07-03-2010 / 14:00:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
! !
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    78
!CodeHighlightingService methodsFor:'accessing'!
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    79
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    80
syntaxHighlighter
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
    81
    | app lang highlighter mthd class |
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    82
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    83
    "First, ask application..."
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    84
    app := codeView application.
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
    85
    mthd := codeView methodHolder value.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
    86
    class := codeView classHolder value.
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    87
    app notNil ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    88
        (mthd notNil and:[app respondsTo: #syntaxHighlighterForMethod:]) ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    89
            highlighter := app syntaxHighlighterForMethod:mthd.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    90
        ] ifFalse:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    91
            (class notNil and:[app respondsTo: #syntaxHighlighterForClass:]) ifTrue:[                        
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    92
                highlighter := app syntaxHighlighterForClass: class.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    93
            ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    94
        ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    95
    ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    96
    "App did not provide any highlighter..."
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    97
    highlighter isNil ifTrue:[        
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
    98
        highlighter := (lang := codeView languageHolder value)
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
    99
                ifNil:[nil]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   100
                ifNotNil:[lang syntaxHighlighterClass].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   101
    ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   102
    "HACK!!!!!!"
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   103
    highlighter == SyntaxHighlighter ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   104
        highlighter := SyntaxHighlighter2
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   105
    ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   106
    ^ highlighter
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   107
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   108
    "Modified: / 05-07-2011 / 11:10:11 / cg"
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   109
    "Created: / 05-08-2011 / 10:48:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   110
!
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   111
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   112
syntaxHighlighters
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   113
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   114
    | highlighters |
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   115
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   116
    highlighters := OrderedCollection new: 4.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   117
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   118
    codeView services do:[:service|
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   119
        | highlighter |
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   120
        highlighter := service syntaxHighlighter.        
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   121
        highlighter notNil ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   122
            "HACK, since AbstractSyntaxHighlighter overwrite
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   123
             emphasis instead of adding it..."
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   124
            (highlighter isKindOf: AbstractSyntaxHighlighter class) ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   125
                highlighters addFirst: highlighter                    
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   126
            ] ifFalse:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   127
                highlighters add: highlighter
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   128
            ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   129
        ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   130
    ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   131
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   132
    ^highlighters
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   133
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   134
    "Created: / 05-08-2011 / 10:49:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   135
! !
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   136
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   137
!CodeHighlightingService methodsFor:'change & update'!
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   138
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   139
update: aspect with: param from: sender
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   141
    sender == textView modifiedChannel ifTrue:[^self codeChanged: false].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   142
    sender == textView model ifTrue:[^self codeChanged: true].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   143
    sender == codeView languageHolder ifTrue:[^self codeChanged: true].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   144
    sender == codeView classHolder ifTrue:[^self codeChanged: true].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   145
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   146
    super update: aspect with: param from: sender
10710
5aa37ab3189e Fixes for syntax highlighting and code navigation. Now it should work fine debugger.
vrany
parents: 10701
diff changeset
   147
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   148
    "Created: / 06-03-2010 / 19:38:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   149
    "Modified: / 05-07-2011 / 10:18:08 / cg"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   150
! !
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   151
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   152
!CodeHighlightingService methodsFor:'initialization'!
10710
5aa37ab3189e Fixes for syntax highlighting and code navigation. Now it should work fine debugger.
vrany
parents: 10701
diff changeset
   153
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   154
initialize
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   155
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   156
    job := (Smalltalk at:#BackgroundJob)
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   157
	    named: 'Syntax Highlighting Job'
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   158
	    on:[self syntaxHighlight: true].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   159
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   160
    "Created: / 29-07-2011 / 10:31:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   161
    "Modified: / 03-08-2011 / 16:47:53 / cg"
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   162
! !
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   163
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
!CodeHighlightingService methodsFor:'private'!
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   166
codeChanged: force
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   167
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   168
    (force or:[codeView textView modified]) ifTrue:
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   169
	[self syntaxHighlight].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   170
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   171
    "Modified: / 29-07-2011 / 11:07:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   172
!
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   173
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   174
setHighlightedCode:newCode elements: elements
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   175
    "the background synhighlighter has generated new colored text,
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   176
     with highlighted syntax.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   177
     If there have been no modifications in the meantime, install it."
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   178
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   179
    |firstShown lastShown cursorWasOn anyChange newLines l replaceAction list|
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   180
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   181
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   182
    textView modified ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   183
	"/ new input arrived in the meantime
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   184
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   185
	^ self
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   186
    ].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   187
    done  ifFalse:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   188
	"/ another coloring process has already been started.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   189
	"/ ignore this (leftover) code.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   190
	^ self
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   191
    ].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   192
    firstShown := textView firstLineShown.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   193
    lastShown := textView lastLineShown.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   194
    replaceAction := [:lNr :line |
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   195
	    |oldLine|
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   196
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   197
	    oldLine := list at:lNr ifAbsent:nil.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   198
	    oldLine notNil ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   199
		line notNil ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   200
		    "/ this check is needed - there is a race
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   201
		    "/ when the text is converted. This detects the
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   202
		    "/ resulting error.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   203
		    "/ Certainly a kludge.
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   205
		    oldLine string = line string ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   206
			oldLine emphasis ~= line emphasis ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   207
			    textView modifiedChannel removeDependent:self.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   208
			    list at:lNr put:line.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   209
			    textView modifiedChannel addDependent:self.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   210
			    (lNr between:firstShown and:lastShown) ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   211
				anyChange ifFalse:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   212
				    anyChange := true.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   213
				    cursorWasOn := textView hideCursor
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   214
				].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   215
				textView redrawLine:lNr
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   216
			    ]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   217
			]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   218
		    ]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   219
		]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   220
	    ]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   221
	].
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   223
    anyChange := false.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   224
    newLines := newCode asStringCollection.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   225
    list := textView list.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   226
    list isNil ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   227
	textView list:newLines.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   228
    ] ifFalse:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   229
	"/ the cursor line first - that's where your eyes are ...
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   230
	(l := textView cursorLine) notNil ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   231
	    l <= newLines size ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   232
		replaceAction value:l value:(newLines at:l)
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   233
	    ]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   234
	].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   235
	newLines keysAndValuesDo:replaceAction.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   236
	anyChange ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   237
	    cursorWasOn ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   238
		textView showCursor
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   239
	    ]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   240
	]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   241
    ].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   242
    codeView syntaxElements: elements
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   243
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   244
    "Modified: / 09-10-2006 / 11:50:17 / cg"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   245
    "Created: / 14-02-2010 / 16:10:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   246
    "Modified (format): / 06-07-2011 / 18:21:12 / cg"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   247
    "Modified: / 29-07-2011 / 11:10:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   248
!
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   249
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   250
showInfo: aString
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   251
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   252
    codeView showInfo: aString
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   253
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   254
    "Created: / 06-03-2010 / 19:34:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   255
!
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   256
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   257
syntaxHighlight
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   258
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   259
    |highlighters prio |
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   260
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   261
    highlighters := self syntaxHighlighters.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   262
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   263
    highlighters isEmptyOrNil ifTrue:[
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   264
        "No higlighter, nothing to do"
10968
5e738ee1cd2a No highlighting by default (either method or language must be set)
vrany
parents: 10961
diff changeset
   265
        ^self
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   266
    ].
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   268
    "/ this clobbers the codeViews modified state; therefore, we have to remember
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   269
    "/ this info somewhere ...
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   270
    codeView browser ifNotNil:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   271
        textView modified ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   272
            codeView browser navigationState realModifiedState: true
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   273
        ].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   274
        textView modifiedChannel setValue:false.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   275
    ].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   276
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   277
    job scheduled ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   278
        job running ifFalse:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   279
            "/ process already created, but did not get a change to start yet;
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   280
            ^ self
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   281
        ] ifTrue:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   282
            job stop.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   283
        ]
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   284
    ].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   285
    prio := Processor userBackgroundPriority - 1.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   286
    textView shown ifFalse:[
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   287
        prio := prio - 1 max:1
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   288
    ].
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   289
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   290
    job startWithPriority: prio.
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   291
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   292
    "Modified: / 07-07-2011 / 12:26:12 / Jan Vrany <jan.vrant@fit.cvut,cz>"
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   293
    "Modified: / 20-07-2011 / 15:14:14 / cg"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   294
    "Created: / 29-07-2011 / 11:07:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   295
!
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   296
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   297
syntaxHighlight: delayed
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   298
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   299
    |oldCode oldCodeList newCode elements cls mthd highlighterClasses|
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   300
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   301
    done := false.
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   302
    codeView syntaxElements: nil.
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   303
    codeView syntaxElementSelection: nil.
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   304
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   305
    highlighterClasses := self syntaxHighlighters.
10149
d390c010293f changed:
Claus Gittinger <cg@exept.de>
parents: 10077
diff changeset
   306
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   307
    cls := codeView klass.
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   308
    (cls notNil and:[cls isObsolete]) ifTrue:[
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   309
        cls isMeta ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   310
            cls := (Smalltalk at:cls theNonMetaclass name) class
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   311
        ] ifFalse:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   312
            cls := Smalltalk at:cls name
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   313
        ].
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   314
    ].
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   315
    mthd := codeView methodHolder value.
10149
d390c010293f changed:
Claus Gittinger <cg@exept.de>
parents: 10077
diff changeset
   316
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   317
    textView modified ifFalse:[
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   318
        oldCodeList := textView list copy.
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   319
        textView modified ifFalse:[
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   320
            oldCodeList isNil ifFalse:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   321
                oldCode := oldCodeList asStringWithoutEmphasis.
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   322
                textView modified ifFalse:[
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   323
                    Screen currentScreenQuerySignal answer:codeView device
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   324
                    do:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   325
                        Parser::ParseError handle:[:ex |
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   326
                            |errMsg|
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   328
                            errMsg := ex description asStringCollection first asString.
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   330
                            "/ Transcript topView raiseDeiconified.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   331
                            "/ Transcript showCR:'ParseError: ', ex description.
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
"/ self halt.
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   333
                            "/ self showInfo:(errMsg colorizeAllWith:Color red).
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   334
                            newCode := nil.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   335
                        ] do:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   336
                            elements := SortedCollection new.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   337
                            newCode := oldCode asText.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   338
                            codeView codeAspect == #method ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   339
                                highlighterClasses do:[:e|newCode := e formatMethod:mthd source:newCode in:cls using: nil elementsInto: elements].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   340
                            ] ifFalse:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   341
                                codeView codeAspect == #expression ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   342
                                    highlighterClasses do:[:e|newCode := e formatExpression:newCode in:cls elementsInto: elements].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   343
                                ] ifFalse:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   344
                                    codeView codeAspect == #classDefinition ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   345
                                        highlighterClasses do:[:e|newCode := e formatClassDefinition:newCode in:cls elementsInto: elements].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   346
                                    ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   347
                                ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   348
                            ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   349
                        ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   350
                    ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   351
                    newCode notNil ifTrue:[
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   352
                        textView modified ifFalse:[
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   353
                            newCode ~= oldCodeList ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   354
                                newCode := newCode asStringCollection.
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   355
                                textView modified ifFalse:[
10486
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   356
                                    done := true.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   357
                                    textView notNil ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   358
                                        "/ must add this event - and not been interrupted
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   359
                                        "/ by any arriving key-event.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   360
                                        "/ self showInfo:nil.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   361
                                        delayed ifTrue:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   362
                                            codeView sensor
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   363
                                                pushUserEvent:#setHighlightedCode:elements:
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   364
                                                for:self
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   365
                                                withArguments:(Array with:newCode with: elements).
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   366
                                                "/self delayedUpdateBufferLabelWithCheckIfModified
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   367
                                        ] ifFalse:[
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   368
                                            textView contents: newCode.
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   369
                                        ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   370
                                    ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   371
                                ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   372
                            ].
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   373
                        ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   374
                    ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   375
                ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   376
            ]
ecf02903122f SmallLint UI improvements
vrany
parents: 10440
diff changeset
   377
        ]
10420
ed96d3da2be7 - CodeHighlightingService refactored to use
vrany
parents: 10410
diff changeset
   378
    ]
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   380
    "Created: / 29-07-2011 / 11:01:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   381
! !
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   383
!CodeHighlightingService methodsFor:'registering'!
10410
0d8eaf28b7a9 Fixes for debugger
vrany
parents: 10353
diff changeset
   384
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   385
registerIn: aCodeView
10410
0d8eaf28b7a9 Fixes for debugger
vrany
parents: 10353
diff changeset
   386
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   387
    super registerIn: aCodeView.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   388
    self syntaxHighlight.
10410
0d8eaf28b7a9 Fixes for debugger
vrany
parents: 10353
diff changeset
   389
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   390
    "Created: / 27-07-2011 / 13:25:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10410
0d8eaf28b7a9 Fixes for debugger
vrany
parents: 10353
diff changeset
   391
! !
0d8eaf28b7a9 Fixes for debugger
vrany
parents: 10353
diff changeset
   392
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
!CodeHighlightingService class methodsFor:'documentation'!
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
10497
aab867178a6f fixes for code highlighting
vrany
parents: 10486
diff changeset
   395
version
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   396
    ^ '$Id: /cvs/stx/stx/libtool/Tools__CodeHighlightingService.st,v 1.17 2011/08/05 12:31:54 vrany Exp $'
10497
aab867178a6f fixes for code highlighting
vrany
parents: 10486
diff changeset
   397
!
aab867178a6f fixes for code highlighting
vrany
parents: 10486
diff changeset
   398
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
version_CVS
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   400
    ^ '§Header: /cvs/stx/stx/libtool/Tools__CodeHighlightingService.st,v 1.17 2011/08/05 12:31:54 vrany Exp §'
9980
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
!
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
cf0d7a8b54e9 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
version_SVN
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   404
    ^ '$Id: Tools__CodeHighlightingService.st 7715 2011-04-10 16:32:58Z vranyj1 $'
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11181
diff changeset
   405
! !