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,402 @@
1
+ module Mail
2
+ grammar RFC2822
3
+
4
+ include RFC2822Obsolete
5
+
6
+ rule ALPHA
7
+ [a-zA-Z]
8
+ end
9
+
10
+ rule DIGIT
11
+ [0-9]
12
+ end
13
+
14
+ rule DQUOTE
15
+ '"'
16
+ end
17
+
18
+ rule LF
19
+ "\n"
20
+ end
21
+
22
+ rule CR
23
+ "\r"
24
+ end
25
+
26
+ rule CRLF
27
+ "\r\n"
28
+ end
29
+
30
+ rule WSP
31
+ [\x09\x20]
32
+ end
33
+
34
+ rule NO_WS_CTL
35
+ [\x01-\x08] / # US-ASCII control characters
36
+ [\x0B-\x0C] / # that do not include the
37
+ [\x0E-\x1F] / # carriage return, line feed,
38
+ [\x7f] # and white space characters
39
+ end
40
+
41
+ rule specials
42
+ "(" / ")" / # Special characters used in
43
+ "<" / ">" / # other parts of the syntax
44
+ "[" / "]" /
45
+ ":" / ";" /
46
+ "@" / '\\' /
47
+ "," / "." /
48
+ DQUOTE
49
+ end
50
+
51
+ rule FWS # Folding white space
52
+ (WSP* CRLF WSP+) / (CRLF WSP+) / obs_FWS
53
+ end
54
+
55
+ rule CFWS
56
+ (FWS* comment)* FWS?
57
+ end
58
+
59
+ rule ctext
60
+ NO_WS_CTL / # Non white space controls
61
+ [\x21-\x27] / # The rest of the US-ASCII
62
+ [\x2a-\x5b] / # characters not including "(",
63
+ [\x5d-\x7e] # ")", or "\"
64
+ end
65
+
66
+ rule ccontent
67
+ ctext / quoted_pair / comment
68
+ end
69
+
70
+ rule comment
71
+ "(" ( FWS? ccontent )* FWS? ")"
72
+ end
73
+
74
+ rule atext
75
+ ALPHA / DIGIT / # Any character except controls,
76
+ "!" / "#" / # SP, and specials.
77
+ "$" / "%" / # Used for atoms
78
+ "&" / "'" /
79
+ "*" / "+" /
80
+ "-" / "/" /
81
+ "=" / "?" /
82
+ "^" / "_" /
83
+ "`" / "{" /
84
+ "|" / "}" /
85
+ "~"
86
+ end
87
+
88
+ rule atom
89
+ CFWS? atext+ CFWS?
90
+ end
91
+
92
+ rule dot_atom
93
+ CFWS? dot_atom_text CFWS?
94
+ end
95
+
96
+ rule local_dot_atom
97
+ CFWS? local_dot_atom_text CFWS?
98
+ end
99
+
100
+ rule dot_atom_text
101
+ (domain_text "."?)+
102
+ end
103
+
104
+ rule local_dot_atom_text
105
+ ("."* domain_text)+
106
+ end
107
+
108
+ rule domain_text
109
+ (DQUOTE (FWS? quoted_domain)+ FWS? DQUOTE) / atext+
110
+ end
111
+
112
+ rule quoted_domain
113
+ qdcontent / "\\" text
114
+ end
115
+
116
+ rule qdcontent
117
+ NO_WS_CTL / # Non white space controls
118
+ [\x21] / # The rest of the US-ASCII
119
+ [\x23-\x45] / # characters not including "\"
120
+ [\x47-\x5b] / # or the "." or the
121
+ [\x5d-\x7e] # double quote character
122
+ end
123
+
124
+ rule word
125
+ atom / quoted_string
126
+ end
127
+
128
+ rule phrase_list
129
+ first_phrase:phrase other_phrases:("," FWS* phrase_value:phrase)*
130
+ end
131
+
132
+ rule phrase
133
+ obs_phrase / word+
134
+ end
135
+
136
+ rule domain_literal
137
+ CFWS? "[" (FWS? dcontent)* FWS? "]" CFWS?
138
+ end
139
+
140
+ rule dcontent
141
+ dtext / quoted_pair
142
+ end
143
+
144
+ rule dtext
145
+ NO_WS_CTL / # Non white space controls
146
+ [\x21-\x5a] / # The rest of the US-ASCII characters
147
+ [\x5e-\x7e] # not including "[", "]", or "\"
148
+ end
149
+
150
+ rule angle_addr
151
+ CFWS? "<" addr_spec ">" CFWS? / obs_angle_addr
152
+ end
153
+
154
+ rule addr_spec
155
+ (local_part "@" domain) / local_part
156
+ end
157
+
158
+ rule local_part
159
+ local_dot_atom / quoted_string / obs_local_part
160
+ end
161
+
162
+ rule domain
163
+ dot_atom / domain_literal / obs_domain
164
+ end
165
+
166
+ rule group
167
+ group_name:display_name ":" group_list:(mailbox_list_group / CFWS)? ";" CFWS?
168
+ end
169
+
170
+ rule mailbox_list_group
171
+ mailbox_list {
172
+ def addresses
173
+ [first_addr] + other_addr.elements.map { |o| o.addr_value }
174
+ end
175
+ }
176
+ end
177
+
178
+ rule quoted_string
179
+ CFWS? DQUOTE quoted_content:(FWS? qcontent)+ FWS? DQUOTE CFWS?
180
+ end
181
+
182
+ rule qcontent
183
+ qtext / quoted_pair
184
+ end
185
+
186
+ rule quoted_pair
187
+ ("\\" text) / obs_qp
188
+ end
189
+
190
+ rule qtext
191
+ NO_WS_CTL / # Non white space controls
192
+ [\x21] / # The rest of the US-ASCII
193
+ [\x23-\x5b] / # characters not including "\"
194
+ [\x5d-\x7e] # or the quote character
195
+ end
196
+
197
+ rule text
198
+ [\x01-\x09] / # Characters excluding CR and LF
199
+ [\x0b-\x0c] /
200
+ [\x0e-\x7e] /
201
+ obs_text
202
+ end
203
+
204
+ rule display_name
205
+ phrase
206
+ end
207
+
208
+ rule name_addr
209
+ display_name angle_addr / angle_addr
210
+ end
211
+
212
+ rule mailbox_list
213
+ (first_addr:mailbox other_addr:("," addr_value:mailbox)*) / obs_mbox_list
214
+ end
215
+
216
+ rule mailbox
217
+ name_addr / addr_spec
218
+ end
219
+
220
+ rule address
221
+ group {
222
+
223
+ def dig_comments(comments, elements)
224
+ elements.each { |elem|
225
+ if elem.respond_to?(:comment)
226
+ comments << elem.comment
227
+ end
228
+ dig_comments(comments, elem.elements) if elem.elements
229
+ }
230
+ end
231
+
232
+ def comments
233
+ comments = []
234
+ dig_comments(comments, elements)
235
+ comments
236
+ end
237
+
238
+ } /
239
+ mailbox {
240
+
241
+ def dig_comments(comments, elements)
242
+ elements.each { |elem|
243
+ if elem.respond_to?(:comment)
244
+ comments << elem.comment
245
+ end
246
+ dig_comments(comments, elem.elements) if elem.elements
247
+ }
248
+ end
249
+
250
+ def comments
251
+ comments = []
252
+ dig_comments(comments, elements)
253
+ comments
254
+ end
255
+
256
+ }
257
+ end
258
+
259
+ rule address_list
260
+ first_addr:address other_addr:("," FWS* addr_value:address)*
261
+ end
262
+
263
+ rule date_time
264
+ ( day_of_week ",")? date FWS time CFWS?
265
+ end
266
+
267
+ rule day_of_week
268
+ (FWS? day_name) / obs_day_of_week
269
+ end
270
+
271
+ rule day_name
272
+ "Mon" / "Tue" / "Wed" / "Thu" /
273
+ "Fri" / "Sat" / "Sun"
274
+ end
275
+
276
+ rule date
277
+ day month year
278
+ end
279
+
280
+ rule year
281
+ DIGIT DIGIT DIGIT DIGIT / obs_year
282
+ end
283
+
284
+ rule month
285
+ (FWS month_name FWS) / obs_month
286
+ end
287
+
288
+ rule month_name
289
+ "Jan" / "Feb" / "Mar" / "Apr" /
290
+ "May" / "Jun" / "Jul" / "Aug" /
291
+ "Sep" / "Oct" / "Nov" / "Dec"
292
+ end
293
+
294
+ rule day
295
+ (FWS? DIGIT DIGIT?) / obs_day
296
+ end
297
+
298
+ rule time
299
+ time_of_day FWS zone
300
+ end
301
+
302
+ rule time_of_day
303
+ hour ":" minute ( ":" second )?
304
+ end
305
+
306
+ rule hour
307
+ DIGIT DIGIT / obs_hour
308
+ end
309
+
310
+ rule minute
311
+ DIGIT DIGIT / obs_minute
312
+ end
313
+
314
+ rule second
315
+ DIGIT DIGIT / obs_second
316
+ end
317
+
318
+ rule zone
319
+ (( "+" / "-" ) DIGIT DIGIT DIGIT DIGIT) / obs_zone
320
+ end
321
+
322
+ rule return
323
+ path CRLF
324
+ end
325
+
326
+ rule path
327
+ ((CFWS)? "<" ((CFWS)? / addr_spec) ">" (CFWS)?) / obs_path
328
+ end
329
+
330
+ rule received
331
+ name_val_list ";" date_time CRLF
332
+ end
333
+
334
+ rule name_val_list
335
+ (CFWS)? (name_val_pair (CFWS name_val_pair)*)
336
+ end
337
+
338
+ rule name_val_pair
339
+ item_name CFWS item_value
340
+ end
341
+
342
+ rule item_name
343
+ ALPHA (("-")? (ALPHA / DIGIT))*
344
+ end
345
+
346
+ rule item_value
347
+ (angle_addr)+ / addr_spec / atom / domain / msg_id
348
+ end
349
+
350
+ rule message_ids
351
+ first_msg_id:msg_id other_msg_ids:( CFWS msg_id_value:msg_id )*
352
+ end
353
+
354
+ rule msg_id
355
+ (CFWS)? "<" msg_id_value ">" (CFWS)?
356
+ end
357
+
358
+ rule msg_id_value
359
+ id_left "@" id_right
360
+ end
361
+
362
+ rule id_left
363
+ dot_atom_text / no_fold_quote / obs_id_left
364
+ end
365
+
366
+ rule id_right
367
+ msg_id_dot_atom_text / no_fold_literal / obs_id_right
368
+ end
369
+
370
+ rule msg_id_dot_atom_text
371
+ (msg_id_domain_text "."?)+
372
+ end
373
+
374
+ rule msg_id_domain_text
375
+ (DQUOTE (FWS? quoted_domain)+ FWS? DQUOTE) / msg_id_atext+
376
+ end
377
+
378
+ rule msg_id_atext
379
+ ALPHA / DIGIT / # Any character except controls,
380
+ "!" / "#" / # SP, and specials.
381
+ "$" / "%" / # Used for atoms
382
+ "&" / "'" /
383
+ "*" / "+" /
384
+ "-" / "/" /
385
+ "=" / "?" /
386
+ "^" / "_" /
387
+ "`" / "{" /
388
+ "|" / "}" /
389
+ "~" / "@"
390
+ end
391
+
392
+ rule no_fold_quote
393
+ DQUOTE (qtext / quoted_pair)+ DQUOTE
394
+ end
395
+
396
+ rule no_fold_literal
397
+ "[" (dtext / quoted_pair)+ "]"
398
+ end
399
+
400
+
401
+ end
402
+ end
@@ -0,0 +1,3607 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Mail
5
+ module RFC2822Obsolete
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root || :obs_qp
10
+ end
11
+
12
+ module ObsQp0
13
+ end
14
+
15
+ def _nt_obs_qp
16
+ start_index = index
17
+ if node_cache[:obs_qp].has_key?(index)
18
+ cached = node_cache[:obs_qp][index]
19
+ @index = cached.interval.end if cached
20
+ return cached
21
+ end
22
+
23
+ i0, s0 = index, []
24
+ if has_terminal?("\\", false, index)
25
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
26
+ @index += 1
27
+ else
28
+ terminal_parse_failure("\\")
29
+ r1 = nil
30
+ end
31
+ s0 << r1
32
+ if r1
33
+ if has_terminal?('\G[\\x00-\\x7F]', true, index)
34
+ r2 = true
35
+ @index += 1
36
+ else
37
+ r2 = nil
38
+ end
39
+ s0 << r2
40
+ end
41
+ if s0.last
42
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
43
+ r0.extend(ObsQp0)
44
+ else
45
+ @index = i0
46
+ r0 = nil
47
+ end
48
+
49
+ node_cache[:obs_qp][start_index] = r0
50
+
51
+ r0
52
+ end
53
+
54
+ module ObsText0
55
+ def obs_char
56
+ elements[0]
57
+ end
58
+
59
+ end
60
+
61
+ module ObsText1
62
+ end
63
+
64
+ def _nt_obs_text
65
+ start_index = index
66
+ if node_cache[:obs_text].has_key?(index)
67
+ cached = node_cache[:obs_text][index]
68
+ @index = cached.interval.end if cached
69
+ return cached
70
+ end
71
+
72
+ i0, s0 = index, []
73
+ s1, i1 = [], index
74
+ loop do
75
+ r2 = _nt_LF
76
+ if r2
77
+ s1 << r2
78
+ else
79
+ break
80
+ end
81
+ end
82
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
83
+ s0 << r1
84
+ if r1
85
+ s3, i3 = [], index
86
+ loop do
87
+ r4 = _nt_CR
88
+ if r4
89
+ s3 << r4
90
+ else
91
+ break
92
+ end
93
+ end
94
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
95
+ s0 << r3
96
+ if r3
97
+ s5, i5 = [], index
98
+ loop do
99
+ i6, s6 = index, []
100
+ r7 = _nt_obs_char
101
+ s6 << r7
102
+ if r7
103
+ s8, i8 = [], index
104
+ loop do
105
+ r9 = _nt_LF
106
+ if r9
107
+ s8 << r9
108
+ else
109
+ break
110
+ end
111
+ end
112
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
113
+ s6 << r8
114
+ if r8
115
+ s10, i10 = [], index
116
+ loop do
117
+ r11 = _nt_CR
118
+ if r11
119
+ s10 << r11
120
+ else
121
+ break
122
+ end
123
+ end
124
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
125
+ s6 << r10
126
+ end
127
+ end
128
+ if s6.last
129
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
130
+ r6.extend(ObsText0)
131
+ else
132
+ @index = i6
133
+ r6 = nil
134
+ end
135
+ if r6
136
+ s5 << r6
137
+ else
138
+ break
139
+ end
140
+ end
141
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
142
+ s0 << r5
143
+ end
144
+ end
145
+ if s0.last
146
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
147
+ r0.extend(ObsText1)
148
+ else
149
+ @index = i0
150
+ r0 = nil
151
+ end
152
+
153
+ node_cache[:obs_text][start_index] = r0
154
+
155
+ r0
156
+ end
157
+
158
+ def _nt_obs_char
159
+ start_index = index
160
+ if node_cache[:obs_char].has_key?(index)
161
+ cached = node_cache[:obs_char][index]
162
+ @index = cached.interval.end if cached
163
+ return cached
164
+ end
165
+
166
+ i0 = index
167
+ if has_terminal?('\G[\\x00-\\x09]', 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-\\x7F]', true, index)
186
+ r3 = true
187
+ @index += 1
188
+ else
189
+ r3 = nil
190
+ end
191
+ if r3
192
+ r0 = r3
193
+ else
194
+ @index = i0
195
+ r0 = nil
196
+ end
197
+ end
198
+ end
199
+
200
+ node_cache[:obs_char][start_index] = r0
201
+
202
+ r0
203
+ end
204
+
205
+ def _nt_obs_utext
206
+ start_index = index
207
+ if node_cache[:obs_utext].has_key?(index)
208
+ cached = node_cache[:obs_utext][index]
209
+ @index = cached.interval.end if cached
210
+ return cached
211
+ end
212
+
213
+ r0 = _nt_obs_text
214
+
215
+ node_cache[:obs_utext][start_index] = r0
216
+
217
+ r0
218
+ end
219
+
220
+ def _nt_obs_phrase
221
+ start_index = index
222
+ if node_cache[:obs_phrase].has_key?(index)
223
+ cached = node_cache[:obs_phrase][index]
224
+ @index = cached.interval.end if cached
225
+ return cached
226
+ end
227
+
228
+ s0, i0 = [], index
229
+ loop do
230
+ i1 = index
231
+ r2 = _nt_word
232
+ if r2
233
+ r1 = r2
234
+ else
235
+ if has_terminal?(".", false, index)
236
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
237
+ @index += 1
238
+ else
239
+ terminal_parse_failure(".")
240
+ r3 = nil
241
+ end
242
+ if r3
243
+ r1 = r3
244
+ else
245
+ @index = i1
246
+ r1 = nil
247
+ end
248
+ end
249
+ if r1
250
+ s0 << r1
251
+ else
252
+ break
253
+ end
254
+ end
255
+ if s0.empty?
256
+ @index = i0
257
+ r0 = nil
258
+ else
259
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
260
+ end
261
+
262
+ node_cache[:obs_phrase][start_index] = r0
263
+
264
+ r0
265
+ end
266
+
267
+ module ObsPhraseList0
268
+ end
269
+
270
+ module ObsPhraseList1
271
+ end
272
+
273
+ def _nt_obs_phrase_list
274
+ start_index = index
275
+ if node_cache[:obs_phrase_list].has_key?(index)
276
+ cached = node_cache[:obs_phrase_list][index]
277
+ @index = cached.interval.end if cached
278
+ return cached
279
+ end
280
+
281
+ i0 = index
282
+ r1 = _nt_phrase
283
+ if r1
284
+ r0 = r1
285
+ else
286
+ i2, s2 = index, []
287
+ s3, i3 = [], index
288
+ loop do
289
+ i4, s4 = index, []
290
+ r6 = _nt_phrase
291
+ if r6
292
+ r5 = r6
293
+ else
294
+ r5 = instantiate_node(SyntaxNode,input, index...index)
295
+ end
296
+ s4 << r5
297
+ if r5
298
+ r8 = _nt_CFWS
299
+ if r8
300
+ r7 = r8
301
+ else
302
+ r7 = instantiate_node(SyntaxNode,input, index...index)
303
+ end
304
+ s4 << r7
305
+ if r7
306
+ if has_terminal?(",", false, index)
307
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
308
+ @index += 1
309
+ else
310
+ terminal_parse_failure(",")
311
+ r9 = nil
312
+ end
313
+ s4 << r9
314
+ if r9
315
+ r11 = _nt_CFWS
316
+ if r11
317
+ r10 = r11
318
+ else
319
+ r10 = instantiate_node(SyntaxNode,input, index...index)
320
+ end
321
+ s4 << r10
322
+ end
323
+ end
324
+ end
325
+ if s4.last
326
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
327
+ r4.extend(ObsPhraseList0)
328
+ else
329
+ @index = i4
330
+ r4 = nil
331
+ end
332
+ if r4
333
+ s3 << r4
334
+ else
335
+ break
336
+ end
337
+ end
338
+ if s3.empty?
339
+ @index = i3
340
+ r3 = nil
341
+ else
342
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
343
+ end
344
+ s2 << r3
345
+ if r3
346
+ r13 = _nt_phrase
347
+ if r13
348
+ r12 = r13
349
+ else
350
+ r12 = instantiate_node(SyntaxNode,input, index...index)
351
+ end
352
+ s2 << r12
353
+ end
354
+ if s2.last
355
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
356
+ r2.extend(ObsPhraseList1)
357
+ else
358
+ @index = i2
359
+ r2 = nil
360
+ end
361
+ if r2
362
+ r0 = r2
363
+ else
364
+ @index = i0
365
+ r0 = nil
366
+ end
367
+ end
368
+
369
+ node_cache[:obs_phrase_list][start_index] = r0
370
+
371
+ r0
372
+ end
373
+
374
+ module ObsFWS0
375
+ def CRLF
376
+ elements[0]
377
+ end
378
+
379
+ end
380
+
381
+ module ObsFWS1
382
+ end
383
+
384
+ def _nt_obs_FWS
385
+ start_index = index
386
+ if node_cache[:obs_FWS].has_key?(index)
387
+ cached = node_cache[:obs_FWS][index]
388
+ @index = cached.interval.end if cached
389
+ return cached
390
+ end
391
+
392
+ i0, s0 = index, []
393
+ s1, i1 = [], index
394
+ loop do
395
+ r2 = _nt_WSP
396
+ if r2
397
+ s1 << r2
398
+ else
399
+ break
400
+ end
401
+ end
402
+ if s1.empty?
403
+ @index = i1
404
+ r1 = nil
405
+ else
406
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
407
+ end
408
+ s0 << r1
409
+ if r1
410
+ s3, i3 = [], index
411
+ loop do
412
+ i4, s4 = index, []
413
+ r5 = _nt_CRLF
414
+ s4 << r5
415
+ if r5
416
+ s6, i6 = [], index
417
+ loop do
418
+ r7 = _nt_WSP
419
+ if r7
420
+ s6 << r7
421
+ else
422
+ break
423
+ end
424
+ end
425
+ if s6.empty?
426
+ @index = i6
427
+ r6 = nil
428
+ else
429
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
430
+ end
431
+ s4 << r6
432
+ end
433
+ if s4.last
434
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
435
+ r4.extend(ObsFWS0)
436
+ else
437
+ @index = i4
438
+ r4 = nil
439
+ end
440
+ if r4
441
+ s3 << r4
442
+ else
443
+ break
444
+ end
445
+ end
446
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
447
+ s0 << r3
448
+ end
449
+ if s0.last
450
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
451
+ r0.extend(ObsFWS1)
452
+ else
453
+ @index = i0
454
+ r0 = nil
455
+ end
456
+
457
+ node_cache[:obs_FWS][start_index] = r0
458
+
459
+ r0
460
+ end
461
+
462
+ module ObsDayOfWeek0
463
+ def day_name
464
+ elements[1]
465
+ end
466
+
467
+ end
468
+
469
+ def _nt_obs_day_of_week
470
+ start_index = index
471
+ if node_cache[:obs_day_of_week].has_key?(index)
472
+ cached = node_cache[:obs_day_of_week][index]
473
+ @index = cached.interval.end if cached
474
+ return cached
475
+ end
476
+
477
+ i0, s0 = index, []
478
+ r2 = _nt_CFWS
479
+ if r2
480
+ r1 = r2
481
+ else
482
+ r1 = instantiate_node(SyntaxNode,input, index...index)
483
+ end
484
+ s0 << r1
485
+ if r1
486
+ r3 = _nt_day_name
487
+ s0 << r3
488
+ if r3
489
+ r5 = _nt_CFWS
490
+ if r5
491
+ r4 = r5
492
+ else
493
+ r4 = instantiate_node(SyntaxNode,input, index...index)
494
+ end
495
+ s0 << r4
496
+ end
497
+ end
498
+ if s0.last
499
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
500
+ r0.extend(ObsDayOfWeek0)
501
+ else
502
+ @index = i0
503
+ r0 = nil
504
+ end
505
+
506
+ node_cache[:obs_day_of_week][start_index] = r0
507
+
508
+ r0
509
+ end
510
+
511
+ module ObsYear0
512
+ def DIGIT1
513
+ elements[0]
514
+ end
515
+
516
+ def DIGIT2
517
+ elements[1]
518
+ end
519
+ end
520
+
521
+ module ObsYear1
522
+ end
523
+
524
+ def _nt_obs_year
525
+ start_index = index
526
+ if node_cache[:obs_year].has_key?(index)
527
+ cached = node_cache[:obs_year][index]
528
+ @index = cached.interval.end if cached
529
+ return cached
530
+ end
531
+
532
+ i0, s0 = index, []
533
+ r2 = _nt_CFWS
534
+ if r2
535
+ r1 = r2
536
+ else
537
+ r1 = instantiate_node(SyntaxNode,input, index...index)
538
+ end
539
+ s0 << r1
540
+ if r1
541
+ i3, s3 = index, []
542
+ r4 = _nt_DIGIT
543
+ s3 << r4
544
+ if r4
545
+ r5 = _nt_DIGIT
546
+ s3 << r5
547
+ end
548
+ if s3.last
549
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
550
+ r3.extend(ObsYear0)
551
+ else
552
+ @index = i3
553
+ r3 = nil
554
+ end
555
+ s0 << r3
556
+ if r3
557
+ r7 = _nt_CFWS
558
+ if r7
559
+ r6 = r7
560
+ else
561
+ r6 = instantiate_node(SyntaxNode,input, index...index)
562
+ end
563
+ s0 << r6
564
+ end
565
+ end
566
+ if s0.last
567
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
568
+ r0.extend(ObsYear1)
569
+ else
570
+ @index = i0
571
+ r0 = nil
572
+ end
573
+
574
+ node_cache[:obs_year][start_index] = r0
575
+
576
+ r0
577
+ end
578
+
579
+ module ObsMonth0
580
+ def CFWS1
581
+ elements[0]
582
+ end
583
+
584
+ def month_name
585
+ elements[1]
586
+ end
587
+
588
+ def CFWS2
589
+ elements[2]
590
+ end
591
+ end
592
+
593
+ def _nt_obs_month
594
+ start_index = index
595
+ if node_cache[:obs_month].has_key?(index)
596
+ cached = node_cache[:obs_month][index]
597
+ @index = cached.interval.end if cached
598
+ return cached
599
+ end
600
+
601
+ i0, s0 = index, []
602
+ r1 = _nt_CFWS
603
+ s0 << r1
604
+ if r1
605
+ r2 = _nt_month_name
606
+ s0 << r2
607
+ if r2
608
+ r3 = _nt_CFWS
609
+ s0 << r3
610
+ end
611
+ end
612
+ if s0.last
613
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
614
+ r0.extend(ObsMonth0)
615
+ else
616
+ @index = i0
617
+ r0 = nil
618
+ end
619
+
620
+ node_cache[:obs_month][start_index] = r0
621
+
622
+ r0
623
+ end
624
+
625
+ module ObsDay0
626
+ def DIGIT1
627
+ elements[0]
628
+ end
629
+
630
+ def DIGIT2
631
+ elements[1]
632
+ end
633
+ end
634
+
635
+ module ObsDay1
636
+ end
637
+
638
+ def _nt_obs_day
639
+ start_index = index
640
+ if node_cache[:obs_day].has_key?(index)
641
+ cached = node_cache[:obs_day][index]
642
+ @index = cached.interval.end if cached
643
+ return cached
644
+ end
645
+
646
+ i0, s0 = index, []
647
+ r2 = _nt_CFWS
648
+ if r2
649
+ r1 = r2
650
+ else
651
+ r1 = instantiate_node(SyntaxNode,input, index...index)
652
+ end
653
+ s0 << r1
654
+ if r1
655
+ i3 = index
656
+ r4 = _nt_DIGIT
657
+ if r4
658
+ r3 = r4
659
+ else
660
+ i5, s5 = index, []
661
+ r6 = _nt_DIGIT
662
+ s5 << r6
663
+ if r6
664
+ r7 = _nt_DIGIT
665
+ s5 << r7
666
+ end
667
+ if s5.last
668
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
669
+ r5.extend(ObsDay0)
670
+ else
671
+ @index = i5
672
+ r5 = nil
673
+ end
674
+ if r5
675
+ r3 = r5
676
+ else
677
+ @index = i3
678
+ r3 = nil
679
+ end
680
+ end
681
+ s0 << r3
682
+ if r3
683
+ r9 = _nt_CFWS
684
+ if r9
685
+ r8 = r9
686
+ else
687
+ r8 = instantiate_node(SyntaxNode,input, index...index)
688
+ end
689
+ s0 << r8
690
+ end
691
+ end
692
+ if s0.last
693
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
694
+ r0.extend(ObsDay1)
695
+ else
696
+ @index = i0
697
+ r0 = nil
698
+ end
699
+
700
+ node_cache[:obs_day][start_index] = r0
701
+
702
+ r0
703
+ end
704
+
705
+ module ObsHour0
706
+ def DIGIT1
707
+ elements[0]
708
+ end
709
+
710
+ def DIGIT2
711
+ elements[1]
712
+ end
713
+ end
714
+
715
+ module ObsHour1
716
+ end
717
+
718
+ def _nt_obs_hour
719
+ start_index = index
720
+ if node_cache[:obs_hour].has_key?(index)
721
+ cached = node_cache[:obs_hour][index]
722
+ @index = cached.interval.end if cached
723
+ return cached
724
+ end
725
+
726
+ i0, s0 = index, []
727
+ r2 = _nt_CFWS
728
+ if r2
729
+ r1 = r2
730
+ else
731
+ r1 = instantiate_node(SyntaxNode,input, index...index)
732
+ end
733
+ s0 << r1
734
+ if r1
735
+ i3, s3 = index, []
736
+ r4 = _nt_DIGIT
737
+ s3 << r4
738
+ if r4
739
+ r5 = _nt_DIGIT
740
+ s3 << r5
741
+ end
742
+ if s3.last
743
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
744
+ r3.extend(ObsHour0)
745
+ else
746
+ @index = i3
747
+ r3 = nil
748
+ end
749
+ s0 << r3
750
+ if r3
751
+ r7 = _nt_CFWS
752
+ if r7
753
+ r6 = r7
754
+ else
755
+ r6 = instantiate_node(SyntaxNode,input, index...index)
756
+ end
757
+ s0 << r6
758
+ end
759
+ end
760
+ if s0.last
761
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
762
+ r0.extend(ObsHour1)
763
+ else
764
+ @index = i0
765
+ r0 = nil
766
+ end
767
+
768
+ node_cache[:obs_hour][start_index] = r0
769
+
770
+ r0
771
+ end
772
+
773
+ module ObsMinute0
774
+ def DIGIT1
775
+ elements[0]
776
+ end
777
+
778
+ def DIGIT2
779
+ elements[1]
780
+ end
781
+ end
782
+
783
+ module ObsMinute1
784
+ end
785
+
786
+ def _nt_obs_minute
787
+ start_index = index
788
+ if node_cache[:obs_minute].has_key?(index)
789
+ cached = node_cache[:obs_minute][index]
790
+ @index = cached.interval.end if cached
791
+ return cached
792
+ end
793
+
794
+ i0, s0 = index, []
795
+ r2 = _nt_CFWS
796
+ if r2
797
+ r1 = r2
798
+ else
799
+ r1 = instantiate_node(SyntaxNode,input, index...index)
800
+ end
801
+ s0 << r1
802
+ if r1
803
+ i3, s3 = index, []
804
+ r4 = _nt_DIGIT
805
+ s3 << r4
806
+ if r4
807
+ r5 = _nt_DIGIT
808
+ s3 << r5
809
+ end
810
+ if s3.last
811
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
812
+ r3.extend(ObsMinute0)
813
+ else
814
+ @index = i3
815
+ r3 = nil
816
+ end
817
+ s0 << r3
818
+ if r3
819
+ r7 = _nt_CFWS
820
+ if r7
821
+ r6 = r7
822
+ else
823
+ r6 = instantiate_node(SyntaxNode,input, index...index)
824
+ end
825
+ s0 << r6
826
+ end
827
+ end
828
+ if s0.last
829
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
830
+ r0.extend(ObsMinute1)
831
+ else
832
+ @index = i0
833
+ r0 = nil
834
+ end
835
+
836
+ node_cache[:obs_minute][start_index] = r0
837
+
838
+ r0
839
+ end
840
+
841
+ module ObsSecond0
842
+ def DIGIT1
843
+ elements[0]
844
+ end
845
+
846
+ def DIGIT2
847
+ elements[1]
848
+ end
849
+ end
850
+
851
+ module ObsSecond1
852
+ end
853
+
854
+ def _nt_obs_second
855
+ start_index = index
856
+ if node_cache[:obs_second].has_key?(index)
857
+ cached = node_cache[:obs_second][index]
858
+ @index = cached.interval.end if cached
859
+ return cached
860
+ end
861
+
862
+ i0, s0 = index, []
863
+ r2 = _nt_CFWS
864
+ if r2
865
+ r1 = r2
866
+ else
867
+ r1 = instantiate_node(SyntaxNode,input, index...index)
868
+ end
869
+ s0 << r1
870
+ if r1
871
+ i3, s3 = index, []
872
+ r4 = _nt_DIGIT
873
+ s3 << r4
874
+ if r4
875
+ r5 = _nt_DIGIT
876
+ s3 << r5
877
+ end
878
+ if s3.last
879
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
880
+ r3.extend(ObsSecond0)
881
+ else
882
+ @index = i3
883
+ r3 = nil
884
+ end
885
+ s0 << r3
886
+ if r3
887
+ r7 = _nt_CFWS
888
+ if r7
889
+ r6 = r7
890
+ else
891
+ r6 = instantiate_node(SyntaxNode,input, index...index)
892
+ end
893
+ s0 << r6
894
+ end
895
+ end
896
+ if s0.last
897
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
898
+ r0.extend(ObsSecond1)
899
+ else
900
+ @index = i0
901
+ r0 = nil
902
+ end
903
+
904
+ node_cache[:obs_second][start_index] = r0
905
+
906
+ r0
907
+ end
908
+
909
+ def _nt_obs_zone
910
+ start_index = index
911
+ if node_cache[:obs_zone].has_key?(index)
912
+ cached = node_cache[:obs_zone][index]
913
+ @index = cached.interval.end if cached
914
+ return cached
915
+ end
916
+
917
+ i0 = index
918
+ if has_terminal?("UT", false, index)
919
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
920
+ @index += 2
921
+ else
922
+ terminal_parse_failure("UT")
923
+ r1 = nil
924
+ end
925
+ if r1
926
+ r0 = r1
927
+ else
928
+ if has_terminal?("GMT", false, index)
929
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 3))
930
+ @index += 3
931
+ else
932
+ terminal_parse_failure("GMT")
933
+ r2 = nil
934
+ end
935
+ if r2
936
+ r0 = r2
937
+ else
938
+ if has_terminal?("EST", false, index)
939
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
940
+ @index += 3
941
+ else
942
+ terminal_parse_failure("EST")
943
+ r3 = nil
944
+ end
945
+ if r3
946
+ r0 = r3
947
+ else
948
+ if has_terminal?("EDT", false, index)
949
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
950
+ @index += 3
951
+ else
952
+ terminal_parse_failure("EDT")
953
+ r4 = nil
954
+ end
955
+ if r4
956
+ r0 = r4
957
+ else
958
+ if has_terminal?("CST", false, index)
959
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 3))
960
+ @index += 3
961
+ else
962
+ terminal_parse_failure("CST")
963
+ r5 = nil
964
+ end
965
+ if r5
966
+ r0 = r5
967
+ else
968
+ if has_terminal?("CDT", false, index)
969
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 3))
970
+ @index += 3
971
+ else
972
+ terminal_parse_failure("CDT")
973
+ r6 = nil
974
+ end
975
+ if r6
976
+ r0 = r6
977
+ else
978
+ if has_terminal?("MST", false, index)
979
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
980
+ @index += 3
981
+ else
982
+ terminal_parse_failure("MST")
983
+ r7 = nil
984
+ end
985
+ if r7
986
+ r0 = r7
987
+ else
988
+ if has_terminal?("MDT", false, index)
989
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 3))
990
+ @index += 3
991
+ else
992
+ terminal_parse_failure("MDT")
993
+ r8 = nil
994
+ end
995
+ if r8
996
+ r0 = r8
997
+ else
998
+ if has_terminal?("PST", false, index)
999
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 3))
1000
+ @index += 3
1001
+ else
1002
+ terminal_parse_failure("PST")
1003
+ r9 = nil
1004
+ end
1005
+ if r9
1006
+ r0 = r9
1007
+ else
1008
+ if has_terminal?("PDT", false, index)
1009
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 3))
1010
+ @index += 3
1011
+ else
1012
+ terminal_parse_failure("PDT")
1013
+ r10 = nil
1014
+ end
1015
+ if r10
1016
+ r0 = r10
1017
+ else
1018
+ if has_terminal?('\G[\\x41-\\x49]', true, index)
1019
+ r11 = true
1020
+ @index += 1
1021
+ else
1022
+ r11 = nil
1023
+ end
1024
+ if r11
1025
+ r0 = r11
1026
+ else
1027
+ if has_terminal?('\G[\\x4B-\\x5A]', true, index)
1028
+ r12 = true
1029
+ @index += 1
1030
+ else
1031
+ r12 = nil
1032
+ end
1033
+ if r12
1034
+ r0 = r12
1035
+ else
1036
+ if has_terminal?('\G[\\x61-\\x69]', true, index)
1037
+ r13 = true
1038
+ @index += 1
1039
+ else
1040
+ r13 = nil
1041
+ end
1042
+ if r13
1043
+ r0 = r13
1044
+ else
1045
+ if has_terminal?('\G[\\x6B-\\x7A]', true, index)
1046
+ r14 = true
1047
+ @index += 1
1048
+ else
1049
+ r14 = nil
1050
+ end
1051
+ if r14
1052
+ r0 = r14
1053
+ else
1054
+ @index = i0
1055
+ r0 = nil
1056
+ end
1057
+ end
1058
+ end
1059
+ end
1060
+ end
1061
+ end
1062
+ end
1063
+ end
1064
+ end
1065
+ end
1066
+ end
1067
+ end
1068
+ end
1069
+ end
1070
+
1071
+ node_cache[:obs_zone][start_index] = r0
1072
+
1073
+ r0
1074
+ end
1075
+
1076
+ module ObsAngleAddr0
1077
+ def addr_spec
1078
+ elements[3]
1079
+ end
1080
+
1081
+ end
1082
+
1083
+ def _nt_obs_angle_addr
1084
+ start_index = index
1085
+ if node_cache[:obs_angle_addr].has_key?(index)
1086
+ cached = node_cache[:obs_angle_addr][index]
1087
+ @index = cached.interval.end if cached
1088
+ return cached
1089
+ end
1090
+
1091
+ i0, s0 = index, []
1092
+ r2 = _nt_CFWS
1093
+ if r2
1094
+ r1 = r2
1095
+ else
1096
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1097
+ end
1098
+ s0 << r1
1099
+ if r1
1100
+ if has_terminal?("<", false, index)
1101
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1102
+ @index += 1
1103
+ else
1104
+ terminal_parse_failure("<")
1105
+ r3 = nil
1106
+ end
1107
+ s0 << r3
1108
+ if r3
1109
+ r5 = _nt_obs_route
1110
+ if r5
1111
+ r4 = r5
1112
+ else
1113
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1114
+ end
1115
+ s0 << r4
1116
+ if r4
1117
+ r6 = _nt_addr_spec
1118
+ s0 << r6
1119
+ if r6
1120
+ if has_terminal?(">", false, index)
1121
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
1122
+ @index += 1
1123
+ else
1124
+ terminal_parse_failure(">")
1125
+ r7 = nil
1126
+ end
1127
+ s0 << r7
1128
+ if r7
1129
+ r9 = _nt_CFWS
1130
+ if r9
1131
+ r8 = r9
1132
+ else
1133
+ r8 = instantiate_node(SyntaxNode,input, index...index)
1134
+ end
1135
+ s0 << r8
1136
+ end
1137
+ end
1138
+ end
1139
+ end
1140
+ end
1141
+ if s0.last
1142
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1143
+ r0.extend(ObsAngleAddr0)
1144
+ else
1145
+ @index = i0
1146
+ r0 = nil
1147
+ end
1148
+
1149
+ node_cache[:obs_angle_addr][start_index] = r0
1150
+
1151
+ r0
1152
+ end
1153
+
1154
+ module ObsRoute0
1155
+ def obs_domain_list
1156
+ elements[1]
1157
+ end
1158
+
1159
+ end
1160
+
1161
+ def _nt_obs_route
1162
+ start_index = index
1163
+ if node_cache[:obs_route].has_key?(index)
1164
+ cached = node_cache[:obs_route][index]
1165
+ @index = cached.interval.end if cached
1166
+ return cached
1167
+ end
1168
+
1169
+ i0, s0 = index, []
1170
+ r2 = _nt_CFWS
1171
+ if r2
1172
+ r1 = r2
1173
+ else
1174
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1175
+ end
1176
+ s0 << r1
1177
+ if r1
1178
+ r3 = _nt_obs_domain_list
1179
+ s0 << r3
1180
+ if r3
1181
+ if has_terminal?(":", false, index)
1182
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1183
+ @index += 1
1184
+ else
1185
+ terminal_parse_failure(":")
1186
+ r4 = nil
1187
+ end
1188
+ s0 << r4
1189
+ if r4
1190
+ r6 = _nt_CFWS
1191
+ if r6
1192
+ r5 = r6
1193
+ else
1194
+ r5 = instantiate_node(SyntaxNode,input, index...index)
1195
+ end
1196
+ s0 << r5
1197
+ end
1198
+ end
1199
+ end
1200
+ if s0.last
1201
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1202
+ r0.extend(ObsRoute0)
1203
+ else
1204
+ @index = i0
1205
+ r0 = nil
1206
+ end
1207
+
1208
+ node_cache[:obs_route][start_index] = r0
1209
+
1210
+ r0
1211
+ end
1212
+
1213
+ module ObsDomainList0
1214
+ def domain
1215
+ elements[3]
1216
+ end
1217
+ end
1218
+
1219
+ module ObsDomainList1
1220
+ def domain
1221
+ elements[1]
1222
+ end
1223
+
1224
+ end
1225
+
1226
+ def _nt_obs_domain_list
1227
+ start_index = index
1228
+ if node_cache[:obs_domain_list].has_key?(index)
1229
+ cached = node_cache[:obs_domain_list][index]
1230
+ @index = cached.interval.end if cached
1231
+ return cached
1232
+ end
1233
+
1234
+ i0, s0 = index, []
1235
+ if has_terminal?("@", false, index)
1236
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1237
+ @index += 1
1238
+ else
1239
+ terminal_parse_failure("@")
1240
+ r1 = nil
1241
+ end
1242
+ s0 << r1
1243
+ if r1
1244
+ r2 = _nt_domain
1245
+ s0 << r2
1246
+ if r2
1247
+ s3, i3 = [], index
1248
+ loop do
1249
+ i4, s4 = index, []
1250
+ s5, i5 = [], index
1251
+ loop do
1252
+ if has_terminal?(",", false, index)
1253
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1254
+ @index += 1
1255
+ else
1256
+ terminal_parse_failure(",")
1257
+ r6 = nil
1258
+ end
1259
+ if r6
1260
+ s5 << r6
1261
+ else
1262
+ break
1263
+ end
1264
+ end
1265
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1266
+ s4 << r5
1267
+ if r5
1268
+ r8 = _nt_CFWS
1269
+ if r8
1270
+ r7 = r8
1271
+ else
1272
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1273
+ end
1274
+ s4 << r7
1275
+ if r7
1276
+ if has_terminal?("@", false, index)
1277
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1278
+ @index += 1
1279
+ else
1280
+ terminal_parse_failure("@")
1281
+ r9 = nil
1282
+ end
1283
+ s4 << r9
1284
+ if r9
1285
+ r10 = _nt_domain
1286
+ s4 << r10
1287
+ end
1288
+ end
1289
+ end
1290
+ if s4.last
1291
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1292
+ r4.extend(ObsDomainList0)
1293
+ else
1294
+ @index = i4
1295
+ r4 = nil
1296
+ end
1297
+ if r4
1298
+ s3 << r4
1299
+ else
1300
+ break
1301
+ end
1302
+ end
1303
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1304
+ s0 << r3
1305
+ end
1306
+ end
1307
+ if s0.last
1308
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1309
+ r0.extend(ObsDomainList1)
1310
+ else
1311
+ @index = i0
1312
+ r0 = nil
1313
+ end
1314
+
1315
+ node_cache[:obs_domain_list][start_index] = r0
1316
+
1317
+ r0
1318
+ end
1319
+
1320
+ module ObsLocalPart0
1321
+ def word
1322
+ elements[1]
1323
+ end
1324
+ end
1325
+
1326
+ module ObsLocalPart1
1327
+ def word
1328
+ elements[0]
1329
+ end
1330
+
1331
+ end
1332
+
1333
+ def _nt_obs_local_part
1334
+ start_index = index
1335
+ if node_cache[:obs_local_part].has_key?(index)
1336
+ cached = node_cache[:obs_local_part][index]
1337
+ @index = cached.interval.end if cached
1338
+ return cached
1339
+ end
1340
+
1341
+ i0, s0 = index, []
1342
+ r1 = _nt_word
1343
+ s0 << r1
1344
+ if r1
1345
+ s2, i2 = [], index
1346
+ loop do
1347
+ i3, s3 = index, []
1348
+ if has_terminal?(".", false, index)
1349
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1350
+ @index += 1
1351
+ else
1352
+ terminal_parse_failure(".")
1353
+ r4 = nil
1354
+ end
1355
+ s3 << r4
1356
+ if r4
1357
+ r5 = _nt_word
1358
+ s3 << r5
1359
+ end
1360
+ if s3.last
1361
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1362
+ r3.extend(ObsLocalPart0)
1363
+ else
1364
+ @index = i3
1365
+ r3 = nil
1366
+ end
1367
+ if r3
1368
+ s2 << r3
1369
+ else
1370
+ break
1371
+ end
1372
+ end
1373
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1374
+ s0 << r2
1375
+ end
1376
+ if s0.last
1377
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1378
+ r0.extend(ObsLocalPart1)
1379
+ else
1380
+ @index = i0
1381
+ r0 = nil
1382
+ end
1383
+
1384
+ node_cache[:obs_local_part][start_index] = r0
1385
+
1386
+ r0
1387
+ end
1388
+
1389
+ module ObsDomain0
1390
+ def atom
1391
+ elements[1]
1392
+ end
1393
+ end
1394
+
1395
+ module ObsDomain1
1396
+ def atom
1397
+ elements[0]
1398
+ end
1399
+
1400
+ end
1401
+
1402
+ def _nt_obs_domain
1403
+ start_index = index
1404
+ if node_cache[:obs_domain].has_key?(index)
1405
+ cached = node_cache[:obs_domain][index]
1406
+ @index = cached.interval.end if cached
1407
+ return cached
1408
+ end
1409
+
1410
+ i0, s0 = index, []
1411
+ r1 = _nt_atom
1412
+ s0 << r1
1413
+ if r1
1414
+ s2, i2 = [], index
1415
+ loop do
1416
+ i3, s3 = index, []
1417
+ if has_terminal?(".", false, index)
1418
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1419
+ @index += 1
1420
+ else
1421
+ terminal_parse_failure(".")
1422
+ r4 = nil
1423
+ end
1424
+ s3 << r4
1425
+ if r4
1426
+ r5 = _nt_atom
1427
+ s3 << r5
1428
+ end
1429
+ if s3.last
1430
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1431
+ r3.extend(ObsDomain0)
1432
+ else
1433
+ @index = i3
1434
+ r3 = nil
1435
+ end
1436
+ if r3
1437
+ s2 << r3
1438
+ else
1439
+ break
1440
+ end
1441
+ end
1442
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1443
+ s0 << r2
1444
+ end
1445
+ if s0.last
1446
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1447
+ r0.extend(ObsDomain1)
1448
+ else
1449
+ @index = i0
1450
+ r0 = nil
1451
+ end
1452
+
1453
+ node_cache[:obs_domain][start_index] = r0
1454
+
1455
+ r0
1456
+ end
1457
+
1458
+ module ObsMboxList0
1459
+ end
1460
+
1461
+ module ObsMboxList1
1462
+ end
1463
+
1464
+ def _nt_obs_mbox_list
1465
+ start_index = index
1466
+ if node_cache[:obs_mbox_list].has_key?(index)
1467
+ cached = node_cache[:obs_mbox_list][index]
1468
+ @index = cached.interval.end if cached
1469
+ return cached
1470
+ end
1471
+
1472
+ i0, s0 = index, []
1473
+ s1, i1 = [], index
1474
+ loop do
1475
+ i2, s2 = index, []
1476
+ r4 = _nt_mailbox
1477
+ if r4
1478
+ r3 = r4
1479
+ else
1480
+ r3 = instantiate_node(SyntaxNode,input, index...index)
1481
+ end
1482
+ s2 << r3
1483
+ if r3
1484
+ r6 = _nt_CFWS
1485
+ if r6
1486
+ r5 = r6
1487
+ else
1488
+ r5 = instantiate_node(SyntaxNode,input, index...index)
1489
+ end
1490
+ s2 << r5
1491
+ if r5
1492
+ if has_terminal?(",", false, index)
1493
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
1494
+ @index += 1
1495
+ else
1496
+ terminal_parse_failure(",")
1497
+ r7 = nil
1498
+ end
1499
+ s2 << r7
1500
+ if r7
1501
+ r9 = _nt_CFWS
1502
+ if r9
1503
+ r8 = r9
1504
+ else
1505
+ r8 = instantiate_node(SyntaxNode,input, index...index)
1506
+ end
1507
+ s2 << r8
1508
+ end
1509
+ end
1510
+ end
1511
+ if s2.last
1512
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1513
+ r2.extend(ObsMboxList0)
1514
+ else
1515
+ @index = i2
1516
+ r2 = nil
1517
+ end
1518
+ if r2
1519
+ s1 << r2
1520
+ else
1521
+ break
1522
+ end
1523
+ end
1524
+ if s1.empty?
1525
+ @index = i1
1526
+ r1 = nil
1527
+ else
1528
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1529
+ end
1530
+ s0 << r1
1531
+ if r1
1532
+ r11 = _nt_mailbox
1533
+ if r11
1534
+ r10 = r11
1535
+ else
1536
+ r10 = instantiate_node(SyntaxNode,input, index...index)
1537
+ end
1538
+ s0 << r10
1539
+ end
1540
+ if s0.last
1541
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1542
+ r0.extend(ObsMboxList1)
1543
+ else
1544
+ @index = i0
1545
+ r0 = nil
1546
+ end
1547
+
1548
+ node_cache[:obs_mbox_list][start_index] = r0
1549
+
1550
+ r0
1551
+ end
1552
+
1553
+ module ObsAddrList0
1554
+ end
1555
+
1556
+ module ObsAddrList1
1557
+ end
1558
+
1559
+ def _nt_obs_addr_list
1560
+ start_index = index
1561
+ if node_cache[:obs_addr_list].has_key?(index)
1562
+ cached = node_cache[:obs_addr_list][index]
1563
+ @index = cached.interval.end if cached
1564
+ return cached
1565
+ end
1566
+
1567
+ i0, s0 = index, []
1568
+ s1, i1 = [], index
1569
+ loop do
1570
+ i2, s2 = index, []
1571
+ r4 = _nt_address
1572
+ if r4
1573
+ r3 = r4
1574
+ else
1575
+ r3 = instantiate_node(SyntaxNode,input, index...index)
1576
+ end
1577
+ s2 << r3
1578
+ if r3
1579
+ r6 = _nt_CFWS
1580
+ if r6
1581
+ r5 = r6
1582
+ else
1583
+ r5 = instantiate_node(SyntaxNode,input, index...index)
1584
+ end
1585
+ s2 << r5
1586
+ if r5
1587
+ if has_terminal?(",", false, index)
1588
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
1589
+ @index += 1
1590
+ else
1591
+ terminal_parse_failure(",")
1592
+ r7 = nil
1593
+ end
1594
+ s2 << r7
1595
+ if r7
1596
+ r9 = _nt_CFWS
1597
+ if r9
1598
+ r8 = r9
1599
+ else
1600
+ r8 = instantiate_node(SyntaxNode,input, index...index)
1601
+ end
1602
+ s2 << r8
1603
+ end
1604
+ end
1605
+ end
1606
+ if s2.last
1607
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1608
+ r2.extend(ObsAddrList0)
1609
+ else
1610
+ @index = i2
1611
+ r2 = nil
1612
+ end
1613
+ if r2
1614
+ s1 << r2
1615
+ else
1616
+ break
1617
+ end
1618
+ end
1619
+ if s1.empty?
1620
+ @index = i1
1621
+ r1 = nil
1622
+ else
1623
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1624
+ end
1625
+ s0 << r1
1626
+ if r1
1627
+ r11 = _nt_address
1628
+ if r11
1629
+ r10 = r11
1630
+ else
1631
+ r10 = instantiate_node(SyntaxNode,input, index...index)
1632
+ end
1633
+ s0 << r10
1634
+ end
1635
+ if s0.last
1636
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1637
+ r0.extend(ObsAddrList1)
1638
+ else
1639
+ @index = i0
1640
+ r0 = nil
1641
+ end
1642
+
1643
+ node_cache[:obs_addr_list][start_index] = r0
1644
+
1645
+ r0
1646
+ end
1647
+
1648
+ def _nt_obs_fields
1649
+ start_index = index
1650
+ if node_cache[:obs_fields].has_key?(index)
1651
+ cached = node_cache[:obs_fields][index]
1652
+ @index = cached.interval.end if cached
1653
+ return cached
1654
+ end
1655
+
1656
+ s0, i0 = [], index
1657
+ loop do
1658
+ i1 = index
1659
+ r2 = _nt_obs_return
1660
+ if r2
1661
+ r1 = r2
1662
+ else
1663
+ r3 = _nt_obs_received
1664
+ if r3
1665
+ r1 = r3
1666
+ else
1667
+ r4 = _nt_obs_orig_date
1668
+ if r4
1669
+ r1 = r4
1670
+ else
1671
+ r5 = _nt_obs_from
1672
+ if r5
1673
+ r1 = r5
1674
+ else
1675
+ r6 = _nt_obs_sender
1676
+ if r6
1677
+ r1 = r6
1678
+ else
1679
+ r7 = _nt_obs_reply_to
1680
+ if r7
1681
+ r1 = r7
1682
+ else
1683
+ r8 = _nt_obs_to
1684
+ if r8
1685
+ r1 = r8
1686
+ else
1687
+ r9 = _nt_obs_cc
1688
+ if r9
1689
+ r1 = r9
1690
+ else
1691
+ r10 = _nt_obs_bcc
1692
+ if r10
1693
+ r1 = r10
1694
+ else
1695
+ r11 = _nt_obs_message_id
1696
+ if r11
1697
+ r1 = r11
1698
+ else
1699
+ r12 = _nt_obs_in_reply_to
1700
+ if r12
1701
+ r1 = r12
1702
+ else
1703
+ r13 = _nt_obs_references
1704
+ if r13
1705
+ r1 = r13
1706
+ else
1707
+ r14 = _nt_obs_subject
1708
+ if r14
1709
+ r1 = r14
1710
+ else
1711
+ r15 = _nt_obs_comments
1712
+ if r15
1713
+ r1 = r15
1714
+ else
1715
+ r16 = _nt_obs_keywords
1716
+ if r16
1717
+ r1 = r16
1718
+ else
1719
+ r17 = _nt_obs_resent_date
1720
+ if r17
1721
+ r1 = r17
1722
+ else
1723
+ r18 = _nt_obs_resent_from
1724
+ if r18
1725
+ r1 = r18
1726
+ else
1727
+ r19 = _nt_obs_resent_send
1728
+ if r19
1729
+ r1 = r19
1730
+ else
1731
+ r20 = _nt_obs_resent_rply
1732
+ if r20
1733
+ r1 = r20
1734
+ else
1735
+ r21 = _nt_obs_resent_to
1736
+ if r21
1737
+ r1 = r21
1738
+ else
1739
+ r22 = _nt_obs_resent_cc
1740
+ if r22
1741
+ r1 = r22
1742
+ else
1743
+ r23 = _nt_obs_resent_bcc
1744
+ if r23
1745
+ r1 = r23
1746
+ else
1747
+ r24 = _nt_obs_resent_mid
1748
+ if r24
1749
+ r1 = r24
1750
+ else
1751
+ r25 = _nt_obs_optional
1752
+ if r25
1753
+ r1 = r25
1754
+ else
1755
+ @index = i1
1756
+ r1 = nil
1757
+ end
1758
+ end
1759
+ end
1760
+ end
1761
+ end
1762
+ end
1763
+ end
1764
+ end
1765
+ end
1766
+ end
1767
+ end
1768
+ end
1769
+ end
1770
+ end
1771
+ end
1772
+ end
1773
+ end
1774
+ end
1775
+ end
1776
+ end
1777
+ end
1778
+ end
1779
+ end
1780
+ end
1781
+ if r1
1782
+ s0 << r1
1783
+ else
1784
+ break
1785
+ end
1786
+ end
1787
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1788
+
1789
+ node_cache[:obs_fields][start_index] = r0
1790
+
1791
+ r0
1792
+ end
1793
+
1794
+ module ObsOrigDate0
1795
+ def date_time
1796
+ elements[3]
1797
+ end
1798
+
1799
+ def CRLF
1800
+ elements[4]
1801
+ end
1802
+ end
1803
+
1804
+ def _nt_obs_orig_date
1805
+ start_index = index
1806
+ if node_cache[:obs_orig_date].has_key?(index)
1807
+ cached = node_cache[:obs_orig_date][index]
1808
+ @index = cached.interval.end if cached
1809
+ return cached
1810
+ end
1811
+
1812
+ i0, s0 = index, []
1813
+ if has_terminal?("Date", false, index)
1814
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
1815
+ @index += 4
1816
+ else
1817
+ terminal_parse_failure("Date")
1818
+ r1 = nil
1819
+ end
1820
+ s0 << r1
1821
+ if r1
1822
+ s2, i2 = [], index
1823
+ loop do
1824
+ r3 = _nt_WSP
1825
+ if r3
1826
+ s2 << r3
1827
+ else
1828
+ break
1829
+ end
1830
+ end
1831
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1832
+ s0 << r2
1833
+ if r2
1834
+ if has_terminal?(":", false, index)
1835
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1836
+ @index += 1
1837
+ else
1838
+ terminal_parse_failure(":")
1839
+ r4 = nil
1840
+ end
1841
+ s0 << r4
1842
+ if r4
1843
+ r5 = _nt_date_time
1844
+ s0 << r5
1845
+ if r5
1846
+ r6 = _nt_CRLF
1847
+ s0 << r6
1848
+ end
1849
+ end
1850
+ end
1851
+ end
1852
+ if s0.last
1853
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1854
+ r0.extend(ObsOrigDate0)
1855
+ else
1856
+ @index = i0
1857
+ r0 = nil
1858
+ end
1859
+
1860
+ node_cache[:obs_orig_date][start_index] = r0
1861
+
1862
+ r0
1863
+ end
1864
+
1865
+ module ObsFrom0
1866
+ def mailbox_list
1867
+ elements[3]
1868
+ end
1869
+
1870
+ def CRLF
1871
+ elements[4]
1872
+ end
1873
+ end
1874
+
1875
+ def _nt_obs_from
1876
+ start_index = index
1877
+ if node_cache[:obs_from].has_key?(index)
1878
+ cached = node_cache[:obs_from][index]
1879
+ @index = cached.interval.end if cached
1880
+ return cached
1881
+ end
1882
+
1883
+ i0, s0 = index, []
1884
+ if has_terminal?("From", false, index)
1885
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
1886
+ @index += 4
1887
+ else
1888
+ terminal_parse_failure("From")
1889
+ r1 = nil
1890
+ end
1891
+ s0 << r1
1892
+ if r1
1893
+ s2, i2 = [], index
1894
+ loop do
1895
+ r3 = _nt_WSP
1896
+ if r3
1897
+ s2 << r3
1898
+ else
1899
+ break
1900
+ end
1901
+ end
1902
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1903
+ s0 << r2
1904
+ if r2
1905
+ if has_terminal?(":", false, index)
1906
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1907
+ @index += 1
1908
+ else
1909
+ terminal_parse_failure(":")
1910
+ r4 = nil
1911
+ end
1912
+ s0 << r4
1913
+ if r4
1914
+ r5 = _nt_mailbox_list
1915
+ s0 << r5
1916
+ if r5
1917
+ r6 = _nt_CRLF
1918
+ s0 << r6
1919
+ end
1920
+ end
1921
+ end
1922
+ end
1923
+ if s0.last
1924
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1925
+ r0.extend(ObsFrom0)
1926
+ else
1927
+ @index = i0
1928
+ r0 = nil
1929
+ end
1930
+
1931
+ node_cache[:obs_from][start_index] = r0
1932
+
1933
+ r0
1934
+ end
1935
+
1936
+ module ObsSender0
1937
+ def mailbox
1938
+ elements[3]
1939
+ end
1940
+
1941
+ def CRLF
1942
+ elements[4]
1943
+ end
1944
+ end
1945
+
1946
+ def _nt_obs_sender
1947
+ start_index = index
1948
+ if node_cache[:obs_sender].has_key?(index)
1949
+ cached = node_cache[:obs_sender][index]
1950
+ @index = cached.interval.end if cached
1951
+ return cached
1952
+ end
1953
+
1954
+ i0, s0 = index, []
1955
+ if has_terminal?("Sender", false, index)
1956
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
1957
+ @index += 6
1958
+ else
1959
+ terminal_parse_failure("Sender")
1960
+ r1 = nil
1961
+ end
1962
+ s0 << r1
1963
+ if r1
1964
+ s2, i2 = [], index
1965
+ loop do
1966
+ r3 = _nt_WSP
1967
+ if r3
1968
+ s2 << r3
1969
+ else
1970
+ break
1971
+ end
1972
+ end
1973
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1974
+ s0 << r2
1975
+ if r2
1976
+ if has_terminal?(":", false, index)
1977
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1978
+ @index += 1
1979
+ else
1980
+ terminal_parse_failure(":")
1981
+ r4 = nil
1982
+ end
1983
+ s0 << r4
1984
+ if r4
1985
+ r5 = _nt_mailbox
1986
+ s0 << r5
1987
+ if r5
1988
+ r6 = _nt_CRLF
1989
+ s0 << r6
1990
+ end
1991
+ end
1992
+ end
1993
+ end
1994
+ if s0.last
1995
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1996
+ r0.extend(ObsSender0)
1997
+ else
1998
+ @index = i0
1999
+ r0 = nil
2000
+ end
2001
+
2002
+ node_cache[:obs_sender][start_index] = r0
2003
+
2004
+ r0
2005
+ end
2006
+
2007
+ module ObsReplyTo0
2008
+ def mailbox_list
2009
+ elements[3]
2010
+ end
2011
+
2012
+ def CRLF
2013
+ elements[4]
2014
+ end
2015
+ end
2016
+
2017
+ def _nt_obs_reply_to
2018
+ start_index = index
2019
+ if node_cache[:obs_reply_to].has_key?(index)
2020
+ cached = node_cache[:obs_reply_to][index]
2021
+ @index = cached.interval.end if cached
2022
+ return cached
2023
+ end
2024
+
2025
+ i0, s0 = index, []
2026
+ if has_terminal?("Reply-To", false, index)
2027
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
2028
+ @index += 8
2029
+ else
2030
+ terminal_parse_failure("Reply-To")
2031
+ r1 = nil
2032
+ end
2033
+ s0 << r1
2034
+ if r1
2035
+ s2, i2 = [], index
2036
+ loop do
2037
+ r3 = _nt_WSP
2038
+ if r3
2039
+ s2 << r3
2040
+ else
2041
+ break
2042
+ end
2043
+ end
2044
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2045
+ s0 << r2
2046
+ if r2
2047
+ if has_terminal?(":", false, index)
2048
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2049
+ @index += 1
2050
+ else
2051
+ terminal_parse_failure(":")
2052
+ r4 = nil
2053
+ end
2054
+ s0 << r4
2055
+ if r4
2056
+ r5 = _nt_mailbox_list
2057
+ s0 << r5
2058
+ if r5
2059
+ r6 = _nt_CRLF
2060
+ s0 << r6
2061
+ end
2062
+ end
2063
+ end
2064
+ end
2065
+ if s0.last
2066
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2067
+ r0.extend(ObsReplyTo0)
2068
+ else
2069
+ @index = i0
2070
+ r0 = nil
2071
+ end
2072
+
2073
+ node_cache[:obs_reply_to][start_index] = r0
2074
+
2075
+ r0
2076
+ end
2077
+
2078
+ module ObsTo0
2079
+ def address_list
2080
+ elements[3]
2081
+ end
2082
+
2083
+ def CRLF
2084
+ elements[4]
2085
+ end
2086
+ end
2087
+
2088
+ def _nt_obs_to
2089
+ start_index = index
2090
+ if node_cache[:obs_to].has_key?(index)
2091
+ cached = node_cache[:obs_to][index]
2092
+ @index = cached.interval.end if cached
2093
+ return cached
2094
+ end
2095
+
2096
+ i0, s0 = index, []
2097
+ if has_terminal?("To", false, index)
2098
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
2099
+ @index += 2
2100
+ else
2101
+ terminal_parse_failure("To")
2102
+ r1 = nil
2103
+ end
2104
+ s0 << r1
2105
+ if r1
2106
+ s2, i2 = [], index
2107
+ loop do
2108
+ r3 = _nt_WSP
2109
+ if r3
2110
+ s2 << r3
2111
+ else
2112
+ break
2113
+ end
2114
+ end
2115
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2116
+ s0 << r2
2117
+ if r2
2118
+ if has_terminal?(":", false, index)
2119
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2120
+ @index += 1
2121
+ else
2122
+ terminal_parse_failure(":")
2123
+ r4 = nil
2124
+ end
2125
+ s0 << r4
2126
+ if r4
2127
+ r5 = _nt_address_list
2128
+ s0 << r5
2129
+ if r5
2130
+ r6 = _nt_CRLF
2131
+ s0 << r6
2132
+ end
2133
+ end
2134
+ end
2135
+ end
2136
+ if s0.last
2137
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2138
+ r0.extend(ObsTo0)
2139
+ else
2140
+ @index = i0
2141
+ r0 = nil
2142
+ end
2143
+
2144
+ node_cache[:obs_to][start_index] = r0
2145
+
2146
+ r0
2147
+ end
2148
+
2149
+ module ObsCc0
2150
+ def address_list
2151
+ elements[3]
2152
+ end
2153
+
2154
+ def CRLF
2155
+ elements[4]
2156
+ end
2157
+ end
2158
+
2159
+ def _nt_obs_cc
2160
+ start_index = index
2161
+ if node_cache[:obs_cc].has_key?(index)
2162
+ cached = node_cache[:obs_cc][index]
2163
+ @index = cached.interval.end if cached
2164
+ return cached
2165
+ end
2166
+
2167
+ i0, s0 = index, []
2168
+ if has_terminal?("Cc", false, index)
2169
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
2170
+ @index += 2
2171
+ else
2172
+ terminal_parse_failure("Cc")
2173
+ r1 = nil
2174
+ end
2175
+ s0 << r1
2176
+ if r1
2177
+ s2, i2 = [], index
2178
+ loop do
2179
+ r3 = _nt_WSP
2180
+ if r3
2181
+ s2 << r3
2182
+ else
2183
+ break
2184
+ end
2185
+ end
2186
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2187
+ s0 << r2
2188
+ if r2
2189
+ if has_terminal?(":", false, index)
2190
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2191
+ @index += 1
2192
+ else
2193
+ terminal_parse_failure(":")
2194
+ r4 = nil
2195
+ end
2196
+ s0 << r4
2197
+ if r4
2198
+ r5 = _nt_address_list
2199
+ s0 << r5
2200
+ if r5
2201
+ r6 = _nt_CRLF
2202
+ s0 << r6
2203
+ end
2204
+ end
2205
+ end
2206
+ end
2207
+ if s0.last
2208
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2209
+ r0.extend(ObsCc0)
2210
+ else
2211
+ @index = i0
2212
+ r0 = nil
2213
+ end
2214
+
2215
+ node_cache[:obs_cc][start_index] = r0
2216
+
2217
+ r0
2218
+ end
2219
+
2220
+ module ObsBcc0
2221
+ def CRLF
2222
+ elements[4]
2223
+ end
2224
+ end
2225
+
2226
+ def _nt_obs_bcc
2227
+ start_index = index
2228
+ if node_cache[:obs_bcc].has_key?(index)
2229
+ cached = node_cache[:obs_bcc][index]
2230
+ @index = cached.interval.end if cached
2231
+ return cached
2232
+ end
2233
+
2234
+ i0, s0 = index, []
2235
+ if has_terminal?("Bcc", false, index)
2236
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
2237
+ @index += 3
2238
+ else
2239
+ terminal_parse_failure("Bcc")
2240
+ r1 = nil
2241
+ end
2242
+ s0 << r1
2243
+ if r1
2244
+ s2, i2 = [], index
2245
+ loop do
2246
+ r3 = _nt_WSP
2247
+ if r3
2248
+ s2 << r3
2249
+ else
2250
+ break
2251
+ end
2252
+ end
2253
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2254
+ s0 << r2
2255
+ if r2
2256
+ if has_terminal?(":", false, index)
2257
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2258
+ @index += 1
2259
+ else
2260
+ terminal_parse_failure(":")
2261
+ r4 = nil
2262
+ end
2263
+ s0 << r4
2264
+ if r4
2265
+ i5 = index
2266
+ r6 = _nt_address_list
2267
+ if r6
2268
+ r5 = r6
2269
+ else
2270
+ r8 = _nt_CFWS
2271
+ if r8
2272
+ r7 = r8
2273
+ else
2274
+ r7 = instantiate_node(SyntaxNode,input, index...index)
2275
+ end
2276
+ if r7
2277
+ r5 = r7
2278
+ else
2279
+ @index = i5
2280
+ r5 = nil
2281
+ end
2282
+ end
2283
+ s0 << r5
2284
+ if r5
2285
+ r9 = _nt_CRLF
2286
+ s0 << r9
2287
+ end
2288
+ end
2289
+ end
2290
+ end
2291
+ if s0.last
2292
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2293
+ r0.extend(ObsBcc0)
2294
+ else
2295
+ @index = i0
2296
+ r0 = nil
2297
+ end
2298
+
2299
+ node_cache[:obs_bcc][start_index] = r0
2300
+
2301
+ r0
2302
+ end
2303
+
2304
+ module ObsMessageId0
2305
+ def msg_id
2306
+ elements[3]
2307
+ end
2308
+
2309
+ def CRLF
2310
+ elements[4]
2311
+ end
2312
+ end
2313
+
2314
+ def _nt_obs_message_id
2315
+ start_index = index
2316
+ if node_cache[:obs_message_id].has_key?(index)
2317
+ cached = node_cache[:obs_message_id][index]
2318
+ @index = cached.interval.end if cached
2319
+ return cached
2320
+ end
2321
+
2322
+ i0, s0 = index, []
2323
+ if has_terminal?("Message-ID", false, index)
2324
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 10))
2325
+ @index += 10
2326
+ else
2327
+ terminal_parse_failure("Message-ID")
2328
+ r1 = nil
2329
+ end
2330
+ s0 << r1
2331
+ if r1
2332
+ s2, i2 = [], index
2333
+ loop do
2334
+ r3 = _nt_WSP
2335
+ if r3
2336
+ s2 << r3
2337
+ else
2338
+ break
2339
+ end
2340
+ end
2341
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2342
+ s0 << r2
2343
+ if r2
2344
+ if has_terminal?(":", false, index)
2345
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2346
+ @index += 1
2347
+ else
2348
+ terminal_parse_failure(":")
2349
+ r4 = nil
2350
+ end
2351
+ s0 << r4
2352
+ if r4
2353
+ r5 = _nt_msg_id
2354
+ s0 << r5
2355
+ if r5
2356
+ r6 = _nt_CRLF
2357
+ s0 << r6
2358
+ end
2359
+ end
2360
+ end
2361
+ end
2362
+ if s0.last
2363
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2364
+ r0.extend(ObsMessageId0)
2365
+ else
2366
+ @index = i0
2367
+ r0 = nil
2368
+ end
2369
+
2370
+ node_cache[:obs_message_id][start_index] = r0
2371
+
2372
+ r0
2373
+ end
2374
+
2375
+ module ObsInReplyTo0
2376
+ def CRLF
2377
+ elements[4]
2378
+ end
2379
+ end
2380
+
2381
+ def _nt_obs_in_reply_to
2382
+ start_index = index
2383
+ if node_cache[:obs_in_reply_to].has_key?(index)
2384
+ cached = node_cache[:obs_in_reply_to][index]
2385
+ @index = cached.interval.end if cached
2386
+ return cached
2387
+ end
2388
+
2389
+ i0, s0 = index, []
2390
+ if has_terminal?("In-Reply-To", false, index)
2391
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 11))
2392
+ @index += 11
2393
+ else
2394
+ terminal_parse_failure("In-Reply-To")
2395
+ r1 = nil
2396
+ end
2397
+ s0 << r1
2398
+ if r1
2399
+ s2, i2 = [], index
2400
+ loop do
2401
+ r3 = _nt_WSP
2402
+ if r3
2403
+ s2 << r3
2404
+ else
2405
+ break
2406
+ end
2407
+ end
2408
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2409
+ s0 << r2
2410
+ if r2
2411
+ if has_terminal?(":", false, index)
2412
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2413
+ @index += 1
2414
+ else
2415
+ terminal_parse_failure(":")
2416
+ r4 = nil
2417
+ end
2418
+ s0 << r4
2419
+ if r4
2420
+ s5, i5 = [], index
2421
+ loop do
2422
+ i6 = index
2423
+ r7 = _nt_phrase
2424
+ if r7
2425
+ r6 = r7
2426
+ else
2427
+ r8 = _nt_msg_id
2428
+ if r8
2429
+ r6 = r8
2430
+ else
2431
+ @index = i6
2432
+ r6 = nil
2433
+ end
2434
+ end
2435
+ if r6
2436
+ s5 << r6
2437
+ else
2438
+ break
2439
+ end
2440
+ end
2441
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2442
+ s0 << r5
2443
+ if r5
2444
+ r9 = _nt_CRLF
2445
+ s0 << r9
2446
+ end
2447
+ end
2448
+ end
2449
+ end
2450
+ if s0.last
2451
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2452
+ r0.extend(ObsInReplyTo0)
2453
+ else
2454
+ @index = i0
2455
+ r0 = nil
2456
+ end
2457
+
2458
+ node_cache[:obs_in_reply_to][start_index] = r0
2459
+
2460
+ r0
2461
+ end
2462
+
2463
+ module ObsReferences0
2464
+ def CRLF
2465
+ elements[4]
2466
+ end
2467
+ end
2468
+
2469
+ def _nt_obs_references
2470
+ start_index = index
2471
+ if node_cache[:obs_references].has_key?(index)
2472
+ cached = node_cache[:obs_references][index]
2473
+ @index = cached.interval.end if cached
2474
+ return cached
2475
+ end
2476
+
2477
+ i0, s0 = index, []
2478
+ if has_terminal?("References", false, index)
2479
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 10))
2480
+ @index += 10
2481
+ else
2482
+ terminal_parse_failure("References")
2483
+ r1 = nil
2484
+ end
2485
+ s0 << r1
2486
+ if r1
2487
+ s2, i2 = [], index
2488
+ loop do
2489
+ r3 = _nt_WSP
2490
+ if r3
2491
+ s2 << r3
2492
+ else
2493
+ break
2494
+ end
2495
+ end
2496
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2497
+ s0 << r2
2498
+ if r2
2499
+ if has_terminal?(":", false, index)
2500
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2501
+ @index += 1
2502
+ else
2503
+ terminal_parse_failure(":")
2504
+ r4 = nil
2505
+ end
2506
+ s0 << r4
2507
+ if r4
2508
+ s5, i5 = [], index
2509
+ loop do
2510
+ i6 = index
2511
+ r7 = _nt_phrase
2512
+ if r7
2513
+ r6 = r7
2514
+ else
2515
+ r8 = _nt_msg_id
2516
+ if r8
2517
+ r6 = r8
2518
+ else
2519
+ @index = i6
2520
+ r6 = nil
2521
+ end
2522
+ end
2523
+ if r6
2524
+ s5 << r6
2525
+ else
2526
+ break
2527
+ end
2528
+ end
2529
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2530
+ s0 << r5
2531
+ if r5
2532
+ r9 = _nt_CRLF
2533
+ s0 << r9
2534
+ end
2535
+ end
2536
+ end
2537
+ end
2538
+ if s0.last
2539
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2540
+ r0.extend(ObsReferences0)
2541
+ else
2542
+ @index = i0
2543
+ r0 = nil
2544
+ end
2545
+
2546
+ node_cache[:obs_references][start_index] = r0
2547
+
2548
+ r0
2549
+ end
2550
+
2551
+ def _nt_obs_id_left
2552
+ start_index = index
2553
+ if node_cache[:obs_id_left].has_key?(index)
2554
+ cached = node_cache[:obs_id_left][index]
2555
+ @index = cached.interval.end if cached
2556
+ return cached
2557
+ end
2558
+
2559
+ r0 = _nt_local_part
2560
+
2561
+ node_cache[:obs_id_left][start_index] = r0
2562
+
2563
+ r0
2564
+ end
2565
+
2566
+ def _nt_obs_id_right
2567
+ start_index = index
2568
+ if node_cache[:obs_id_right].has_key?(index)
2569
+ cached = node_cache[:obs_id_right][index]
2570
+ @index = cached.interval.end if cached
2571
+ return cached
2572
+ end
2573
+
2574
+ r0 = _nt_domain
2575
+
2576
+ node_cache[:obs_id_right][start_index] = r0
2577
+
2578
+ r0
2579
+ end
2580
+
2581
+ module ObsSubject0
2582
+ def unstructured
2583
+ elements[3]
2584
+ end
2585
+
2586
+ def CRLF
2587
+ elements[4]
2588
+ end
2589
+ end
2590
+
2591
+ def _nt_obs_subject
2592
+ start_index = index
2593
+ if node_cache[:obs_subject].has_key?(index)
2594
+ cached = node_cache[:obs_subject][index]
2595
+ @index = cached.interval.end if cached
2596
+ return cached
2597
+ end
2598
+
2599
+ i0, s0 = index, []
2600
+ if has_terminal?("Subject", false, index)
2601
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
2602
+ @index += 7
2603
+ else
2604
+ terminal_parse_failure("Subject")
2605
+ r1 = nil
2606
+ end
2607
+ s0 << r1
2608
+ if r1
2609
+ s2, i2 = [], index
2610
+ loop do
2611
+ r3 = _nt_WSP
2612
+ if r3
2613
+ s2 << r3
2614
+ else
2615
+ break
2616
+ end
2617
+ end
2618
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2619
+ s0 << r2
2620
+ if r2
2621
+ if has_terminal?(":", false, index)
2622
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2623
+ @index += 1
2624
+ else
2625
+ terminal_parse_failure(":")
2626
+ r4 = nil
2627
+ end
2628
+ s0 << r4
2629
+ if r4
2630
+ r5 = _nt_unstructured
2631
+ s0 << r5
2632
+ if r5
2633
+ r6 = _nt_CRLF
2634
+ s0 << r6
2635
+ end
2636
+ end
2637
+ end
2638
+ end
2639
+ if s0.last
2640
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2641
+ r0.extend(ObsSubject0)
2642
+ else
2643
+ @index = i0
2644
+ r0 = nil
2645
+ end
2646
+
2647
+ node_cache[:obs_subject][start_index] = r0
2648
+
2649
+ r0
2650
+ end
2651
+
2652
+ module ObsComments0
2653
+ def unstructured
2654
+ elements[3]
2655
+ end
2656
+
2657
+ def CRLF
2658
+ elements[4]
2659
+ end
2660
+ end
2661
+
2662
+ def _nt_obs_comments
2663
+ start_index = index
2664
+ if node_cache[:obs_comments].has_key?(index)
2665
+ cached = node_cache[:obs_comments][index]
2666
+ @index = cached.interval.end if cached
2667
+ return cached
2668
+ end
2669
+
2670
+ i0, s0 = index, []
2671
+ if has_terminal?("Comments", false, index)
2672
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
2673
+ @index += 8
2674
+ else
2675
+ terminal_parse_failure("Comments")
2676
+ r1 = nil
2677
+ end
2678
+ s0 << r1
2679
+ if r1
2680
+ s2, i2 = [], index
2681
+ loop do
2682
+ r3 = _nt_WSP
2683
+ if r3
2684
+ s2 << r3
2685
+ else
2686
+ break
2687
+ end
2688
+ end
2689
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2690
+ s0 << r2
2691
+ if r2
2692
+ if has_terminal?(":", false, index)
2693
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2694
+ @index += 1
2695
+ else
2696
+ terminal_parse_failure(":")
2697
+ r4 = nil
2698
+ end
2699
+ s0 << r4
2700
+ if r4
2701
+ r5 = _nt_unstructured
2702
+ s0 << r5
2703
+ if r5
2704
+ r6 = _nt_CRLF
2705
+ s0 << r6
2706
+ end
2707
+ end
2708
+ end
2709
+ end
2710
+ if s0.last
2711
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2712
+ r0.extend(ObsComments0)
2713
+ else
2714
+ @index = i0
2715
+ r0 = nil
2716
+ end
2717
+
2718
+ node_cache[:obs_comments][start_index] = r0
2719
+
2720
+ r0
2721
+ end
2722
+
2723
+ module ObsKeywords0
2724
+ def obs_phrase_list
2725
+ elements[3]
2726
+ end
2727
+
2728
+ def CRLF
2729
+ elements[4]
2730
+ end
2731
+ end
2732
+
2733
+ def _nt_obs_keywords
2734
+ start_index = index
2735
+ if node_cache[:obs_keywords].has_key?(index)
2736
+ cached = node_cache[:obs_keywords][index]
2737
+ @index = cached.interval.end if cached
2738
+ return cached
2739
+ end
2740
+
2741
+ i0, s0 = index, []
2742
+ if has_terminal?("Keywords", false, index)
2743
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
2744
+ @index += 8
2745
+ else
2746
+ terminal_parse_failure("Keywords")
2747
+ r1 = nil
2748
+ end
2749
+ s0 << r1
2750
+ if r1
2751
+ s2, i2 = [], index
2752
+ loop do
2753
+ r3 = _nt_WSP
2754
+ if r3
2755
+ s2 << r3
2756
+ else
2757
+ break
2758
+ end
2759
+ end
2760
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2761
+ s0 << r2
2762
+ if r2
2763
+ if has_terminal?(":", false, index)
2764
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2765
+ @index += 1
2766
+ else
2767
+ terminal_parse_failure(":")
2768
+ r4 = nil
2769
+ end
2770
+ s0 << r4
2771
+ if r4
2772
+ r5 = _nt_obs_phrase_list
2773
+ s0 << r5
2774
+ if r5
2775
+ r6 = _nt_CRLF
2776
+ s0 << r6
2777
+ end
2778
+ end
2779
+ end
2780
+ end
2781
+ if s0.last
2782
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2783
+ r0.extend(ObsKeywords0)
2784
+ else
2785
+ @index = i0
2786
+ r0 = nil
2787
+ end
2788
+
2789
+ node_cache[:obs_keywords][start_index] = r0
2790
+
2791
+ r0
2792
+ end
2793
+
2794
+ module ObsResentFrom0
2795
+ def mailbox_list
2796
+ elements[3]
2797
+ end
2798
+
2799
+ def CRLF
2800
+ elements[4]
2801
+ end
2802
+ end
2803
+
2804
+ def _nt_obs_resent_from
2805
+ start_index = index
2806
+ if node_cache[:obs_resent_from].has_key?(index)
2807
+ cached = node_cache[:obs_resent_from][index]
2808
+ @index = cached.interval.end if cached
2809
+ return cached
2810
+ end
2811
+
2812
+ i0, s0 = index, []
2813
+ if has_terminal?("Resent-From", false, index)
2814
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 11))
2815
+ @index += 11
2816
+ else
2817
+ terminal_parse_failure("Resent-From")
2818
+ r1 = nil
2819
+ end
2820
+ s0 << r1
2821
+ if r1
2822
+ s2, i2 = [], index
2823
+ loop do
2824
+ r3 = _nt_WSP
2825
+ if r3
2826
+ s2 << r3
2827
+ else
2828
+ break
2829
+ end
2830
+ end
2831
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2832
+ s0 << r2
2833
+ if r2
2834
+ if has_terminal?(":", false, index)
2835
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2836
+ @index += 1
2837
+ else
2838
+ terminal_parse_failure(":")
2839
+ r4 = nil
2840
+ end
2841
+ s0 << r4
2842
+ if r4
2843
+ r5 = _nt_mailbox_list
2844
+ s0 << r5
2845
+ if r5
2846
+ r6 = _nt_CRLF
2847
+ s0 << r6
2848
+ end
2849
+ end
2850
+ end
2851
+ end
2852
+ if s0.last
2853
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2854
+ r0.extend(ObsResentFrom0)
2855
+ else
2856
+ @index = i0
2857
+ r0 = nil
2858
+ end
2859
+
2860
+ node_cache[:obs_resent_from][start_index] = r0
2861
+
2862
+ r0
2863
+ end
2864
+
2865
+ module ObsResentSend0
2866
+ def mailbox
2867
+ elements[3]
2868
+ end
2869
+
2870
+ def CRLF
2871
+ elements[4]
2872
+ end
2873
+ end
2874
+
2875
+ def _nt_obs_resent_send
2876
+ start_index = index
2877
+ if node_cache[:obs_resent_send].has_key?(index)
2878
+ cached = node_cache[:obs_resent_send][index]
2879
+ @index = cached.interval.end if cached
2880
+ return cached
2881
+ end
2882
+
2883
+ i0, s0 = index, []
2884
+ if has_terminal?("Resent-Sender", false, index)
2885
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 13))
2886
+ @index += 13
2887
+ else
2888
+ terminal_parse_failure("Resent-Sender")
2889
+ r1 = nil
2890
+ end
2891
+ s0 << r1
2892
+ if r1
2893
+ s2, i2 = [], index
2894
+ loop do
2895
+ r3 = _nt_WSP
2896
+ if r3
2897
+ s2 << r3
2898
+ else
2899
+ break
2900
+ end
2901
+ end
2902
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2903
+ s0 << r2
2904
+ if r2
2905
+ if has_terminal?(":", false, index)
2906
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2907
+ @index += 1
2908
+ else
2909
+ terminal_parse_failure(":")
2910
+ r4 = nil
2911
+ end
2912
+ s0 << r4
2913
+ if r4
2914
+ r5 = _nt_mailbox
2915
+ s0 << r5
2916
+ if r5
2917
+ r6 = _nt_CRLF
2918
+ s0 << r6
2919
+ end
2920
+ end
2921
+ end
2922
+ end
2923
+ if s0.last
2924
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2925
+ r0.extend(ObsResentSend0)
2926
+ else
2927
+ @index = i0
2928
+ r0 = nil
2929
+ end
2930
+
2931
+ node_cache[:obs_resent_send][start_index] = r0
2932
+
2933
+ r0
2934
+ end
2935
+
2936
+ module ObsResentDate0
2937
+ def date_time
2938
+ elements[3]
2939
+ end
2940
+
2941
+ def CRLF
2942
+ elements[4]
2943
+ end
2944
+ end
2945
+
2946
+ def _nt_obs_resent_date
2947
+ start_index = index
2948
+ if node_cache[:obs_resent_date].has_key?(index)
2949
+ cached = node_cache[:obs_resent_date][index]
2950
+ @index = cached.interval.end if cached
2951
+ return cached
2952
+ end
2953
+
2954
+ i0, s0 = index, []
2955
+ if has_terminal?("Resent-Date", false, index)
2956
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 11))
2957
+ @index += 11
2958
+ else
2959
+ terminal_parse_failure("Resent-Date")
2960
+ r1 = nil
2961
+ end
2962
+ s0 << r1
2963
+ if r1
2964
+ s2, i2 = [], index
2965
+ loop do
2966
+ r3 = _nt_WSP
2967
+ if r3
2968
+ s2 << r3
2969
+ else
2970
+ break
2971
+ end
2972
+ end
2973
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2974
+ s0 << r2
2975
+ if r2
2976
+ if has_terminal?(":", false, index)
2977
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2978
+ @index += 1
2979
+ else
2980
+ terminal_parse_failure(":")
2981
+ r4 = nil
2982
+ end
2983
+ s0 << r4
2984
+ if r4
2985
+ r5 = _nt_date_time
2986
+ s0 << r5
2987
+ if r5
2988
+ r6 = _nt_CRLF
2989
+ s0 << r6
2990
+ end
2991
+ end
2992
+ end
2993
+ end
2994
+ if s0.last
2995
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2996
+ r0.extend(ObsResentDate0)
2997
+ else
2998
+ @index = i0
2999
+ r0 = nil
3000
+ end
3001
+
3002
+ node_cache[:obs_resent_date][start_index] = r0
3003
+
3004
+ r0
3005
+ end
3006
+
3007
+ module ObsResentTo0
3008
+ def address_list
3009
+ elements[3]
3010
+ end
3011
+
3012
+ def CRLF
3013
+ elements[4]
3014
+ end
3015
+ end
3016
+
3017
+ def _nt_obs_resent_to
3018
+ start_index = index
3019
+ if node_cache[:obs_resent_to].has_key?(index)
3020
+ cached = node_cache[:obs_resent_to][index]
3021
+ @index = cached.interval.end if cached
3022
+ return cached
3023
+ end
3024
+
3025
+ i0, s0 = index, []
3026
+ if has_terminal?("Resent-To", false, index)
3027
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 9))
3028
+ @index += 9
3029
+ else
3030
+ terminal_parse_failure("Resent-To")
3031
+ r1 = nil
3032
+ end
3033
+ s0 << r1
3034
+ if r1
3035
+ s2, i2 = [], index
3036
+ loop do
3037
+ r3 = _nt_WSP
3038
+ if r3
3039
+ s2 << r3
3040
+ else
3041
+ break
3042
+ end
3043
+ end
3044
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3045
+ s0 << r2
3046
+ if r2
3047
+ if has_terminal?(":", false, index)
3048
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3049
+ @index += 1
3050
+ else
3051
+ terminal_parse_failure(":")
3052
+ r4 = nil
3053
+ end
3054
+ s0 << r4
3055
+ if r4
3056
+ r5 = _nt_address_list
3057
+ s0 << r5
3058
+ if r5
3059
+ r6 = _nt_CRLF
3060
+ s0 << r6
3061
+ end
3062
+ end
3063
+ end
3064
+ end
3065
+ if s0.last
3066
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3067
+ r0.extend(ObsResentTo0)
3068
+ else
3069
+ @index = i0
3070
+ r0 = nil
3071
+ end
3072
+
3073
+ node_cache[:obs_resent_to][start_index] = r0
3074
+
3075
+ r0
3076
+ end
3077
+
3078
+ module ObsResentCc0
3079
+ def address_list
3080
+ elements[3]
3081
+ end
3082
+
3083
+ def CRLF
3084
+ elements[4]
3085
+ end
3086
+ end
3087
+
3088
+ def _nt_obs_resent_cc
3089
+ start_index = index
3090
+ if node_cache[:obs_resent_cc].has_key?(index)
3091
+ cached = node_cache[:obs_resent_cc][index]
3092
+ @index = cached.interval.end if cached
3093
+ return cached
3094
+ end
3095
+
3096
+ i0, s0 = index, []
3097
+ if has_terminal?("Resent-Cc", false, index)
3098
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 9))
3099
+ @index += 9
3100
+ else
3101
+ terminal_parse_failure("Resent-Cc")
3102
+ r1 = nil
3103
+ end
3104
+ s0 << r1
3105
+ if r1
3106
+ s2, i2 = [], index
3107
+ loop do
3108
+ r3 = _nt_WSP
3109
+ if r3
3110
+ s2 << r3
3111
+ else
3112
+ break
3113
+ end
3114
+ end
3115
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3116
+ s0 << r2
3117
+ if r2
3118
+ if has_terminal?(":", false, index)
3119
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3120
+ @index += 1
3121
+ else
3122
+ terminal_parse_failure(":")
3123
+ r4 = nil
3124
+ end
3125
+ s0 << r4
3126
+ if r4
3127
+ r5 = _nt_address_list
3128
+ s0 << r5
3129
+ if r5
3130
+ r6 = _nt_CRLF
3131
+ s0 << r6
3132
+ end
3133
+ end
3134
+ end
3135
+ end
3136
+ if s0.last
3137
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3138
+ r0.extend(ObsResentCc0)
3139
+ else
3140
+ @index = i0
3141
+ r0 = nil
3142
+ end
3143
+
3144
+ node_cache[:obs_resent_cc][start_index] = r0
3145
+
3146
+ r0
3147
+ end
3148
+
3149
+ module ObsResentBcc0
3150
+ def CRLF
3151
+ elements[4]
3152
+ end
3153
+ end
3154
+
3155
+ def _nt_obs_resent_bcc
3156
+ start_index = index
3157
+ if node_cache[:obs_resent_bcc].has_key?(index)
3158
+ cached = node_cache[:obs_resent_bcc][index]
3159
+ @index = cached.interval.end if cached
3160
+ return cached
3161
+ end
3162
+
3163
+ i0, s0 = index, []
3164
+ if has_terminal?("Resent-Bcc", false, index)
3165
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 10))
3166
+ @index += 10
3167
+ else
3168
+ terminal_parse_failure("Resent-Bcc")
3169
+ r1 = nil
3170
+ end
3171
+ s0 << r1
3172
+ if r1
3173
+ s2, i2 = [], index
3174
+ loop do
3175
+ r3 = _nt_WSP
3176
+ if r3
3177
+ s2 << r3
3178
+ else
3179
+ break
3180
+ end
3181
+ end
3182
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3183
+ s0 << r2
3184
+ if r2
3185
+ if has_terminal?(":", false, index)
3186
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3187
+ @index += 1
3188
+ else
3189
+ terminal_parse_failure(":")
3190
+ r4 = nil
3191
+ end
3192
+ s0 << r4
3193
+ if r4
3194
+ i5 = index
3195
+ r6 = _nt_address_list
3196
+ if r6
3197
+ r5 = r6
3198
+ else
3199
+ r8 = _nt_CFWS
3200
+ if r8
3201
+ r7 = r8
3202
+ else
3203
+ r7 = instantiate_node(SyntaxNode,input, index...index)
3204
+ end
3205
+ if r7
3206
+ r5 = r7
3207
+ else
3208
+ @index = i5
3209
+ r5 = nil
3210
+ end
3211
+ end
3212
+ s0 << r5
3213
+ if r5
3214
+ r9 = _nt_CRLF
3215
+ s0 << r9
3216
+ end
3217
+ end
3218
+ end
3219
+ end
3220
+ if s0.last
3221
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3222
+ r0.extend(ObsResentBcc0)
3223
+ else
3224
+ @index = i0
3225
+ r0 = nil
3226
+ end
3227
+
3228
+ node_cache[:obs_resent_bcc][start_index] = r0
3229
+
3230
+ r0
3231
+ end
3232
+
3233
+ module ObsResentMid0
3234
+ def msg_id
3235
+ elements[3]
3236
+ end
3237
+
3238
+ def CRLF
3239
+ elements[4]
3240
+ end
3241
+ end
3242
+
3243
+ def _nt_obs_resent_mid
3244
+ start_index = index
3245
+ if node_cache[:obs_resent_mid].has_key?(index)
3246
+ cached = node_cache[:obs_resent_mid][index]
3247
+ @index = cached.interval.end if cached
3248
+ return cached
3249
+ end
3250
+
3251
+ i0, s0 = index, []
3252
+ if has_terminal?("Resent-Message-ID", false, index)
3253
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 17))
3254
+ @index += 17
3255
+ else
3256
+ terminal_parse_failure("Resent-Message-ID")
3257
+ r1 = nil
3258
+ end
3259
+ s0 << r1
3260
+ if r1
3261
+ s2, i2 = [], index
3262
+ loop do
3263
+ r3 = _nt_WSP
3264
+ if r3
3265
+ s2 << r3
3266
+ else
3267
+ break
3268
+ end
3269
+ end
3270
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3271
+ s0 << r2
3272
+ if r2
3273
+ if has_terminal?(":", false, index)
3274
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3275
+ @index += 1
3276
+ else
3277
+ terminal_parse_failure(":")
3278
+ r4 = nil
3279
+ end
3280
+ s0 << r4
3281
+ if r4
3282
+ r5 = _nt_msg_id
3283
+ s0 << r5
3284
+ if r5
3285
+ r6 = _nt_CRLF
3286
+ s0 << r6
3287
+ end
3288
+ end
3289
+ end
3290
+ end
3291
+ if s0.last
3292
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3293
+ r0.extend(ObsResentMid0)
3294
+ else
3295
+ @index = i0
3296
+ r0 = nil
3297
+ end
3298
+
3299
+ node_cache[:obs_resent_mid][start_index] = r0
3300
+
3301
+ r0
3302
+ end
3303
+
3304
+ module ObsResentRply0
3305
+ def address_list
3306
+ elements[3]
3307
+ end
3308
+
3309
+ def CRLF
3310
+ elements[4]
3311
+ end
3312
+ end
3313
+
3314
+ def _nt_obs_resent_rply
3315
+ start_index = index
3316
+ if node_cache[:obs_resent_rply].has_key?(index)
3317
+ cached = node_cache[:obs_resent_rply][index]
3318
+ @index = cached.interval.end if cached
3319
+ return cached
3320
+ end
3321
+
3322
+ i0, s0 = index, []
3323
+ if has_terminal?("Resent-Reply-To", false, index)
3324
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 15))
3325
+ @index += 15
3326
+ else
3327
+ terminal_parse_failure("Resent-Reply-To")
3328
+ r1 = nil
3329
+ end
3330
+ s0 << r1
3331
+ if r1
3332
+ s2, i2 = [], index
3333
+ loop do
3334
+ r3 = _nt_WSP
3335
+ if r3
3336
+ s2 << r3
3337
+ else
3338
+ break
3339
+ end
3340
+ end
3341
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3342
+ s0 << r2
3343
+ if r2
3344
+ if has_terminal?(":", false, index)
3345
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3346
+ @index += 1
3347
+ else
3348
+ terminal_parse_failure(":")
3349
+ r4 = nil
3350
+ end
3351
+ s0 << r4
3352
+ if r4
3353
+ r5 = _nt_address_list
3354
+ s0 << r5
3355
+ if r5
3356
+ r6 = _nt_CRLF
3357
+ s0 << r6
3358
+ end
3359
+ end
3360
+ end
3361
+ end
3362
+ if s0.last
3363
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3364
+ r0.extend(ObsResentRply0)
3365
+ else
3366
+ @index = i0
3367
+ r0 = nil
3368
+ end
3369
+
3370
+ node_cache[:obs_resent_rply][start_index] = r0
3371
+
3372
+ r0
3373
+ end
3374
+
3375
+ module ObsReturn0
3376
+ def path
3377
+ elements[3]
3378
+ end
3379
+
3380
+ def CRLF
3381
+ elements[4]
3382
+ end
3383
+ end
3384
+
3385
+ def _nt_obs_return
3386
+ start_index = index
3387
+ if node_cache[:obs_return].has_key?(index)
3388
+ cached = node_cache[:obs_return][index]
3389
+ @index = cached.interval.end if cached
3390
+ return cached
3391
+ end
3392
+
3393
+ i0, s0 = index, []
3394
+ if has_terminal?("Return-Path", false, index)
3395
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 11))
3396
+ @index += 11
3397
+ else
3398
+ terminal_parse_failure("Return-Path")
3399
+ r1 = nil
3400
+ end
3401
+ s0 << r1
3402
+ if r1
3403
+ s2, i2 = [], index
3404
+ loop do
3405
+ r3 = _nt_WSP
3406
+ if r3
3407
+ s2 << r3
3408
+ else
3409
+ break
3410
+ end
3411
+ end
3412
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3413
+ s0 << r2
3414
+ if r2
3415
+ if has_terminal?(":", false, index)
3416
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3417
+ @index += 1
3418
+ else
3419
+ terminal_parse_failure(":")
3420
+ r4 = nil
3421
+ end
3422
+ s0 << r4
3423
+ if r4
3424
+ r5 = _nt_path
3425
+ s0 << r5
3426
+ if r5
3427
+ r6 = _nt_CRLF
3428
+ s0 << r6
3429
+ end
3430
+ end
3431
+ end
3432
+ end
3433
+ if s0.last
3434
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3435
+ r0.extend(ObsReturn0)
3436
+ else
3437
+ @index = i0
3438
+ r0 = nil
3439
+ end
3440
+
3441
+ node_cache[:obs_return][start_index] = r0
3442
+
3443
+ r0
3444
+ end
3445
+
3446
+ module ObsReceived0
3447
+ def name_val_list
3448
+ elements[3]
3449
+ end
3450
+
3451
+ def CRLF
3452
+ elements[4]
3453
+ end
3454
+ end
3455
+
3456
+ def _nt_obs_received
3457
+ start_index = index
3458
+ if node_cache[:obs_received].has_key?(index)
3459
+ cached = node_cache[:obs_received][index]
3460
+ @index = cached.interval.end if cached
3461
+ return cached
3462
+ end
3463
+
3464
+ i0, s0 = index, []
3465
+ if has_terminal?("Received", false, index)
3466
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
3467
+ @index += 8
3468
+ else
3469
+ terminal_parse_failure("Received")
3470
+ r1 = nil
3471
+ end
3472
+ s0 << r1
3473
+ if r1
3474
+ s2, i2 = [], index
3475
+ loop do
3476
+ r3 = _nt_WSP
3477
+ if r3
3478
+ s2 << r3
3479
+ else
3480
+ break
3481
+ end
3482
+ end
3483
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3484
+ s0 << r2
3485
+ if r2
3486
+ if has_terminal?(":", false, index)
3487
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3488
+ @index += 1
3489
+ else
3490
+ terminal_parse_failure(":")
3491
+ r4 = nil
3492
+ end
3493
+ s0 << r4
3494
+ if r4
3495
+ r5 = _nt_name_val_list
3496
+ s0 << r5
3497
+ if r5
3498
+ r6 = _nt_CRLF
3499
+ s0 << r6
3500
+ end
3501
+ end
3502
+ end
3503
+ end
3504
+ if s0.last
3505
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3506
+ r0.extend(ObsReceived0)
3507
+ else
3508
+ @index = i0
3509
+ r0 = nil
3510
+ end
3511
+
3512
+ node_cache[:obs_received][start_index] = r0
3513
+
3514
+ r0
3515
+ end
3516
+
3517
+ def _nt_obs_path
3518
+ start_index = index
3519
+ if node_cache[:obs_path].has_key?(index)
3520
+ cached = node_cache[:obs_path][index]
3521
+ @index = cached.interval.end if cached
3522
+ return cached
3523
+ end
3524
+
3525
+ r0 = _nt_obs_angle_addr
3526
+
3527
+ node_cache[:obs_path][start_index] = r0
3528
+
3529
+ r0
3530
+ end
3531
+
3532
+ module ObsOptional0
3533
+ def field_name
3534
+ elements[0]
3535
+ end
3536
+
3537
+ def unstructured
3538
+ elements[3]
3539
+ end
3540
+
3541
+ def CRLF
3542
+ elements[4]
3543
+ end
3544
+ end
3545
+
3546
+ def _nt_obs_optional
3547
+ start_index = index
3548
+ if node_cache[:obs_optional].has_key?(index)
3549
+ cached = node_cache[:obs_optional][index]
3550
+ @index = cached.interval.end if cached
3551
+ return cached
3552
+ end
3553
+
3554
+ i0, s0 = index, []
3555
+ r1 = _nt_field_name
3556
+ s0 << r1
3557
+ if r1
3558
+ s2, i2 = [], index
3559
+ loop do
3560
+ r3 = _nt_WSP
3561
+ if r3
3562
+ s2 << r3
3563
+ else
3564
+ break
3565
+ end
3566
+ end
3567
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3568
+ s0 << r2
3569
+ if r2
3570
+ if has_terminal?(":", false, index)
3571
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3572
+ @index += 1
3573
+ else
3574
+ terminal_parse_failure(":")
3575
+ r4 = nil
3576
+ end
3577
+ s0 << r4
3578
+ if r4
3579
+ r5 = _nt_unstructured
3580
+ s0 << r5
3581
+ if r5
3582
+ r6 = _nt_CRLF
3583
+ s0 << r6
3584
+ end
3585
+ end
3586
+ end
3587
+ end
3588
+ if s0.last
3589
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3590
+ r0.extend(ObsOptional0)
3591
+ else
3592
+ @index = i0
3593
+ r0 = nil
3594
+ end
3595
+
3596
+ node_cache[:obs_optional][start_index] = r0
3597
+
3598
+ r0
3599
+ end
3600
+
3601
+ end
3602
+
3603
+ class RFC2822ObsoleteParser < Treetop::Runtime::CompiledParser
3604
+ include RFC2822Obsolete
3605
+ end
3606
+
3607
+ end