mail 2.2.5 → 2.2.19

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 (152) hide show
  1. data/CHANGELOG.rdoc +163 -7
  2. data/README.rdoc +56 -65
  3. data/Rakefile +31 -6
  4. data/lib/VERSION +2 -2
  5. data/lib/mail/attachments_list.rb +4 -4
  6. data/lib/mail/body.rb +6 -2
  7. data/lib/mail/configuration.rb +7 -1
  8. data/lib/mail/core_extensions/shellwords.rb +55 -0
  9. data/lib/mail/core_extensions/smtp.rb +24 -0
  10. data/lib/mail/elements/address.rb +6 -6
  11. data/lib/mail/elements/content_disposition_element.rb +1 -1
  12. data/lib/mail/elements/content_type_element.rb +2 -2
  13. data/lib/mail/encodings.rb +55 -57
  14. data/lib/mail/field.rb +2 -1
  15. data/lib/mail/field_list.rb +1 -1
  16. data/lib/mail/fields/common/common_field.rb +10 -9
  17. data/lib/mail/fields/common/common_message_id.rb +6 -5
  18. data/lib/mail/fields/common/parameter_hash.rb +14 -4
  19. data/lib/mail/fields/content_disposition_field.rb +1 -1
  20. data/lib/mail/fields/content_type_field.rb +41 -28
  21. data/lib/mail/fields/date_field.rb +3 -1
  22. data/lib/mail/fields/received_field.rb +11 -3
  23. data/lib/mail/fields/resent_date_field.rb +1 -1
  24. data/lib/mail/fields/return_path_field.rb +1 -0
  25. data/lib/mail/fields/unstructured_field.rb +4 -1
  26. data/lib/mail/header.rb +8 -5
  27. data/lib/mail/mail.rb +71 -57
  28. data/lib/mail/message.rb +518 -391
  29. data/lib/mail/network/delivery_methods/sendmail.rb +15 -15
  30. data/lib/mail/network/delivery_methods/smtp.rb +33 -6
  31. data/lib/mail/network/delivery_methods/smtp_connection.rb +74 -0
  32. data/lib/mail/network/retriever_methods/base.rb +63 -0
  33. data/lib/mail/network/retriever_methods/imap.rb +147 -7
  34. data/lib/mail/network/retriever_methods/pop3.rb +25 -44
  35. data/lib/mail/network/retriever_methods/test_retriever.rb +40 -0
  36. data/lib/mail/network.rb +4 -0
  37. data/lib/mail/parsers/address_lists.rb +2 -2
  38. data/lib/mail/parsers/address_lists.treetop +2 -2
  39. data/lib/mail/parsers/content_disposition.rb +166 -18
  40. data/lib/mail/parsers/content_disposition.treetop +1 -1
  41. data/lib/mail/parsers/content_type.rb +477 -49
  42. data/lib/mail/parsers/content_type.treetop +12 -2
  43. data/lib/mail/parsers/rfc2822.rb +58 -35
  44. data/lib/mail/parsers/rfc2822.treetop +2 -2
  45. data/lib/mail/part.rb +2 -2
  46. data/lib/mail/parts_list.rb +16 -8
  47. data/lib/mail/patterns.rb +7 -2
  48. data/lib/mail/utilities.rb +31 -1
  49. data/lib/mail/version.rb +10 -8
  50. data/lib/mail/version_specific/ruby_1_8.rb +2 -2
  51. data/lib/mail/version_specific/ruby_1_9.rb +29 -8
  52. data/lib/mail.rb +8 -4
  53. metadata +44 -110
  54. data/lib/mail/attachments_list.rbc +0 -1983
  55. data/lib/mail/body.rbc +0 -3809
  56. data/lib/mail/configuration.rbc +0 -1112
  57. data/lib/mail/core_extensions/nil.rbc +0 -244
  58. data/lib/mail/core_extensions/string.rbc +0 -0
  59. data/lib/mail/elements/address.rbc +0 -4112
  60. data/lib/mail/elements/address_list.rbc +0 -1309
  61. data/lib/mail/elements/content_disposition_element.rbc +0 -701
  62. data/lib/mail/elements/content_location_element.rbc +0 -573
  63. data/lib/mail/elements/content_transfer_encoding_element.rbc +0 -535
  64. data/lib/mail/elements/content_type_element.rbc +0 -786
  65. data/lib/mail/elements/date_time_element.rbc +0 -583
  66. data/lib/mail/elements/envelope_from_element.rbc +0 -771
  67. data/lib/mail/elements/message_ids_element.rbc +0 -740
  68. data/lib/mail/elements/mime_version_element.rbc +0 -583
  69. data/lib/mail/elements/phrase_list.rbc +0 -562
  70. data/lib/mail/elements/received_element.rbc +0 -725
  71. data/lib/mail/elements.rbc +0 -362
  72. data/lib/mail/encodings/7bit.rbc +0 -538
  73. data/lib/mail/encodings/8bit.rbc +0 -541
  74. data/lib/mail/encodings/base64.rbc +0 -629
  75. data/lib/mail/encodings/binary.rbc +0 -529
  76. data/lib/mail/encodings/quoted_printable.rbc +0 -766
  77. data/lib/mail/encodings/transfer_encoding.rbc +0 -1134
  78. data/lib/mail/encodings.rbc +0 -0
  79. data/lib/mail/envelope.rbc +0 -719
  80. data/lib/mail/field.rbc +0 -4708
  81. data/lib/mail/field_list.rbc +0 -518
  82. data/lib/mail/fields/bcc_field.rbc +0 -564
  83. data/lib/mail/fields/cc_field.rbc +0 -579
  84. data/lib/mail/fields/comments_field.rbc +0 -383
  85. data/lib/mail/fields/common/address_container.rbc +0 -363
  86. data/lib/mail/fields/common/common_address.rbc +0 -3550
  87. data/lib/mail/fields/common/common_date.rbc +0 -908
  88. data/lib/mail/fields/common/common_field.rbc +0 -973
  89. data/lib/mail/fields/common/common_message_id.rbc +0 -1051
  90. data/lib/mail/fields/common/parameter_hash.rbc +0 -1335
  91. data/lib/mail/fields/content_description_field.rbc +0 -396
  92. data/lib/mail/fields/content_disposition_field.rbc +0 -1440
  93. data/lib/mail/fields/content_id_field.rbc +0 -1236
  94. data/lib/mail/fields/content_location_field.rbc +0 -892
  95. data/lib/mail/fields/content_transfer_encoding_field.rbc +0 -1184
  96. data/lib/mail/fields/content_type_field.rbc +0 -3958
  97. data/lib/mail/fields/date_field.rbc +0 -712
  98. data/lib/mail/fields/from_field.rbc +0 -579
  99. data/lib/mail/fields/in_reply_to_field.rbc +0 -579
  100. data/lib/mail/fields/keywords_field.rbc +0 -979
  101. data/lib/mail/fields/message_id_field.rbc +0 -1008
  102. data/lib/mail/fields/mime_version_field.rbc +0 -1107
  103. data/lib/mail/fields/optional_field.rbc +0 -153
  104. data/lib/mail/fields/received_field.rbc +0 -1137
  105. data/lib/mail/fields/references_field.rbc +0 -574
  106. data/lib/mail/fields/reply_to_field.rbc +0 -579
  107. data/lib/mail/fields/resent_bcc_field.rbc +0 -579
  108. data/lib/mail/fields/resent_cc_field.rbc +0 -579
  109. data/lib/mail/fields/resent_date_field.rbc +0 -656
  110. data/lib/mail/fields/resent_from_field.rbc +0 -579
  111. data/lib/mail/fields/resent_message_id_field.rbc +0 -639
  112. data/lib/mail/fields/resent_sender_field.rbc +0 -731
  113. data/lib/mail/fields/resent_to_field.rbc +0 -579
  114. data/lib/mail/fields/return_path_field.rbc +0 -737
  115. data/lib/mail/fields/sender_field.rbc +0 -799
  116. data/lib/mail/fields/structured_field.rbc +0 -671
  117. data/lib/mail/fields/subject_field.rbc +0 -378
  118. data/lib/mail/fields/to_field.rbc +0 -579
  119. data/lib/mail/fields/unstructured_field.rbc +0 -2292
  120. data/lib/mail/fields.rbc +0 -782
  121. data/lib/mail/header.rbc +0 -3720
  122. data/lib/mail/mail.rbc +0 -2168
  123. data/lib/mail/message.rbc +0 -19034
  124. data/lib/mail/network/delivery_methods/file_delivery.rbc +0 -722
  125. data/lib/mail/network/delivery_methods/sendmail.rbc +0 -800
  126. data/lib/mail/network/delivery_methods/smtp.rbc +0 -1081
  127. data/lib/mail/network/delivery_methods/test_mailer.rbc +0 -552
  128. data/lib/mail/network/retriever_methods/pop3.rbc +0 -2447
  129. data/lib/mail/network.rbc +0 -236
  130. data/lib/mail/parsers/address_lists.rbc +0 -1307
  131. data/lib/mail/parsers/content_disposition.rbc +0 -5968
  132. data/lib/mail/parsers/content_location.rbc +0 -2166
  133. data/lib/mail/parsers/content_transfer_encoding.rbc +0 -2591
  134. data/lib/mail/parsers/content_type.rbc +0 -7949
  135. data/lib/mail/parsers/date_time.rbc +0 -1836
  136. data/lib/mail/parsers/envelope_from.rbc +0 -3106
  137. data/lib/mail/parsers/message_ids.rbc +0 -989
  138. data/lib/mail/parsers/mime_version.rbc +0 -2254
  139. data/lib/mail/parsers/phrase_lists.rbc +0 -989
  140. data/lib/mail/parsers/received.rbc +0 -1267
  141. data/lib/mail/parsers/rfc2045.rbc +0 -5614
  142. data/lib/mail/parsers/rfc2822.rbc +0 -74848
  143. data/lib/mail/parsers/rfc2822_obsolete.rbc +0 -55220
  144. data/lib/mail/part.rbc +0 -2314
  145. data/lib/mail/parts_list.rbc +0 -832
  146. data/lib/mail/patterns.rbc +0 -0
  147. data/lib/mail/utilities.rbc +0 -2377
  148. data/lib/mail/version.rbc +0 -450
  149. data/lib/mail/version_specific/ruby_1_8.rbc +0 -2496
  150. data/lib/mail.rbc +0 -1151
  151. data/lib/tasks/corpus.rake.compiled.rbc +0 -2195
  152. data/lib/tasks/treetop.rake.compiled.rbc +0 -297
@@ -166,6 +166,21 @@ module Mail
166
166
  r0
167
167
  end
168
168
 
169
+ module DiscreteType0
170
+ end
171
+
172
+ module DiscreteType1
173
+ end
174
+
175
+ module DiscreteType2
176
+ end
177
+
178
+ module DiscreteType3
179
+ end
180
+
181
+ module DiscreteType4
182
+ end
183
+
169
184
  def _nt_discrete_type
170
185
  start_index = index
171
186
  if node_cache[:discrete_type].has_key?(index)
@@ -178,59 +193,324 @@ module Mail
178
193
  end
179
194
 
180
195
  i0 = index
181
- if has_terminal?("text", false, index)
182
- r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
183
- @index += 4
196
+ i1, s1 = index, []
197
+ if has_terminal?('\G[tT]', true, index)
198
+ r2 = true
199
+ @index += 1
184
200
  else
185
- terminal_parse_failure("text")
201
+ r2 = nil
202
+ end
203
+ s1 << r2
204
+ if r2
205
+ if has_terminal?('\G[eE]', true, index)
206
+ r3 = true
207
+ @index += 1
208
+ else
209
+ r3 = nil
210
+ end
211
+ s1 << r3
212
+ if r3
213
+ if has_terminal?('\G[xX]', true, index)
214
+ r4 = true
215
+ @index += 1
216
+ else
217
+ r4 = nil
218
+ end
219
+ s1 << r4
220
+ if r4
221
+ if has_terminal?('\G[tT]', true, index)
222
+ r5 = true
223
+ @index += 1
224
+ else
225
+ r5 = nil
226
+ end
227
+ s1 << r5
228
+ end
229
+ end
230
+ end
231
+ if s1.last
232
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
233
+ r1.extend(DiscreteType0)
234
+ else
235
+ @index = i1
186
236
  r1 = nil
187
237
  end
188
238
  if r1
189
239
  r0 = r1
190
240
  else
191
- if has_terminal?("image", false, index)
192
- r2 = instantiate_node(SyntaxNode,input, index...(index + 5))
193
- @index += 5
241
+ i6, s6 = index, []
242
+ if has_terminal?('\G[iI]', true, index)
243
+ r7 = true
244
+ @index += 1
194
245
  else
195
- terminal_parse_failure("image")
196
- r2 = nil
246
+ r7 = nil
197
247
  end
198
- if r2
199
- r0 = r2
248
+ s6 << r7
249
+ if r7
250
+ if has_terminal?('\G[mM]', true, index)
251
+ r8 = true
252
+ @index += 1
253
+ else
254
+ r8 = nil
255
+ end
256
+ s6 << r8
257
+ if r8
258
+ if has_terminal?('\G[aA]', true, index)
259
+ r9 = true
260
+ @index += 1
261
+ else
262
+ r9 = nil
263
+ end
264
+ s6 << r9
265
+ if r9
266
+ if has_terminal?('\G[gG]', true, index)
267
+ r10 = true
268
+ @index += 1
269
+ else
270
+ r10 = nil
271
+ end
272
+ s6 << r10
273
+ if r10
274
+ if has_terminal?('\G[eE]', true, index)
275
+ r11 = true
276
+ @index += 1
277
+ else
278
+ r11 = nil
279
+ end
280
+ s6 << r11
281
+ end
282
+ end
283
+ end
284
+ end
285
+ if s6.last
286
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
287
+ r6.extend(DiscreteType1)
200
288
  else
201
- if has_terminal?("audio", false, index)
202
- r3 = instantiate_node(SyntaxNode,input, index...(index + 5))
203
- @index += 5
289
+ @index = i6
290
+ r6 = nil
291
+ end
292
+ if r6
293
+ r0 = r6
294
+ else
295
+ i12, s12 = index, []
296
+ if has_terminal?('\G[aA]', true, index)
297
+ r13 = true
298
+ @index += 1
204
299
  else
205
- terminal_parse_failure("audio")
206
- r3 = nil
300
+ r13 = nil
207
301
  end
208
- if r3
209
- r0 = r3
302
+ s12 << r13
303
+ if r13
304
+ if has_terminal?('\G[uU]', true, index)
305
+ r14 = true
306
+ @index += 1
307
+ else
308
+ r14 = nil
309
+ end
310
+ s12 << r14
311
+ if r14
312
+ if has_terminal?('\G[dD]', true, index)
313
+ r15 = true
314
+ @index += 1
315
+ else
316
+ r15 = nil
317
+ end
318
+ s12 << r15
319
+ if r15
320
+ if has_terminal?('\G[iI]', true, index)
321
+ r16 = true
322
+ @index += 1
323
+ else
324
+ r16 = nil
325
+ end
326
+ s12 << r16
327
+ if r16
328
+ if has_terminal?('\G[oO]', true, index)
329
+ r17 = true
330
+ @index += 1
331
+ else
332
+ r17 = nil
333
+ end
334
+ s12 << r17
335
+ end
336
+ end
337
+ end
338
+ end
339
+ if s12.last
340
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
341
+ r12.extend(DiscreteType2)
342
+ else
343
+ @index = i12
344
+ r12 = nil
345
+ end
346
+ if r12
347
+ r0 = r12
210
348
  else
211
- if has_terminal?("video", false, index)
212
- r4 = instantiate_node(SyntaxNode,input, index...(index + 5))
213
- @index += 5
349
+ i18, s18 = index, []
350
+ if has_terminal?('\G[vV]', true, index)
351
+ r19 = true
352
+ @index += 1
214
353
  else
215
- terminal_parse_failure("video")
216
- r4 = nil
354
+ r19 = nil
217
355
  end
218
- if r4
219
- r0 = r4
356
+ s18 << r19
357
+ if r19
358
+ if has_terminal?('\G[iI]', true, index)
359
+ r20 = true
360
+ @index += 1
361
+ else
362
+ r20 = nil
363
+ end
364
+ s18 << r20
365
+ if r20
366
+ if has_terminal?('\G[dD]', true, index)
367
+ r21 = true
368
+ @index += 1
369
+ else
370
+ r21 = nil
371
+ end
372
+ s18 << r21
373
+ if r21
374
+ if has_terminal?('\G[eE]', true, index)
375
+ r22 = true
376
+ @index += 1
377
+ else
378
+ r22 = nil
379
+ end
380
+ s18 << r22
381
+ if r22
382
+ if has_terminal?('\G[oO]', true, index)
383
+ r23 = true
384
+ @index += 1
385
+ else
386
+ r23 = nil
387
+ end
388
+ s18 << r23
389
+ end
390
+ end
391
+ end
392
+ end
393
+ if s18.last
394
+ r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
395
+ r18.extend(DiscreteType3)
220
396
  else
221
- if has_terminal?("application", false, index)
222
- r5 = instantiate_node(SyntaxNode,input, index...(index + 11))
223
- @index += 11
397
+ @index = i18
398
+ r18 = nil
399
+ end
400
+ if r18
401
+ r0 = r18
402
+ else
403
+ i24, s24 = index, []
404
+ if has_terminal?('\G[aA]', true, index)
405
+ r25 = true
406
+ @index += 1
224
407
  else
225
- terminal_parse_failure("application")
226
- r5 = nil
408
+ r25 = nil
227
409
  end
228
- if r5
229
- r0 = r5
410
+ s24 << r25
411
+ if r25
412
+ if has_terminal?('\G[pP]', true, index)
413
+ r26 = true
414
+ @index += 1
415
+ else
416
+ r26 = nil
417
+ end
418
+ s24 << r26
419
+ if r26
420
+ if has_terminal?('\G[pP]', true, index)
421
+ r27 = true
422
+ @index += 1
423
+ else
424
+ r27 = nil
425
+ end
426
+ s24 << r27
427
+ if r27
428
+ if has_terminal?('\G[lL]', true, index)
429
+ r28 = true
430
+ @index += 1
431
+ else
432
+ r28 = nil
433
+ end
434
+ s24 << r28
435
+ if r28
436
+ if has_terminal?('\G[iI]', true, index)
437
+ r29 = true
438
+ @index += 1
439
+ else
440
+ r29 = nil
441
+ end
442
+ s24 << r29
443
+ if r29
444
+ if has_terminal?('\G[cC]', true, index)
445
+ r30 = true
446
+ @index += 1
447
+ else
448
+ r30 = nil
449
+ end
450
+ s24 << r30
451
+ if r30
452
+ if has_terminal?('\G[aA]', true, index)
453
+ r31 = true
454
+ @index += 1
455
+ else
456
+ r31 = nil
457
+ end
458
+ s24 << r31
459
+ if r31
460
+ if has_terminal?('\G[tT]', true, index)
461
+ r32 = true
462
+ @index += 1
463
+ else
464
+ r32 = nil
465
+ end
466
+ s24 << r32
467
+ if r32
468
+ if has_terminal?('\G[iI]', true, index)
469
+ r33 = true
470
+ @index += 1
471
+ else
472
+ r33 = nil
473
+ end
474
+ s24 << r33
475
+ if r33
476
+ if has_terminal?('\G[oO]', true, index)
477
+ r34 = true
478
+ @index += 1
479
+ else
480
+ r34 = nil
481
+ end
482
+ s24 << r34
483
+ if r34
484
+ if has_terminal?('\G[nN]', true, index)
485
+ r35 = true
486
+ @index += 1
487
+ else
488
+ r35 = nil
489
+ end
490
+ s24 << r35
491
+ end
492
+ end
493
+ end
494
+ end
495
+ end
496
+ end
497
+ end
498
+ end
499
+ end
500
+ end
501
+ if s24.last
502
+ r24 = instantiate_node(SyntaxNode,input, i24...index, s24)
503
+ r24.extend(DiscreteType4)
504
+ else
505
+ @index = i24
506
+ r24 = nil
507
+ end
508
+ if r24
509
+ r0 = r24
230
510
  else
231
- r6 = _nt_extension_token
232
- if r6
233
- r0 = r6
511
+ r36 = _nt_extension_token
512
+ if r36
513
+ r0 = r36
234
514
  else
235
515
  @index = i0
236
516
  r0 = nil
@@ -246,6 +526,12 @@ module Mail
246
526
  r0
247
527
  end
248
528
 
529
+ module CompositeType0
530
+ end
531
+
532
+ module CompositeType1
533
+ end
534
+
249
535
  def _nt_composite_type
250
536
  start_index = index
251
537
  if node_cache[:composite_type].has_key?(index)
@@ -258,29 +544,171 @@ module Mail
258
544
  end
259
545
 
260
546
  i0 = index
261
- if has_terminal?("message", false, index)
262
- r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
263
- @index += 7
547
+ i1, s1 = index, []
548
+ if has_terminal?('\G[mM]', true, index)
549
+ r2 = true
550
+ @index += 1
551
+ else
552
+ r2 = nil
553
+ end
554
+ s1 << r2
555
+ if r2
556
+ if has_terminal?('\G[eE]', true, index)
557
+ r3 = true
558
+ @index += 1
559
+ else
560
+ r3 = nil
561
+ end
562
+ s1 << r3
563
+ if r3
564
+ if has_terminal?('\G[sS]', true, index)
565
+ r4 = true
566
+ @index += 1
567
+ else
568
+ r4 = nil
569
+ end
570
+ s1 << r4
571
+ if r4
572
+ if has_terminal?('\G[sS]', true, index)
573
+ r5 = true
574
+ @index += 1
575
+ else
576
+ r5 = nil
577
+ end
578
+ s1 << r5
579
+ if r5
580
+ if has_terminal?('\G[aA]', true, index)
581
+ r6 = true
582
+ @index += 1
583
+ else
584
+ r6 = nil
585
+ end
586
+ s1 << r6
587
+ if r6
588
+ if has_terminal?('\G[gG]', true, index)
589
+ r7 = true
590
+ @index += 1
591
+ else
592
+ r7 = nil
593
+ end
594
+ s1 << r7
595
+ if r7
596
+ if has_terminal?('\G[eE]', true, index)
597
+ r8 = true
598
+ @index += 1
599
+ else
600
+ r8 = nil
601
+ end
602
+ s1 << r8
603
+ end
604
+ end
605
+ end
606
+ end
607
+ end
608
+ end
609
+ if s1.last
610
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
611
+ r1.extend(CompositeType0)
264
612
  else
265
- terminal_parse_failure("message")
613
+ @index = i1
266
614
  r1 = nil
267
615
  end
268
616
  if r1
269
617
  r0 = r1
270
618
  else
271
- if has_terminal?("multipart", false, index)
272
- r2 = instantiate_node(SyntaxNode,input, index...(index + 9))
273
- @index += 9
619
+ i9, s9 = index, []
620
+ if has_terminal?('\G[mM]', true, index)
621
+ r10 = true
622
+ @index += 1
274
623
  else
275
- terminal_parse_failure("multipart")
276
- r2 = nil
624
+ r10 = nil
277
625
  end
278
- if r2
279
- r0 = r2
626
+ s9 << r10
627
+ if r10
628
+ if has_terminal?('\G[uU]', true, index)
629
+ r11 = true
630
+ @index += 1
631
+ else
632
+ r11 = nil
633
+ end
634
+ s9 << r11
635
+ if r11
636
+ if has_terminal?('\G[lL]', true, index)
637
+ r12 = true
638
+ @index += 1
639
+ else
640
+ r12 = nil
641
+ end
642
+ s9 << r12
643
+ if r12
644
+ if has_terminal?('\G[tT]', true, index)
645
+ r13 = true
646
+ @index += 1
647
+ else
648
+ r13 = nil
649
+ end
650
+ s9 << r13
651
+ if r13
652
+ if has_terminal?('\G[iI]', true, index)
653
+ r14 = true
654
+ @index += 1
655
+ else
656
+ r14 = nil
657
+ end
658
+ s9 << r14
659
+ if r14
660
+ if has_terminal?('\G[pP]', true, index)
661
+ r15 = true
662
+ @index += 1
663
+ else
664
+ r15 = nil
665
+ end
666
+ s9 << r15
667
+ if r15
668
+ if has_terminal?('\G[aA]', true, index)
669
+ r16 = true
670
+ @index += 1
671
+ else
672
+ r16 = nil
673
+ end
674
+ s9 << r16
675
+ if r16
676
+ if has_terminal?('\G[rR]', true, index)
677
+ r17 = true
678
+ @index += 1
679
+ else
680
+ r17 = nil
681
+ end
682
+ s9 << r17
683
+ if r17
684
+ if has_terminal?('\G[tT]', true, index)
685
+ r18 = true
686
+ @index += 1
687
+ else
688
+ r18 = nil
689
+ end
690
+ s9 << r18
691
+ end
692
+ end
693
+ end
694
+ end
695
+ end
696
+ end
697
+ end
698
+ end
699
+ if s9.last
700
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
701
+ r9.extend(CompositeType1)
280
702
  else
281
- r3 = _nt_extension_token
282
- if r3
283
- r0 = r3
703
+ @index = i9
704
+ r9 = nil
705
+ end
706
+ if r9
707
+ r0 = r9
708
+ else
709
+ r19 = _nt_extension_token
710
+ if r19
711
+ r0 = r19
284
712
  else
285
713
  @index = i0
286
714
  r0 = nil
@@ -18,12 +18,22 @@ module Mail
18
18
  discrete_type / composite_type
19
19
  end
20
20
 
21
+ # This matches in a case insensitive way:
22
+ #
23
+ # rule discrete_type
24
+ # "text" / "image" / "audio" / "video" / "application" / extension_token
25
+ # end
21
26
  rule discrete_type
22
- "text" / "image" / "audio" / "video" / "application" / extension_token
27
+ [tT] [eE] [xX] [tT] / [iI] [mM] [aA] [gG] [eE] / [aA] [uU] [dD] [iI] [oO] / [vV] [iI] [dD] [eE] [oO] / [aA] [pP] [pP] [lL] [iI] [cC] [aA] [tT] [iI] [oO] [nN] / extension_token
23
28
  end
24
29
 
30
+ # This matches in a case insensitive way:
31
+ #
32
+ # rule composite_type
33
+ # "message" / "multipart" / extension_token
34
+ # end
25
35
  rule composite_type
26
- "message" / "multipart" / extension_token
36
+ [mM] [eE] [sS] [sS] [aA] [gG] [eE] / [mM] [uU] [lL] [tT] [iI] [pP] [aA] [rR] [tT] / extension_token
27
37
  end
28
38
 
29
39
  rule extension_token