class TheFox::Range::Lexer::Number

0123456789

Public Class Methods

new(char) click to toggle source
Calls superclass method TheFox::Range::Lexer::Base::new
# File lib/thefox-ext/range/lexer/number.rb, line 7
def initialize(char)
  super()
  # puts '-> Number.initialize(%s)' % [char]
  #@nonce = rand(10 ** 3).to_s.rjust(3, '0')
  @char = char
  @is_ref_item = false
end

Public Instance Methods

append(obj) click to toggle source
# File lib/thefox-ext/range/lexer/number.rb, line 52
def append(obj)
  if obj.is_a?(Number)
    self.append(obj.char)
  else
    @char += obj
  end
end
char() click to toggle source

:nocov:

# File lib/thefox-ext/range/lexer/number.rb, line 41
def char
  @char
end
dup() click to toggle source
Calls superclass method TheFox::Range::Lexer::Base#dup
# File lib/thefox-ext/range/lexer/number.rb, line 31
def dup()
  # puts '-> Number.dup(%s) -> %s %s' % [@char, inspect, self.is_ref_item ? 'Y' : 'n']
  # puts '-> %s.dup' % [inspect]
  o = super()
  o.is_ref_item = self.is_ref_item
  # puts '-> Number.dup(%s) -> %s' % [@char, o.inspect]
  o
end
inc() click to toggle source
# File lib/thefox-ext/range/lexer/number.rb, line 60
def inc()
  f = '%%0%dd' % [@char.length]
  @char = f % [@char.to_i + 1]
end
inspect() click to toggle source

:nocov:

# File lib/thefox-ext/range/lexer/number.rb, line 16
def inspect()
  a = [
    # '#' + @nonce.to_s,
    # 'c' + @char,
    @char,
  ]
  if !@parent_item.nil?
    a.push('^%s' % @parent_item.inspect)
  end
  a.push('IRI=%d' % [@is_ref_item])
  # if @children.length > 0
  #   a.push('v%d' % @children.length)
  # end
  'Number(%s)' % [a.join(' ')]
end
is_ref_item() click to toggle source
# File lib/thefox-ext/range/lexer/number.rb, line 45
def is_ref_item
  @is_ref_item
end
is_ref_item=(is_ref_item) click to toggle source
# File lib/thefox-ext/range/lexer/number.rb, line 48
def is_ref_item=(is_ref_item)
  @is_ref_item = is_ref_item
end
resolve(level = 0) click to toggle source
# File lib/thefox-ext/range/lexer/number.rb, line 65
def resolve(level = 0)
  # puts '-> %s.resolve(%d)' % [self.inspect, @char, level]
  if self.has_parent_item
    if @parent_item.is_a?(Number)
      ('%s%s' % [@parent_item.resolve(level + 1), @char]).to_i
    elsif @parent_item.is_a?(Scope)
      curr_item = @parent_item
      stack = [@char]
      while !curr_item.parent_scope.nil? do
        # puts '-----> CI=%s          RI=%s' % [curr_item.inspect, curr_item.ref_item.inspect]

        if !curr_item.ref_item.nil?
          stack.push(curr_item.ref_item.char)
        end
        curr_item = curr_item.parent_scope
      end

      # pp stack.reverse

      stack.reverse.join.to_i

      # if @char == '5'
      #   2102
      # else
      #   9999
      # end
    elsif @parent_item.is_a?(Interval)
      @char.to_i
    else
      nil
    end
  else
    @char.to_i
  end
end