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