mailparser 0.4.22a → 0.5.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.txt +2 -6
 - data/lib/mailparser/conv_charset.rb +40 -19
 - data/lib/mailparser/error.rb +1 -0
 - data/lib/mailparser/loose.rb +22 -20
 - data/lib/mailparser/rfc2045/parser.rb +140 -140
 - data/lib/mailparser/rfc2045/scanner.rb +15 -14
 - data/lib/mailparser/rfc2045.rb +1 -0
 - data/lib/mailparser/rfc2047.rb +26 -37
 - data/lib/mailparser/rfc2183/parser.rb +2 -1
 - data/lib/mailparser/rfc2183/scanner.rb +1 -0
 - data/lib/mailparser/rfc2183.rb +1 -0
 - data/lib/mailparser/rfc2231.rb +6 -5
 - data/lib/mailparser/rfc2822/parser.rb +584 -544
 - data/lib/mailparser/rfc2822/scanner.rb +21 -21
 - data/lib/mailparser/rfc2822.rb +1 -0
 - data/lib/mailparser.rb +83 -209
 - data/test/test_loose.rb +17 -8
 - data/test/test_mailparser.rb +88 -183
 - data/test/test_rfc2045.rb +1 -1
 - data/test/test_rfc2047.rb +35 -13
 - data/test/test_rfc2183.rb +1 -1
 - data/test/test_rfc2822.rb +6 -2
 - metadata +22 -9
 - data/HISTORY +0 -141
 - data/lib/mailparser/obsolete.rb +0 -403
 - data/test/test_obsolete.rb +0 -615
 
    
        data/README.txt
    CHANGED
    
    | 
         @@ -87,9 +87,6 @@ opt は Hash オブジェクトで次の値を指定できる。 
     | 
|
| 
       87 
87 
     | 
    
         
             
             :strict => true
         
     | 
| 
       88 
88 
     | 
    
         
             
               RFC違反時に ParseError 例外を発生する。デフォルトは false。
         
     | 
| 
       89 
89 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
             :keep_raw => true
         
     | 
| 
       91 
     | 
    
         
            -
               生メッセージ文字列を保持する。デフォルトは false。
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
90 
     | 
    
         
             
             :use_file => bytes
         
     | 
| 
       94 
91 
     | 
    
         
             
               raw が指定したサイズを超えたら、メモリではなくファイルを使う。nil 指定時は無制限にメモリを使う。デフォルトは nil。
         
     | 
| 
       95 
92 
     | 
    
         | 
| 
         @@ -307,10 +304,9 @@ m.rawheader  # => "From: TOMITA Masahiro <tommy@tmtm.org>\nTo: foo@example.com\n 
     | 
|
| 
       307 
304 
     | 
    
         | 
| 
       308 
305 
     | 
    
         
             
            === raw ===
         
     | 
| 
       309 
306 
     | 
    
         | 
| 
       310 
     | 
    
         
            -
             
     | 
| 
       311 
     | 
    
         
            -
            :keep_raw=>false の場合は空文字列が返る。
         
     | 
| 
      
 307 
     | 
    
         
            +
            生メッセージ文字列を返す。
         
     | 
| 
       312 
308 
     | 
    
         
             
            {{{
         
     | 
| 
       313 
     | 
    
         
            -
            m = MailParser::Message.new(StringIO.new(<<EOS) 
     | 
| 
      
 309 
     | 
    
         
            +
            m = MailParser::Message.new(StringIO.new(<<EOS))
         
     | 
| 
       314 
310 
     | 
    
         
             
            From: TOMITA Masahiro <tommy@tmtm.org>
         
     | 
| 
       315 
311 
     | 
    
         
             
            To: foo@example.com
         
     | 
| 
       316 
312 
     | 
    
         
             
            Subject: subject
         
     | 
| 
         @@ -1,27 +1,48 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # coding: ascii-8bit
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2007-2011 TOMITA Masahiro
         
     | 
| 
       2 
3 
     | 
    
         
             
            # mailto:tommy@tmtm.org
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            module MailParser
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         
             
            class MailParser::ConvCharset
         
     | 
| 
       8 
     | 
    
         
            -
               
     | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                 
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
       20 
     | 
    
         
            -
                  from  
     | 
| 
      
 9 
     | 
    
         
            +
              if String.method_defined? :encode
         
     | 
| 
      
 10 
     | 
    
         
            +
                CHARSET = {
         
     | 
| 
      
 11 
     | 
    
         
            +
                  "sjis"        => "cp932",
         
     | 
| 
      
 12 
     | 
    
         
            +
                  "x-sjis"      => "cp932",
         
     | 
| 
      
 13 
     | 
    
         
            +
                  "shift_jis"   => "cp932",
         
     | 
| 
      
 14 
     | 
    
         
            +
                  "shift-jis"   => "cp932",
         
     | 
| 
      
 15 
     | 
    
         
            +
                  "iso-2022-jp" => "cp50221",
         
     | 
| 
      
 16 
     | 
    
         
            +
                }
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def self.conv_charset(from, to, str)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  from = CHARSET[from.downcase] || from.downcase
         
     | 
| 
      
 20 
     | 
    
         
            +
                  to = CHARSET[to.downcase] || to.downcase
         
     | 
| 
      
 21 
     | 
    
         
            +
                  str.encode(to, from, :invalid=>:replace, :undef=>:replace, :replace=>'?')
         
     | 
| 
       21 
22 
     | 
    
         
             
                end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
              else
         
     | 
| 
      
 24 
     | 
    
         
            +
                require "iconv"
         
     | 
| 
      
 25 
     | 
    
         
            +
                require "nkf"
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                CHARSET = {
         
     | 
| 
      
 28 
     | 
    
         
            +
                  "sjis"        => "cp932",
         
     | 
| 
      
 29 
     | 
    
         
            +
                  "x-sjis"      => "cp932",
         
     | 
| 
      
 30 
     | 
    
         
            +
                  "shift_jis"   => "cp932",
         
     | 
| 
      
 31 
     | 
    
         
            +
                  "shift-jis"   => "cp932",
         
     | 
| 
      
 32 
     | 
    
         
            +
                }
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                def self.conv_charset(from, to, str)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  from = CHARSET[from.downcase] || from.downcase
         
     | 
| 
      
 36 
     | 
    
         
            +
                  to = CHARSET[to.downcase] || to.downcase
         
     | 
| 
      
 37 
     | 
    
         
            +
                  s = str
         
     | 
| 
      
 38 
     | 
    
         
            +
                  if from == "iso-2022-jp" then
         
     | 
| 
      
 39 
     | 
    
         
            +
                    s = NKF.nkf("-m0Jxs", str)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    from = "cp932"
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  if to == "iso-2022-jp" then
         
     | 
| 
      
 43 
     | 
    
         
            +
                    return NKF.nkf("-m0Sxj", Iconv.iconv("cp932", from, s)[0])
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  return Iconv.iconv(to, from, s)[0]
         
     | 
| 
       24 
46 
     | 
    
         
             
                end
         
     | 
| 
       25 
     | 
    
         
            -
                return Iconv.iconv(to, from, s)[0]
         
     | 
| 
       26 
47 
     | 
    
         
             
              end
         
     | 
| 
       27 
48 
     | 
    
         
             
            end
         
     | 
    
        data/lib/mailparser/error.rb
    CHANGED
    
    
    
        data/lib/mailparser/loose.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # coding: ascii-8bit
         
     | 
| 
       2 
2 
     | 
    
         
             
            # Copyright (C) 2007-2010 TOMITA Masahiro
         
     | 
| 
       3 
3 
     | 
    
         
             
            # mailto:tommy@tmtm.org
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
         @@ -6,6 +6,8 @@ require "time" 
     | 
|
| 
       6 
6 
     | 
    
         
             
            require "strscan"
         
     | 
| 
       7 
7 
     | 
    
         
             
            require "mailparser/rfc2822"
         
     | 
| 
       8 
8 
     | 
    
         
             
            require "mailparser/rfc2045"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require "mailparser/rfc2047"
         
     | 
| 
      
 10 
     | 
    
         
            +
            require "mailparser/rfc2183"
         
     | 
| 
       9 
11 
     | 
    
         | 
| 
       10 
12 
     | 
    
         
             
            module MailParser
         
     | 
| 
       11 
13 
     | 
    
         
             
              module Loose
         
     | 
| 
         @@ -109,7 +111,7 @@ module MailParser 
     | 
|
| 
       109 
111 
     | 
    
         
             
                  v = ""
         
     | 
| 
       110 
112 
     | 
    
         
             
                  unless a.empty?
         
     | 
| 
       111 
113 
     | 
    
         
             
                    while i < a[0].length do
         
     | 
| 
       112 
     | 
    
         
            -
                      if a[0][i] =~ /\A[a-z0-9]+\z/ 
     | 
| 
      
 114 
     | 
    
         
            +
                      if a[0][i] =~ /\A[a-z0-9]+\z/i then
         
     | 
| 
       113 
115 
     | 
    
         
             
                        v = a[0][i+1]
         
     | 
| 
       114 
116 
     | 
    
         
             
                        name_val[a[0][i].downcase] = v
         
     | 
| 
       115 
117 
     | 
    
         
             
                        i += 1
         
     | 
| 
         @@ -125,10 +127,10 @@ module MailParser 
     | 
|
| 
       125 
127 
     | 
    
         
             
                # Content-Type ヘッダをパースして RFC2045::ContentType を返す
         
     | 
| 
       126 
128 
     | 
    
         
             
                def parse_content_type(str, opt={})
         
     | 
| 
       127 
129 
     | 
    
         
             
                  token = split_by(Tokenizer.token(str), ";")
         
     | 
| 
       128 
     | 
    
         
            -
                  type, subtype = token.shift. 
     | 
| 
      
 130 
     | 
    
         
            +
                  type, subtype = token.empty? ? nil : token.shift.join.split("/", 2)
         
     | 
| 
       129 
131 
     | 
    
         
             
                  params = {}
         
     | 
| 
       130 
     | 
    
         
            -
                  token. 
     | 
| 
       131 
     | 
    
         
            -
                    pn, pv = param. 
     | 
| 
      
 132 
     | 
    
         
            +
                  token.each do |param|
         
     | 
| 
      
 133 
     | 
    
         
            +
                    pn, pv = param.join.split(/=/, 2)
         
     | 
| 
       132 
134 
     | 
    
         
             
                    params[pn.to_s] = pv.to_s.gsub(/\A"|"\z/,"")
         
     | 
| 
       133 
135 
     | 
    
         
             
                  end
         
     | 
| 
       134 
136 
     | 
    
         
             
                  type = "text" if type.nil? or type.empty?
         
     | 
| 
         @@ -151,10 +153,10 @@ module MailParser 
     | 
|
| 
       151 
153 
     | 
    
         
             
                # Content-Disposition ヘッダをパースして RFC2183::ContentDisposition を返す
         
     | 
| 
       152 
154 
     | 
    
         
             
                def parse_content_disposition(str, opt={})
         
     | 
| 
       153 
155 
     | 
    
         
             
                  token = split_by(Tokenizer.token(str), ";")
         
     | 
| 
       154 
     | 
    
         
            -
                  type = token.shift. 
     | 
| 
      
 156 
     | 
    
         
            +
                  type = token.empty? ? '' : token.shift.join
         
     | 
| 
       155 
157 
     | 
    
         
             
                  params = {}
         
     | 
| 
       156 
     | 
    
         
            -
                  token. 
     | 
| 
       157 
     | 
    
         
            -
                    pn, pv = param. 
     | 
| 
      
 158 
     | 
    
         
            +
                  token.each do |param|
         
     | 
| 
      
 159 
     | 
    
         
            +
                    pn, pv = param.join.split(/=/, 2)
         
     | 
| 
       158 
160 
     | 
    
         
             
                    params[pn.to_s] = pv.to_s.gsub(/\A"|"\z/,"")
         
     | 
| 
       159 
161 
     | 
    
         
             
                  end
         
     | 
| 
       160 
162 
     | 
    
         
             
                  RFC2183::ContentDisposition.new(type, params)
         
     | 
| 
         @@ -185,11 +187,11 @@ module MailParser 
     | 
|
| 
       185 
187 
     | 
    
         
             
                      if opt[:decode_mime_header] then
         
     | 
| 
       186 
188 
     | 
    
         
             
                        display_name = RFC2047.decode(display_name, opt)
         
     | 
| 
       187 
189 
     | 
    
         
             
                      end
         
     | 
| 
       188 
     | 
    
         
            -
                      mailaddr = m[a1+1..a2-1]. 
     | 
| 
      
 190 
     | 
    
         
            +
                      mailaddr = m[a1+1..a2-1].join
         
     | 
| 
       189 
191 
     | 
    
         
             
                      local_part, domain = mailaddr.split(/@/, 2)
         
     | 
| 
       190 
192 
     | 
    
         
             
                      ret << RFC2822::Mailbox.new(RFC2822::AddrSpec.new(local_part, domain), display_name)
         
     | 
| 
       191 
193 
     | 
    
         
             
                    else
         
     | 
| 
       192 
     | 
    
         
            -
                      local_part, domain = m. 
     | 
| 
      
 194 
     | 
    
         
            +
                      local_part, domain = m.join.split(/@/, 2)
         
     | 
| 
       193 
195 
     | 
    
         
             
                      ret << RFC2822::Mailbox.new(RFC2822::AddrSpec.new(local_part, domain))
         
     | 
| 
       194 
196 
     | 
    
         
             
                    end
         
     | 
| 
       195 
197 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -233,9 +235,9 @@ module MailParser 
     | 
|
| 
       233 
235 
     | 
    
         
             
                  def token()
         
     | 
| 
       234 
236 
     | 
    
         
             
                    token = []
         
     | 
| 
       235 
237 
     | 
    
         
             
                    while @ss.rest? do
         
     | 
| 
       236 
     | 
    
         
            -
                      if s = @ss.scan(/\s+/ 
     | 
| 
      
 238 
     | 
    
         
            +
                      if s = @ss.scan(/\s+/) then
         
     | 
| 
       237 
239 
     | 
    
         
             
                        # ignore
         
     | 
| 
       238 
     | 
    
         
            -
                      elsif s = @ss.scan(/\(/ 
     | 
| 
      
 240 
     | 
    
         
            +
                      elsif s = @ss.scan(/\(/) then
         
     | 
| 
       239 
241 
     | 
    
         
             
                        begin
         
     | 
| 
       240 
242 
     | 
    
         
             
                          pos = @ss.pos
         
     | 
| 
       241 
243 
     | 
    
         
             
                          cfws(@ss)
         
     | 
| 
         @@ -243,12 +245,12 @@ module MailParser 
     | 
|
| 
       243 
245 
     | 
    
         
             
                          @ss.pos = pos
         
     | 
| 
       244 
246 
     | 
    
         
             
                          token << s
         
     | 
| 
       245 
247 
     | 
    
         
             
                        end
         
     | 
| 
       246 
     | 
    
         
            -
                      elsif s = @ss.scan(/\"(\s*(\\[#{TEXT_RE}]|[#{QTEXT_RE}]))*\s*\"/ 
     | 
| 
       247 
     | 
    
         
            -
                          @ss.scan(/\[(\s*(\\[#{TEXT_RE}]|[#{DTEXT_RE}]))*\s*\]/ 
     | 
| 
       248 
     | 
    
         
            -
                          @ss.scan(/[#{ATEXT_RE}]+/ 
     | 
| 
      
 248 
     | 
    
         
            +
                      elsif s = @ss.scan(/\"(\s*(\\[#{TEXT_RE}]|[#{QTEXT_RE}]))*\s*\"/o) ||
         
     | 
| 
      
 249 
     | 
    
         
            +
                          @ss.scan(/\[(\s*(\\[#{TEXT_RE}]|[#{DTEXT_RE}]))*\s*\]/o) ||
         
     | 
| 
      
 250 
     | 
    
         
            +
                          @ss.scan(/[#{ATEXT_RE}]+/o)
         
     | 
| 
       249 
251 
     | 
    
         
             
                        token << s
         
     | 
| 
       250 
252 
     | 
    
         
             
                      else
         
     | 
| 
       251 
     | 
    
         
            -
                        token << @ss.scan(/./ 
     | 
| 
      
 253 
     | 
    
         
            +
                        token << @ss.scan(/./)
         
     | 
| 
       252 
254 
     | 
    
         
             
                      end
         
     | 
| 
       253 
255 
     | 
    
         
             
                    end
         
     | 
| 
       254 
256 
     | 
    
         
             
                    return token
         
     | 
| 
         @@ -258,9 +260,9 @@ module MailParser 
     | 
|
| 
       258 
260 
     | 
    
         
             
                  def token_received()
         
     | 
| 
       259 
261 
     | 
    
         
             
                    ret = []
         
     | 
| 
       260 
262 
     | 
    
         
             
                    while @ss.rest? do
         
     | 
| 
       261 
     | 
    
         
            -
                      if s = @ss.scan(/[\s]+/ 
     | 
| 
      
 263 
     | 
    
         
            +
                      if s = @ss.scan(/[\s]+/) then
         
     | 
| 
       262 
264 
     | 
    
         
             
                        # ignore blank
         
     | 
| 
       263 
     | 
    
         
            -
                      elsif s = @ss.scan(/\(/ 
     | 
| 
      
 265 
     | 
    
         
            +
                      elsif s = @ss.scan(/\(/) then
         
     | 
| 
       264 
266 
     | 
    
         
             
                        begin
         
     | 
| 
       265 
267 
     | 
    
         
             
                          pos = @ss.pos
         
     | 
| 
       266 
268 
     | 
    
         
             
                          cfws(@ss)
         
     | 
| 
         @@ -268,12 +270,12 @@ module MailParser 
     | 
|
| 
       268 
270 
     | 
    
         
             
                          @ss.pos = pos
         
     | 
| 
       269 
271 
     | 
    
         
             
                          ret.last << s unless ret.empty?
         
     | 
| 
       270 
272 
     | 
    
         
             
                        end
         
     | 
| 
       271 
     | 
    
         
            -
                      elsif s = @ss.scan(/\"([\s]*(\\[#{TEXT_RE}]|[#{QTEXT_RE}]))*[\s]*\"/ 
     | 
| 
      
 273 
     | 
    
         
            +
                      elsif s = @ss.scan(/\"([\s]*(\\[#{TEXT_RE}]|[#{QTEXT_RE}]))*[\s]*\"/o)
         
     | 
| 
       272 
274 
     | 
    
         
             
                        ret << s
         
     | 
| 
       273 
275 
     | 
    
         
             
                      elsif s = @ss.scan(/;/)
         
     | 
| 
       274 
276 
     | 
    
         
             
                        ret << s
         
     | 
| 
       275 
277 
     | 
    
         
             
                      else
         
     | 
| 
       276 
     | 
    
         
            -
                        ret << @ss.scan(/[^\s\(\;]+/ 
     | 
| 
      
 278 
     | 
    
         
            +
                        ret << @ss.scan(/[^\s\(\;]+/o)
         
     | 
| 
       277 
279 
     | 
    
         
             
                      end
         
     | 
| 
       278 
280 
     | 
    
         
             
                    end
         
     | 
| 
       279 
281 
     | 
    
         
             
                    return ret
         
     | 
| 
         @@ -1,19 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: ascii-8bit
         
     | 
| 
       1 
2 
     | 
    
         
             
            #
         
     | 
| 
       2 
3 
     | 
    
         
             
            # DO NOT MODIFY!!!!
         
     | 
| 
       3 
     | 
    
         
            -
            # This file is automatically generated by  
     | 
| 
       4 
     | 
    
         
            -
            # from  
     | 
| 
      
 4 
     | 
    
         
            +
            # This file is automatically generated by Racc 1.4.7
         
     | 
| 
      
 5 
     | 
    
         
            +
            # from Racc grammer file "".
         
     | 
| 
       5 
6 
     | 
    
         
             
            #
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            require 'racc/parser'
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'racc/parser.rb'
         
     | 
| 
       10 
9 
     | 
    
         
             
            module MailParser
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
10 
     | 
    
         
             
              module RFC2045
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
11 
     | 
    
         
             
                class Parser < Racc::Parser
         
     | 
| 
       15 
12 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
            module_eval 
     | 
| 
      
 13 
     | 
    
         
            +
            module_eval(<<'...end parser.y/module_eval...', 'parser.y', 62)
         
     | 
| 
       17 
14 
     | 
    
         | 
| 
       18 
15 
     | 
    
         
             
            require "mailparser/rfc2045/scanner"
         
     | 
| 
       19 
16 
     | 
    
         | 
| 
         @@ -30,7 +27,7 @@ def parse(header_type, value) 
     | 
|
| 
       30 
27 
     | 
    
         
             
            end
         
     | 
| 
       31 
28 
     | 
    
         | 
| 
       32 
29 
     | 
    
         
             
            def parse_sub(&block)
         
     | 
| 
       33 
     | 
    
         
            -
              yield @header_type, nil
         
     | 
| 
      
 30 
     | 
    
         
            +
              yield [@header_type, nil]
         
     | 
| 
       34 
31 
     | 
    
         
             
              @scanner.scan(&block)
         
     | 
| 
       35 
32 
     | 
    
         
             
            end
         
     | 
| 
       36 
33 
     | 
    
         | 
| 
         @@ -39,207 +36,210 @@ def on_error(t, val, vstack) 
     | 
|
| 
       39 
36 
     | 
    
         
             
            #  p racc_token2str(t)
         
     | 
| 
       40 
37 
     | 
    
         
             
              raise MailParser::ParseError, val+@scanner.rest
         
     | 
| 
       41 
38 
     | 
    
         
             
            end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
            ##### racc 1.4.5 generates ###
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
            racc_reduce_table = [
         
     | 
| 
       47 
     | 
    
         
            -
             0, 0, :racc_error,
         
     | 
| 
       48 
     | 
    
         
            -
             2, 13, :_reduce_1,
         
     | 
| 
       49 
     | 
    
         
            -
             2, 13, :_reduce_2,
         
     | 
| 
       50 
     | 
    
         
            -
             2, 13, :_reduce_3,
         
     | 
| 
       51 
     | 
    
         
            -
             4, 14, :_reduce_4,
         
     | 
| 
       52 
     | 
    
         
            -
             1, 15, :_reduce_5,
         
     | 
| 
       53 
     | 
    
         
            -
             3, 16, :_reduce_6,
         
     | 
| 
       54 
     | 
    
         
            -
             1, 20, :_reduce_none,
         
     | 
| 
       55 
     | 
    
         
            -
             1, 17, :_reduce_none,
         
     | 
| 
       56 
     | 
    
         
            -
             1, 18, :_reduce_none,
         
     | 
| 
       57 
     | 
    
         
            -
             0, 19, :_reduce_10,
         
     | 
| 
       58 
     | 
    
         
            -
             3, 19, :_reduce_11,
         
     | 
| 
       59 
     | 
    
         
            -
             3, 21, :_reduce_12,
         
     | 
| 
       60 
     | 
    
         
            -
             1, 22, :_reduce_none,
         
     | 
| 
       61 
     | 
    
         
            -
             1, 23, :_reduce_none,
         
     | 
| 
       62 
     | 
    
         
            -
             1, 23, :_reduce_none ]
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
            racc_reduce_n = 16
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
            racc_shift_n = 29
         
     | 
| 
      
 39 
     | 
    
         
            +
            ...end parser.y/module_eval...
         
     | 
| 
      
 40 
     | 
    
         
            +
            ##### State transition tables begin ###
         
     | 
| 
       67 
41 
     | 
    
         | 
| 
       68 
42 
     | 
    
         
             
            racc_action_table = [
         
     | 
| 
       69 
     | 
    
         
            -
                 
     | 
| 
       70 
     | 
    
         
            -
                  
     | 
| 
      
 43 
     | 
    
         
            +
                27,     8,    11,    28,     2,     3,     4,    13,    14,    15,
         
     | 
| 
      
 44 
     | 
    
         
            +
                 5,    18,    19,    21,    24,    25,    16 ]
         
     | 
| 
       71 
45 
     | 
    
         | 
| 
       72 
46 
     | 
    
         
             
            racc_action_check = [
         
     | 
| 
       73 
     | 
    
         
            -
                25,     2,     3,    25,     0,     0,     0,     4,      
     | 
| 
       74 
     | 
    
         
            -
                 1,     
     | 
| 
      
 47 
     | 
    
         
            +
                25,     2,     3,    25,     0,     0,     0,     4,     5,     7,
         
     | 
| 
      
 48 
     | 
    
         
            +
                 1,    15,    16,    20,    21,    23,    13 ]
         
     | 
| 
       75 
49 
     | 
    
         | 
| 
       76 
50 
     | 
    
         
             
            racc_action_pointer = [
         
     | 
| 
       77 
     | 
    
         
            -
                 2, 
     | 
| 
       78 
     | 
    
         
            -
               nil,   nil,   nil,     9, 
     | 
| 
       79 
     | 
    
         
            -
                 4,     6,     5,   nil, 
     | 
| 
      
 51 
     | 
    
         
            +
                 2,    10,    -7,    -6,     1,     8,   nil,     4,   nil,   nil,
         
     | 
| 
      
 52 
     | 
    
         
            +
               nil,   nil,   nil,     9,   nil,     3,     6,   nil,   nil,   nil,
         
     | 
| 
      
 53 
     | 
    
         
            +
                 4,     6,   nil,     5,   nil,    -8,   nil,   nil,   nil ]
         
     | 
| 
       80 
54 
     | 
    
         | 
| 
       81 
55 
     | 
    
         
             
            racc_action_default = [
         
     | 
| 
       82 
     | 
    
         
            -
               -16,   -16,   -16,   -16,   -16,    -1,   -16,    -8, 
     | 
| 
       83 
     | 
    
         
            -
                - 
     | 
| 
       84 
     | 
    
         
            -
                -4,   -16,   - 
     | 
| 
      
 56 
     | 
    
         
            +
               -16,   -16,   -16,   -16,   -16,   -16,    -1,   -16,    -8,    -2,
         
     | 
| 
      
 57 
     | 
    
         
            +
                -5,    -7,    -3,   -16,    29,   -16,   -16,   -10,    -9,    -6,
         
     | 
| 
      
 58 
     | 
    
         
            +
                -4,   -16,   -11,   -16,   -13,   -16,   -12,   -14,   -15 ]
         
     | 
| 
       85 
59 
     | 
    
         | 
| 
       86 
60 
     | 
    
         
             
            racc_goto_table = [
         
     | 
| 
       87 
     | 
    
         
            -
                  
     | 
| 
       88 
     | 
    
         
            -
                 
     | 
| 
      
 61 
     | 
    
         
            +
                 1,     6,     9,    12,     7,    17,    20,    10,    22,    23,
         
     | 
| 
      
 62 
     | 
    
         
            +
                26 ]
         
     | 
| 
       89 
63 
     | 
    
         | 
| 
       90 
64 
     | 
    
         
             
            racc_goto_check = [
         
     | 
| 
       91 
65 
     | 
    
         
             
                 1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
         
     | 
| 
       92 
66 
     | 
    
         
             
                11 ]
         
     | 
| 
       93 
67 
     | 
    
         | 
| 
       94 
68 
     | 
    
         
             
            racc_goto_pointer = [
         
     | 
| 
       95 
     | 
    
         
            -
               nil,     0, 
     | 
| 
      
 69 
     | 
    
         
            +
               nil,     0,    -1,    -1,    -1,     2,   -10,   -11,     4,   -13,
         
     | 
| 
       96 
70 
     | 
    
         
             
               -12,   -15 ]
         
     | 
| 
       97 
71 
     | 
    
         | 
| 
       98 
72 
     | 
    
         
             
            racc_goto_default = [
         
     | 
| 
       99 
73 
     | 
    
         
             
               nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
         
     | 
| 
       100 
74 
     | 
    
         
             
               nil,   nil ]
         
     | 
| 
       101 
75 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
              
     | 
| 
       104 
     | 
    
         
            -
              
     | 
| 
       105 
     | 
    
         
            -
             : 
     | 
| 
       106 
     | 
    
         
            -
             : 
     | 
| 
       107 
     | 
    
         
            -
             : 
     | 
| 
       108 
     | 
    
         
            -
              
     | 
| 
       109 
     | 
    
         
            -
             : 
     | 
| 
       110 
     | 
    
         
            -
              
     | 
| 
       111 
     | 
    
         
            -
             : 
     | 
| 
       112 
     | 
    
         
            -
              
     | 
| 
       113 
     | 
    
         
            -
              
     | 
| 
       114 
     | 
    
         
            -
             : 
     | 
| 
      
 76 
     | 
    
         
            +
            racc_reduce_table = [
         
     | 
| 
      
 77 
     | 
    
         
            +
              0, 0, :racc_error,
         
     | 
| 
      
 78 
     | 
    
         
            +
              2, 13, :_reduce_1,
         
     | 
| 
      
 79 
     | 
    
         
            +
              2, 13, :_reduce_2,
         
     | 
| 
      
 80 
     | 
    
         
            +
              2, 13, :_reduce_3,
         
     | 
| 
      
 81 
     | 
    
         
            +
              4, 14, :_reduce_4,
         
     | 
| 
      
 82 
     | 
    
         
            +
              1, 15, :_reduce_5,
         
     | 
| 
      
 83 
     | 
    
         
            +
              3, 16, :_reduce_6,
         
     | 
| 
      
 84 
     | 
    
         
            +
              1, 20, :_reduce_none,
         
     | 
| 
      
 85 
     | 
    
         
            +
              1, 17, :_reduce_none,
         
     | 
| 
      
 86 
     | 
    
         
            +
              1, 18, :_reduce_none,
         
     | 
| 
      
 87 
     | 
    
         
            +
              0, 19, :_reduce_10,
         
     | 
| 
      
 88 
     | 
    
         
            +
              3, 19, :_reduce_11,
         
     | 
| 
      
 89 
     | 
    
         
            +
              3, 21, :_reduce_12,
         
     | 
| 
      
 90 
     | 
    
         
            +
              1, 22, :_reduce_none,
         
     | 
| 
      
 91 
     | 
    
         
            +
              1, 23, :_reduce_none,
         
     | 
| 
      
 92 
     | 
    
         
            +
              1, 23, :_reduce_none ]
         
     | 
| 
       115 
93 
     | 
    
         | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
      
 94 
     | 
    
         
            +
            racc_reduce_n = 16
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            racc_shift_n = 29
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            racc_token_table = {
         
     | 
| 
      
 99 
     | 
    
         
            +
              false => 0,
         
     | 
| 
      
 100 
     | 
    
         
            +
              :error => 1,
         
     | 
| 
      
 101 
     | 
    
         
            +
              :CONTENT_TYPE => 2,
         
     | 
| 
      
 102 
     | 
    
         
            +
              :CONTENT_TRANSFER_ENCODING => 3,
         
     | 
| 
      
 103 
     | 
    
         
            +
              :MIME_VERSION => 4,
         
     | 
| 
      
 104 
     | 
    
         
            +
              "/" => 5,
         
     | 
| 
      
 105 
     | 
    
         
            +
              :DIGIT => 6,
         
     | 
| 
      
 106 
     | 
    
         
            +
              "." => 7,
         
     | 
| 
      
 107 
     | 
    
         
            +
              :TOKEN => 8,
         
     | 
| 
      
 108 
     | 
    
         
            +
              ";" => 9,
         
     | 
| 
      
 109 
     | 
    
         
            +
              "=" => 10,
         
     | 
| 
      
 110 
     | 
    
         
            +
              :QUOTED_STRING => 11 }
         
     | 
| 
       117 
111 
     | 
    
         | 
| 
       118 
112 
     | 
    
         
             
            racc_nt_base = 12
         
     | 
| 
       119 
113 
     | 
    
         | 
| 
      
 114 
     | 
    
         
            +
            racc_use_result_var = false
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
       120 
116 
     | 
    
         
             
            Racc_arg = [
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
      
 117 
     | 
    
         
            +
              racc_action_table,
         
     | 
| 
      
 118 
     | 
    
         
            +
              racc_action_check,
         
     | 
| 
      
 119 
     | 
    
         
            +
              racc_action_default,
         
     | 
| 
      
 120 
     | 
    
         
            +
              racc_action_pointer,
         
     | 
| 
      
 121 
     | 
    
         
            +
              racc_goto_table,
         
     | 
| 
      
 122 
     | 
    
         
            +
              racc_goto_check,
         
     | 
| 
      
 123 
     | 
    
         
            +
              racc_goto_default,
         
     | 
| 
      
 124 
     | 
    
         
            +
              racc_goto_pointer,
         
     | 
| 
      
 125 
     | 
    
         
            +
              racc_nt_base,
         
     | 
| 
      
 126 
     | 
    
         
            +
              racc_reduce_table,
         
     | 
| 
      
 127 
     | 
    
         
            +
              racc_token_table,
         
     | 
| 
      
 128 
     | 
    
         
            +
              racc_shift_n,
         
     | 
| 
      
 129 
     | 
    
         
            +
              racc_reduce_n,
         
     | 
| 
      
 130 
     | 
    
         
            +
              racc_use_result_var ]
         
     | 
| 
       135 
131 
     | 
    
         | 
| 
       136 
132 
     | 
    
         
             
            Racc_token_to_s_table = [
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
      
 133 
     | 
    
         
            +
              "$end",
         
     | 
| 
      
 134 
     | 
    
         
            +
              "error",
         
     | 
| 
      
 135 
     | 
    
         
            +
              "CONTENT_TYPE",
         
     | 
| 
      
 136 
     | 
    
         
            +
              "CONTENT_TRANSFER_ENCODING",
         
     | 
| 
      
 137 
     | 
    
         
            +
              "MIME_VERSION",
         
     | 
| 
      
 138 
     | 
    
         
            +
              "\"/\"",
         
     | 
| 
      
 139 
     | 
    
         
            +
              "DIGIT",
         
     | 
| 
      
 140 
     | 
    
         
            +
              "\".\"",
         
     | 
| 
      
 141 
     | 
    
         
            +
              "TOKEN",
         
     | 
| 
      
 142 
     | 
    
         
            +
              "\";\"",
         
     | 
| 
      
 143 
     | 
    
         
            +
              "\"=\"",
         
     | 
| 
      
 144 
     | 
    
         
            +
              "QUOTED_STRING",
         
     | 
| 
      
 145 
     | 
    
         
            +
              "$start",
         
     | 
| 
      
 146 
     | 
    
         
            +
              "all",
         
     | 
| 
      
 147 
     | 
    
         
            +
              "content_type",
         
     | 
| 
      
 148 
     | 
    
         
            +
              "content_transfer_encoding",
         
     | 
| 
      
 149 
     | 
    
         
            +
              "mime_version",
         
     | 
| 
      
 150 
     | 
    
         
            +
              "type",
         
     | 
| 
      
 151 
     | 
    
         
            +
              "subtype",
         
     | 
| 
      
 152 
     | 
    
         
            +
              "parameter_list",
         
     | 
| 
      
 153 
     | 
    
         
            +
              "mechanism",
         
     | 
| 
      
 154 
     | 
    
         
            +
              "parameter",
         
     | 
| 
      
 155 
     | 
    
         
            +
              "attribute",
         
     | 
| 
      
 156 
     | 
    
         
            +
              "value" ]
         
     | 
| 
       161 
157 
     | 
    
         | 
| 
       162 
158 
     | 
    
         
             
            Racc_debug_parser = false
         
     | 
| 
       163 
159 
     | 
    
         | 
| 
       164 
     | 
    
         
            -
            #####  
     | 
| 
      
 160 
     | 
    
         
            +
            ##### State transition tables end #####
         
     | 
| 
       165 
161 
     | 
    
         | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
      
 162 
     | 
    
         
            +
            # reduce 0 omitted
         
     | 
| 
       167 
163 
     | 
    
         | 
| 
       168 
     | 
    
         
            -
            module_eval 
     | 
| 
       169 
     | 
    
         
            -
              def _reduce_1( 
     | 
| 
       170 
     | 
    
         
            -
            val[1]
         
     | 
| 
      
 164 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 9)
         
     | 
| 
      
 165 
     | 
    
         
            +
              def _reduce_1(val, _values)
         
     | 
| 
      
 166 
     | 
    
         
            +
                val[1]
         
     | 
| 
       171 
167 
     | 
    
         
             
              end
         
     | 
| 
       172 
168 
     | 
    
         
             
            .,.,
         
     | 
| 
       173 
169 
     | 
    
         | 
| 
       174 
     | 
    
         
            -
            module_eval 
     | 
| 
       175 
     | 
    
         
            -
              def _reduce_2( 
     | 
| 
       176 
     | 
    
         
            -
            val[1]
         
     | 
| 
      
 170 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 11)
         
     | 
| 
      
 171 
     | 
    
         
            +
              def _reduce_2(val, _values)
         
     | 
| 
      
 172 
     | 
    
         
            +
                val[1]
         
     | 
| 
       177 
173 
     | 
    
         
             
              end
         
     | 
| 
       178 
174 
     | 
    
         
             
            .,.,
         
     | 
| 
       179 
175 
     | 
    
         | 
| 
       180 
     | 
    
         
            -
            module_eval 
     | 
| 
       181 
     | 
    
         
            -
              def _reduce_3( 
     | 
| 
       182 
     | 
    
         
            -
            val[1]
         
     | 
| 
      
 176 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 13)
         
     | 
| 
      
 177 
     | 
    
         
            +
              def _reduce_3(val, _values)
         
     | 
| 
      
 178 
     | 
    
         
            +
                val[1]
         
     | 
| 
       183 
179 
     | 
    
         
             
              end
         
     | 
| 
       184 
180 
     | 
    
         
             
            .,.,
         
     | 
| 
       185 
181 
     | 
    
         | 
| 
       186 
     | 
    
         
            -
            module_eval 
     | 
| 
       187 
     | 
    
         
            -
              def _reduce_4( 
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
      
 182 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 17)
         
     | 
| 
      
 183 
     | 
    
         
            +
              def _reduce_4(val, _values)
         
     | 
| 
      
 184 
     | 
    
         
            +
                                    ContentType.new(val[0], val[2], val[3])
         
     | 
| 
      
 185 
     | 
    
         
            +
                              
         
     | 
| 
       189 
186 
     | 
    
         
             
              end
         
     | 
| 
       190 
187 
     | 
    
         
             
            .,.,
         
     | 
| 
       191 
188 
     | 
    
         | 
| 
       192 
     | 
    
         
            -
            module_eval 
     | 
| 
       193 
     | 
    
         
            -
              def _reduce_5( 
     | 
| 
       194 
     | 
    
         
            -
             
     | 
| 
      
 189 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 22)
         
     | 
| 
      
 190 
     | 
    
         
            +
              def _reduce_5(val, _values)
         
     | 
| 
      
 191 
     | 
    
         
            +
                                    ContentTransferEncoding.new(val[0])
         
     | 
| 
      
 192 
     | 
    
         
            +
                              
         
     | 
| 
       195 
193 
     | 
    
         
             
              end
         
     | 
| 
       196 
194 
     | 
    
         
             
            .,.,
         
     | 
| 
       197 
195 
     | 
    
         | 
| 
       198 
     | 
    
         
            -
            module_eval 
     | 
| 
       199 
     | 
    
         
            -
              def _reduce_6( 
     | 
| 
       200 
     | 
    
         
            -
             
     | 
| 
      
 196 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 29)
         
     | 
| 
      
 197 
     | 
    
         
            +
              def _reduce_6(val, _values)
         
     | 
| 
      
 198 
     | 
    
         
            +
                                    val.join
         
     | 
| 
      
 199 
     | 
    
         
            +
                              
         
     | 
| 
       201 
200 
     | 
    
         
             
              end
         
     | 
| 
       202 
201 
     | 
    
         
             
            .,.,
         
     | 
| 
       203 
202 
     | 
    
         | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
      
 203 
     | 
    
         
            +
            # reduce 7 omitted
         
     | 
| 
       205 
204 
     | 
    
         | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
      
 205 
     | 
    
         
            +
            # reduce 8 omitted
         
     | 
| 
       207 
206 
     | 
    
         | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
      
 207 
     | 
    
         
            +
            # reduce 9 omitted
         
     | 
| 
       209 
208 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
            module_eval 
     | 
| 
       211 
     | 
    
         
            -
              def _reduce_10( 
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
      
 209 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 40)
         
     | 
| 
      
 210 
     | 
    
         
            +
              def _reduce_10(val, _values)
         
     | 
| 
      
 211 
     | 
    
         
            +
                                    {}
         
     | 
| 
      
 212 
     | 
    
         
            +
                              
         
     | 
| 
       213 
213 
     | 
    
         
             
              end
         
     | 
| 
       214 
214 
     | 
    
         
             
            .,.,
         
     | 
| 
       215 
215 
     | 
    
         | 
| 
       216 
     | 
    
         
            -
            module_eval 
     | 
| 
       217 
     | 
    
         
            -
              def _reduce_11( 
     | 
| 
       218 
     | 
    
         
            -
             
     | 
| 
      
 216 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 44)
         
     | 
| 
      
 217 
     | 
    
         
            +
              def _reduce_11(val, _values)
         
     | 
| 
      
 218 
     | 
    
         
            +
                                    pn, pv = val[2]
         
     | 
| 
       219 
219 
     | 
    
         
             
                                pv = $1 if pv =~ /\A\"(.*)\"\Z/m
         
     | 
| 
       220 
220 
     | 
    
         
             
                                val[0][pn] = pv.gsub(/\s*\n\s*/, " ")
         
     | 
| 
       221 
221 
     | 
    
         
             
                                val[0]
         
     | 
| 
      
 222 
     | 
    
         
            +
                              
         
     | 
| 
       222 
223 
     | 
    
         
             
              end
         
     | 
| 
       223 
224 
     | 
    
         
             
            .,.,
         
     | 
| 
       224 
225 
     | 
    
         | 
| 
       225 
     | 
    
         
            -
            module_eval 
     | 
| 
       226 
     | 
    
         
            -
              def _reduce_12( 
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
      
 226 
     | 
    
         
            +
            module_eval(<<'.,.,', 'parser.y', 52)
         
     | 
| 
      
 227 
     | 
    
         
            +
              def _reduce_12(val, _values)
         
     | 
| 
      
 228 
     | 
    
         
            +
                                    [val[0].downcase, val[2]]
         
     | 
| 
      
 229 
     | 
    
         
            +
                              
         
     | 
| 
       228 
230 
     | 
    
         
             
              end
         
     | 
| 
       229 
231 
     | 
    
         
             
            .,.,
         
     | 
| 
       230 
232 
     | 
    
         | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
      
 233 
     | 
    
         
            +
            # reduce 13 omitted
         
     | 
| 
       232 
234 
     | 
    
         | 
| 
       233 
     | 
    
         
            -
             
     | 
| 
      
 235 
     | 
    
         
            +
            # reduce 14 omitted
         
     | 
| 
       234 
236 
     | 
    
         | 
| 
       235 
     | 
    
         
            -
             
     | 
| 
      
 237 
     | 
    
         
            +
            # reduce 15 omitted
         
     | 
| 
       236 
238 
     | 
    
         | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
      
 239 
     | 
    
         
            +
            def _reduce_none(val, _values)
         
     | 
| 
       238 
240 
     | 
    
         
             
              val[0]
         
     | 
| 
       239 
     | 
    
         
            -
             
     | 
| 
      
 241 
     | 
    
         
            +
            end
         
     | 
| 
       240 
242 
     | 
    
         | 
| 
       241 
243 
     | 
    
         
             
                end   # class Parser
         
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
       243 
     | 
    
         
            -
              end   # module  
     | 
| 
       244 
     | 
    
         
            -
             
     | 
| 
       245 
     | 
    
         
            -
            end   # module MailParser
         
     | 
| 
      
 244 
     | 
    
         
            +
                end   # module RFC2045
         
     | 
| 
      
 245 
     | 
    
         
            +
              end   # module MailParser
         
     | 
| 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: ascii-8bit
         
     | 
| 
       1 
2 
     | 
    
         
             
            # Copyright (C) 2006-2010 TOMITA Masahiro
         
     | 
| 
       2 
3 
     | 
    
         
             
            # mailto:tommy@tmtm.org
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
         @@ -18,17 +19,17 @@ class MailParser::RFC2045::Scanner < MailParser::RFC2822::Scanner 
     | 
|
| 
       18 
19 
     | 
    
         
             
              def scan_structured()
         
     | 
| 
       19 
20 
     | 
    
         
             
                until @ss.eos?
         
     | 
| 
       20 
21 
     | 
    
         
             
                  case
         
     | 
| 
       21 
     | 
    
         
            -
                  when s = @ss.scan(/\s*\(/ 
     | 
| 
      
 22 
     | 
    
         
            +
                  when s = @ss.scan(/\s*\(/)
         
     | 
| 
       22 
23 
     | 
    
         
             
                    s << cfws(@ss)
         
     | 
| 
       23 
24 
     | 
    
         
             
                    next
         
     | 
| 
       24 
     | 
    
         
            -
                  when s = @ss.scan(/\s+/ 
     | 
| 
      
 25 
     | 
    
         
            +
                  when s = @ss.scan(/\s+/)
         
     | 
| 
       25 
26 
     | 
    
         
             
                    next
         
     | 
| 
       26 
     | 
    
         
            -
                  when s = @ss.scan(/\"(\s*(\\[#{TEXT_RE}]|[#{QTEXT_RE}]))*\s*\"/ 
     | 
| 
       27 
     | 
    
         
            -
                    yield :QUOTED_STRING, s
         
     | 
| 
       28 
     | 
    
         
            -
                  when s = @ss.scan(/[#{TOKEN_RE}]+/ 
     | 
| 
       29 
     | 
    
         
            -
                    yield :TOKEN, s
         
     | 
| 
       30 
     | 
    
         
            -
                  when s = @ss.scan(/./ 
     | 
| 
       31 
     | 
    
         
            -
                    yield s, s
         
     | 
| 
      
 27 
     | 
    
         
            +
                  when s = @ss.scan(/\"(\s*(\\[#{TEXT_RE}]|[#{QTEXT_RE}]))*\s*\"/o)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    yield [:QUOTED_STRING, s]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  when s = @ss.scan(/[#{TOKEN_RE}]+/o)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    yield [:TOKEN, s]
         
     | 
| 
      
 31 
     | 
    
         
            +
                  when s = @ss.scan(/./)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    yield [s, s]
         
     | 
| 
       32 
33 
     | 
    
         
             
                  end
         
     | 
| 
       33 
34 
     | 
    
         
             
                end
         
     | 
| 
       34 
35 
     | 
    
         
             
                yield nil
         
     | 
| 
         @@ -37,15 +38,15 @@ class MailParser::RFC2045::Scanner < MailParser::RFC2822::Scanner 
     | 
|
| 
       37 
38 
     | 
    
         
             
              def scan_mime_version()
         
     | 
| 
       38 
39 
     | 
    
         
             
                until @ss.eos?
         
     | 
| 
       39 
40 
     | 
    
         
             
                  case
         
     | 
| 
       40 
     | 
    
         
            -
                  when s = @ss.scan(/\s*\(/ 
     | 
| 
      
 41 
     | 
    
         
            +
                  when s = @ss.scan(/\s*\(/)
         
     | 
| 
       41 
42 
     | 
    
         
             
                    s << cfws(@ss)
         
     | 
| 
       42 
43 
     | 
    
         
             
                    next
         
     | 
| 
       43 
     | 
    
         
            -
                  when s = @ss.scan(/\s+/ 
     | 
| 
      
 44 
     | 
    
         
            +
                  when s = @ss.scan(/\s+/)
         
     | 
| 
       44 
45 
     | 
    
         
             
                    next
         
     | 
| 
       45 
     | 
    
         
            -
                  when s = @ss.scan(/\d+/ 
     | 
| 
       46 
     | 
    
         
            -
                    yield :DIGIT, s
         
     | 
| 
       47 
     | 
    
         
            -
                  when s = @ss.scan(/./ 
     | 
| 
       48 
     | 
    
         
            -
                    yield s, s
         
     | 
| 
      
 46 
     | 
    
         
            +
                  when s = @ss.scan(/\d+/)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    yield [:DIGIT, s]
         
     | 
| 
      
 48 
     | 
    
         
            +
                  when s = @ss.scan(/./)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    yield [s, s]
         
     | 
| 
       49 
50 
     | 
    
         
             
                  end
         
     | 
| 
       50 
51 
     | 
    
         
             
                end
         
     | 
| 
       51 
52 
     | 
    
         
             
                yield nil
         
     | 
    
        data/lib/mailparser/rfc2045.rb
    CHANGED