module Mail::Parsers::EnvelopeFromParser
Constants
- EnvelopeFromStruct
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/envelope_from_parser.rb, line 3222 def self.parse(data) data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding) envelope_from = EnvelopeFromStruct.new return envelope_from if Mail::Utilities.blank?(data) # Parser state address_s = ctime_date_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 3 then begin address_s = p end when 17 then begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 12 then begin ctime_date_s = p end when 13 then begin end when 37 then begin end when 19 then begin end when 11 then begin end when 6 then begin end when 4 then begin end when 25 then begin end when 23 then begin end when 33 then begin end when 5 then begin begin stack[top] = cs top+= 1 cs = 293 _goto_level = _again next end end when 40 then begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 1 then begin address_s = p end begin end when 18 then begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 16 then begin end begin end when 36 then begin end begin end when 35 then begin end begin end when 15 then begin end begin begin stack[top] = cs top+= 1 cs = 293 _goto_level = _again next end end when 38 then begin end begin begin stack[top] = cs top+= 1 cs = 293 _goto_level = _again next end end when 39 then begin end begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 21 then begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 20 then begin end begin begin stack[top] = cs top+= 1 cs = 293 _goto_level = _again next end end when 10 then begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 29 then begin end begin end when 9 then begin end begin end when 8 then begin end begin begin stack[top] = cs top+= 1 cs = 293 _goto_level = _again next end end when 24 then begin end begin end when 32 then begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 2 then begin address_s = p end begin end begin begin stack[top] = cs top+= 1 cs = 293 _goto_level = _again next end end when 22 then begin end begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 14 then begin end begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 31 then begin end begin end begin end when 34 then begin end begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 28 then begin end begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 7 then begin end begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 27 then begin end begin end begin end when 30 then begin end begin end begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip end when 26 then begin end begin end begin end begin envelope_from.address = chars(data, address_s, p-1).rstrip 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 41 then begin envelope_from.ctime_date = chars(data, ctime_date_s, p-1) end when 42 then begin end begin envelope_from.ctime_date = chars(data, ctime_date_s, p-1) end end end end if _goto_level <= _out break end end end if p != eof || cs < 305 raise Mail::Field::IncompleteParseError.new(Mail::EnvelopeFromElement, data, p) end envelope_from end