PPGreedyRepeatingParser.st
changeset 166 749f1a5c6d3e
child 377 6112a403a52d
equal deleted inserted replaced
165:7df471ff9ea5 166:749f1a5c6d3e
       
     1 "{ Package: 'stx:goodies/petitparser' }"
       
     2 
       
     3 PPLimitedRepeatingParser subclass:#PPGreedyRepeatingParser
       
     4 	instanceVariableNames:''
       
     5 	classVariableNames:''
       
     6 	poolDictionaries:''
       
     7 	category:'PetitParser-Parsers'
       
     8 !
       
     9 
       
    10 
       
    11 !PPGreedyRepeatingParser methodsFor:'parsing'!
       
    12 
       
    13 parseOn: aStream
       
    14 	| start element elements positions |
       
    15 	start := aStream position.
       
    16 	elements := OrderedCollection new.
       
    17 	[ elements size < min ] whileTrue: [ 
       
    18 		(element := parser parseOn: aStream) isPetitFailure ifTrue: [ 
       
    19 			aStream position: start.
       
    20 			^ element ].
       
    21 		elements addLast: element ].
       
    22 	positions := OrderedCollection with: aStream position.
       
    23 	[ elements size < max and: [ (element := parser parseOn: aStream) isPetitFailure not ] ] whileTrue: [
       
    24 		elements addLast: element.
       
    25 		positions addLast: aStream position ].
       
    26 	[ positions isEmpty ] whileFalse: [
       
    27 		aStream position: positions last.
       
    28 		element := limit parseOn: aStream.
       
    29 		element isPetitFailure ifFalse: [
       
    30 			aStream position: positions last.
       
    31 			^ elements asArray ].
       
    32 		elements isEmpty ifTrue: [
       
    33 			aStream position: start.
       
    34 			^ element ].
       
    35 		elements removeLast.
       
    36 		positions removeLast ].
       
    37 	aStream position: start.
       
    38 	^ PPFailure message: 'overflow' at: start
       
    39 ! !
       
    40 
       
    41 !PPGreedyRepeatingParser class methodsFor:'documentation'!
       
    42 
       
    43 version
       
    44     ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPGreedyRepeatingParser.st,v 1.1 2014-03-04 14:32:42 cg Exp $'
       
    45 !
       
    46 
       
    47 version_CVS
       
    48     ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPGreedyRepeatingParser.st,v 1.1 2014-03-04 14:32:42 cg Exp $'
       
    49 ! !
       
    50