Sha256: cc8fb8213868594836c3c2acd0d0b431ed366f28294e36701d1ed8f442dfd88e
Contents?: true
Size: 1.96 KB
Versions: 3
Compression:
Stored size: 1.96 KB
Contents
module Regexp::Expression # TODO: unify name with token :backref, one way or the other, in v3.0.0 module Backreference class Base < Regexp::Expression::Base attr_accessor :referenced_expression def initialize_copy(orig) exp_id = [self.class, self.starts_at] # prevent infinite recursion for recursive subexp calls copied = @@copied ||= {} self.referenced_expression = if copied[exp_id] orig.referenced_expression else copied[exp_id] = true orig.referenced_expression.dup end copied.clear super end def referential? true end end class Number < Backreference::Base attr_reader :number alias reference number def initialize(token, options = {}) @number = token.text[token.token.equal?(:number) ? 1..-1 : 3..-2].to_i super end end class Name < Backreference::Base attr_reader :name alias reference name def initialize(token, options = {}) @name = token.text[3..-2] super end end class NumberRelative < Backreference::Number attr_accessor :effective_number alias reference effective_number end class NumberCall < Backreference::Number; end class NameCall < Backreference::Name; end class NumberCallRelative < Backreference::NumberRelative; end class NumberRecursionLevel < Backreference::NumberRelative attr_reader :recursion_level def initialize(token, options = {}) super @number, @recursion_level = token.text[3..-2].split(/(?=[+-])/).map(&:to_i) end end class NameRecursionLevel < Backreference::Name attr_reader :recursion_level def initialize(token, options = {}) super @name, recursion_level = token.text[3..-2].split(/(?=[+-])/) @recursion_level = recursion_level.to_i end end end end
Version data entries
3 entries across 3 versions & 3 rubygems