kbaum-mail 2.1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/CHANGELOG.rdoc +289 -0
  2. data/README.rdoc +575 -0
  3. data/Rakefile +72 -0
  4. data/TODO.rdoc +19 -0
  5. data/lib/mail.rb +113 -0
  6. data/lib/mail/attachments_list.rb +76 -0
  7. data/lib/mail/body.rb +243 -0
  8. data/lib/mail/configuration.rb +69 -0
  9. data/lib/mail/core_extensions/nil.rb +11 -0
  10. data/lib/mail/core_extensions/string.rb +19 -0
  11. data/lib/mail/elements/address.rb +306 -0
  12. data/lib/mail/elements/address_list.rb +74 -0
  13. data/lib/mail/elements/content_disposition_element.rb +30 -0
  14. data/lib/mail/elements/content_location_element.rb +25 -0
  15. data/lib/mail/elements/content_transfer_encoding_element.rb +21 -0
  16. data/lib/mail/elements/content_type_element.rb +35 -0
  17. data/lib/mail/elements/date_time_element.rb +26 -0
  18. data/lib/mail/elements/envelope_from_element.rb +34 -0
  19. data/lib/mail/elements/message_ids_element.rb +29 -0
  20. data/lib/mail/elements/mime_version_element.rb +26 -0
  21. data/lib/mail/elements/phrase_list.rb +21 -0
  22. data/lib/mail/elements/received_element.rb +30 -0
  23. data/lib/mail/encodings/base64.rb +18 -0
  24. data/lib/mail/encodings/encodings.rb +201 -0
  25. data/lib/mail/encodings/quoted_printable.rb +26 -0
  26. data/lib/mail/envelope.rb +35 -0
  27. data/lib/mail/field.rb +219 -0
  28. data/lib/mail/field_list.rb +33 -0
  29. data/lib/mail/fields/bcc_field.rb +53 -0
  30. data/lib/mail/fields/cc_field.rb +52 -0
  31. data/lib/mail/fields/comments_field.rb +41 -0
  32. data/lib/mail/fields/common/address_container.rb +16 -0
  33. data/lib/mail/fields/common/common_address.rb +128 -0
  34. data/lib/mail/fields/common/common_date.rb +51 -0
  35. data/lib/mail/fields/common/common_field.rb +64 -0
  36. data/lib/mail/fields/common/common_message_id.rb +57 -0
  37. data/lib/mail/fields/common/parameter_hash.rb +39 -0
  38. data/lib/mail/fields/content_description_field.rb +19 -0
  39. data/lib/mail/fields/content_disposition_field.rb +60 -0
  40. data/lib/mail/fields/content_id_field.rb +63 -0
  41. data/lib/mail/fields/content_location_field.rb +42 -0
  42. data/lib/mail/fields/content_transfer_encoding_field.rb +45 -0
  43. data/lib/mail/fields/content_type_field.rb +175 -0
  44. data/lib/mail/fields/date_field.rb +53 -0
  45. data/lib/mail/fields/from_field.rb +53 -0
  46. data/lib/mail/fields/in_reply_to_field.rb +52 -0
  47. data/lib/mail/fields/keywords_field.rb +43 -0
  48. data/lib/mail/fields/message_id_field.rb +80 -0
  49. data/lib/mail/fields/mime_version_field.rb +54 -0
  50. data/lib/mail/fields/optional_field.rb +11 -0
  51. data/lib/mail/fields/received_field.rb +62 -0
  52. data/lib/mail/fields/references_field.rb +53 -0
  53. data/lib/mail/fields/reply_to_field.rb +53 -0
  54. data/lib/mail/fields/resent_bcc_field.rb +53 -0
  55. data/lib/mail/fields/resent_cc_field.rb +53 -0
  56. data/lib/mail/fields/resent_date_field.rb +33 -0
  57. data/lib/mail/fields/resent_from_field.rb +53 -0
  58. data/lib/mail/fields/resent_message_id_field.rb +32 -0
  59. data/lib/mail/fields/resent_sender_field.rb +60 -0
  60. data/lib/mail/fields/resent_to_field.rb +53 -0
  61. data/lib/mail/fields/return_path_field.rb +62 -0
  62. data/lib/mail/fields/sender_field.rb +65 -0
  63. data/lib/mail/fields/structured_field.rb +36 -0
  64. data/lib/mail/fields/subject_field.rb +15 -0
  65. data/lib/mail/fields/to_field.rb +53 -0
  66. data/lib/mail/fields/unstructured_field.rb +117 -0
  67. data/lib/mail/header.rb +235 -0
  68. data/lib/mail/mail.rb +194 -0
  69. data/lib/mail/message.rb +1780 -0
  70. data/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
  71. data/lib/mail/network/delivery_methods/sendmail.rb +62 -0
  72. data/lib/mail/network/delivery_methods/smtp.rb +110 -0
  73. data/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
  74. data/lib/mail/network/retriever_methods/imap.rb +31 -0
  75. data/lib/mail/network/retriever_methods/pop3.rb +149 -0
  76. data/lib/mail/parsers/address_lists.rb +61 -0
  77. data/lib/mail/parsers/address_lists.treetop +19 -0
  78. data/lib/mail/parsers/content_disposition.rb +369 -0
  79. data/lib/mail/parsers/content_disposition.treetop +46 -0
  80. data/lib/mail/parsers/content_location.rb +133 -0
  81. data/lib/mail/parsers/content_location.treetop +20 -0
  82. data/lib/mail/parsers/content_transfer_encoding.rb +179 -0
  83. data/lib/mail/parsers/content_transfer_encoding.treetop +25 -0
  84. data/lib/mail/parsers/content_type.rb +512 -0
  85. data/lib/mail/parsers/content_type.treetop +58 -0
  86. data/lib/mail/parsers/date_time.rb +111 -0
  87. data/lib/mail/parsers/date_time.treetop +11 -0
  88. data/lib/mail/parsers/envelope_from.rb +188 -0
  89. data/lib/mail/parsers/envelope_from.treetop +32 -0
  90. data/lib/mail/parsers/message_ids.rb +42 -0
  91. data/lib/mail/parsers/message_ids.treetop +15 -0
  92. data/lib/mail/parsers/mime_version.rb +141 -0
  93. data/lib/mail/parsers/mime_version.treetop +19 -0
  94. data/lib/mail/parsers/phrase_lists.rb +42 -0
  95. data/lib/mail/parsers/phrase_lists.treetop +15 -0
  96. data/lib/mail/parsers/received.rb +68 -0
  97. data/lib/mail/parsers/received.treetop +11 -0
  98. data/lib/mail/parsers/rfc2045.rb +406 -0
  99. data/lib/mail/parsers/rfc2045.treetop +35 -0
  100. data/lib/mail/parsers/rfc2822.rb +5081 -0
  101. data/lib/mail/parsers/rfc2822.treetop +410 -0
  102. data/lib/mail/parsers/rfc2822_obsolete.rb +3607 -0
  103. data/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  104. data/lib/mail/part.rb +82 -0
  105. data/lib/mail/parts_list.rb +34 -0
  106. data/lib/mail/patterns.rb +43 -0
  107. data/lib/mail/utilities.rb +163 -0
  108. data/lib/mail/vendor/treetop.rb +4 -0
  109. data/lib/mail/version.rb +10 -0
  110. data/lib/mail/version_specific/ruby_1_8.rb +84 -0
  111. data/lib/mail/version_specific/ruby_1_9.rb +77 -0
  112. data/lib/tasks/corpus.rake +125 -0
  113. data/lib/tasks/treetop.rake +10 -0
  114. metadata +188 -0
@@ -0,0 +1,20 @@
1
+ module Mail
2
+ grammar ContentLocation
3
+
4
+ include RFC2822
5
+ include RFC2045
6
+
7
+ rule primary
8
+ CFWS location CFWS
9
+ end
10
+
11
+ rule location
12
+ quoted_string {
13
+ def text_value
14
+ quoted_content.text_value
15
+ end
16
+ } / (token / [\x3d])+
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,179 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Mail
5
+ module ContentTransferEncoding
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :primary
10
+ end
11
+
12
+ include RFC2822
13
+
14
+ include RFC2045
15
+
16
+ module Primary0
17
+ def CFWS1
18
+ elements[0]
19
+ end
20
+
21
+ def encoding
22
+ elements[1]
23
+ end
24
+
25
+ def CFWS2
26
+ elements[2]
27
+ end
28
+ end
29
+
30
+ def _nt_primary
31
+ start_index = index
32
+ if node_cache[:primary].has_key?(index)
33
+ cached = node_cache[:primary][index]
34
+ @index = cached.interval.end if cached
35
+ return cached
36
+ end
37
+
38
+ i0, s0 = index, []
39
+ r1 = _nt_CFWS
40
+ s0 << r1
41
+ if r1
42
+ r2 = _nt_encoding
43
+ s0 << r2
44
+ if r2
45
+ r3 = _nt_CFWS
46
+ s0 << r3
47
+ end
48
+ end
49
+ if s0.last
50
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
51
+ r0.extend(Primary0)
52
+ else
53
+ @index = i0
54
+ r0 = nil
55
+ end
56
+
57
+ node_cache[:primary][start_index] = r0
58
+
59
+ r0
60
+ end
61
+
62
+ module Encoding0
63
+ def encoding
64
+ known_tokens.text_value || ietf_token.text_value || x_token.text_value
65
+ end
66
+ end
67
+
68
+ def _nt_encoding
69
+ start_index = index
70
+ if node_cache[:encoding].has_key?(index)
71
+ cached = node_cache[:encoding][index]
72
+ @index = cached.interval.end if cached
73
+ return cached
74
+ end
75
+
76
+ i0 = index
77
+ r1 = _nt_known_tokens
78
+ if r1
79
+ r0 = r1
80
+ else
81
+ r2 = _nt_ietf_token
82
+ if r2
83
+ r0 = r2
84
+ else
85
+ r3 = _nt_x_token
86
+ r3.extend(Encoding0)
87
+ if r3
88
+ r0 = r3
89
+ else
90
+ @index = i0
91
+ r0 = nil
92
+ end
93
+ end
94
+ end
95
+
96
+ node_cache[:encoding][start_index] = r0
97
+
98
+ r0
99
+ end
100
+
101
+ def _nt_known_tokens
102
+ start_index = index
103
+ if node_cache[:known_tokens].has_key?(index)
104
+ cached = node_cache[:known_tokens][index]
105
+ @index = cached.interval.end if cached
106
+ return cached
107
+ end
108
+
109
+ i0 = index
110
+ if has_terminal?("7bit", false, index)
111
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
112
+ @index += 4
113
+ else
114
+ terminal_parse_failure("7bit")
115
+ r1 = nil
116
+ end
117
+ if r1
118
+ r0 = r1
119
+ else
120
+ if has_terminal?("8bit", false, index)
121
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 4))
122
+ @index += 4
123
+ else
124
+ terminal_parse_failure("8bit")
125
+ r2 = nil
126
+ end
127
+ if r2
128
+ r0 = r2
129
+ else
130
+ if has_terminal?("binary", false, index)
131
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 6))
132
+ @index += 6
133
+ else
134
+ terminal_parse_failure("binary")
135
+ r3 = nil
136
+ end
137
+ if r3
138
+ r0 = r3
139
+ else
140
+ if has_terminal?("quoted-printable", false, index)
141
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 16))
142
+ @index += 16
143
+ else
144
+ terminal_parse_failure("quoted-printable")
145
+ r4 = nil
146
+ end
147
+ if r4
148
+ r0 = r4
149
+ else
150
+ if has_terminal?("base64", false, index)
151
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 6))
152
+ @index += 6
153
+ else
154
+ terminal_parse_failure("base64")
155
+ r5 = nil
156
+ end
157
+ if r5
158
+ r0 = r5
159
+ else
160
+ @index = i0
161
+ r0 = nil
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+
168
+ node_cache[:known_tokens][start_index] = r0
169
+
170
+ r0
171
+ end
172
+
173
+ end
174
+
175
+ class ContentTransferEncodingParser < Treetop::Runtime::CompiledParser
176
+ include ContentTransferEncoding
177
+ end
178
+
179
+ end
@@ -0,0 +1,25 @@
1
+ module Mail
2
+ grammar ContentTransferEncoding
3
+
4
+ include RFC2822
5
+ include RFC2045
6
+
7
+ rule primary
8
+ CFWS encoding CFWS
9
+ end
10
+
11
+ rule encoding
12
+ known_tokens / ietf_token / x_token {
13
+ def encoding
14
+ known_tokens.text_value || ietf_token.text_value || x_token.text_value
15
+ end
16
+ }
17
+ end
18
+
19
+ rule known_tokens
20
+ "7bit" / "8bit" / "binary" /
21
+ "quoted-printable" / "base64"
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,512 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Mail
5
+ module ContentType
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :content_type
10
+ end
11
+
12
+ include RFC2822
13
+
14
+ include RFC2045
15
+
16
+ module ContentType0
17
+ def CFWS1
18
+ elements[0]
19
+ end
20
+
21
+ def parameter
22
+ elements[2]
23
+ end
24
+
25
+ def CFWS2
26
+ elements[3]
27
+ end
28
+ end
29
+
30
+ module ContentType1
31
+ def main_type
32
+ elements[0]
33
+ end
34
+
35
+ def sub_type
36
+ elements[2]
37
+ end
38
+
39
+ def param_hashes
40
+ elements[3]
41
+ end
42
+ end
43
+
44
+ module ContentType2
45
+ def parameters
46
+ param_hashes.elements.map do |param|
47
+ param.parameter.param_hash
48
+ end
49
+ end
50
+ end
51
+
52
+ def _nt_content_type
53
+ start_index = index
54
+ if node_cache[:content_type].has_key?(index)
55
+ cached = node_cache[:content_type][index]
56
+ @index = cached.interval.end if cached
57
+ return cached
58
+ end
59
+
60
+ i0, s0 = index, []
61
+ r1 = _nt_main_type
62
+ s0 << r1
63
+ if r1
64
+ if has_terminal?("/", false, index)
65
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
66
+ @index += 1
67
+ else
68
+ terminal_parse_failure("/")
69
+ r2 = nil
70
+ end
71
+ s0 << r2
72
+ if r2
73
+ r3 = _nt_sub_type
74
+ s0 << r3
75
+ if r3
76
+ s4, i4 = [], index
77
+ loop do
78
+ i5, s5 = index, []
79
+ r6 = _nt_CFWS
80
+ s5 << r6
81
+ if r6
82
+ if has_terminal?(";", false, index)
83
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
84
+ @index += 1
85
+ else
86
+ terminal_parse_failure(";")
87
+ r8 = nil
88
+ end
89
+ if r8
90
+ r7 = r8
91
+ else
92
+ r7 = instantiate_node(SyntaxNode,input, index...index)
93
+ end
94
+ s5 << r7
95
+ if r7
96
+ r9 = _nt_parameter
97
+ s5 << r9
98
+ if r9
99
+ r10 = _nt_CFWS
100
+ s5 << r10
101
+ end
102
+ end
103
+ end
104
+ if s5.last
105
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
106
+ r5.extend(ContentType0)
107
+ else
108
+ @index = i5
109
+ r5 = nil
110
+ end
111
+ if r5
112
+ s4 << r5
113
+ else
114
+ break
115
+ end
116
+ end
117
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
118
+ s0 << r4
119
+ end
120
+ end
121
+ end
122
+ if s0.last
123
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
124
+ r0.extend(ContentType1)
125
+ r0.extend(ContentType2)
126
+ else
127
+ @index = i0
128
+ r0 = nil
129
+ end
130
+
131
+ node_cache[:content_type][start_index] = r0
132
+
133
+ r0
134
+ end
135
+
136
+ def _nt_main_type
137
+ start_index = index
138
+ if node_cache[:main_type].has_key?(index)
139
+ cached = node_cache[:main_type][index]
140
+ @index = cached.interval.end if cached
141
+ return cached
142
+ end
143
+
144
+ i0 = index
145
+ r1 = _nt_discrete_type
146
+ if r1
147
+ r0 = r1
148
+ else
149
+ r2 = _nt_composite_type
150
+ if r2
151
+ r0 = r2
152
+ else
153
+ @index = i0
154
+ r0 = nil
155
+ end
156
+ end
157
+
158
+ node_cache[:main_type][start_index] = r0
159
+
160
+ r0
161
+ end
162
+
163
+ def _nt_discrete_type
164
+ start_index = index
165
+ if node_cache[:discrete_type].has_key?(index)
166
+ cached = node_cache[:discrete_type][index]
167
+ @index = cached.interval.end if cached
168
+ return cached
169
+ end
170
+
171
+ i0 = index
172
+ if has_terminal?("text", false, index)
173
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
174
+ @index += 4
175
+ else
176
+ terminal_parse_failure("text")
177
+ r1 = nil
178
+ end
179
+ if r1
180
+ r0 = r1
181
+ else
182
+ if has_terminal?("image", false, index)
183
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 5))
184
+ @index += 5
185
+ else
186
+ terminal_parse_failure("image")
187
+ r2 = nil
188
+ end
189
+ if r2
190
+ r0 = r2
191
+ else
192
+ if has_terminal?("audio", false, index)
193
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 5))
194
+ @index += 5
195
+ else
196
+ terminal_parse_failure("audio")
197
+ r3 = nil
198
+ end
199
+ if r3
200
+ r0 = r3
201
+ else
202
+ if has_terminal?("video", false, index)
203
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 5))
204
+ @index += 5
205
+ else
206
+ terminal_parse_failure("video")
207
+ r4 = nil
208
+ end
209
+ if r4
210
+ r0 = r4
211
+ else
212
+ if has_terminal?("application", false, index)
213
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 11))
214
+ @index += 11
215
+ else
216
+ terminal_parse_failure("application")
217
+ r5 = nil
218
+ end
219
+ if r5
220
+ r0 = r5
221
+ else
222
+ r6 = _nt_extension_token
223
+ if r6
224
+ r0 = r6
225
+ else
226
+ @index = i0
227
+ r0 = nil
228
+ end
229
+ end
230
+ end
231
+ end
232
+ end
233
+ end
234
+
235
+ node_cache[:discrete_type][start_index] = r0
236
+
237
+ r0
238
+ end
239
+
240
+ def _nt_composite_type
241
+ start_index = index
242
+ if node_cache[:composite_type].has_key?(index)
243
+ cached = node_cache[:composite_type][index]
244
+ @index = cached.interval.end if cached
245
+ return cached
246
+ end
247
+
248
+ i0 = index
249
+ if has_terminal?("message", false, index)
250
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
251
+ @index += 7
252
+ else
253
+ terminal_parse_failure("message")
254
+ r1 = nil
255
+ end
256
+ if r1
257
+ r0 = r1
258
+ else
259
+ if has_terminal?("multipart", false, index)
260
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 9))
261
+ @index += 9
262
+ else
263
+ terminal_parse_failure("multipart")
264
+ r2 = nil
265
+ end
266
+ if r2
267
+ r0 = r2
268
+ else
269
+ r3 = _nt_extension_token
270
+ if r3
271
+ r0 = r3
272
+ else
273
+ @index = i0
274
+ r0 = nil
275
+ end
276
+ end
277
+ end
278
+
279
+ node_cache[:composite_type][start_index] = r0
280
+
281
+ r0
282
+ end
283
+
284
+ def _nt_extension_token
285
+ start_index = index
286
+ if node_cache[:extension_token].has_key?(index)
287
+ cached = node_cache[:extension_token][index]
288
+ @index = cached.interval.end if cached
289
+ return cached
290
+ end
291
+
292
+ i0 = index
293
+ r1 = _nt_ietf_token
294
+ if r1
295
+ r0 = r1
296
+ else
297
+ r2 = _nt_x_token
298
+ if r2
299
+ r0 = r2
300
+ else
301
+ @index = i0
302
+ r0 = nil
303
+ end
304
+ end
305
+
306
+ node_cache[:extension_token][start_index] = r0
307
+
308
+ r0
309
+ end
310
+
311
+ def _nt_sub_type
312
+ start_index = index
313
+ if node_cache[:sub_type].has_key?(index)
314
+ cached = node_cache[:sub_type][index]
315
+ @index = cached.interval.end if cached
316
+ return cached
317
+ end
318
+
319
+ i0 = index
320
+ r1 = _nt_extension_token
321
+ if r1
322
+ r0 = r1
323
+ else
324
+ r2 = _nt_iana_token
325
+ if r2
326
+ r0 = r2
327
+ else
328
+ @index = i0
329
+ r0 = nil
330
+ end
331
+ end
332
+
333
+ node_cache[:sub_type][start_index] = r0
334
+
335
+ r0
336
+ end
337
+
338
+ module Parameter0
339
+ def attr
340
+ elements[1]
341
+ end
342
+
343
+ def val
344
+ elements[3]
345
+ end
346
+
347
+ end
348
+
349
+ module Parameter1
350
+ def param_hash
351
+ {attr.text_value => val.text_value}
352
+ end
353
+ end
354
+
355
+ def _nt_parameter
356
+ start_index = index
357
+ if node_cache[:parameter].has_key?(index)
358
+ cached = node_cache[:parameter][index]
359
+ @index = cached.interval.end if cached
360
+ return cached
361
+ end
362
+
363
+ i0, s0 = index, []
364
+ r2 = _nt_CFWS
365
+ if r2
366
+ r1 = r2
367
+ else
368
+ r1 = instantiate_node(SyntaxNode,input, index...index)
369
+ end
370
+ s0 << r1
371
+ if r1
372
+ r3 = _nt_attribute
373
+ s0 << r3
374
+ if r3
375
+ if has_terminal?("=", false, index)
376
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
377
+ @index += 1
378
+ else
379
+ terminal_parse_failure("=")
380
+ r4 = nil
381
+ end
382
+ s0 << r4
383
+ if r4
384
+ r5 = _nt_value
385
+ s0 << r5
386
+ if r5
387
+ r7 = _nt_CFWS
388
+ if r7
389
+ r6 = r7
390
+ else
391
+ r6 = instantiate_node(SyntaxNode,input, index...index)
392
+ end
393
+ s0 << r6
394
+ end
395
+ end
396
+ end
397
+ end
398
+ if s0.last
399
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
400
+ r0.extend(Parameter0)
401
+ r0.extend(Parameter1)
402
+ else
403
+ @index = i0
404
+ r0 = nil
405
+ end
406
+
407
+ node_cache[:parameter][start_index] = r0
408
+
409
+ r0
410
+ end
411
+
412
+ def _nt_attribute
413
+ start_index = index
414
+ if node_cache[:attribute].has_key?(index)
415
+ cached = node_cache[:attribute][index]
416
+ @index = cached.interval.end if cached
417
+ return cached
418
+ end
419
+
420
+ s0, i0 = [], index
421
+ loop do
422
+ r1 = _nt_token
423
+ if r1
424
+ s0 << r1
425
+ else
426
+ break
427
+ end
428
+ end
429
+ if s0.empty?
430
+ @index = i0
431
+ r0 = nil
432
+ else
433
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
434
+ end
435
+
436
+ node_cache[:attribute][start_index] = r0
437
+
438
+ r0
439
+ end
440
+
441
+ module Value0
442
+ def text_value
443
+ quoted_content.text_value
444
+ end
445
+ end
446
+
447
+ def _nt_value
448
+ start_index = index
449
+ if node_cache[:value].has_key?(index)
450
+ cached = node_cache[:value][index]
451
+ @index = cached.interval.end if cached
452
+ return cached
453
+ end
454
+
455
+ i0 = index
456
+ r1 = _nt_quoted_string
457
+ r1.extend(Value0)
458
+ if r1
459
+ r0 = r1
460
+ else
461
+ s2, i2 = [], index
462
+ loop do
463
+ i3 = index
464
+ r4 = _nt_token
465
+ if r4
466
+ r3 = r4
467
+ else
468
+ if has_terminal?('\G[\\x3d]', true, index)
469
+ r5 = true
470
+ @index += 1
471
+ else
472
+ r5 = nil
473
+ end
474
+ if r5
475
+ r3 = r5
476
+ else
477
+ @index = i3
478
+ r3 = nil
479
+ end
480
+ end
481
+ if r3
482
+ s2 << r3
483
+ else
484
+ break
485
+ end
486
+ end
487
+ if s2.empty?
488
+ @index = i2
489
+ r2 = nil
490
+ else
491
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
492
+ end
493
+ if r2
494
+ r0 = r2
495
+ else
496
+ @index = i0
497
+ r0 = nil
498
+ end
499
+ end
500
+
501
+ node_cache[:value][start_index] = r0
502
+
503
+ r0
504
+ end
505
+
506
+ end
507
+
508
+ class ContentTypeParser < Treetop::Runtime::CompiledParser
509
+ include ContentType
510
+ end
511
+
512
+ end