--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PPPredicateSequenceParser.st Thu Aug 18 20:56:17 2011 +0200
@@ -0,0 +1,71 @@
+"{ Package: 'squeak:petitparser' }"
+
+PPPredicateParser subclass:#PPPredicateSequenceParser
+ instanceVariableNames:'size'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitParser-Parsers'
+!
+
+PPPredicateSequenceParser comment:'A parser that accepts if a given predicate on an arbitrary number of elements of the input sequence holds.
+Instance Variables:
+ size <Integer> The number of elements to consume.'
+!
+
+
+!PPPredicateSequenceParser class methodsFor:'instance creation'!
+
+on: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger
+ ^ self new initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger
+!
+
+on: aBlock message: aString size: anInteger
+ ^ self on: aBlock message: aString negated: [ :each | (aBlock value: each) not ] message: 'no ' , aString size: anInteger
+! !
+
+!PPPredicateSequenceParser methodsFor:'accessing'!
+
+size
+ "Answer the sequence size of the receiver."
+
+ ^ size
+! !
+
+!PPPredicateSequenceParser methodsFor:'initialization'!
+
+initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger
+ predicate := aBlock.
+ predicateMessage := aString.
+ negated := aNegatedBlock.
+ negatedMessage := aNegatedString.
+ size := anInteger
+! !
+
+!PPPredicateSequenceParser methodsFor:'operators'!
+
+negate
+ "Answer a parser that is the negation of the receiving predicate parser."
+
+ ^ self class
+ on: negated message: negatedMessage
+ negated: predicate message: predicateMessage
+ size: size
+! !
+
+!PPPredicateSequenceParser methodsFor:'parsing'!
+
+parseOn: aStream
+ | position result |
+ position := aStream position.
+ result := aStream next: size.
+ (result size = size and: [ predicate value: result ])
+ ifTrue: [ ^ result ].
+ aStream position: position.
+ ^ PPFailure message: predicateMessage at: aStream position
+! !
+
+!PPPredicateSequenceParser class methodsFor:'documentation'!
+
+version_SVN
+ ^ '$Id: PPPredicateSequenceParser.st,v 1.1 2011-08-18 18:56:17 cg Exp $'
+! !