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