mail 1.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of mail might be problematic. Click here for more details.

Files changed (107) hide show
  1. data/.gitignore +4 -0
  2. data/Manifest.txt +106 -0
  3. data/README.rdoc +441 -0
  4. data/Rakefile +38 -0
  5. data/lib/mail.rb +86 -0
  6. data/lib/mail/attachment.rb +90 -0
  7. data/lib/mail/body.rb +149 -0
  8. data/lib/mail/configuration.rb +90 -0
  9. data/lib/mail/core_extensions.rb +6 -0
  10. data/lib/mail/core_extensions/blank.rb +41 -0
  11. data/lib/mail/core_extensions/nil.rb +15 -0
  12. data/lib/mail/core_extensions/string.rb +31 -0
  13. data/lib/mail/elements/address.rb +293 -0
  14. data/lib/mail/elements/address_list.rb +62 -0
  15. data/lib/mail/elements/content_disposition_element.rb +34 -0
  16. data/lib/mail/elements/content_transfer_encoding_element.rb +21 -0
  17. data/lib/mail/elements/content_type_element.rb +39 -0
  18. data/lib/mail/elements/date_time_element.rb +26 -0
  19. data/lib/mail/elements/envelope_from_element.rb +34 -0
  20. data/lib/mail/elements/message_ids_element.rb +29 -0
  21. data/lib/mail/elements/mime_version_element.rb +26 -0
  22. data/lib/mail/elements/phrase_list.rb +21 -0
  23. data/lib/mail/elements/received_element.rb +30 -0
  24. data/lib/mail/encodings/base64.rb +17 -0
  25. data/lib/mail/encodings/encodings.rb +24 -0
  26. data/lib/mail/encodings/quoted_printable.rb +26 -0
  27. data/lib/mail/envelope.rb +35 -0
  28. data/lib/mail/field.rb +202 -0
  29. data/lib/mail/field_list.rb +33 -0
  30. data/lib/mail/fields/bcc_field.rb +40 -0
  31. data/lib/mail/fields/cc_field.rb +40 -0
  32. data/lib/mail/fields/comments_field.rb +41 -0
  33. data/lib/mail/fields/common/common_address.rb +62 -0
  34. data/lib/mail/fields/common/common_date.rb +35 -0
  35. data/lib/mail/fields/common/common_field.rb +128 -0
  36. data/lib/mail/fields/common/common_message_id.rb +35 -0
  37. data/lib/mail/fields/content_description_field.rb +15 -0
  38. data/lib/mail/fields/content_disposition_field.rb +34 -0
  39. data/lib/mail/fields/content_id_field.rb +50 -0
  40. data/lib/mail/fields/content_transfer_encoding_field.rb +28 -0
  41. data/lib/mail/fields/content_type_field.rb +50 -0
  42. data/lib/mail/fields/date_field.rb +44 -0
  43. data/lib/mail/fields/from_field.rb +40 -0
  44. data/lib/mail/fields/in_reply_to_field.rb +42 -0
  45. data/lib/mail/fields/keywords_field.rb +22 -0
  46. data/lib/mail/fields/message_id_field.rb +70 -0
  47. data/lib/mail/fields/mime_version_field.rb +42 -0
  48. data/lib/mail/fields/optional_field.rb +11 -0
  49. data/lib/mail/fields/received_field.rb +49 -0
  50. data/lib/mail/fields/references_field.rb +42 -0
  51. data/lib/mail/fields/reply_to_field.rb +40 -0
  52. data/lib/mail/fields/resent_bcc_field.rb +40 -0
  53. data/lib/mail/fields/resent_cc_field.rb +40 -0
  54. data/lib/mail/fields/resent_date_field.rb +16 -0
  55. data/lib/mail/fields/resent_from_field.rb +40 -0
  56. data/lib/mail/fields/resent_message_id_field.rb +20 -0
  57. data/lib/mail/fields/resent_sender_field.rb +48 -0
  58. data/lib/mail/fields/resent_to_field.rb +40 -0
  59. data/lib/mail/fields/return_path_field.rb +34 -0
  60. data/lib/mail/fields/sender_field.rb +48 -0
  61. data/lib/mail/fields/structured_field.rb +32 -0
  62. data/lib/mail/fields/subject_field.rb +14 -0
  63. data/lib/mail/fields/to_field.rb +40 -0
  64. data/lib/mail/fields/unstructured_field.rb +27 -0
  65. data/lib/mail/header.rb +213 -0
  66. data/lib/mail/mail.rb +120 -0
  67. data/lib/mail/message.rb +648 -0
  68. data/lib/mail/network/deliverable.rb +42 -0
  69. data/lib/mail/network/retrievable.rb +63 -0
  70. data/lib/mail/parsers/address_lists.rb +61 -0
  71. data/lib/mail/parsers/address_lists.treetop +19 -0
  72. data/lib/mail/parsers/content_disposition.rb +358 -0
  73. data/lib/mail/parsers/content_disposition.treetop +45 -0
  74. data/lib/mail/parsers/content_transfer_encoding.rb +179 -0
  75. data/lib/mail/parsers/content_transfer_encoding.treetop +25 -0
  76. data/lib/mail/parsers/content_type.rb +507 -0
  77. data/lib/mail/parsers/content_type.treetop +58 -0
  78. data/lib/mail/parsers/date_time.rb +111 -0
  79. data/lib/mail/parsers/date_time.treetop +11 -0
  80. data/lib/mail/parsers/envelope_from.rb +188 -0
  81. data/lib/mail/parsers/envelope_from.treetop +32 -0
  82. data/lib/mail/parsers/message_ids.rb +42 -0
  83. data/lib/mail/parsers/message_ids.treetop +15 -0
  84. data/lib/mail/parsers/mime_version.rb +141 -0
  85. data/lib/mail/parsers/mime_version.treetop +19 -0
  86. data/lib/mail/parsers/phrase_lists.rb +42 -0
  87. data/lib/mail/parsers/phrase_lists.treetop +15 -0
  88. data/lib/mail/parsers/received.rb +68 -0
  89. data/lib/mail/parsers/received.treetop +11 -0
  90. data/lib/mail/parsers/rfc2045.rb +406 -0
  91. data/lib/mail/parsers/rfc2045.treetop +35 -0
  92. data/lib/mail/parsers/rfc2822.rb +5005 -0
  93. data/lib/mail/parsers/rfc2822.treetop +402 -0
  94. data/lib/mail/parsers/rfc2822_obsolete.rb +3607 -0
  95. data/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  96. data/lib/mail/part.rb +120 -0
  97. data/lib/mail/patterns.rb +42 -0
  98. data/lib/mail/utilities.rb +142 -0
  99. data/lib/mail/version.rb +10 -0
  100. data/lib/mail/version_specific/multibyte.rb +62 -0
  101. data/lib/mail/version_specific/multibyte/chars.rb +701 -0
  102. data/lib/mail/version_specific/multibyte/exceptions.rb +8 -0
  103. data/lib/mail/version_specific/multibyte/unicode_database.rb +71 -0
  104. data/lib/mail/version_specific/ruby_1_8.rb +61 -0
  105. data/lib/mail/version_specific/ruby_1_8_string.rb +88 -0
  106. data/lib/mail/version_specific/ruby_1_9.rb +49 -0
  107. metadata +192 -0
@@ -0,0 +1,35 @@
1
+ module Mail
2
+ grammar RFC2045
3
+
4
+ rule tspecials
5
+ "(" / ")" / "<" / ">" / "@" /
6
+ "," / ";" / ":" / '\\' / "<" / ">" /
7
+ "/" / "[" / "]" / "?" / "="
8
+ end
9
+
10
+ rule ietf_token
11
+ token+
12
+ end
13
+
14
+ rule x_token
15
+ [xX] "-" token+
16
+ end
17
+
18
+ rule iana_token
19
+ token+
20
+ # <A publicly-defined extension token. Tokens
21
+ # of this form must be registered with IANA
22
+ # as specified in RFC 2048.>
23
+ end
24
+
25
+ rule token
26
+ [\x21-\x27] / # any (US-ASCII) CHAR
27
+ [\x2a-\x2b] / # except SPACE,
28
+ [\x2c-\x2e] / # CTLs,
29
+ [\x30-\x39] / # or tspecials
30
+ [\x41-\x5a] /
31
+ [\x5e-\x7e]
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,5005 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Mail
5
+ module RFC2822
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root || :ALPHA
10
+ end
11
+
12
+ include RFC2822Obsolete
13
+
14
+ def _nt_ALPHA
15
+ start_index = index
16
+ if node_cache[:ALPHA].has_key?(index)
17
+ cached = node_cache[:ALPHA][index]
18
+ @index = cached.interval.end if cached
19
+ return cached
20
+ end
21
+
22
+ if has_terminal?('\G[a-zA-Z]', true, index)
23
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
24
+ @index += 1
25
+ else
26
+ r0 = nil
27
+ end
28
+
29
+ node_cache[:ALPHA][start_index] = r0
30
+
31
+ r0
32
+ end
33
+
34
+ def _nt_DIGIT
35
+ start_index = index
36
+ if node_cache[:DIGIT].has_key?(index)
37
+ cached = node_cache[:DIGIT][index]
38
+ @index = cached.interval.end if cached
39
+ return cached
40
+ end
41
+
42
+ if has_terminal?('\G[0-9]', true, index)
43
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
44
+ @index += 1
45
+ else
46
+ r0 = nil
47
+ end
48
+
49
+ node_cache[:DIGIT][start_index] = r0
50
+
51
+ r0
52
+ end
53
+
54
+ def _nt_DQUOTE
55
+ start_index = index
56
+ if node_cache[:DQUOTE].has_key?(index)
57
+ cached = node_cache[:DQUOTE][index]
58
+ @index = cached.interval.end if cached
59
+ return cached
60
+ end
61
+
62
+ if has_terminal?('"', false, index)
63
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
64
+ @index += 1
65
+ else
66
+ terminal_parse_failure('"')
67
+ r0 = nil
68
+ end
69
+
70
+ node_cache[:DQUOTE][start_index] = r0
71
+
72
+ r0
73
+ end
74
+
75
+ def _nt_LF
76
+ start_index = index
77
+ if node_cache[:LF].has_key?(index)
78
+ cached = node_cache[:LF][index]
79
+ @index = cached.interval.end if cached
80
+ return cached
81
+ end
82
+
83
+ if has_terminal?("\n", false, index)
84
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
85
+ @index += 1
86
+ else
87
+ terminal_parse_failure("\n")
88
+ r0 = nil
89
+ end
90
+
91
+ node_cache[:LF][start_index] = r0
92
+
93
+ r0
94
+ end
95
+
96
+ def _nt_CR
97
+ start_index = index
98
+ if node_cache[:CR].has_key?(index)
99
+ cached = node_cache[:CR][index]
100
+ @index = cached.interval.end if cached
101
+ return cached
102
+ end
103
+
104
+ if has_terminal?("\r", false, index)
105
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
106
+ @index += 1
107
+ else
108
+ terminal_parse_failure("\r")
109
+ r0 = nil
110
+ end
111
+
112
+ node_cache[:CR][start_index] = r0
113
+
114
+ r0
115
+ end
116
+
117
+ def _nt_CRLF
118
+ start_index = index
119
+ if node_cache[:CRLF].has_key?(index)
120
+ cached = node_cache[:CRLF][index]
121
+ @index = cached.interval.end if cached
122
+ return cached
123
+ end
124
+
125
+ if has_terminal?("\r\n", false, index)
126
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 2))
127
+ @index += 2
128
+ else
129
+ terminal_parse_failure("\r\n")
130
+ r0 = nil
131
+ end
132
+
133
+ node_cache[:CRLF][start_index] = r0
134
+
135
+ r0
136
+ end
137
+
138
+ def _nt_WSP
139
+ start_index = index
140
+ if node_cache[:WSP].has_key?(index)
141
+ cached = node_cache[:WSP][index]
142
+ @index = cached.interval.end if cached
143
+ return cached
144
+ end
145
+
146
+ if has_terminal?('\G[\\x09\\x20]', true, index)
147
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
148
+ @index += 1
149
+ else
150
+ r0 = nil
151
+ end
152
+
153
+ node_cache[:WSP][start_index] = r0
154
+
155
+ r0
156
+ end
157
+
158
+ def _nt_NO_WS_CTL
159
+ start_index = index
160
+ if node_cache[:NO_WS_CTL].has_key?(index)
161
+ cached = node_cache[:NO_WS_CTL][index]
162
+ @index = cached.interval.end if cached
163
+ return cached
164
+ end
165
+
166
+ i0 = index
167
+ if has_terminal?('\G[\\x01-\\x08]', true, index)
168
+ r1 = true
169
+ @index += 1
170
+ else
171
+ r1 = nil
172
+ end
173
+ if r1
174
+ r0 = r1
175
+ else
176
+ if has_terminal?('\G[\\x0B-\\x0C]', true, index)
177
+ r2 = true
178
+ @index += 1
179
+ else
180
+ r2 = nil
181
+ end
182
+ if r2
183
+ r0 = r2
184
+ else
185
+ if has_terminal?('\G[\\x0E-\\x1F]', true, index)
186
+ r3 = true
187
+ @index += 1
188
+ else
189
+ r3 = nil
190
+ end
191
+ if r3
192
+ r0 = r3
193
+ else
194
+ if has_terminal?('\G[\\x7f]', true, index)
195
+ r4 = true
196
+ @index += 1
197
+ else
198
+ r4 = nil
199
+ end
200
+ if r4
201
+ r0 = r4
202
+ else
203
+ @index = i0
204
+ r0 = nil
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ node_cache[:NO_WS_CTL][start_index] = r0
211
+
212
+ r0
213
+ end
214
+
215
+ def _nt_specials
216
+ start_index = index
217
+ if node_cache[:specials].has_key?(index)
218
+ cached = node_cache[:specials][index]
219
+ @index = cached.interval.end if cached
220
+ return cached
221
+ end
222
+
223
+ i0 = index
224
+ if has_terminal?("(", false, index)
225
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
226
+ @index += 1
227
+ else
228
+ terminal_parse_failure("(")
229
+ r1 = nil
230
+ end
231
+ if r1
232
+ r0 = r1
233
+ else
234
+ if has_terminal?(")", false, index)
235
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
236
+ @index += 1
237
+ else
238
+ terminal_parse_failure(")")
239
+ r2 = nil
240
+ end
241
+ if r2
242
+ r0 = r2
243
+ else
244
+ if has_terminal?("<", false, index)
245
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
246
+ @index += 1
247
+ else
248
+ terminal_parse_failure("<")
249
+ r3 = nil
250
+ end
251
+ if r3
252
+ r0 = r3
253
+ else
254
+ if has_terminal?(">", false, index)
255
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
256
+ @index += 1
257
+ else
258
+ terminal_parse_failure(">")
259
+ r4 = nil
260
+ end
261
+ if r4
262
+ r0 = r4
263
+ else
264
+ if has_terminal?("[", false, index)
265
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
266
+ @index += 1
267
+ else
268
+ terminal_parse_failure("[")
269
+ r5 = nil
270
+ end
271
+ if r5
272
+ r0 = r5
273
+ else
274
+ if has_terminal?("]", false, index)
275
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
276
+ @index += 1
277
+ else
278
+ terminal_parse_failure("]")
279
+ r6 = nil
280
+ end
281
+ if r6
282
+ r0 = r6
283
+ else
284
+ if has_terminal?(":", false, index)
285
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
286
+ @index += 1
287
+ else
288
+ terminal_parse_failure(":")
289
+ r7 = nil
290
+ end
291
+ if r7
292
+ r0 = r7
293
+ else
294
+ if has_terminal?(";", false, index)
295
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
296
+ @index += 1
297
+ else
298
+ terminal_parse_failure(";")
299
+ r8 = nil
300
+ end
301
+ if r8
302
+ r0 = r8
303
+ else
304
+ if has_terminal?("@", false, index)
305
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
306
+ @index += 1
307
+ else
308
+ terminal_parse_failure("@")
309
+ r9 = nil
310
+ end
311
+ if r9
312
+ r0 = r9
313
+ else
314
+ if has_terminal?('\\', false, index)
315
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
316
+ @index += 1
317
+ else
318
+ terminal_parse_failure('\\')
319
+ r10 = nil
320
+ end
321
+ if r10
322
+ r0 = r10
323
+ else
324
+ if has_terminal?(",", false, index)
325
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
326
+ @index += 1
327
+ else
328
+ terminal_parse_failure(",")
329
+ r11 = nil
330
+ end
331
+ if r11
332
+ r0 = r11
333
+ else
334
+ if has_terminal?(".", false, index)
335
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
336
+ @index += 1
337
+ else
338
+ terminal_parse_failure(".")
339
+ r12 = nil
340
+ end
341
+ if r12
342
+ r0 = r12
343
+ else
344
+ r13 = _nt_DQUOTE
345
+ if r13
346
+ r0 = r13
347
+ else
348
+ @index = i0
349
+ r0 = nil
350
+ end
351
+ end
352
+ end
353
+ end
354
+ end
355
+ end
356
+ end
357
+ end
358
+ end
359
+ end
360
+ end
361
+ end
362
+ end
363
+
364
+ node_cache[:specials][start_index] = r0
365
+
366
+ r0
367
+ end
368
+
369
+ module FWS0
370
+ def CRLF
371
+ elements[1]
372
+ end
373
+
374
+ end
375
+
376
+ module FWS1
377
+ def CRLF
378
+ elements[0]
379
+ end
380
+
381
+ end
382
+
383
+ def _nt_FWS
384
+ start_index = index
385
+ if node_cache[:FWS].has_key?(index)
386
+ cached = node_cache[:FWS][index]
387
+ @index = cached.interval.end if cached
388
+ return cached
389
+ end
390
+
391
+ i0 = index
392
+ i1, s1 = index, []
393
+ s2, i2 = [], index
394
+ loop do
395
+ r3 = _nt_WSP
396
+ if r3
397
+ s2 << r3
398
+ else
399
+ break
400
+ end
401
+ end
402
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
403
+ s1 << r2
404
+ if r2
405
+ r4 = _nt_CRLF
406
+ s1 << r4
407
+ if r4
408
+ s5, i5 = [], index
409
+ loop do
410
+ r6 = _nt_WSP
411
+ if r6
412
+ s5 << r6
413
+ else
414
+ break
415
+ end
416
+ end
417
+ if s5.empty?
418
+ @index = i5
419
+ r5 = nil
420
+ else
421
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
422
+ end
423
+ s1 << r5
424
+ end
425
+ end
426
+ if s1.last
427
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
428
+ r1.extend(FWS0)
429
+ else
430
+ @index = i1
431
+ r1 = nil
432
+ end
433
+ if r1
434
+ r0 = r1
435
+ else
436
+ i7, s7 = index, []
437
+ r8 = _nt_CRLF
438
+ s7 << r8
439
+ if r8
440
+ s9, i9 = [], index
441
+ loop do
442
+ r10 = _nt_WSP
443
+ if r10
444
+ s9 << r10
445
+ else
446
+ break
447
+ end
448
+ end
449
+ if s9.empty?
450
+ @index = i9
451
+ r9 = nil
452
+ else
453
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
454
+ end
455
+ s7 << r9
456
+ end
457
+ if s7.last
458
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
459
+ r7.extend(FWS1)
460
+ else
461
+ @index = i7
462
+ r7 = nil
463
+ end
464
+ if r7
465
+ r0 = r7
466
+ else
467
+ r11 = _nt_obs_FWS
468
+ if r11
469
+ r0 = r11
470
+ else
471
+ @index = i0
472
+ r0 = nil
473
+ end
474
+ end
475
+ end
476
+
477
+ node_cache[:FWS][start_index] = r0
478
+
479
+ r0
480
+ end
481
+
482
+ module CFWS0
483
+ def comment
484
+ elements[1]
485
+ end
486
+ end
487
+
488
+ module CFWS1
489
+ end
490
+
491
+ def _nt_CFWS
492
+ start_index = index
493
+ if node_cache[:CFWS].has_key?(index)
494
+ cached = node_cache[:CFWS][index]
495
+ @index = cached.interval.end if cached
496
+ return cached
497
+ end
498
+
499
+ i0, s0 = index, []
500
+ s1, i1 = [], index
501
+ loop do
502
+ i2, s2 = index, []
503
+ s3, i3 = [], index
504
+ loop do
505
+ r4 = _nt_FWS
506
+ if r4
507
+ s3 << r4
508
+ else
509
+ break
510
+ end
511
+ end
512
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
513
+ s2 << r3
514
+ if r3
515
+ r5 = _nt_comment
516
+ s2 << r5
517
+ end
518
+ if s2.last
519
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
520
+ r2.extend(CFWS0)
521
+ else
522
+ @index = i2
523
+ r2 = nil
524
+ end
525
+ if r2
526
+ s1 << r2
527
+ else
528
+ break
529
+ end
530
+ end
531
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
532
+ s0 << r1
533
+ if r1
534
+ r7 = _nt_FWS
535
+ if r7
536
+ r6 = r7
537
+ else
538
+ r6 = instantiate_node(SyntaxNode,input, index...index)
539
+ end
540
+ s0 << r6
541
+ end
542
+ if s0.last
543
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
544
+ r0.extend(CFWS1)
545
+ else
546
+ @index = i0
547
+ r0 = nil
548
+ end
549
+
550
+ node_cache[:CFWS][start_index] = r0
551
+
552
+ r0
553
+ end
554
+
555
+ def _nt_ctext
556
+ start_index = index
557
+ if node_cache[:ctext].has_key?(index)
558
+ cached = node_cache[:ctext][index]
559
+ @index = cached.interval.end if cached
560
+ return cached
561
+ end
562
+
563
+ i0 = index
564
+ r1 = _nt_NO_WS_CTL
565
+ if r1
566
+ r0 = r1
567
+ else
568
+ if has_terminal?('\G[\\x21-\\x27]', true, index)
569
+ r2 = true
570
+ @index += 1
571
+ else
572
+ r2 = nil
573
+ end
574
+ if r2
575
+ r0 = r2
576
+ else
577
+ if has_terminal?('\G[\\x2a-\\x5b]', true, index)
578
+ r3 = true
579
+ @index += 1
580
+ else
581
+ r3 = nil
582
+ end
583
+ if r3
584
+ r0 = r3
585
+ else
586
+ if has_terminal?('\G[\\x5d-\\x7e]', true, index)
587
+ r4 = true
588
+ @index += 1
589
+ else
590
+ r4 = nil
591
+ end
592
+ if r4
593
+ r0 = r4
594
+ else
595
+ @index = i0
596
+ r0 = nil
597
+ end
598
+ end
599
+ end
600
+ end
601
+
602
+ node_cache[:ctext][start_index] = r0
603
+
604
+ r0
605
+ end
606
+
607
+ def _nt_ccontent
608
+ start_index = index
609
+ if node_cache[:ccontent].has_key?(index)
610
+ cached = node_cache[:ccontent][index]
611
+ @index = cached.interval.end if cached
612
+ return cached
613
+ end
614
+
615
+ i0 = index
616
+ r1 = _nt_ctext
617
+ if r1
618
+ r0 = r1
619
+ else
620
+ r2 = _nt_quoted_pair
621
+ if r2
622
+ r0 = r2
623
+ else
624
+ r3 = _nt_comment
625
+ if r3
626
+ r0 = r3
627
+ else
628
+ @index = i0
629
+ r0 = nil
630
+ end
631
+ end
632
+ end
633
+
634
+ node_cache[:ccontent][start_index] = r0
635
+
636
+ r0
637
+ end
638
+
639
+ module Comment0
640
+ def ccontent
641
+ elements[1]
642
+ end
643
+ end
644
+
645
+ module Comment1
646
+ end
647
+
648
+ def _nt_comment
649
+ start_index = index
650
+ if node_cache[:comment].has_key?(index)
651
+ cached = node_cache[:comment][index]
652
+ @index = cached.interval.end if cached
653
+ return cached
654
+ end
655
+
656
+ i0, s0 = index, []
657
+ if has_terminal?("(", false, index)
658
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
659
+ @index += 1
660
+ else
661
+ terminal_parse_failure("(")
662
+ r1 = nil
663
+ end
664
+ s0 << r1
665
+ if r1
666
+ s2, i2 = [], index
667
+ loop do
668
+ i3, s3 = index, []
669
+ r5 = _nt_FWS
670
+ if r5
671
+ r4 = r5
672
+ else
673
+ r4 = instantiate_node(SyntaxNode,input, index...index)
674
+ end
675
+ s3 << r4
676
+ if r4
677
+ r6 = _nt_ccontent
678
+ s3 << r6
679
+ end
680
+ if s3.last
681
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
682
+ r3.extend(Comment0)
683
+ else
684
+ @index = i3
685
+ r3 = nil
686
+ end
687
+ if r3
688
+ s2 << r3
689
+ else
690
+ break
691
+ end
692
+ end
693
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
694
+ s0 << r2
695
+ if r2
696
+ r8 = _nt_FWS
697
+ if r8
698
+ r7 = r8
699
+ else
700
+ r7 = instantiate_node(SyntaxNode,input, index...index)
701
+ end
702
+ s0 << r7
703
+ if r7
704
+ if has_terminal?(")", false, index)
705
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
706
+ @index += 1
707
+ else
708
+ terminal_parse_failure(")")
709
+ r9 = nil
710
+ end
711
+ s0 << r9
712
+ end
713
+ end
714
+ end
715
+ if s0.last
716
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
717
+ r0.extend(Comment1)
718
+ else
719
+ @index = i0
720
+ r0 = nil
721
+ end
722
+
723
+ node_cache[:comment][start_index] = r0
724
+
725
+ r0
726
+ end
727
+
728
+ def _nt_atext
729
+ start_index = index
730
+ if node_cache[:atext].has_key?(index)
731
+ cached = node_cache[:atext][index]
732
+ @index = cached.interval.end if cached
733
+ return cached
734
+ end
735
+
736
+ i0 = index
737
+ r1 = _nt_ALPHA
738
+ if r1
739
+ r0 = r1
740
+ else
741
+ r2 = _nt_DIGIT
742
+ if r2
743
+ r0 = r2
744
+ else
745
+ if has_terminal?("!", false, index)
746
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
747
+ @index += 1
748
+ else
749
+ terminal_parse_failure("!")
750
+ r3 = nil
751
+ end
752
+ if r3
753
+ r0 = r3
754
+ else
755
+ if has_terminal?("#", false, index)
756
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
757
+ @index += 1
758
+ else
759
+ terminal_parse_failure("#")
760
+ r4 = nil
761
+ end
762
+ if r4
763
+ r0 = r4
764
+ else
765
+ if has_terminal?("$", false, index)
766
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
767
+ @index += 1
768
+ else
769
+ terminal_parse_failure("$")
770
+ r5 = nil
771
+ end
772
+ if r5
773
+ r0 = r5
774
+ else
775
+ if has_terminal?("%", false, index)
776
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
777
+ @index += 1
778
+ else
779
+ terminal_parse_failure("%")
780
+ r6 = nil
781
+ end
782
+ if r6
783
+ r0 = r6
784
+ else
785
+ if has_terminal?("&", false, index)
786
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
787
+ @index += 1
788
+ else
789
+ terminal_parse_failure("&")
790
+ r7 = nil
791
+ end
792
+ if r7
793
+ r0 = r7
794
+ else
795
+ if has_terminal?("'", false, index)
796
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
797
+ @index += 1
798
+ else
799
+ terminal_parse_failure("'")
800
+ r8 = nil
801
+ end
802
+ if r8
803
+ r0 = r8
804
+ else
805
+ if has_terminal?("*", false, index)
806
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
807
+ @index += 1
808
+ else
809
+ terminal_parse_failure("*")
810
+ r9 = nil
811
+ end
812
+ if r9
813
+ r0 = r9
814
+ else
815
+ if has_terminal?("+", false, index)
816
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
817
+ @index += 1
818
+ else
819
+ terminal_parse_failure("+")
820
+ r10 = nil
821
+ end
822
+ if r10
823
+ r0 = r10
824
+ else
825
+ if has_terminal?("-", false, index)
826
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
827
+ @index += 1
828
+ else
829
+ terminal_parse_failure("-")
830
+ r11 = nil
831
+ end
832
+ if r11
833
+ r0 = r11
834
+ else
835
+ if has_terminal?("/", false, index)
836
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
837
+ @index += 1
838
+ else
839
+ terminal_parse_failure("/")
840
+ r12 = nil
841
+ end
842
+ if r12
843
+ r0 = r12
844
+ else
845
+ if has_terminal?("=", false, index)
846
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
847
+ @index += 1
848
+ else
849
+ terminal_parse_failure("=")
850
+ r13 = nil
851
+ end
852
+ if r13
853
+ r0 = r13
854
+ else
855
+ if has_terminal?("?", false, index)
856
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
857
+ @index += 1
858
+ else
859
+ terminal_parse_failure("?")
860
+ r14 = nil
861
+ end
862
+ if r14
863
+ r0 = r14
864
+ else
865
+ if has_terminal?("^", false, index)
866
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
867
+ @index += 1
868
+ else
869
+ terminal_parse_failure("^")
870
+ r15 = nil
871
+ end
872
+ if r15
873
+ r0 = r15
874
+ else
875
+ if has_terminal?("_", false, index)
876
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
877
+ @index += 1
878
+ else
879
+ terminal_parse_failure("_")
880
+ r16 = nil
881
+ end
882
+ if r16
883
+ r0 = r16
884
+ else
885
+ if has_terminal?("`", false, index)
886
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
887
+ @index += 1
888
+ else
889
+ terminal_parse_failure("`")
890
+ r17 = nil
891
+ end
892
+ if r17
893
+ r0 = r17
894
+ else
895
+ if has_terminal?("{", false, index)
896
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
897
+ @index += 1
898
+ else
899
+ terminal_parse_failure("{")
900
+ r18 = nil
901
+ end
902
+ if r18
903
+ r0 = r18
904
+ else
905
+ if has_terminal?("|", false, index)
906
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
907
+ @index += 1
908
+ else
909
+ terminal_parse_failure("|")
910
+ r19 = nil
911
+ end
912
+ if r19
913
+ r0 = r19
914
+ else
915
+ if has_terminal?("}", false, index)
916
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
917
+ @index += 1
918
+ else
919
+ terminal_parse_failure("}")
920
+ r20 = nil
921
+ end
922
+ if r20
923
+ r0 = r20
924
+ else
925
+ if has_terminal?("~", false, index)
926
+ r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
927
+ @index += 1
928
+ else
929
+ terminal_parse_failure("~")
930
+ r21 = nil
931
+ end
932
+ if r21
933
+ r0 = r21
934
+ else
935
+ @index = i0
936
+ r0 = nil
937
+ end
938
+ end
939
+ end
940
+ end
941
+ end
942
+ end
943
+ end
944
+ end
945
+ end
946
+ end
947
+ end
948
+ end
949
+ end
950
+ end
951
+ end
952
+ end
953
+ end
954
+ end
955
+ end
956
+ end
957
+ end
958
+
959
+ node_cache[:atext][start_index] = r0
960
+
961
+ r0
962
+ end
963
+
964
+ module Atom0
965
+ end
966
+
967
+ def _nt_atom
968
+ start_index = index
969
+ if node_cache[:atom].has_key?(index)
970
+ cached = node_cache[:atom][index]
971
+ @index = cached.interval.end if cached
972
+ return cached
973
+ end
974
+
975
+ i0, s0 = index, []
976
+ r2 = _nt_CFWS
977
+ if r2
978
+ r1 = r2
979
+ else
980
+ r1 = instantiate_node(SyntaxNode,input, index...index)
981
+ end
982
+ s0 << r1
983
+ if r1
984
+ s3, i3 = [], index
985
+ loop do
986
+ r4 = _nt_atext
987
+ if r4
988
+ s3 << r4
989
+ else
990
+ break
991
+ end
992
+ end
993
+ if s3.empty?
994
+ @index = i3
995
+ r3 = nil
996
+ else
997
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
998
+ end
999
+ s0 << r3
1000
+ if r3
1001
+ r6 = _nt_CFWS
1002
+ if r6
1003
+ r5 = r6
1004
+ else
1005
+ r5 = instantiate_node(SyntaxNode,input, index...index)
1006
+ end
1007
+ s0 << r5
1008
+ end
1009
+ end
1010
+ if s0.last
1011
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1012
+ r0.extend(Atom0)
1013
+ else
1014
+ @index = i0
1015
+ r0 = nil
1016
+ end
1017
+
1018
+ node_cache[:atom][start_index] = r0
1019
+
1020
+ r0
1021
+ end
1022
+
1023
+ module DotAtom0
1024
+ def dot_atom_text
1025
+ elements[1]
1026
+ end
1027
+
1028
+ end
1029
+
1030
+ def _nt_dot_atom
1031
+ start_index = index
1032
+ if node_cache[:dot_atom].has_key?(index)
1033
+ cached = node_cache[:dot_atom][index]
1034
+ @index = cached.interval.end if cached
1035
+ return cached
1036
+ end
1037
+
1038
+ i0, s0 = index, []
1039
+ r2 = _nt_CFWS
1040
+ if r2
1041
+ r1 = r2
1042
+ else
1043
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1044
+ end
1045
+ s0 << r1
1046
+ if r1
1047
+ r3 = _nt_dot_atom_text
1048
+ s0 << r3
1049
+ if r3
1050
+ r5 = _nt_CFWS
1051
+ if r5
1052
+ r4 = r5
1053
+ else
1054
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1055
+ end
1056
+ s0 << r4
1057
+ end
1058
+ end
1059
+ if s0.last
1060
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1061
+ r0.extend(DotAtom0)
1062
+ else
1063
+ @index = i0
1064
+ r0 = nil
1065
+ end
1066
+
1067
+ node_cache[:dot_atom][start_index] = r0
1068
+
1069
+ r0
1070
+ end
1071
+
1072
+ module LocalDotAtom0
1073
+ def local_dot_atom_text
1074
+ elements[1]
1075
+ end
1076
+
1077
+ end
1078
+
1079
+ def _nt_local_dot_atom
1080
+ start_index = index
1081
+ if node_cache[:local_dot_atom].has_key?(index)
1082
+ cached = node_cache[:local_dot_atom][index]
1083
+ @index = cached.interval.end if cached
1084
+ return cached
1085
+ end
1086
+
1087
+ i0, s0 = index, []
1088
+ r2 = _nt_CFWS
1089
+ if r2
1090
+ r1 = r2
1091
+ else
1092
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1093
+ end
1094
+ s0 << r1
1095
+ if r1
1096
+ r3 = _nt_local_dot_atom_text
1097
+ s0 << r3
1098
+ if r3
1099
+ r5 = _nt_CFWS
1100
+ if r5
1101
+ r4 = r5
1102
+ else
1103
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1104
+ end
1105
+ s0 << r4
1106
+ end
1107
+ end
1108
+ if s0.last
1109
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1110
+ r0.extend(LocalDotAtom0)
1111
+ else
1112
+ @index = i0
1113
+ r0 = nil
1114
+ end
1115
+
1116
+ node_cache[:local_dot_atom][start_index] = r0
1117
+
1118
+ r0
1119
+ end
1120
+
1121
+ module DotAtomText0
1122
+ def domain_text
1123
+ elements[0]
1124
+ end
1125
+
1126
+ end
1127
+
1128
+ def _nt_dot_atom_text
1129
+ start_index = index
1130
+ if node_cache[:dot_atom_text].has_key?(index)
1131
+ cached = node_cache[:dot_atom_text][index]
1132
+ @index = cached.interval.end if cached
1133
+ return cached
1134
+ end
1135
+
1136
+ s0, i0 = [], index
1137
+ loop do
1138
+ i1, s1 = index, []
1139
+ r2 = _nt_domain_text
1140
+ s1 << r2
1141
+ if r2
1142
+ if has_terminal?(".", false, index)
1143
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1144
+ @index += 1
1145
+ else
1146
+ terminal_parse_failure(".")
1147
+ r4 = nil
1148
+ end
1149
+ if r4
1150
+ r3 = r4
1151
+ else
1152
+ r3 = instantiate_node(SyntaxNode,input, index...index)
1153
+ end
1154
+ s1 << r3
1155
+ end
1156
+ if s1.last
1157
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1158
+ r1.extend(DotAtomText0)
1159
+ else
1160
+ @index = i1
1161
+ r1 = nil
1162
+ end
1163
+ if r1
1164
+ s0 << r1
1165
+ else
1166
+ break
1167
+ end
1168
+ end
1169
+ if s0.empty?
1170
+ @index = i0
1171
+ r0 = nil
1172
+ else
1173
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1174
+ end
1175
+
1176
+ node_cache[:dot_atom_text][start_index] = r0
1177
+
1178
+ r0
1179
+ end
1180
+
1181
+ module LocalDotAtomText0
1182
+ def domain_text
1183
+ elements[1]
1184
+ end
1185
+ end
1186
+
1187
+ def _nt_local_dot_atom_text
1188
+ start_index = index
1189
+ if node_cache[:local_dot_atom_text].has_key?(index)
1190
+ cached = node_cache[:local_dot_atom_text][index]
1191
+ @index = cached.interval.end if cached
1192
+ return cached
1193
+ end
1194
+
1195
+ s0, i0 = [], index
1196
+ loop do
1197
+ i1, s1 = index, []
1198
+ s2, i2 = [], index
1199
+ loop do
1200
+ if has_terminal?(".", false, index)
1201
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1202
+ @index += 1
1203
+ else
1204
+ terminal_parse_failure(".")
1205
+ r3 = nil
1206
+ end
1207
+ if r3
1208
+ s2 << r3
1209
+ else
1210
+ break
1211
+ end
1212
+ end
1213
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1214
+ s1 << r2
1215
+ if r2
1216
+ r4 = _nt_domain_text
1217
+ s1 << r4
1218
+ end
1219
+ if s1.last
1220
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1221
+ r1.extend(LocalDotAtomText0)
1222
+ else
1223
+ @index = i1
1224
+ r1 = nil
1225
+ end
1226
+ if r1
1227
+ s0 << r1
1228
+ else
1229
+ break
1230
+ end
1231
+ end
1232
+ if s0.empty?
1233
+ @index = i0
1234
+ r0 = nil
1235
+ else
1236
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1237
+ end
1238
+
1239
+ node_cache[:local_dot_atom_text][start_index] = r0
1240
+
1241
+ r0
1242
+ end
1243
+
1244
+ module DomainText0
1245
+ def quoted_domain
1246
+ elements[1]
1247
+ end
1248
+ end
1249
+
1250
+ module DomainText1
1251
+ def DQUOTE1
1252
+ elements[0]
1253
+ end
1254
+
1255
+ def DQUOTE2
1256
+ elements[3]
1257
+ end
1258
+ end
1259
+
1260
+ def _nt_domain_text
1261
+ start_index = index
1262
+ if node_cache[:domain_text].has_key?(index)
1263
+ cached = node_cache[:domain_text][index]
1264
+ @index = cached.interval.end if cached
1265
+ return cached
1266
+ end
1267
+
1268
+ i0 = index
1269
+ i1, s1 = index, []
1270
+ r2 = _nt_DQUOTE
1271
+ s1 << r2
1272
+ if r2
1273
+ s3, i3 = [], index
1274
+ loop do
1275
+ i4, s4 = index, []
1276
+ r6 = _nt_FWS
1277
+ if r6
1278
+ r5 = r6
1279
+ else
1280
+ r5 = instantiate_node(SyntaxNode,input, index...index)
1281
+ end
1282
+ s4 << r5
1283
+ if r5
1284
+ r7 = _nt_quoted_domain
1285
+ s4 << r7
1286
+ end
1287
+ if s4.last
1288
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1289
+ r4.extend(DomainText0)
1290
+ else
1291
+ @index = i4
1292
+ r4 = nil
1293
+ end
1294
+ if r4
1295
+ s3 << r4
1296
+ else
1297
+ break
1298
+ end
1299
+ end
1300
+ if s3.empty?
1301
+ @index = i3
1302
+ r3 = nil
1303
+ else
1304
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1305
+ end
1306
+ s1 << r3
1307
+ if r3
1308
+ r9 = _nt_FWS
1309
+ if r9
1310
+ r8 = r9
1311
+ else
1312
+ r8 = instantiate_node(SyntaxNode,input, index...index)
1313
+ end
1314
+ s1 << r8
1315
+ if r8
1316
+ r10 = _nt_DQUOTE
1317
+ s1 << r10
1318
+ end
1319
+ end
1320
+ end
1321
+ if s1.last
1322
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1323
+ r1.extend(DomainText1)
1324
+ else
1325
+ @index = i1
1326
+ r1 = nil
1327
+ end
1328
+ if r1
1329
+ r0 = r1
1330
+ else
1331
+ s11, i11 = [], index
1332
+ loop do
1333
+ r12 = _nt_atext
1334
+ if r12
1335
+ s11 << r12
1336
+ else
1337
+ break
1338
+ end
1339
+ end
1340
+ if s11.empty?
1341
+ @index = i11
1342
+ r11 = nil
1343
+ else
1344
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
1345
+ end
1346
+ if r11
1347
+ r0 = r11
1348
+ else
1349
+ @index = i0
1350
+ r0 = nil
1351
+ end
1352
+ end
1353
+
1354
+ node_cache[:domain_text][start_index] = r0
1355
+
1356
+ r0
1357
+ end
1358
+
1359
+ module QuotedDomain0
1360
+ def text
1361
+ elements[1]
1362
+ end
1363
+ end
1364
+
1365
+ def _nt_quoted_domain
1366
+ start_index = index
1367
+ if node_cache[:quoted_domain].has_key?(index)
1368
+ cached = node_cache[:quoted_domain][index]
1369
+ @index = cached.interval.end if cached
1370
+ return cached
1371
+ end
1372
+
1373
+ i0 = index
1374
+ r1 = _nt_qdcontent
1375
+ if r1
1376
+ r0 = r1
1377
+ else
1378
+ i2, s2 = index, []
1379
+ if has_terminal?("\\", false, index)
1380
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1381
+ @index += 1
1382
+ else
1383
+ terminal_parse_failure("\\")
1384
+ r3 = nil
1385
+ end
1386
+ s2 << r3
1387
+ if r3
1388
+ r4 = _nt_text
1389
+ s2 << r4
1390
+ end
1391
+ if s2.last
1392
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1393
+ r2.extend(QuotedDomain0)
1394
+ else
1395
+ @index = i2
1396
+ r2 = nil
1397
+ end
1398
+ if r2
1399
+ r0 = r2
1400
+ else
1401
+ @index = i0
1402
+ r0 = nil
1403
+ end
1404
+ end
1405
+
1406
+ node_cache[:quoted_domain][start_index] = r0
1407
+
1408
+ r0
1409
+ end
1410
+
1411
+ def _nt_qdcontent
1412
+ start_index = index
1413
+ if node_cache[:qdcontent].has_key?(index)
1414
+ cached = node_cache[:qdcontent][index]
1415
+ @index = cached.interval.end if cached
1416
+ return cached
1417
+ end
1418
+
1419
+ i0 = index
1420
+ r1 = _nt_NO_WS_CTL
1421
+ if r1
1422
+ r0 = r1
1423
+ else
1424
+ if has_terminal?('\G[\\x21]', true, index)
1425
+ r2 = true
1426
+ @index += 1
1427
+ else
1428
+ r2 = nil
1429
+ end
1430
+ if r2
1431
+ r0 = r2
1432
+ else
1433
+ if has_terminal?('\G[\\x23-\\x45]', true, index)
1434
+ r3 = true
1435
+ @index += 1
1436
+ else
1437
+ r3 = nil
1438
+ end
1439
+ if r3
1440
+ r0 = r3
1441
+ else
1442
+ if has_terminal?('\G[\\x47-\\x5b]', true, index)
1443
+ r4 = true
1444
+ @index += 1
1445
+ else
1446
+ r4 = nil
1447
+ end
1448
+ if r4
1449
+ r0 = r4
1450
+ else
1451
+ if has_terminal?('\G[\\x5d-\\x7e]', true, index)
1452
+ r5 = true
1453
+ @index += 1
1454
+ else
1455
+ r5 = nil
1456
+ end
1457
+ if r5
1458
+ r0 = r5
1459
+ else
1460
+ @index = i0
1461
+ r0 = nil
1462
+ end
1463
+ end
1464
+ end
1465
+ end
1466
+ end
1467
+
1468
+ node_cache[:qdcontent][start_index] = r0
1469
+
1470
+ r0
1471
+ end
1472
+
1473
+ def _nt_word
1474
+ start_index = index
1475
+ if node_cache[:word].has_key?(index)
1476
+ cached = node_cache[:word][index]
1477
+ @index = cached.interval.end if cached
1478
+ return cached
1479
+ end
1480
+
1481
+ i0 = index
1482
+ r1 = _nt_atom
1483
+ if r1
1484
+ r0 = r1
1485
+ else
1486
+ r2 = _nt_quoted_string
1487
+ if r2
1488
+ r0 = r2
1489
+ else
1490
+ @index = i0
1491
+ r0 = nil
1492
+ end
1493
+ end
1494
+
1495
+ node_cache[:word][start_index] = r0
1496
+
1497
+ r0
1498
+ end
1499
+
1500
+ module PhraseList0
1501
+ def phrase_value
1502
+ elements[2]
1503
+ end
1504
+ end
1505
+
1506
+ module PhraseList1
1507
+ def first_phrase
1508
+ elements[0]
1509
+ end
1510
+
1511
+ def other_phrases
1512
+ elements[1]
1513
+ end
1514
+ end
1515
+
1516
+ def _nt_phrase_list
1517
+ start_index = index
1518
+ if node_cache[:phrase_list].has_key?(index)
1519
+ cached = node_cache[:phrase_list][index]
1520
+ @index = cached.interval.end if cached
1521
+ return cached
1522
+ end
1523
+
1524
+ i0, s0 = index, []
1525
+ r1 = _nt_phrase
1526
+ s0 << r1
1527
+ if r1
1528
+ s2, i2 = [], index
1529
+ loop do
1530
+ i3, s3 = index, []
1531
+ if has_terminal?(",", false, index)
1532
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1533
+ @index += 1
1534
+ else
1535
+ terminal_parse_failure(",")
1536
+ r4 = nil
1537
+ end
1538
+ s3 << r4
1539
+ if r4
1540
+ s5, i5 = [], index
1541
+ loop do
1542
+ r6 = _nt_FWS
1543
+ if r6
1544
+ s5 << r6
1545
+ else
1546
+ break
1547
+ end
1548
+ end
1549
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1550
+ s3 << r5
1551
+ if r5
1552
+ r7 = _nt_phrase
1553
+ s3 << r7
1554
+ end
1555
+ end
1556
+ if s3.last
1557
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1558
+ r3.extend(PhraseList0)
1559
+ else
1560
+ @index = i3
1561
+ r3 = nil
1562
+ end
1563
+ if r3
1564
+ s2 << r3
1565
+ else
1566
+ break
1567
+ end
1568
+ end
1569
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1570
+ s0 << r2
1571
+ end
1572
+ if s0.last
1573
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1574
+ r0.extend(PhraseList1)
1575
+ else
1576
+ @index = i0
1577
+ r0 = nil
1578
+ end
1579
+
1580
+ node_cache[:phrase_list][start_index] = r0
1581
+
1582
+ r0
1583
+ end
1584
+
1585
+ def _nt_phrase
1586
+ start_index = index
1587
+ if node_cache[:phrase].has_key?(index)
1588
+ cached = node_cache[:phrase][index]
1589
+ @index = cached.interval.end if cached
1590
+ return cached
1591
+ end
1592
+
1593
+ i0 = index
1594
+ r1 = _nt_obs_phrase
1595
+ if r1
1596
+ r0 = r1
1597
+ else
1598
+ s2, i2 = [], index
1599
+ loop do
1600
+ r3 = _nt_word
1601
+ if r3
1602
+ s2 << r3
1603
+ else
1604
+ break
1605
+ end
1606
+ end
1607
+ if s2.empty?
1608
+ @index = i2
1609
+ r2 = nil
1610
+ else
1611
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1612
+ end
1613
+ if r2
1614
+ r0 = r2
1615
+ else
1616
+ @index = i0
1617
+ r0 = nil
1618
+ end
1619
+ end
1620
+
1621
+ node_cache[:phrase][start_index] = r0
1622
+
1623
+ r0
1624
+ end
1625
+
1626
+ module DomainLiteral0
1627
+ def dcontent
1628
+ elements[1]
1629
+ end
1630
+ end
1631
+
1632
+ module DomainLiteral1
1633
+ end
1634
+
1635
+ def _nt_domain_literal
1636
+ start_index = index
1637
+ if node_cache[:domain_literal].has_key?(index)
1638
+ cached = node_cache[:domain_literal][index]
1639
+ @index = cached.interval.end if cached
1640
+ return cached
1641
+ end
1642
+
1643
+ i0, s0 = index, []
1644
+ r2 = _nt_CFWS
1645
+ if r2
1646
+ r1 = r2
1647
+ else
1648
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1649
+ end
1650
+ s0 << r1
1651
+ if r1
1652
+ if has_terminal?("[", false, index)
1653
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1654
+ @index += 1
1655
+ else
1656
+ terminal_parse_failure("[")
1657
+ r3 = nil
1658
+ end
1659
+ s0 << r3
1660
+ if r3
1661
+ s4, i4 = [], index
1662
+ loop do
1663
+ i5, s5 = index, []
1664
+ r7 = _nt_FWS
1665
+ if r7
1666
+ r6 = r7
1667
+ else
1668
+ r6 = instantiate_node(SyntaxNode,input, index...index)
1669
+ end
1670
+ s5 << r6
1671
+ if r6
1672
+ r8 = _nt_dcontent
1673
+ s5 << r8
1674
+ end
1675
+ if s5.last
1676
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1677
+ r5.extend(DomainLiteral0)
1678
+ else
1679
+ @index = i5
1680
+ r5 = nil
1681
+ end
1682
+ if r5
1683
+ s4 << r5
1684
+ else
1685
+ break
1686
+ end
1687
+ end
1688
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1689
+ s0 << r4
1690
+ if r4
1691
+ r10 = _nt_FWS
1692
+ if r10
1693
+ r9 = r10
1694
+ else
1695
+ r9 = instantiate_node(SyntaxNode,input, index...index)
1696
+ end
1697
+ s0 << r9
1698
+ if r9
1699
+ if has_terminal?("]", false, index)
1700
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
1701
+ @index += 1
1702
+ else
1703
+ terminal_parse_failure("]")
1704
+ r11 = nil
1705
+ end
1706
+ s0 << r11
1707
+ if r11
1708
+ r13 = _nt_CFWS
1709
+ if r13
1710
+ r12 = r13
1711
+ else
1712
+ r12 = instantiate_node(SyntaxNode,input, index...index)
1713
+ end
1714
+ s0 << r12
1715
+ end
1716
+ end
1717
+ end
1718
+ end
1719
+ end
1720
+ if s0.last
1721
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1722
+ r0.extend(DomainLiteral1)
1723
+ else
1724
+ @index = i0
1725
+ r0 = nil
1726
+ end
1727
+
1728
+ node_cache[:domain_literal][start_index] = r0
1729
+
1730
+ r0
1731
+ end
1732
+
1733
+ def _nt_dcontent
1734
+ start_index = index
1735
+ if node_cache[:dcontent].has_key?(index)
1736
+ cached = node_cache[:dcontent][index]
1737
+ @index = cached.interval.end if cached
1738
+ return cached
1739
+ end
1740
+
1741
+ i0 = index
1742
+ r1 = _nt_dtext
1743
+ if r1
1744
+ r0 = r1
1745
+ else
1746
+ r2 = _nt_quoted_pair
1747
+ if r2
1748
+ r0 = r2
1749
+ else
1750
+ @index = i0
1751
+ r0 = nil
1752
+ end
1753
+ end
1754
+
1755
+ node_cache[:dcontent][start_index] = r0
1756
+
1757
+ r0
1758
+ end
1759
+
1760
+ def _nt_dtext
1761
+ start_index = index
1762
+ if node_cache[:dtext].has_key?(index)
1763
+ cached = node_cache[:dtext][index]
1764
+ @index = cached.interval.end if cached
1765
+ return cached
1766
+ end
1767
+
1768
+ i0 = index
1769
+ r1 = _nt_NO_WS_CTL
1770
+ if r1
1771
+ r0 = r1
1772
+ else
1773
+ if has_terminal?('\G[\\x21-\\x5a]', true, index)
1774
+ r2 = true
1775
+ @index += 1
1776
+ else
1777
+ r2 = nil
1778
+ end
1779
+ if r2
1780
+ r0 = r2
1781
+ else
1782
+ if has_terminal?('\G[\\x5e-\\x7e]', true, index)
1783
+ r3 = true
1784
+ @index += 1
1785
+ else
1786
+ r3 = nil
1787
+ end
1788
+ if r3
1789
+ r0 = r3
1790
+ else
1791
+ @index = i0
1792
+ r0 = nil
1793
+ end
1794
+ end
1795
+ end
1796
+
1797
+ node_cache[:dtext][start_index] = r0
1798
+
1799
+ r0
1800
+ end
1801
+
1802
+ module AngleAddr0
1803
+ def addr_spec
1804
+ elements[2]
1805
+ end
1806
+
1807
+ end
1808
+
1809
+ def _nt_angle_addr
1810
+ start_index = index
1811
+ if node_cache[:angle_addr].has_key?(index)
1812
+ cached = node_cache[:angle_addr][index]
1813
+ @index = cached.interval.end if cached
1814
+ return cached
1815
+ end
1816
+
1817
+ i0 = index
1818
+ i1, s1 = index, []
1819
+ r3 = _nt_CFWS
1820
+ if r3
1821
+ r2 = r3
1822
+ else
1823
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1824
+ end
1825
+ s1 << r2
1826
+ if r2
1827
+ if has_terminal?("<", false, index)
1828
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1829
+ @index += 1
1830
+ else
1831
+ terminal_parse_failure("<")
1832
+ r4 = nil
1833
+ end
1834
+ s1 << r4
1835
+ if r4
1836
+ r5 = _nt_addr_spec
1837
+ s1 << r5
1838
+ if r5
1839
+ if has_terminal?(">", false, index)
1840
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1841
+ @index += 1
1842
+ else
1843
+ terminal_parse_failure(">")
1844
+ r6 = nil
1845
+ end
1846
+ s1 << r6
1847
+ if r6
1848
+ r8 = _nt_CFWS
1849
+ if r8
1850
+ r7 = r8
1851
+ else
1852
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1853
+ end
1854
+ s1 << r7
1855
+ end
1856
+ end
1857
+ end
1858
+ end
1859
+ if s1.last
1860
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1861
+ r1.extend(AngleAddr0)
1862
+ else
1863
+ @index = i1
1864
+ r1 = nil
1865
+ end
1866
+ if r1
1867
+ r0 = r1
1868
+ else
1869
+ r9 = _nt_obs_angle_addr
1870
+ if r9
1871
+ r0 = r9
1872
+ else
1873
+ @index = i0
1874
+ r0 = nil
1875
+ end
1876
+ end
1877
+
1878
+ node_cache[:angle_addr][start_index] = r0
1879
+
1880
+ r0
1881
+ end
1882
+
1883
+ module AddrSpec0
1884
+ def local_part
1885
+ elements[0]
1886
+ end
1887
+
1888
+ def domain
1889
+ elements[2]
1890
+ end
1891
+ end
1892
+
1893
+ def _nt_addr_spec
1894
+ start_index = index
1895
+ if node_cache[:addr_spec].has_key?(index)
1896
+ cached = node_cache[:addr_spec][index]
1897
+ @index = cached.interval.end if cached
1898
+ return cached
1899
+ end
1900
+
1901
+ i0 = index
1902
+ i1, s1 = index, []
1903
+ r2 = _nt_local_part
1904
+ s1 << r2
1905
+ if r2
1906
+ if has_terminal?("@", false, index)
1907
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1908
+ @index += 1
1909
+ else
1910
+ terminal_parse_failure("@")
1911
+ r3 = nil
1912
+ end
1913
+ s1 << r3
1914
+ if r3
1915
+ r4 = _nt_domain
1916
+ s1 << r4
1917
+ end
1918
+ end
1919
+ if s1.last
1920
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1921
+ r1.extend(AddrSpec0)
1922
+ else
1923
+ @index = i1
1924
+ r1 = nil
1925
+ end
1926
+ if r1
1927
+ r0 = r1
1928
+ else
1929
+ r5 = _nt_local_part
1930
+ if r5
1931
+ r0 = r5
1932
+ else
1933
+ @index = i0
1934
+ r0 = nil
1935
+ end
1936
+ end
1937
+
1938
+ node_cache[:addr_spec][start_index] = r0
1939
+
1940
+ r0
1941
+ end
1942
+
1943
+ def _nt_local_part
1944
+ start_index = index
1945
+ if node_cache[:local_part].has_key?(index)
1946
+ cached = node_cache[:local_part][index]
1947
+ @index = cached.interval.end if cached
1948
+ return cached
1949
+ end
1950
+
1951
+ i0 = index
1952
+ r1 = _nt_local_dot_atom
1953
+ if r1
1954
+ r0 = r1
1955
+ else
1956
+ r2 = _nt_quoted_string
1957
+ if r2
1958
+ r0 = r2
1959
+ else
1960
+ r3 = _nt_obs_local_part
1961
+ if r3
1962
+ r0 = r3
1963
+ else
1964
+ @index = i0
1965
+ r0 = nil
1966
+ end
1967
+ end
1968
+ end
1969
+
1970
+ node_cache[:local_part][start_index] = r0
1971
+
1972
+ r0
1973
+ end
1974
+
1975
+ def _nt_domain
1976
+ start_index = index
1977
+ if node_cache[:domain].has_key?(index)
1978
+ cached = node_cache[:domain][index]
1979
+ @index = cached.interval.end if cached
1980
+ return cached
1981
+ end
1982
+
1983
+ i0 = index
1984
+ r1 = _nt_dot_atom
1985
+ if r1
1986
+ r0 = r1
1987
+ else
1988
+ r2 = _nt_domain_literal
1989
+ if r2
1990
+ r0 = r2
1991
+ else
1992
+ r3 = _nt_obs_domain
1993
+ if r3
1994
+ r0 = r3
1995
+ else
1996
+ @index = i0
1997
+ r0 = nil
1998
+ end
1999
+ end
2000
+ end
2001
+
2002
+ node_cache[:domain][start_index] = r0
2003
+
2004
+ r0
2005
+ end
2006
+
2007
+ module Group0
2008
+ def group_name
2009
+ elements[0]
2010
+ end
2011
+
2012
+ def group_list
2013
+ elements[2]
2014
+ end
2015
+
2016
+ end
2017
+
2018
+ def _nt_group
2019
+ start_index = index
2020
+ if node_cache[:group].has_key?(index)
2021
+ cached = node_cache[:group][index]
2022
+ @index = cached.interval.end if cached
2023
+ return cached
2024
+ end
2025
+
2026
+ i0, s0 = index, []
2027
+ r1 = _nt_display_name
2028
+ s0 << r1
2029
+ if r1
2030
+ if has_terminal?(":", false, index)
2031
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2032
+ @index += 1
2033
+ else
2034
+ terminal_parse_failure(":")
2035
+ r2 = nil
2036
+ end
2037
+ s0 << r2
2038
+ if r2
2039
+ i4 = index
2040
+ r5 = _nt_mailbox_list_group
2041
+ if r5
2042
+ r4 = r5
2043
+ else
2044
+ r6 = _nt_CFWS
2045
+ if r6
2046
+ r4 = r6
2047
+ else
2048
+ @index = i4
2049
+ r4 = nil
2050
+ end
2051
+ end
2052
+ if r4
2053
+ r3 = r4
2054
+ else
2055
+ r3 = instantiate_node(SyntaxNode,input, index...index)
2056
+ end
2057
+ s0 << r3
2058
+ if r3
2059
+ if has_terminal?(";", false, index)
2060
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2061
+ @index += 1
2062
+ else
2063
+ terminal_parse_failure(";")
2064
+ r7 = nil
2065
+ end
2066
+ s0 << r7
2067
+ if r7
2068
+ r9 = _nt_CFWS
2069
+ if r9
2070
+ r8 = r9
2071
+ else
2072
+ r8 = instantiate_node(SyntaxNode,input, index...index)
2073
+ end
2074
+ s0 << r8
2075
+ end
2076
+ end
2077
+ end
2078
+ end
2079
+ if s0.last
2080
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2081
+ r0.extend(Group0)
2082
+ else
2083
+ @index = i0
2084
+ r0 = nil
2085
+ end
2086
+
2087
+ node_cache[:group][start_index] = r0
2088
+
2089
+ r0
2090
+ end
2091
+
2092
+ module MailboxListGroup0
2093
+ def addresses
2094
+ [first_addr] + other_addr.elements.map { |o| o.addr_value }
2095
+ end
2096
+ end
2097
+
2098
+ def _nt_mailbox_list_group
2099
+ start_index = index
2100
+ if node_cache[:mailbox_list_group].has_key?(index)
2101
+ cached = node_cache[:mailbox_list_group][index]
2102
+ @index = cached.interval.end if cached
2103
+ return cached
2104
+ end
2105
+
2106
+ r0 = _nt_mailbox_list
2107
+ r0.extend(MailboxListGroup0)
2108
+
2109
+ node_cache[:mailbox_list_group][start_index] = r0
2110
+
2111
+ r0
2112
+ end
2113
+
2114
+ module QuotedString0
2115
+ def qcontent
2116
+ elements[1]
2117
+ end
2118
+ end
2119
+
2120
+ module QuotedString1
2121
+ def DQUOTE1
2122
+ elements[1]
2123
+ end
2124
+
2125
+ def quoted_content
2126
+ elements[2]
2127
+ end
2128
+
2129
+ def DQUOTE2
2130
+ elements[4]
2131
+ end
2132
+
2133
+ end
2134
+
2135
+ def _nt_quoted_string
2136
+ start_index = index
2137
+ if node_cache[:quoted_string].has_key?(index)
2138
+ cached = node_cache[:quoted_string][index]
2139
+ @index = cached.interval.end if cached
2140
+ return cached
2141
+ end
2142
+
2143
+ i0, s0 = index, []
2144
+ r2 = _nt_CFWS
2145
+ if r2
2146
+ r1 = r2
2147
+ else
2148
+ r1 = instantiate_node(SyntaxNode,input, index...index)
2149
+ end
2150
+ s0 << r1
2151
+ if r1
2152
+ r3 = _nt_DQUOTE
2153
+ s0 << r3
2154
+ if r3
2155
+ s4, i4 = [], index
2156
+ loop do
2157
+ i5, s5 = index, []
2158
+ r7 = _nt_FWS
2159
+ if r7
2160
+ r6 = r7
2161
+ else
2162
+ r6 = instantiate_node(SyntaxNode,input, index...index)
2163
+ end
2164
+ s5 << r6
2165
+ if r6
2166
+ r8 = _nt_qcontent
2167
+ s5 << r8
2168
+ end
2169
+ if s5.last
2170
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2171
+ r5.extend(QuotedString0)
2172
+ else
2173
+ @index = i5
2174
+ r5 = nil
2175
+ end
2176
+ if r5
2177
+ s4 << r5
2178
+ else
2179
+ break
2180
+ end
2181
+ end
2182
+ if s4.empty?
2183
+ @index = i4
2184
+ r4 = nil
2185
+ else
2186
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2187
+ end
2188
+ s0 << r4
2189
+ if r4
2190
+ r10 = _nt_FWS
2191
+ if r10
2192
+ r9 = r10
2193
+ else
2194
+ r9 = instantiate_node(SyntaxNode,input, index...index)
2195
+ end
2196
+ s0 << r9
2197
+ if r9
2198
+ r11 = _nt_DQUOTE
2199
+ s0 << r11
2200
+ if r11
2201
+ r13 = _nt_CFWS
2202
+ if r13
2203
+ r12 = r13
2204
+ else
2205
+ r12 = instantiate_node(SyntaxNode,input, index...index)
2206
+ end
2207
+ s0 << r12
2208
+ end
2209
+ end
2210
+ end
2211
+ end
2212
+ end
2213
+ if s0.last
2214
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2215
+ r0.extend(QuotedString1)
2216
+ else
2217
+ @index = i0
2218
+ r0 = nil
2219
+ end
2220
+
2221
+ node_cache[:quoted_string][start_index] = r0
2222
+
2223
+ r0
2224
+ end
2225
+
2226
+ def _nt_qcontent
2227
+ start_index = index
2228
+ if node_cache[:qcontent].has_key?(index)
2229
+ cached = node_cache[:qcontent][index]
2230
+ @index = cached.interval.end if cached
2231
+ return cached
2232
+ end
2233
+
2234
+ i0 = index
2235
+ r1 = _nt_qtext
2236
+ if r1
2237
+ r0 = r1
2238
+ else
2239
+ r2 = _nt_quoted_pair
2240
+ if r2
2241
+ r0 = r2
2242
+ else
2243
+ @index = i0
2244
+ r0 = nil
2245
+ end
2246
+ end
2247
+
2248
+ node_cache[:qcontent][start_index] = r0
2249
+
2250
+ r0
2251
+ end
2252
+
2253
+ module QuotedPair0
2254
+ def text
2255
+ elements[1]
2256
+ end
2257
+ end
2258
+
2259
+ def _nt_quoted_pair
2260
+ start_index = index
2261
+ if node_cache[:quoted_pair].has_key?(index)
2262
+ cached = node_cache[:quoted_pair][index]
2263
+ @index = cached.interval.end if cached
2264
+ return cached
2265
+ end
2266
+
2267
+ i0 = index
2268
+ i1, s1 = index, []
2269
+ if has_terminal?("\\", false, index)
2270
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2271
+ @index += 1
2272
+ else
2273
+ terminal_parse_failure("\\")
2274
+ r2 = nil
2275
+ end
2276
+ s1 << r2
2277
+ if r2
2278
+ r3 = _nt_text
2279
+ s1 << r3
2280
+ end
2281
+ if s1.last
2282
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2283
+ r1.extend(QuotedPair0)
2284
+ else
2285
+ @index = i1
2286
+ r1 = nil
2287
+ end
2288
+ if r1
2289
+ r0 = r1
2290
+ else
2291
+ r4 = _nt_obs_qp
2292
+ if r4
2293
+ r0 = r4
2294
+ else
2295
+ @index = i0
2296
+ r0 = nil
2297
+ end
2298
+ end
2299
+
2300
+ node_cache[:quoted_pair][start_index] = r0
2301
+
2302
+ r0
2303
+ end
2304
+
2305
+ def _nt_qtext
2306
+ start_index = index
2307
+ if node_cache[:qtext].has_key?(index)
2308
+ cached = node_cache[:qtext][index]
2309
+ @index = cached.interval.end if cached
2310
+ return cached
2311
+ end
2312
+
2313
+ i0 = index
2314
+ r1 = _nt_NO_WS_CTL
2315
+ if r1
2316
+ r0 = r1
2317
+ else
2318
+ if has_terminal?('\G[\\x21]', true, index)
2319
+ r2 = true
2320
+ @index += 1
2321
+ else
2322
+ r2 = nil
2323
+ end
2324
+ if r2
2325
+ r0 = r2
2326
+ else
2327
+ if has_terminal?('\G[\\x23-\\x5b]', true, index)
2328
+ r3 = true
2329
+ @index += 1
2330
+ else
2331
+ r3 = nil
2332
+ end
2333
+ if r3
2334
+ r0 = r3
2335
+ else
2336
+ if has_terminal?('\G[\\x5d-\\x7e]', true, index)
2337
+ r4 = true
2338
+ @index += 1
2339
+ else
2340
+ r4 = nil
2341
+ end
2342
+ if r4
2343
+ r0 = r4
2344
+ else
2345
+ @index = i0
2346
+ r0 = nil
2347
+ end
2348
+ end
2349
+ end
2350
+ end
2351
+
2352
+ node_cache[:qtext][start_index] = r0
2353
+
2354
+ r0
2355
+ end
2356
+
2357
+ def _nt_text
2358
+ start_index = index
2359
+ if node_cache[:text].has_key?(index)
2360
+ cached = node_cache[:text][index]
2361
+ @index = cached.interval.end if cached
2362
+ return cached
2363
+ end
2364
+
2365
+ i0 = index
2366
+ if has_terminal?('\G[\\x01-\\x09]', true, index)
2367
+ r1 = true
2368
+ @index += 1
2369
+ else
2370
+ r1 = nil
2371
+ end
2372
+ if r1
2373
+ r0 = r1
2374
+ else
2375
+ if has_terminal?('\G[\\x0b-\\x0c]', true, index)
2376
+ r2 = true
2377
+ @index += 1
2378
+ else
2379
+ r2 = nil
2380
+ end
2381
+ if r2
2382
+ r0 = r2
2383
+ else
2384
+ if has_terminal?('\G[\\x0e-\\x7e]', true, index)
2385
+ r3 = true
2386
+ @index += 1
2387
+ else
2388
+ r3 = nil
2389
+ end
2390
+ if r3
2391
+ r0 = r3
2392
+ else
2393
+ r4 = _nt_obs_text
2394
+ if r4
2395
+ r0 = r4
2396
+ else
2397
+ @index = i0
2398
+ r0 = nil
2399
+ end
2400
+ end
2401
+ end
2402
+ end
2403
+
2404
+ node_cache[:text][start_index] = r0
2405
+
2406
+ r0
2407
+ end
2408
+
2409
+ def _nt_display_name
2410
+ start_index = index
2411
+ if node_cache[:display_name].has_key?(index)
2412
+ cached = node_cache[:display_name][index]
2413
+ @index = cached.interval.end if cached
2414
+ return cached
2415
+ end
2416
+
2417
+ r0 = _nt_phrase
2418
+
2419
+ node_cache[:display_name][start_index] = r0
2420
+
2421
+ r0
2422
+ end
2423
+
2424
+ module NameAddr0
2425
+ def display_name
2426
+ elements[0]
2427
+ end
2428
+
2429
+ def angle_addr
2430
+ elements[1]
2431
+ end
2432
+ end
2433
+
2434
+ def _nt_name_addr
2435
+ start_index = index
2436
+ if node_cache[:name_addr].has_key?(index)
2437
+ cached = node_cache[:name_addr][index]
2438
+ @index = cached.interval.end if cached
2439
+ return cached
2440
+ end
2441
+
2442
+ i0 = index
2443
+ i1, s1 = index, []
2444
+ r2 = _nt_display_name
2445
+ s1 << r2
2446
+ if r2
2447
+ r3 = _nt_angle_addr
2448
+ s1 << r3
2449
+ end
2450
+ if s1.last
2451
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2452
+ r1.extend(NameAddr0)
2453
+ else
2454
+ @index = i1
2455
+ r1 = nil
2456
+ end
2457
+ if r1
2458
+ r0 = r1
2459
+ else
2460
+ r4 = _nt_angle_addr
2461
+ if r4
2462
+ r0 = r4
2463
+ else
2464
+ @index = i0
2465
+ r0 = nil
2466
+ end
2467
+ end
2468
+
2469
+ node_cache[:name_addr][start_index] = r0
2470
+
2471
+ r0
2472
+ end
2473
+
2474
+ module MailboxList0
2475
+ def addr_value
2476
+ elements[1]
2477
+ end
2478
+ end
2479
+
2480
+ module MailboxList1
2481
+ def first_addr
2482
+ elements[0]
2483
+ end
2484
+
2485
+ def other_addr
2486
+ elements[1]
2487
+ end
2488
+ end
2489
+
2490
+ def _nt_mailbox_list
2491
+ start_index = index
2492
+ if node_cache[:mailbox_list].has_key?(index)
2493
+ cached = node_cache[:mailbox_list][index]
2494
+ @index = cached.interval.end if cached
2495
+ return cached
2496
+ end
2497
+
2498
+ i0 = index
2499
+ i1, s1 = index, []
2500
+ r2 = _nt_mailbox
2501
+ s1 << r2
2502
+ if r2
2503
+ s3, i3 = [], index
2504
+ loop do
2505
+ i4, s4 = index, []
2506
+ if has_terminal?(",", false, index)
2507
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2508
+ @index += 1
2509
+ else
2510
+ terminal_parse_failure(",")
2511
+ r5 = nil
2512
+ end
2513
+ s4 << r5
2514
+ if r5
2515
+ r6 = _nt_mailbox
2516
+ s4 << r6
2517
+ end
2518
+ if s4.last
2519
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2520
+ r4.extend(MailboxList0)
2521
+ else
2522
+ @index = i4
2523
+ r4 = nil
2524
+ end
2525
+ if r4
2526
+ s3 << r4
2527
+ else
2528
+ break
2529
+ end
2530
+ end
2531
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2532
+ s1 << r3
2533
+ end
2534
+ if s1.last
2535
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2536
+ r1.extend(MailboxList1)
2537
+ else
2538
+ @index = i1
2539
+ r1 = nil
2540
+ end
2541
+ if r1
2542
+ r0 = r1
2543
+ else
2544
+ r7 = _nt_obs_mbox_list
2545
+ if r7
2546
+ r0 = r7
2547
+ else
2548
+ @index = i0
2549
+ r0 = nil
2550
+ end
2551
+ end
2552
+
2553
+ node_cache[:mailbox_list][start_index] = r0
2554
+
2555
+ r0
2556
+ end
2557
+
2558
+ def _nt_mailbox
2559
+ start_index = index
2560
+ if node_cache[:mailbox].has_key?(index)
2561
+ cached = node_cache[:mailbox][index]
2562
+ @index = cached.interval.end if cached
2563
+ return cached
2564
+ end
2565
+
2566
+ i0 = index
2567
+ r1 = _nt_name_addr
2568
+ if r1
2569
+ r0 = r1
2570
+ else
2571
+ r2 = _nt_addr_spec
2572
+ if r2
2573
+ r0 = r2
2574
+ else
2575
+ @index = i0
2576
+ r0 = nil
2577
+ end
2578
+ end
2579
+
2580
+ node_cache[:mailbox][start_index] = r0
2581
+
2582
+ r0
2583
+ end
2584
+
2585
+ module Address0
2586
+
2587
+ def dig_comments(comments, elements)
2588
+ elements.each { |elem|
2589
+ if elem.respond_to?(:comment)
2590
+ comments << elem.comment
2591
+ end
2592
+ dig_comments(comments, elem.elements) if elem.elements
2593
+ }
2594
+ end
2595
+
2596
+ def comments
2597
+ comments = []
2598
+ dig_comments(comments, elements)
2599
+ comments
2600
+ end
2601
+ end
2602
+
2603
+ module Address1
2604
+
2605
+ def dig_comments(comments, elements)
2606
+ elements.each { |elem|
2607
+ if elem.respond_to?(:comment)
2608
+ comments << elem.comment
2609
+ end
2610
+ dig_comments(comments, elem.elements) if elem.elements
2611
+ }
2612
+ end
2613
+
2614
+ def comments
2615
+ comments = []
2616
+ dig_comments(comments, elements)
2617
+ comments
2618
+ end
2619
+ end
2620
+
2621
+ def _nt_address
2622
+ start_index = index
2623
+ if node_cache[:address].has_key?(index)
2624
+ cached = node_cache[:address][index]
2625
+ @index = cached.interval.end if cached
2626
+ return cached
2627
+ end
2628
+
2629
+ i0 = index
2630
+ r1 = _nt_group
2631
+ r1.extend(Address0)
2632
+ if r1
2633
+ r0 = r1
2634
+ else
2635
+ r2 = _nt_mailbox
2636
+ r2.extend(Address1)
2637
+ if r2
2638
+ r0 = r2
2639
+ else
2640
+ @index = i0
2641
+ r0 = nil
2642
+ end
2643
+ end
2644
+
2645
+ node_cache[:address][start_index] = r0
2646
+
2647
+ r0
2648
+ end
2649
+
2650
+ module AddressList0
2651
+ def addr_value
2652
+ elements[2]
2653
+ end
2654
+ end
2655
+
2656
+ module AddressList1
2657
+ def first_addr
2658
+ elements[0]
2659
+ end
2660
+
2661
+ def other_addr
2662
+ elements[1]
2663
+ end
2664
+ end
2665
+
2666
+ def _nt_address_list
2667
+ start_index = index
2668
+ if node_cache[:address_list].has_key?(index)
2669
+ cached = node_cache[:address_list][index]
2670
+ @index = cached.interval.end if cached
2671
+ return cached
2672
+ end
2673
+
2674
+ i0, s0 = index, []
2675
+ r1 = _nt_address
2676
+ s0 << r1
2677
+ if r1
2678
+ s2, i2 = [], index
2679
+ loop do
2680
+ i3, s3 = index, []
2681
+ if has_terminal?(",", false, index)
2682
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2683
+ @index += 1
2684
+ else
2685
+ terminal_parse_failure(",")
2686
+ r4 = nil
2687
+ end
2688
+ s3 << r4
2689
+ if r4
2690
+ s5, i5 = [], index
2691
+ loop do
2692
+ r6 = _nt_FWS
2693
+ if r6
2694
+ s5 << r6
2695
+ else
2696
+ break
2697
+ end
2698
+ end
2699
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2700
+ s3 << r5
2701
+ if r5
2702
+ r7 = _nt_address
2703
+ s3 << r7
2704
+ end
2705
+ end
2706
+ if s3.last
2707
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2708
+ r3.extend(AddressList0)
2709
+ else
2710
+ @index = i3
2711
+ r3 = nil
2712
+ end
2713
+ if r3
2714
+ s2 << r3
2715
+ else
2716
+ break
2717
+ end
2718
+ end
2719
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2720
+ s0 << r2
2721
+ end
2722
+ if s0.last
2723
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2724
+ r0.extend(AddressList1)
2725
+ else
2726
+ @index = i0
2727
+ r0 = nil
2728
+ end
2729
+
2730
+ node_cache[:address_list][start_index] = r0
2731
+
2732
+ r0
2733
+ end
2734
+
2735
+ module DateTime0
2736
+ def day_of_week
2737
+ elements[0]
2738
+ end
2739
+
2740
+ end
2741
+
2742
+ module DateTime1
2743
+ def date
2744
+ elements[1]
2745
+ end
2746
+
2747
+ def FWS
2748
+ elements[2]
2749
+ end
2750
+
2751
+ def time
2752
+ elements[3]
2753
+ end
2754
+
2755
+ end
2756
+
2757
+ def _nt_date_time
2758
+ start_index = index
2759
+ if node_cache[:date_time].has_key?(index)
2760
+ cached = node_cache[:date_time][index]
2761
+ @index = cached.interval.end if cached
2762
+ return cached
2763
+ end
2764
+
2765
+ i0, s0 = index, []
2766
+ i2, s2 = index, []
2767
+ r3 = _nt_day_of_week
2768
+ s2 << r3
2769
+ if r3
2770
+ if has_terminal?(",", false, index)
2771
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2772
+ @index += 1
2773
+ else
2774
+ terminal_parse_failure(",")
2775
+ r4 = nil
2776
+ end
2777
+ s2 << r4
2778
+ end
2779
+ if s2.last
2780
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2781
+ r2.extend(DateTime0)
2782
+ else
2783
+ @index = i2
2784
+ r2 = nil
2785
+ end
2786
+ if r2
2787
+ r1 = r2
2788
+ else
2789
+ r1 = instantiate_node(SyntaxNode,input, index...index)
2790
+ end
2791
+ s0 << r1
2792
+ if r1
2793
+ r5 = _nt_date
2794
+ s0 << r5
2795
+ if r5
2796
+ r6 = _nt_FWS
2797
+ s0 << r6
2798
+ if r6
2799
+ r7 = _nt_time
2800
+ s0 << r7
2801
+ if r7
2802
+ r9 = _nt_CFWS
2803
+ if r9
2804
+ r8 = r9
2805
+ else
2806
+ r8 = instantiate_node(SyntaxNode,input, index...index)
2807
+ end
2808
+ s0 << r8
2809
+ end
2810
+ end
2811
+ end
2812
+ end
2813
+ if s0.last
2814
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2815
+ r0.extend(DateTime1)
2816
+ else
2817
+ @index = i0
2818
+ r0 = nil
2819
+ end
2820
+
2821
+ node_cache[:date_time][start_index] = r0
2822
+
2823
+ r0
2824
+ end
2825
+
2826
+ module DayOfWeek0
2827
+ def day_name
2828
+ elements[1]
2829
+ end
2830
+ end
2831
+
2832
+ def _nt_day_of_week
2833
+ start_index = index
2834
+ if node_cache[:day_of_week].has_key?(index)
2835
+ cached = node_cache[:day_of_week][index]
2836
+ @index = cached.interval.end if cached
2837
+ return cached
2838
+ end
2839
+
2840
+ i0 = index
2841
+ i1, s1 = index, []
2842
+ r3 = _nt_FWS
2843
+ if r3
2844
+ r2 = r3
2845
+ else
2846
+ r2 = instantiate_node(SyntaxNode,input, index...index)
2847
+ end
2848
+ s1 << r2
2849
+ if r2
2850
+ r4 = _nt_day_name
2851
+ s1 << r4
2852
+ end
2853
+ if s1.last
2854
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2855
+ r1.extend(DayOfWeek0)
2856
+ else
2857
+ @index = i1
2858
+ r1 = nil
2859
+ end
2860
+ if r1
2861
+ r0 = r1
2862
+ else
2863
+ r5 = _nt_obs_day_of_week
2864
+ if r5
2865
+ r0 = r5
2866
+ else
2867
+ @index = i0
2868
+ r0 = nil
2869
+ end
2870
+ end
2871
+
2872
+ node_cache[:day_of_week][start_index] = r0
2873
+
2874
+ r0
2875
+ end
2876
+
2877
+ def _nt_day_name
2878
+ start_index = index
2879
+ if node_cache[:day_name].has_key?(index)
2880
+ cached = node_cache[:day_name][index]
2881
+ @index = cached.interval.end if cached
2882
+ return cached
2883
+ end
2884
+
2885
+ i0 = index
2886
+ if has_terminal?("Mon", false, index)
2887
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
2888
+ @index += 3
2889
+ else
2890
+ terminal_parse_failure("Mon")
2891
+ r1 = nil
2892
+ end
2893
+ if r1
2894
+ r0 = r1
2895
+ else
2896
+ if has_terminal?("Tue", false, index)
2897
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 3))
2898
+ @index += 3
2899
+ else
2900
+ terminal_parse_failure("Tue")
2901
+ r2 = nil
2902
+ end
2903
+ if r2
2904
+ r0 = r2
2905
+ else
2906
+ if has_terminal?("Wed", false, index)
2907
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
2908
+ @index += 3
2909
+ else
2910
+ terminal_parse_failure("Wed")
2911
+ r3 = nil
2912
+ end
2913
+ if r3
2914
+ r0 = r3
2915
+ else
2916
+ if has_terminal?("Thu", false, index)
2917
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
2918
+ @index += 3
2919
+ else
2920
+ terminal_parse_failure("Thu")
2921
+ r4 = nil
2922
+ end
2923
+ if r4
2924
+ r0 = r4
2925
+ else
2926
+ if has_terminal?("Fri", false, index)
2927
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 3))
2928
+ @index += 3
2929
+ else
2930
+ terminal_parse_failure("Fri")
2931
+ r5 = nil
2932
+ end
2933
+ if r5
2934
+ r0 = r5
2935
+ else
2936
+ if has_terminal?("Sat", false, index)
2937
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 3))
2938
+ @index += 3
2939
+ else
2940
+ terminal_parse_failure("Sat")
2941
+ r6 = nil
2942
+ end
2943
+ if r6
2944
+ r0 = r6
2945
+ else
2946
+ if has_terminal?("Sun", false, index)
2947
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
2948
+ @index += 3
2949
+ else
2950
+ terminal_parse_failure("Sun")
2951
+ r7 = nil
2952
+ end
2953
+ if r7
2954
+ r0 = r7
2955
+ else
2956
+ @index = i0
2957
+ r0 = nil
2958
+ end
2959
+ end
2960
+ end
2961
+ end
2962
+ end
2963
+ end
2964
+ end
2965
+
2966
+ node_cache[:day_name][start_index] = r0
2967
+
2968
+ r0
2969
+ end
2970
+
2971
+ module Date0
2972
+ def day
2973
+ elements[0]
2974
+ end
2975
+
2976
+ def month
2977
+ elements[1]
2978
+ end
2979
+
2980
+ def year
2981
+ elements[2]
2982
+ end
2983
+ end
2984
+
2985
+ def _nt_date
2986
+ start_index = index
2987
+ if node_cache[:date].has_key?(index)
2988
+ cached = node_cache[:date][index]
2989
+ @index = cached.interval.end if cached
2990
+ return cached
2991
+ end
2992
+
2993
+ i0, s0 = index, []
2994
+ r1 = _nt_day
2995
+ s0 << r1
2996
+ if r1
2997
+ r2 = _nt_month
2998
+ s0 << r2
2999
+ if r2
3000
+ r3 = _nt_year
3001
+ s0 << r3
3002
+ end
3003
+ end
3004
+ if s0.last
3005
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3006
+ r0.extend(Date0)
3007
+ else
3008
+ @index = i0
3009
+ r0 = nil
3010
+ end
3011
+
3012
+ node_cache[:date][start_index] = r0
3013
+
3014
+ r0
3015
+ end
3016
+
3017
+ module Year0
3018
+ def DIGIT1
3019
+ elements[0]
3020
+ end
3021
+
3022
+ def DIGIT2
3023
+ elements[1]
3024
+ end
3025
+
3026
+ def DIGIT3
3027
+ elements[2]
3028
+ end
3029
+
3030
+ def DIGIT4
3031
+ elements[3]
3032
+ end
3033
+ end
3034
+
3035
+ def _nt_year
3036
+ start_index = index
3037
+ if node_cache[:year].has_key?(index)
3038
+ cached = node_cache[:year][index]
3039
+ @index = cached.interval.end if cached
3040
+ return cached
3041
+ end
3042
+
3043
+ i0 = index
3044
+ i1, s1 = index, []
3045
+ r2 = _nt_DIGIT
3046
+ s1 << r2
3047
+ if r2
3048
+ r3 = _nt_DIGIT
3049
+ s1 << r3
3050
+ if r3
3051
+ r4 = _nt_DIGIT
3052
+ s1 << r4
3053
+ if r4
3054
+ r5 = _nt_DIGIT
3055
+ s1 << r5
3056
+ end
3057
+ end
3058
+ end
3059
+ if s1.last
3060
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3061
+ r1.extend(Year0)
3062
+ else
3063
+ @index = i1
3064
+ r1 = nil
3065
+ end
3066
+ if r1
3067
+ r0 = r1
3068
+ else
3069
+ r6 = _nt_obs_year
3070
+ if r6
3071
+ r0 = r6
3072
+ else
3073
+ @index = i0
3074
+ r0 = nil
3075
+ end
3076
+ end
3077
+
3078
+ node_cache[:year][start_index] = r0
3079
+
3080
+ r0
3081
+ end
3082
+
3083
+ module Month0
3084
+ def FWS1
3085
+ elements[0]
3086
+ end
3087
+
3088
+ def month_name
3089
+ elements[1]
3090
+ end
3091
+
3092
+ def FWS2
3093
+ elements[2]
3094
+ end
3095
+ end
3096
+
3097
+ def _nt_month
3098
+ start_index = index
3099
+ if node_cache[:month].has_key?(index)
3100
+ cached = node_cache[:month][index]
3101
+ @index = cached.interval.end if cached
3102
+ return cached
3103
+ end
3104
+
3105
+ i0 = index
3106
+ i1, s1 = index, []
3107
+ r2 = _nt_FWS
3108
+ s1 << r2
3109
+ if r2
3110
+ r3 = _nt_month_name
3111
+ s1 << r3
3112
+ if r3
3113
+ r4 = _nt_FWS
3114
+ s1 << r4
3115
+ end
3116
+ end
3117
+ if s1.last
3118
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3119
+ r1.extend(Month0)
3120
+ else
3121
+ @index = i1
3122
+ r1 = nil
3123
+ end
3124
+ if r1
3125
+ r0 = r1
3126
+ else
3127
+ r5 = _nt_obs_month
3128
+ if r5
3129
+ r0 = r5
3130
+ else
3131
+ @index = i0
3132
+ r0 = nil
3133
+ end
3134
+ end
3135
+
3136
+ node_cache[:month][start_index] = r0
3137
+
3138
+ r0
3139
+ end
3140
+
3141
+ def _nt_month_name
3142
+ start_index = index
3143
+ if node_cache[:month_name].has_key?(index)
3144
+ cached = node_cache[:month_name][index]
3145
+ @index = cached.interval.end if cached
3146
+ return cached
3147
+ end
3148
+
3149
+ i0 = index
3150
+ if has_terminal?("Jan", false, index)
3151
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
3152
+ @index += 3
3153
+ else
3154
+ terminal_parse_failure("Jan")
3155
+ r1 = nil
3156
+ end
3157
+ if r1
3158
+ r0 = r1
3159
+ else
3160
+ if has_terminal?("Feb", false, index)
3161
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 3))
3162
+ @index += 3
3163
+ else
3164
+ terminal_parse_failure("Feb")
3165
+ r2 = nil
3166
+ end
3167
+ if r2
3168
+ r0 = r2
3169
+ else
3170
+ if has_terminal?("Mar", false, index)
3171
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
3172
+ @index += 3
3173
+ else
3174
+ terminal_parse_failure("Mar")
3175
+ r3 = nil
3176
+ end
3177
+ if r3
3178
+ r0 = r3
3179
+ else
3180
+ if has_terminal?("Apr", false, index)
3181
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
3182
+ @index += 3
3183
+ else
3184
+ terminal_parse_failure("Apr")
3185
+ r4 = nil
3186
+ end
3187
+ if r4
3188
+ r0 = r4
3189
+ else
3190
+ if has_terminal?("May", false, index)
3191
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 3))
3192
+ @index += 3
3193
+ else
3194
+ terminal_parse_failure("May")
3195
+ r5 = nil
3196
+ end
3197
+ if r5
3198
+ r0 = r5
3199
+ else
3200
+ if has_terminal?("Jun", false, index)
3201
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 3))
3202
+ @index += 3
3203
+ else
3204
+ terminal_parse_failure("Jun")
3205
+ r6 = nil
3206
+ end
3207
+ if r6
3208
+ r0 = r6
3209
+ else
3210
+ if has_terminal?("Jul", false, index)
3211
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
3212
+ @index += 3
3213
+ else
3214
+ terminal_parse_failure("Jul")
3215
+ r7 = nil
3216
+ end
3217
+ if r7
3218
+ r0 = r7
3219
+ else
3220
+ if has_terminal?("Aug", false, index)
3221
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 3))
3222
+ @index += 3
3223
+ else
3224
+ terminal_parse_failure("Aug")
3225
+ r8 = nil
3226
+ end
3227
+ if r8
3228
+ r0 = r8
3229
+ else
3230
+ if has_terminal?("Sep", false, index)
3231
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 3))
3232
+ @index += 3
3233
+ else
3234
+ terminal_parse_failure("Sep")
3235
+ r9 = nil
3236
+ end
3237
+ if r9
3238
+ r0 = r9
3239
+ else
3240
+ if has_terminal?("Oct", false, index)
3241
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 3))
3242
+ @index += 3
3243
+ else
3244
+ terminal_parse_failure("Oct")
3245
+ r10 = nil
3246
+ end
3247
+ if r10
3248
+ r0 = r10
3249
+ else
3250
+ if has_terminal?("Nov", false, index)
3251
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 3))
3252
+ @index += 3
3253
+ else
3254
+ terminal_parse_failure("Nov")
3255
+ r11 = nil
3256
+ end
3257
+ if r11
3258
+ r0 = r11
3259
+ else
3260
+ if has_terminal?("Dec", false, index)
3261
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 3))
3262
+ @index += 3
3263
+ else
3264
+ terminal_parse_failure("Dec")
3265
+ r12 = nil
3266
+ end
3267
+ if r12
3268
+ r0 = r12
3269
+ else
3270
+ @index = i0
3271
+ r0 = nil
3272
+ end
3273
+ end
3274
+ end
3275
+ end
3276
+ end
3277
+ end
3278
+ end
3279
+ end
3280
+ end
3281
+ end
3282
+ end
3283
+ end
3284
+
3285
+ node_cache[:month_name][start_index] = r0
3286
+
3287
+ r0
3288
+ end
3289
+
3290
+ module Day0
3291
+ def DIGIT
3292
+ elements[1]
3293
+ end
3294
+
3295
+ end
3296
+
3297
+ def _nt_day
3298
+ start_index = index
3299
+ if node_cache[:day].has_key?(index)
3300
+ cached = node_cache[:day][index]
3301
+ @index = cached.interval.end if cached
3302
+ return cached
3303
+ end
3304
+
3305
+ i0 = index
3306
+ i1, s1 = index, []
3307
+ r3 = _nt_FWS
3308
+ if r3
3309
+ r2 = r3
3310
+ else
3311
+ r2 = instantiate_node(SyntaxNode,input, index...index)
3312
+ end
3313
+ s1 << r2
3314
+ if r2
3315
+ r4 = _nt_DIGIT
3316
+ s1 << r4
3317
+ if r4
3318
+ r6 = _nt_DIGIT
3319
+ if r6
3320
+ r5 = r6
3321
+ else
3322
+ r5 = instantiate_node(SyntaxNode,input, index...index)
3323
+ end
3324
+ s1 << r5
3325
+ end
3326
+ end
3327
+ if s1.last
3328
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3329
+ r1.extend(Day0)
3330
+ else
3331
+ @index = i1
3332
+ r1 = nil
3333
+ end
3334
+ if r1
3335
+ r0 = r1
3336
+ else
3337
+ r7 = _nt_obs_day
3338
+ if r7
3339
+ r0 = r7
3340
+ else
3341
+ @index = i0
3342
+ r0 = nil
3343
+ end
3344
+ end
3345
+
3346
+ node_cache[:day][start_index] = r0
3347
+
3348
+ r0
3349
+ end
3350
+
3351
+ module Time0
3352
+ def time_of_day
3353
+ elements[0]
3354
+ end
3355
+
3356
+ def FWS
3357
+ elements[1]
3358
+ end
3359
+
3360
+ def zone
3361
+ elements[2]
3362
+ end
3363
+ end
3364
+
3365
+ def _nt_time
3366
+ start_index = index
3367
+ if node_cache[:time].has_key?(index)
3368
+ cached = node_cache[:time][index]
3369
+ @index = cached.interval.end if cached
3370
+ return cached
3371
+ end
3372
+
3373
+ i0, s0 = index, []
3374
+ r1 = _nt_time_of_day
3375
+ s0 << r1
3376
+ if r1
3377
+ r2 = _nt_FWS
3378
+ s0 << r2
3379
+ if r2
3380
+ r3 = _nt_zone
3381
+ s0 << r3
3382
+ end
3383
+ end
3384
+ if s0.last
3385
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3386
+ r0.extend(Time0)
3387
+ else
3388
+ @index = i0
3389
+ r0 = nil
3390
+ end
3391
+
3392
+ node_cache[:time][start_index] = r0
3393
+
3394
+ r0
3395
+ end
3396
+
3397
+ module TimeOfDay0
3398
+ def second
3399
+ elements[1]
3400
+ end
3401
+ end
3402
+
3403
+ module TimeOfDay1
3404
+ def hour
3405
+ elements[0]
3406
+ end
3407
+
3408
+ def minute
3409
+ elements[2]
3410
+ end
3411
+
3412
+ end
3413
+
3414
+ def _nt_time_of_day
3415
+ start_index = index
3416
+ if node_cache[:time_of_day].has_key?(index)
3417
+ cached = node_cache[:time_of_day][index]
3418
+ @index = cached.interval.end if cached
3419
+ return cached
3420
+ end
3421
+
3422
+ i0, s0 = index, []
3423
+ r1 = _nt_hour
3424
+ s0 << r1
3425
+ if r1
3426
+ if has_terminal?(":", false, index)
3427
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3428
+ @index += 1
3429
+ else
3430
+ terminal_parse_failure(":")
3431
+ r2 = nil
3432
+ end
3433
+ s0 << r2
3434
+ if r2
3435
+ r3 = _nt_minute
3436
+ s0 << r3
3437
+ if r3
3438
+ i5, s5 = index, []
3439
+ if has_terminal?(":", false, index)
3440
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
3441
+ @index += 1
3442
+ else
3443
+ terminal_parse_failure(":")
3444
+ r6 = nil
3445
+ end
3446
+ s5 << r6
3447
+ if r6
3448
+ r7 = _nt_second
3449
+ s5 << r7
3450
+ end
3451
+ if s5.last
3452
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3453
+ r5.extend(TimeOfDay0)
3454
+ else
3455
+ @index = i5
3456
+ r5 = nil
3457
+ end
3458
+ if r5
3459
+ r4 = r5
3460
+ else
3461
+ r4 = instantiate_node(SyntaxNode,input, index...index)
3462
+ end
3463
+ s0 << r4
3464
+ end
3465
+ end
3466
+ end
3467
+ if s0.last
3468
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3469
+ r0.extend(TimeOfDay1)
3470
+ else
3471
+ @index = i0
3472
+ r0 = nil
3473
+ end
3474
+
3475
+ node_cache[:time_of_day][start_index] = r0
3476
+
3477
+ r0
3478
+ end
3479
+
3480
+ module Hour0
3481
+ def DIGIT1
3482
+ elements[0]
3483
+ end
3484
+
3485
+ def DIGIT2
3486
+ elements[1]
3487
+ end
3488
+ end
3489
+
3490
+ def _nt_hour
3491
+ start_index = index
3492
+ if node_cache[:hour].has_key?(index)
3493
+ cached = node_cache[:hour][index]
3494
+ @index = cached.interval.end if cached
3495
+ return cached
3496
+ end
3497
+
3498
+ i0 = index
3499
+ i1, s1 = index, []
3500
+ r2 = _nt_DIGIT
3501
+ s1 << r2
3502
+ if r2
3503
+ r3 = _nt_DIGIT
3504
+ s1 << r3
3505
+ end
3506
+ if s1.last
3507
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3508
+ r1.extend(Hour0)
3509
+ else
3510
+ @index = i1
3511
+ r1 = nil
3512
+ end
3513
+ if r1
3514
+ r0 = r1
3515
+ else
3516
+ r4 = _nt_obs_hour
3517
+ if r4
3518
+ r0 = r4
3519
+ else
3520
+ @index = i0
3521
+ r0 = nil
3522
+ end
3523
+ end
3524
+
3525
+ node_cache[:hour][start_index] = r0
3526
+
3527
+ r0
3528
+ end
3529
+
3530
+ module Minute0
3531
+ def DIGIT1
3532
+ elements[0]
3533
+ end
3534
+
3535
+ def DIGIT2
3536
+ elements[1]
3537
+ end
3538
+ end
3539
+
3540
+ def _nt_minute
3541
+ start_index = index
3542
+ if node_cache[:minute].has_key?(index)
3543
+ cached = node_cache[:minute][index]
3544
+ @index = cached.interval.end if cached
3545
+ return cached
3546
+ end
3547
+
3548
+ i0 = index
3549
+ i1, s1 = index, []
3550
+ r2 = _nt_DIGIT
3551
+ s1 << r2
3552
+ if r2
3553
+ r3 = _nt_DIGIT
3554
+ s1 << r3
3555
+ end
3556
+ if s1.last
3557
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3558
+ r1.extend(Minute0)
3559
+ else
3560
+ @index = i1
3561
+ r1 = nil
3562
+ end
3563
+ if r1
3564
+ r0 = r1
3565
+ else
3566
+ r4 = _nt_obs_minute
3567
+ if r4
3568
+ r0 = r4
3569
+ else
3570
+ @index = i0
3571
+ r0 = nil
3572
+ end
3573
+ end
3574
+
3575
+ node_cache[:minute][start_index] = r0
3576
+
3577
+ r0
3578
+ end
3579
+
3580
+ module Second0
3581
+ def DIGIT1
3582
+ elements[0]
3583
+ end
3584
+
3585
+ def DIGIT2
3586
+ elements[1]
3587
+ end
3588
+ end
3589
+
3590
+ def _nt_second
3591
+ start_index = index
3592
+ if node_cache[:second].has_key?(index)
3593
+ cached = node_cache[:second][index]
3594
+ @index = cached.interval.end if cached
3595
+ return cached
3596
+ end
3597
+
3598
+ i0 = index
3599
+ i1, s1 = index, []
3600
+ r2 = _nt_DIGIT
3601
+ s1 << r2
3602
+ if r2
3603
+ r3 = _nt_DIGIT
3604
+ s1 << r3
3605
+ end
3606
+ if s1.last
3607
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3608
+ r1.extend(Second0)
3609
+ else
3610
+ @index = i1
3611
+ r1 = nil
3612
+ end
3613
+ if r1
3614
+ r0 = r1
3615
+ else
3616
+ r4 = _nt_obs_second
3617
+ if r4
3618
+ r0 = r4
3619
+ else
3620
+ @index = i0
3621
+ r0 = nil
3622
+ end
3623
+ end
3624
+
3625
+ node_cache[:second][start_index] = r0
3626
+
3627
+ r0
3628
+ end
3629
+
3630
+ module Zone0
3631
+ def DIGIT1
3632
+ elements[1]
3633
+ end
3634
+
3635
+ def DIGIT2
3636
+ elements[2]
3637
+ end
3638
+
3639
+ def DIGIT3
3640
+ elements[3]
3641
+ end
3642
+
3643
+ def DIGIT4
3644
+ elements[4]
3645
+ end
3646
+ end
3647
+
3648
+ def _nt_zone
3649
+ start_index = index
3650
+ if node_cache[:zone].has_key?(index)
3651
+ cached = node_cache[:zone][index]
3652
+ @index = cached.interval.end if cached
3653
+ return cached
3654
+ end
3655
+
3656
+ i0 = index
3657
+ i1, s1 = index, []
3658
+ i2 = index
3659
+ if has_terminal?("+", false, index)
3660
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
3661
+ @index += 1
3662
+ else
3663
+ terminal_parse_failure("+")
3664
+ r3 = nil
3665
+ end
3666
+ if r3
3667
+ r2 = r3
3668
+ else
3669
+ if has_terminal?("-", false, index)
3670
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3671
+ @index += 1
3672
+ else
3673
+ terminal_parse_failure("-")
3674
+ r4 = nil
3675
+ end
3676
+ if r4
3677
+ r2 = r4
3678
+ else
3679
+ @index = i2
3680
+ r2 = nil
3681
+ end
3682
+ end
3683
+ s1 << r2
3684
+ if r2
3685
+ r5 = _nt_DIGIT
3686
+ s1 << r5
3687
+ if r5
3688
+ r6 = _nt_DIGIT
3689
+ s1 << r6
3690
+ if r6
3691
+ r7 = _nt_DIGIT
3692
+ s1 << r7
3693
+ if r7
3694
+ r8 = _nt_DIGIT
3695
+ s1 << r8
3696
+ end
3697
+ end
3698
+ end
3699
+ end
3700
+ if s1.last
3701
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3702
+ r1.extend(Zone0)
3703
+ else
3704
+ @index = i1
3705
+ r1 = nil
3706
+ end
3707
+ if r1
3708
+ r0 = r1
3709
+ else
3710
+ r9 = _nt_obs_zone
3711
+ if r9
3712
+ r0 = r9
3713
+ else
3714
+ @index = i0
3715
+ r0 = nil
3716
+ end
3717
+ end
3718
+
3719
+ node_cache[:zone][start_index] = r0
3720
+
3721
+ r0
3722
+ end
3723
+
3724
+ module Return0
3725
+ def path
3726
+ elements[0]
3727
+ end
3728
+
3729
+ def CRLF
3730
+ elements[1]
3731
+ end
3732
+ end
3733
+
3734
+ def _nt_return
3735
+ start_index = index
3736
+ if node_cache[:return].has_key?(index)
3737
+ cached = node_cache[:return][index]
3738
+ @index = cached.interval.end if cached
3739
+ return cached
3740
+ end
3741
+
3742
+ i0, s0 = index, []
3743
+ r1 = _nt_path
3744
+ s0 << r1
3745
+ if r1
3746
+ r2 = _nt_CRLF
3747
+ s0 << r2
3748
+ end
3749
+ if s0.last
3750
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3751
+ r0.extend(Return0)
3752
+ else
3753
+ @index = i0
3754
+ r0 = nil
3755
+ end
3756
+
3757
+ node_cache[:return][start_index] = r0
3758
+
3759
+ r0
3760
+ end
3761
+
3762
+ module Path0
3763
+ end
3764
+
3765
+ def _nt_path
3766
+ start_index = index
3767
+ if node_cache[:path].has_key?(index)
3768
+ cached = node_cache[:path][index]
3769
+ @index = cached.interval.end if cached
3770
+ return cached
3771
+ end
3772
+
3773
+ i0 = index
3774
+ i1, s1 = index, []
3775
+ r3 = _nt_CFWS
3776
+ if r3
3777
+ r2 = r3
3778
+ else
3779
+ r2 = instantiate_node(SyntaxNode,input, index...index)
3780
+ end
3781
+ s1 << r2
3782
+ if r2
3783
+ if has_terminal?("<", false, index)
3784
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3785
+ @index += 1
3786
+ else
3787
+ terminal_parse_failure("<")
3788
+ r4 = nil
3789
+ end
3790
+ s1 << r4
3791
+ if r4
3792
+ i5 = index
3793
+ r7 = _nt_CFWS
3794
+ if r7
3795
+ r6 = r7
3796
+ else
3797
+ r6 = instantiate_node(SyntaxNode,input, index...index)
3798
+ end
3799
+ if r6
3800
+ r5 = r6
3801
+ else
3802
+ r8 = _nt_addr_spec
3803
+ if r8
3804
+ r5 = r8
3805
+ else
3806
+ @index = i5
3807
+ r5 = nil
3808
+ end
3809
+ end
3810
+ s1 << r5
3811
+ if r5
3812
+ if has_terminal?(">", false, index)
3813
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3814
+ @index += 1
3815
+ else
3816
+ terminal_parse_failure(">")
3817
+ r9 = nil
3818
+ end
3819
+ s1 << r9
3820
+ if r9
3821
+ r11 = _nt_CFWS
3822
+ if r11
3823
+ r10 = r11
3824
+ else
3825
+ r10 = instantiate_node(SyntaxNode,input, index...index)
3826
+ end
3827
+ s1 << r10
3828
+ end
3829
+ end
3830
+ end
3831
+ end
3832
+ if s1.last
3833
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3834
+ r1.extend(Path0)
3835
+ else
3836
+ @index = i1
3837
+ r1 = nil
3838
+ end
3839
+ if r1
3840
+ r0 = r1
3841
+ else
3842
+ r12 = _nt_obs_path
3843
+ if r12
3844
+ r0 = r12
3845
+ else
3846
+ @index = i0
3847
+ r0 = nil
3848
+ end
3849
+ end
3850
+
3851
+ node_cache[:path][start_index] = r0
3852
+
3853
+ r0
3854
+ end
3855
+
3856
+ module Received0
3857
+ def name_val_list
3858
+ elements[0]
3859
+ end
3860
+
3861
+ def date_time
3862
+ elements[2]
3863
+ end
3864
+
3865
+ def CRLF
3866
+ elements[3]
3867
+ end
3868
+ end
3869
+
3870
+ def _nt_received
3871
+ start_index = index
3872
+ if node_cache[:received].has_key?(index)
3873
+ cached = node_cache[:received][index]
3874
+ @index = cached.interval.end if cached
3875
+ return cached
3876
+ end
3877
+
3878
+ i0, s0 = index, []
3879
+ r1 = _nt_name_val_list
3880
+ s0 << r1
3881
+ if r1
3882
+ if has_terminal?(";", false, index)
3883
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3884
+ @index += 1
3885
+ else
3886
+ terminal_parse_failure(";")
3887
+ r2 = nil
3888
+ end
3889
+ s0 << r2
3890
+ if r2
3891
+ r3 = _nt_date_time
3892
+ s0 << r3
3893
+ if r3
3894
+ r4 = _nt_CRLF
3895
+ s0 << r4
3896
+ end
3897
+ end
3898
+ end
3899
+ if s0.last
3900
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3901
+ r0.extend(Received0)
3902
+ else
3903
+ @index = i0
3904
+ r0 = nil
3905
+ end
3906
+
3907
+ node_cache[:received][start_index] = r0
3908
+
3909
+ r0
3910
+ end
3911
+
3912
+ module NameValList0
3913
+ def CFWS
3914
+ elements[0]
3915
+ end
3916
+
3917
+ def name_val_pair
3918
+ elements[1]
3919
+ end
3920
+ end
3921
+
3922
+ module NameValList1
3923
+ def name_val_pair
3924
+ elements[0]
3925
+ end
3926
+
3927
+ end
3928
+
3929
+ module NameValList2
3930
+ end
3931
+
3932
+ def _nt_name_val_list
3933
+ start_index = index
3934
+ if node_cache[:name_val_list].has_key?(index)
3935
+ cached = node_cache[:name_val_list][index]
3936
+ @index = cached.interval.end if cached
3937
+ return cached
3938
+ end
3939
+
3940
+ i0, s0 = index, []
3941
+ r2 = _nt_CFWS
3942
+ if r2
3943
+ r1 = r2
3944
+ else
3945
+ r1 = instantiate_node(SyntaxNode,input, index...index)
3946
+ end
3947
+ s0 << r1
3948
+ if r1
3949
+ i3, s3 = index, []
3950
+ r4 = _nt_name_val_pair
3951
+ s3 << r4
3952
+ if r4
3953
+ s5, i5 = [], index
3954
+ loop do
3955
+ i6, s6 = index, []
3956
+ r7 = _nt_CFWS
3957
+ s6 << r7
3958
+ if r7
3959
+ r8 = _nt_name_val_pair
3960
+ s6 << r8
3961
+ end
3962
+ if s6.last
3963
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3964
+ r6.extend(NameValList0)
3965
+ else
3966
+ @index = i6
3967
+ r6 = nil
3968
+ end
3969
+ if r6
3970
+ s5 << r6
3971
+ else
3972
+ break
3973
+ end
3974
+ end
3975
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3976
+ s3 << r5
3977
+ end
3978
+ if s3.last
3979
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3980
+ r3.extend(NameValList1)
3981
+ else
3982
+ @index = i3
3983
+ r3 = nil
3984
+ end
3985
+ s0 << r3
3986
+ end
3987
+ if s0.last
3988
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3989
+ r0.extend(NameValList2)
3990
+ else
3991
+ @index = i0
3992
+ r0 = nil
3993
+ end
3994
+
3995
+ node_cache[:name_val_list][start_index] = r0
3996
+
3997
+ r0
3998
+ end
3999
+
4000
+ module NameValPair0
4001
+ def item_name
4002
+ elements[0]
4003
+ end
4004
+
4005
+ def CFWS
4006
+ elements[1]
4007
+ end
4008
+
4009
+ def item_value
4010
+ elements[2]
4011
+ end
4012
+ end
4013
+
4014
+ def _nt_name_val_pair
4015
+ start_index = index
4016
+ if node_cache[:name_val_pair].has_key?(index)
4017
+ cached = node_cache[:name_val_pair][index]
4018
+ @index = cached.interval.end if cached
4019
+ return cached
4020
+ end
4021
+
4022
+ i0, s0 = index, []
4023
+ r1 = _nt_item_name
4024
+ s0 << r1
4025
+ if r1
4026
+ r2 = _nt_CFWS
4027
+ s0 << r2
4028
+ if r2
4029
+ r3 = _nt_item_value
4030
+ s0 << r3
4031
+ end
4032
+ end
4033
+ if s0.last
4034
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4035
+ r0.extend(NameValPair0)
4036
+ else
4037
+ @index = i0
4038
+ r0 = nil
4039
+ end
4040
+
4041
+ node_cache[:name_val_pair][start_index] = r0
4042
+
4043
+ r0
4044
+ end
4045
+
4046
+ module ItemName0
4047
+ end
4048
+
4049
+ module ItemName1
4050
+ def ALPHA
4051
+ elements[0]
4052
+ end
4053
+
4054
+ end
4055
+
4056
+ def _nt_item_name
4057
+ start_index = index
4058
+ if node_cache[:item_name].has_key?(index)
4059
+ cached = node_cache[:item_name][index]
4060
+ @index = cached.interval.end if cached
4061
+ return cached
4062
+ end
4063
+
4064
+ i0, s0 = index, []
4065
+ r1 = _nt_ALPHA
4066
+ s0 << r1
4067
+ if r1
4068
+ s2, i2 = [], index
4069
+ loop do
4070
+ i3, s3 = index, []
4071
+ if has_terminal?("-", false, index)
4072
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
4073
+ @index += 1
4074
+ else
4075
+ terminal_parse_failure("-")
4076
+ r5 = nil
4077
+ end
4078
+ if r5
4079
+ r4 = r5
4080
+ else
4081
+ r4 = instantiate_node(SyntaxNode,input, index...index)
4082
+ end
4083
+ s3 << r4
4084
+ if r4
4085
+ i6 = index
4086
+ r7 = _nt_ALPHA
4087
+ if r7
4088
+ r6 = r7
4089
+ else
4090
+ r8 = _nt_DIGIT
4091
+ if r8
4092
+ r6 = r8
4093
+ else
4094
+ @index = i6
4095
+ r6 = nil
4096
+ end
4097
+ end
4098
+ s3 << r6
4099
+ end
4100
+ if s3.last
4101
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
4102
+ r3.extend(ItemName0)
4103
+ else
4104
+ @index = i3
4105
+ r3 = nil
4106
+ end
4107
+ if r3
4108
+ s2 << r3
4109
+ else
4110
+ break
4111
+ end
4112
+ end
4113
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
4114
+ s0 << r2
4115
+ end
4116
+ if s0.last
4117
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4118
+ r0.extend(ItemName1)
4119
+ else
4120
+ @index = i0
4121
+ r0 = nil
4122
+ end
4123
+
4124
+ node_cache[:item_name][start_index] = r0
4125
+
4126
+ r0
4127
+ end
4128
+
4129
+ def _nt_item_value
4130
+ start_index = index
4131
+ if node_cache[:item_value].has_key?(index)
4132
+ cached = node_cache[:item_value][index]
4133
+ @index = cached.interval.end if cached
4134
+ return cached
4135
+ end
4136
+
4137
+ i0 = index
4138
+ s1, i1 = [], index
4139
+ loop do
4140
+ r2 = _nt_angle_addr
4141
+ if r2
4142
+ s1 << r2
4143
+ else
4144
+ break
4145
+ end
4146
+ end
4147
+ if s1.empty?
4148
+ @index = i1
4149
+ r1 = nil
4150
+ else
4151
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
4152
+ end
4153
+ if r1
4154
+ r0 = r1
4155
+ else
4156
+ r3 = _nt_addr_spec
4157
+ if r3
4158
+ r0 = r3
4159
+ else
4160
+ r4 = _nt_atom
4161
+ if r4
4162
+ r0 = r4
4163
+ else
4164
+ r5 = _nt_domain
4165
+ if r5
4166
+ r0 = r5
4167
+ else
4168
+ r6 = _nt_msg_id
4169
+ if r6
4170
+ r0 = r6
4171
+ else
4172
+ @index = i0
4173
+ r0 = nil
4174
+ end
4175
+ end
4176
+ end
4177
+ end
4178
+ end
4179
+
4180
+ node_cache[:item_value][start_index] = r0
4181
+
4182
+ r0
4183
+ end
4184
+
4185
+ module MessageIds0
4186
+ def CFWS
4187
+ elements[0]
4188
+ end
4189
+
4190
+ def msg_id_value
4191
+ elements[1]
4192
+ end
4193
+ end
4194
+
4195
+ module MessageIds1
4196
+ def first_msg_id
4197
+ elements[0]
4198
+ end
4199
+
4200
+ def other_msg_ids
4201
+ elements[1]
4202
+ end
4203
+ end
4204
+
4205
+ def _nt_message_ids
4206
+ start_index = index
4207
+ if node_cache[:message_ids].has_key?(index)
4208
+ cached = node_cache[:message_ids][index]
4209
+ @index = cached.interval.end if cached
4210
+ return cached
4211
+ end
4212
+
4213
+ i0, s0 = index, []
4214
+ r1 = _nt_msg_id
4215
+ s0 << r1
4216
+ if r1
4217
+ s2, i2 = [], index
4218
+ loop do
4219
+ i3, s3 = index, []
4220
+ r4 = _nt_CFWS
4221
+ s3 << r4
4222
+ if r4
4223
+ r5 = _nt_msg_id
4224
+ s3 << r5
4225
+ end
4226
+ if s3.last
4227
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
4228
+ r3.extend(MessageIds0)
4229
+ else
4230
+ @index = i3
4231
+ r3 = nil
4232
+ end
4233
+ if r3
4234
+ s2 << r3
4235
+ else
4236
+ break
4237
+ end
4238
+ end
4239
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
4240
+ s0 << r2
4241
+ end
4242
+ if s0.last
4243
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4244
+ r0.extend(MessageIds1)
4245
+ else
4246
+ @index = i0
4247
+ r0 = nil
4248
+ end
4249
+
4250
+ node_cache[:message_ids][start_index] = r0
4251
+
4252
+ r0
4253
+ end
4254
+
4255
+ module MsgId0
4256
+ def msg_id_value
4257
+ elements[2]
4258
+ end
4259
+
4260
+ end
4261
+
4262
+ def _nt_msg_id
4263
+ start_index = index
4264
+ if node_cache[:msg_id].has_key?(index)
4265
+ cached = node_cache[:msg_id][index]
4266
+ @index = cached.interval.end if cached
4267
+ return cached
4268
+ end
4269
+
4270
+ i0, s0 = index, []
4271
+ r2 = _nt_CFWS
4272
+ if r2
4273
+ r1 = r2
4274
+ else
4275
+ r1 = instantiate_node(SyntaxNode,input, index...index)
4276
+ end
4277
+ s0 << r1
4278
+ if r1
4279
+ if has_terminal?("<", false, index)
4280
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
4281
+ @index += 1
4282
+ else
4283
+ terminal_parse_failure("<")
4284
+ r3 = nil
4285
+ end
4286
+ s0 << r3
4287
+ if r3
4288
+ r4 = _nt_msg_id_value
4289
+ s0 << r4
4290
+ if r4
4291
+ if has_terminal?(">", false, index)
4292
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
4293
+ @index += 1
4294
+ else
4295
+ terminal_parse_failure(">")
4296
+ r5 = nil
4297
+ end
4298
+ s0 << r5
4299
+ if r5
4300
+ r7 = _nt_CFWS
4301
+ if r7
4302
+ r6 = r7
4303
+ else
4304
+ r6 = instantiate_node(SyntaxNode,input, index...index)
4305
+ end
4306
+ s0 << r6
4307
+ end
4308
+ end
4309
+ end
4310
+ end
4311
+ if s0.last
4312
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4313
+ r0.extend(MsgId0)
4314
+ else
4315
+ @index = i0
4316
+ r0 = nil
4317
+ end
4318
+
4319
+ node_cache[:msg_id][start_index] = r0
4320
+
4321
+ r0
4322
+ end
4323
+
4324
+ module MsgIdValue0
4325
+ def id_left
4326
+ elements[0]
4327
+ end
4328
+
4329
+ def id_right
4330
+ elements[2]
4331
+ end
4332
+ end
4333
+
4334
+ def _nt_msg_id_value
4335
+ start_index = index
4336
+ if node_cache[:msg_id_value].has_key?(index)
4337
+ cached = node_cache[:msg_id_value][index]
4338
+ @index = cached.interval.end if cached
4339
+ return cached
4340
+ end
4341
+
4342
+ i0, s0 = index, []
4343
+ r1 = _nt_id_left
4344
+ s0 << r1
4345
+ if r1
4346
+ if has_terminal?("@", false, index)
4347
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
4348
+ @index += 1
4349
+ else
4350
+ terminal_parse_failure("@")
4351
+ r2 = nil
4352
+ end
4353
+ s0 << r2
4354
+ if r2
4355
+ r3 = _nt_id_right
4356
+ s0 << r3
4357
+ end
4358
+ end
4359
+ if s0.last
4360
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4361
+ r0.extend(MsgIdValue0)
4362
+ else
4363
+ @index = i0
4364
+ r0 = nil
4365
+ end
4366
+
4367
+ node_cache[:msg_id_value][start_index] = r0
4368
+
4369
+ r0
4370
+ end
4371
+
4372
+ def _nt_id_left
4373
+ start_index = index
4374
+ if node_cache[:id_left].has_key?(index)
4375
+ cached = node_cache[:id_left][index]
4376
+ @index = cached.interval.end if cached
4377
+ return cached
4378
+ end
4379
+
4380
+ i0 = index
4381
+ r1 = _nt_dot_atom_text
4382
+ if r1
4383
+ r0 = r1
4384
+ else
4385
+ r2 = _nt_no_fold_quote
4386
+ if r2
4387
+ r0 = r2
4388
+ else
4389
+ r3 = _nt_obs_id_left
4390
+ if r3
4391
+ r0 = r3
4392
+ else
4393
+ @index = i0
4394
+ r0 = nil
4395
+ end
4396
+ end
4397
+ end
4398
+
4399
+ node_cache[:id_left][start_index] = r0
4400
+
4401
+ r0
4402
+ end
4403
+
4404
+ def _nt_id_right
4405
+ start_index = index
4406
+ if node_cache[:id_right].has_key?(index)
4407
+ cached = node_cache[:id_right][index]
4408
+ @index = cached.interval.end if cached
4409
+ return cached
4410
+ end
4411
+
4412
+ i0 = index
4413
+ r1 = _nt_msg_id_dot_atom_text
4414
+ if r1
4415
+ r0 = r1
4416
+ else
4417
+ r2 = _nt_no_fold_literal
4418
+ if r2
4419
+ r0 = r2
4420
+ else
4421
+ r3 = _nt_obs_id_right
4422
+ if r3
4423
+ r0 = r3
4424
+ else
4425
+ @index = i0
4426
+ r0 = nil
4427
+ end
4428
+ end
4429
+ end
4430
+
4431
+ node_cache[:id_right][start_index] = r0
4432
+
4433
+ r0
4434
+ end
4435
+
4436
+ module MsgIdDotAtomText0
4437
+ def msg_id_domain_text
4438
+ elements[0]
4439
+ end
4440
+
4441
+ end
4442
+
4443
+ def _nt_msg_id_dot_atom_text
4444
+ start_index = index
4445
+ if node_cache[:msg_id_dot_atom_text].has_key?(index)
4446
+ cached = node_cache[:msg_id_dot_atom_text][index]
4447
+ @index = cached.interval.end if cached
4448
+ return cached
4449
+ end
4450
+
4451
+ s0, i0 = [], index
4452
+ loop do
4453
+ i1, s1 = index, []
4454
+ r2 = _nt_msg_id_domain_text
4455
+ s1 << r2
4456
+ if r2
4457
+ if has_terminal?(".", false, index)
4458
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
4459
+ @index += 1
4460
+ else
4461
+ terminal_parse_failure(".")
4462
+ r4 = nil
4463
+ end
4464
+ if r4
4465
+ r3 = r4
4466
+ else
4467
+ r3 = instantiate_node(SyntaxNode,input, index...index)
4468
+ end
4469
+ s1 << r3
4470
+ end
4471
+ if s1.last
4472
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
4473
+ r1.extend(MsgIdDotAtomText0)
4474
+ else
4475
+ @index = i1
4476
+ r1 = nil
4477
+ end
4478
+ if r1
4479
+ s0 << r1
4480
+ else
4481
+ break
4482
+ end
4483
+ end
4484
+ if s0.empty?
4485
+ @index = i0
4486
+ r0 = nil
4487
+ else
4488
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4489
+ end
4490
+
4491
+ node_cache[:msg_id_dot_atom_text][start_index] = r0
4492
+
4493
+ r0
4494
+ end
4495
+
4496
+ module MsgIdDomainText0
4497
+ def quoted_domain
4498
+ elements[1]
4499
+ end
4500
+ end
4501
+
4502
+ module MsgIdDomainText1
4503
+ def DQUOTE1
4504
+ elements[0]
4505
+ end
4506
+
4507
+ def DQUOTE2
4508
+ elements[3]
4509
+ end
4510
+ end
4511
+
4512
+ def _nt_msg_id_domain_text
4513
+ start_index = index
4514
+ if node_cache[:msg_id_domain_text].has_key?(index)
4515
+ cached = node_cache[:msg_id_domain_text][index]
4516
+ @index = cached.interval.end if cached
4517
+ return cached
4518
+ end
4519
+
4520
+ i0 = index
4521
+ i1, s1 = index, []
4522
+ r2 = _nt_DQUOTE
4523
+ s1 << r2
4524
+ if r2
4525
+ s3, i3 = [], index
4526
+ loop do
4527
+ i4, s4 = index, []
4528
+ r6 = _nt_FWS
4529
+ if r6
4530
+ r5 = r6
4531
+ else
4532
+ r5 = instantiate_node(SyntaxNode,input, index...index)
4533
+ end
4534
+ s4 << r5
4535
+ if r5
4536
+ r7 = _nt_quoted_domain
4537
+ s4 << r7
4538
+ end
4539
+ if s4.last
4540
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
4541
+ r4.extend(MsgIdDomainText0)
4542
+ else
4543
+ @index = i4
4544
+ r4 = nil
4545
+ end
4546
+ if r4
4547
+ s3 << r4
4548
+ else
4549
+ break
4550
+ end
4551
+ end
4552
+ if s3.empty?
4553
+ @index = i3
4554
+ r3 = nil
4555
+ else
4556
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
4557
+ end
4558
+ s1 << r3
4559
+ if r3
4560
+ r9 = _nt_FWS
4561
+ if r9
4562
+ r8 = r9
4563
+ else
4564
+ r8 = instantiate_node(SyntaxNode,input, index...index)
4565
+ end
4566
+ s1 << r8
4567
+ if r8
4568
+ r10 = _nt_DQUOTE
4569
+ s1 << r10
4570
+ end
4571
+ end
4572
+ end
4573
+ if s1.last
4574
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
4575
+ r1.extend(MsgIdDomainText1)
4576
+ else
4577
+ @index = i1
4578
+ r1 = nil
4579
+ end
4580
+ if r1
4581
+ r0 = r1
4582
+ else
4583
+ s11, i11 = [], index
4584
+ loop do
4585
+ r12 = _nt_msg_id_atext
4586
+ if r12
4587
+ s11 << r12
4588
+ else
4589
+ break
4590
+ end
4591
+ end
4592
+ if s11.empty?
4593
+ @index = i11
4594
+ r11 = nil
4595
+ else
4596
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
4597
+ end
4598
+ if r11
4599
+ r0 = r11
4600
+ else
4601
+ @index = i0
4602
+ r0 = nil
4603
+ end
4604
+ end
4605
+
4606
+ node_cache[:msg_id_domain_text][start_index] = r0
4607
+
4608
+ r0
4609
+ end
4610
+
4611
+ def _nt_msg_id_atext
4612
+ start_index = index
4613
+ if node_cache[:msg_id_atext].has_key?(index)
4614
+ cached = node_cache[:msg_id_atext][index]
4615
+ @index = cached.interval.end if cached
4616
+ return cached
4617
+ end
4618
+
4619
+ i0 = index
4620
+ r1 = _nt_ALPHA
4621
+ if r1
4622
+ r0 = r1
4623
+ else
4624
+ r2 = _nt_DIGIT
4625
+ if r2
4626
+ r0 = r2
4627
+ else
4628
+ if has_terminal?("!", false, index)
4629
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
4630
+ @index += 1
4631
+ else
4632
+ terminal_parse_failure("!")
4633
+ r3 = nil
4634
+ end
4635
+ if r3
4636
+ r0 = r3
4637
+ else
4638
+ if has_terminal?("#", false, index)
4639
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
4640
+ @index += 1
4641
+ else
4642
+ terminal_parse_failure("#")
4643
+ r4 = nil
4644
+ end
4645
+ if r4
4646
+ r0 = r4
4647
+ else
4648
+ if has_terminal?("$", false, index)
4649
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
4650
+ @index += 1
4651
+ else
4652
+ terminal_parse_failure("$")
4653
+ r5 = nil
4654
+ end
4655
+ if r5
4656
+ r0 = r5
4657
+ else
4658
+ if has_terminal?("%", false, index)
4659
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
4660
+ @index += 1
4661
+ else
4662
+ terminal_parse_failure("%")
4663
+ r6 = nil
4664
+ end
4665
+ if r6
4666
+ r0 = r6
4667
+ else
4668
+ if has_terminal?("&", false, index)
4669
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
4670
+ @index += 1
4671
+ else
4672
+ terminal_parse_failure("&")
4673
+ r7 = nil
4674
+ end
4675
+ if r7
4676
+ r0 = r7
4677
+ else
4678
+ if has_terminal?("'", false, index)
4679
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
4680
+ @index += 1
4681
+ else
4682
+ terminal_parse_failure("'")
4683
+ r8 = nil
4684
+ end
4685
+ if r8
4686
+ r0 = r8
4687
+ else
4688
+ if has_terminal?("*", false, index)
4689
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
4690
+ @index += 1
4691
+ else
4692
+ terminal_parse_failure("*")
4693
+ r9 = nil
4694
+ end
4695
+ if r9
4696
+ r0 = r9
4697
+ else
4698
+ if has_terminal?("+", false, index)
4699
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
4700
+ @index += 1
4701
+ else
4702
+ terminal_parse_failure("+")
4703
+ r10 = nil
4704
+ end
4705
+ if r10
4706
+ r0 = r10
4707
+ else
4708
+ if has_terminal?("-", false, index)
4709
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
4710
+ @index += 1
4711
+ else
4712
+ terminal_parse_failure("-")
4713
+ r11 = nil
4714
+ end
4715
+ if r11
4716
+ r0 = r11
4717
+ else
4718
+ if has_terminal?("/", false, index)
4719
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
4720
+ @index += 1
4721
+ else
4722
+ terminal_parse_failure("/")
4723
+ r12 = nil
4724
+ end
4725
+ if r12
4726
+ r0 = r12
4727
+ else
4728
+ if has_terminal?("=", false, index)
4729
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
4730
+ @index += 1
4731
+ else
4732
+ terminal_parse_failure("=")
4733
+ r13 = nil
4734
+ end
4735
+ if r13
4736
+ r0 = r13
4737
+ else
4738
+ if has_terminal?("?", false, index)
4739
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
4740
+ @index += 1
4741
+ else
4742
+ terminal_parse_failure("?")
4743
+ r14 = nil
4744
+ end
4745
+ if r14
4746
+ r0 = r14
4747
+ else
4748
+ if has_terminal?("^", false, index)
4749
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
4750
+ @index += 1
4751
+ else
4752
+ terminal_parse_failure("^")
4753
+ r15 = nil
4754
+ end
4755
+ if r15
4756
+ r0 = r15
4757
+ else
4758
+ if has_terminal?("_", false, index)
4759
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
4760
+ @index += 1
4761
+ else
4762
+ terminal_parse_failure("_")
4763
+ r16 = nil
4764
+ end
4765
+ if r16
4766
+ r0 = r16
4767
+ else
4768
+ if has_terminal?("`", false, index)
4769
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
4770
+ @index += 1
4771
+ else
4772
+ terminal_parse_failure("`")
4773
+ r17 = nil
4774
+ end
4775
+ if r17
4776
+ r0 = r17
4777
+ else
4778
+ if has_terminal?("{", false, index)
4779
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
4780
+ @index += 1
4781
+ else
4782
+ terminal_parse_failure("{")
4783
+ r18 = nil
4784
+ end
4785
+ if r18
4786
+ r0 = r18
4787
+ else
4788
+ if has_terminal?("|", false, index)
4789
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
4790
+ @index += 1
4791
+ else
4792
+ terminal_parse_failure("|")
4793
+ r19 = nil
4794
+ end
4795
+ if r19
4796
+ r0 = r19
4797
+ else
4798
+ if has_terminal?("}", false, index)
4799
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
4800
+ @index += 1
4801
+ else
4802
+ terminal_parse_failure("}")
4803
+ r20 = nil
4804
+ end
4805
+ if r20
4806
+ r0 = r20
4807
+ else
4808
+ if has_terminal?("~", false, index)
4809
+ r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
4810
+ @index += 1
4811
+ else
4812
+ terminal_parse_failure("~")
4813
+ r21 = nil
4814
+ end
4815
+ if r21
4816
+ r0 = r21
4817
+ else
4818
+ if has_terminal?("@", false, index)
4819
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
4820
+ @index += 1
4821
+ else
4822
+ terminal_parse_failure("@")
4823
+ r22 = nil
4824
+ end
4825
+ if r22
4826
+ r0 = r22
4827
+ else
4828
+ @index = i0
4829
+ r0 = nil
4830
+ end
4831
+ end
4832
+ end
4833
+ end
4834
+ end
4835
+ end
4836
+ end
4837
+ end
4838
+ end
4839
+ end
4840
+ end
4841
+ end
4842
+ end
4843
+ end
4844
+ end
4845
+ end
4846
+ end
4847
+ end
4848
+ end
4849
+ end
4850
+ end
4851
+ end
4852
+
4853
+ node_cache[:msg_id_atext][start_index] = r0
4854
+
4855
+ r0
4856
+ end
4857
+
4858
+ module NoFoldQuote0
4859
+ def DQUOTE1
4860
+ elements[0]
4861
+ end
4862
+
4863
+ def DQUOTE2
4864
+ elements[2]
4865
+ end
4866
+ end
4867
+
4868
+ def _nt_no_fold_quote
4869
+ start_index = index
4870
+ if node_cache[:no_fold_quote].has_key?(index)
4871
+ cached = node_cache[:no_fold_quote][index]
4872
+ @index = cached.interval.end if cached
4873
+ return cached
4874
+ end
4875
+
4876
+ i0, s0 = index, []
4877
+ r1 = _nt_DQUOTE
4878
+ s0 << r1
4879
+ if r1
4880
+ s2, i2 = [], index
4881
+ loop do
4882
+ i3 = index
4883
+ r4 = _nt_qtext
4884
+ if r4
4885
+ r3 = r4
4886
+ else
4887
+ r5 = _nt_quoted_pair
4888
+ if r5
4889
+ r3 = r5
4890
+ else
4891
+ @index = i3
4892
+ r3 = nil
4893
+ end
4894
+ end
4895
+ if r3
4896
+ s2 << r3
4897
+ else
4898
+ break
4899
+ end
4900
+ end
4901
+ if s2.empty?
4902
+ @index = i2
4903
+ r2 = nil
4904
+ else
4905
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
4906
+ end
4907
+ s0 << r2
4908
+ if r2
4909
+ r6 = _nt_DQUOTE
4910
+ s0 << r6
4911
+ end
4912
+ end
4913
+ if s0.last
4914
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4915
+ r0.extend(NoFoldQuote0)
4916
+ else
4917
+ @index = i0
4918
+ r0 = nil
4919
+ end
4920
+
4921
+ node_cache[:no_fold_quote][start_index] = r0
4922
+
4923
+ r0
4924
+ end
4925
+
4926
+ module NoFoldLiteral0
4927
+ end
4928
+
4929
+ def _nt_no_fold_literal
4930
+ start_index = index
4931
+ if node_cache[:no_fold_literal].has_key?(index)
4932
+ cached = node_cache[:no_fold_literal][index]
4933
+ @index = cached.interval.end if cached
4934
+ return cached
4935
+ end
4936
+
4937
+ i0, s0 = index, []
4938
+ if has_terminal?("[", false, index)
4939
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
4940
+ @index += 1
4941
+ else
4942
+ terminal_parse_failure("[")
4943
+ r1 = nil
4944
+ end
4945
+ s0 << r1
4946
+ if r1
4947
+ s2, i2 = [], index
4948
+ loop do
4949
+ i3 = index
4950
+ r4 = _nt_dtext
4951
+ if r4
4952
+ r3 = r4
4953
+ else
4954
+ r5 = _nt_quoted_pair
4955
+ if r5
4956
+ r3 = r5
4957
+ else
4958
+ @index = i3
4959
+ r3 = nil
4960
+ end
4961
+ end
4962
+ if r3
4963
+ s2 << r3
4964
+ else
4965
+ break
4966
+ end
4967
+ end
4968
+ if s2.empty?
4969
+ @index = i2
4970
+ r2 = nil
4971
+ else
4972
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
4973
+ end
4974
+ s0 << r2
4975
+ if r2
4976
+ if has_terminal?("]", false, index)
4977
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
4978
+ @index += 1
4979
+ else
4980
+ terminal_parse_failure("]")
4981
+ r6 = nil
4982
+ end
4983
+ s0 << r6
4984
+ end
4985
+ end
4986
+ if s0.last
4987
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4988
+ r0.extend(NoFoldLiteral0)
4989
+ else
4990
+ @index = i0
4991
+ r0 = nil
4992
+ end
4993
+
4994
+ node_cache[:no_fold_literal][start_index] = r0
4995
+
4996
+ r0
4997
+ end
4998
+
4999
+ end
5000
+
5001
+ class RFC2822Parser < Treetop::Runtime::CompiledParser
5002
+ include RFC2822
5003
+ end
5004
+
5005
+ end