PPTrimmingParser.st
changeset 0 739fe9b7253e
child 4 90de244a7fa2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PPTrimmingParser.st	Thu Aug 18 20:56:17 2011 +0200
@@ -0,0 +1,57 @@
+"{ Package: 'squeak:petitparser' }"
+
+PPDelegateParser subclass:#PPTrimmingParser
+	instanceVariableNames:'trimmer'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitParser-Parsers'
+!
+
+PPTrimmingParser comment:'A parser that silently consumes spaces before and after the delegate parser.'
+!
+
+
+!PPTrimmingParser class methodsFor:'instance creation'!
+
+on: aParser trimmer: aTrimParser
+	^ self new
+		setParser: aParser;
+		setTrimmer: aTrimParser;
+		yourself
+! !
+
+!PPTrimmingParser methodsFor:'initialization'!
+
+setTrimmer: aParser
+	trimmer := aParser
+! !
+
+!PPTrimmingParser methodsFor:'operations'!
+
+trim
+	"There is no point in trimming more than once."
+
+	^ self
+! !
+
+!PPTrimmingParser methodsFor:'parsing'!
+
+parseOn: aStream
+	| position element |
+	position := aStream position.
+	[ (trimmer parseOn: aStream) isPetitFailure ]
+		whileFalse.
+	element := parser parseOn: aStream.
+	element isPetitFailure ifTrue: [
+		aStream position: position.
+		^ element ].
+	[ (trimmer parseOn: aStream) isPetitFailure ]
+		whileFalse.
+	^ element
+! !
+
+!PPTrimmingParser class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id: PPTrimmingParser.st,v 1.1 2011-08-18 18:56:17 cg Exp $'
+! !