PetitCommonMark/software/PetitParser/PPConditionalParser.class.st

36 lines
980 B
Smalltalk

"
A PPConditionalParser is a delegate parser that evaluates a block and if that returns true, the delegate parser is invoked and its result returned. If the block evaluates to false, the PPFailure is returned.
The block accepts one argument, context.
E.g.
('a' asParser if: [ :ctx | (ctx propertyAt: #myProperty) isNotNil ]) parse: 'a'
"
Class {
#name : 'PPConditionalParser',
#superclass : 'PPDelegateParser',
#instVars : [
'block'
],
#category : 'PetitParser-Parsers'
}
{ #category : 'instance creation' }
PPConditionalParser class >> on: aPPParser block: block [
^ (PPConditionalParser on: aPPParser)
block: block;
yourself
]
{ #category : 'accessing' }
PPConditionalParser >> block: aBlock [
block := aBlock
]
{ #category : 'parsing' }
PPConditionalParser >> parseOn: aPPContext [
^ (block value: aPPContext)
ifTrue: [ parser parseOn: aPPContext ]
ifFalse: [ PPFailure message: block asString, ' was not evaluated to true.' context: aPPContext ]
]