class Regexp::Parser
def open_group(token)
def open_group(token) case token.token when :passive exp = Group::Passive.new(token, active_opts) when :atomic exp = Group::Atomic.new(token, active_opts) when :named exp = Group::Named.new(token, active_opts) when :capture exp = Group::Capture.new(token, active_opts) when :absence exp = Group::Absence.new(token, active_opts) when :lookahead exp = Assertion::Lookahead.new(token, active_opts) when :nlookahead exp = Assertion::NegativeLookahead.new(token, active_opts) when :lookbehind exp = Assertion::Lookbehind.new(token, active_opts) when :nlookbehind exp = Assertion::NegativeLookbehind.new(token, active_opts) else raise UnknownTokenError.new('Group type open', token) end # Push the active options to the stack again. This way we can simply pop the # stack for any group we close, no matter if it had its own options or not. options_stack << active_opts nest(exp) end