PetitCommonMark/software/PetitMarkdown/PPReplaceParser.class.st

61 lines
1.3 KiB
Smalltalk

"
Replaces replacee with the replacement and evaluates its child.The replacee is restored after the child is evaluated.
WARNING: IMO does not work with memoization
"
Class {
#name : 'PPReplaceParser',
#superclass : 'PPDelegateParser',
#instVars : [
'replacee',
'replacement'
],
#category : 'PetitMarkdown-Parser'
}
{ #category : 'as yet unclassified' }
PPReplaceParser >> children [
^ Array with: parser with: replacee with: replacement
]
{ #category : 'as yet unclassified' }
PPReplaceParser >> parseOn: aPPContext [
| tmp retval |
self assert: (replacee isKindOf: PPDelegateParser).
tmp := replacee children first.
replacee setParser: replacement.
retval := parser parseOn: aPPContext.
replacee setParser: tmp.
^ retval
]
{ #category : 'as yet unclassified' }
PPReplaceParser >> replace: aParser with: anotherParser [
super replace: aParser with: anotherParser.
(replacee == aParser) ifTrue: [ replacee := anotherParser ].
(replacement == aParser) ifTrue: [ replacement := anotherParser ].
]
{ #category : 'accessing' }
PPReplaceParser >> replacee [
^ replacee
]
{ #category : 'accessing' }
PPReplaceParser >> replacee: anObject [
replacee := anObject
]
{ #category : 'accessing' }
PPReplaceParser >> replacement [
^ replacement
]
{ #category : 'accessing' }
PPReplaceParser >> replacement: anObject [
replacement := anObject
]