27 lines
496 B
Ruby
27 lines
496 B
Ruby
# Starts a new scope in the parsing process. Please also see the #captures
|
|
# method.
|
|
#
|
|
class Parslet::Atoms::Scope < Parslet::Atoms::Base
|
|
attr_reader :block
|
|
def initialize(block)
|
|
super()
|
|
|
|
@block = block
|
|
end
|
|
|
|
def cached?
|
|
false
|
|
end
|
|
|
|
def apply(source, context, consume_all)
|
|
context.scope do
|
|
parslet = block.call
|
|
return parslet.apply(source, context, consume_all)
|
|
end
|
|
end
|
|
|
|
def to_s_inner(prec)
|
|
"scope { #{block.call.to_s(prec)} }"
|
|
end
|
|
end
|