gui/PPTextHighlighter.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 16 Jun 2015 06:45:26 +0100
changeset 489 0ca7a70db0f5
parent 334 1db7e42031c8
permissions -rw-r--r--
Fix in codegen for inlined sequence nodes. For inlined sequence nodes, generate nested ifs rather than sequential code which does not work when inlined. The reason is that #codeReturn: in inline generates instvar assignment, not method return, so in sequential code the next child of a sequence will be probed even if previous failed. If that happends, the whole sequence fail and therefore we must generate nested ifs to correctly handle this w.r.t. inlining.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
334
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/gui' }"
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#PPTextHighlighter
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'parser attributeMapper'
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitGui-Core'
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPTextHighlighter methodsFor:'accessing'!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
attributeMapper 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	"returns a dictionary with keys corresponding to parser names and 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	values corresponding to a collection of TextAttributes"
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	^ attributeMapper
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
attributeMapper: aDictionary 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	attributeMapper := aDictionary
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
parser
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	^ parser
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
parser: aParser
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	parser := aParser
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
! !
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!PPTextHighlighter methodsFor:'initialization'!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
initialize
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	parser := #any asParser.
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	attributeMapper := Dictionary new
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
! !
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!PPTextHighlighter methodsFor:'public'!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
addAttribute: aTextAttribute for: anElementString 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	| attributes |
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	attributes := self attributeMapper at: anElementString ifAbsentPut: [OrderedCollection new].
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	attributes add: aTextAttribute
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
bold: anElementString
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	self addAttribute: TextEmphasis bold for: anElementString
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
color: anElementString with: aColor
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	self addAttribute: (TextColor new color: aColor) for: anElementString
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
highlight: aString
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	| text highlighter |
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	text := aString asText.
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	highlighter := parser transform: [ :p |
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
		attributeMapper at: p name
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
			ifPresent: [ :attributes | 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
				p token ==> [ :token | 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
					attributes do: [:each |
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
						text 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
							addAttribute: each 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
							from: token start 
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
							to: token stop ] ] ]
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
			ifAbsent: [ p ] ].
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
	highlighter parse: text.
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	^ text
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
! !
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
!PPTextHighlighter class methodsFor:'documentation'!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
version
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPTextHighlighter.st,v 1.1 2014-03-04 21:15:00 cg Exp $'
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
!
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
version_CVS
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPTextHighlighter.st,v 1.1 2014-03-04 21:15:00 cg Exp $'
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
! !
1db7e42031c8 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80