module BioVcf::VcfHeaderParser::RagelKeyValues

Attributes

_simple_lexer_actions[RW]
_simple_lexer_eof_actions[RW]
_simple_lexer_index_offsets[RW]
_simple_lexer_key_offsets[RW]
_simple_lexer_range_lengths[RW]
_simple_lexer_single_lengths[RW]
_simple_lexer_trans_actions[RW]
_simple_lexer_trans_keys[RW]
_simple_lexer_trans_targs[RW]
simple_lexer_en_main[RW]
simple_lexer_error[RW]
simple_lexer_first_final[RW]
simple_lexer_start[RW]

Public Class Methods

debug(msg) click to toggle source
# File lib/bio-vcf/vcfheader_line.rb, line 25
def self.debug msg
  # nothing
  # $stderr.print "DEBUG: ",msg,"\n"
end
run_lexer(buf, options = {}) click to toggle source

line 79 “gen_vcfheaderline_parser.rl” %% this just fixes syntax highlighting…

# File lib/bio-vcf/vcfheader_line.rb, line 467
def self.run_lexer(buf, options = {})
  do_debug = (options[:debug] == true)
  $stderr.print "---> ",buf,"\n" if do_debug
  data = buf.unpack("c*") if(buf.is_a?(String))
  eof = data.length
  values = []
  stack = []

  emit = lambda { |type, data, ts, p|
    # Print the type and text of the last read token
    # p ts,p
    $stderr.print "EMITTED: #{type}: #{data[ts...p].pack('c*')}\n" if do_debug
    values << [type,data[ts...p].pack('c*')]
  }

  error_code = nil
  
  
# line 486 "gen_vcfheaderline_parser.rb"
begin
        p ||= 0
        pe ||= data.length
        cs = simple_lexer_start
end

# line 99 "gen_vcfheaderline_parser.rl"
  
# line 495 "gen_vcfheaderline_parser.rb"
begin
        _klen, _trans, _keys, _acts, _nacts = nil
        _goto_level = 0
        _resume = 10
        _eof_trans = 15
        _again = 20
        _test_eof = 30
        _out = 40
        while true
        _trigger_goto = false
        if _goto_level <= 0
        if p == pe
                _goto_level = _test_eof
                next
        end
        if cs == 0
                _goto_level = _out
                next
        end
        end
        if _goto_level <= _resume
        _keys = _simple_lexer_key_offsets[cs]
        _trans = _simple_lexer_index_offsets[cs]
        _klen = _simple_lexer_single_lengths[cs]
        _break_match = false
        
        begin
          if _klen > 0
             _lower = _keys
             _upper = _keys + _klen - 1

             loop do
                break if _upper < _lower
                _mid = _lower + ( (_upper - _lower) >> 1 )

                if data[p].ord < _simple_lexer_trans_keys[_mid]
                   _upper = _mid - 1
                elsif data[p].ord > _simple_lexer_trans_keys[_mid]
                   _lower = _mid + 1
                else
                   _trans += (_mid - _keys)
                   _break_match = true
                   break
                end
             end # loop
             break if _break_match
             _keys += _klen
             _trans += _klen
          end
          _klen = _simple_lexer_range_lengths[cs]
          if _klen > 0
             _lower = _keys
             _upper = _keys + (_klen << 1) - 2
             loop do
                break if _upper < _lower
                _mid = _lower + (((_upper-_lower) >> 1) & ~1)
                if data[p].ord < _simple_lexer_trans_keys[_mid]
                  _upper = _mid - 2
                elsif data[p].ord > _simple_lexer_trans_keys[_mid+1]
                  _lower = _mid + 2
                else
                  _trans += ((_mid - _keys) >> 1)
                  _break_match = true
                  break
                end
             end # loop
             break if _break_match
             _trans += _klen
          end
        end while false
        cs = _simple_lexer_trans_targs[_trans]
        if _simple_lexer_trans_actions[_trans] != 0
                _acts = _simple_lexer_trans_actions[_trans]
                _nacts = _simple_lexer_actions[_acts]
                _acts += 1
                while _nacts > 0
                        _nacts -= 1
                        _acts += 1
                        case _simple_lexer_actions[_acts - 1]
when 0 then
# line 33 "gen_vcfheaderline_parser.rl"
                begin
 ts=p           end
when 1 then
# line 34 "gen_vcfheaderline_parser.rl"
                begin

    emit.call(:value,data,ts,p)
                end
when 2 then
# line 38 "gen_vcfheaderline_parser.rl"
                begin

    emit.call(:kw,data,ts,p)
                end
when 3 then
# line 58 "gen_vcfheaderline_parser.rl"
                begin
 emit.call(:key_word,data,ts,p)                 end
when 4 then
# line 59 "gen_vcfheaderline_parser.rl"
                begin
 emit.call(:value,data,ts,p)            end
when 5 then
# line 60 "gen_vcfheaderline_parser.rl"
                begin
 emit.call(:value,data,ts,p)            end
when 6 then
# line 62 "gen_vcfheaderline_parser.rl"
                begin
 emit.call(:value,data,ts,p)            end
when 7 then
# line 65 "gen_vcfheaderline_parser.rl"
                begin
 emit.call(:value,data,ts,p)            end
when 8 then
# line 67 "gen_vcfheaderline_parser.rl"
                begin
 debug("ID FOUND")              end
when 9 then
# line 67 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Malformed ID"              end
when 10 then
# line 68 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Version"           end
when 11 then
# line 69 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Number"            end
when 12 then
# line 70 "gen_vcfheaderline_parser.rl"
                begin
 debug("DATE FOUND")            end
when 13 then
# line 70 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Date"              end
when 14 then
# line 71 "gen_vcfheaderline_parser.rl"
                begin
 error_code="GATK"              end
when 15 then
# line 72 "gen_vcfheaderline_parser.rl"
                begin
 debug("KEY_VALUE found")               end
when 16 then
# line 72 "gen_vcfheaderline_parser.rl"
                begin
 error_code="unknown key-value "                end
# line 647 "gen_vcfheaderline_parser.rb"
                        end # action switch
                end
        end
        if _trigger_goto
                next
        end
        end
        if _goto_level <= _again
        if cs == 0
                _goto_level = _out
                next
        end
        p += 1
        if p != pe
                _goto_level = _resume
                next
        end
        end
        if _goto_level <= _test_eof
        if p == eof
        __acts = _simple_lexer_eof_actions[cs]
        __nacts =  _simple_lexer_actions[__acts]
        __acts += 1
        while __nacts > 0
                __nacts -= 1
                __acts += 1
                case _simple_lexer_actions[__acts - 1]
when 9 then
# line 67 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Malformed ID"              end
when 10 then
# line 68 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Version"           end
when 11 then
# line 69 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Number"            end
when 13 then
# line 70 "gen_vcfheaderline_parser.rl"
                begin
 error_code="Date"              end
when 14 then
# line 71 "gen_vcfheaderline_parser.rl"
                begin
 error_code="GATK"              end
when 16 then
# line 72 "gen_vcfheaderline_parser.rl"
                begin
 error_code="unknown key-value "                end
# line 699 "gen_vcfheaderline_parser.rb"
                end # eof action switch
        end
        if _trigger_goto
                next
        end
end
        end
        if _goto_level <= _out
                break
        end
        end
        end

# line 100 "gen_vcfheaderline_parser.rl"

  raise "ERROR: "+error_code+" in "+buf if error_code

  begin
    res = {}
    # p values
    values.each_slice(2) do | a,b |
      $stderr.print '*',a,b if do_debug
      keyword = a[1]
      value = b[1]
      value = value.to_i if ['length','Epoch'].index(keyword)
      res[keyword] = value
      # p h[:value] if h[:name]==:identifier or h[:name]==:value or h[:name]==:string
    end
  rescue
    print "ERROR: "
    p values
    raise
  end
  $stderr.print(res,"\n") if do_debug
  res
end