module Mail::Parsers::MessageIdsParser

Constants

MessageIdsStruct

Attributes

_eof_actions[RW]
_index_offsets[RW]
_indicies[RW]
_key_spans[RW]
_trans_actions[RW]
_trans_keys[RW]
_trans_targs[RW]
en_comment_tail[RW]
en_main[RW]
error[RW]
first_final[RW]
start[RW]

Public Class Methods

parse(data) click to toggle source
# File lib/mail/parsers/message_ids_parser.rb, line 2561
    def self.parse(data)
      data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)

      raise Mail::Field::NilParseError.new(Mail::MessageIdsElement) if data.nil?

      # Parser state
      message_ids = MessageIdsStruct.new([])
      msg_id_s = nil

      # 5.1 Variables Used by Ragel
      p = 0
      eof = pe = data.length
      stack = []

      
begin
        p ||= 0
        pe ||= data.length
        cs = start
        top = 0
end

      
begin
        testEof = false
        _slen, _trans, _keys, _inds, _acts, _nacts = nil
        _goto_level = 0
        _resume = 10
        _eof_trans = 15
        _again = 20
        _test_eof = 30
        _out = 40
        while true
        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 = cs << 1
        _inds = _index_offsets[cs]
        _slen = _key_spans[cs]
        _wide = data[p].ord
        _trans = if (   _slen > 0 && 
                        _trans_keys[_keys] <= _wide && 
                        _wide <= _trans_keys[_keys + 1] 
                    ) then
                        _indicies[ _inds + _wide - _trans_keys[_keys] ] 
                 else 
                        _indicies[ _inds + _slen ]
                 end
        cs = _trans_targs[_trans]
        if _trans_actions[_trans] != 0
        case _trans_actions[_trans]
        when 2 then
                begin
 msg_id_s = p           end
        when 30 then
                begin
 message_ids.message_ids << chars(data, msg_id_s, p-1).rstrip           end
        when 3 then
                begin
                end
        when 26 then
                begin
                end
        when 15 then
                begin
                end
        when 13 then
                begin
                end
        when 11 then
                begin
                end
        when 8 then
                begin
                end
        when 6 then
                begin
                end
        when 19 then
                begin
                end
        when 17 then
                begin
                end
        when 23 then
                begin
                end
        when 1 then
                begin
        begin
                stack[top] = cs
                top+= 1
                cs = 196
                _goto_level = _again
                next
        end
                end
        when 29 then
                begin
        begin
                top -= 1
                cs = stack[top]
                _goto_level = _again
                next
        end
                end
        when 32 then
                begin
 message_ids.message_ids << chars(data, msg_id_s, p-1).rstrip           end
                begin
 msg_id_s = p           end
        when 31 then
                begin
 message_ids.message_ids << chars(data, msg_id_s, p-1).rstrip           end
                begin
        begin
                stack[top] = cs
                top+= 1
                cs = 196
                _goto_level = _again
                next
        end
                end
        when 5 then
                begin
                end
                begin
 msg_id_s = p           end
        when 16 then
                begin
                end
                begin
                end
        when 12 then
                begin
                end
                begin
                end
        when 25 then
                begin
                end
                begin
                end
        when 24 then
                begin
                end
                begin
                end
        when 4 then
                begin
                end
                begin
        begin
                stack[top] = cs
                top+= 1
                cs = 196
                _goto_level = _again
                next
        end
                end
        when 27 then
                begin
                end
                begin
        begin
                stack[top] = cs
                top+= 1
                cs = 196
                _goto_level = _again
                next
        end
                end
        when 28 then
                begin
                end
                begin
        begin
                top -= 1
                cs = stack[top]
                _goto_level = _again
                next
        end
                end
        when 14 then
                begin
                end
                begin
        begin
                stack[top] = cs
                top+= 1
                cs = 196
                _goto_level = _again
                next
        end
                end
        when 21 then
                begin
                end
                begin
                end
        when 10 then
                begin
                end
                begin
                end
        when 9 then
                begin
                end
                begin
        begin
                stack[top] = cs
                top+= 1
                cs = 196
                _goto_level = _again
                next
        end
                end
        when 7 then
                begin
                end
                begin
        begin
                stack[top] = cs
                top+= 1
                cs = 196
                _goto_level = _again
                next
        end
                end
        when 18 then
                begin
                end
                begin
                end
        when 22 then
                begin
                end
                begin
                end
                begin
                end
        when 20 then
                begin
                end
                begin
                end
                begin
                end
        end
        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
          case _eof_actions[cs]
        when 30 then
                begin
 message_ids.message_ids << chars(data, msg_id_s, p-1).rstrip           end
        when 3 then
                begin
                end
          end
        end

        end
        if _goto_level <= _out
                break
        end
end
        end


      if p != eof || cs < 208
        raise Mail::Field::IncompleteParseError.new(Mail::MessageIdsElement, data, p)
      end

      message_ids
    end