# class RDoc::Parser::RipperStateLex::InnerStateLex

### Attributes

lex_state[RW]

### Public Class Methods

new(code) click to toggle source
Calls superclass method `Ripper::Filter::new`

    # File lib/rdoc/parser/ripper_state_lex.rb, line 32
    def initialize(code)
      @lex_state = EXPR_BEG
      @in_fname = false
      @continue = false
      reset
      super(code)
    end

### Public Instance Methods

on_CHAR(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 148
    def on_CHAR(tok, data)
      @lex_state = EXPR_END
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_backref(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 223
    def on_backref(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

on_comma(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 274
    def on_comma(tok, data)
      @lex_state = EXPR_BEG | EXPR_LABEL if (EXPR_ARG_ANY & @lex_state) != 0
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_comment(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 279
    def on_comment(tok, data)
      @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_const(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 258
    def on_const(tok, data)
      case @lex_state
      when EXPR_FNAME
        @lex_state = EXPR_ENDFN
      when EXPR_CLASS, EXPR_CMDARG, EXPR_MID
        @lex_state = EXPR_ARG
      else
        @lex_state = EXPR_CMDARG
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_cvar(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 213
    def on_cvar(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

on_default(event, tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 301
    def on_default(event, tok, data)
      reset
      data << Token.new(lineno, column, event, tok, @lex_state)
    end

on_float(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 163
    def on_float(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_gvar(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 218
    def on_gvar(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

on_heredoc_beg(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 289
    def on_heredoc_beg(tok, data)
      data << Token.new(lineno, column, __method__, tok, @lex_state)
      @lex_state = EXPR_END
      data
    end

on_heredoc_end(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 295
    def on_heredoc_end(tok, data)
      data << Token.new(lineno, column, __method__, tok, @lex_state)
      @lex_state = EXPR_BEG
      data
    end

on_ident(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 204
    def on_ident(tok, data)
      on_variables(__method__, tok, data)
    end

on_ignored_nl(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 56
    def on_ignored_nl(tok, data)
      case @lex_state
      when EXPR_FNAME, EXPR_DOT
        @continue = true
      else
        @continue = false
        @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_ignored_sp(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 284
    def on_ignored_sp(tok, data)
      @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_imaginary(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 173
    def on_imaginary(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_int(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 158
    def on_int(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_ivar(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 208
    def on_ivar(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

on_kw(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 109
    def on_kw(tok, data)
      case tok
      when 'class'
        @lex_state = EXPR_CLASS
        @in_fname = true
      when 'def'
        @lex_state = EXPR_FNAME
        @continue = true
        @in_fname = true
      when 'if', 'unless', 'while', 'until'
        if ((EXPR_MID | EXPR_END | EXPR_ENDARG | EXPR_ENDFN | EXPR_ARG | EXPR_CMDARG) & @lex_state) != 0 # postfix if
          @lex_state = EXPR_BEG | EXPR_LABEL
        else
          @lex_state = EXPR_BEG
        end
      when 'begin', 'case', 'when'
        @lex_state = EXPR_BEG
      when 'return', 'break'
        @lex_state = EXPR_MID
      else
        if @lex_state == EXPR_FNAME
          @lex_state = EXPR_END
        else
          @lex_state = EXPR_END
        end
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_lbrace(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 238
    def on_lbrace(tok, data)
      @lex_state = EXPR_LABEL | EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_lbracket(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 248
    def on_lbracket(tok, data)
      @lex_state = EXPR_LABEL | EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_lparen(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 228
    def on_lparen(tok, data)
      @lex_state = EXPR_LABEL | EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_nl(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 45
    def on_nl(tok, data)
      case @lex_state
      when EXPR_FNAME, EXPR_DOT
        @continue = true
      else
        @continue = false
        @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_op(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 67
    def on_op(tok, data)
      case tok
      when '&', '|', '!', '!=', '!~'
        case @lex_state
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      when '<<'
        # TODO next token?
        case @lex_state
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      when '?'
        @lex_state = EXPR_BEG
      when '&&', '||', '+=', '-=', '*=', '**=',
           '&=', '|=', '^=', '<<=', '>>=', '||=', '&&='
        @lex_state = EXPR_BEG
      when '::'
        case @lex_state
        when EXPR_ARG, EXPR_CMDARG
          @lex_state = EXPR_DOT
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      else
        case @lex_state
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_period(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 153
    def on_period(tok, data)
      @lex_state = EXPR_DOT
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_rational(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 168
    def on_rational(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_rbrace(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 243
    def on_rbrace(tok, data)
      @lex_state = EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_rbracket(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 253
    def on_rbracket(tok, data)
      @lex_state = EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_rparen(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 233
    def on_rparen(tok, data)
      @lex_state = EXPR_ENDFN
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_sp(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 270
    def on_sp(tok, data)
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_symbeg(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 178
    def on_symbeg(tok, data)
      @lex_state = EXPR_FNAME
      @continue = true
      @in_fname = true
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_tstring_beg(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 138
    def on_tstring_beg(tok, data)
      @lex_state = EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

on_tstring_end(tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 143
    def on_tstring_end(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

reset() click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 40
    def reset
      @command_start = false
      @cmd_state = @command_start
    end

### Private Instance Methods

on_variables(event, tok, data) click to toggle source

    # File lib/rdoc/parser/ripper_state_lex.rb, line 185
            def on_variables(event, tok, data)
      if @in_fname
        @lex_state = EXPR_ENDFN
        @in_fname = false
        @continue = false
      elsif @continue
        case @lex_state
        when EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_ENDFN
          @continue = false
        end
      else
        @lex_state = EXPR_CMDARG
      end
      data << Token.new(lineno, column, event, tok, @lex_state)
    end