kbaum-mail 2.1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/CHANGELOG.rdoc +289 -0
  2. data/README.rdoc +575 -0
  3. data/Rakefile +72 -0
  4. data/TODO.rdoc +19 -0
  5. data/lib/mail.rb +113 -0
  6. data/lib/mail/attachments_list.rb +76 -0
  7. data/lib/mail/body.rb +243 -0
  8. data/lib/mail/configuration.rb +69 -0
  9. data/lib/mail/core_extensions/nil.rb +11 -0
  10. data/lib/mail/core_extensions/string.rb +19 -0
  11. data/lib/mail/elements/address.rb +306 -0
  12. data/lib/mail/elements/address_list.rb +74 -0
  13. data/lib/mail/elements/content_disposition_element.rb +30 -0
  14. data/lib/mail/elements/content_location_element.rb +25 -0
  15. data/lib/mail/elements/content_transfer_encoding_element.rb +21 -0
  16. data/lib/mail/elements/content_type_element.rb +35 -0
  17. data/lib/mail/elements/date_time_element.rb +26 -0
  18. data/lib/mail/elements/envelope_from_element.rb +34 -0
  19. data/lib/mail/elements/message_ids_element.rb +29 -0
  20. data/lib/mail/elements/mime_version_element.rb +26 -0
  21. data/lib/mail/elements/phrase_list.rb +21 -0
  22. data/lib/mail/elements/received_element.rb +30 -0
  23. data/lib/mail/encodings/base64.rb +18 -0
  24. data/lib/mail/encodings/encodings.rb +201 -0
  25. data/lib/mail/encodings/quoted_printable.rb +26 -0
  26. data/lib/mail/envelope.rb +35 -0
  27. data/lib/mail/field.rb +219 -0
  28. data/lib/mail/field_list.rb +33 -0
  29. data/lib/mail/fields/bcc_field.rb +53 -0
  30. data/lib/mail/fields/cc_field.rb +52 -0
  31. data/lib/mail/fields/comments_field.rb +41 -0
  32. data/lib/mail/fields/common/address_container.rb +16 -0
  33. data/lib/mail/fields/common/common_address.rb +128 -0
  34. data/lib/mail/fields/common/common_date.rb +51 -0
  35. data/lib/mail/fields/common/common_field.rb +64 -0
  36. data/lib/mail/fields/common/common_message_id.rb +57 -0
  37. data/lib/mail/fields/common/parameter_hash.rb +39 -0
  38. data/lib/mail/fields/content_description_field.rb +19 -0
  39. data/lib/mail/fields/content_disposition_field.rb +60 -0
  40. data/lib/mail/fields/content_id_field.rb +63 -0
  41. data/lib/mail/fields/content_location_field.rb +42 -0
  42. data/lib/mail/fields/content_transfer_encoding_field.rb +45 -0
  43. data/lib/mail/fields/content_type_field.rb +175 -0
  44. data/lib/mail/fields/date_field.rb +53 -0
  45. data/lib/mail/fields/from_field.rb +53 -0
  46. data/lib/mail/fields/in_reply_to_field.rb +52 -0
  47. data/lib/mail/fields/keywords_field.rb +43 -0
  48. data/lib/mail/fields/message_id_field.rb +80 -0
  49. data/lib/mail/fields/mime_version_field.rb +54 -0
  50. data/lib/mail/fields/optional_field.rb +11 -0
  51. data/lib/mail/fields/received_field.rb +62 -0
  52. data/lib/mail/fields/references_field.rb +53 -0
  53. data/lib/mail/fields/reply_to_field.rb +53 -0
  54. data/lib/mail/fields/resent_bcc_field.rb +53 -0
  55. data/lib/mail/fields/resent_cc_field.rb +53 -0
  56. data/lib/mail/fields/resent_date_field.rb +33 -0
  57. data/lib/mail/fields/resent_from_field.rb +53 -0
  58. data/lib/mail/fields/resent_message_id_field.rb +32 -0
  59. data/lib/mail/fields/resent_sender_field.rb +60 -0
  60. data/lib/mail/fields/resent_to_field.rb +53 -0
  61. data/lib/mail/fields/return_path_field.rb +62 -0
  62. data/lib/mail/fields/sender_field.rb +65 -0
  63. data/lib/mail/fields/structured_field.rb +36 -0
  64. data/lib/mail/fields/subject_field.rb +15 -0
  65. data/lib/mail/fields/to_field.rb +53 -0
  66. data/lib/mail/fields/unstructured_field.rb +117 -0
  67. data/lib/mail/header.rb +235 -0
  68. data/lib/mail/mail.rb +194 -0
  69. data/lib/mail/message.rb +1780 -0
  70. data/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
  71. data/lib/mail/network/delivery_methods/sendmail.rb +62 -0
  72. data/lib/mail/network/delivery_methods/smtp.rb +110 -0
  73. data/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
  74. data/lib/mail/network/retriever_methods/imap.rb +31 -0
  75. data/lib/mail/network/retriever_methods/pop3.rb +149 -0
  76. data/lib/mail/parsers/address_lists.rb +61 -0
  77. data/lib/mail/parsers/address_lists.treetop +19 -0
  78. data/lib/mail/parsers/content_disposition.rb +369 -0
  79. data/lib/mail/parsers/content_disposition.treetop +46 -0
  80. data/lib/mail/parsers/content_location.rb +133 -0
  81. data/lib/mail/parsers/content_location.treetop +20 -0
  82. data/lib/mail/parsers/content_transfer_encoding.rb +179 -0
  83. data/lib/mail/parsers/content_transfer_encoding.treetop +25 -0
  84. data/lib/mail/parsers/content_type.rb +512 -0
  85. data/lib/mail/parsers/content_type.treetop +58 -0
  86. data/lib/mail/parsers/date_time.rb +111 -0
  87. data/lib/mail/parsers/date_time.treetop +11 -0
  88. data/lib/mail/parsers/envelope_from.rb +188 -0
  89. data/lib/mail/parsers/envelope_from.treetop +32 -0
  90. data/lib/mail/parsers/message_ids.rb +42 -0
  91. data/lib/mail/parsers/message_ids.treetop +15 -0
  92. data/lib/mail/parsers/mime_version.rb +141 -0
  93. data/lib/mail/parsers/mime_version.treetop +19 -0
  94. data/lib/mail/parsers/phrase_lists.rb +42 -0
  95. data/lib/mail/parsers/phrase_lists.treetop +15 -0
  96. data/lib/mail/parsers/received.rb +68 -0
  97. data/lib/mail/parsers/received.treetop +11 -0
  98. data/lib/mail/parsers/rfc2045.rb +406 -0
  99. data/lib/mail/parsers/rfc2045.treetop +35 -0
  100. data/lib/mail/parsers/rfc2822.rb +5081 -0
  101. data/lib/mail/parsers/rfc2822.treetop +410 -0
  102. data/lib/mail/parsers/rfc2822_obsolete.rb +3607 -0
  103. data/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  104. data/lib/mail/part.rb +82 -0
  105. data/lib/mail/parts_list.rb +34 -0
  106. data/lib/mail/patterns.rb +43 -0
  107. data/lib/mail/utilities.rb +163 -0
  108. data/lib/mail/vendor/treetop.rb +4 -0
  109. data/lib/mail/version.rb +10 -0
  110. data/lib/mail/version_specific/ruby_1_8.rb +84 -0
  111. data/lib/mail/version_specific/ruby_1_9.rb +77 -0
  112. data/lib/tasks/corpus.rake +125 -0
  113. data/lib/tasks/treetop.rake +10 -0
  114. metadata +188 -0
@@ -0,0 +1,410 @@
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 mtext
89
+ (atext / ".")+
90
+ end
91
+
92
+ rule atom
93
+ CFWS? atext+ CFWS?
94
+ end
95
+
96
+ rule dot_atom
97
+ CFWS? dot_atom_text CFWS?
98
+ end
99
+
100
+ rule local_dot_atom
101
+ CFWS? local_dot_atom_text CFWS?
102
+ end
103
+
104
+ rule message_id_text
105
+ mtext+
106
+ end
107
+
108
+ rule dot_atom_text
109
+ (domain_text "."?)+
110
+ end
111
+
112
+ rule local_dot_atom_text
113
+ ("."* domain_text)+
114
+ end
115
+
116
+ rule domain_text
117
+ (DQUOTE (FWS? quoted_domain)+ FWS? DQUOTE) / atext+
118
+ end
119
+
120
+ rule quoted_domain
121
+ qdcontent / "\\" text
122
+ end
123
+
124
+ rule qdcontent
125
+ NO_WS_CTL / # Non white space controls
126
+ [\x21] / # The rest of the US-ASCII
127
+ [\x23-\x45] / # characters not including "\"
128
+ [\x47-\x5b] / # or the "." or the
129
+ [\x5d-\x7e] # double quote character
130
+ end
131
+
132
+ rule word
133
+ atom / quoted_string
134
+ end
135
+
136
+ rule phrase_list
137
+ first_phrase:phrase other_phrases:("," FWS* phrase_value:phrase)*
138
+ end
139
+
140
+ rule phrase
141
+ obs_phrase / word+
142
+ end
143
+
144
+ rule domain_literal
145
+ CFWS? "[" (FWS? dcontent)* FWS? "]" CFWS?
146
+ end
147
+
148
+ rule dcontent
149
+ dtext / quoted_pair
150
+ end
151
+
152
+ rule dtext
153
+ NO_WS_CTL / # Non white space controls
154
+ [\x21-\x5a] / # The rest of the US-ASCII characters
155
+ [\x5e-\x7e] # not including "[", "]", or "\"
156
+ end
157
+
158
+ rule angle_addr
159
+ CFWS? "<" addr_spec ">" CFWS? / obs_angle_addr
160
+ end
161
+
162
+ rule addr_spec
163
+ (local_part "@" domain) / local_part
164
+ end
165
+
166
+ rule local_part
167
+ local_dot_atom / quoted_string / obs_local_part
168
+ end
169
+
170
+ rule domain
171
+ dot_atom / domain_literal / obs_domain
172
+ end
173
+
174
+ rule group
175
+ group_name:display_name ":" group_list:(mailbox_list_group / CFWS)? ";" CFWS?
176
+ end
177
+
178
+ rule mailbox_list_group
179
+ mailbox_list {
180
+ def addresses
181
+ [first_addr] + other_addr.elements.map { |o| o.addr_value }
182
+ end
183
+ }
184
+ end
185
+
186
+ rule quoted_string
187
+ CFWS? DQUOTE quoted_content:(FWS? qcontent)+ FWS? DQUOTE CFWS?
188
+ end
189
+
190
+ rule qcontent
191
+ qtext / quoted_pair
192
+ end
193
+
194
+ rule quoted_pair
195
+ ("\\" text) / obs_qp
196
+ end
197
+
198
+ rule qtext
199
+ NO_WS_CTL / # Non white space controls
200
+ [\x21] / # The rest of the US-ASCII
201
+ [\x23-\x5b] / # characters not including "\"
202
+ [\x5d-\x7e] # or the quote character
203
+ end
204
+
205
+ rule text
206
+ [\x01-\x09] / # Characters excluding CR and LF
207
+ [\x0b-\x0c] /
208
+ [\x0e-\x7e] /
209
+ obs_text
210
+ end
211
+
212
+ rule display_name
213
+ phrase
214
+ end
215
+
216
+ rule name_addr
217
+ display_name angle_addr / angle_addr
218
+ end
219
+
220
+ rule mailbox_list
221
+ (first_addr:mailbox other_addr:("," addr_value:mailbox)*) / obs_mbox_list
222
+ end
223
+
224
+ rule mailbox
225
+ name_addr / addr_spec
226
+ end
227
+
228
+ rule address
229
+ group {
230
+
231
+ def dig_comments(comments, elements)
232
+ elements.each { |elem|
233
+ if elem.respond_to?(:comment)
234
+ comments << elem.comment
235
+ end
236
+ dig_comments(comments, elem.elements) if elem.elements
237
+ }
238
+ end
239
+
240
+ def comments
241
+ comments = []
242
+ dig_comments(comments, elements)
243
+ comments
244
+ end
245
+
246
+ } /
247
+ mailbox {
248
+
249
+ def dig_comments(comments, elements)
250
+ elements.each { |elem|
251
+ if elem.respond_to?(:comment)
252
+ comments << elem.comment
253
+ end
254
+ dig_comments(comments, elem.elements) if elem.elements
255
+ }
256
+ end
257
+
258
+ def comments
259
+ comments = []
260
+ dig_comments(comments, elements)
261
+ comments
262
+ end
263
+
264
+ }
265
+ end
266
+
267
+ rule address_list
268
+ first_addr:address other_addr:("," FWS* addr_value:address)*
269
+ end
270
+
271
+ rule date_time
272
+ ( day_of_week ",")? date FWS time CFWS?
273
+ end
274
+
275
+ rule day_of_week
276
+ (FWS? day_name) / obs_day_of_week
277
+ end
278
+
279
+ rule day_name
280
+ "Mon" / "Tue" / "Wed" / "Thu" /
281
+ "Fri" / "Sat" / "Sun"
282
+ end
283
+
284
+ rule date
285
+ day month year
286
+ end
287
+
288
+ rule year
289
+ DIGIT DIGIT DIGIT DIGIT / obs_year
290
+ end
291
+
292
+ rule month
293
+ (FWS month_name FWS) / obs_month
294
+ end
295
+
296
+ rule month_name
297
+ "Jan" / "Feb" / "Mar" / "Apr" /
298
+ "May" / "Jun" / "Jul" / "Aug" /
299
+ "Sep" / "Oct" / "Nov" / "Dec"
300
+ end
301
+
302
+ rule day
303
+ (FWS? DIGIT DIGIT?) / obs_day
304
+ end
305
+
306
+ rule time
307
+ time_of_day FWS zone
308
+ end
309
+
310
+ rule time_of_day
311
+ hour ":" minute ( ":" second )?
312
+ end
313
+
314
+ rule hour
315
+ DIGIT DIGIT / obs_hour
316
+ end
317
+
318
+ rule minute
319
+ DIGIT DIGIT / obs_minute
320
+ end
321
+
322
+ rule second
323
+ DIGIT DIGIT / obs_second
324
+ end
325
+
326
+ rule zone
327
+ (( "+" / "-" ) DIGIT DIGIT DIGIT DIGIT) / obs_zone
328
+ end
329
+
330
+ rule return
331
+ path CRLF
332
+ end
333
+
334
+ rule path
335
+ ((CFWS)? "<" ((CFWS)? / addr_spec) ">" (CFWS)?) / obs_path
336
+ end
337
+
338
+ rule received
339
+ name_val_list ";" date_time CRLF
340
+ end
341
+
342
+ rule name_val_list
343
+ (CFWS)? (name_val_pair (CFWS name_val_pair)*)
344
+ end
345
+
346
+ rule name_val_pair
347
+ item_name CFWS item_value
348
+ end
349
+
350
+ rule item_name
351
+ ALPHA (("-")? (ALPHA / DIGIT))*
352
+ end
353
+
354
+ rule item_value
355
+ (angle_addr)+ / addr_spec / atom / domain / msg_id
356
+ end
357
+
358
+ rule message_ids
359
+ first_msg_id:msg_id other_msg_ids:( CFWS msg_id_value:msg_id )*
360
+ end
361
+
362
+ rule msg_id
363
+ (CFWS)? "<" msg_id_value ">" (CFWS)?
364
+ end
365
+
366
+ rule msg_id_value
367
+ id_left "@" id_right
368
+ end
369
+
370
+ rule id_left
371
+ message_id_text / no_fold_quote / obs_id_left
372
+ end
373
+
374
+ rule id_right
375
+ msg_id_dot_atom_text / no_fold_literal / obs_id_right
376
+ end
377
+
378
+ rule msg_id_dot_atom_text
379
+ (msg_id_domain_text "."?)+
380
+ end
381
+
382
+ rule msg_id_domain_text
383
+ (DQUOTE (FWS? quoted_domain)+ FWS? DQUOTE) / msg_id_atext+
384
+ end
385
+
386
+ rule msg_id_atext
387
+ ALPHA / DIGIT / # Any character except controls,
388
+ "!" / "#" / # SP, and specials.
389
+ "$" / "%" / # Used for atoms
390
+ "&" / "'" /
391
+ "*" / "+" /
392
+ "-" / "/" /
393
+ "=" / "?" /
394
+ "^" / "_" /
395
+ "`" / "{" /
396
+ "|" / "}" /
397
+ "~" / "@"
398
+ end
399
+
400
+ rule no_fold_quote
401
+ DQUOTE (qtext / quoted_pair)+ DQUOTE
402
+ end
403
+
404
+ rule no_fold_literal
405
+ "[" (dtext / quoted_pair)+ "]"
406
+ end
407
+
408
+
409
+ end
410
+ 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