gui/PPTextHighlighter.st
author Claus Gittinger <cg@exept.de>
Tue, 04 Mar 2014 22:15:00 +0100
changeset 334 1db7e42031c8
permissions -rw-r--r--
initial checkin
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