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 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
- 生メッセージ文字列を返す。:keep_raw=>true である必要がある。
311
- :keep_raw=>false の場合は空文字列が返る。
307
+ 生メッセージ文字列を返す。
312
308
  {{{
313
- m = MailParser::Message.new(StringIO.new(<<EOS), :keep_raw=>true)
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
- # Copyright (C) 2007-2010 TOMITA Masahiro
1
+ # coding: ascii-8bit
2
+ # Copyright (C) 2007-2011 TOMITA Masahiro
2
3
  # mailto:tommy@tmtm.org
3
4
 
4
- require "iconv"
5
- require "nkf"
5
+ module MailParser
6
+ end
6
7
 
7
8
  class MailParser::ConvCharset
8
- CHARSET = {
9
- "sjis" => "cp932",
10
- "x-sjis" => "cp932",
11
- "shift_jis" => "cp932",
12
- "shift-jis" => "cp932",
13
- }
14
- def self.conv_charset(from, to, str)
15
- from = CHARSET[from.downcase] || from.downcase
16
- to = CHARSET[to.downcase] || to.downcase
17
- s = str
18
- if from == "iso-2022-jp" then
19
- s = NKF.nkf("-m0Jxs", str)
20
- from = "cp932"
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
- if to == "iso-2022-jp" then
23
- return NKF.nkf("-m0Sxj", Iconv.iconv("cp932", from, s)[0])
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
@@ -1,3 +1,4 @@
1
+ # coding: ascii-8bit
1
2
  # Copyright (C) 2006-2010 TOMITA Masahiro
2
3
  # mailto:tommy@tmtm.org
3
4
 
@@ -1,4 +1,4 @@
1
- # -*- coding: utf-8 -*-
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/ino then
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.to_s.split("/", 2)
130
+ type, subtype = token.empty? ? nil : token.shift.join.split("/", 2)
129
131
  params = {}
130
- token.map do |param|
131
- pn, pv = param.to_s.split(/=/, 2)
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.to_s
156
+ type = token.empty? ? '' : token.shift.join
155
157
  params = {}
156
- token.map do |param|
157
- pn, pv = param.to_s.split(/=/, 2)
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].to_s
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.to_s.split(/@/, 2)
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+/nmo) then
238
+ if s = @ss.scan(/\s+/) then
237
239
  # ignore
238
- elsif s = @ss.scan(/\(/nmo) then
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*\"/nmo) ||
247
- @ss.scan(/\[(\s*(\\[#{TEXT_RE}]|[#{DTEXT_RE}]))*\s*\]/nmo) ||
248
- @ss.scan(/[#{ATEXT_RE}]+/no)
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(/./no)
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]+/nmo) then
263
+ if s = @ss.scan(/[\s]+/) then
262
264
  # ignore blank
263
- elsif s = @ss.scan(/\(/nmo) then
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]*\"/nmo)
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\(\;]+/nmo)
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 racc 1.4.5
4
- # from racc grammer file "lib/mailparser/rfc2045/parser.y".
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 <<'..end lib/mailparser/rfc2045/parser.y modeval..idcdf01fc9ea', 'lib/mailparser/rfc2045/parser.y', 62
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
- ..end lib/mailparser/rfc2045/parser.y modeval..idcdf01fc9ea
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
- 28, 8, 10, 26, 1, 3, 4, 13, 14, 15,
70
- 7, 18, 19, 21, 23, 25, 16 ]
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, 6, 8,
74
- 1, 14, 16, 20, 21, 22, 13 ]
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, 2, 1, -6, 1, nil, 3, nil, 9, nil,
78
- nil, nil, nil, 9, 3, nil, 6, nil, nil, nil,
79
- 4, 6, 5, nil, nil, -8, nil, nil, 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, -16, -2,
83
- -7, -5, -3, -16, -16, 29, -16, -10, -9, -6,
84
- -4, -16, -16, -13, -11, -16, -15, -12, -14 ]
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
- 2, 5, 9, 12, 6, 17, 20, 11, 24, 22,
88
- 27 ]
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, 0, -1, -1, 3, -9, -11, 4, -13,
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
- racc_token_table = {
103
- false => 0,
104
- Object.new => 1,
105
- :CONTENT_TYPE => 2,
106
- :CONTENT_TRANSFER_ENCODING => 3,
107
- :MIME_VERSION => 4,
108
- "/" => 5,
109
- :DIGIT => 6,
110
- "." => 7,
111
- :TOKEN => 8,
112
- ";" => 9,
113
- "=" => 10,
114
- :QUOTED_STRING => 11 }
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
- racc_use_result_var = false
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
- racc_action_table,
122
- racc_action_check,
123
- racc_action_default,
124
- racc_action_pointer,
125
- racc_goto_table,
126
- racc_goto_check,
127
- racc_goto_default,
128
- racc_goto_pointer,
129
- racc_nt_base,
130
- racc_reduce_table,
131
- racc_token_table,
132
- racc_shift_n,
133
- racc_reduce_n,
134
- racc_use_result_var ]
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
- '$end',
138
- 'error',
139
- 'CONTENT_TYPE',
140
- 'CONTENT_TRANSFER_ENCODING',
141
- 'MIME_VERSION',
142
- '"/"',
143
- 'DIGIT',
144
- '"."',
145
- 'TOKEN',
146
- '";"',
147
- '"="',
148
- 'QUOTED_STRING',
149
- '$start',
150
- 'all',
151
- 'content_type',
152
- 'content_transfer_encoding',
153
- 'mime_version',
154
- 'type',
155
- 'subtype',
156
- 'parameter_list',
157
- 'mechanism',
158
- 'parameter',
159
- 'attribute',
160
- 'value']
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
- ##### racc system variables end #####
160
+ ##### State transition tables end #####
165
161
 
166
- # reduce 0 omitted
162
+ # reduce 0 omitted
167
163
 
168
- module_eval <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 9
169
- def _reduce_1( val, _values)
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 <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 11
175
- def _reduce_2( val, _values)
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 <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 13
181
- def _reduce_3( val, _values)
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 <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 19
187
- def _reduce_4( val, _values)
188
- ContentType.new(val[0], val[2], val[3])
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 <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 24
193
- def _reduce_5( val, _values)
194
- ContentTransferEncoding.new(val[0])
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 <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 31
199
- def _reduce_6( val, _values)
200
- val.join
196
+ module_eval(<<'.,.,', 'parser.y', 29)
197
+ def _reduce_6(val, _values)
198
+ val.join
199
+
201
200
  end
202
201
  .,.,
203
202
 
204
- # reduce 7 omitted
203
+ # reduce 7 omitted
205
204
 
206
- # reduce 8 omitted
205
+ # reduce 8 omitted
207
206
 
208
- # reduce 9 omitted
207
+ # reduce 9 omitted
209
208
 
210
- module_eval <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 42
211
- def _reduce_10( val, _values)
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 <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 49
217
- def _reduce_11( val, _values)
218
- pn, pv = val[2]
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 <<'.,.,', 'lib/mailparser/rfc2045/parser.y', 54
226
- def _reduce_12( val, _values)
227
- [val[0].downcase, val[2]]
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
- # reduce 13 omitted
233
+ # reduce 13 omitted
232
234
 
233
- # reduce 14 omitted
235
+ # reduce 14 omitted
234
236
 
235
- # reduce 15 omitted
237
+ # reduce 15 omitted
236
238
 
237
- def _reduce_none( val, _values)
239
+ def _reduce_none(val, _values)
238
240
  val[0]
239
- end
241
+ end
240
242
 
241
243
  end # class Parser
242
-
243
- end # module RFC2045
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*\(/nmo)
22
+ when s = @ss.scan(/\s*\(/)
22
23
  s << cfws(@ss)
23
24
  next
24
- when s = @ss.scan(/\s+/nmo)
25
+ when s = @ss.scan(/\s+/)
25
26
  next
26
- when s = @ss.scan(/\"(\s*(\\[#{TEXT_RE}]|[#{QTEXT_RE}]))*\s*\"/nmo)
27
- yield :QUOTED_STRING, s
28
- when s = @ss.scan(/[#{TOKEN_RE}]+/no)
29
- yield :TOKEN, s
30
- when s = @ss.scan(/./no)
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*\(/nmo)
41
+ when s = @ss.scan(/\s*\(/)
41
42
  s << cfws(@ss)
42
43
  next
43
- when s = @ss.scan(/\s+/nmo)
44
+ when s = @ss.scan(/\s+/)
44
45
  next
45
- when s = @ss.scan(/\d+/no)
46
- yield :DIGIT, s
47
- when s = @ss.scan(/./no)
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
@@ -1,3 +1,4 @@
1
+ # coding: ascii-8bit
1
2
  # Copyright (C) 2006-2010 TOMITA Masahiro
2
3
  # mailto:tommy@tmtm.org
3
4