SmallSense__SmalltalkSyntaxHighlighter.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 25 Oct 2017 23:42:41 +0100
changeset 1058 6d4bf422a7dd
parent 921 e5e7de67b496
child 1072 a44c741ee5ef
permissions -rw-r--r--
Fix subscript out of bounds error in Smalltalk inderences ...caused by missing size-check when analysing typed prefix.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
 COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
	      All Rights Reserved
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
Permission is hereby granted, free of charge, to any person
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
obtaining a copy of this software and associated documentation
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
files (the 'Software'), to deal in the Software without
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
restriction, including without limitation the rights to use,
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
copy, modify, merge, publish, distribute, sublicense, and/or sell
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
copies of the Software, and to permit persons to whom the
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
Software is furnished to do so, subject to the following
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
conditions:
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
The above copyright notice and this permission notice shall be
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
included in all copies or substantial portions of the Software.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
OTHER DEALINGS IN THE SOFTWARE.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 171
diff changeset
    26
"{ Package: 'stx:goodies/smallsense' }"
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
"{ NameSpace: SmallSense }"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
SyntaxHighlighter subclass:#SmalltalkSyntaxHighlighter
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
	instanceVariableNames:'elements lastVariableElements lastSelectorElement
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
		ignoreBadIdentifier'
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
	classVariableNames:''
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
	poolDictionaries:''
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
	category:'SmallSense-Smalltalk'
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
!SmalltalkSyntaxHighlighter class methodsFor:'documentation'!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
copyright
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
 COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
	      All Rights Reserved
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
Permission is hereby granted, free of charge, to any person
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
obtaining a copy of this software and associated documentation
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
files (the 'Software'), to deal in the Software without
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
restriction, including without limitation the rights to use,
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
copy, modify, merge, publish, distribute, sublicense, and/or sell
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
copies of the Software, and to permit persons to whom the
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
Software is furnished to do so, subject to the following
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
conditions:
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
The above copyright notice and this permission notice shall be
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
included in all copies or substantial portions of the Software.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
OTHER DEALINGS IN THE SOFTWARE.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
! !
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
!SmalltalkSyntaxHighlighter class methodsFor:'highlighting'!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
format:aString parsingWith:aBlock in:aClass elementsInto:elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    "common code for formatStatementList, formatExpression, ...
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
     format (recolor) whatever is parsed in aBlock (within the context of a given class).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
     Return the text containing font changes and color information.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
     As a side effect, put syntax elements into the passed in elements container
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
     (for element-highlighting in codeView2)"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    |parser tree text endPos|
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    aString isNil ifTrue:[^ nil].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    parser := self for:(ReadStream on:aString string) in:aClass.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    parser elements: elements.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    parser ignoreErrors:true.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    parser ignoreWarnings:true.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    parser sourceText:(text := aString string asText).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    "/ use an array here - this can be changed much faster using #at:put:
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    text emphasisCollection:(Array new:aString size).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    parser nextToken.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    tree := aBlock value:parser.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    "/ now, convert the emphasis-array to a runArray
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    text emphasisCollection:(text emphasis asRunArray).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    tree == #Error ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
        "/ mhmh - which is better ...
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        "/ alternative1: color rest after error in red
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
"/        text 
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
"/            emphasizeFrom:(parser sourceStream position) 
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
"/            to:text size 
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
"/            with:(#color->Color red).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
        "/ alternative2: take original emphasis for rest
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
        endPos := parser sourceStream position + 1.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
        endPos >= text size ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
            ^ text
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
        ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
        ^ ((text copyTo:endPos) , (aString copyFrom:(endPos+1))).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
        "/ alternative3: no emphasis for rest.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
"/        ^ text "/ aString
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    ^ text
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
    "
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
     self
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
        formatStatementList:'(1 + 2) max:5. 1 + 2' 
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
        in:UndefinedObject
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
        elementsInto:(OrderedCollection new).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
    "
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
formatClassDefinition:aString in:aClass elementsInto: elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
    "format (recolor) a class definition expression in a given class.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
     Return the text containing font changes and color information."
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    ^ self formatExpression:aString in:aClass elementsInto: elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    "Created: / 10-04-2011 / 18:18:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
formatExpression:aString in:aClass elementsInto: elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    "format (recolor) an expression in a given class.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
     Return the text containing font changes and color information."
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    |parser tree text endPos|
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    aString isNil ifTrue:[^ nil].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
    parser := self for:(ReadStream on:aString string) in:aClass.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    parser elements: elements.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    parser ignoreErrors:true.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    parser ignoreWarnings:true.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
    parser sourceText:(text := aString string asText).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    "/ use an array here - this can be changed much faster using #at:put:
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    text emphasisCollection:(Array new:aString size).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    parser nextToken.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
    tree := parser "expression"statementList.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    "/ now, convert the emphasis-array to a runArray
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    text emphasisCollection:(text emphasis asRunArray).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
    tree == #Error ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
	"/ mhmh - which is better ...
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
	"/ alternative1: color rest after error in red
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
"/        text
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
"/            emphasizeFrom:(parser sourceStream position)
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
"/            to:text size
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
"/            with:(#color->Color red).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
	"/ alternative2: take original emphasis for rest
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
	endPos := parser sourceStream position1Based.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
	endPos >= text size ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
	    ^ text
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
	].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
	^ ((text copyTo:endPos) , (aString copyFrom:(endPos+1))).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
	"/ alternative3: no emphasis for rest.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
"/        ^ text "/ aString
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
    ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    ^ text
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
    "
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
     self
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
	formatExpression:'(1 + 2) max:5'
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
	in:UndefinedObject
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    "
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    "Created: / 25-07-2010 / 08:56:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
    "Modified: / 25-07-2010 / 10:57:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
formatMethod:aString in:aClass using:preferencesOrNil elementsInto: elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    "format (recolor) a method in a given class.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
     Return the text containing font changes and color information."
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    "/ obsolete interface
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
    ^ self
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
	formatMethod:nil
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
	source:aString
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
	in:aClass
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
	using:preferencesOrNil elementsInto:elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
    "Created: / 25-07-2010 / 08:56:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
    "Modified (comment): / 05-07-2011 / 11:07:50 / cg"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
formatMethod:aMethodOrNil source:aString in:aClass using:preferencesOrNil elementsInto: elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
    "format (recolor) a method in a given class.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
     Return the text containing font changes and color information."
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    |highlighter tree text endPos eColor|
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
    aString isNil ifTrue:[^ nil].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    Error handle:[:ex |
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
        ex creator isHandled ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
            ex reject.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
        ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
        (self parseErrorSignal handles:ex) ifFalse:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
            "Parse error may happen when re-formatting incomplete code while editing"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
            ('SyntaxHighlighter [info]: error during highlight: ' , ex description) infoPrintCR.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
            "/ ex suspendedContext fullPrintAll.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
        ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
        ^ aString
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
    ] do:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
        highlighter := self for:(ReadStream on:aString string) in:aClass.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
        highlighter elements: elements.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
        preferencesOrNil notNil ifTrue:[highlighter preferences:preferencesOrNil].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
        "/ highlighter ignoreErrors:true.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
        highlighter ignoreWarnings:true.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
        highlighter sourceText:(text := aString string asText).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
        "/ use an array here - this can be changed much faster using #at:put:
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
        text emphasisCollection:(Array new:aString size).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
        tree := highlighter parseMethod.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
        "/ now, convert the emphasis-array to a runArray
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
        text emphasisCollection:(text emphasis asRunArray).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
        tree == #Error ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
            eColor := UserPreferences current errorColor.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
            eColor notNil ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
                "/ mhmh - which is better ...
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
                "/ alternative1: color rest after error in red
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
                text
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
                    emphasizeFrom:(highlighter sourceStream position + 1) 
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
                    to:text size
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
                    with:(#color->eColor).
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
            ] ifFalse:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
                "/ alternative2: take original emphasis for rest
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
                endPos := highlighter sourceStream position + 1.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
                endPos >= text size ifTrue:[
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
                    ^ Array with: text with: highlighter elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
                ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
                ^ ((text copyTo:endPos) , (aString copyFrom:(endPos+1)))
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
            ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
            "/ alternative3: no emphasis for rest.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
        ].
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
        ^text
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
    ]
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    "
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
     self
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
        formatMethod:'foo
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    ^ self bar:''hello''.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    ' , (Character doubleQuote asString) , 'some comment' , (Character doubleQuote asString) , '
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
'
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
        in:UndefinedObject
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
    "
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
    "Modified: / 22-08-2006 / 13:32:04 / cg"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
    "Created: / 05-07-2011 / 10:39:21 / cg"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
    "Modified: / 28-05-2013 / 22:45:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
921
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   270
!
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   271
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   272
formatStatements:aString in:aClass elementsInto: elements
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   273
    "format (recolor) a statement list in a given class.
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   274
     Return the text containing font changes and color information."
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   275
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   276
    ^ self 
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   277
        format:aString parsingWith:[:parser | parser parseMethodBody ]
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   278
        in:aClass elementsInto:elements
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   279
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   280
    "
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   281
     self
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   282
        formatStatements:'(1 + 2) max:5. 1 + 2' 
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   283
        in:UndefinedObject
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   284
        elementsInto:(OrderedCollection new).
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   285
    "
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   286
e5e7de67b496 Added support for highlighting of a statement list
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   287
    "Created: / 22-02-2016 / 21:10:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
! !
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
!SmalltalkSyntaxHighlighter methodsFor:'accessing'!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
    ^ elements
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
elements:aParseTreeIndex
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
    "the element collection, to collect variables, selectors etc. into"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
    elements := aParseTreeIndex.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
    "Modified (comment): / 21-08-2011 / 09:13:31 / cg"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
tree: aParseNode
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
    super tree: aParseNode.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
    elements tree: aParseNode
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
    "Created: / 16-02-2012 / 09:56:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
! !
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
!SmalltalkSyntaxHighlighter methodsFor:'initialization'!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
initialize
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
    super initialize.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
    elements := ParseTreeIndex new.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
    lastVariableElements := Dictionary new.
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
    "Created: / 14-02-2010 / 13:08:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
    "Modified: / 21-08-2011 / 09:37:35 / cg"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
    "Modified: / 16-02-2012 / 09:59:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
! !
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
!SmalltalkSyntaxHighlighter methodsFor:'parsing-expressions'!
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
170
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   326
binaryExpressionFor:receiverArg
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   327
    "parse a binary-expression; return a node-tree, nil or #Error"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   328
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   329
    |receiver expr arg sel pos1 pos2 lno|
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   330
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   331
    receiver := receiverArg.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   332
    (receiver == #Error) ifTrue:[^ #Error].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   333
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   334
    "special kludge: since Scanner cannot know if -digit is a binary
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   335
     expression or a negative constant, handle cases here"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   336
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   337
    [(tokenType == #BinaryOperator) 
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   338
     or:[(tokenType == $|)
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   339
     or:[(tokenType == $^ and:[parserFlags allowCaretAsBinop])
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   340
         or:[((tokenType == #Integer) or:[tokenType == #Float])
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   341
             and:[tokenValue < 0]]]]
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   342
    ] whileTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   343
        "/ kludge alarm: in a function-call argList, #, is not a binarySelector
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   344
        inFunctionCallArgument == true ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   345
            ((tokenType == #BinaryOperator) and:[tokenName = ',']) ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   346
                ^ receiver
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   347
            ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   348
        ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   349
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   350
        pos1 := tokenPosition.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   351
        lno := tokenLineNr.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   352
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   353
        "/ kludge alarm: bar, caret and minus are not scanned as binop
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   354
        (tokenType == $|) ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   355
            sel := '|'.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   356
            sel := self selectorCheck:sel for:receiver position:tokenPosition to:tokenPosition.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   357
            self nextToken.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   358
        ] ifFalse:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   359
            (tokenType == $^) ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   360
                sel := '^'.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   361
                sel := self selectorCheck:sel for:receiver position:tokenPosition to:tokenPosition.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   362
                self nextToken.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   363
            ] ifFalse:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   364
                (tokenType == #BinaryOperator) ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   365
                    sel := tokenName.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   366
                    sel := self selectorCheck:sel for:receiver position:tokenPosition to:(tokenPosition + tokenName size - 1).
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   367
                    self nextToken
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   368
                ] ifFalse:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   369
                    sel := '-'.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   370
                    token := tokenValue := tokenValue negated.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   371
                    tokenPosition := tokenPosition + 1. "/ to skip the sign
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   372
                ]
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   373
            ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   374
        ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   375
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   376
        pos2 := pos1 + sel size - 1.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   377
        self markSelector:sel from:pos1 to:pos2 receiverNode:receiver.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   378
        lastSelectorElement := nil.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   379
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   380
        arg := self unaryExpression.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   381
        (arg == #Error) ifTrue:[^ #Error].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   382
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   383
        expr := BinaryNode receiver:receiver selector:sel arg:arg fold:foldConstants.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   384
        expr isErrorNode ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   385
            self parseError:(expr errorString) position:pos1 to:tokenPosition.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   386
            errorFlag := false. "ok, user wants it - so he'll get it"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   387
            expr := BinaryNode receiver:receiver selector:sel arg:arg fold:nil.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   388
        ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   389
        expr lineNumber:lno.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   390
        expr selectorPosition:pos1.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   391
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   392
        self checkPlausibilityOf:expr from:pos1 to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   393
        receiver := expr.   "/ for next message
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   394
    ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   395
    ^ receiver
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   396
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   397
    "Modified: / 09-01-1998 / 19:05:18 / stefan"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   398
    "Modified: / 14-02-2010 / 17:54:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   399
    "Modified: / 19-01-2012 / 10:46:49 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   400
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   401
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   402
expression
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   403
    | node savedLastSelectorElement |
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   404
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   405
    savedLastSelectorElement := lastSelectorElement.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   406
    lastSelectorElement := nil.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   407
    node := super expression.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   408
    ((node ~~ #Error) and:[node isMessage]) ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   409
        [ lastSelectorElement notNil ] whileTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   410
            lastSelectorElement node parent: node.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   411
            lastSelectorElement := lastSelectorElement prev.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   412
        ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   413
    ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   414
    lastSelectorElement := savedLastSelectorElement.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   415
    ^node
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   416
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   417
    "Modified: / 19-01-2000 / 16:22:16 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   418
    "Modified: / 16-02-2012 / 23:39:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   419
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   420
100
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   421
primary_identifier
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   422
    | node |
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   423
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   424
    ignoreBadIdentifier := classToCompileFor isNil.
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   425
    node := super primary_identifier.
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   426
    ignoreBadIdentifier := false.
113
2a6e9aaef00f Bugfix in SmallSense::SmalltalkSyntaxHighlighter>>#primary_identifier
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   427
    (node ~~ #Error and:[node isVariable]) ifTrue:[
100
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   428
        | el prevEl |
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   429
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   430
        el := elements newElementFor: node.
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   431
        prevEl := lastVariableElements at:node name ifAbsent:[nil].
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   432
        prevEl notNil ifTrue:[prevEl next:el].
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   433
        lastVariableElements at:node name put:el.
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   434
        elements add: el.
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   435
    ].
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   436
    ^node
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   437
6d2fb43e661b Initial support for complete-as-you-type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   438
    "Created: / 24-09-2013 / 00:42:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
113
2a6e9aaef00f Bugfix in SmallSense::SmalltalkSyntaxHighlighter>>#primary_identifier
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   439
    "Modified: / 01-10-2013 / 14:43:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
170
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   440
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   441
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   442
unaryExpressionFor:receiverArg
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   443
    "parse a unary-expression; return a node-tree, nil or #Error"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   444
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   445
    |receiver expr sel pos pos2 lNr arguments savedLastSelectorElement|
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   446
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   447
    savedLastSelectorElement := lastSelectorElement.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   448
    receiver := receiverArg.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   449
    (receiver == #Error) ifTrue:[^ #Error].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   450
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   451
    [ self isValidUnarySelector:tokenType ] whileTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   452
	pos := tokenPosition.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   453
	pos2 := pos + tokenName size - 1.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   454
	lNr := tokenLineNr.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   455
	sel := tokenName.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   456
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   457
	lastSelectorElement := nil.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   458
	self markSelector:sel from:pos to:pos2 receiverNode:receiver.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   459
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   460
	self nextToken.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   461
	tokenType == $( ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   462
	    parserFlags allowSqueakExtensions == true ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   463
		"/ croquet/squeak extension - c/java-style arguments
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   464
		arguments := self functionCallArgList.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   465
		"/ synthetic selector: foo[:[with:[with:[...]]]]
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   466
		arguments notEmpty ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   467
		    sel := sel , ':'.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   468
		    arguments size - 1 timesRepeat:[ sel := sel , 'with:' ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   469
		].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   470
		sel := self selectorCheck:sel for:receiver position:pos to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   471
		expr := MessageNode receiver:receiver selector:sel args:arguments fold:foldConstants.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   472
		expr isErrorNode ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   473
		    self parseError:(expr errorString) position:pos to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   474
		    errorFlag := false. "ok, user wants it - so he'll get it"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   475
		    expr := MessageNode receiver:receiver selector:sel args:arguments fold:nil.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   476
		].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   477
		lastSelectorElement node parent: expr.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   478
		expr lineNumber:lNr.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   479
		self checkPlausibilityOf:expr from:pos to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   480
		parseForCode ifFalse:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   481
		    self rememberSelectorUsed:sel receiver:receiver
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   482
		].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   483
		^ expr.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   484
	    ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   485
	].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   486
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   487
	sel := self selectorCheck:sel for:receiver position:pos to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   488
	expr := UnaryNode receiver:receiver selector:sel fold:foldConstants.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   489
	expr isErrorNode ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   490
	    self warning:(expr errorString , '.\\If you proceed, that error will happen at runtime.') withCRs position:pos to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   491
	    errorFlag := false. "ok, user wants it - so he'll get it"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   492
	    expr := UnaryNode receiver:receiver selector:sel fold:nil.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   493
	].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   494
	expr lineNumber:lNr.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   495
	lastSelectorElement node parent: expr.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   496
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   497
	self checkPlausibilityOf:expr from:pos to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   498
	parseForCode ifFalse:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   499
	    self rememberSelectorUsed:sel receiver:receiver
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   500
	].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   501
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   502
	receiver := expr.   "/ for next message
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   503
    ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   504
    lastSelectorElement := savedLastSelectorElement.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   505
    ^ receiver
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   506
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   507
    "Modified: / 19-01-2012 / 10:47:37 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   508
    "Created: / 16-02-2012 / 23:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
! !
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
170
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   511
!SmalltalkSyntaxHighlighter methodsFor:'syntax detection'!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   512
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   513
markLocalVariableDeclaration: name from:pos1 to:pos2
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   514
    | type node |
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   515
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   516
    super markLocalVariableDeclaration: name from:pos1 to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   517
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   518
    type := currentBlock notNil ifTrue:[#BlockVariable] ifFalse:[#MethodVariable].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   519
    node := VariableNode type: type name: name.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   520
    node startPosition: pos1 endPosition: pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   521
    self rememberVariableElementFor: node from: pos1 to: pos2 assigned: false.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   522
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   523
    "Created: / 25-02-2014 / 20:22:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   524
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   525
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   526
markMethodArgumentIdentifierFrom:pos1 to:pos2
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   527
    | node |
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   528
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   529
    super markMethodArgumentIdentifierFrom:pos1 to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   530
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   531
    node := VariableNode methodArgumentNamed:(sourceText string copyFrom: pos1 to: pos2).
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   532
    node startPosition: pos1 endPosition: pos2.    
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   533
    self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   534
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   535
    "Created: / 24-07-2010 / 09:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   536
    "Modified: / 21-08-2011 / 09:27:26 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   537
    "Modified: / 25-02-2014 / 12:15:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   538
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   539
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   540
markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   541
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   542
    | element selectorSymbol |
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   543
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   544
    "Special hack for Java class references - I would like to have them
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   545
     marked specially (and not as an error when the class is not yet loaded -
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   546
     the code is correct as JavaClassAccessor loads it lazily"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   547
    (aReceiverNode isJavaPackageReference) ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   548
	self
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   549
	    markFrom:pos1 to:pos2
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   550
	    withEmphasis:preferences globalClassIdentifierEmphasis
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   551
	    color: preferences globalClassIdentifierColor
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   552
    ] ifFalse:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   553
	super markSelector:selectorString from:pos1 to:pos2 receiverNode:aReceiverNode.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   554
    ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   555
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   556
    "don't create symbols for partial typed selectors"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   557
    selectorSymbol := selectorString asSymbolIfInterned.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   558
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   559
    element := elements newElementFor: (SelectorNode value: selectorString from: pos1 to: pos2).
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   560
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   561
    (lastSelectorElement notNil "and:[lastSelectorElement value = selectorString]") ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   562
	lastSelectorElement next: element.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   563
    ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   564
    elements add: element.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   565
    lastSelectorElement := "(self isValidUnarySelector:tokenType)"false
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   566
				ifTrue:[nil]
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   567
				ifFalse:[element].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   568
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   569
    "Created: / 14-02-2010 / 17:40:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   570
    "Modified: / 14-02-2010 / 19:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   571
    "Modified (format): / 21-08-2011 / 09:18:21 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   572
    "Modified: / 19-04-2012 / 09:53:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   573
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   574
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   575
markSelfFrom:pos1 to:pos2
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   576
    | node |
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   577
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   578
    super markSelfFrom:pos1 to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   579
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   580
    node := SelfNode new.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   581
    node startPosition: pos1 endPosition: pos2.  
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   582
    node type: #Self.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   583
    self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   584
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   585
    "Created: / 21-08-2011 / 09:15:45 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   586
    "Modified: / 25-02-2014 / 21:56:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   587
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   588
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   589
markSuperFrom:pos1 to:pos2
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   590
    | node |
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   591
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   592
    super markSuperFrom:pos1 to:pos2.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   593
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   594
    node := SuperNode new.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   595
    node startPosition: pos1 endPosition: pos2.  
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   596
    node type: #Super.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   597
    self rememberVariableElementFor: node from:pos1 to:pos2 assigned:false
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   598
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   599
    "Created: / 25-02-2014 / 21:57:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   600
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   601
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   602
markUnknownIdentifierFrom:pos1 to:pos2
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   603
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   604
    ignoreBadIdentifier == true ifTrue:[ ^ self ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   605
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   606
    super markUnknownIdentifierFrom:pos1 to:pos2
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   607
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   608
    "Created: / 31.3.1998 / 19:09:26 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   609
    "Modified: / 31.3.1998 / 19:10:30 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   610
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   611
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   612
markVariable:v from:pos1 to:pos2 assigned:assigned
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   613
    self rememberVariableElementFor:v from:pos1 to:pos2 assigned:assigned.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   614
    super markVariable:v from:pos1 to:pos2 assigned:assigned.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   615
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   616
    "Created: / 25-06-2010 / 13:03:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   617
    "Modified: / 21-08-2011 / 09:26:30 / cg"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   618
    "Modified: / 25-02-2014 / 14:07:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   619
!
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   620
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   621
rememberVariableElementFor:node from:pos1 to:pos2 assigned:assigned
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   622
    |name typeSymbol element prev|
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   623
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   624
    name := node name.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   625
    typeSymbol := node type.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   626
    prev := (lastVariableElements at:typeSymbol ifAbsentPut:[Dictionary new]) at:name ifAbsent:[nil].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   627
    (prev notNil and:[prev start == pos1]) ifTrue:[
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   628
"/        prev assigned:assigned.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   629
        ^ self
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   630
    ].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   631
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   632
    element := elements newElementFor: node.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   633
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   634
    prev notNil ifTrue:[prev next:element].
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   635
    (lastVariableElements at:typeSymbol) at:name put:element.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   636
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   637
    elements add: element.
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   638
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   639
    "Created: / 25-02-2014 / 12:13:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9feebce80704 Oops, methods move to proper package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
   640
! !
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
110
5ee9a90dbed5 Bug/UX fixes for autocomplete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   642
!SmalltalkSyntaxHighlighter class methodsFor:'documentation'!
5ee9a90dbed5 Bug/UX fixes for autocomplete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   643
5ee9a90dbed5 Bug/UX fixes for autocomplete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   644
version_HG
5ee9a90dbed5 Bug/UX fixes for autocomplete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   645
5ee9a90dbed5 Bug/UX fixes for autocomplete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   646
    ^ '$Changeset: <not expanded> $'
5ee9a90dbed5 Bug/UX fixes for autocomplete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   647
! !
5ee9a90dbed5 Bug/UX fixes for autocomplete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   648