Imagine we want to parse
!Section Title
- list item
-- subitem
Any text here
canParse:
)newFromLine:
)
Parser >> documentClasses
^ DocumentItem allSubclasses
sorted: [ :class1 :class2 | class1 priority < class2 priority ]
Parser >> parse: line
self documentClasses
detect: [ :subclass |
(subclass canParse: aLine)
ifTrue: [ ^ subclass newFromLine: line ] ]
CommandLineHandler
knows how to deal with one command$ pharo Pharo.image eval "10 factorial"
3628800
CommandLineHandler class >> isResponsibleFor: arguments
^ arguments includesSubCommand: self commandName
EvaluateCommandLineHandler class >> commandName
^ 'eval'
CommandLineHandler class >> allHandlers
^ self allSubclasses
reject: [ :handler| handler isAbstract ]
CommandLineHandler class >> handlersFor: arguments
^ self allHandlers
select: [ :handlerClass |
handlerClass isResponsibleFor: arguments ]
/