# HG changeset patch # User Claus Gittinger # Date 1393967700 -3600 # Node ID 1db7e42031c88bc734873c7bc5c93c5b81e576c4 # Parent 2ffae473b494f8592117feeb5b853b774eb9a3c3 initial checkin diff -r 2ffae473b494 -r 1db7e42031c8 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 $' +! ! +