"{ Package: 'stx:goodies/petitparser' }"
PPLimitedRepeatingParser subclass:#PPGreedyRepeatingParser
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'PetitParser-Parsers'
!
!PPGreedyRepeatingParser methodsFor:'parsing'!
parseOn: aStream
| start element elements positions |
start := aStream position.
elements := OrderedCollection new.
[ elements size < min ] whileTrue: [
(element := parser parseOn: aStream) isPetitFailure ifTrue: [
aStream position: start.
^ element ].
elements addLast: element ].
positions := OrderedCollection with: aStream position.
[ elements size < max and: [ (element := parser parseOn: aStream) isPetitFailure not ] ] whileTrue: [
elements addLast: element.
positions addLast: aStream position ].
[ positions isEmpty ] whileFalse: [
aStream position: positions last.
element := limit parseOn: aStream.
element isPetitFailure ifFalse: [
aStream position: positions last.
^ elements asArray ].
elements isEmpty ifTrue: [
aStream position: start.
^ element ].
elements removeLast.
positions removeLast ].
aStream position: start.
^ PPFailure message: 'overflow' at: start
! !
!PPGreedyRepeatingParser class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPGreedyRepeatingParser.st,v 1.1 2014-03-04 14:32:42 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPGreedyRepeatingParser.st,v 1.1 2014-03-04 14:32:42 cg Exp $'
! !