mail 2.6.6 → 2.7.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +25 -6
  3. data/Dependencies.txt +0 -1
  4. data/Gemfile +5 -8
  5. data/MIT-LICENSE +1 -1
  6. data/README.md +22 -11
  7. data/Rakefile +0 -6
  8. data/lib/mail.rb +2 -10
  9. data/lib/mail/attachments_list.rb +3 -2
  10. data/lib/mail/body.rb +3 -3
  11. data/lib/mail/core_extensions/smtp.rb +19 -16
  12. data/lib/mail/core_extensions/string.rb +0 -4
  13. data/lib/mail/elements/address.rb +9 -4
  14. data/lib/mail/elements/address_list.rb +10 -18
  15. data/lib/mail/elements/content_disposition_element.rb +8 -15
  16. data/lib/mail/elements/content_location_element.rb +5 -10
  17. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  18. data/lib/mail/elements/content_type_element.rb +8 -19
  19. data/lib/mail/elements/date_time_element.rb +6 -14
  20. data/lib/mail/elements/envelope_from_element.rb +14 -21
  21. data/lib/mail/elements/message_ids_element.rb +8 -12
  22. data/lib/mail/elements/mime_version_element.rb +6 -14
  23. data/lib/mail/elements/phrase_list.rb +6 -9
  24. data/lib/mail/elements/received_element.rb +9 -15
  25. data/lib/mail/encodings.rb +12 -14
  26. data/lib/mail/field.rb +7 -4
  27. data/lib/mail/fields/common/parameter_hash.rb +1 -1
  28. data/lib/mail/fields/content_type_field.rb +2 -7
  29. data/lib/mail/fields/unstructured_field.rb +2 -2
  30. data/lib/mail/header.rb +1 -0
  31. data/lib/mail/message.rb +23 -25
  32. data/lib/mail/multibyte.rb +51 -0
  33. data/lib/mail/multibyte/chars.rb +27 -27
  34. data/lib/mail/network/delivery_methods/exim.rb +10 -6
  35. data/lib/mail/network/delivery_methods/sendmail.rb +2 -6
  36. data/lib/mail/network/delivery_methods/smtp.rb +14 -6
  37. data/lib/mail/parsers.rb +16 -24
  38. data/lib/mail/parsers/address_lists_parser.rb +15321 -112
  39. data/lib/mail/parsers/address_lists_parser.rl +166 -0
  40. data/lib/mail/parsers/content_disposition_parser.rb +698 -55
  41. data/lib/mail/parsers/content_disposition_parser.rl +76 -0
  42. data/lib/mail/parsers/content_location_parser.rb +565 -23
  43. data/lib/mail/parsers/content_location_parser.rl +65 -0
  44. data/lib/mail/parsers/content_transfer_encoding_parser.rb +410 -22
  45. data/lib/mail/parsers/content_transfer_encoding_parser.rl +58 -0
  46. data/lib/mail/parsers/content_type_parser.rb +841 -54
  47. data/lib/mail/parsers/content_type_parser.rl +77 -0
  48. data/lib/mail/parsers/date_time_parser.rb +773 -26
  49. data/lib/mail/parsers/date_time_parser.rl +56 -0
  50. data/lib/mail/parsers/envelope_from_parser.rb +2051 -36
  51. data/lib/mail/parsers/envelope_from_parser.rl +76 -0
  52. data/lib/mail/parsers/message_ids_parser.rb +1494 -25
  53. data/lib/mail/parsers/message_ids_parser.rl +76 -0
  54. data/lib/mail/parsers/mime_version_parser.rb +393 -26
  55. data/lib/mail/parsers/mime_version_parser.rl +55 -0
  56. data/lib/mail/parsers/phrase_lists_parser.rb +529 -19
  57. data/lib/mail/parsers/phrase_lists_parser.rl +77 -0
  58. data/lib/mail/parsers/received_parser.rb +4711 -38
  59. data/lib/mail/parsers/received_parser.rl +78 -0
  60. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +12 -0
  61. data/lib/mail/parsers/rfc2045_content_type.rl +24 -0
  62. data/lib/mail/parsers/rfc2045_mime.rl +15 -0
  63. data/lib/mail/parsers/rfc2183_content_disposition.rl +14 -0
  64. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +16 -0
  65. data/lib/mail/parsers/rfc5322.rl +57 -0
  66. data/lib/mail/parsers/rfc5322_address.rl +70 -0
  67. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +7 -1
  68. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +56 -0
  69. data/lib/mail/part.rb +1 -1
  70. data/lib/mail/parts_list.rb +5 -6
  71. data/lib/mail/utilities.rb +4 -2
  72. data/lib/mail/version.rb +3 -3
  73. data/lib/mail/version_specific/ruby_1_8.rb +28 -2
  74. data/lib/mail/version_specific/ruby_1_9.rb +48 -8
  75. metadata +28 -45
  76. data/lib/mail/core_extensions/string/access.rb +0 -146
  77. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  78. data/lib/mail/parsers/ragel.rb +0 -18
  79. data/lib/mail/parsers/ragel/common.rl +0 -185
  80. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  81. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  82. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  83. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  84. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  85. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  86. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  87. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  88. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  89. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  90. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  91. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  92. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  93. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  94. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  95. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  96. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  97. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  98. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  99. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  100. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  101. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  102. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  103. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  104. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  105. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+ require 'mail/utilities'
3
+
4
+ %%{
5
+ machine content_transfer_encoding;
6
+
7
+ action encoding_s { encoding_s = p }
8
+ action encoding_e { content_transfer_encoding.encoding = data[encoding_s..(p-1)].downcase }
9
+
10
+ # No-op actions
11
+ action comment_e { }
12
+ action comment_s { }
13
+ action phrase_e { }
14
+ action phrase_s { }
15
+ action qstr_e { }
16
+ action qstr_s { }
17
+ action param_attr_e { }
18
+ action param_attr_s { }
19
+ action param_val_e { }
20
+ action param_val_s { }
21
+ action main_type_e { }
22
+ action main_type_s { }
23
+ action sub_type_e { }
24
+ action sub_type_s { }
25
+
26
+ include rfc2045_content_transfer_encoding "rfc2045_content_transfer_encoding.rl";
27
+ main := content_transfer_encoding;
28
+ }%%
29
+
30
+ module Mail::Parsers
31
+ module ContentTransferEncodingParser
32
+ ContentTransferEncodingStruct = Struct.new(:encoding, :error)
33
+
34
+ %%write data noprefix;
35
+
36
+ def self.parse(data)
37
+ content_transfer_encoding = ContentTransferEncodingStruct.new('')
38
+ return content_transfer_encoding if Mail::Utilities.blank?(data)
39
+
40
+ # Parser state
41
+ encoding_s = nil
42
+
43
+ # 5.1 Variables Used by Ragel
44
+ p = 0
45
+ eof = pe = data.length
46
+ stack = []
47
+
48
+ %%write init;
49
+ %%write exec;
50
+
51
+ if p != eof || cs < %%{ write first_final; }%%
52
+ raise Mail::Field::ParseError.new(Mail::ContentTransferEncodingElement, data, "Only able to parse up to #{data[0..p]}")
53
+ end
54
+
55
+ content_transfer_encoding
56
+ end
57
+ end
58
+ end
@@ -1,66 +1,853 @@
1
+
1
2
  # frozen_string_literal: true
3
+ require 'mail/utilities'
4
+
5
+
6
+
7
+
2
8
  module Mail::Parsers
3
- class ContentTypeParser
4
- include Mail::Utilities
9
+ module ContentTypeParser
10
+ ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
5
11
 
6
- def parse(s)
7
- actions, error = Ragel.parse(:content_type, s)
8
- if error
9
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, error)
10
- end
12
+
13
+ class << self
14
+ attr_accessor :_trans_keys
15
+ private :_trans_keys, :_trans_keys=
16
+ end
17
+ self._trans_keys = [
18
+ 0, 0, 33, 126, 33, 126,
19
+ 33, 126, 9, 126, 10,
20
+ 10, 9, 32, 33, 126,
21
+ 9, 126, 9, 40, 10, 10,
22
+ 9, 32, 1, 127, 1,
23
+ 127, 10, 10, 9, 32,
24
+ 10, 10, 9, 32, 9, 126,
25
+ 9, 126, 10, 10, 9,
26
+ 32, 9, 126, 0, 127,
27
+ 9, 40, 10, 10, 9, 32,
28
+ 9, 126, 1, 127, 1,
29
+ 127, 10, 10, 9, 32,
30
+ -128, -1, 9, 126, 9, 59,
31
+ 9, 126, 9, 126, 9,
32
+ 126, 9, 126, 9, 126,
33
+ 0, 0, 0
34
+ ]
35
+
36
+ class << self
37
+ attr_accessor :_key_spans
38
+ private :_key_spans, :_key_spans=
39
+ end
40
+ self._key_spans = [
41
+ 0, 94, 94, 94, 118, 1, 24, 94,
42
+ 118, 32, 1, 24, 127, 127, 1, 24,
43
+ 1, 24, 118, 118, 1, 24, 118, 128,
44
+ 32, 1, 24, 118, 127, 127, 1, 24,
45
+ 128, 118, 51, 118, 118, 118, 118, 118,
46
+ 0
47
+ ]
48
+
49
+ class << self
50
+ attr_accessor :_index_offsets
51
+ private :_index_offsets, :_index_offsets=
52
+ end
53
+ self._index_offsets = [
54
+ 0, 0, 95, 190, 285, 404, 406, 431,
55
+ 526, 645, 678, 680, 705, 833, 961, 963,
56
+ 988, 990, 1015, 1134, 1253, 1255, 1280, 1399,
57
+ 1528, 1561, 1563, 1588, 1707, 1835, 1963, 1965,
58
+ 1990, 2119, 2238, 2290, 2409, 2528, 2647, 2766,
59
+ 2885
60
+ ]
61
+
62
+ class << self
63
+ attr_accessor :_indicies
64
+ private :_indicies, :_indicies=
65
+ end
66
+ self._indicies = [
67
+ 0, 0, 0, 0, 0, 0, 0, 1,
68
+ 1, 0, 0, 0, 0, 0, 1, 0,
69
+ 0, 0, 0, 0, 0, 0, 0, 0,
70
+ 0, 1, 1, 1, 1, 1, 1, 1,
71
+ 0, 0, 0, 0, 0, 0, 0, 0,
72
+ 0, 0, 0, 0, 0, 0, 0, 0,
73
+ 0, 0, 0, 0, 0, 0, 0, 0,
74
+ 0, 0, 1, 1, 1, 0, 0, 0,
75
+ 0, 0, 0, 0, 0, 0, 0, 0,
76
+ 0, 0, 0, 0, 0, 0, 0, 0,
77
+ 0, 0, 0, 0, 0, 0, 0, 0,
78
+ 0, 0, 0, 0, 0, 0, 1, 2,
79
+ 2, 2, 2, 2, 2, 2, 1, 1,
80
+ 2, 2, 2, 2, 2, 3, 2, 2,
81
+ 2, 2, 2, 2, 2, 2, 2, 2,
82
+ 1, 1, 1, 1, 1, 1, 1, 2,
83
+ 2, 2, 2, 2, 2, 2, 2, 2,
84
+ 2, 2, 2, 2, 2, 2, 2, 2,
85
+ 2, 2, 2, 2, 2, 2, 2, 2,
86
+ 2, 1, 1, 1, 2, 2, 2, 2,
87
+ 2, 2, 2, 2, 2, 2, 2, 2,
88
+ 2, 2, 2, 2, 2, 2, 2, 2,
89
+ 2, 2, 2, 2, 2, 2, 2, 2,
90
+ 2, 2, 2, 2, 2, 1, 4, 4,
91
+ 4, 4, 4, 4, 4, 1, 1, 4,
92
+ 4, 4, 4, 4, 1, 4, 4, 4,
93
+ 4, 4, 4, 4, 4, 4, 4, 1,
94
+ 1, 1, 1, 1, 1, 1, 4, 4,
95
+ 4, 4, 4, 4, 4, 4, 4, 4,
96
+ 4, 4, 4, 4, 4, 4, 4, 4,
97
+ 4, 4, 4, 4, 4, 4, 4, 4,
98
+ 1, 1, 1, 4, 4, 4, 4, 4,
99
+ 4, 4, 4, 4, 4, 4, 4, 4,
100
+ 4, 4, 4, 4, 4, 4, 4, 4,
101
+ 4, 4, 4, 4, 4, 4, 4, 4,
102
+ 4, 4, 4, 4, 1, 5, 1, 1,
103
+ 1, 6, 1, 1, 1, 1, 1, 1,
104
+ 1, 1, 1, 1, 1, 1, 1, 1,
105
+ 1, 1, 1, 1, 5, 7, 7, 7,
106
+ 7, 7, 7, 7, 8, 1, 7, 7,
107
+ 7, 7, 7, 1, 7, 7, 7, 7,
108
+ 7, 7, 7, 7, 7, 7, 1, 9,
109
+ 1, 1, 1, 1, 1, 7, 7, 7,
110
+ 7, 7, 7, 7, 7, 7, 7, 7,
111
+ 7, 7, 7, 7, 7, 7, 7, 7,
112
+ 7, 7, 7, 7, 7, 7, 7, 1,
113
+ 1, 1, 7, 7, 7, 7, 7, 7,
114
+ 7, 7, 7, 7, 7, 7, 7, 7,
115
+ 7, 7, 7, 7, 7, 7, 7, 7,
116
+ 7, 7, 7, 7, 7, 7, 7, 7,
117
+ 7, 7, 7, 1, 10, 1, 5, 1,
118
+ 1, 1, 1, 1, 1, 1, 1, 1,
119
+ 1, 1, 1, 1, 1, 1, 1, 1,
120
+ 1, 1, 1, 1, 1, 5, 1, 11,
121
+ 11, 11, 11, 11, 11, 11, 1, 1,
122
+ 11, 11, 11, 11, 11, 1, 11, 11,
123
+ 11, 11, 11, 11, 11, 11, 11, 11,
124
+ 1, 1, 1, 12, 1, 1, 1, 11,
125
+ 11, 11, 11, 11, 11, 11, 11, 11,
126
+ 11, 11, 11, 11, 11, 11, 11, 11,
127
+ 11, 11, 11, 11, 11, 11, 11, 11,
128
+ 11, 1, 1, 1, 11, 11, 11, 11,
129
+ 11, 11, 11, 11, 11, 11, 11, 11,
130
+ 11, 11, 11, 11, 11, 11, 11, 11,
131
+ 11, 11, 11, 11, 11, 11, 11, 11,
132
+ 11, 11, 11, 11, 11, 1, 13, 1,
133
+ 1, 1, 14, 1, 1, 1, 1, 1,
134
+ 1, 1, 1, 1, 1, 1, 1, 1,
135
+ 1, 1, 1, 1, 1, 13, 15, 16,
136
+ 15, 15, 15, 15, 15, 17, 1, 15,
137
+ 15, 15, 15, 15, 1, 15, 15, 15,
138
+ 15, 15, 15, 15, 15, 15, 15, 1,
139
+ 1, 1, 15, 1, 1, 1, 15, 15,
140
+ 15, 15, 15, 15, 15, 15, 15, 15,
141
+ 15, 15, 15, 15, 15, 15, 15, 15,
142
+ 15, 15, 15, 15, 15, 15, 15, 15,
143
+ 1, 1, 1, 15, 15, 15, 15, 15,
144
+ 15, 15, 15, 15, 15, 15, 15, 15,
145
+ 15, 15, 15, 15, 15, 15, 15, 15,
146
+ 15, 15, 15, 15, 15, 15, 15, 15,
147
+ 15, 15, 15, 15, 1, 18, 1, 1,
148
+ 1, 19, 1, 1, 1, 1, 1, 1,
149
+ 1, 1, 1, 1, 1, 1, 1, 1,
150
+ 1, 1, 1, 1, 18, 1, 20, 1,
151
+ 1, 1, 1, 1, 21, 1, 22, 1,
152
+ 18, 1, 1, 1, 1, 1, 1, 1,
153
+ 1, 1, 1, 1, 1, 1, 1, 1,
154
+ 1, 1, 1, 1, 1, 1, 1, 18,
155
+ 1, 23, 23, 23, 23, 23, 23, 23,
156
+ 23, 23, 1, 23, 23, 24, 23, 23,
157
+ 23, 23, 23, 23, 23, 23, 23, 23,
158
+ 23, 23, 23, 23, 23, 23, 23, 23,
159
+ 23, 23, 25, 23, 23, 23, 23, 23,
160
+ 23, 23, 23, 23, 23, 23, 23, 23,
161
+ 23, 23, 23, 23, 23, 23, 23, 23,
162
+ 23, 23, 23, 23, 23, 23, 23, 23,
163
+ 23, 23, 23, 23, 23, 23, 23, 23,
164
+ 23, 23, 23, 23, 23, 23, 23, 23,
165
+ 23, 23, 23, 23, 23, 23, 23, 23,
166
+ 23, 23, 23, 23, 26, 23, 23, 23,
167
+ 23, 23, 23, 23, 23, 23, 23, 23,
168
+ 23, 23, 23, 23, 23, 23, 23, 23,
169
+ 23, 23, 23, 23, 23, 23, 23, 23,
170
+ 23, 23, 23, 23, 23, 23, 23, 23,
171
+ 1, 27, 27, 27, 27, 27, 27, 27,
172
+ 27, 27, 1, 27, 27, 28, 27, 27,
173
+ 27, 27, 27, 27, 27, 27, 27, 27,
174
+ 27, 27, 27, 27, 27, 27, 27, 27,
175
+ 27, 27, 29, 27, 27, 27, 27, 27,
176
+ 27, 27, 27, 27, 27, 27, 27, 27,
177
+ 27, 27, 27, 27, 27, 27, 27, 27,
178
+ 27, 27, 27, 27, 27, 27, 27, 27,
179
+ 27, 27, 27, 27, 27, 27, 27, 27,
180
+ 27, 27, 27, 27, 27, 27, 27, 27,
181
+ 27, 27, 27, 27, 27, 27, 27, 27,
182
+ 27, 27, 27, 27, 30, 27, 27, 27,
183
+ 27, 27, 27, 27, 27, 27, 27, 27,
184
+ 27, 27, 27, 27, 27, 27, 27, 27,
185
+ 27, 27, 27, 27, 27, 27, 27, 27,
186
+ 27, 27, 27, 27, 27, 27, 27, 27,
187
+ 1, 31, 1, 27, 1, 1, 1, 1,
188
+ 1, 1, 1, 1, 1, 1, 1, 1,
189
+ 1, 1, 1, 1, 1, 1, 1, 1,
190
+ 1, 1, 27, 1, 32, 1, 33, 1,
191
+ 1, 1, 1, 1, 1, 1, 1, 1,
192
+ 1, 1, 1, 1, 1, 1, 1, 1,
193
+ 1, 1, 1, 1, 1, 33, 1, 34,
194
+ 1, 1, 1, 35, 1, 1, 1, 1,
195
+ 1, 1, 1, 1, 1, 1, 1, 1,
196
+ 1, 1, 1, 1, 1, 1, 34, 7,
197
+ 7, 7, 7, 7, 7, 7, 36, 1,
198
+ 7, 7, 7, 7, 7, 1, 7, 7,
199
+ 7, 7, 7, 7, 7, 7, 7, 7,
200
+ 1, 9, 1, 1, 1, 1, 1, 7,
201
+ 7, 7, 7, 7, 7, 7, 7, 7,
202
+ 7, 7, 7, 7, 7, 7, 7, 7,
203
+ 7, 7, 7, 7, 7, 7, 7, 7,
204
+ 7, 1, 1, 1, 7, 7, 7, 7,
205
+ 7, 7, 7, 7, 7, 7, 7, 7,
206
+ 7, 7, 7, 7, 7, 7, 7, 7,
207
+ 7, 7, 7, 7, 7, 7, 7, 7,
208
+ 7, 7, 7, 7, 7, 1, 34, 1,
209
+ 1, 1, 35, 1, 1, 1, 1, 1,
210
+ 1, 1, 1, 1, 1, 1, 1, 1,
211
+ 1, 1, 1, 1, 1, 34, 7, 7,
212
+ 7, 7, 7, 7, 7, 36, 1, 7,
213
+ 7, 7, 7, 7, 1, 7, 7, 7,
214
+ 7, 7, 7, 7, 7, 7, 7, 1,
215
+ 1, 1, 1, 1, 1, 1, 7, 7,
216
+ 7, 7, 7, 7, 7, 7, 7, 7,
217
+ 7, 7, 7, 7, 7, 7, 7, 7,
218
+ 7, 7, 7, 7, 7, 7, 7, 7,
219
+ 1, 1, 1, 7, 7, 7, 7, 7,
220
+ 7, 7, 7, 7, 7, 7, 7, 7,
221
+ 7, 7, 7, 7, 7, 7, 7, 7,
222
+ 7, 7, 7, 7, 7, 7, 7, 7,
223
+ 7, 7, 7, 7, 1, 37, 1, 34,
224
+ 1, 1, 1, 1, 1, 1, 1, 1,
225
+ 1, 1, 1, 1, 1, 1, 1, 1,
226
+ 1, 1, 1, 1, 1, 1, 34, 1,
227
+ 38, 1, 1, 1, 39, 1, 1, 1,
228
+ 1, 1, 1, 1, 1, 1, 1, 1,
229
+ 1, 1, 1, 1, 1, 1, 1, 38,
230
+ 40, 40, 40, 40, 40, 40, 40, 41,
231
+ 1, 40, 40, 40, 40, 40, 1, 40,
232
+ 40, 40, 40, 40, 40, 40, 40, 40,
233
+ 40, 1, 1, 1, 1, 1, 1, 1,
234
+ 40, 40, 40, 40, 40, 40, 40, 40,
235
+ 40, 40, 40, 40, 40, 40, 40, 40,
236
+ 40, 40, 40, 40, 40, 40, 40, 40,
237
+ 40, 40, 1, 1, 1, 40, 40, 40,
238
+ 40, 40, 40, 40, 40, 40, 40, 40,
239
+ 40, 40, 40, 40, 40, 40, 40, 40,
240
+ 40, 40, 40, 40, 40, 40, 40, 40,
241
+ 40, 40, 40, 40, 40, 40, 1, 27,
242
+ 27, 27, 27, 27, 27, 27, 27, 27,
243
+ 27, 27, 27, 27, 27, 27, 27, 27,
244
+ 27, 27, 27, 27, 27, 27, 27, 27,
245
+ 27, 27, 27, 27, 27, 27, 27, 27,
246
+ 27, 27, 27, 27, 27, 27, 27, 27,
247
+ 27, 27, 27, 27, 27, 27, 27, 27,
248
+ 27, 27, 27, 27, 27, 27, 27, 27,
249
+ 27, 27, 27, 27, 27, 27, 27, 27,
250
+ 27, 27, 27, 27, 27, 27, 27, 27,
251
+ 27, 27, 27, 27, 27, 27, 27, 27,
252
+ 27, 27, 27, 27, 27, 27, 27, 27,
253
+ 27, 27, 27, 27, 27, 27, 27, 27,
254
+ 27, 27, 27, 27, 27, 27, 27, 27,
255
+ 27, 27, 27, 27, 27, 27, 27, 27,
256
+ 27, 27, 27, 27, 27, 27, 27, 27,
257
+ 27, 27, 27, 27, 27, 27, 27, 1,
258
+ 42, 1, 1, 1, 43, 1, 1, 1,
259
+ 1, 1, 1, 1, 1, 1, 1, 1,
260
+ 1, 1, 1, 1, 1, 1, 1, 42,
261
+ 1, 44, 1, 1, 1, 1, 1, 45,
262
+ 1, 46, 1, 47, 1, 1, 1, 1,
263
+ 1, 1, 1, 1, 1, 1, 1, 1,
264
+ 1, 1, 1, 1, 1, 1, 1, 1,
265
+ 1, 1, 47, 1, 48, 1, 1, 1,
266
+ 49, 1, 1, 1, 1, 1, 1, 1,
267
+ 1, 1, 1, 1, 1, 1, 1, 1,
268
+ 1, 1, 1, 48, 40, 40, 40, 40,
269
+ 40, 40, 40, 50, 1, 40, 40, 40,
270
+ 40, 40, 1, 40, 40, 40, 40, 40,
271
+ 40, 40, 40, 40, 40, 1, 51, 1,
272
+ 1, 1, 1, 1, 40, 40, 40, 40,
273
+ 40, 40, 40, 40, 40, 40, 40, 40,
274
+ 40, 40, 40, 40, 40, 40, 40, 40,
275
+ 40, 40, 40, 40, 40, 40, 1, 1,
276
+ 1, 40, 40, 40, 40, 40, 40, 40,
277
+ 40, 40, 40, 40, 40, 40, 40, 40,
278
+ 40, 40, 40, 40, 40, 40, 40, 40,
279
+ 40, 40, 40, 40, 40, 40, 40, 40,
280
+ 40, 40, 1, 52, 52, 52, 52, 52,
281
+ 52, 52, 52, 52, 1, 52, 52, 53,
282
+ 52, 52, 52, 52, 52, 52, 52, 52,
283
+ 52, 52, 52, 52, 52, 52, 52, 52,
284
+ 52, 52, 52, 52, 52, 52, 52, 52,
285
+ 52, 52, 54, 55, 52, 52, 52, 52,
286
+ 52, 52, 52, 52, 52, 52, 52, 52,
287
+ 52, 52, 52, 52, 52, 52, 52, 52,
288
+ 52, 52, 52, 52, 52, 52, 52, 52,
289
+ 52, 52, 52, 52, 52, 52, 52, 52,
290
+ 52, 52, 52, 52, 52, 52, 52, 52,
291
+ 52, 52, 52, 52, 52, 52, 56, 52,
292
+ 52, 52, 52, 52, 52, 52, 52, 52,
293
+ 52, 52, 52, 52, 52, 52, 52, 52,
294
+ 52, 52, 52, 52, 52, 52, 52, 52,
295
+ 52, 52, 52, 52, 52, 52, 52, 52,
296
+ 52, 52, 1, 57, 57, 57, 57, 57,
297
+ 57, 57, 57, 57, 1, 57, 57, 58,
298
+ 57, 57, 57, 57, 57, 57, 57, 57,
299
+ 57, 57, 57, 57, 57, 57, 57, 57,
300
+ 57, 57, 57, 57, 57, 57, 57, 57,
301
+ 57, 57, 59, 60, 57, 57, 57, 57,
302
+ 57, 57, 57, 57, 57, 57, 57, 57,
303
+ 57, 57, 57, 57, 57, 57, 57, 57,
304
+ 57, 57, 57, 57, 57, 57, 57, 57,
305
+ 57, 57, 57, 57, 57, 57, 57, 57,
306
+ 57, 57, 57, 57, 57, 57, 57, 57,
307
+ 57, 57, 57, 57, 57, 57, 61, 57,
308
+ 57, 57, 57, 57, 57, 57, 57, 57,
309
+ 57, 57, 57, 57, 57, 57, 57, 57,
310
+ 57, 57, 57, 57, 57, 57, 57, 57,
311
+ 57, 57, 57, 57, 57, 57, 57, 57,
312
+ 57, 57, 1, 62, 1, 57, 1, 1,
313
+ 1, 1, 1, 1, 1, 1, 1, 1,
314
+ 1, 1, 1, 1, 1, 1, 1, 1,
315
+ 1, 1, 1, 1, 57, 1, 1, 1,
316
+ 1, 1, 1, 1, 1, 1, 1, 1,
317
+ 1, 1, 1, 1, 1, 1, 1, 1,
318
+ 1, 1, 1, 1, 1, 1, 1, 1,
319
+ 1, 1, 1, 1, 1, 1, 1, 1,
320
+ 1, 1, 1, 1, 1, 1, 1, 1,
321
+ 1, 1, 1, 1, 1, 1, 1, 1,
322
+ 1, 1, 1, 1, 1, 1, 1, 1,
323
+ 1, 1, 1, 1, 1, 1, 1, 1,
324
+ 1, 1, 1, 1, 1, 1, 1, 1,
325
+ 1, 1, 1, 1, 1, 1, 1, 1,
326
+ 1, 1, 1, 1, 1, 1, 1, 1,
327
+ 1, 1, 1, 1, 1, 1, 1, 1,
328
+ 1, 1, 1, 1, 1, 1, 1, 1,
329
+ 1, 1, 1, 1, 1, 1, 1, 1,
330
+ 1, 1, 1, 1, 1, 1, 1, 1,
331
+ 1, 1, 1, 1, 1, 1, 57, 63,
332
+ 1, 1, 1, 64, 1, 1, 1, 1,
333
+ 1, 1, 1, 1, 1, 1, 1, 1,
334
+ 1, 1, 1, 1, 1, 1, 63, 65,
335
+ 65, 65, 65, 65, 65, 65, 66, 1,
336
+ 65, 65, 65, 65, 65, 1, 65, 65,
337
+ 65, 65, 65, 65, 65, 65, 65, 65,
338
+ 1, 67, 1, 1, 1, 1, 1, 65,
339
+ 65, 65, 65, 65, 65, 65, 65, 65,
340
+ 65, 65, 65, 65, 65, 65, 65, 65,
341
+ 65, 65, 65, 65, 65, 65, 65, 65,
342
+ 65, 1, 1, 1, 65, 65, 65, 65,
343
+ 65, 65, 65, 65, 65, 65, 65, 65,
344
+ 65, 65, 65, 65, 65, 65, 65, 65,
345
+ 65, 65, 65, 65, 65, 65, 65, 65,
346
+ 65, 65, 65, 65, 65, 1, 68, 1,
347
+ 1, 1, 69, 1, 1, 1, 1, 1,
348
+ 1, 1, 1, 1, 1, 1, 1, 1,
349
+ 1, 1, 1, 1, 1, 68, 1, 1,
350
+ 1, 1, 1, 1, 1, 70, 1, 1,
351
+ 1, 1, 1, 1, 1, 1, 1, 1,
352
+ 1, 1, 1, 1, 1, 1, 1, 1,
353
+ 71, 1, 68, 1, 1, 1, 69, 1,
354
+ 1, 1, 1, 1, 1, 1, 1, 1,
355
+ 1, 1, 1, 1, 1, 1, 1, 1,
356
+ 1, 68, 7, 7, 7, 7, 7, 7,
357
+ 7, 70, 1, 7, 7, 7, 7, 7,
358
+ 1, 7, 7, 7, 7, 7, 7, 7,
359
+ 7, 7, 7, 1, 71, 1, 1, 1,
360
+ 1, 1, 7, 7, 7, 7, 7, 7,
361
+ 7, 7, 7, 7, 7, 7, 7, 7,
362
+ 7, 7, 7, 7, 7, 7, 7, 7,
363
+ 7, 7, 7, 7, 1, 1, 1, 7,
364
+ 7, 7, 7, 7, 7, 7, 7, 7,
365
+ 7, 7, 7, 7, 7, 7, 7, 7,
366
+ 7, 7, 7, 7, 7, 7, 7, 7,
367
+ 7, 7, 7, 7, 7, 7, 7, 7,
368
+ 1, 72, 1, 1, 1, 73, 1, 1,
369
+ 1, 1, 1, 1, 1, 1, 1, 1,
370
+ 1, 1, 1, 1, 1, 1, 1, 1,
371
+ 72, 40, 40, 40, 40, 40, 40, 40,
372
+ 74, 1, 40, 40, 40, 40, 40, 1,
373
+ 40, 40, 40, 40, 40, 40, 40, 40,
374
+ 40, 40, 1, 75, 1, 1, 1, 1,
375
+ 1, 40, 40, 40, 40, 40, 40, 40,
376
+ 40, 40, 40, 40, 40, 40, 40, 40,
377
+ 40, 40, 40, 40, 40, 40, 40, 40,
378
+ 40, 40, 40, 1, 1, 1, 40, 40,
379
+ 40, 40, 40, 40, 40, 40, 40, 40,
380
+ 40, 40, 40, 40, 40, 40, 40, 40,
381
+ 40, 40, 40, 40, 40, 40, 40, 40,
382
+ 40, 40, 40, 40, 40, 40, 40, 1,
383
+ 76, 1, 1, 1, 77, 1, 1, 1,
384
+ 1, 1, 1, 1, 1, 1, 1, 1,
385
+ 1, 1, 1, 1, 1, 1, 1, 76,
386
+ 78, 1, 78, 78, 78, 78, 78, 79,
387
+ 1, 78, 78, 78, 78, 78, 1, 78,
388
+ 78, 78, 78, 78, 78, 78, 78, 78,
389
+ 78, 1, 71, 1, 78, 1, 1, 1,
390
+ 78, 78, 78, 78, 78, 78, 78, 78,
391
+ 78, 78, 78, 78, 78, 78, 78, 78,
392
+ 78, 78, 78, 78, 78, 78, 78, 78,
393
+ 78, 78, 1, 1, 1, 78, 78, 78,
394
+ 78, 78, 78, 78, 78, 78, 78, 78,
395
+ 78, 78, 78, 78, 78, 78, 78, 78,
396
+ 78, 78, 78, 78, 78, 78, 78, 78,
397
+ 78, 78, 78, 78, 78, 78, 1, 47,
398
+ 1, 1, 1, 80, 1, 1, 1, 1,
399
+ 1, 1, 1, 1, 1, 1, 1, 1,
400
+ 1, 1, 1, 1, 1, 1, 47, 7,
401
+ 7, 7, 7, 7, 7, 7, 81, 1,
402
+ 7, 7, 7, 7, 7, 1, 7, 7,
403
+ 7, 7, 7, 7, 7, 7, 7, 7,
404
+ 1, 9, 1, 1, 1, 1, 1, 7,
405
+ 7, 7, 7, 7, 7, 7, 7, 7,
406
+ 7, 7, 7, 7, 7, 7, 7, 7,
407
+ 7, 7, 7, 7, 7, 7, 7, 7,
408
+ 7, 1, 1, 1, 7, 7, 7, 7,
409
+ 7, 7, 7, 7, 7, 7, 7, 7,
410
+ 7, 7, 7, 7, 7, 7, 7, 7,
411
+ 7, 7, 7, 7, 7, 7, 7, 7,
412
+ 7, 7, 7, 7, 7, 1, 82, 1,
413
+ 1, 1, 83, 1, 1, 1, 1, 1,
414
+ 1, 1, 1, 1, 1, 1, 1, 1,
415
+ 1, 1, 1, 1, 1, 82, 40, 40,
416
+ 40, 40, 40, 40, 40, 84, 1, 40,
417
+ 40, 40, 40, 40, 1, 40, 40, 40,
418
+ 40, 40, 40, 40, 40, 40, 40, 1,
419
+ 51, 1, 1, 1, 1, 1, 40, 40,
420
+ 40, 40, 40, 40, 40, 40, 40, 40,
421
+ 40, 40, 40, 40, 40, 40, 40, 40,
422
+ 40, 40, 40, 40, 40, 40, 40, 40,
423
+ 1, 1, 1, 40, 40, 40, 40, 40,
424
+ 40, 40, 40, 40, 40, 40, 40, 40,
425
+ 40, 40, 40, 40, 40, 40, 40, 40,
426
+ 40, 40, 40, 40, 40, 40, 40, 40,
427
+ 40, 40, 40, 40, 1, 1, 0
428
+ ]
429
+
430
+ class << self
431
+ attr_accessor :_trans_targs
432
+ private :_trans_targs, :_trans_targs=
433
+ end
434
+ self._trans_targs = [
435
+ 2, 0, 2, 3, 33, 4, 5, 7,
436
+ 27, 18, 6, 7, 8, 9, 10, 37,
437
+ 12, 24, 9, 10, 12, 24, 11, 13,
438
+ 14, 34, 23, 13, 14, 34, 23, 15,
439
+ 17, 35, 19, 20, 22, 21, 19, 20,
440
+ 7, 22, 9, 10, 12, 24, 26, 38,
441
+ 4, 5, 27, 18, 29, 30, 29, 40,
442
+ 32, 29, 30, 29, 40, 32, 31, 4,
443
+ 5, 33, 27, 18, 35, 16, 36, 18,
444
+ 35, 16, 36, 18, 38, 25, 37, 39,
445
+ 25, 39, 38, 25, 39
446
+ ]
447
+
448
+ class << self
449
+ attr_accessor :_trans_actions
450
+ private :_trans_actions, :_trans_actions=
451
+ end
452
+ self._trans_actions = [
453
+ 1, 0, 0, 2, 3, 0, 0, 4,
454
+ 5, 0, 0, 0, 6, 7, 7, 7,
455
+ 7, 8, 0, 0, 0, 5, 0, 9,
456
+ 9, 10, 9, 0, 0, 11, 0, 0,
457
+ 0, 0, 0, 0, 5, 0, 12, 12,
458
+ 13, 14, 12, 12, 12, 14, 0, 0,
459
+ 12, 12, 14, 12, 15, 15, 16, 17,
460
+ 15, 0, 0, 5, 18, 0, 0, 19,
461
+ 19, 0, 20, 19, 21, 21, 22, 21,
462
+ 23, 23, 24, 23, 21, 21, 0, 25,
463
+ 0, 5, 12, 12, 14
464
+ ]
465
+
466
+ class << self
467
+ attr_accessor :_eof_actions
468
+ private :_eof_actions, :_eof_actions=
469
+ end
470
+ self._eof_actions = [
471
+ 0, 0, 0, 0, 0, 0, 0, 0,
472
+ 0, 0, 0, 0, 0, 0, 0, 0,
473
+ 0, 0, 0, 0, 0, 0, 0, 0,
474
+ 0, 0, 0, 0, 0, 0, 0, 0,
475
+ 0, 19, 21, 21, 23, 21, 0, 12,
476
+ 0
477
+ ]
478
+
479
+ class << self
480
+ attr_accessor :start
481
+ end
482
+ self.start = 1;
483
+ class << self
484
+ attr_accessor :first_final
485
+ end
486
+ self.first_final = 33;
487
+ class << self
488
+ attr_accessor :error
489
+ end
490
+ self.error = 0;
491
+
492
+ class << self
493
+ attr_accessor :en_comment_tail
494
+ end
495
+ self.en_comment_tail = 28;
496
+ class << self
497
+ attr_accessor :en_main
498
+ end
499
+ self.en_main = 1;
11
500
 
12
- content_type = ContentTypeStruct.new(nil,nil,[])
13
501
 
14
- content_type.parameters = []
15
502
 
503
+ def self.parse(data)
504
+ return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
505
+ content_type = ContentTypeStruct.new(nil, nil, [])
506
+
507
+ # Parser state
16
508
  main_type_s = sub_type_s = param_attr_s = param_attr = nil
17
509
  qstr_s = qstr = param_val_s = nil
18
- actions.each_slice(2) do |action_id, p|
19
- action = Mail::Parsers::Ragel::ACTIONS[action_id]
20
- case action
21
-
22
- # Main Type
23
- when :main_type_s then main_type_s = p
24
- when :main_type_e then
25
- content_type.main_type = s[main_type_s..(p-1)]
26
- content_type.main_type.downcase!
27
-
28
- # Sub Type
29
- when :sub_type_s then sub_type_s = p
30
- when :sub_type_e
31
- content_type.sub_type = s[sub_type_s..(p-1)]
32
- content_type.sub_type.downcase!
33
-
34
- # Parameter Attribute
35
- when :param_attr_s then param_attr_s = p
36
- when :param_attr_e then param_attr = s[param_attr_s..(p-1)]
37
-
38
- # Quoted String.
39
- when :qstr_s then qstr_s = p
40
- when :qstr_e then qstr = s[qstr_s..(p-1)]
41
-
42
- # Parameter Value
43
- when :param_val_s then param_val_s = p
44
- when :param_val_e
45
- if param_attr.nil?
46
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "no attribute for value")
47
- end
48
-
49
- # Use quoted s value if one exists, otherwise use parameter value
50
- if qstr
51
- value = qstr
52
- else
53
- value = s[param_val_s..(p-1)]
54
- end
55
-
56
- content_type.parameters << { param_attr => value }
57
- param_attr = nil
58
- qstr = nil
59
-
60
- else
61
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "Failed to process unknown action: #{action}")
62
- end
510
+
511
+ # 5.1 Variables Used by Ragel
512
+ p = 0
513
+ eof = pe = data.length
514
+ stack = []
515
+
516
+
517
+ begin
518
+ p ||= 0
519
+ pe ||= data.length
520
+ cs = start
521
+ top = 0
522
+ end
523
+
524
+
525
+ begin
526
+ testEof = false
527
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
528
+ _goto_level = 0
529
+ _resume = 10
530
+ _eof_trans = 15
531
+ _again = 20
532
+ _test_eof = 30
533
+ _out = 40
534
+ while true
535
+ if _goto_level <= 0
536
+ if p == pe
537
+ _goto_level = _test_eof
538
+ next
539
+ end
540
+ if cs == 0
541
+ _goto_level = _out
542
+ next
543
+ end
544
+ end
545
+ if _goto_level <= _resume
546
+ _keys = cs << 1
547
+ _inds = _index_offsets[cs]
548
+ _slen = _key_spans[cs]
549
+ _wide = data[p].ord
550
+ _trans = if ( _slen > 0 &&
551
+ _trans_keys[_keys] <= _wide &&
552
+ _wide <= _trans_keys[_keys + 1]
553
+ ) then
554
+ _indicies[ _inds + _wide - _trans_keys[_keys] ]
555
+ else
556
+ _indicies[ _inds + _slen ]
557
+ end
558
+ cs = _trans_targs[_trans]
559
+ if _trans_actions[_trans] != 0
560
+ case _trans_actions[_trans]
561
+ when 1 then
562
+ begin
563
+ main_type_s = p end
564
+ when 2 then
565
+ begin
566
+ content_type.main_type = data[main_type_s..(p-1)].downcase end
567
+ when 3 then
568
+ begin
569
+ sub_type_s = p end
570
+ when 19 then
571
+ begin
572
+ content_type.sub_type = data[sub_type_s..(p-1)].downcase end
573
+ when 4 then
574
+ begin
575
+ param_attr_s = p end
576
+ when 6 then
577
+ begin
578
+ param_attr = data[param_attr_s..(p-1)] end
579
+ when 9 then
580
+ begin
581
+ qstr_s = p end
582
+ when 11 then
583
+ begin
584
+ qstr = data[qstr_s..(p-1)] end
585
+ when 7 then
586
+ begin
587
+ param_val_s = p end
588
+ when 21 then
589
+ begin
590
+
591
+ if param_attr.nil?
592
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
593
+ end
594
+
595
+ # Use quoted s value if one exists, otherwise use parameter value
596
+ value = qstr || data[param_val_s..(p-1)]
597
+
598
+ content_type.parameters << { param_attr => value }
599
+ param_attr = nil
600
+ qstr = nil
601
+ end
602
+ when 12 then
603
+ begin
604
+ end
605
+ when 15 then
606
+ begin
607
+ end
608
+ when 5 then
609
+ begin
610
+ begin
611
+ stack[top] = cs
612
+ top+= 1
613
+ cs = 28
614
+ _goto_level = _again
615
+ next
616
+ end
617
+ end
618
+ when 18 then
619
+ begin
620
+ begin
621
+ top -= 1
622
+ cs = stack[top]
623
+ _goto_level = _again
624
+ next
625
+ end
626
+ end
627
+ when 20 then
628
+ begin
629
+ content_type.sub_type = data[sub_type_s..(p-1)].downcase end
630
+ begin
631
+ begin
632
+ stack[top] = cs
633
+ top+= 1
634
+ cs = 28
635
+ _goto_level = _again
636
+ next
637
+ end
638
+ end
639
+ when 10 then
640
+ begin
641
+ qstr_s = p end
642
+ begin
643
+ qstr = data[qstr_s..(p-1)] end
644
+ when 8 then
645
+ begin
646
+ param_val_s = p end
647
+ begin
648
+ begin
649
+ stack[top] = cs
650
+ top+= 1
651
+ cs = 28
652
+ _goto_level = _again
653
+ next
654
+ end
655
+ end
656
+ when 25 then
657
+ begin
658
+
659
+ if param_attr.nil?
660
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
661
+ end
662
+
663
+ # Use quoted s value if one exists, otherwise use parameter value
664
+ value = qstr || data[param_val_s..(p-1)]
665
+
666
+ content_type.parameters << { param_attr => value }
667
+ param_attr = nil
668
+ qstr = nil
669
+ end
670
+ begin
671
+ begin
672
+ stack[top] = cs
673
+ top+= 1
674
+ cs = 28
675
+ _goto_level = _again
676
+ next
677
+ end
678
+ end
679
+ when 13 then
680
+ begin
681
+ end
682
+ begin
683
+ param_attr_s = p end
684
+ when 23 then
685
+ begin
686
+ end
687
+ begin
688
+
689
+ if param_attr.nil?
690
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
691
+ end
692
+
693
+ # Use quoted s value if one exists, otherwise use parameter value
694
+ value = qstr || data[param_val_s..(p-1)]
695
+
696
+ content_type.parameters << { param_attr => value }
697
+ param_attr = nil
698
+ qstr = nil
699
+ end
700
+ when 14 then
701
+ begin
702
+ end
703
+ begin
704
+ begin
705
+ stack[top] = cs
706
+ top+= 1
707
+ cs = 28
708
+ _goto_level = _again
709
+ next
710
+ end
711
+ end
712
+ when 16 then
713
+ begin
714
+ end
715
+ begin
716
+ begin
717
+ stack[top] = cs
718
+ top+= 1
719
+ cs = 28
720
+ _goto_level = _again
721
+ next
722
+ end
723
+ end
724
+ when 17 then
725
+ begin
726
+ end
727
+ begin
728
+ begin
729
+ top -= 1
730
+ cs = stack[top]
731
+ _goto_level = _again
732
+ next
733
+ end
734
+ end
735
+ when 22 then
736
+ begin
737
+ begin
738
+ stack[top] = cs
739
+ top+= 1
740
+ cs = 28
741
+ _goto_level = _again
742
+ next
743
+ end
744
+ end
745
+ begin
746
+
747
+ if param_attr.nil?
748
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
749
+ end
750
+
751
+ # Use quoted s value if one exists, otherwise use parameter value
752
+ value = qstr || data[param_val_s..(p-1)]
753
+
754
+ content_type.parameters << { param_attr => value }
755
+ param_attr = nil
756
+ qstr = nil
757
+ end
758
+ when 24 then
759
+ begin
760
+ end
761
+ begin
762
+ begin
763
+ stack[top] = cs
764
+ top+= 1
765
+ cs = 28
766
+ _goto_level = _again
767
+ next
768
+ end
769
+ end
770
+ begin
771
+
772
+ if param_attr.nil?
773
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
774
+ end
775
+
776
+ # Use quoted s value if one exists, otherwise use parameter value
777
+ value = qstr || data[param_val_s..(p-1)]
778
+
779
+ content_type.parameters << { param_attr => value }
780
+ param_attr = nil
781
+ qstr = nil
782
+ end
783
+ end
784
+ end
785
+ end
786
+ if _goto_level <= _again
787
+ if cs == 0
788
+ _goto_level = _out
789
+ next
790
+ end
791
+ p += 1
792
+ if p != pe
793
+ _goto_level = _resume
794
+ next
795
+ end
796
+ end
797
+ if _goto_level <= _test_eof
798
+ if p == eof
799
+ case _eof_actions[cs]
800
+ when 19 then
801
+ begin
802
+ content_type.sub_type = data[sub_type_s..(p-1)].downcase end
803
+ when 21 then
804
+ begin
805
+
806
+ if param_attr.nil?
807
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
808
+ end
809
+
810
+ # Use quoted s value if one exists, otherwise use parameter value
811
+ value = qstr || data[param_val_s..(p-1)]
812
+
813
+ content_type.parameters << { param_attr => value }
814
+ param_attr = nil
815
+ qstr = nil
816
+ end
817
+ when 12 then
818
+ begin
819
+ end
820
+ when 23 then
821
+ begin
822
+ end
823
+ begin
824
+
825
+ if param_attr.nil?
826
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
827
+ end
828
+
829
+ # Use quoted s value if one exists, otherwise use parameter value
830
+ value = qstr || data[param_val_s..(p-1)]
831
+
832
+ content_type.parameters << { param_attr => value }
833
+ param_attr = nil
834
+ qstr = nil
835
+ end
836
+ end
837
+ end
838
+
839
+ end
840
+ if _goto_level <= _out
841
+ break
842
+ end
843
+ end
844
+ end
845
+
846
+
847
+ if p != eof || cs < 33
848
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "Only able to parse up to #{data[0..p]}")
63
849
  end
850
+
64
851
  content_type
65
852
  end
66
853
  end