mail 2.6.6 → 2.7.0.rc1

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.
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,77 @@
1
+ # frozen_string_literal: true
2
+ require 'mail/utilities'
3
+
4
+ %%{
5
+ machine content_type;
6
+
7
+ # Main Type
8
+ action main_type_s { main_type_s = p }
9
+ action main_type_e { content_type.main_type = data[main_type_s..(p-1)].downcase }
10
+
11
+ # Sub Type
12
+ action sub_type_s { sub_type_s = p }
13
+ action sub_type_e { content_type.sub_type = data[sub_type_s..(p-1)].downcase }
14
+
15
+ # Parameter Attribute
16
+ action param_attr_s { param_attr_s = p }
17
+ action param_attr_e { param_attr = data[param_attr_s..(p-1)] }
18
+
19
+ # Quoted String
20
+ action qstr_s { qstr_s = p }
21
+ action qstr_e { qstr = data[qstr_s..(p-1)] }
22
+
23
+ # Parameter Value
24
+ action param_val_s { param_val_s = p }
25
+ action param_val_e {
26
+ if param_attr.nil?
27
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
28
+ end
29
+
30
+ # Use quoted s value if one exists, otherwise use parameter value
31
+ value = qstr || data[param_val_s..(p-1)]
32
+
33
+ content_type.parameters << { param_attr => value }
34
+ param_attr = nil
35
+ qstr = nil
36
+ }
37
+
38
+ # No-op actions
39
+ action comment_e { }
40
+ action comment_s { }
41
+ action phrase_e { }
42
+ action phrase_s { }
43
+
44
+ include rfc2045_content_type "rfc2045_content_type.rl";
45
+ main := content_type;
46
+ }%%
47
+
48
+ module Mail::Parsers
49
+ module ContentTypeParser
50
+ ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
51
+
52
+ %%write data noprefix;
53
+
54
+ def self.parse(data)
55
+ return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
56
+ content_type = ContentTypeStruct.new(nil, nil, [])
57
+
58
+ # Parser state
59
+ main_type_s = sub_type_s = param_attr_s = param_attr = nil
60
+ qstr_s = qstr = param_val_s = nil
61
+
62
+ # 5.1 Variables Used by Ragel
63
+ p = 0
64
+ eof = pe = data.length
65
+ stack = []
66
+
67
+ %%write init;
68
+ %%write exec;
69
+
70
+ if p != eof || cs < %%{ write first_final; }%%
71
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "Only able to parse up to #{data[0..p]}")
72
+ end
73
+
74
+ content_type
75
+ end
76
+ end
77
+ end
@@ -1,36 +1,783 @@
1
+
1
2
  # frozen_string_literal: true
3
+ require 'mail/utilities'
4
+
5
+
6
+
7
+
2
8
  module Mail::Parsers
3
- class DateTimeParser
4
- include Mail::Utilities
9
+ module DateTimeParser
10
+ DateTimeStruct = Struct.new(:date_string, :time_string, :error)
5
11
 
6
- def parse(s)
7
- raise Mail::Field::ParseError.new(Mail::DateTimeElement, s, "nil is an invalid DateTime") if s.nil?
12
+
13
+ class << self
14
+ attr_accessor :_trans_keys
15
+ private :_trans_keys, :_trans_keys=
16
+ end
17
+ self._trans_keys = [
18
+ 0, 0, 9, 87, 9, 87,
19
+ 10, 10, 9, 32, 9,
20
+ 87, 9, 83, 9, 83,
21
+ 10, 10, 9, 32, 9, 83,
22
+ 112, 117, 114, 114, 9,
23
+ 57, 10, 10, 9, 32,
24
+ 9, 57, 48, 57, 9, 57,
25
+ 9, 57, 10, 10, 9,
26
+ 32, 9, 57, 48, 57,
27
+ 9, 58, 10, 10, 9, 32,
28
+ 9, 58, 9, 57, 10,
29
+ 10, 9, 32, 9, 57,
30
+ 48, 57, 9, 58, 9, 122,
31
+ 10, 10, 9, 32, 9,
32
+ 58, 9, 57, 10, 10,
33
+ 9, 32, 9, 57, 48, 57,
34
+ 9, 40, 9, 122, 10,
35
+ 10, 9, 32, 9, 40,
36
+ 48, 57, 48, 57, 48, 57,
37
+ 48, 57, 10, 10, 9,
38
+ 32, 84, 84, 103, 103,
39
+ 101, 101, 99, 99, 101, 101,
40
+ 98, 98, 97, 117, 110,
41
+ 110, 108, 110, 97, 97,
42
+ 114, 121, 111, 111, 118, 118,
43
+ 99, 99, 116, 116, 101,
44
+ 101, 112, 112, 114, 114,
45
+ 105, 105, 9, 44, 10, 10,
46
+ 9, 32, 9, 44, 9,
47
+ 57, 9, 57, 10, 10,
48
+ 9, 32, 9, 57, 111, 111,
49
+ 110, 110, 97, 117, 116,
50
+ 116, 104, 117, 117, 117,
51
+ 101, 101, 101, 101, 100, 100,
52
+ 1, 127, 1, 127, 10,
53
+ 10, 9, 32, -128, -1,
54
+ 9, 40, 9, 40, 9, 40,
55
+ 9, 83, 9, 77, 9,
56
+ 84, 0, 0, 0
57
+ ]
58
+
59
+ class << self
60
+ attr_accessor :_key_spans
61
+ private :_key_spans, :_key_spans=
62
+ end
63
+ self._key_spans = [
64
+ 0, 79, 79, 1, 24, 79, 75, 75,
65
+ 1, 24, 75, 6, 1, 49, 1, 24,
66
+ 49, 10, 49, 49, 1, 24, 49, 10,
67
+ 50, 1, 24, 50, 49, 1, 24, 49,
68
+ 10, 50, 114, 1, 24, 50, 49, 1,
69
+ 24, 49, 10, 32, 114, 1, 24, 32,
70
+ 10, 10, 10, 10, 1, 24, 1, 1,
71
+ 1, 1, 1, 1, 21, 1, 3, 1,
72
+ 8, 1, 1, 1, 1, 1, 1, 1,
73
+ 1, 36, 1, 24, 36, 49, 49, 1,
74
+ 24, 49, 1, 1, 21, 1, 14, 1,
75
+ 1, 1, 1, 127, 127, 1, 24, 128,
76
+ 32, 32, 32, 75, 69, 76, 0
77
+ ]
78
+
79
+ class << self
80
+ attr_accessor :_index_offsets
81
+ private :_index_offsets, :_index_offsets=
82
+ end
83
+ self._index_offsets = [
84
+ 0, 0, 80, 160, 162, 187, 267, 343,
85
+ 419, 421, 446, 522, 529, 531, 581, 583,
86
+ 608, 658, 669, 719, 769, 771, 796, 846,
87
+ 857, 908, 910, 935, 986, 1036, 1038, 1063,
88
+ 1113, 1124, 1175, 1290, 1292, 1317, 1368, 1418,
89
+ 1420, 1445, 1495, 1506, 1539, 1654, 1656, 1681,
90
+ 1714, 1725, 1736, 1747, 1758, 1760, 1785, 1787,
91
+ 1789, 1791, 1793, 1795, 1797, 1819, 1821, 1825,
92
+ 1827, 1836, 1838, 1840, 1842, 1844, 1846, 1848,
93
+ 1850, 1852, 1889, 1891, 1916, 1953, 2003, 2053,
94
+ 2055, 2080, 2130, 2132, 2134, 2156, 2158, 2173,
95
+ 2175, 2177, 2179, 2181, 2309, 2437, 2439, 2464,
96
+ 2593, 2626, 2659, 2692, 2768, 2838, 2915
97
+ ]
98
+
99
+ class << self
100
+ attr_accessor :_indicies
101
+ private :_indicies, :_indicies=
102
+ end
103
+ self._indicies = [
104
+ 0, 1, 1, 1, 2, 1, 1, 1,
105
+ 1, 1, 1, 1, 1, 1, 1, 1,
106
+ 1, 1, 1, 1, 1, 1, 1, 0,
107
+ 1, 1, 1, 1, 1, 1, 1, 3,
108
+ 1, 1, 1, 1, 1, 1, 1, 4,
109
+ 4, 4, 4, 4, 4, 4, 4, 4,
110
+ 4, 1, 1, 1, 1, 1, 1, 1,
111
+ 1, 1, 1, 1, 1, 5, 1, 1,
112
+ 1, 1, 1, 1, 6, 1, 1, 1,
113
+ 1, 1, 7, 8, 1, 1, 9, 1,
114
+ 10, 1, 1, 1, 11, 1, 1, 1,
115
+ 1, 1, 1, 1, 1, 1, 1, 1,
116
+ 1, 1, 1, 1, 1, 1, 1, 10,
117
+ 1, 1, 1, 1, 1, 1, 1, 12,
118
+ 1, 1, 1, 1, 1, 1, 1, 13,
119
+ 13, 13, 13, 13, 13, 13, 13, 13,
120
+ 13, 1, 1, 1, 1, 1, 1, 1,
121
+ 1, 1, 1, 1, 1, 5, 1, 1,
122
+ 1, 1, 1, 1, 6, 1, 1, 1,
123
+ 1, 1, 7, 8, 1, 1, 9, 1,
124
+ 14, 1, 10, 1, 1, 1, 1, 1,
125
+ 1, 1, 1, 1, 1, 1, 1, 1,
126
+ 1, 1, 1, 1, 1, 1, 1, 1,
127
+ 1, 10, 1, 15, 1, 1, 1, 16,
128
+ 1, 1, 1, 1, 1, 1, 1, 1,
129
+ 1, 1, 1, 1, 1, 1, 1, 1,
130
+ 1, 1, 15, 1, 1, 1, 1, 1,
131
+ 1, 1, 17, 1, 1, 1, 1, 1,
132
+ 1, 1, 18, 18, 18, 18, 18, 18,
133
+ 18, 18, 18, 18, 1, 1, 1, 1,
134
+ 1, 1, 1, 1, 1, 1, 1, 1,
135
+ 19, 1, 1, 1, 1, 1, 1, 20,
136
+ 1, 1, 1, 1, 1, 21, 22, 1,
137
+ 1, 23, 1, 24, 1, 1, 1, 25,
138
+ 1, 1, 1, 1, 1, 1, 1, 1,
139
+ 1, 1, 1, 1, 1, 1, 1, 1,
140
+ 1, 1, 24, 1, 1, 1, 1, 1,
141
+ 1, 1, 26, 1, 1, 1, 1, 1,
142
+ 1, 1, 24, 24, 24, 24, 24, 24,
143
+ 24, 24, 24, 24, 1, 1, 1, 1,
144
+ 1, 1, 1, 27, 1, 1, 28, 1,
145
+ 29, 1, 1, 1, 30, 1, 1, 31,
146
+ 32, 33, 1, 1, 1, 34, 1, 24,
147
+ 1, 1, 1, 25, 1, 1, 1, 1,
148
+ 1, 1, 1, 1, 1, 1, 1, 1,
149
+ 1, 1, 1, 1, 1, 1, 24, 1,
150
+ 1, 1, 1, 1, 1, 1, 26, 1,
151
+ 1, 1, 1, 1, 1, 1, 1, 1,
152
+ 1, 1, 1, 1, 1, 1, 1, 1,
153
+ 1, 1, 1, 1, 1, 1, 1, 27,
154
+ 1, 1, 28, 1, 29, 1, 1, 1,
155
+ 30, 1, 1, 31, 32, 33, 1, 1,
156
+ 1, 34, 1, 35, 1, 24, 1, 1,
157
+ 1, 1, 1, 1, 1, 1, 1, 1,
158
+ 1, 1, 1, 1, 1, 1, 1, 1,
159
+ 1, 1, 1, 1, 24, 1, 36, 1,
160
+ 1, 1, 37, 1, 1, 1, 1, 1,
161
+ 1, 1, 1, 1, 1, 1, 1, 1,
162
+ 1, 1, 1, 1, 1, 36, 1, 1,
163
+ 1, 1, 1, 1, 1, 38, 1, 1,
164
+ 1, 1, 1, 1, 1, 1, 1, 1,
165
+ 1, 1, 1, 1, 1, 1, 1, 1,
166
+ 1, 1, 1, 1, 1, 1, 39, 1,
167
+ 1, 40, 1, 41, 1, 1, 1, 42,
168
+ 1, 1, 43, 44, 45, 1, 1, 1,
169
+ 46, 1, 47, 1, 1, 1, 1, 48,
170
+ 1, 49, 1, 49, 1, 1, 1, 50,
171
+ 1, 1, 1, 1, 1, 1, 1, 1,
172
+ 1, 1, 1, 1, 1, 1, 1, 1,
173
+ 1, 1, 49, 1, 1, 1, 1, 1,
174
+ 1, 1, 51, 1, 1, 1, 1, 1,
175
+ 1, 1, 52, 52, 52, 52, 52, 52,
176
+ 52, 52, 52, 52, 1, 53, 1, 49,
177
+ 1, 1, 1, 1, 1, 1, 1, 1,
178
+ 1, 1, 1, 1, 1, 1, 1, 1,
179
+ 1, 1, 1, 1, 1, 1, 49, 1,
180
+ 54, 1, 1, 1, 55, 1, 1, 1,
181
+ 1, 1, 1, 1, 1, 1, 1, 1,
182
+ 1, 1, 1, 1, 1, 1, 1, 54,
183
+ 1, 1, 1, 1, 1, 1, 1, 56,
184
+ 1, 1, 1, 1, 1, 1, 1, 57,
185
+ 57, 57, 57, 57, 57, 57, 57, 57,
186
+ 57, 1, 58, 58, 58, 58, 58, 58,
187
+ 58, 58, 58, 58, 1, 59, 1, 1,
188
+ 1, 60, 1, 1, 1, 1, 1, 1,
189
+ 1, 1, 1, 1, 1, 1, 1, 1,
190
+ 1, 1, 1, 1, 59, 1, 1, 1,
191
+ 1, 1, 1, 1, 61, 1, 1, 1,
192
+ 1, 1, 1, 1, 58, 58, 58, 58,
193
+ 58, 58, 58, 58, 58, 58, 1, 59,
194
+ 1, 1, 1, 60, 1, 1, 1, 1,
195
+ 1, 1, 1, 1, 1, 1, 1, 1,
196
+ 1, 1, 1, 1, 1, 1, 59, 1,
197
+ 1, 1, 1, 1, 1, 1, 61, 1,
198
+ 1, 1, 1, 1, 1, 1, 62, 62,
199
+ 62, 62, 62, 62, 62, 62, 62, 62,
200
+ 1, 63, 1, 59, 1, 1, 1, 1,
201
+ 1, 1, 1, 1, 1, 1, 1, 1,
202
+ 1, 1, 1, 1, 1, 1, 1, 1,
203
+ 1, 1, 59, 1, 64, 1, 1, 1,
204
+ 65, 1, 1, 1, 1, 1, 1, 1,
205
+ 1, 1, 1, 1, 1, 1, 1, 1,
206
+ 1, 1, 1, 64, 1, 1, 1, 1,
207
+ 1, 1, 1, 66, 1, 1, 1, 1,
208
+ 1, 1, 1, 67, 67, 67, 67, 67,
209
+ 67, 67, 67, 67, 67, 1, 68, 68,
210
+ 68, 68, 68, 68, 68, 68, 68, 68,
211
+ 1, 68, 1, 1, 1, 69, 1, 1,
212
+ 1, 1, 1, 1, 1, 1, 1, 1,
213
+ 1, 1, 1, 1, 1, 1, 1, 1,
214
+ 68, 1, 1, 1, 1, 1, 1, 1,
215
+ 70, 1, 1, 1, 1, 1, 1, 1,
216
+ 1, 1, 1, 1, 1, 1, 1, 1,
217
+ 1, 1, 71, 1, 72, 1, 68, 1,
218
+ 1, 1, 1, 1, 1, 1, 1, 1,
219
+ 1, 1, 1, 1, 1, 1, 1, 1,
220
+ 1, 1, 1, 1, 1, 68, 1, 73,
221
+ 1, 1, 1, 74, 1, 1, 1, 1,
222
+ 1, 1, 1, 1, 1, 1, 1, 1,
223
+ 1, 1, 1, 1, 1, 1, 73, 1,
224
+ 1, 1, 1, 1, 1, 1, 75, 1,
225
+ 1, 1, 1, 1, 1, 1, 1, 1,
226
+ 1, 1, 1, 1, 1, 1, 1, 1,
227
+ 76, 1, 71, 1, 1, 1, 77, 1,
228
+ 1, 1, 1, 1, 1, 1, 1, 1,
229
+ 1, 1, 1, 1, 1, 1, 1, 1,
230
+ 1, 71, 1, 1, 1, 1, 1, 1,
231
+ 1, 78, 1, 1, 1, 1, 1, 1,
232
+ 1, 79, 79, 79, 79, 79, 79, 79,
233
+ 79, 79, 79, 1, 80, 1, 71, 1,
234
+ 1, 1, 1, 1, 1, 1, 1, 1,
235
+ 1, 1, 1, 1, 1, 1, 1, 1,
236
+ 1, 1, 1, 1, 1, 71, 1, 76,
237
+ 1, 1, 1, 81, 1, 1, 1, 1,
238
+ 1, 1, 1, 1, 1, 1, 1, 1,
239
+ 1, 1, 1, 1, 1, 1, 76, 1,
240
+ 1, 1, 1, 1, 1, 1, 82, 1,
241
+ 1, 1, 1, 1, 1, 1, 83, 83,
242
+ 83, 83, 83, 83, 83, 83, 83, 83,
243
+ 1, 84, 84, 84, 84, 84, 84, 84,
244
+ 84, 84, 84, 1, 85, 1, 1, 1,
245
+ 86, 1, 1, 1, 1, 1, 1, 1,
246
+ 1, 1, 1, 1, 1, 1, 1, 1,
247
+ 1, 1, 1, 85, 1, 1, 1, 1,
248
+ 1, 1, 1, 87, 1, 1, 1, 1,
249
+ 1, 1, 1, 1, 1, 1, 1, 1,
250
+ 1, 1, 1, 1, 1, 88, 1, 85,
251
+ 1, 1, 1, 86, 1, 1, 1, 1,
252
+ 1, 1, 1, 1, 1, 1, 1, 1,
253
+ 1, 1, 1, 1, 1, 1, 85, 1,
254
+ 1, 1, 1, 1, 1, 1, 87, 1,
255
+ 1, 89, 1, 89, 1, 1, 1, 1,
256
+ 1, 1, 1, 1, 1, 1, 1, 1,
257
+ 88, 1, 1, 1, 1, 1, 1, 90,
258
+ 90, 91, 90, 91, 90, 92, 90, 90,
259
+ 1, 90, 90, 91, 90, 90, 91, 90,
260
+ 90, 90, 90, 93, 90, 90, 90, 90,
261
+ 90, 1, 1, 1, 1, 1, 1, 90,
262
+ 90, 90, 90, 90, 90, 90, 90, 90,
263
+ 1, 90, 90, 90, 90, 90, 90, 90,
264
+ 90, 90, 90, 90, 90, 90, 90, 90,
265
+ 90, 1, 94, 1, 85, 1, 1, 1,
266
+ 1, 1, 1, 1, 1, 1, 1, 1,
267
+ 1, 1, 1, 1, 1, 1, 1, 1,
268
+ 1, 1, 1, 85, 1, 95, 1, 1,
269
+ 1, 96, 1, 1, 1, 1, 1, 1,
270
+ 1, 1, 1, 1, 1, 1, 1, 1,
271
+ 1, 1, 1, 1, 95, 1, 1, 1,
272
+ 1, 1, 1, 1, 97, 1, 1, 1,
273
+ 1, 1, 1, 1, 1, 1, 1, 1,
274
+ 1, 1, 1, 1, 1, 1, 98, 1,
275
+ 88, 1, 1, 1, 99, 1, 1, 1,
276
+ 1, 1, 1, 1, 1, 1, 1, 1,
277
+ 1, 1, 1, 1, 1, 1, 1, 88,
278
+ 1, 1, 1, 1, 1, 1, 1, 100,
279
+ 1, 1, 1, 1, 1, 1, 1, 101,
280
+ 101, 101, 101, 101, 101, 101, 101, 101,
281
+ 101, 1, 102, 1, 88, 1, 1, 1,
282
+ 1, 1, 1, 1, 1, 1, 1, 1,
283
+ 1, 1, 1, 1, 1, 1, 1, 1,
284
+ 1, 1, 1, 88, 1, 98, 1, 1,
285
+ 1, 103, 1, 1, 1, 1, 1, 1,
286
+ 1, 1, 1, 1, 1, 1, 1, 1,
287
+ 1, 1, 1, 1, 98, 1, 1, 1,
288
+ 1, 1, 1, 1, 104, 1, 1, 1,
289
+ 1, 1, 1, 1, 105, 105, 105, 105,
290
+ 105, 105, 105, 105, 105, 105, 1, 106,
291
+ 106, 106, 106, 106, 106, 106, 106, 106,
292
+ 106, 1, 107, 1, 1, 1, 108, 1,
293
+ 1, 1, 1, 1, 1, 1, 1, 1,
294
+ 1, 1, 1, 1, 1, 1, 1, 1,
295
+ 1, 107, 1, 1, 1, 1, 1, 1,
296
+ 1, 109, 1, 107, 1, 1, 1, 108,
297
+ 1, 1, 1, 1, 1, 1, 1, 1,
298
+ 1, 1, 1, 1, 1, 1, 1, 1,
299
+ 1, 1, 107, 1, 1, 1, 1, 1,
300
+ 1, 1, 109, 1, 1, 89, 1, 89,
301
+ 1, 1, 1, 1, 1, 1, 1, 1,
302
+ 1, 1, 1, 1, 1, 1, 1, 1,
303
+ 1, 1, 1, 90, 90, 91, 90, 91,
304
+ 90, 92, 90, 90, 1, 90, 90, 91,
305
+ 90, 90, 91, 90, 90, 90, 90, 93,
306
+ 90, 90, 90, 90, 90, 1, 1, 1,
307
+ 1, 1, 1, 90, 90, 90, 90, 90,
308
+ 90, 90, 90, 90, 1, 90, 90, 90,
309
+ 90, 90, 90, 90, 90, 90, 90, 90,
310
+ 90, 90, 90, 90, 90, 1, 110, 1,
311
+ 107, 1, 1, 1, 1, 1, 1, 1,
312
+ 1, 1, 1, 1, 1, 1, 1, 1,
313
+ 1, 1, 1, 1, 1, 1, 1, 107,
314
+ 1, 111, 1, 1, 1, 112, 1, 1,
315
+ 1, 1, 1, 1, 1, 1, 1, 1,
316
+ 1, 1, 1, 1, 1, 1, 1, 1,
317
+ 111, 1, 1, 1, 1, 1, 1, 1,
318
+ 113, 1, 114, 114, 114, 114, 114, 114,
319
+ 114, 114, 114, 114, 1, 115, 115, 115,
320
+ 115, 115, 115, 115, 115, 115, 115, 1,
321
+ 116, 116, 116, 116, 116, 116, 116, 116,
322
+ 116, 116, 1, 90, 90, 90, 90, 90,
323
+ 90, 90, 90, 90, 90, 1, 117, 1,
324
+ 118, 1, 1, 1, 1, 1, 1, 1,
325
+ 1, 1, 1, 1, 1, 1, 1, 1,
326
+ 1, 1, 1, 1, 1, 1, 1, 118,
327
+ 1, 90, 1, 49, 1, 119, 1, 49,
328
+ 1, 120, 1, 49, 1, 121, 1, 1,
329
+ 1, 1, 1, 1, 1, 1, 1, 1,
330
+ 1, 1, 1, 1, 1, 1, 1, 1,
331
+ 1, 122, 1, 49, 1, 49, 1, 49,
332
+ 1, 123, 1, 49, 1, 1, 1, 1,
333
+ 1, 1, 49, 1, 124, 1, 49, 1,
334
+ 125, 1, 49, 1, 126, 1, 49, 1,
335
+ 127, 1, 128, 1, 128, 1, 1, 1,
336
+ 129, 1, 1, 1, 1, 1, 1, 1,
337
+ 1, 1, 1, 1, 1, 1, 1, 1,
338
+ 1, 1, 1, 128, 1, 1, 1, 1,
339
+ 1, 1, 1, 130, 1, 1, 1, 131,
340
+ 1, 132, 1, 128, 1, 1, 1, 1,
341
+ 1, 1, 1, 1, 1, 1, 1, 1,
342
+ 1, 1, 1, 1, 1, 1, 1, 1,
343
+ 1, 1, 128, 1, 133, 1, 1, 1,
344
+ 134, 1, 1, 1, 1, 1, 1, 1,
345
+ 1, 1, 1, 1, 1, 1, 1, 1,
346
+ 1, 1, 1, 133, 1, 1, 1, 1,
347
+ 1, 1, 1, 135, 1, 1, 1, 136,
348
+ 1, 137, 1, 1, 1, 138, 1, 1,
349
+ 1, 1, 1, 1, 1, 1, 1, 1,
350
+ 1, 1, 1, 1, 1, 1, 1, 1,
351
+ 137, 1, 1, 1, 1, 1, 1, 1,
352
+ 139, 1, 1, 1, 1, 1, 1, 1,
353
+ 4, 4, 4, 4, 4, 4, 4, 4,
354
+ 4, 4, 1, 140, 1, 1, 1, 141,
355
+ 1, 1, 1, 1, 1, 1, 1, 1,
356
+ 1, 1, 1, 1, 1, 1, 1, 1,
357
+ 1, 1, 140, 1, 1, 1, 1, 1,
358
+ 1, 1, 142, 1, 1, 1, 1, 1,
359
+ 1, 1, 13, 13, 13, 13, 13, 13,
360
+ 13, 13, 13, 13, 1, 143, 1, 140,
361
+ 1, 1, 1, 1, 1, 1, 1, 1,
362
+ 1, 1, 1, 1, 1, 1, 1, 1,
363
+ 1, 1, 1, 1, 1, 1, 140, 1,
364
+ 144, 1, 1, 1, 145, 1, 1, 1,
365
+ 1, 1, 1, 1, 1, 1, 1, 1,
366
+ 1, 1, 1, 1, 1, 1, 1, 144,
367
+ 1, 1, 1, 1, 1, 1, 1, 146,
368
+ 1, 1, 1, 1, 1, 1, 1, 18,
369
+ 18, 18, 18, 18, 18, 18, 18, 18,
370
+ 18, 1, 147, 1, 128, 1, 148, 1,
371
+ 1, 1, 1, 1, 1, 1, 1, 1,
372
+ 1, 1, 1, 1, 1, 1, 1, 1,
373
+ 1, 1, 147, 1, 128, 1, 149, 1,
374
+ 1, 1, 1, 1, 1, 1, 1, 1,
375
+ 1, 1, 1, 150, 1, 128, 1, 128,
376
+ 1, 151, 1, 128, 1, 152, 152, 152,
377
+ 152, 152, 152, 152, 152, 152, 1, 152,
378
+ 152, 153, 152, 152, 152, 152, 152, 152,
379
+ 152, 152, 152, 152, 152, 152, 152, 152,
380
+ 152, 152, 152, 152, 152, 152, 152, 152,
381
+ 152, 152, 152, 152, 154, 155, 152, 152,
382
+ 152, 152, 152, 152, 152, 152, 152, 152,
383
+ 152, 152, 152, 152, 152, 152, 152, 152,
384
+ 152, 152, 152, 152, 152, 152, 152, 152,
385
+ 152, 152, 152, 152, 152, 152, 152, 152,
386
+ 152, 152, 152, 152, 152, 152, 152, 152,
387
+ 152, 152, 152, 152, 152, 152, 152, 152,
388
+ 156, 152, 152, 152, 152, 152, 152, 152,
389
+ 152, 152, 152, 152, 152, 152, 152, 152,
390
+ 152, 152, 152, 152, 152, 152, 152, 152,
391
+ 152, 152, 152, 152, 152, 152, 152, 152,
392
+ 152, 152, 152, 152, 1, 157, 157, 157,
393
+ 157, 157, 157, 157, 157, 157, 1, 157,
394
+ 157, 158, 157, 157, 157, 157, 157, 157,
395
+ 157, 157, 157, 157, 157, 157, 157, 157,
396
+ 157, 157, 157, 157, 157, 157, 157, 157,
397
+ 157, 157, 157, 157, 159, 160, 157, 157,
398
+ 157, 157, 157, 157, 157, 157, 157, 157,
399
+ 157, 157, 157, 157, 157, 157, 157, 157,
400
+ 157, 157, 157, 157, 157, 157, 157, 157,
401
+ 157, 157, 157, 157, 157, 157, 157, 157,
402
+ 157, 157, 157, 157, 157, 157, 157, 157,
403
+ 157, 157, 157, 157, 157, 157, 157, 157,
404
+ 161, 157, 157, 157, 157, 157, 157, 157,
405
+ 157, 157, 157, 157, 157, 157, 157, 157,
406
+ 157, 157, 157, 157, 157, 157, 157, 157,
407
+ 157, 157, 157, 157, 157, 157, 157, 157,
408
+ 157, 157, 157, 157, 1, 162, 1, 157,
409
+ 1, 1, 1, 1, 1, 1, 1, 1,
410
+ 1, 1, 1, 1, 1, 1, 1, 1,
411
+ 1, 1, 1, 1, 1, 1, 157, 1,
412
+ 1, 1, 1, 1, 1, 1, 1, 1,
413
+ 1, 1, 1, 1, 1, 1, 1, 1,
414
+ 1, 1, 1, 1, 1, 1, 1, 1,
415
+ 1, 1, 1, 1, 1, 1, 1, 1,
416
+ 1, 1, 1, 1, 1, 1, 1, 1,
417
+ 1, 1, 1, 1, 1, 1, 1, 1,
418
+ 1, 1, 1, 1, 1, 1, 1, 1,
419
+ 1, 1, 1, 1, 1, 1, 1, 1,
420
+ 1, 1, 1, 1, 1, 1, 1, 1,
421
+ 1, 1, 1, 1, 1, 1, 1, 1,
422
+ 1, 1, 1, 1, 1, 1, 1, 1,
423
+ 1, 1, 1, 1, 1, 1, 1, 1,
424
+ 1, 1, 1, 1, 1, 1, 1, 1,
425
+ 1, 1, 1, 1, 1, 1, 1, 1,
426
+ 1, 1, 1, 1, 1, 1, 1, 1,
427
+ 1, 1, 1, 1, 1, 1, 1, 1,
428
+ 157, 163, 1, 1, 1, 164, 1, 1,
429
+ 1, 1, 1, 1, 1, 1, 1, 1,
430
+ 1, 1, 1, 1, 1, 1, 1, 1,
431
+ 163, 1, 1, 1, 1, 1, 1, 1,
432
+ 165, 1, 118, 1, 1, 1, 166, 1,
433
+ 1, 1, 1, 1, 1, 1, 1, 1,
434
+ 1, 1, 1, 1, 1, 1, 1, 1,
435
+ 1, 118, 1, 1, 1, 1, 1, 1,
436
+ 1, 167, 1, 168, 1, 1, 1, 169,
437
+ 1, 1, 1, 1, 1, 1, 1, 1,
438
+ 1, 1, 1, 1, 1, 1, 1, 1,
439
+ 1, 1, 168, 1, 1, 1, 1, 1,
440
+ 1, 1, 170, 1, 163, 1, 1, 1,
441
+ 164, 1, 1, 1, 1, 1, 1, 1,
442
+ 1, 1, 1, 1, 1, 1, 1, 1,
443
+ 1, 1, 1, 163, 1, 1, 1, 1,
444
+ 1, 1, 1, 165, 1, 1, 1, 1,
445
+ 1, 1, 1, 1, 1, 1, 1, 1,
446
+ 1, 1, 1, 1, 1, 1, 1, 1,
447
+ 1, 1, 1, 1, 1, 1, 1, 171,
448
+ 1, 1, 1, 1, 1, 1, 1, 1,
449
+ 1, 1, 1, 1, 1, 1, 171, 1,
450
+ 163, 1, 1, 1, 164, 1, 1, 1,
451
+ 1, 1, 1, 1, 1, 1, 1, 1,
452
+ 1, 1, 1, 1, 1, 1, 1, 163,
453
+ 1, 1, 1, 1, 1, 1, 1, 165,
454
+ 1, 1, 1, 1, 1, 1, 1, 1,
455
+ 1, 1, 1, 1, 1, 1, 1, 1,
456
+ 1, 1, 1, 1, 1, 1, 1, 1,
457
+ 1, 1, 1, 1, 1, 1, 1, 1,
458
+ 1, 1, 1, 1, 171, 1, 163, 1,
459
+ 1, 1, 164, 1, 1, 1, 1, 1,
460
+ 1, 1, 1, 1, 1, 1, 1, 1,
461
+ 1, 1, 1, 1, 1, 163, 1, 1,
462
+ 1, 1, 1, 1, 1, 165, 1, 1,
463
+ 1, 1, 1, 1, 1, 1, 1, 1,
464
+ 1, 1, 1, 1, 1, 1, 1, 1,
465
+ 1, 1, 1, 1, 1, 1, 1, 1,
466
+ 1, 1, 1, 1, 1, 1, 1, 1,
467
+ 1, 1, 1, 1, 1, 1, 1, 1,
468
+ 1, 90, 1, 1, 0
469
+ ]
470
+
471
+ class << self
472
+ attr_accessor :_trans_targs
473
+ private :_trans_targs, :_trans_targs=
474
+ end
475
+ self._trans_targs = [
476
+ 2, 0, 3, 5, 6, 71, 82, 84,
477
+ 86, 89, 2, 3, 5, 6, 4, 2,
478
+ 3, 5, 6, 71, 82, 84, 86, 89,
479
+ 7, 8, 10, 11, 56, 58, 60, 63,
480
+ 65, 67, 69, 9, 7, 8, 10, 11,
481
+ 56, 58, 60, 63, 65, 67, 69, 12,
482
+ 55, 13, 14, 16, 17, 15, 13, 14,
483
+ 16, 17, 18, 19, 20, 22, 23, 21,
484
+ 19, 20, 22, 23, 24, 25, 27, 28,
485
+ 26, 24, 25, 27, 28, 29, 31, 32,
486
+ 30, 29, 31, 32, 33, 34, 35, 37,
487
+ 38, 48, 96, 99, 100, 101, 36, 34,
488
+ 35, 37, 38, 39, 41, 42, 40, 39,
489
+ 41, 42, 43, 44, 45, 47, 46, 44,
490
+ 45, 47, 49, 50, 51, 53, 97, 57,
491
+ 59, 61, 62, 64, 66, 68, 70, 72,
492
+ 73, 74, 76, 77, 75, 73, 74, 76,
493
+ 77, 78, 79, 81, 78, 79, 81, 80,
494
+ 78, 79, 81, 83, 85, 87, 88, 90,
495
+ 92, 93, 92, 102, 95, 92, 93, 92,
496
+ 102, 95, 94, 97, 52, 98, 52, 98,
497
+ 97, 52, 98, 54
498
+ ]
499
+
500
+ class << self
501
+ attr_accessor :_trans_actions
502
+ private :_trans_actions, :_trans_actions=
503
+ end
504
+ self._trans_actions = [
505
+ 1, 0, 1, 2, 1, 0, 0, 0,
506
+ 0, 0, 0, 0, 3, 0, 0, 4,
507
+ 4, 5, 4, 4, 4, 4, 4, 4,
508
+ 0, 0, 3, 0, 0, 0, 0, 0,
509
+ 0, 0, 0, 0, 4, 4, 5, 4,
510
+ 4, 4, 4, 4, 4, 4, 4, 0,
511
+ 0, 0, 0, 3, 0, 0, 4, 4,
512
+ 5, 4, 0, 0, 0, 3, 6, 0,
513
+ 4, 4, 5, 7, 0, 0, 3, 0,
514
+ 0, 4, 4, 5, 4, 0, 3, 0,
515
+ 0, 4, 5, 4, 0, 0, 0, 3,
516
+ 0, 0, 0, 0, 0, 0, 0, 4,
517
+ 4, 5, 4, 0, 3, 0, 0, 4,
518
+ 5, 4, 0, 0, 0, 3, 0, 4,
519
+ 4, 5, 0, 0, 0, 0, 0, 0,
520
+ 0, 0, 0, 0, 0, 0, 0, 0,
521
+ 0, 0, 3, 0, 0, 4, 4, 5,
522
+ 4, 1, 1, 8, 0, 0, 3, 0,
523
+ 4, 4, 5, 0, 0, 0, 0, 0,
524
+ 9, 9, 10, 11, 9, 0, 0, 3,
525
+ 12, 0, 0, 13, 13, 14, 0, 3,
526
+ 4, 4, 5, 0
527
+ ]
528
+
529
+ class << self
530
+ attr_accessor :_eof_actions
531
+ private :_eof_actions, :_eof_actions=
532
+ end
533
+ self._eof_actions = [
534
+ 0, 0, 0, 0, 0, 0, 0, 0,
535
+ 0, 0, 0, 0, 0, 0, 0, 0,
536
+ 0, 0, 0, 0, 0, 0, 0, 0,
537
+ 0, 0, 0, 0, 0, 0, 0, 0,
538
+ 0, 0, 0, 0, 0, 0, 0, 0,
539
+ 0, 0, 0, 0, 0, 0, 0, 0,
540
+ 0, 0, 0, 0, 0, 0, 0, 0,
541
+ 0, 0, 0, 0, 0, 0, 0, 0,
542
+ 0, 0, 0, 0, 0, 0, 0, 0,
543
+ 0, 0, 0, 0, 0, 0, 0, 0,
544
+ 0, 0, 0, 0, 0, 0, 0, 0,
545
+ 0, 0, 0, 0, 0, 0, 0, 0,
546
+ 13, 0, 4, 13, 13, 13, 0
547
+ ]
548
+
549
+ class << self
550
+ attr_accessor :start
551
+ end
552
+ self.start = 1;
553
+ class << self
554
+ attr_accessor :first_final
555
+ end
556
+ self.first_final = 96;
557
+ class << self
558
+ attr_accessor :error
559
+ end
560
+ self.error = 0;
561
+
562
+ class << self
563
+ attr_accessor :en_comment_tail
564
+ end
565
+ self.en_comment_tail = 91;
566
+ class << self
567
+ attr_accessor :en_main
568
+ end
569
+ self.en_main = 1;
8
570
 
9
- date_time = DateTimeStruct.new([])
10
571
 
11
- actions, error = Ragel.parse(:date_time, s)
12
- if error
13
- raise Mail::Field::ParseError.new(Mail::DateTimeElement, s, error)
14
- end
15
572
 
573
+ def self.parse(data)
574
+ raise Mail::Field::ParseError.new(Mail::DateTimeElement, data, "nil is an invalid DateTime") if data.nil?
575
+
576
+ date_time = DateTimeStruct.new([])
577
+
578
+ # Parser state
16
579
  date_s = time_s = nil
17
- actions.each_slice(2) do |action_id, p|
18
- action = Mail::Parsers::Ragel::ACTIONS[action_id]
19
- case action
20
-
21
- # Date
22
- when :date_s then date_s = p
23
- when :date_e
24
- date_time.date_string = s[date_s..(p-1)]
25
-
26
- # Time
27
- when :time_s then time_s = p
28
- when :time_e
29
- date_time.time_string = s[time_s..(p-1)]
30
-
31
- else
32
- raise Mail::Field::ParseError.new(Mail::DateTimeElement, s, "Failed to process unknown action: #{action}")
33
- end
580
+
581
+ # 5.1 Variables Used by Ragel
582
+ p = 0
583
+ eof = pe = data.length
584
+ stack = []
585
+
586
+
587
+ begin
588
+ p ||= 0
589
+ pe ||= data.length
590
+ cs = start
591
+ top = 0
592
+ end
593
+
594
+
595
+ begin
596
+ testEof = false
597
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
598
+ _goto_level = 0
599
+ _resume = 10
600
+ _eof_trans = 15
601
+ _again = 20
602
+ _test_eof = 30
603
+ _out = 40
604
+ while true
605
+ if _goto_level <= 0
606
+ if p == pe
607
+ _goto_level = _test_eof
608
+ next
609
+ end
610
+ if cs == 0
611
+ _goto_level = _out
612
+ next
613
+ end
614
+ end
615
+ if _goto_level <= _resume
616
+ _keys = cs << 1
617
+ _inds = _index_offsets[cs]
618
+ _slen = _key_spans[cs]
619
+ _wide = data[p].ord
620
+ _trans = if ( _slen > 0 &&
621
+ _trans_keys[_keys] <= _wide &&
622
+ _wide <= _trans_keys[_keys + 1]
623
+ ) then
624
+ _indicies[ _inds + _wide - _trans_keys[_keys] ]
625
+ else
626
+ _indicies[ _inds + _slen ]
627
+ end
628
+ cs = _trans_targs[_trans]
629
+ if _trans_actions[_trans] != 0
630
+ case _trans_actions[_trans]
631
+ when 1 then
632
+ begin
633
+ date_s = p end
634
+ when 13 then
635
+ begin
636
+ date_time.time_string = data[time_s..(p-1)] end
637
+ when 9 then
638
+ begin
639
+ end
640
+ when 4 then
641
+ begin
642
+ end
643
+ when 3 then
644
+ begin
645
+ begin
646
+ stack[top] = cs
647
+ top+= 1
648
+ cs = 91
649
+ _goto_level = _again
650
+ next
651
+ end
652
+ end
653
+ when 12 then
654
+ begin
655
+ begin
656
+ top -= 1
657
+ cs = stack[top]
658
+ _goto_level = _again
659
+ next
660
+ end
661
+ end
662
+ when 8 then
663
+ begin
664
+ date_s = p end
665
+ begin
666
+ begin
667
+ stack[top] = cs
668
+ top+= 1
669
+ cs = 91
670
+ _goto_level = _again
671
+ next
672
+ end
673
+ end
674
+ when 6 then
675
+ begin
676
+ date_time.date_string = data[date_s..(p-1)] end
677
+ begin
678
+ time_s = p end
679
+ when 14 then
680
+ begin
681
+ date_time.time_string = data[time_s..(p-1)] end
682
+ begin
683
+ begin
684
+ stack[top] = cs
685
+ top+= 1
686
+ cs = 91
687
+ _goto_level = _again
688
+ next
689
+ end
690
+ end
691
+ when 10 then
692
+ begin
693
+ end
694
+ begin
695
+ begin
696
+ stack[top] = cs
697
+ top+= 1
698
+ cs = 91
699
+ _goto_level = _again
700
+ next
701
+ end
702
+ end
703
+ when 11 then
704
+ begin
705
+ end
706
+ begin
707
+ begin
708
+ top -= 1
709
+ cs = stack[top]
710
+ _goto_level = _again
711
+ next
712
+ end
713
+ end
714
+ when 5 then
715
+ begin
716
+ end
717
+ begin
718
+ begin
719
+ stack[top] = cs
720
+ top+= 1
721
+ cs = 91
722
+ _goto_level = _again
723
+ next
724
+ end
725
+ end
726
+ when 2 then
727
+ begin
728
+ begin
729
+ stack[top] = cs
730
+ top+= 1
731
+ cs = 91
732
+ _goto_level = _again
733
+ next
734
+ end
735
+ end
736
+ begin
737
+ date_s = p end
738
+ when 7 then
739
+ begin
740
+ end
741
+ begin
742
+ date_time.date_string = data[date_s..(p-1)] end
743
+ begin
744
+ time_s = p end
745
+ end
746
+ end
747
+ end
748
+ if _goto_level <= _again
749
+ if cs == 0
750
+ _goto_level = _out
751
+ next
752
+ end
753
+ p += 1
754
+ if p != pe
755
+ _goto_level = _resume
756
+ next
757
+ end
758
+ end
759
+ if _goto_level <= _test_eof
760
+ if p == eof
761
+ case _eof_actions[cs]
762
+ when 13 then
763
+ begin
764
+ date_time.time_string = data[time_s..(p-1)] end
765
+ when 4 then
766
+ begin
767
+ end
768
+ end
769
+ end
770
+
771
+ end
772
+ if _goto_level <= _out
773
+ break
774
+ end
775
+ end
776
+ end
777
+
778
+
779
+ if p != eof || cs < 96
780
+ raise Mail::Field::ParseError.new(Mail::DateTimeElement, data, "Only able to parse up to #{data[0..p]}")
34
781
  end
35
782
 
36
783
  date_time
OSZAR »