initial checkin
authorClaus Gittinger <cg@exept.de>
Tue, 04 Mar 2014 22:15:00 +0100
changeset 334 1db7e42031c8
parent 333 2ffae473b494
child 335 30d654399277
initial checkin
gui/PPTextHighlighter.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui/PPTextHighlighter.st	Tue Mar 04 22:15:00 2014 +0100
@@ -0,0 +1,80 @@
+"{ Package: 'stx:goodies/petitparser/gui' }"
+
+Object subclass:#PPTextHighlighter
+	instanceVariableNames:'parser attributeMapper'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitGui-Core'
+!
+
+
+!PPTextHighlighter methodsFor:'accessing'!
+
+attributeMapper 
+	"returns a dictionary with keys corresponding to parser names and 
+	values corresponding to a collection of TextAttributes"
+	^ attributeMapper
+!
+
+attributeMapper: aDictionary 
+	attributeMapper := aDictionary
+!
+
+parser
+	^ parser
+!
+
+parser: aParser
+	parser := aParser
+! !
+
+!PPTextHighlighter methodsFor:'initialization'!
+
+initialize
+	parser := #any asParser.
+	attributeMapper := Dictionary new
+! !
+
+!PPTextHighlighter methodsFor:'public'!
+
+addAttribute: aTextAttribute for: anElementString 
+	| attributes |
+	attributes := self attributeMapper at: anElementString ifAbsentPut: [OrderedCollection new].
+	attributes add: aTextAttribute
+!
+
+bold: anElementString
+	self addAttribute: TextEmphasis bold for: anElementString
+!
+
+color: anElementString with: aColor
+	self addAttribute: (TextColor new color: aColor) for: anElementString
+!
+
+highlight: aString
+	| text highlighter |
+	text := aString asText.
+	highlighter := parser transform: [ :p |
+		attributeMapper at: p name
+			ifPresent: [ :attributes | 
+				p token ==> [ :token | 
+					attributes do: [:each |
+						text 
+							addAttribute: each 
+							from: token start 
+							to: token stop ] ] ]
+			ifAbsent: [ p ] ].
+	highlighter parse: text.
+	^ text
+! !
+
+!PPTextHighlighter class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPTextHighlighter.st,v 1.1 2014-03-04 21:15:00 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPTextHighlighter.st,v 1.1 2014-03-04 21:15:00 cg Exp $'
+! !
+