File Coverage

blib/lib/Mail/IMAPClient/BodyStructure/Parse.pm
Criterion Covered Total %
statement 5715 6620 86.3
branch 1589 3454 46.0
condition 422 961 43.9
subroutine 351 354 99.1
pod 0 1 0.0
total 8077 11390 70.9


line stmt bran cond sub pod time code
1             package Mail::IMAPClient::BodyStructure::Parse;
2 1     1   1203 use Parse::RecDescent;
  1         43351  
  1         10  
3             { my $ERRORS;
4              
5              
6             package Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse;
7 1     1   68 use strict;
  1         2  
  1         26  
8 1     1   5 use vars qw($skip $AUTOLOAD );
  1         2  
  1         232  
9             @Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ISA = ();
10             $skip = '\s*';
11              
12             my $mibs = "Mail::IMAPClient::BodyStructure";
13             my $subpartCount = 0;
14             my $partCount = 0;
15              
16             sub take_optional_items($$@)
17 153     153   451 { my ($r, $items) = (shift, shift);
18 153         500 foreach (@_)
19 795         1567 { my $opt = $_ .'(?)';
20 795 50       1636 exists $items->{$opt} or next;
21             $r->{$_} = UNIVERSAL::isa($items->{$opt}, 'ARRAY')
22 795 50       3181 ? $items->{$opt}[0] : $items->{$opt};
23             }
24             }
25              
26             sub merge_hash($$)
27 54     54   96 { my $to = shift;
28 54 100       210 my $from = shift or return;
29 12         83 while( my($k,$v) = each %$from) { $to->{$k} = $v }
  72         270  
30             }
31             ;
32              
33              
34             {
35             local $SIG{__WARN__} = sub {0};
36             # PRETEND TO BE IN Parse::RecDescent NAMESPACE
37             *Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::AUTOLOAD = sub
38             {
39 1     1   7 no strict 'refs';
  1         3  
  1         106  
40              
41 0     0   0 ${"AUTOLOAD"} =~ s/^Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse/Parse::RecDescent/;
  0         0  
42 0         0 goto &{${"AUTOLOAD"}};
  0         0  
  0         0  
43             }
44             }
45              
46             push @Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ISA, 'Parse::RecDescent';
47             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
48             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct
49             {
50 25     25   655 my $thisparser = $_[0];
51 1     1   6 use vars q{$tracelevel};
  1         2  
  1         475  
52 25   100     96 local $tracelevel = ($tracelevel||0)+1;
53 25         50 $ERRORS = 0;
54 25         80 my $thisrule = $thisparser->{"rules"}{"envelopestruct"};
55              
56 25 50       73 Parse::RecDescent::_trace(q{Trying rule: [envelopestruct]},
57             Parse::RecDescent::_tracefirst($_[1]),
58             q{envelopestruct},
59             $tracelevel)
60             if defined $::RD_TRACE;
61              
62 25         48 my $def_at = @{$thisparser->{deferred}};
  25         93  
63 25         55 my $err_at = @{$thisparser->{errors}};
  25         62  
64              
65 25         76 my $score;
66             my $score_return;
67 25         0 my $_tok;
68 25         37 my $return = undef;
69 25         47 my $_matched=0;
70 25         61 my $commit=0;
71 25         69 my @item = ();
72 25         52 my %item = ();
73 25         51 my $repeating = $_[2];
74 25         48 my $_noactions = $_[3];
75 25 50       69 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  25         39  
  25         75  
76 25         79 my $_itempos = $_[5];
77 25 50       105 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
78 25         68 my $text;
79             my $lastsep;
80 25         0 my $current_match;
81 25         73 my $expectation = new Parse::RecDescent::Expectation(q{'('});
82 25         199 $expectation->at($_[1]);
83            
84 25         110 my $thisline;
85 25         118 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
86              
87            
88              
89 25   33     270 while (!$_matched && !$commit)
90             {
91            
92 25 50       70 Parse::RecDescent::_trace(q{Trying production: ['(' date subject from sender replyto to cc bcc inreplyto messageid ')']},
93             Parse::RecDescent::_tracefirst($_[1]),
94             q{envelopestruct},
95             $tracelevel)
96             if defined $::RD_TRACE;
97 25         90 my $thisprod = $thisrule->{"prods"}[0];
98 25         59 $text = $_[1];
99 25         43 my $_savetext;
100 25         80 @item = (q{envelopestruct});
101 25         88 %item = (__RULE__ => q{envelopestruct});
102 25         79 my $repcount = 0;
103              
104              
105 25 50       72 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
106             Parse::RecDescent::_tracefirst($text),
107             q{envelopestruct},
108             $tracelevel)
109             if defined $::RD_TRACE;
110 25         69 undef $lastsep;
111 25         82 $expectation->is(q{})->at($text);
112            
113              
114 25 100 33     371 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  25 100 66     301  
  25   66     60  
  25         194  
115             substr($text,0,length($_tok)) eq $_tok and
116 24         70 do { substr($text,0,length($_tok)) = ""; 1; }
  24         100  
117             )
118             {
119 1 50       6 $text = $lastsep . $text if defined $lastsep;
120            
121 1         5 $expectation->failed();
122 1 50       6 Parse::RecDescent::_trace(q{<>},
123             Parse::RecDescent::_tracefirst($text))
124             if defined $::RD_TRACE;
125 1         3 last;
126             }
127 24 50       84 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
128             . $_tok . q{])},
129             Parse::RecDescent::_tracefirst($text))
130             if defined $::RD_TRACE;
131 24         109 push @item, $item{__STRING1__}=$_tok;
132            
133              
134 24 50       75 Parse::RecDescent::_trace(q{Trying subrule: [date]},
135             Parse::RecDescent::_tracefirst($text),
136             q{envelopestruct},
137             $tracelevel)
138             if defined $::RD_TRACE;
139 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         166  
  24         46  
140 24         80 $expectation->is(q{date})->at($text);
141 24 50   24   391 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::date($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         62  
142             {
143            
144 0 0       0 Parse::RecDescent::_trace(q{<>},
145             Parse::RecDescent::_tracefirst($text),
146             q{envelopestruct},
147             $tracelevel)
148             if defined $::RD_TRACE;
149 0         0 $expectation->failed();
150 0         0 last;
151             }
152 24 50       116 Parse::RecDescent::_trace(q{>>Matched subrule: [date]<< (return value: [}
153             . $_tok . q{]},
154              
155             Parse::RecDescent::_tracefirst($text),
156             q{envelopestruct},
157             $tracelevel)
158             if defined $::RD_TRACE;
159 24         75 $item{q{date}} = $_tok;
160 24         69 push @item, $_tok;
161            
162             }
163              
164 24 50       83 Parse::RecDescent::_trace(q{Trying subrule: [subject]},
165             Parse::RecDescent::_tracefirst($text),
166             q{envelopestruct},
167             $tracelevel)
168             if defined $::RD_TRACE;
169 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         179  
  24         53  
170 24         93 $expectation->is(q{subject})->at($text);
171 24 50   24   377 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subject($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         65  
172             {
173            
174 0 0       0 Parse::RecDescent::_trace(q{<>},
175             Parse::RecDescent::_tracefirst($text),
176             q{envelopestruct},
177             $tracelevel)
178             if defined $::RD_TRACE;
179 0         0 $expectation->failed();
180 0         0 last;
181             }
182 24 50       101 Parse::RecDescent::_trace(q{>>Matched subrule: [subject]<< (return value: [}
183             . $_tok . q{]},
184              
185             Parse::RecDescent::_tracefirst($text),
186             q{envelopestruct},
187             $tracelevel)
188             if defined $::RD_TRACE;
189 24         75 $item{q{subject}} = $_tok;
190 24         54 push @item, $_tok;
191            
192             }
193              
194 24 50       72 Parse::RecDescent::_trace(q{Trying subrule: [from]},
195             Parse::RecDescent::_tracefirst($text),
196             q{envelopestruct},
197             $tracelevel)
198             if defined $::RD_TRACE;
199 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         216  
  24         47  
200 24         87 $expectation->is(q{from})->at($text);
201 24 50   24   375 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::from($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         75  
202             {
203            
204 0 0       0 Parse::RecDescent::_trace(q{<>},
205             Parse::RecDescent::_tracefirst($text),
206             q{envelopestruct},
207             $tracelevel)
208             if defined $::RD_TRACE;
209 0         0 $expectation->failed();
210 0         0 last;
211             }
212 24 50       110 Parse::RecDescent::_trace(q{>>Matched subrule: [from]<< (return value: [}
213             . $_tok . q{]},
214              
215             Parse::RecDescent::_tracefirst($text),
216             q{envelopestruct},
217             $tracelevel)
218             if defined $::RD_TRACE;
219 24         83 $item{q{from}} = $_tok;
220 24         57 push @item, $_tok;
221            
222             }
223              
224 24 50       83 Parse::RecDescent::_trace(q{Trying subrule: [sender]},
225             Parse::RecDescent::_tracefirst($text),
226             q{envelopestruct},
227             $tracelevel)
228             if defined $::RD_TRACE;
229 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         228  
  24         49  
230 24         85 $expectation->is(q{sender})->at($text);
231 24 50   24   338 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sender($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         56  
232             {
233            
234 0 0       0 Parse::RecDescent::_trace(q{<>},
235             Parse::RecDescent::_tracefirst($text),
236             q{envelopestruct},
237             $tracelevel)
238             if defined $::RD_TRACE;
239 0         0 $expectation->failed();
240 0         0 last;
241             }
242 24 50       103 Parse::RecDescent::_trace(q{>>Matched subrule: [sender]<< (return value: [}
243             . $_tok . q{]},
244              
245             Parse::RecDescent::_tracefirst($text),
246             q{envelopestruct},
247             $tracelevel)
248             if defined $::RD_TRACE;
249 24         92 $item{q{sender}} = $_tok;
250 24         66 push @item, $_tok;
251            
252             }
253              
254 24 50       82 Parse::RecDescent::_trace(q{Trying subrule: [replyto]},
255             Parse::RecDescent::_tracefirst($text),
256             q{envelopestruct},
257             $tracelevel)
258             if defined $::RD_TRACE;
259 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         154  
  24         46  
260 24         84 $expectation->is(q{replyto})->at($text);
261 24 50   24   339 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::replyto($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         62  
262             {
263            
264 0 0       0 Parse::RecDescent::_trace(q{<>},
265             Parse::RecDescent::_tracefirst($text),
266             q{envelopestruct},
267             $tracelevel)
268             if defined $::RD_TRACE;
269 0         0 $expectation->failed();
270 0         0 last;
271             }
272 24 50       113 Parse::RecDescent::_trace(q{>>Matched subrule: [replyto]<< (return value: [}
273             . $_tok . q{]},
274              
275             Parse::RecDescent::_tracefirst($text),
276             q{envelopestruct},
277             $tracelevel)
278             if defined $::RD_TRACE;
279 24         79 $item{q{replyto}} = $_tok;
280 24         67 push @item, $_tok;
281            
282             }
283              
284 24 50       78 Parse::RecDescent::_trace(q{Trying subrule: [to]},
285             Parse::RecDescent::_tracefirst($text),
286             q{envelopestruct},
287             $tracelevel)
288             if defined $::RD_TRACE;
289 1     1   8 if (1) { no strict qw{refs};
  1         1  
  1         206  
  24         55  
290 24         95 $expectation->is(q{to})->at($text);
291 24 50   24   346 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::to($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         67  
292             {
293            
294 0 0       0 Parse::RecDescent::_trace(q{<>},
295             Parse::RecDescent::_tracefirst($text),
296             q{envelopestruct},
297             $tracelevel)
298             if defined $::RD_TRACE;
299 0         0 $expectation->failed();
300 0         0 last;
301             }
302 24 50       120 Parse::RecDescent::_trace(q{>>Matched subrule: [to]<< (return value: [}
303             . $_tok . q{]},
304              
305             Parse::RecDescent::_tracefirst($text),
306             q{envelopestruct},
307             $tracelevel)
308             if defined $::RD_TRACE;
309 24         71 $item{q{to}} = $_tok;
310 24         72 push @item, $_tok;
311            
312             }
313              
314 24 50       69 Parse::RecDescent::_trace(q{Trying subrule: [cc]},
315             Parse::RecDescent::_tracefirst($text),
316             q{envelopestruct},
317             $tracelevel)
318             if defined $::RD_TRACE;
319 1     1   7 if (1) { no strict qw{refs};
  1         3  
  1         187  
  24         79  
320 24         97 $expectation->is(q{cc})->at($text);
321 24 50   24   348 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::cc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         53  
322             {
323            
324 0 0       0 Parse::RecDescent::_trace(q{<>},
325             Parse::RecDescent::_tracefirst($text),
326             q{envelopestruct},
327             $tracelevel)
328             if defined $::RD_TRACE;
329 0         0 $expectation->failed();
330 0         0 last;
331             }
332 24 50       104 Parse::RecDescent::_trace(q{>>Matched subrule: [cc]<< (return value: [}
333             . $_tok . q{]},
334              
335             Parse::RecDescent::_tracefirst($text),
336             q{envelopestruct},
337             $tracelevel)
338             if defined $::RD_TRACE;
339 24         83 $item{q{cc}} = $_tok;
340 24         82 push @item, $_tok;
341            
342             }
343              
344 24 50       85 Parse::RecDescent::_trace(q{Trying subrule: [bcc]},
345             Parse::RecDescent::_tracefirst($text),
346             q{envelopestruct},
347             $tracelevel)
348             if defined $::RD_TRACE;
349 1     1   7 if (1) { no strict qw{refs};
  1         3  
  1         200  
  24         40  
350 24         95 $expectation->is(q{bcc})->at($text);
351 24 50   24   368 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bcc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         72  
352             {
353            
354 0 0       0 Parse::RecDescent::_trace(q{<>},
355             Parse::RecDescent::_tracefirst($text),
356             q{envelopestruct},
357             $tracelevel)
358             if defined $::RD_TRACE;
359 0         0 $expectation->failed();
360 0         0 last;
361             }
362 24 50       107 Parse::RecDescent::_trace(q{>>Matched subrule: [bcc]<< (return value: [}
363             . $_tok . q{]},
364              
365             Parse::RecDescent::_tracefirst($text),
366             q{envelopestruct},
367             $tracelevel)
368             if defined $::RD_TRACE;
369 24         84 $item{q{bcc}} = $_tok;
370 24         60 push @item, $_tok;
371            
372             }
373              
374 24 50       103 Parse::RecDescent::_trace(q{Trying subrule: [inreplyto]},
375             Parse::RecDescent::_tracefirst($text),
376             q{envelopestruct},
377             $tracelevel)
378             if defined $::RD_TRACE;
379 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         147  
  24         52  
380 24         83 $expectation->is(q{inreplyto})->at($text);
381 24 50   24   332 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::inreplyto($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         62  
382             {
383            
384 0 0       0 Parse::RecDescent::_trace(q{<>},
385             Parse::RecDescent::_tracefirst($text),
386             q{envelopestruct},
387             $tracelevel)
388             if defined $::RD_TRACE;
389 0         0 $expectation->failed();
390 0         0 last;
391             }
392 24 50       96 Parse::RecDescent::_trace(q{>>Matched subrule: [inreplyto]<< (return value: [}
393             . $_tok . q{]},
394              
395             Parse::RecDescent::_tracefirst($text),
396             q{envelopestruct},
397             $tracelevel)
398             if defined $::RD_TRACE;
399 24         80 $item{q{inreplyto}} = $_tok;
400 24         57 push @item, $_tok;
401            
402             }
403              
404 24 50       71 Parse::RecDescent::_trace(q{Trying subrule: [messageid]},
405             Parse::RecDescent::_tracefirst($text),
406             q{envelopestruct},
407             $tracelevel)
408             if defined $::RD_TRACE;
409 1     1   7 if (1) { no strict qw{refs};
  1         4  
  1         832  
  24         39  
410 24         81 $expectation->is(q{messageid})->at($text);
411 24 50   24   359 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::messageid($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         63  
412             {
413            
414 0 0       0 Parse::RecDescent::_trace(q{<>},
415             Parse::RecDescent::_tracefirst($text),
416             q{envelopestruct},
417             $tracelevel)
418             if defined $::RD_TRACE;
419 0         0 $expectation->failed();
420 0         0 last;
421             }
422 24 50       105 Parse::RecDescent::_trace(q{>>Matched subrule: [messageid]<< (return value: [}
423             . $_tok . q{]},
424              
425             Parse::RecDescent::_tracefirst($text),
426             q{envelopestruct},
427             $tracelevel)
428             if defined $::RD_TRACE;
429 24         107 $item{q{messageid}} = $_tok;
430 24         84 push @item, $_tok;
431            
432             }
433              
434 24 50       65 Parse::RecDescent::_trace(q{Trying terminal: [')']},
435             Parse::RecDescent::_tracefirst($text),
436             q{envelopestruct},
437             $tracelevel)
438             if defined $::RD_TRACE;
439 24         60 undef $lastsep;
440 24         96 $expectation->is(q{')'})->at($text);
441            
442              
443 24 50 33     354 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  24 50 33     208  
  24   33     80  
  24         173  
444             substr($text,0,length($_tok)) eq $_tok and
445 24         67 do { substr($text,0,length($_tok)) = ""; 1; }
  24         85  
446             )
447             {
448 0 0       0 $text = $lastsep . $text if defined $lastsep;
449            
450 0         0 $expectation->failed();
451 0 0       0 Parse::RecDescent::_trace(q{<>},
452             Parse::RecDescent::_tracefirst($text))
453             if defined $::RD_TRACE;
454 0         0 last;
455             }
456 24 50       83 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
457             . $_tok . q{])},
458             Parse::RecDescent::_tracefirst($text))
459             if defined $::RD_TRACE;
460 24         87 push @item, $item{__STRING2__}=$_tok;
461            
462              
463 24 50       71 Parse::RecDescent::_trace(q{Trying action},
464             Parse::RecDescent::_tracefirst($text),
465             q{envelopestruct},
466             $tracelevel)
467             if defined $::RD_TRACE;
468            
469              
470 24 50       85 $_tok = ($_noactions) ? 0 : do { $return = bless {}, "Mail::IMAPClient::BodyStructure::Envelope";
  24         91  
471             $return->{$_} = $item{$_}
472 24         421 for qw/date subject from sender replyto to cc/
473             , qw/bcc inreplyto messageid/;
474 24         61 1;
475             };
476 24 50       107 unless (defined $_tok)
477             {
478 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
479             if defined $::RD_TRACE;
480 0         0 last;
481             }
482 24 50       92 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
483             . $_tok . q{])},
484             Parse::RecDescent::_tracefirst($text))
485             if defined $::RD_TRACE;
486 24         56 push @item, $_tok;
487 24         54 $item{__ACTION1__}=$_tok;
488            
489              
490 24 50       83 Parse::RecDescent::_trace(q{>>Matched production: ['(' date subject from sender replyto to cc bcc inreplyto messageid ')']<<},
491             Parse::RecDescent::_tracefirst($text),
492             q{envelopestruct},
493             $tracelevel)
494             if defined $::RD_TRACE;
495              
496              
497              
498 24         45 $_matched = 1;
499 24         80 last;
500             }
501              
502             splice
503 25 100       75 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         4  
504            
505 25 100 66     95 unless ( $_matched || defined($score) )
506             {
507 1         3 splice @{$thisparser->{deferred}}, $def_at;
  1         3  
508            
509              
510 1         3 $_[1] = $text; # NOT SURE THIS IS NEEDED
511 1 50       3 Parse::RecDescent::_trace(q{<>},
512             Parse::RecDescent::_tracefirst($_[1]),
513             q{envelopestruct},
514             $tracelevel)
515             if defined $::RD_TRACE;
516 1         5 return undef;
517             }
518 24 50 33     89 if (!defined($return) && defined($score))
519             {
520 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
521             q{envelopestruct},
522             $tracelevel)
523             if defined $::RD_TRACE;
524 0         0 $return = $score_return;
525             }
526 24         46 splice @{$thisparser->{errors}}, $err_at;
  24         66  
527 24 50       73 $return = $item[$#item] unless defined $return;
528 24 50       77 if (defined $::RD_TRACE)
529             {
530 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
531             $return . q{])}, "",
532             q{envelopestruct},
533             $tracelevel);
534 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
535             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
536             Parse::RecDescent::_tracefirst($text),
537             , q{envelopestruct},
538             $tracelevel)
539             }
540 24         99 $_[1] = $text;
541 24         300 return $return;
542             }
543              
544             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
545             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subpart
546             {
547 195     195   3587 my $thisparser = $_[0];
548 1     1   7 use vars q{$tracelevel};
  1         3  
  1         505  
549 195   50     648 local $tracelevel = ($tracelevel||0)+1;
550 195         343 $ERRORS = 0;
551 195         476 my $thisrule = $thisparser->{"rules"}{"subpart"};
552              
553 195 50       552 Parse::RecDescent::_trace(q{Trying rule: [subpart]},
554             Parse::RecDescent::_tracefirst($_[1]),
555             q{subpart},
556             $tracelevel)
557             if defined $::RD_TRACE;
558              
559 195         368 my $def_at = @{$thisparser->{deferred}};
  195         447  
560 195         329 my $err_at = @{$thisparser->{errors}};
  195         426  
561              
562 195         602 my $score;
563             my $score_return;
564 195         0 my $_tok;
565 195         329 my $return = undef;
566 195         407 my $_matched=0;
567 195         351 my $commit=0;
568 195         363 my @item = ();
569 195         359 my %item = ();
570 195         625 my $repeating = $_[2];
571 195         316 my $_noactions = $_[3];
572 195 50       584 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  195         321  
  195         407  
573 195         375 my $_itempos = $_[5];
574 195 50       514 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
575 195         642 my $text;
576             my $lastsep;
577 195         0 my $current_match;
578 195         516 my $expectation = new Parse::RecDescent::Expectation(q{'('});
579 195         1529 $expectation->at($_[1]);
580            
581 195         826 my $thisline;
582 195         691 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
583              
584            
585              
586 195   33     1702 while (!$_matched && !$commit)
587             {
588            
589 195 50       505 Parse::RecDescent::_trace(q{Trying production: ['(' part ')' ]},
590             Parse::RecDescent::_tracefirst($_[1]),
591             q{subpart},
592             $tracelevel)
593             if defined $::RD_TRACE;
594 195         547 my $thisprod = $thisrule->{"prods"}[0];
595 195         368 $text = $_[1];
596 195         796 my $_savetext;
597 195         431 @item = (q{subpart});
598 195         579 %item = (__RULE__ => q{subpart});
599 195         367 my $repcount = 0;
600              
601              
602 195 50       507 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
603             Parse::RecDescent::_tracefirst($text),
604             q{subpart},
605             $tracelevel)
606             if defined $::RD_TRACE;
607 195         421 undef $lastsep;
608 195         557 $expectation->is(q{})->at($text);
609            
610              
611 195 100 33     2463 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  195 100 66     1630  
  195   66     446  
  195         1197  
612             substr($text,0,length($_tok)) eq $_tok and
613 73         196 do { substr($text,0,length($_tok)) = ""; 1; }
  73         308  
614             )
615             {
616 122 50       737 $text = $lastsep . $text if defined $lastsep;
617            
618 122         525 $expectation->failed();
619 122 50       551 Parse::RecDescent::_trace(q{<>},
620             Parse::RecDescent::_tracefirst($text))
621             if defined $::RD_TRACE;
622 122         302 last;
623             }
624 73 50       237 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
625             . $_tok . q{])},
626             Parse::RecDescent::_tracefirst($text))
627             if defined $::RD_TRACE;
628 73         236 push @item, $item{__STRING1__}=$_tok;
629            
630              
631 73 50       249 Parse::RecDescent::_trace(q{Trying subrule: [part]},
632             Parse::RecDescent::_tracefirst($text),
633             q{subpart},
634             $tracelevel)
635             if defined $::RD_TRACE;
636 1     1   9 if (1) { no strict qw{refs};
  1         2  
  1         805  
  73         119  
637 73         229 $expectation->is(q{part})->at($text);
638 73 50   73   1108 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  73         180  
639             {
640            
641 0 0       0 Parse::RecDescent::_trace(q{<>},
642             Parse::RecDescent::_tracefirst($text),
643             q{subpart},
644             $tracelevel)
645             if defined $::RD_TRACE;
646 0         0 $expectation->failed();
647 0         0 last;
648             }
649 73 50       486 Parse::RecDescent::_trace(q{>>Matched subrule: [part]<< (return value: [}
650             . $_tok . q{]},
651              
652             Parse::RecDescent::_tracefirst($text),
653             q{subpart},
654             $tracelevel)
655             if defined $::RD_TRACE;
656 73         212 $item{q{part}} = $_tok;
657 73         168 push @item, $_tok;
658            
659             }
660              
661 73 50       208 Parse::RecDescent::_trace(q{Trying terminal: [')']},
662             Parse::RecDescent::_tracefirst($text),
663             q{subpart},
664             $tracelevel)
665             if defined $::RD_TRACE;
666 73         181 undef $lastsep;
667 73         304 $expectation->is(q{')'})->at($text);
668            
669              
670 73 50 33     1123 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  73 50 33     728  
  73   33     159  
  73         597  
671             substr($text,0,length($_tok)) eq $_tok and
672 73         250 do { substr($text,0,length($_tok)) = ""; 1; }
  73         253  
673             )
674             {
675 0 0       0 $text = $lastsep . $text if defined $lastsep;
676            
677 0         0 $expectation->failed();
678 0 0       0 Parse::RecDescent::_trace(q{<>},
679             Parse::RecDescent::_tracefirst($text))
680             if defined $::RD_TRACE;
681 0         0 last;
682             }
683 73 50       259 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
684             . $_tok . q{])},
685             Parse::RecDescent::_tracefirst($text))
686             if defined $::RD_TRACE;
687 73         249 push @item, $item{__STRING2__}=$_tok;
688            
689              
690 73 50       255 Parse::RecDescent::_trace(q{Trying action},
691             Parse::RecDescent::_tracefirst($text),
692             q{subpart},
693             $tracelevel)
694             if defined $::RD_TRACE;
695            
696              
697 73 50       228 $_tok = ($_noactions) ? 0 : do {$return = $item{part}};
  73         188  
698 73 50       231 unless (defined $_tok)
699             {
700 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
701             if defined $::RD_TRACE;
702 0         0 last;
703             }
704 73 50       206 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
705             . $_tok . q{])},
706             Parse::RecDescent::_tracefirst($text))
707             if defined $::RD_TRACE;
708 73         137 push @item, $_tok;
709 73         141 $item{__ACTION1__}=$_tok;
710            
711              
712            
713              
714 73 50       214 Parse::RecDescent::_trace(q{Trying directive: []},
715             Parse::RecDescent::_tracefirst($text),
716             q{subpart},
717             $tracelevel)
718             if defined $::RD_TRACE;
719 73     73   128 $_tok = do { push @{$thisparser->{deferred}}, sub { ++$subpartCount; }; };
  73         112  
  73         490  
  73         349  
720 73 50       255 if (defined($_tok))
721             {
722 73 50       264 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
723             . $_tok . q{])},
724             Parse::RecDescent::_tracefirst($text))
725             if defined $::RD_TRACE;
726             }
727             else
728             {
729 0 0       0 Parse::RecDescent::_trace(q{<>},
730             Parse::RecDescent::_tracefirst($text))
731             if defined $::RD_TRACE;
732             }
733            
734 73 50       199 last unless defined $_tok;
735 73         246 push @item, $item{__DIRECTIVE1__}=$_tok;
736            
737              
738 73 50       256 Parse::RecDescent::_trace(q{>>Matched production: ['(' part ')' ]<<},
739             Parse::RecDescent::_tracefirst($text),
740             q{subpart},
741             $tracelevel)
742             if defined $::RD_TRACE;
743              
744              
745              
746 73         135 $_matched = 1;
747 73         212 last;
748             }
749              
750             splice
751 195 100       685 @{$thisparser->{deferred}}, $def_at unless $_matched;
  122         320  
752            
753 195 100 66     748 unless ( $_matched || defined($score) )
754             {
755 122         223 splice @{$thisparser->{deferred}}, $def_at;
  122         308  
756            
757              
758 122         279 $_[1] = $text; # NOT SURE THIS IS NEEDED
759 122 50       430 Parse::RecDescent::_trace(q{<>},
760             Parse::RecDescent::_tracefirst($_[1]),
761             q{subpart},
762             $tracelevel)
763             if defined $::RD_TRACE;
764 122         669 return undef;
765             }
766 73 50 33     342 if (!defined($return) && defined($score))
767             {
768 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
769             q{subpart},
770             $tracelevel)
771             if defined $::RD_TRACE;
772 0         0 $return = $score_return;
773             }
774 73         126 splice @{$thisparser->{errors}}, $err_at;
  73         211  
775 73 50       191 $return = $item[$#item] unless defined $return;
776 73 50       237 if (defined $::RD_TRACE)
777             {
778 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
779             $return . q{])}, "",
780             q{subpart},
781             $tracelevel);
782 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
783             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
784             Parse::RecDescent::_tracefirst($text),
785             , q{subpart},
786             $tracelevel)
787             }
788 73         266 $_[1] = $text;
789 73         660 return $return;
790             }
791              
792             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
793             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL
794             {
795 1646     1646   2868 my $thisparser = $_[0];
796 1     1   8 use vars q{$tracelevel};
  1         3  
  1         916  
797 1646   50     4301 local $tracelevel = ($tracelevel||0)+1;
798 1646         2385 $ERRORS = 0;
799 1646         3198 my $thisrule = $thisparser->{"rules"}{"NIL"};
800              
801 1646 50       3169 Parse::RecDescent::_trace(q{Trying rule: [NIL]},
802             Parse::RecDescent::_tracefirst($_[1]),
803             q{NIL},
804             $tracelevel)
805             if defined $::RD_TRACE;
806              
807 1646         2185 my $def_at = @{$thisparser->{deferred}};
  1646         3125  
808 1646         2591 my $err_at = @{$thisparser->{errors}};
  1646         2519  
809              
810 1646         3645 my $score;
811             my $score_return;
812 1646         0 my $_tok;
813 1646         2727 my $return = undef;
814 1646         2219 my $_matched=0;
815 1646         2694 my $commit=0;
816 1646         2909 my @item = ();
817 1646         2354 my %item = ();
818 1646         2657 my $repeating = $_[2];
819 1646         2335 my $_noactions = $_[3];
820 1646 50       3471 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  1646         2399  
  1646         2937  
821 1646         2549 my $_itempos = $_[5];
822 1646 50       3355 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
823 1646         3716 my $text;
824             my $lastsep;
825 1646         0 my $current_match;
826 1646         3539 my $expectation = new Parse::RecDescent::Expectation(q{/^NIL/i});
827 1646         10396 $expectation->at($_[1]);
828            
829 1646         6711 my $thisline;
830 1646         4347 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
831              
832            
833              
834 1646   33     11827 while (!$_matched && !$commit)
835             {
836            
837 1646 50       3574 Parse::RecDescent::_trace(q{Trying production: [/^NIL/i]},
838             Parse::RecDescent::_tracefirst($_[1]),
839             q{NIL},
840             $tracelevel)
841             if defined $::RD_TRACE;
842 1646         3280 my $thisprod = $thisrule->{"prods"}[0];
843 1646         2826 $text = $_[1];
844 1646         2367 my $_savetext;
845 1646         3329 @item = (q{NIL});
846 1646         3467 %item = (__RULE__ => q{NIL});
847 1646         2493 my $repcount = 0;
848              
849              
850 1646 50       3790 Parse::RecDescent::_trace(q{Trying terminal: [/^NIL/i]}, Parse::RecDescent::_tracefirst($text),
851             q{NIL},
852             $tracelevel)
853             if defined $::RD_TRACE;
854 1646         2933 undef $lastsep;
855 1646         3459 $expectation->is(q{})->at($text);
856            
857              
858 1646 100 66     17934 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^NIL)/i)
  1646 100       15008  
859             {
860 1008 50       4883 $text = $lastsep . $text if defined $lastsep;
861 1008         3253 $expectation->failed();
862 1008 50       4232 Parse::RecDescent::_trace(q{<>},
863             Parse::RecDescent::_tracefirst($text))
864             if defined $::RD_TRACE;
865              
866 1008         2197 last;
867             }
868 638         3184 $current_match = substr($text, $-[0], $+[0] - $-[0]);
869 638         2381 substr($text,0,length($current_match),q{});
870 638 50       1416 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
871             . $current_match . q{])},
872             Parse::RecDescent::_tracefirst($text))
873             if defined $::RD_TRACE;
874 638         1852 push @item, $item{__PATTERN1__}=$current_match;
875            
876              
877 638 50       1263 Parse::RecDescent::_trace(q{Trying action},
878             Parse::RecDescent::_tracefirst($text),
879             q{NIL},
880             $tracelevel)
881             if defined $::RD_TRACE;
882            
883              
884 638 50       1213 $_tok = ($_noactions) ? 0 : do { $return = "NIL" };
  638         1188  
885 638 50       1420 unless (defined $_tok)
886             {
887 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
888             if defined $::RD_TRACE;
889 0         0 last;
890             }
891 638 50       1283 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
892             . $_tok . q{])},
893             Parse::RecDescent::_tracefirst($text))
894             if defined $::RD_TRACE;
895 638         1007 push @item, $_tok;
896 638         1125 $item{__ACTION1__}=$_tok;
897            
898              
899 638 50       1372 Parse::RecDescent::_trace(q{>>Matched production: [/^NIL/i]<<},
900             Parse::RecDescent::_tracefirst($text),
901             q{NIL},
902             $tracelevel)
903             if defined $::RD_TRACE;
904              
905              
906              
907 638         1025 $_matched = 1;
908 638         1281 last;
909             }
910              
911             splice
912 1646 100       3384 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1008         2607  
913            
914 1646 100 66     5006 unless ( $_matched || defined($score) )
915             {
916 1008         1464 splice @{$thisparser->{deferred}}, $def_at;
  1008         1709  
917            
918              
919 1008         1919 $_[1] = $text; # NOT SURE THIS IS NEEDED
920 1008 50       1954 Parse::RecDescent::_trace(q{<>},
921             Parse::RecDescent::_tracefirst($_[1]),
922             q{NIL},
923             $tracelevel)
924             if defined $::RD_TRACE;
925 1008         5945 return undef;
926             }
927 638 50 33     2594 if (!defined($return) && defined($score))
928             {
929 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
930             q{NIL},
931             $tracelevel)
932             if defined $::RD_TRACE;
933 0         0 $return = $score_return;
934             }
935 638         906 splice @{$thisparser->{errors}}, $err_at;
  638         1445  
936 638 50       1389 $return = $item[$#item] unless defined $return;
937 638 50       1231 if (defined $::RD_TRACE)
938             {
939 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
940             $return . q{])}, "",
941             q{NIL},
942             $tracelevel);
943 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
944             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
945             Parse::RecDescent::_tracefirst($text),
946             , q{NIL},
947             $tracelevel)
948             }
949 638         1784 $_[1] = $text;
950 638         4430 return $return;
951             }
952              
953             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
954             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::PLAIN
955             {
956 81     81   218 my $thisparser = $_[0];
957 1     1   14 use vars q{$tracelevel};
  1         3  
  1         869  
958 81   50     289 local $tracelevel = ($tracelevel||0)+1;
959 81         235 $ERRORS = 0;
960 81         225 my $thisrule = $thisparser->{"rules"}{"PLAIN"};
961              
962 81 50       267 Parse::RecDescent::_trace(q{Trying rule: [PLAIN]},
963             Parse::RecDescent::_tracefirst($_[1]),
964             q{PLAIN},
965             $tracelevel)
966             if defined $::RD_TRACE;
967              
968 81         121 my $def_at = @{$thisparser->{deferred}};
  81         220  
969 81         145 my $err_at = @{$thisparser->{errors}};
  81         182  
970              
971 81         260 my $score;
972             my $score_return;
973 81         0 my $_tok;
974 81         175 my $return = undef;
975 81         142 my $_matched=0;
976 81         143 my $commit=0;
977 81         175 my @item = ();
978 81         191 my %item = ();
979 81         152 my $repeating = $_[2];
980 81         155 my $_noactions = $_[3];
981 81 50       216 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  81         161  
  81         193  
982 81         185 my $_itempos = $_[5];
983 81 50       284 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
984 81         250 my $text;
985             my $lastsep;
986 81         0 my $current_match;
987 81         205 my $expectation = new Parse::RecDescent::Expectation(q{/^"PLAIN"|^PLAIN/i});
988 81         596 $expectation->at($_[1]);
989            
990 81         352 my $thisline;
991 81         279 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
992              
993            
994              
995 81   33     776 while (!$_matched && !$commit)
996             {
997            
998 81 50       266 Parse::RecDescent::_trace(q{Trying production: [/^"PLAIN"|^PLAIN/i]},
999             Parse::RecDescent::_tracefirst($_[1]),
1000             q{PLAIN},
1001             $tracelevel)
1002             if defined $::RD_TRACE;
1003 81         236 my $thisprod = $thisrule->{"prods"}[0];
1004 81         182 $text = $_[1];
1005 81         155 my $_savetext;
1006 81         253 @item = (q{PLAIN});
1007 81         221 %item = (__RULE__ => q{PLAIN});
1008 81         151 my $repcount = 0;
1009              
1010              
1011 81 50       232 Parse::RecDescent::_trace(q{Trying terminal: [/^"PLAIN"|^PLAIN/i]}, Parse::RecDescent::_tracefirst($text),
1012             q{PLAIN},
1013             $tracelevel)
1014             if defined $::RD_TRACE;
1015 81         182 undef $lastsep;
1016 81         297 $expectation->is(q{})->at($text);
1017            
1018              
1019 81 50 66     1088 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"PLAIN"|^PLAIN)/i)
  81 100       1110  
1020             {
1021 51 50       307 $text = $lastsep . $text if defined $lastsep;
1022 51         187 $expectation->failed();
1023 51 50       285 Parse::RecDescent::_trace(q{<>},
1024             Parse::RecDescent::_tracefirst($text))
1025             if defined $::RD_TRACE;
1026              
1027 51         144 last;
1028             }
1029 30         217 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1030 30         154 substr($text,0,length($current_match),q{});
1031 30 50       96 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1032             . $current_match . q{])},
1033             Parse::RecDescent::_tracefirst($text))
1034             if defined $::RD_TRACE;
1035 30         103 push @item, $item{__PATTERN1__}=$current_match;
1036            
1037              
1038 30 50       100 Parse::RecDescent::_trace(q{Trying action},
1039             Parse::RecDescent::_tracefirst($text),
1040             q{PLAIN},
1041             $tracelevel)
1042             if defined $::RD_TRACE;
1043            
1044              
1045 30 50       84 $_tok = ($_noactions) ? 0 : do { $return = "PLAIN" };
  30         82  
1046 30 50       100 unless (defined $_tok)
1047             {
1048 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
1049             if defined $::RD_TRACE;
1050 0         0 last;
1051             }
1052 30 50       89 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1053             . $_tok . q{])},
1054             Parse::RecDescent::_tracefirst($text))
1055             if defined $::RD_TRACE;
1056 30         59 push @item, $_tok;
1057 30         96 $item{__ACTION1__}=$_tok;
1058            
1059              
1060 30 50       104 Parse::RecDescent::_trace(q{>>Matched production: [/^"PLAIN"|^PLAIN/i]<<},
1061             Parse::RecDescent::_tracefirst($text),
1062             q{PLAIN},
1063             $tracelevel)
1064             if defined $::RD_TRACE;
1065              
1066              
1067              
1068 30         55 $_matched = 1;
1069 30         75 last;
1070             }
1071              
1072             splice
1073 81 100       287 @{$thisparser->{deferred}}, $def_at unless $_matched;
  51         145  
1074            
1075 81 100 66     348 unless ( $_matched || defined($score) )
1076             {
1077 51         110 splice @{$thisparser->{deferred}}, $def_at;
  51         128  
1078            
1079              
1080 51         106 $_[1] = $text; # NOT SURE THIS IS NEEDED
1081 51 50       137 Parse::RecDescent::_trace(q{<>},
1082             Parse::RecDescent::_tracefirst($_[1]),
1083             q{PLAIN},
1084             $tracelevel)
1085             if defined $::RD_TRACE;
1086 51         330 return undef;
1087             }
1088 30 50 33     120 if (!defined($return) && defined($score))
1089             {
1090 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1091             q{PLAIN},
1092             $tracelevel)
1093             if defined $::RD_TRACE;
1094 0         0 $return = $score_return;
1095             }
1096 30         54 splice @{$thisparser->{errors}}, $err_at;
  30         121  
1097 30 50       109 $return = $item[$#item] unless defined $return;
1098 30 50       117 if (defined $::RD_TRACE)
1099             {
1100 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1101             $return . q{])}, "",
1102             q{PLAIN},
1103             $tracelevel);
1104 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1105             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1106             Parse::RecDescent::_tracefirst($text),
1107             , q{PLAIN},
1108             $tracelevel)
1109             }
1110 30         134 $_[1] = $text;
1111 30         234 return $return;
1112             }
1113              
1114             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1115             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFC822
1116             {
1117 22     22   59 my $thisparser = $_[0];
1118 1     1   8 use vars q{$tracelevel};
  1         22  
  1         862  
1119 22   50     104 local $tracelevel = ($tracelevel||0)+1;
1120 22         55 $ERRORS = 0;
1121 22         72 my $thisrule = $thisparser->{"rules"}{"RFC822"};
1122              
1123 22 50       67 Parse::RecDescent::_trace(q{Trying rule: [RFC822]},
1124             Parse::RecDescent::_tracefirst($_[1]),
1125             q{RFC822},
1126             $tracelevel)
1127             if defined $::RD_TRACE;
1128              
1129 22         56 my $def_at = @{$thisparser->{deferred}};
  22         69  
1130 22         41 my $err_at = @{$thisparser->{errors}};
  22         69  
1131              
1132 22         67 my $score;
1133             my $score_return;
1134 22         0 my $_tok;
1135 22         42 my $return = undef;
1136 22         50 my $_matched=0;
1137 22         49 my $commit=0;
1138 22         50 my @item = ();
1139 22         46 my %item = ();
1140 22         41 my $repeating = $_[2];
1141 22         41 my $_noactions = $_[3];
1142 22 50       65 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  22         44  
  22         40  
1143 22         59 my $_itempos = $_[5];
1144 22 50       74 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1145 22         72 my $text;
1146             my $lastsep;
1147 22         0 my $current_match;
1148 22         61 my $expectation = new Parse::RecDescent::Expectation(q{/^"RFC822"|^RFC822/i});
1149 22         168 $expectation->at($_[1]);
1150            
1151 22         94 my $thisline;
1152 22         85 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1153              
1154            
1155              
1156 22   33     245 while (!$_matched && !$commit)
1157             {
1158            
1159 22 50       71 Parse::RecDescent::_trace(q{Trying production: [/^"RFC822"|^RFC822/i]},
1160             Parse::RecDescent::_tracefirst($_[1]),
1161             q{RFC822},
1162             $tracelevel)
1163             if defined $::RD_TRACE;
1164 22         80 my $thisprod = $thisrule->{"prods"}[0];
1165 22         84 $text = $_[1];
1166 22         53 my $_savetext;
1167 22         57 @item = (q{RFC822});
1168 22         81 %item = (__RULE__ => q{RFC822});
1169 22         45 my $repcount = 0;
1170              
1171              
1172 22 50       68 Parse::RecDescent::_trace(q{Trying terminal: [/^"RFC822"|^RFC822/i]}, Parse::RecDescent::_tracefirst($text),
1173             q{RFC822},
1174             $tracelevel)
1175             if defined $::RD_TRACE;
1176 22         55 undef $lastsep;
1177 22         69 $expectation->is(q{})->at($text);
1178            
1179              
1180 22 50 66     296 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"RFC822"|^RFC822)/i)
  22 100       326  
1181             {
1182 1 50       6 $text = $lastsep . $text if defined $lastsep;
1183 1         5 $expectation->failed();
1184 1 50       6 Parse::RecDescent::_trace(q{<>},
1185             Parse::RecDescent::_tracefirst($text))
1186             if defined $::RD_TRACE;
1187              
1188 1         3 last;
1189             }
1190 21         130 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1191 21         139 substr($text,0,length($current_match),q{});
1192 21 50       78 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1193             . $current_match . q{])},
1194             Parse::RecDescent::_tracefirst($text))
1195             if defined $::RD_TRACE;
1196 21         88 push @item, $item{__PATTERN1__}=$current_match;
1197            
1198              
1199 21 50       64 Parse::RecDescent::_trace(q{Trying action},
1200             Parse::RecDescent::_tracefirst($text),
1201             q{RFC822},
1202             $tracelevel)
1203             if defined $::RD_TRACE;
1204            
1205              
1206 21 50       63 $_tok = ($_noactions) ? 0 : do { $return = "RFC822" };
  21         56  
1207 21 50       97 unless (defined $_tok)
1208             {
1209 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
1210             if defined $::RD_TRACE;
1211 0         0 last;
1212             }
1213 21 50       59 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1214             . $_tok . q{])},
1215             Parse::RecDescent::_tracefirst($text))
1216             if defined $::RD_TRACE;
1217 21         40 push @item, $_tok;
1218 21         50 $item{__ACTION1__}=$_tok;
1219            
1220              
1221 21 50       68 Parse::RecDescent::_trace(q{>>Matched production: [/^"RFC822"|^RFC822/i]<<},
1222             Parse::RecDescent::_tracefirst($text),
1223             q{RFC822},
1224             $tracelevel)
1225             if defined $::RD_TRACE;
1226              
1227              
1228              
1229 21         52 $_matched = 1;
1230 21         62 last;
1231             }
1232              
1233             splice
1234 22 100       59 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         5  
1235            
1236 22 100 66     84 unless ( $_matched || defined($score) )
1237             {
1238 1         3 splice @{$thisparser->{deferred}}, $def_at;
  1         3  
1239            
1240              
1241 1         4 $_[1] = $text; # NOT SURE THIS IS NEEDED
1242 1 50       4 Parse::RecDescent::_trace(q{<>},
1243             Parse::RecDescent::_tracefirst($_[1]),
1244             q{RFC822},
1245             $tracelevel)
1246             if defined $::RD_TRACE;
1247 1         7 return undef;
1248             }
1249 21 50 33     71 if (!defined($return) && defined($score))
1250             {
1251 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1252             q{RFC822},
1253             $tracelevel)
1254             if defined $::RD_TRACE;
1255 0         0 $return = $score_return;
1256             }
1257 21         45 splice @{$thisparser->{errors}}, $err_at;
  21         71  
1258 21 50       69 $return = $item[$#item] unless defined $return;
1259 21 50       65 if (defined $::RD_TRACE)
1260             {
1261 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1262             $return . q{])}, "",
1263             q{RFC822},
1264             $tracelevel);
1265 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1266             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1267             Parse::RecDescent::_tracefirst($text),
1268             , q{RFC822},
1269             $tracelevel)
1270             }
1271 21         95 $_[1] = $text;
1272 21         154 return $return;
1273             }
1274              
1275             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1276             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype
1277             {
1278 81     81   177 my $thisparser = $_[0];
1279 1     1   9 use vars q{$tracelevel};
  1         2  
  1         331  
1280 81   50     290 local $tracelevel = ($tracelevel||0)+1;
1281 81         155 $ERRORS = 0;
1282 81         251 my $thisrule = $thisparser->{"rules"}{"bodysubtype"};
1283              
1284 81 50       277 Parse::RecDescent::_trace(q{Trying rule: [bodysubtype]},
1285             Parse::RecDescent::_tracefirst($_[1]),
1286             q{bodysubtype},
1287             $tracelevel)
1288             if defined $::RD_TRACE;
1289              
1290 81         123 my $def_at = @{$thisparser->{deferred}};
  81         211  
1291 81         149 my $err_at = @{$thisparser->{errors}};
  81         180  
1292              
1293 81         259 my $score;
1294             my $score_return;
1295 81         0 my $_tok;
1296 81         145 my $return = undef;
1297 81         151 my $_matched=0;
1298 81         131 my $commit=0;
1299 81         193 my @item = ();
1300 81         188 my %item = ();
1301 81         144 my $repeating = $_[2];
1302 81         135 my $_noactions = $_[3];
1303 81 50       201 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  81         160  
  81         185  
1304 81         172 my $_itempos = $_[5];
1305 81 50       300 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1306 81         247 my $text;
1307             my $lastsep;
1308 81         0 my $current_match;
1309 81         226 my $expectation = new Parse::RecDescent::Expectation(q{PLAIN, or HTML, or NIL, or STRING});
1310 81         636 $expectation->at($_[1]);
1311            
1312 81         439 my $thisline;
1313 81         328 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1314              
1315            
1316              
1317 81   33     923 while (!$_matched && !$commit)
1318             {
1319            
1320 81 50       254 Parse::RecDescent::_trace(q{Trying production: [PLAIN]},
1321             Parse::RecDescent::_tracefirst($_[1]),
1322             q{bodysubtype},
1323             $tracelevel)
1324             if defined $::RD_TRACE;
1325 81         256 my $thisprod = $thisrule->{"prods"}[0];
1326 81         169 $text = $_[1];
1327 81         129 my $_savetext;
1328 81         183 @item = (q{bodysubtype});
1329 81         227 %item = (__RULE__ => q{bodysubtype});
1330 81         136 my $repcount = 0;
1331              
1332              
1333 81 50       216 Parse::RecDescent::_trace(q{Trying subrule: [PLAIN]},
1334             Parse::RecDescent::_tracefirst($text),
1335             q{bodysubtype},
1336             $tracelevel)
1337             if defined $::RD_TRACE;
1338 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         314  
  81         136  
1339 81         259 $expectation->is(q{})->at($text);
1340 81 100   81   975 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::PLAIN($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  81         235  
1341             {
1342            
1343 51 50       167 Parse::RecDescent::_trace(q{<>},
1344             Parse::RecDescent::_tracefirst($text),
1345             q{bodysubtype},
1346             $tracelevel)
1347             if defined $::RD_TRACE;
1348 51         170 $expectation->failed();
1349 51         214 last;
1350             }
1351 30 50       160 Parse::RecDescent::_trace(q{>>Matched subrule: [PLAIN]<< (return value: [}
1352             . $_tok . q{]},
1353              
1354             Parse::RecDescent::_tracefirst($text),
1355             q{bodysubtype},
1356             $tracelevel)
1357             if defined $::RD_TRACE;
1358 30         101 $item{q{PLAIN}} = $_tok;
1359 30         89 push @item, $_tok;
1360            
1361             }
1362              
1363 30 50       102 Parse::RecDescent::_trace(q{>>Matched production: [PLAIN]<<},
1364             Parse::RecDescent::_tracefirst($text),
1365             q{bodysubtype},
1366             $tracelevel)
1367             if defined $::RD_TRACE;
1368              
1369              
1370              
1371 30         67 $_matched = 1;
1372 30         61 last;
1373             }
1374              
1375             splice
1376 81 100       340 @{$thisparser->{deferred}}, $def_at unless $_matched;
  51         150  
1377            
1378 81   66     397 while (!$_matched && !$commit)
1379             {
1380            
1381 51 50       189 Parse::RecDescent::_trace(q{Trying production: [HTML]},
1382             Parse::RecDescent::_tracefirst($_[1]),
1383             q{bodysubtype},
1384             $tracelevel)
1385             if defined $::RD_TRACE;
1386 51         148 my $thisprod = $thisrule->{"prods"}[1];
1387 51         108 $text = $_[1];
1388 51         92 my $_savetext;
1389 51         145 @item = (q{bodysubtype});
1390 51         141 %item = (__RULE__ => q{bodysubtype});
1391 51         151 my $repcount = 0;
1392              
1393              
1394 51 50       135 Parse::RecDescent::_trace(q{Trying subrule: [HTML]},
1395             Parse::RecDescent::_tracefirst($text),
1396             q{bodysubtype},
1397             $tracelevel)
1398             if defined $::RD_TRACE;
1399 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         290  
  51         114  
1400 51         186 $expectation->is(q{})->at($text);
1401 51 100   51   638 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::HTML($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  51         127  
1402             {
1403            
1404 43 50       138 Parse::RecDescent::_trace(q{<>},
1405             Parse::RecDescent::_tracefirst($text),
1406             q{bodysubtype},
1407             $tracelevel)
1408             if defined $::RD_TRACE;
1409 43         146 $expectation->failed();
1410 43         156 last;
1411             }
1412 8 50       37 Parse::RecDescent::_trace(q{>>Matched subrule: [HTML]<< (return value: [}
1413             . $_tok . q{]},
1414              
1415             Parse::RecDescent::_tracefirst($text),
1416             q{bodysubtype},
1417             $tracelevel)
1418             if defined $::RD_TRACE;
1419 8         21 $item{q{HTML}} = $_tok;
1420 8         20 push @item, $_tok;
1421            
1422             }
1423              
1424 8 50       24 Parse::RecDescent::_trace(q{>>Matched production: [HTML]<<},
1425             Parse::RecDescent::_tracefirst($text),
1426             q{bodysubtype},
1427             $tracelevel)
1428             if defined $::RD_TRACE;
1429              
1430              
1431              
1432 8         13 $_matched = 1;
1433 8         21 last;
1434             }
1435              
1436             splice
1437 81 100       353 @{$thisparser->{deferred}}, $def_at unless $_matched;
  43         114  
1438            
1439 81   66     360 while (!$_matched && !$commit)
1440             {
1441            
1442 43 50       130 Parse::RecDescent::_trace(q{Trying production: [NIL]},
1443             Parse::RecDescent::_tracefirst($_[1]),
1444             q{bodysubtype},
1445             $tracelevel)
1446             if defined $::RD_TRACE;
1447 43         104 my $thisprod = $thisrule->{"prods"}[2];
1448 43         89 $text = $_[1];
1449 43         72 my $_savetext;
1450 43         128 @item = (q{bodysubtype});
1451 43         138 %item = (__RULE__ => q{bodysubtype});
1452 43         89 my $repcount = 0;
1453              
1454              
1455 43 50       125 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
1456             Parse::RecDescent::_tracefirst($text),
1457             q{bodysubtype},
1458             $tracelevel)
1459             if defined $::RD_TRACE;
1460 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         297  
  43         89  
1461 43         118 $expectation->is(q{})->at($text);
1462 43 50   43   508 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  43         115  
1463             {
1464            
1465 43 50       139 Parse::RecDescent::_trace(q{<>},
1466             Parse::RecDescent::_tracefirst($text),
1467             q{bodysubtype},
1468             $tracelevel)
1469             if defined $::RD_TRACE;
1470 43         145 $expectation->failed();
1471 43         159 last;
1472             }
1473 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
1474             . $_tok . q{]},
1475              
1476             Parse::RecDescent::_tracefirst($text),
1477             q{bodysubtype},
1478             $tracelevel)
1479             if defined $::RD_TRACE;
1480 0         0 $item{q{NIL}} = $_tok;
1481 0         0 push @item, $_tok;
1482            
1483             }
1484              
1485 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
1486             Parse::RecDescent::_tracefirst($text),
1487             q{bodysubtype},
1488             $tracelevel)
1489             if defined $::RD_TRACE;
1490              
1491              
1492              
1493 0         0 $_matched = 1;
1494 0         0 last;
1495             }
1496              
1497             splice
1498 81 100       305 @{$thisparser->{deferred}}, $def_at unless $_matched;
  43         128  
1499            
1500 81   66     341 while (!$_matched && !$commit)
1501             {
1502            
1503 43 50       127 Parse::RecDescent::_trace(q{Trying production: [STRING]},
1504             Parse::RecDescent::_tracefirst($_[1]),
1505             q{bodysubtype},
1506             $tracelevel)
1507             if defined $::RD_TRACE;
1508 43         128 my $thisprod = $thisrule->{"prods"}[3];
1509 43         89 $text = $_[1];
1510 43         78 my $_savetext;
1511 43         123 @item = (q{bodysubtype});
1512 43         145 %item = (__RULE__ => q{bodysubtype});
1513 43         90 my $repcount = 0;
1514              
1515              
1516 43 50       139 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
1517             Parse::RecDescent::_tracefirst($text),
1518             q{bodysubtype},
1519             $tracelevel)
1520             if defined $::RD_TRACE;
1521 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         495  
  43         72  
1522 43         157 $expectation->is(q{})->at($text);
1523 43 50   43   465 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  43         95  
1524             {
1525            
1526 0 0       0 Parse::RecDescent::_trace(q{<>},
1527             Parse::RecDescent::_tracefirst($text),
1528             q{bodysubtype},
1529             $tracelevel)
1530             if defined $::RD_TRACE;
1531 0         0 $expectation->failed();
1532 0         0 last;
1533             }
1534 43 50       184 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
1535             . $_tok . q{]},
1536              
1537             Parse::RecDescent::_tracefirst($text),
1538             q{bodysubtype},
1539             $tracelevel)
1540             if defined $::RD_TRACE;
1541 43         112 $item{q{STRING}} = $_tok;
1542 43         120 push @item, $_tok;
1543            
1544             }
1545              
1546 43 50       139 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
1547             Parse::RecDescent::_tracefirst($text),
1548             q{bodysubtype},
1549             $tracelevel)
1550             if defined $::RD_TRACE;
1551              
1552              
1553              
1554 43         99 $_matched = 1;
1555 43         86 last;
1556             }
1557              
1558             splice
1559 81 50       241 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
1560            
1561 81 50 33     280 unless ( $_matched || defined($score) )
1562             {
1563 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
1564            
1565              
1566 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
1567 0 0       0 Parse::RecDescent::_trace(q{<>},
1568             Parse::RecDescent::_tracefirst($_[1]),
1569             q{bodysubtype},
1570             $tracelevel)
1571             if defined $::RD_TRACE;
1572 0         0 return undef;
1573             }
1574 81 50 33     400 if (!defined($return) && defined($score))
1575             {
1576 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1577             q{bodysubtype},
1578             $tracelevel)
1579             if defined $::RD_TRACE;
1580 0         0 $return = $score_return;
1581             }
1582 81         134 splice @{$thisparser->{errors}}, $err_at;
  81         211  
1583 81 50       274 $return = $item[$#item] unless defined $return;
1584 81 50       272 if (defined $::RD_TRACE)
1585             {
1586 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1587             $return . q{])}, "",
1588             q{bodysubtype},
1589             $tracelevel);
1590 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1591             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1592             Parse::RecDescent::_tracefirst($text),
1593             , q{bodysubtype},
1594             $tracelevel)
1595             }
1596 81         213 $_[1] = $text;
1597 81         520 return $return;
1598             }
1599              
1600             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1601             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::from
1602             {
1603 24     24   67 my $thisparser = $_[0];
1604 1     1   7 use vars q{$tracelevel};
  1         3  
  1         457  
1605 24   50     95 local $tracelevel = ($tracelevel||0)+1;
1606 24         61 $ERRORS = 0;
1607 24         75 my $thisrule = $thisparser->{"rules"}{"from"};
1608              
1609 24 50       72 Parse::RecDescent::_trace(q{Trying rule: [from]},
1610             Parse::RecDescent::_tracefirst($_[1]),
1611             q{from},
1612             $tracelevel)
1613             if defined $::RD_TRACE;
1614              
1615 24         51 my $def_at = @{$thisparser->{deferred}};
  24         61  
1616 24         50 my $err_at = @{$thisparser->{errors}};
  24         72  
1617              
1618 24         87 my $score;
1619             my $score_return;
1620 24         0 my $_tok;
1621 24         49 my $return = undef;
1622 24         43 my $_matched=0;
1623 24         49 my $commit=0;
1624 24         64 my @item = ();
1625 24         54 my %item = ();
1626 24         45 my $repeating = $_[2];
1627 24         45 my $_noactions = $_[3];
1628 24 50       77 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         37  
  24         62  
1629 24         54 my $_itempos = $_[5];
1630 24 50       84 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1631 24         79 my $text;
1632             my $lastsep;
1633 24         0 my $current_match;
1634 24         79 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
1635 24         220 $expectation->at($_[1]);
1636            
1637 24         123 my $thisline;
1638 24         105 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1639              
1640            
1641              
1642 24   33     264 while (!$_matched && !$commit)
1643             {
1644            
1645 24 50       77 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
1646             Parse::RecDescent::_tracefirst($_[1]),
1647             q{from},
1648             $tracelevel)
1649             if defined $::RD_TRACE;
1650 24         84 my $thisprod = $thisrule->{"prods"}[0];
1651 24         52 $text = $_[1];
1652 24         43 my $_savetext;
1653 24         98 @item = (q{from});
1654 24         73 %item = (__RULE__ => q{from});
1655 24         47 my $repcount = 0;
1656              
1657              
1658 24 50       61 Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]},
1659             Parse::RecDescent::_tracefirst($text),
1660             q{from},
1661             $tracelevel)
1662             if defined $::RD_TRACE;
1663 1     1   9 if (1) { no strict qw{refs};
  1         2  
  1         454  
  24         51  
1664 24         72 $expectation->is(q{})->at($text);
1665 24 50   24   305 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         66  
1666             {
1667            
1668 0 0       0 Parse::RecDescent::_trace(q{<>},
1669             Parse::RecDescent::_tracefirst($text),
1670             q{from},
1671             $tracelevel)
1672             if defined $::RD_TRACE;
1673 0         0 $expectation->failed();
1674 0         0 last;
1675             }
1676 24 50       104 Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [}
1677             . $_tok . q{]},
1678              
1679             Parse::RecDescent::_tracefirst($text),
1680             q{from},
1681             $tracelevel)
1682             if defined $::RD_TRACE;
1683 24         71 $item{q{ADDRESSES}} = $_tok;
1684 24         67 push @item, $_tok;
1685            
1686             }
1687              
1688 24 50       77 Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<},
1689             Parse::RecDescent::_tracefirst($text),
1690             q{from},
1691             $tracelevel)
1692             if defined $::RD_TRACE;
1693              
1694              
1695              
1696 24         50 $_matched = 1;
1697 24         55 last;
1698             }
1699              
1700             splice
1701 24 50       96 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
1702            
1703 24 50 33     99 unless ( $_matched || defined($score) )
1704             {
1705 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
1706            
1707              
1708 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
1709 0 0       0 Parse::RecDescent::_trace(q{<>},
1710             Parse::RecDescent::_tracefirst($_[1]),
1711             q{from},
1712             $tracelevel)
1713             if defined $::RD_TRACE;
1714 0         0 return undef;
1715             }
1716 24 50 33     135 if (!defined($return) && defined($score))
1717             {
1718 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1719             q{from},
1720             $tracelevel)
1721             if defined $::RD_TRACE;
1722 0         0 $return = $score_return;
1723             }
1724 24         54 splice @{$thisparser->{errors}}, $err_at;
  24         71  
1725 24 50       80 $return = $item[$#item] unless defined $return;
1726 24 50       67 if (defined $::RD_TRACE)
1727             {
1728 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1729             $return . q{])}, "",
1730             q{from},
1731             $tracelevel);
1732 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1733             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1734             Parse::RecDescent::_tracefirst($text),
1735             , q{from},
1736             $tracelevel)
1737             }
1738 24         69 $_[1] = $text;
1739 24         165 return $return;
1740             }
1741              
1742             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1743             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::multipart
1744             {
1745 122     122   299 my $thisparser = $_[0];
1746 1     1   8 use vars q{$tracelevel};
  1         2  
  1         538  
1747 122   50     467 local $tracelevel = ($tracelevel||0)+1;
1748 122         261 $ERRORS = 0;
1749 122         354 my $thisrule = $thisparser->{"rules"}{"multipart"};
1750              
1751 122 50       325 Parse::RecDescent::_trace(q{Trying rule: [multipart]},
1752             Parse::RecDescent::_tracefirst($_[1]),
1753             q{multipart},
1754             $tracelevel)
1755             if defined $::RD_TRACE;
1756              
1757 122         230 my $def_at = @{$thisparser->{deferred}};
  122         295  
1758 122         221 my $err_at = @{$thisparser->{errors}};
  122         278  
1759              
1760 122         359 my $score;
1761             my $score_return;
1762 122         0 my $_tok;
1763 122         235 my $return = undef;
1764 122         243 my $_matched=0;
1765 122         234 my $commit=0;
1766 122         262 my @item = ();
1767 122         228 my %item = ();
1768 122         240 my $repeating = $_[2];
1769 122         199 my $_noactions = $_[3];
1770 122 50       382 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  122         180  
  122         309  
1771 122         295 my $_itempos = $_[5];
1772 122 50       441 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1773 122         344 my $text;
1774             my $lastsep;
1775 122         0 my $current_match;
1776 122         341 my $expectation = new Parse::RecDescent::Expectation(q{subpart});
1777 122         857 $expectation->at($_[1]);
1778            
1779 122         549 my $thisline;
1780 122         449 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1781              
1782            
1783              
1784 122   33     1057 while (!$_matched && !$commit)
1785             {
1786            
1787 122 50       341 Parse::RecDescent::_trace(q{Trying production: [subpart bodysubtype bodyparms bodydisp bodylang bodyloc bodyextra ]},
1788             Parse::RecDescent::_tracefirst($_[1]),
1789             q{multipart},
1790             $tracelevel)
1791             if defined $::RD_TRACE;
1792 122         394 my $thisprod = $thisrule->{"prods"}[0];
1793 122         238 $text = $_[1];
1794 122         196 my $_savetext;
1795 122         300 @item = (q{multipart});
1796 122         338 %item = (__RULE__ => q{multipart});
1797 122         260 my $repcount = 0;
1798              
1799              
1800 122 50       339 Parse::RecDescent::_trace(q{Trying repeated subrule: [subpart]},
1801             Parse::RecDescent::_tracefirst($text),
1802             q{multipart},
1803             $tracelevel)
1804             if defined $::RD_TRACE;
1805 122         307 $expectation->is(q{})->at($text);
1806            
1807 122 100   195   1409 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subpart, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  195         488  
1808             {
1809 92 50       1337 Parse::RecDescent::_trace(q{<>},
1810             Parse::RecDescent::_tracefirst($text),
1811             q{multipart},
1812             $tracelevel)
1813             if defined $::RD_TRACE;
1814 92         213 last;
1815             }
1816 30 50       549 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [subpart]<< (}
1817             . @$_tok . q{ times)},
1818              
1819             Parse::RecDescent::_tracefirst($text),
1820             q{multipart},
1821             $tracelevel)
1822             if defined $::RD_TRACE;
1823 30         107 $item{q{subpart(s)}} = $_tok;
1824 30         77 push @item, $_tok;
1825            
1826              
1827              
1828            
1829              
1830 30 50       106 Parse::RecDescent::_trace(q{Trying directive: []},
1831             Parse::RecDescent::_tracefirst($text),
1832             q{multipart},
1833             $tracelevel)
1834             if defined $::RD_TRACE;
1835 30         70 $_tok = do { $commit = 1 };
  30         76  
1836 30 50       99 if (defined($_tok))
1837             {
1838 30 50       111 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
1839             . $_tok . q{])},
1840             Parse::RecDescent::_tracefirst($text))
1841             if defined $::RD_TRACE;
1842             }
1843             else
1844             {
1845 0 0       0 Parse::RecDescent::_trace(q{<>},
1846             Parse::RecDescent::_tracefirst($text))
1847             if defined $::RD_TRACE;
1848             }
1849            
1850 30 50       98 last unless defined $_tok;
1851 30         94 push @item, $item{__DIRECTIVE1__}=$_tok;
1852            
1853              
1854 30 50       110 Parse::RecDescent::_trace(q{Trying subrule: [bodysubtype]},
1855             Parse::RecDescent::_tracefirst($text),
1856             q{multipart},
1857             $tracelevel)
1858             if defined $::RD_TRACE;
1859 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         1387  
  30         54  
1860 30         102 $expectation->is(q{bodysubtype})->at($text);
1861 30 50   30   399 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  30         85  
1862             {
1863            
1864 0 0       0 Parse::RecDescent::_trace(q{<>},
1865             Parse::RecDescent::_tracefirst($text),
1866             q{multipart},
1867             $tracelevel)
1868             if defined $::RD_TRACE;
1869 0         0 $expectation->failed();
1870 0         0 last;
1871             }
1872 30 50       128 Parse::RecDescent::_trace(q{>>Matched subrule: [bodysubtype]<< (return value: [}
1873             . $_tok . q{]},
1874              
1875             Parse::RecDescent::_tracefirst($text),
1876             q{multipart},
1877             $tracelevel)
1878             if defined $::RD_TRACE;
1879 30         99 $item{q{bodysubtype}} = $_tok;
1880 30         98 push @item, $_tok;
1881            
1882             }
1883              
1884 30 50       105 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyparms]},
1885             Parse::RecDescent::_tracefirst($text),
1886             q{multipart},
1887             $tracelevel)
1888             if defined $::RD_TRACE;
1889 30         107 $expectation->is(q{bodyparms})->at($text);
1890            
1891 30 50   30   414 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         83  
1892             {
1893 0 0       0 Parse::RecDescent::_trace(q{<>},
1894             Parse::RecDescent::_tracefirst($text),
1895             q{multipart},
1896             $tracelevel)
1897             if defined $::RD_TRACE;
1898 0         0 last;
1899             }
1900 30 50       553 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyparms]<< (}
1901             . @$_tok . q{ times)},
1902              
1903             Parse::RecDescent::_tracefirst($text),
1904             q{multipart},
1905             $tracelevel)
1906             if defined $::RD_TRACE;
1907 30         80 $item{q{bodyparms(?)}} = $_tok;
1908 30         74 push @item, $_tok;
1909            
1910              
1911              
1912 30 50       96 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]},
1913             Parse::RecDescent::_tracefirst($text),
1914             q{multipart},
1915             $tracelevel)
1916             if defined $::RD_TRACE;
1917 30         120 $expectation->is(q{bodydisp})->at($text);
1918            
1919 30 50   30   384 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         73  
1920             {
1921 0 0       0 Parse::RecDescent::_trace(q{<>},
1922             Parse::RecDescent::_tracefirst($text),
1923             q{multipart},
1924             $tracelevel)
1925             if defined $::RD_TRACE;
1926 0         0 last;
1927             }
1928 30 50       612 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (}
1929             . @$_tok . q{ times)},
1930              
1931             Parse::RecDescent::_tracefirst($text),
1932             q{multipart},
1933             $tracelevel)
1934             if defined $::RD_TRACE;
1935 30         82 $item{q{bodydisp(?)}} = $_tok;
1936 30         68 push @item, $_tok;
1937            
1938              
1939              
1940 30 50       126 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]},
1941             Parse::RecDescent::_tracefirst($text),
1942             q{multipart},
1943             $tracelevel)
1944             if defined $::RD_TRACE;
1945 30         93 $expectation->is(q{bodylang})->at($text);
1946            
1947 30 50   30   409 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         75  
1948             {
1949 0 0       0 Parse::RecDescent::_trace(q{<>},
1950             Parse::RecDescent::_tracefirst($text),
1951             q{multipart},
1952             $tracelevel)
1953             if defined $::RD_TRACE;
1954 0         0 last;
1955             }
1956 30 50       577 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (}
1957             . @$_tok . q{ times)},
1958              
1959             Parse::RecDescent::_tracefirst($text),
1960             q{multipart},
1961             $tracelevel)
1962             if defined $::RD_TRACE;
1963 30         80 $item{q{bodylang(?)}} = $_tok;
1964 30         86 push @item, $_tok;
1965            
1966              
1967              
1968 30 50       98 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyloc]},
1969             Parse::RecDescent::_tracefirst($text),
1970             q{multipart},
1971             $tracelevel)
1972             if defined $::RD_TRACE;
1973 30         95 $expectation->is(q{bodyloc})->at($text);
1974            
1975 30 50   30   382 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyloc, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         70  
1976             {
1977 0 0       0 Parse::RecDescent::_trace(q{<>},
1978             Parse::RecDescent::_tracefirst($text),
1979             q{multipart},
1980             $tracelevel)
1981             if defined $::RD_TRACE;
1982 0         0 last;
1983             }
1984 30 50       515 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyloc]<< (}
1985             . @$_tok . q{ times)},
1986              
1987             Parse::RecDescent::_tracefirst($text),
1988             q{multipart},
1989             $tracelevel)
1990             if defined $::RD_TRACE;
1991 30         103 $item{q{bodyloc(?)}} = $_tok;
1992 30         75 push @item, $_tok;
1993            
1994              
1995              
1996 30 50       90 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]},
1997             Parse::RecDescent::_tracefirst($text),
1998             q{multipart},
1999             $tracelevel)
2000             if defined $::RD_TRACE;
2001 30         102 $expectation->is(q{bodyextra})->at($text);
2002            
2003 30 50   30   379 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         84  
2004             {
2005 0 0       0 Parse::RecDescent::_trace(q{<>},
2006             Parse::RecDescent::_tracefirst($text),
2007             q{multipart},
2008             $tracelevel)
2009             if defined $::RD_TRACE;
2010 0         0 last;
2011             }
2012 30 50       516 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (}
2013             . @$_tok . q{ times)},
2014              
2015             Parse::RecDescent::_tracefirst($text),
2016             q{multipart},
2017             $tracelevel)
2018             if defined $::RD_TRACE;
2019 30         96 $item{q{bodyextra(?)}} = $_tok;
2020 30         78 push @item, $_tok;
2021            
2022              
2023              
2024            
2025              
2026 30 50       103 Parse::RecDescent::_trace(q{Trying directive: []},
2027             Parse::RecDescent::_tracefirst($text),
2028             q{multipart},
2029             $tracelevel)
2030             if defined $::RD_TRACE;
2031 30     30   52 $_tok = do { push @{$thisparser->{deferred}}, sub { $subpartCount = 0 }; };
  30         55  
  30         200  
  30         113  
2032 30 50       165 if (defined($_tok))
2033             {
2034 30 50       89 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
2035             . $_tok . q{])},
2036             Parse::RecDescent::_tracefirst($text))
2037             if defined $::RD_TRACE;
2038             }
2039             else
2040             {
2041 0 0       0 Parse::RecDescent::_trace(q{<>},
2042             Parse::RecDescent::_tracefirst($text))
2043             if defined $::RD_TRACE;
2044             }
2045            
2046 30 50       99 last unless defined $_tok;
2047 30         102 push @item, $item{__DIRECTIVE2__}=$_tok;
2048            
2049              
2050 30 50       76 Parse::RecDescent::_trace(q{Trying action},
2051             Parse::RecDescent::_tracefirst($text),
2052             q{multipart},
2053             $tracelevel)
2054             if defined $::RD_TRACE;
2055            
2056              
2057 30 50       84 $_tok = ($_noactions) ? 0 : do { $return =
2058             { bodysubtype => $item{bodysubtype}
2059             , bodytype => 'MULTIPART'
2060 30         174 , bodystructure => $item{'subpart(s)'}
2061             };
2062 30         146 take_optional_items($return, \%item
2063             , qw/bodyparms bodydisp bodylang bodyloc bodyextra/);
2064 30         69 1;
2065             };
2066 30 50       113 unless (defined $_tok)
2067             {
2068 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2069             if defined $::RD_TRACE;
2070 0         0 last;
2071             }
2072 30 50       91 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2073             . $_tok . q{])},
2074             Parse::RecDescent::_tracefirst($text))
2075             if defined $::RD_TRACE;
2076 30         83 push @item, $_tok;
2077 30         82 $item{__ACTION1__}=$_tok;
2078            
2079              
2080 30 50       106 Parse::RecDescent::_trace(q{>>Matched production: [subpart bodysubtype bodyparms bodydisp bodylang bodyloc bodyextra ]<<},
2081             Parse::RecDescent::_tracefirst($text),
2082             q{multipart},
2083             $tracelevel)
2084             if defined $::RD_TRACE;
2085              
2086              
2087              
2088 30         52 $_matched = 1;
2089 30         67 last;
2090             }
2091              
2092             splice
2093 122 100       539 @{$thisparser->{deferred}}, $def_at unless $_matched;
  92         301  
2094            
2095 122 100 66     668 unless ( $_matched || defined($score) )
2096             {
2097 92         164 splice @{$thisparser->{deferred}}, $def_at;
  92         243  
2098            
2099              
2100 92         182 $_[1] = $text; # NOT SURE THIS IS NEEDED
2101 92 50       223 Parse::RecDescent::_trace(q{<>},
2102             Parse::RecDescent::_tracefirst($_[1]),
2103             q{multipart},
2104             $tracelevel)
2105             if defined $::RD_TRACE;
2106 92         503 return undef;
2107             }
2108 30 50 33     118 if (!defined($return) && defined($score))
2109             {
2110 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2111             q{multipart},
2112             $tracelevel)
2113             if defined $::RD_TRACE;
2114 0         0 $return = $score_return;
2115             }
2116 30         67 splice @{$thisparser->{errors}}, $err_at;
  30         98  
2117 30 50       93 $return = $item[$#item] unless defined $return;
2118 30 50       93 if (defined $::RD_TRACE)
2119             {
2120 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2121             $return . q{])}, "",
2122             q{multipart},
2123             $tracelevel);
2124 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2125             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2126             Parse::RecDescent::_tracefirst($text),
2127             , q{multipart},
2128             $tracelevel)
2129             }
2130 30         89 $_[1] = $text;
2131 30         361 return $return;
2132             }
2133              
2134             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2135             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid
2136             {
2137 72     72   1033 my $thisparser = $_[0];
2138 1     1   17 use vars q{$tracelevel};
  1         3  
  1         511  
2139 72   50     235 local $tracelevel = ($tracelevel||0)+1;
2140 72         155 $ERRORS = 0;
2141 72         217 my $thisrule = $thisparser->{"rules"}{"bodyid"};
2142              
2143 72 50       192 Parse::RecDescent::_trace(q{Trying rule: [bodyid]},
2144             Parse::RecDescent::_tracefirst($_[1]),
2145             q{bodyid},
2146             $tracelevel)
2147             if defined $::RD_TRACE;
2148              
2149 72         125 my $def_at = @{$thisparser->{deferred}};
  72         206  
2150 72         150 my $err_at = @{$thisparser->{errors}};
  72         177  
2151              
2152 72         257 my $score;
2153             my $score_return;
2154 72         0 my $_tok;
2155 72         179 my $return = undef;
2156 72         115 my $_matched=0;
2157 72         120 my $commit=0;
2158 72         130 my @item = ();
2159 72         140 my %item = ();
2160 72         138 my $repeating = $_[2];
2161 72         118 my $_noactions = $_[3];
2162 72 50       216 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         133  
  72         163  
2163 72         159 my $_itempos = $_[5];
2164 72 50       243 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2165 72         199 my $text;
2166             my $lastsep;
2167 72         0 my $current_match;
2168 72         210 my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or STRING});
2169 72         569 $expectation->at($_[1]);
2170            
2171 72         328 my $thisline;
2172 72         267 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2173              
2174            
2175              
2176 72   33     728 while (!$_matched && !$commit)
2177             {
2178            
2179 72 50       216 Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]},
2180             Parse::RecDescent::_tracefirst($_[1]),
2181             q{bodyid},
2182             $tracelevel)
2183             if defined $::RD_TRACE;
2184 72         257 my $thisprod = $thisrule->{"prods"}[0];
2185 72         200 $text = $_[1];
2186 72         161 my $_savetext;
2187 72         164 @item = (q{bodyid});
2188 72         196 %item = (__RULE__ => q{bodyid});
2189 72         169 my $repcount = 0;
2190              
2191              
2192 72 50       250 Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text),
2193             q{bodyid},
2194             $tracelevel)
2195             if defined $::RD_TRACE;
2196 72         166 undef $lastsep;
2197 72         217 $expectation->is(q{})->at($text);
2198 72         536 $_savetext = $text;
2199              
2200 72 50 33     592 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/)
  72 50       851  
2201             {
2202 0         0 $text = $_savetext;
2203 0         0 $expectation->failed();
2204 0 0       0 Parse::RecDescent::_trace(q{<>},
2205             Parse::RecDescent::_tracefirst($text))
2206             if defined $::RD_TRACE;
2207              
2208 0         0 last;
2209             }
2210 72         411 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2211 72         273 substr($text,0,length($current_match),q{});
2212 72 50       193 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2213             . $current_match . q{])},
2214             Parse::RecDescent::_tracefirst($text))
2215             if defined $::RD_TRACE;
2216 72         251 push @item, $item{__PATTERN1__}=$current_match;
2217 72         151 $text = $_savetext;
2218              
2219 72 50       229 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
2220             Parse::RecDescent::_tracefirst($text),
2221             q{bodyid},
2222             $tracelevel)
2223             if defined $::RD_TRACE;
2224 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         285  
  72         121  
2225 72         227 $expectation->is(q{NIL})->at($text);
2226 72 100   72   849 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         160  
2227             {
2228            
2229 2 50       9 Parse::RecDescent::_trace(q{<>},
2230             Parse::RecDescent::_tracefirst($text),
2231             q{bodyid},
2232             $tracelevel)
2233             if defined $::RD_TRACE;
2234 2         10 $expectation->failed();
2235 2         24 last;
2236             }
2237 70 50       308 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
2238             . $_tok . q{]},
2239              
2240             Parse::RecDescent::_tracefirst($text),
2241             q{bodyid},
2242             $tracelevel)
2243             if defined $::RD_TRACE;
2244 70         209 $item{q{NIL}} = $_tok;
2245 70         148 push @item, $_tok;
2246            
2247             }
2248              
2249 70 50       236 Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<},
2250             Parse::RecDescent::_tracefirst($text),
2251             q{bodyid},
2252             $tracelevel)
2253             if defined $::RD_TRACE;
2254              
2255              
2256              
2257 70         128 $_matched = 1;
2258 70         166 last;
2259             }
2260              
2261             splice
2262 72 100       229 @{$thisparser->{deferred}}, $def_at unless $_matched;
  2         6  
2263            
2264 72   66     310 while (!$_matched && !$commit)
2265             {
2266            
2267 2 50       6 Parse::RecDescent::_trace(q{Trying production: [STRING]},
2268             Parse::RecDescent::_tracefirst($_[1]),
2269             q{bodyid},
2270             $tracelevel)
2271             if defined $::RD_TRACE;
2272 2         7 my $thisprod = $thisrule->{"prods"}[1];
2273 2         5 $text = $_[1];
2274 2         4 my $_savetext;
2275 2         7 @item = (q{bodyid});
2276 2         8 %item = (__RULE__ => q{bodyid});
2277 2         6 my $repcount = 0;
2278              
2279              
2280 2 50       8 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
2281             Parse::RecDescent::_tracefirst($text),
2282             q{bodyid},
2283             $tracelevel)
2284             if defined $::RD_TRACE;
2285 1     1   7 if (1) { no strict qw{refs};
  1         3  
  1         520  
  2         4  
2286 2         8 $expectation->is(q{})->at($text);
2287 2 50   2   25 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  2         6  
2288             {
2289            
2290 0 0       0 Parse::RecDescent::_trace(q{<>},
2291             Parse::RecDescent::_tracefirst($text),
2292             q{bodyid},
2293             $tracelevel)
2294             if defined $::RD_TRACE;
2295 0         0 $expectation->failed();
2296 0         0 last;
2297             }
2298 2 50       10 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
2299             . $_tok . q{]},
2300              
2301             Parse::RecDescent::_tracefirst($text),
2302             q{bodyid},
2303             $tracelevel)
2304             if defined $::RD_TRACE;
2305 2         5 $item{q{STRING}} = $_tok;
2306 2         6 push @item, $_tok;
2307            
2308             }
2309              
2310 2 50       7 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
2311             Parse::RecDescent::_tracefirst($text),
2312             q{bodyid},
2313             $tracelevel)
2314             if defined $::RD_TRACE;
2315              
2316              
2317              
2318 2         5 $_matched = 1;
2319 2         6 last;
2320             }
2321              
2322             splice
2323 72 50       218 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
2324            
2325 72 50 33     239 unless ( $_matched || defined($score) )
2326             {
2327 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
2328            
2329              
2330 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
2331 0 0       0 Parse::RecDescent::_trace(q{<>},
2332             Parse::RecDescent::_tracefirst($_[1]),
2333             q{bodyid},
2334             $tracelevel)
2335             if defined $::RD_TRACE;
2336 0         0 return undef;
2337             }
2338 72 50 33     407 if (!defined($return) && defined($score))
2339             {
2340 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2341             q{bodyid},
2342             $tracelevel)
2343             if defined $::RD_TRACE;
2344 0         0 $return = $score_return;
2345             }
2346 72         166 splice @{$thisparser->{errors}}, $err_at;
  72         219  
2347 72 50       258 $return = $item[$#item] unless defined $return;
2348 72 50       209 if (defined $::RD_TRACE)
2349             {
2350 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2351             $return . q{])}, "",
2352             q{bodyid},
2353             $tracelevel);
2354 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2355             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2356             Parse::RecDescent::_tracefirst($text),
2357             , q{bodyid},
2358             $tracelevel)
2359             }
2360 72         184 $_[1] = $text;
2361 72         416 return $return;
2362             }
2363              
2364             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2365             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang
2366             {
2367 102     102   1821 my $thisparser = $_[0];
2368 1     1   7 use vars q{$tracelevel};
  1         2  
  1         367  
2369 102   50     303 local $tracelevel = ($tracelevel||0)+1;
2370 102         216 $ERRORS = 0;
2371 102         258 my $thisrule = $thisparser->{"rules"}{"bodylang"};
2372              
2373 102 50       302 Parse::RecDescent::_trace(q{Trying rule: [bodylang]},
2374             Parse::RecDescent::_tracefirst($_[1]),
2375             q{bodylang},
2376             $tracelevel)
2377             if defined $::RD_TRACE;
2378              
2379 102         166 my $def_at = @{$thisparser->{deferred}};
  102         218  
2380 102         169 my $err_at = @{$thisparser->{errors}};
  102         215  
2381              
2382 102         310 my $score;
2383             my $score_return;
2384 102         0 my $_tok;
2385 102         209 my $return = undef;
2386 102         164 my $_matched=0;
2387 102         161 my $commit=0;
2388 102         176 my @item = ();
2389 102         197 my %item = ();
2390 102         168 my $repeating = $_[2];
2391 102         225 my $_noactions = $_[3];
2392 102 50       313 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         212  
  102         202  
2393 102         245 my $_itempos = $_[5];
2394 102 50       319 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2395 102         276 my $text;
2396             my $lastsep;
2397 102         0 my $current_match;
2398 102         314 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or STRINGS});
2399 102         740 $expectation->at($_[1]);
2400            
2401 102         435 my $thisline;
2402 102         377 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2403              
2404            
2405              
2406 102   33     969 while (!$_matched && !$commit)
2407             {
2408            
2409 102 50       295 Parse::RecDescent::_trace(q{Trying production: [NIL]},
2410             Parse::RecDescent::_tracefirst($_[1]),
2411             q{bodylang},
2412             $tracelevel)
2413             if defined $::RD_TRACE;
2414 102         322 my $thisprod = $thisrule->{"prods"}[0];
2415 102         218 $text = $_[1];
2416 102         169 my $_savetext;
2417 102         265 @item = (q{bodylang});
2418 102         274 %item = (__RULE__ => q{bodylang});
2419 102         227 my $repcount = 0;
2420              
2421              
2422 102 50       248 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
2423             Parse::RecDescent::_tracefirst($text),
2424             q{bodylang},
2425             $tracelevel)
2426             if defined $::RD_TRACE;
2427 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         293  
  102         180  
2428 102         318 $expectation->is(q{})->at($text);
2429 102 100   102   969 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         224  
2430             {
2431            
2432 11 50       41 Parse::RecDescent::_trace(q{<>},
2433             Parse::RecDescent::_tracefirst($text),
2434             q{bodylang},
2435             $tracelevel)
2436             if defined $::RD_TRACE;
2437 11         40 $expectation->failed();
2438 11         40 last;
2439             }
2440 91 50       405 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
2441             . $_tok . q{]},
2442              
2443             Parse::RecDescent::_tracefirst($text),
2444             q{bodylang},
2445             $tracelevel)
2446             if defined $::RD_TRACE;
2447 91         216 $item{q{NIL}} = $_tok;
2448 91         235 push @item, $_tok;
2449            
2450             }
2451              
2452 91 50       228 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
2453             Parse::RecDescent::_tracefirst($text),
2454             q{bodylang},
2455             $tracelevel)
2456             if defined $::RD_TRACE;
2457              
2458              
2459              
2460 91         188 $_matched = 1;
2461 91         179 last;
2462             }
2463              
2464             splice
2465 102 100       320 @{$thisparser->{deferred}}, $def_at unless $_matched;
  11         34  
2466            
2467 102   66     343 while (!$_matched && !$commit)
2468             {
2469            
2470 11 50       31 Parse::RecDescent::_trace(q{Trying production: [STRING]},
2471             Parse::RecDescent::_tracefirst($_[1]),
2472             q{bodylang},
2473             $tracelevel)
2474             if defined $::RD_TRACE;
2475 11         29 my $thisprod = $thisrule->{"prods"}[1];
2476 11         26 $text = $_[1];
2477 11         19 my $_savetext;
2478 11         28 @item = (q{bodylang});
2479 11         35 %item = (__RULE__ => q{bodylang});
2480 11         23 my $repcount = 0;
2481              
2482              
2483 11 50       31 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
2484             Parse::RecDescent::_tracefirst($text),
2485             q{bodylang},
2486             $tracelevel)
2487             if defined $::RD_TRACE;
2488 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         283  
  11         20  
2489 11         31 $expectation->is(q{})->at($text);
2490 11 50   11   121 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  11         25  
2491             {
2492            
2493 11 50       31 Parse::RecDescent::_trace(q{<>},
2494             Parse::RecDescent::_tracefirst($text),
2495             q{bodylang},
2496             $tracelevel)
2497             if defined $::RD_TRACE;
2498 11         36 $expectation->failed();
2499 11         37 last;
2500             }
2501 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
2502             . $_tok . q{]},
2503              
2504             Parse::RecDescent::_tracefirst($text),
2505             q{bodylang},
2506             $tracelevel)
2507             if defined $::RD_TRACE;
2508 0         0 $item{q{STRING}} = $_tok;
2509 0         0 push @item, $_tok;
2510            
2511             }
2512              
2513 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
2514             Parse::RecDescent::_tracefirst($text),
2515             q{bodylang},
2516             $tracelevel)
2517             if defined $::RD_TRACE;
2518              
2519              
2520              
2521 0         0 $_matched = 1;
2522 0         0 last;
2523             }
2524              
2525             splice
2526 102 100       351 @{$thisparser->{deferred}}, $def_at unless $_matched;
  11         27  
2527            
2528 102   66     323 while (!$_matched && !$commit)
2529             {
2530            
2531 11 50       29 Parse::RecDescent::_trace(q{Trying production: [STRINGS]},
2532             Parse::RecDescent::_tracefirst($_[1]),
2533             q{bodylang},
2534             $tracelevel)
2535             if defined $::RD_TRACE;
2536 11         26 my $thisprod = $thisrule->{"prods"}[2];
2537 11         22 $text = $_[1];
2538 11         16 my $_savetext;
2539 11         36 @item = (q{bodylang});
2540 11         33 %item = (__RULE__ => q{bodylang});
2541 11         19 my $repcount = 0;
2542              
2543              
2544 11 50       29 Parse::RecDescent::_trace(q{Trying subrule: [STRINGS]},
2545             Parse::RecDescent::_tracefirst($text),
2546             q{bodylang},
2547             $tracelevel)
2548             if defined $::RD_TRACE;
2549 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         491  
  11         18  
2550 11         30 $expectation->is(q{})->at($text);
2551 11 100   11   130 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  11         26  
2552             {
2553            
2554 10 50       28 Parse::RecDescent::_trace(q{<>},
2555             Parse::RecDescent::_tracefirst($text),
2556             q{bodylang},
2557             $tracelevel)
2558             if defined $::RD_TRACE;
2559 10         27 $expectation->failed();
2560 10         34 last;
2561             }
2562 1 50       6 Parse::RecDescent::_trace(q{>>Matched subrule: [STRINGS]<< (return value: [}
2563             . $_tok . q{]},
2564              
2565             Parse::RecDescent::_tracefirst($text),
2566             q{bodylang},
2567             $tracelevel)
2568             if defined $::RD_TRACE;
2569 1         3 $item{q{STRINGS}} = $_tok;
2570 1         3 push @item, $_tok;
2571            
2572             }
2573              
2574 1 50       4 Parse::RecDescent::_trace(q{>>Matched production: [STRINGS]<<},
2575             Parse::RecDescent::_tracefirst($text),
2576             q{bodylang},
2577             $tracelevel)
2578             if defined $::RD_TRACE;
2579              
2580              
2581              
2582 1         3 $_matched = 1;
2583 1         2 last;
2584             }
2585              
2586             splice
2587 102 100       295 @{$thisparser->{deferred}}, $def_at unless $_matched;
  10         25  
2588            
2589 102 100 66     398 unless ( $_matched || defined($score) )
2590             {
2591 10         20 splice @{$thisparser->{deferred}}, $def_at;
  10         18  
2592            
2593              
2594 10         23 $_[1] = $text; # NOT SURE THIS IS NEEDED
2595 10 50       25 Parse::RecDescent::_trace(q{<>},
2596             Parse::RecDescent::_tracefirst($_[1]),
2597             q{bodylang},
2598             $tracelevel)
2599             if defined $::RD_TRACE;
2600 10         44 return undef;
2601             }
2602 92 50 33     480 if (!defined($return) && defined($score))
2603             {
2604 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2605             q{bodylang},
2606             $tracelevel)
2607             if defined $::RD_TRACE;
2608 0         0 $return = $score_return;
2609             }
2610 92         219 splice @{$thisparser->{errors}}, $err_at;
  92         267  
2611 92 50       318 $return = $item[$#item] unless defined $return;
2612 92 50       278 if (defined $::RD_TRACE)
2613             {
2614 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2615             $return . q{])}, "",
2616             q{bodylang},
2617             $tracelevel);
2618 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2619             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2620             Parse::RecDescent::_tracefirst($text),
2621             , q{bodylang},
2622             $tracelevel)
2623             }
2624 92         241 $_[1] = $text;
2625 92         451 return $return;
2626             }
2627              
2628             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2629             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyloc
2630             {
2631 30     30   557 my $thisparser = $_[0];
2632 1     1   8 use vars q{$tracelevel};
  1         2  
  1         327  
2633 30   50     115 local $tracelevel = ($tracelevel||0)+1;
2634 30         73 $ERRORS = 0;
2635 30         95 my $thisrule = $thisparser->{"rules"}{"bodyloc"};
2636              
2637 30 50       97 Parse::RecDescent::_trace(q{Trying rule: [bodyloc]},
2638             Parse::RecDescent::_tracefirst($_[1]),
2639             q{bodyloc},
2640             $tracelevel)
2641             if defined $::RD_TRACE;
2642              
2643 30         49 my $def_at = @{$thisparser->{deferred}};
  30         83  
2644 30         51 my $err_at = @{$thisparser->{errors}};
  30         83  
2645              
2646 30         107 my $score;
2647             my $score_return;
2648 30         0 my $_tok;
2649 30         60 my $return = undef;
2650 30         56 my $_matched=0;
2651 30         65 my $commit=0;
2652 30         62 my @item = ();
2653 30         58 my %item = ();
2654 30         59 my $repeating = $_[2];
2655 30         64 my $_noactions = $_[3];
2656 30 50       96 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  30         50  
  30         61  
2657 30         66 my $_itempos = $_[5];
2658 30 50       102 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2659 30         100 my $text;
2660             my $lastsep;
2661 30         0 my $current_match;
2662 30         80 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
2663 30         249 $expectation->at($_[1]);
2664            
2665 30         122 my $thisline;
2666 30         127 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2667              
2668            
2669              
2670 30   33     294 while (!$_matched && !$commit)
2671             {
2672            
2673 30 50       144 Parse::RecDescent::_trace(q{Trying production: [NIL]},
2674             Parse::RecDescent::_tracefirst($_[1]),
2675             q{bodyloc},
2676             $tracelevel)
2677             if defined $::RD_TRACE;
2678 30         123 my $thisprod = $thisrule->{"prods"}[0];
2679 30         67 $text = $_[1];
2680 30         58 my $_savetext;
2681 30         75 @item = (q{bodyloc});
2682 30         83 %item = (__RULE__ => q{bodyloc});
2683 30         70 my $repcount = 0;
2684              
2685              
2686 30 50       82 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
2687             Parse::RecDescent::_tracefirst($text),
2688             q{bodyloc},
2689             $tracelevel)
2690             if defined $::RD_TRACE;
2691 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         277  
  30         54  
2692 30         92 $expectation->is(q{})->at($text);
2693 30 100   30   338 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  30         69  
2694             {
2695            
2696 9 50       26 Parse::RecDescent::_trace(q{<>},
2697             Parse::RecDescent::_tracefirst($text),
2698             q{bodyloc},
2699             $tracelevel)
2700             if defined $::RD_TRACE;
2701 9         30 $expectation->failed();
2702 9         33 last;
2703             }
2704 21 50       113 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
2705             . $_tok . q{]},
2706              
2707             Parse::RecDescent::_tracefirst($text),
2708             q{bodyloc},
2709             $tracelevel)
2710             if defined $::RD_TRACE;
2711 21         71 $item{q{NIL}} = $_tok;
2712 21         62 push @item, $_tok;
2713            
2714             }
2715              
2716 21 50       79 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
2717             Parse::RecDescent::_tracefirst($text),
2718             q{bodyloc},
2719             $tracelevel)
2720             if defined $::RD_TRACE;
2721              
2722              
2723              
2724 21         50 $_matched = 1;
2725 21         50 last;
2726             }
2727              
2728             splice
2729 30 100       90 @{$thisparser->{deferred}}, $def_at unless $_matched;
  9         20  
2730            
2731 30   66     151 while (!$_matched && !$commit)
2732             {
2733            
2734 9 50       34 Parse::RecDescent::_trace(q{Trying production: [STRING]},
2735             Parse::RecDescent::_tracefirst($_[1]),
2736             q{bodyloc},
2737             $tracelevel)
2738             if defined $::RD_TRACE;
2739 9         26 my $thisprod = $thisrule->{"prods"}[1];
2740 9         22 $text = $_[1];
2741 9         18 my $_savetext;
2742 9         25 @item = (q{bodyloc});
2743 9         25 %item = (__RULE__ => q{bodyloc});
2744 9         15 my $repcount = 0;
2745              
2746              
2747 9 50       26 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
2748             Parse::RecDescent::_tracefirst($text),
2749             q{bodyloc},
2750             $tracelevel)
2751             if defined $::RD_TRACE;
2752 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         458  
  9         18  
2753 9         34 $expectation->is(q{})->at($text);
2754 9 50   9   105 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  9         20  
2755             {
2756            
2757 9 50       26 Parse::RecDescent::_trace(q{<>},
2758             Parse::RecDescent::_tracefirst($text),
2759             q{bodyloc},
2760             $tracelevel)
2761             if defined $::RD_TRACE;
2762 9         30 $expectation->failed();
2763 9         34 last;
2764             }
2765 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
2766             . $_tok . q{]},
2767              
2768             Parse::RecDescent::_tracefirst($text),
2769             q{bodyloc},
2770             $tracelevel)
2771             if defined $::RD_TRACE;
2772 0         0 $item{q{STRING}} = $_tok;
2773 0         0 push @item, $_tok;
2774            
2775             }
2776              
2777 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
2778             Parse::RecDescent::_tracefirst($text),
2779             q{bodyloc},
2780             $tracelevel)
2781             if defined $::RD_TRACE;
2782              
2783              
2784              
2785 0         0 $_matched = 1;
2786 0         0 last;
2787             }
2788              
2789             splice
2790 30 100       137 @{$thisparser->{deferred}}, $def_at unless $_matched;
  9         22  
2791            
2792 30 100 66     120 unless ( $_matched || defined($score) )
2793             {
2794 9         20 splice @{$thisparser->{deferred}}, $def_at;
  9         17  
2795            
2796              
2797 9         19 $_[1] = $text; # NOT SURE THIS IS NEEDED
2798 9 50       24 Parse::RecDescent::_trace(q{<>},
2799             Parse::RecDescent::_tracefirst($_[1]),
2800             q{bodyloc},
2801             $tracelevel)
2802             if defined $::RD_TRACE;
2803 9         41 return undef;
2804             }
2805 21 50 33     130 if (!defined($return) && defined($score))
2806             {
2807 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2808             q{bodyloc},
2809             $tracelevel)
2810             if defined $::RD_TRACE;
2811 0         0 $return = $score_return;
2812             }
2813 21         48 splice @{$thisparser->{errors}}, $err_at;
  21         76  
2814 21 50       124 $return = $item[$#item] unless defined $return;
2815 21 50       78 if (defined $::RD_TRACE)
2816             {
2817 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2818             $return . q{])}, "",
2819             q{bodyloc},
2820             $tracelevel);
2821 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2822             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2823             Parse::RecDescent::_tracefirst($text),
2824             , q{bodyloc},
2825             $tracelevel)
2826             }
2827 21         54 $_[1] = $text;
2828 21         118 return $return;
2829             }
2830              
2831             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2832             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::inreplyto
2833             {
2834 24     24   71 my $thisparser = $_[0];
2835 1     1   7 use vars q{$tracelevel};
  1         3  
  1         341  
2836 24   50     88 local $tracelevel = ($tracelevel||0)+1;
2837 24         67 $ERRORS = 0;
2838 24         79 my $thisrule = $thisparser->{"rules"}{"inreplyto"};
2839              
2840 24 50       79 Parse::RecDescent::_trace(q{Trying rule: [inreplyto]},
2841             Parse::RecDescent::_tracefirst($_[1]),
2842             q{inreplyto},
2843             $tracelevel)
2844             if defined $::RD_TRACE;
2845              
2846 24         44 my $def_at = @{$thisparser->{deferred}};
  24         58  
2847 24         40 my $err_at = @{$thisparser->{errors}};
  24         46  
2848              
2849 24         87 my $score;
2850             my $score_return;
2851 24         0 my $_tok;
2852 24         65 my $return = undef;
2853 24         40 my $_matched=0;
2854 24         39 my $commit=0;
2855 24         48 my @item = ();
2856 24         49 my %item = ();
2857 24         52 my $repeating = $_[2];
2858 24         59 my $_noactions = $_[3];
2859 24 50       94 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         46  
  24         56  
2860 24         52 my $_itempos = $_[5];
2861 24 50       97 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2862 24         83 my $text;
2863             my $lastsep;
2864 24         0 my $current_match;
2865 24         87 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
2866 24         187 $expectation->at($_[1]);
2867            
2868 24         120 my $thisline;
2869 24         101 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2870              
2871            
2872              
2873 24   33     249 while (!$_matched && !$commit)
2874             {
2875            
2876 24 50       72 Parse::RecDescent::_trace(q{Trying production: [NIL]},
2877             Parse::RecDescent::_tracefirst($_[1]),
2878             q{inreplyto},
2879             $tracelevel)
2880             if defined $::RD_TRACE;
2881 24         84 my $thisprod = $thisrule->{"prods"}[0];
2882 24         54 $text = $_[1];
2883 24         44 my $_savetext;
2884 24         63 @item = (q{inreplyto});
2885 24         76 %item = (__RULE__ => q{inreplyto});
2886 24         57 my $repcount = 0;
2887              
2888              
2889 24 50       88 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
2890             Parse::RecDescent::_tracefirst($text),
2891             q{inreplyto},
2892             $tracelevel)
2893             if defined $::RD_TRACE;
2894 1     1   8 if (1) { no strict qw{refs};
  1         8  
  1         276  
  24         59  
2895 24         83 $expectation->is(q{})->at($text);
2896 24 100   24   262 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         61  
2897             {
2898            
2899 1 50       5 Parse::RecDescent::_trace(q{<>},
2900             Parse::RecDescent::_tracefirst($text),
2901             q{inreplyto},
2902             $tracelevel)
2903             if defined $::RD_TRACE;
2904 1         5 $expectation->failed();
2905 1         4 last;
2906             }
2907 23 50       109 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
2908             . $_tok . q{]},
2909              
2910             Parse::RecDescent::_tracefirst($text),
2911             q{inreplyto},
2912             $tracelevel)
2913             if defined $::RD_TRACE;
2914 23         64 $item{q{NIL}} = $_tok;
2915 23         59 push @item, $_tok;
2916            
2917             }
2918              
2919 23 50       59 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
2920             Parse::RecDescent::_tracefirst($text),
2921             q{inreplyto},
2922             $tracelevel)
2923             if defined $::RD_TRACE;
2924              
2925              
2926              
2927 23         44 $_matched = 1;
2928 23         63 last;
2929             }
2930              
2931             splice
2932 24 100       80 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         5  
2933            
2934 24   66     108 while (!$_matched && !$commit)
2935             {
2936            
2937 1 50       4 Parse::RecDescent::_trace(q{Trying production: [STRING]},
2938             Parse::RecDescent::_tracefirst($_[1]),
2939             q{inreplyto},
2940             $tracelevel)
2941             if defined $::RD_TRACE;
2942 1         3 my $thisprod = $thisrule->{"prods"}[1];
2943 1         3 $text = $_[1];
2944 1         3 my $_savetext;
2945 1         3 @item = (q{inreplyto});
2946 1         5 %item = (__RULE__ => q{inreplyto});
2947 1         2 my $repcount = 0;
2948              
2949              
2950 1 50       4 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
2951             Parse::RecDescent::_tracefirst($text),
2952             q{inreplyto},
2953             $tracelevel)
2954             if defined $::RD_TRACE;
2955 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         448  
  1         2  
2956 1         4 $expectation->is(q{})->at($text);
2957 1 50   1   13 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  1         3  
2958             {
2959            
2960 0 0       0 Parse::RecDescent::_trace(q{<>},
2961             Parse::RecDescent::_tracefirst($text),
2962             q{inreplyto},
2963             $tracelevel)
2964             if defined $::RD_TRACE;
2965 0         0 $expectation->failed();
2966 0         0 last;
2967             }
2968 1 50       6 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
2969             . $_tok . q{]},
2970              
2971             Parse::RecDescent::_tracefirst($text),
2972             q{inreplyto},
2973             $tracelevel)
2974             if defined $::RD_TRACE;
2975 1         3 $item{q{STRING}} = $_tok;
2976 1         3 push @item, $_tok;
2977            
2978             }
2979              
2980 1 50       4 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
2981             Parse::RecDescent::_tracefirst($text),
2982             q{inreplyto},
2983             $tracelevel)
2984             if defined $::RD_TRACE;
2985              
2986              
2987              
2988 1         3 $_matched = 1;
2989 1         2 last;
2990             }
2991              
2992             splice
2993 24 50       78 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
2994            
2995 24 50 33     99 unless ( $_matched || defined($score) )
2996             {
2997 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
2998            
2999              
3000 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
3001 0 0       0 Parse::RecDescent::_trace(q{<>},
3002             Parse::RecDescent::_tracefirst($_[1]),
3003             q{inreplyto},
3004             $tracelevel)
3005             if defined $::RD_TRACE;
3006 0         0 return undef;
3007             }
3008 24 50 33     154 if (!defined($return) && defined($score))
3009             {
3010 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3011             q{inreplyto},
3012             $tracelevel)
3013             if defined $::RD_TRACE;
3014 0         0 $return = $score_return;
3015             }
3016 24         47 splice @{$thisparser->{errors}}, $err_at;
  24         69  
3017 24 50       96 $return = $item[$#item] unless defined $return;
3018 24 50       71 if (defined $::RD_TRACE)
3019             {
3020 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3021             $return . q{])}, "",
3022             q{inreplyto},
3023             $tracelevel);
3024 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3025             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3026             Parse::RecDescent::_tracefirst($text),
3027             , q{inreplyto},
3028             $tracelevel)
3029             }
3030 24         64 $_[1] = $text;
3031 24         146 return $return;
3032             }
3033              
3034             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3035             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES
3036             {
3037 144     144   283 my $thisparser = $_[0];
3038 1     1   8 use vars q{$tracelevel};
  1         2  
  1         394  
3039 144   50     360 local $tracelevel = ($tracelevel||0)+1;
3040 144         235 $ERRORS = 0;
3041 144         312 my $thisrule = $thisparser->{"rules"}{"ADDRESSES"};
3042              
3043 144 50       290 Parse::RecDescent::_trace(q{Trying rule: [ADDRESSES]},
3044             Parse::RecDescent::_tracefirst($_[1]),
3045             q{ADDRESSES},
3046             $tracelevel)
3047             if defined $::RD_TRACE;
3048              
3049 144         206 my $def_at = @{$thisparser->{deferred}};
  144         319  
3050 144         209 my $err_at = @{$thisparser->{errors}};
  144         269  
3051              
3052 144         348 my $score;
3053             my $score_return;
3054 144         0 my $_tok;
3055 144         253 my $return = undef;
3056 144         225 my $_matched=0;
3057 144         198 my $commit=0;
3058 144         240 my @item = ();
3059 144         225 my %item = ();
3060 144         236 my $repeating = $_[2];
3061 144         238 my $_noactions = $_[3];
3062 144 50       306 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  144         205  
  144         260  
3063 144         226 my $_itempos = $_[5];
3064 144 50       341 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3065 144         379 my $text;
3066             my $lastsep;
3067 144         0 my $current_match;
3068 144         328 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or RFCNONCOMPLY, or '('});
3069 144         906 $expectation->at($_[1]);
3070            
3071 144         597 my $thisline;
3072 144         409 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3073              
3074            
3075              
3076 144   33     1101 while (!$_matched && !$commit)
3077             {
3078            
3079 144 50       381 Parse::RecDescent::_trace(q{Trying production: [NIL]},
3080             Parse::RecDescent::_tracefirst($_[1]),
3081             q{ADDRESSES},
3082             $tracelevel)
3083             if defined $::RD_TRACE;
3084 144         330 my $thisprod = $thisrule->{"prods"}[0];
3085 144         266 $text = $_[1];
3086 144         251 my $_savetext;
3087 144         278 @item = (q{ADDRESSES});
3088 144         319 %item = (__RULE__ => q{ADDRESSES});
3089 144         255 my $repcount = 0;
3090              
3091              
3092 144 50       307 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
3093             Parse::RecDescent::_tracefirst($text),
3094             q{ADDRESSES},
3095             $tracelevel)
3096             if defined $::RD_TRACE;
3097 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         287  
  144         255  
3098 144         368 $expectation->is(q{})->at($text);
3099 144 100   144   1333 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  144         315  
3100             {
3101            
3102 98 50       223 Parse::RecDescent::_trace(q{<>},
3103             Parse::RecDescent::_tracefirst($text),
3104             q{ADDRESSES},
3105             $tracelevel)
3106             if defined $::RD_TRACE;
3107 98         308 $expectation->failed();
3108 98         417 last;
3109             }
3110 46 50       189 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
3111             . $_tok . q{]},
3112              
3113             Parse::RecDescent::_tracefirst($text),
3114             q{ADDRESSES},
3115             $tracelevel)
3116             if defined $::RD_TRACE;
3117 46         113 $item{q{NIL}} = $_tok;
3118 46         92 push @item, $_tok;
3119            
3120             }
3121              
3122 46 50       128 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
3123             Parse::RecDescent::_tracefirst($text),
3124             q{ADDRESSES},
3125             $tracelevel)
3126             if defined $::RD_TRACE;
3127              
3128              
3129              
3130 46         82 $_matched = 1;
3131 46         89 last;
3132             }
3133              
3134             splice
3135 144 100       431 @{$thisparser->{deferred}}, $def_at unless $_matched;
  98         247  
3136            
3137 144   66     504 while (!$_matched && !$commit)
3138             {
3139            
3140 98 50       245 Parse::RecDescent::_trace(q{Trying production: [RFCNONCOMPLY]},
3141             Parse::RecDescent::_tracefirst($_[1]),
3142             q{ADDRESSES},
3143             $tracelevel)
3144             if defined $::RD_TRACE;
3145 98         224 my $thisprod = $thisrule->{"prods"}[1];
3146 98         194 $text = $_[1];
3147 98         145 my $_savetext;
3148 98         247 @item = (q{ADDRESSES});
3149 98         249 %item = (__RULE__ => q{ADDRESSES});
3150 98         156 my $repcount = 0;
3151              
3152              
3153 98 50       234 Parse::RecDescent::_trace(q{Trying subrule: [RFCNONCOMPLY]},
3154             Parse::RecDescent::_tracefirst($text),
3155             q{ADDRESSES},
3156             $tracelevel)
3157             if defined $::RD_TRACE;
3158 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         1188  
  98         161  
3159 98         270 $expectation->is(q{})->at($text);
3160 98 100   98   1054 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFCNONCOMPLY($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  98         200  
3161             {
3162            
3163 94 50       211 Parse::RecDescent::_trace(q{<>},
3164             Parse::RecDescent::_tracefirst($text),
3165             q{ADDRESSES},
3166             $tracelevel)
3167             if defined $::RD_TRACE;
3168 94         268 $expectation->failed();
3169 94         318 last;
3170             }
3171 4 50       21 Parse::RecDescent::_trace(q{>>Matched subrule: [RFCNONCOMPLY]<< (return value: [}
3172             . $_tok . q{]},
3173              
3174             Parse::RecDescent::_tracefirst($text),
3175             q{ADDRESSES},
3176             $tracelevel)
3177             if defined $::RD_TRACE;
3178 4         11 $item{q{RFCNONCOMPLY}} = $_tok;
3179 4         9 push @item, $_tok;
3180            
3181             }
3182              
3183 4 50       11 Parse::RecDescent::_trace(q{>>Matched production: [RFCNONCOMPLY]<<},
3184             Parse::RecDescent::_tracefirst($text),
3185             q{ADDRESSES},
3186             $tracelevel)
3187             if defined $::RD_TRACE;
3188              
3189              
3190              
3191 4         9 $_matched = 1;
3192 4         7 last;
3193             }
3194              
3195             splice
3196 144 100       467 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         210  
3197            
3198 144   66     481 while (!$_matched && !$commit)
3199             {
3200            
3201 94 50       187 Parse::RecDescent::_trace(q{Trying production: ['(' addressstruct ')']},
3202             Parse::RecDescent::_tracefirst($_[1]),
3203             q{ADDRESSES},
3204             $tracelevel)
3205             if defined $::RD_TRACE;
3206 94         216 my $thisprod = $thisrule->{"prods"}[2];
3207 94         175 $text = $_[1];
3208 94         135 my $_savetext;
3209 94         228 @item = (q{ADDRESSES});
3210 94         258 %item = (__RULE__ => q{ADDRESSES});
3211 94         167 my $repcount = 0;
3212              
3213              
3214 94 50       193 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
3215             Parse::RecDescent::_tracefirst($text),
3216             q{ADDRESSES},
3217             $tracelevel)
3218             if defined $::RD_TRACE;
3219 94         163 undef $lastsep;
3220 94         232 $expectation->is(q{})->at($text);
3221            
3222              
3223 94 50 33     1014 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  94 50 33     673  
  94   33     196  
  94         504  
3224             substr($text,0,length($_tok)) eq $_tok and
3225 94         284 do { substr($text,0,length($_tok)) = ""; 1; }
  94         280  
3226             )
3227             {
3228 0 0       0 $text = $lastsep . $text if defined $lastsep;
3229            
3230 0         0 $expectation->failed();
3231 0 0       0 Parse::RecDescent::_trace(q{<>},
3232             Parse::RecDescent::_tracefirst($text))
3233             if defined $::RD_TRACE;
3234 0         0 last;
3235             }
3236 94 50       245 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3237             . $_tok . q{])},
3238             Parse::RecDescent::_tracefirst($text))
3239             if defined $::RD_TRACE;
3240 94         253 push @item, $item{__STRING1__}=$_tok;
3241            
3242              
3243 94 50       213 Parse::RecDescent::_trace(q{Trying repeated subrule: [addressstruct]},
3244             Parse::RecDescent::_tracefirst($text),
3245             q{ADDRESSES},
3246             $tracelevel)
3247             if defined $::RD_TRACE;
3248 94         248 $expectation->is(q{addressstruct})->at($text);
3249            
3250 94 50   188   1164 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::addressstruct, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  188         382  
3251             {
3252 0 0       0 Parse::RecDescent::_trace(q{<>},
3253             Parse::RecDescent::_tracefirst($text),
3254             q{ADDRESSES},
3255             $tracelevel)
3256             if defined $::RD_TRACE;
3257 0         0 last;
3258             }
3259 94 50       1492 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [addressstruct]<< (}
3260             . @$_tok . q{ times)},
3261              
3262             Parse::RecDescent::_tracefirst($text),
3263             q{ADDRESSES},
3264             $tracelevel)
3265             if defined $::RD_TRACE;
3266 94         242 $item{q{addressstruct(s)}} = $_tok;
3267 94         192 push @item, $_tok;
3268            
3269              
3270              
3271 94 50       199 Parse::RecDescent::_trace(q{Trying terminal: [')']},
3272             Parse::RecDescent::_tracefirst($text),
3273             q{ADDRESSES},
3274             $tracelevel)
3275             if defined $::RD_TRACE;
3276 94         154 undef $lastsep;
3277 94         257 $expectation->is(q{')'})->at($text);
3278            
3279              
3280 94 50 33     984 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  94 50 33     592  
  94   33     179  
  94         500  
3281             substr($text,0,length($_tok)) eq $_tok and
3282 94         220 do { substr($text,0,length($_tok)) = ""; 1; }
  94         247  
3283             )
3284             {
3285 0 0       0 $text = $lastsep . $text if defined $lastsep;
3286            
3287 0         0 $expectation->failed();
3288 0 0       0 Parse::RecDescent::_trace(q{<>},
3289             Parse::RecDescent::_tracefirst($text))
3290             if defined $::RD_TRACE;
3291 0         0 last;
3292             }
3293 94 50       256 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3294             . $_tok . q{])},
3295             Parse::RecDescent::_tracefirst($text))
3296             if defined $::RD_TRACE;
3297 94         285 push @item, $item{__STRING2__}=$_tok;
3298            
3299              
3300 94 50       208 Parse::RecDescent::_trace(q{Trying action},
3301             Parse::RecDescent::_tracefirst($text),
3302             q{ADDRESSES},
3303             $tracelevel)
3304             if defined $::RD_TRACE;
3305            
3306              
3307 94 50       222 $_tok = ($_noactions) ? 0 : do { $return = $item{'addressstruct(s)'} };
  94         194  
3308 94 50       216 unless (defined $_tok)
3309             {
3310 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
3311             if defined $::RD_TRACE;
3312 0         0 last;
3313             }
3314 94 50       208 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3315             . $_tok . q{])},
3316             Parse::RecDescent::_tracefirst($text))
3317             if defined $::RD_TRACE;
3318 94         171 push @item, $_tok;
3319 94         177 $item{__ACTION1__}=$_tok;
3320            
3321              
3322 94 50       190 Parse::RecDescent::_trace(q{>>Matched production: ['(' addressstruct ')']<<},
3323             Parse::RecDescent::_tracefirst($text),
3324             q{ADDRESSES},
3325             $tracelevel)
3326             if defined $::RD_TRACE;
3327              
3328              
3329              
3330 94         162 $_matched = 1;
3331 94         208 last;
3332             }
3333              
3334             splice
3335 144 50       322 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
3336            
3337 144 50 33     365 unless ( $_matched || defined($score) )
3338             {
3339 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
3340            
3341              
3342 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
3343 0 0       0 Parse::RecDescent::_trace(q{<>},
3344             Parse::RecDescent::_tracefirst($_[1]),
3345             q{ADDRESSES},
3346             $tracelevel)
3347             if defined $::RD_TRACE;
3348 0         0 return undef;
3349             }
3350 144 50 66     481 if (!defined($return) && defined($score))
3351             {
3352 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3353             q{ADDRESSES},
3354             $tracelevel)
3355             if defined $::RD_TRACE;
3356 0         0 $return = $score_return;
3357             }
3358 144         228 splice @{$thisparser->{errors}}, $err_at;
  144         369  
3359 144 100       371 $return = $item[$#item] unless defined $return;
3360 144 50       340 if (defined $::RD_TRACE)
3361             {
3362 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3363             $return . q{])}, "",
3364             q{ADDRESSES},
3365             $tracelevel);
3366 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3367             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3368             Parse::RecDescent::_tracefirst($text),
3369             , q{ADDRESSES},
3370             $tracelevel)
3371             }
3372 144         398 $_[1] = $text;
3373 144         1079 return $return;
3374             }
3375              
3376             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3377             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::key
3378             {
3379 129     129   268 my $thisparser = $_[0];
3380 1     1   9 use vars q{$tracelevel};
  1         2  
  1         337  
3381 129   50     423 local $tracelevel = ($tracelevel||0)+1;
3382 129         264 $ERRORS = 0;
3383 129         409 my $thisrule = $thisparser->{"rules"}{"key"};
3384              
3385 129 50       351 Parse::RecDescent::_trace(q{Trying rule: [key]},
3386             Parse::RecDescent::_tracefirst($_[1]),
3387             q{key},
3388             $tracelevel)
3389             if defined $::RD_TRACE;
3390              
3391 129         205 my $def_at = @{$thisparser->{deferred}};
  129         272  
3392 129         273 my $err_at = @{$thisparser->{errors}};
  129         282  
3393              
3394 129         398 my $score;
3395             my $score_return;
3396 129         0 my $_tok;
3397 129         249 my $return = undef;
3398 129         201 my $_matched=0;
3399 129         249 my $commit=0;
3400 129         257 my @item = ();
3401 129         283 my %item = ();
3402 129         218 my $repeating = $_[2];
3403 129         267 my $_noactions = $_[3];
3404 129 50       299 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  129         208  
  129         255  
3405 129         240 my $_itempos = $_[5];
3406 129 50       389 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3407 129         357 my $text;
3408             my $lastsep;
3409 129         0 my $current_match;
3410 129         325 my $expectation = new Parse::RecDescent::Expectation(q{STRING});
3411 129         976 $expectation->at($_[1]);
3412            
3413 129         516 my $thisline;
3414 129         431 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3415              
3416            
3417              
3418 129   33     1109 while (!$_matched && !$commit)
3419             {
3420            
3421 129 50       325 Parse::RecDescent::_trace(q{Trying production: [STRING]},
3422             Parse::RecDescent::_tracefirst($_[1]),
3423             q{key},
3424             $tracelevel)
3425             if defined $::RD_TRACE;
3426 129         373 my $thisprod = $thisrule->{"prods"}[0];
3427 129         262 $text = $_[1];
3428 129         261 my $_savetext;
3429 129         312 @item = (q{key});
3430 129         299 %item = (__RULE__ => q{key});
3431 129         238 my $repcount = 0;
3432              
3433              
3434 129 50       333 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
3435             Parse::RecDescent::_tracefirst($text),
3436             q{key},
3437             $tracelevel)
3438             if defined $::RD_TRACE;
3439 1     1   8 if (1) { no strict qw{refs};
  1         4  
  1         434  
  129         189  
3440 129         336 $expectation->is(q{})->at($text);
3441 129 50   129   1295 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         292  
3442             {
3443            
3444 0 0       0 Parse::RecDescent::_trace(q{<>},
3445             Parse::RecDescent::_tracefirst($text),
3446             q{key},
3447             $tracelevel)
3448             if defined $::RD_TRACE;
3449 0         0 $expectation->failed();
3450 0         0 last;
3451             }
3452 129 50       423 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
3453             . $_tok . q{]},
3454              
3455             Parse::RecDescent::_tracefirst($text),
3456             q{key},
3457             $tracelevel)
3458             if defined $::RD_TRACE;
3459 129         277 $item{q{STRING}} = $_tok;
3460 129         265 push @item, $_tok;
3461            
3462             }
3463              
3464 129 50       297 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
3465             Parse::RecDescent::_tracefirst($text),
3466             q{key},
3467             $tracelevel)
3468             if defined $::RD_TRACE;
3469              
3470              
3471              
3472 129         234 $_matched = 1;
3473 129         215 last;
3474             }
3475              
3476             splice
3477 129 50       315 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
3478            
3479 129 50 33     348 unless ( $_matched || defined($score) )
3480             {
3481 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
3482            
3483              
3484 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
3485 0 0       0 Parse::RecDescent::_trace(q{<>},
3486             Parse::RecDescent::_tracefirst($_[1]),
3487             q{key},
3488             $tracelevel)
3489             if defined $::RD_TRACE;
3490 0         0 return undef;
3491             }
3492 129 50 33     523 if (!defined($return) && defined($score))
3493             {
3494 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3495             q{key},
3496             $tracelevel)
3497             if defined $::RD_TRACE;
3498 0         0 $return = $score_return;
3499             }
3500 129         220 splice @{$thisparser->{errors}}, $err_at;
  129         307  
3501 129 50       413 $return = $item[$#item] unless defined $return;
3502 129 50       337 if (defined $::RD_TRACE)
3503             {
3504 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3505             $return . q{])}, "",
3506             q{key},
3507             $tracelevel);
3508 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3509             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3510             Parse::RecDescent::_tracefirst($text),
3511             , q{key},
3512             $tracelevel)
3513             }
3514 129         332 $_[1] = $text;
3515 129         794 return $return;
3516             }
3517              
3518             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3519             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::rfc822message
3520             {
3521 53     53   136 my $thisparser = $_[0];
3522 1     1   8 use vars q{$tracelevel};
  1         2  
  1         342  
3523 53   50     187 local $tracelevel = ($tracelevel||0)+1;
3524 53         113 $ERRORS = 0;
3525 53         184 my $thisrule = $thisparser->{"rules"}{"rfc822message"};
3526              
3527 53 50       172 Parse::RecDescent::_trace(q{Trying rule: [rfc822message]},
3528             Parse::RecDescent::_tracefirst($_[1]),
3529             q{rfc822message},
3530             $tracelevel)
3531             if defined $::RD_TRACE;
3532              
3533 53         149 my $def_at = @{$thisparser->{deferred}};
  53         128  
3534 53         98 my $err_at = @{$thisparser->{errors}};
  53         136  
3535              
3536 53         223 my $score;
3537             my $score_return;
3538 53         0 my $_tok;
3539 53         86 my $return = undef;
3540 53         88 my $_matched=0;
3541 53         99 my $commit=0;
3542 53         115 my @item = ();
3543 53         119 my %item = ();
3544 53         93 my $repeating = $_[2];
3545 53         105 my $_noactions = $_[3];
3546 53 50       190 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  53         92  
  53         120  
3547 53         118 my $_itempos = $_[5];
3548 53 50       183 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3549 53         185 my $text;
3550             my $lastsep;
3551 53         0 my $current_match;
3552 53         184 my $expectation = new Parse::RecDescent::Expectation(q{MESSAGE});
3553 53         412 $expectation->at($_[1]);
3554            
3555 53         218 my $thisline;
3556 53         215 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3557              
3558            
3559              
3560 53   33     476 while (!$_matched && !$commit)
3561             {
3562            
3563 53 50       159 Parse::RecDescent::_trace(q{Trying production: [MESSAGE RFC822]},
3564             Parse::RecDescent::_tracefirst($_[1]),
3565             q{rfc822message},
3566             $tracelevel)
3567             if defined $::RD_TRACE;
3568 53         216 my $thisprod = $thisrule->{"prods"}[0];
3569 53         118 $text = $_[1];
3570 53         91 my $_savetext;
3571 53         129 @item = (q{rfc822message});
3572 53         137 %item = (__RULE__ => q{rfc822message});
3573 53         91 my $repcount = 0;
3574              
3575              
3576 53 50       141 Parse::RecDescent::_trace(q{Trying subrule: [MESSAGE]},
3577             Parse::RecDescent::_tracefirst($text),
3578             q{rfc822message},
3579             $tracelevel)
3580             if defined $::RD_TRACE;
3581 1     1   9 if (1) { no strict qw{refs};
  1         2  
  1         166  
  53         111  
3582 53         170 $expectation->is(q{})->at($text);
3583 53 100   53   708 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::MESSAGE($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  53         156  
3584             {
3585            
3586 31 50       114 Parse::RecDescent::_trace(q{<>},
3587             Parse::RecDescent::_tracefirst($text),
3588             q{rfc822message},
3589             $tracelevel)
3590             if defined $::RD_TRACE;
3591 31         118 $expectation->failed();
3592 31         117 last;
3593             }
3594 22 50       121 Parse::RecDescent::_trace(q{>>Matched subrule: [MESSAGE]<< (return value: [}
3595             . $_tok . q{]},
3596              
3597             Parse::RecDescent::_tracefirst($text),
3598             q{rfc822message},
3599             $tracelevel)
3600             if defined $::RD_TRACE;
3601 22         86 $item{q{MESSAGE}} = $_tok;
3602 22         58 push @item, $_tok;
3603            
3604             }
3605              
3606 22 50       63 Parse::RecDescent::_trace(q{Trying subrule: [RFC822]},
3607             Parse::RecDescent::_tracefirst($text),
3608             q{rfc822message},
3609             $tracelevel)
3610             if defined $::RD_TRACE;
3611 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         518  
  22         49  
3612 22         83 $expectation->is(q{RFC822})->at($text);
3613 22 100   22   314 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFC822($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  22         56  
3614             {
3615            
3616 1 50       5 Parse::RecDescent::_trace(q{<>},
3617             Parse::RecDescent::_tracefirst($text),
3618             q{rfc822message},
3619             $tracelevel)
3620             if defined $::RD_TRACE;
3621 1         5 $expectation->failed();
3622 1         10 last;
3623             }
3624 21 50       94 Parse::RecDescent::_trace(q{>>Matched subrule: [RFC822]<< (return value: [}
3625             . $_tok . q{]},
3626              
3627             Parse::RecDescent::_tracefirst($text),
3628             q{rfc822message},
3629             $tracelevel)
3630             if defined $::RD_TRACE;
3631 21         62 $item{q{RFC822}} = $_tok;
3632 21         66 push @item, $_tok;
3633            
3634             }
3635              
3636 21 50       86 Parse::RecDescent::_trace(q{Trying action},
3637             Parse::RecDescent::_tracefirst($text),
3638             q{rfc822message},
3639             $tracelevel)
3640             if defined $::RD_TRACE;
3641            
3642              
3643 21 50       64 $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE RFC822" };
  21         71  
3644 21 50       59 unless (defined $_tok)
3645             {
3646 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
3647             if defined $::RD_TRACE;
3648 0         0 last;
3649             }
3650 21 50       64 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3651             . $_tok . q{])},
3652             Parse::RecDescent::_tracefirst($text))
3653             if defined $::RD_TRACE;
3654 21         40 push @item, $_tok;
3655 21         51 $item{__ACTION1__}=$_tok;
3656            
3657              
3658 21 50       73 Parse::RecDescent::_trace(q{>>Matched production: [MESSAGE RFC822]<<},
3659             Parse::RecDescent::_tracefirst($text),
3660             q{rfc822message},
3661             $tracelevel)
3662             if defined $::RD_TRACE;
3663              
3664              
3665              
3666 21         41 $_matched = 1;
3667 21         45 last;
3668             }
3669              
3670             splice
3671 53 100       253 @{$thisparser->{deferred}}, $def_at unless $_matched;
  32         115  
3672            
3673 53 100 66     238 unless ( $_matched || defined($score) )
3674             {
3675 32         62 splice @{$thisparser->{deferred}}, $def_at;
  32         84  
3676            
3677              
3678 32         79 $_[1] = $text; # NOT SURE THIS IS NEEDED
3679 32 50       98 Parse::RecDescent::_trace(q{<>},
3680             Parse::RecDescent::_tracefirst($_[1]),
3681             q{rfc822message},
3682             $tracelevel)
3683             if defined $::RD_TRACE;
3684 32         201 return undef;
3685             }
3686 21 50 33     80 if (!defined($return) && defined($score))
3687             {
3688 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3689             q{rfc822message},
3690             $tracelevel)
3691             if defined $::RD_TRACE;
3692 0         0 $return = $score_return;
3693             }
3694 21         39 splice @{$thisparser->{errors}}, $err_at;
  21         63  
3695 21 50       73 $return = $item[$#item] unless defined $return;
3696 21 50       67 if (defined $::RD_TRACE)
3697             {
3698 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3699             $return . q{])}, "",
3700             q{rfc822message},
3701             $tracelevel);
3702 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3703             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3704             Parse::RecDescent::_tracefirst($text),
3705             , q{rfc822message},
3706             $tracelevel)
3707             }
3708 21         52 $_[1] = $text;
3709 21         155 return $return;
3710             }
3711              
3712             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3713             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bcc
3714             {
3715 24     24   62 my $thisparser = $_[0];
3716 1     1   8 use vars q{$tracelevel};
  1         2  
  1         352  
3717 24   50     100 local $tracelevel = ($tracelevel||0)+1;
3718 24         49 $ERRORS = 0;
3719 24         93 my $thisrule = $thisparser->{"rules"}{"bcc"};
3720              
3721 24 50       84 Parse::RecDescent::_trace(q{Trying rule: [bcc]},
3722             Parse::RecDescent::_tracefirst($_[1]),
3723             q{bcc},
3724             $tracelevel)
3725             if defined $::RD_TRACE;
3726              
3727 24         42 my $def_at = @{$thisparser->{deferred}};
  24         70  
3728 24         49 my $err_at = @{$thisparser->{errors}};
  24         66  
3729              
3730 24         88 my $score;
3731             my $score_return;
3732 24         0 my $_tok;
3733 24         47 my $return = undef;
3734 24         50 my $_matched=0;
3735 24         67 my $commit=0;
3736 24         57 my @item = ();
3737 24         53 my %item = ();
3738 24         45 my $repeating = $_[2];
3739 24         45 my $_noactions = $_[3];
3740 24 50       71 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         59  
  24         63  
3741 24         58 my $_itempos = $_[5];
3742 24 50       107 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3743 24         77 my $text;
3744             my $lastsep;
3745 24         0 my $current_match;
3746 24         82 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
3747 24         180 $expectation->at($_[1]);
3748            
3749 24         112 my $thisline;
3750 24         103 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3751              
3752            
3753              
3754 24   33     274 while (!$_matched && !$commit)
3755             {
3756            
3757 24 50       88 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
3758             Parse::RecDescent::_tracefirst($_[1]),
3759             q{bcc},
3760             $tracelevel)
3761             if defined $::RD_TRACE;
3762 24         86 my $thisprod = $thisrule->{"prods"}[0];
3763 24         52 $text = $_[1];
3764 24         40 my $_savetext;
3765 24         67 @item = (q{bcc});
3766 24         73 %item = (__RULE__ => q{bcc});
3767 24         39 my $repcount = 0;
3768              
3769              
3770 24 50       72 Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]},
3771             Parse::RecDescent::_tracefirst($text),
3772             q{bcc},
3773             $tracelevel)
3774             if defined $::RD_TRACE;
3775 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         458  
  24         51  
3776 24         67 $expectation->is(q{})->at($text);
3777 24 50   24   269 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         51  
3778             {
3779            
3780 0 0       0 Parse::RecDescent::_trace(q{<>},
3781             Parse::RecDescent::_tracefirst($text),
3782             q{bcc},
3783             $tracelevel)
3784             if defined $::RD_TRACE;
3785 0         0 $expectation->failed();
3786 0         0 last;
3787             }
3788 24 50       112 Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [}
3789             . $_tok . q{]},
3790              
3791             Parse::RecDescent::_tracefirst($text),
3792             q{bcc},
3793             $tracelevel)
3794             if defined $::RD_TRACE;
3795 24         66 $item{q{ADDRESSES}} = $_tok;
3796 24         55 push @item, $_tok;
3797            
3798             }
3799              
3800 24 50       66 Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<},
3801             Parse::RecDescent::_tracefirst($text),
3802             q{bcc},
3803             $tracelevel)
3804             if defined $::RD_TRACE;
3805              
3806              
3807              
3808 24         47 $_matched = 1;
3809 24         60 last;
3810             }
3811              
3812             splice
3813 24 50       75 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
3814            
3815 24 50 33     100 unless ( $_matched || defined($score) )
3816             {
3817 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
3818            
3819              
3820 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
3821 0 0       0 Parse::RecDescent::_trace(q{<>},
3822             Parse::RecDescent::_tracefirst($_[1]),
3823             q{bcc},
3824             $tracelevel)
3825             if defined $::RD_TRACE;
3826 0         0 return undef;
3827             }
3828 24 50 33     142 if (!defined($return) && defined($score))
3829             {
3830 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3831             q{bcc},
3832             $tracelevel)
3833             if defined $::RD_TRACE;
3834 0         0 $return = $score_return;
3835             }
3836 24         46 splice @{$thisparser->{errors}}, $err_at;
  24         67  
3837 24 50       70 $return = $item[$#item] unless defined $return;
3838 24 50       76 if (defined $::RD_TRACE)
3839             {
3840 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3841             $return . q{])}, "",
3842             q{bcc},
3843             $tracelevel);
3844 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3845             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3846             Parse::RecDescent::_tracefirst($text),
3847             , q{bcc},
3848             $tracelevel)
3849             }
3850 24         59 $_[1] = $text;
3851 24         141 return $return;
3852             }
3853              
3854             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3855             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp
3856             {
3857 102     102   1750 my $thisparser = $_[0];
3858 1     1   8 use vars q{$tracelevel};
  1         2  
  1         349  
3859 102   50     319 local $tracelevel = ($tracelevel||0)+1;
3860 102         222 $ERRORS = 0;
3861 102         297 my $thisrule = $thisparser->{"rules"}{"bodydisp"};
3862              
3863 102 50       263 Parse::RecDescent::_trace(q{Trying rule: [bodydisp]},
3864             Parse::RecDescent::_tracefirst($_[1]),
3865             q{bodydisp},
3866             $tracelevel)
3867             if defined $::RD_TRACE;
3868              
3869 102         213 my $def_at = @{$thisparser->{deferred}};
  102         247  
3870 102         175 my $err_at = @{$thisparser->{errors}};
  102         248  
3871              
3872 102         383 my $score;
3873             my $score_return;
3874 102         0 my $_tok;
3875 102         192 my $return = undef;
3876 102         231 my $_matched=0;
3877 102         193 my $commit=0;
3878 102         214 my @item = ();
3879 102         233 my %item = ();
3880 102         201 my $repeating = $_[2];
3881 102         166 my $_noactions = $_[3];
3882 102 50       262 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         212  
  102         264  
3883 102         206 my $_itempos = $_[5];
3884 102 50       357 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3885 102         368 my $text;
3886             my $lastsep;
3887 102         0 my $current_match;
3888 102         296 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or KVPAIRS});
3889 102         701 $expectation->at($_[1]);
3890            
3891 102         435 my $thisline;
3892 102         436 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3893              
3894            
3895              
3896 102   33     979 while (!$_matched && !$commit)
3897             {
3898            
3899 102 50       266 Parse::RecDescent::_trace(q{Trying production: [NIL]},
3900             Parse::RecDescent::_tracefirst($_[1]),
3901             q{bodydisp},
3902             $tracelevel)
3903             if defined $::RD_TRACE;
3904 102         356 my $thisprod = $thisrule->{"prods"}[0];
3905 102         218 $text = $_[1];
3906 102         165 my $_savetext;
3907 102         220 @item = (q{bodydisp});
3908 102         278 %item = (__RULE__ => q{bodydisp});
3909 102         206 my $repcount = 0;
3910              
3911              
3912 102 50       277 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
3913             Parse::RecDescent::_tracefirst($text),
3914             q{bodydisp},
3915             $tracelevel)
3916             if defined $::RD_TRACE;
3917 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         279  
  102         173  
3918 102         324 $expectation->is(q{})->at($text);
3919 102 100   102   1061 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         242  
3920             {
3921            
3922 38 50       130 Parse::RecDescent::_trace(q{<>},
3923             Parse::RecDescent::_tracefirst($text),
3924             q{bodydisp},
3925             $tracelevel)
3926             if defined $::RD_TRACE;
3927 38         130 $expectation->failed();
3928 38         143 last;
3929             }
3930 64 50       316 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
3931             . $_tok . q{]},
3932              
3933             Parse::RecDescent::_tracefirst($text),
3934             q{bodydisp},
3935             $tracelevel)
3936             if defined $::RD_TRACE;
3937 64         174 $item{q{NIL}} = $_tok;
3938 64         152 push @item, $_tok;
3939            
3940             }
3941              
3942 64 50       170 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
3943             Parse::RecDescent::_tracefirst($text),
3944             q{bodydisp},
3945             $tracelevel)
3946             if defined $::RD_TRACE;
3947              
3948              
3949              
3950 64         138 $_matched = 1;
3951 64         128 last;
3952             }
3953              
3954             splice
3955 102 100       336 @{$thisparser->{deferred}}, $def_at unless $_matched;
  38         116  
3956            
3957 102   66     388 while (!$_matched && !$commit)
3958             {
3959            
3960 38 50       117 Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]},
3961             Parse::RecDescent::_tracefirst($_[1]),
3962             q{bodydisp},
3963             $tracelevel)
3964             if defined $::RD_TRACE;
3965 38         92 my $thisprod = $thisrule->{"prods"}[1];
3966 38         96 $text = $_[1];
3967 38         63 my $_savetext;
3968 38         119 @item = (q{bodydisp});
3969 38         97 %item = (__RULE__ => q{bodydisp});
3970 38         76 my $repcount = 0;
3971              
3972              
3973 38 50       107 Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]},
3974             Parse::RecDescent::_tracefirst($text),
3975             q{bodydisp},
3976             $tracelevel)
3977             if defined $::RD_TRACE;
3978 1     1   7 if (1) { no strict qw{refs};
  1         4  
  1         476  
  38         68  
3979 38         118 $expectation->is(q{})->at($text);
3980 38 100   38   420 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  38         116  
3981             {
3982            
3983 10 50       29 Parse::RecDescent::_trace(q{<>},
3984             Parse::RecDescent::_tracefirst($text),
3985             q{bodydisp},
3986             $tracelevel)
3987             if defined $::RD_TRACE;
3988 10         31 $expectation->failed();
3989 10         33 last;
3990             }
3991 28 50       480 Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [}
3992             . $_tok . q{]},
3993              
3994             Parse::RecDescent::_tracefirst($text),
3995             q{bodydisp},
3996             $tracelevel)
3997             if defined $::RD_TRACE;
3998 28         90 $item{q{KVPAIRS}} = $_tok;
3999 28         72 push @item, $_tok;
4000            
4001             }
4002              
4003 28 50       106 Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<},
4004             Parse::RecDescent::_tracefirst($text),
4005             q{bodydisp},
4006             $tracelevel)
4007             if defined $::RD_TRACE;
4008              
4009              
4010              
4011 28         61 $_matched = 1;
4012 28         74 last;
4013             }
4014              
4015             splice
4016 102 100       297 @{$thisparser->{deferred}}, $def_at unless $_matched;
  10         25  
4017            
4018 102 100 66     425 unless ( $_matched || defined($score) )
4019             {
4020 10         22 splice @{$thisparser->{deferred}}, $def_at;
  10         19  
4021            
4022              
4023 10         29 $_[1] = $text; # NOT SURE THIS IS NEEDED
4024 10 50       29 Parse::RecDescent::_trace(q{<>},
4025             Parse::RecDescent::_tracefirst($_[1]),
4026             q{bodydisp},
4027             $tracelevel)
4028             if defined $::RD_TRACE;
4029 10         45 return undef;
4030             }
4031 92 50 33     451 if (!defined($return) && defined($score))
4032             {
4033 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4034             q{bodydisp},
4035             $tracelevel)
4036             if defined $::RD_TRACE;
4037 0         0 $return = $score_return;
4038             }
4039 92         188 splice @{$thisparser->{errors}}, $err_at;
  92         252  
4040 92 50       308 $return = $item[$#item] unless defined $return;
4041 92 50       271 if (defined $::RD_TRACE)
4042             {
4043 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4044             $return . q{])}, "",
4045             q{bodydisp},
4046             $tracelevel);
4047 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4048             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4049             Parse::RecDescent::_tracefirst($text),
4050             , q{bodydisp},
4051             $tracelevel)
4052             }
4053 92         181 $_[1] = $text;
4054 92         529 return $return;
4055             }
4056              
4057             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4058             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS
4059             {
4060 133     133   282 my $thisparser = $_[0];
4061 1     1   7 use vars q{$tracelevel};
  1         2  
  1         1142  
4062 133   50     413 local $tracelevel = ($tracelevel||0)+1;
4063 133         226 $ERRORS = 0;
4064 133         340 my $thisrule = $thisparser->{"rules"}{"KVPAIRS"};
4065              
4066 133 50       299 Parse::RecDescent::_trace(q{Trying rule: [KVPAIRS]},
4067             Parse::RecDescent::_tracefirst($_[1]),
4068             q{KVPAIRS},
4069             $tracelevel)
4070             if defined $::RD_TRACE;
4071              
4072 133         202 my $def_at = @{$thisparser->{deferred}};
  133         310  
4073 133         233 my $err_at = @{$thisparser->{errors}};
  133         301  
4074              
4075 133         416 my $score;
4076             my $score_return;
4077 133         0 my $_tok;
4078 133         227 my $return = undef;
4079 133         215 my $_matched=0;
4080 133         243 my $commit=0;
4081 133         319 my @item = ();
4082 133         283 my %item = ();
4083 133         224 my $repeating = $_[2];
4084 133         243 my $_noactions = $_[3];
4085 133 50       358 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  133         240  
  133         279  
4086 133         264 my $_itempos = $_[5];
4087 133 50       401 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4088 133         374 my $text;
4089             my $lastsep;
4090 133         0 my $current_match;
4091 133         354 my $expectation = new Parse::RecDescent::Expectation(q{'('});
4092 133         900 $expectation->at($_[1]);
4093            
4094 133         585 my $thisline;
4095 133         536 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4096              
4097            
4098              
4099 133   33     1168 while (!$_matched && !$commit)
4100             {
4101            
4102 133 50       378 Parse::RecDescent::_trace(q{Trying production: ['(' kvpair ')']},
4103             Parse::RecDescent::_tracefirst($_[1]),
4104             q{KVPAIRS},
4105             $tracelevel)
4106             if defined $::RD_TRACE;
4107 133         359 my $thisprod = $thisrule->{"prods"}[0];
4108 133         296 $text = $_[1];
4109 133         267 my $_savetext;
4110 133         349 @item = (q{KVPAIRS});
4111 133         322 %item = (__RULE__ => q{KVPAIRS});
4112 133         258 my $repcount = 0;
4113              
4114              
4115 133 50       326 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
4116             Parse::RecDescent::_tracefirst($text),
4117             q{KVPAIRS},
4118             $tracelevel)
4119             if defined $::RD_TRACE;
4120 133         307 undef $lastsep;
4121 133         358 $expectation->is(q{})->at($text);
4122            
4123              
4124 133 100 33     1585 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  133 100 66     1081  
  133   66     287  
  133         917  
4125             substr($text,0,length($_tok)) eq $_tok and
4126 120         298 do { substr($text,0,length($_tok)) = ""; 1; }
  120         418  
4127             )
4128             {
4129 13 50       40 $text = $lastsep . $text if defined $lastsep;
4130            
4131 13         45 $expectation->failed();
4132 13 50       57 Parse::RecDescent::_trace(q{<>},
4133             Parse::RecDescent::_tracefirst($text))
4134             if defined $::RD_TRACE;
4135 13         35 last;
4136             }
4137 120 50       344 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4138             . $_tok . q{])},
4139             Parse::RecDescent::_tracefirst($text))
4140             if defined $::RD_TRACE;
4141 120         390 push @item, $item{__STRING1__}=$_tok;
4142            
4143              
4144 120 50       301 Parse::RecDescent::_trace(q{Trying repeated subrule: [kvpair]},
4145             Parse::RecDescent::_tracefirst($text),
4146             q{KVPAIRS},
4147             $tracelevel)
4148             if defined $::RD_TRACE;
4149 120         328 $expectation->is(q{kvpair})->at($text);
4150            
4151 120 50   249   1586 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::kvpair, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  249         561  
4152             {
4153 0 0       0 Parse::RecDescent::_trace(q{<>},
4154             Parse::RecDescent::_tracefirst($text),
4155             q{KVPAIRS},
4156             $tracelevel)
4157             if defined $::RD_TRACE;
4158 0         0 last;
4159             }
4160 120 50       1931 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [kvpair]<< (}
4161             . @$_tok . q{ times)},
4162              
4163             Parse::RecDescent::_tracefirst($text),
4164             q{KVPAIRS},
4165             $tracelevel)
4166             if defined $::RD_TRACE;
4167 120         364 $item{q{kvpair(s)}} = $_tok;
4168 120         419 push @item, $_tok;
4169            
4170              
4171              
4172 120 50       310 Parse::RecDescent::_trace(q{Trying terminal: [')']},
4173             Parse::RecDescent::_tracefirst($text),
4174             q{KVPAIRS},
4175             $tracelevel)
4176             if defined $::RD_TRACE;
4177 120         239 undef $lastsep;
4178 120         358 $expectation->is(q{')'})->at($text);
4179            
4180              
4181 120 50 33     1501 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  120 50 33     832  
  120   33     272  
  120         870  
4182             substr($text,0,length($_tok)) eq $_tok and
4183 120         262 do { substr($text,0,length($_tok)) = ""; 1; }
  120         380  
4184             )
4185             {
4186 0 0       0 $text = $lastsep . $text if defined $lastsep;
4187            
4188 0         0 $expectation->failed();
4189 0 0       0 Parse::RecDescent::_trace(q{<>},
4190             Parse::RecDescent::_tracefirst($text))
4191             if defined $::RD_TRACE;
4192 0         0 last;
4193             }
4194 120 50       383 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4195             . $_tok . q{])},
4196             Parse::RecDescent::_tracefirst($text))
4197             if defined $::RD_TRACE;
4198 120         383 push @item, $item{__STRING2__}=$_tok;
4199            
4200              
4201 120 50       416 Parse::RecDescent::_trace(q{Trying action},
4202             Parse::RecDescent::_tracefirst($text),
4203             q{KVPAIRS},
4204             $tracelevel)
4205             if defined $::RD_TRACE;
4206            
4207              
4208 120 50       283 $_tok = ($_noactions) ? 0 : do { $return = { map { (%$_) } @{$item{'kvpair(s)'}} } };
  120         200  
  129         1072  
  120         417  
4209 120 50       368 unless (defined $_tok)
4210             {
4211 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4212             if defined $::RD_TRACE;
4213 0         0 last;
4214             }
4215 120 50       273 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4216             . $_tok . q{])},
4217             Parse::RecDescent::_tracefirst($text))
4218             if defined $::RD_TRACE;
4219 120         233 push @item, $_tok;
4220 120         312 $item{__ACTION1__}=$_tok;
4221            
4222              
4223 120 50       317 Parse::RecDescent::_trace(q{>>Matched production: ['(' kvpair ')']<<},
4224             Parse::RecDescent::_tracefirst($text),
4225             q{KVPAIRS},
4226             $tracelevel)
4227             if defined $::RD_TRACE;
4228              
4229              
4230              
4231 120         237 $_matched = 1;
4232 120         272 last;
4233             }
4234              
4235             splice
4236 133 100       383 @{$thisparser->{deferred}}, $def_at unless $_matched;
  13         36  
4237            
4238 133 100 66     421 unless ( $_matched || defined($score) )
4239             {
4240 13         32 splice @{$thisparser->{deferred}}, $def_at;
  13         31  
4241            
4242              
4243 13         24 $_[1] = $text; # NOT SURE THIS IS NEEDED
4244 13 50       28 Parse::RecDescent::_trace(q{<>},
4245             Parse::RecDescent::_tracefirst($_[1]),
4246             q{KVPAIRS},
4247             $tracelevel)
4248             if defined $::RD_TRACE;
4249 13         77 return undef;
4250             }
4251 120 50 33     354 if (!defined($return) && defined($score))
4252             {
4253 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4254             q{KVPAIRS},
4255             $tracelevel)
4256             if defined $::RD_TRACE;
4257 0         0 $return = $score_return;
4258             }
4259 120         198 splice @{$thisparser->{errors}}, $err_at;
  120         343  
4260 120 50       376 $return = $item[$#item] unless defined $return;
4261 120 50       352 if (defined $::RD_TRACE)
4262             {
4263 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4264             $return . q{])}, "",
4265             q{KVPAIRS},
4266             $tracelevel);
4267 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4268             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4269             Parse::RecDescent::_tracefirst($text),
4270             , q{KVPAIRS},
4271             $tracelevel)
4272             }
4273 120         366 $_[1] = $text;
4274 120         1083 return $return;
4275             }
4276              
4277             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4278             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5
4279             {
4280 72     72   1333 my $thisparser = $_[0];
4281 1     1   8 use vars q{$tracelevel};
  1         2  
  1         352  
4282 72   50     272 local $tracelevel = ($tracelevel||0)+1;
4283 72         168 $ERRORS = 0;
4284 72         253 my $thisrule = $thisparser->{"rules"}{"bodyMD5"};
4285              
4286 72 50       191 Parse::RecDescent::_trace(q{Trying rule: [bodyMD5]},
4287             Parse::RecDescent::_tracefirst($_[1]),
4288             q{bodyMD5},
4289             $tracelevel)
4290             if defined $::RD_TRACE;
4291              
4292 72         154 my $def_at = @{$thisparser->{deferred}};
  72         188  
4293 72         144 my $err_at = @{$thisparser->{errors}};
  72         163  
4294              
4295 72         210 my $score;
4296             my $score_return;
4297 72         0 my $_tok;
4298 72         118 my $return = undef;
4299 72         131 my $_matched=0;
4300 72         110 my $commit=0;
4301 72         131 my @item = ();
4302 72         136 my %item = ();
4303 72         160 my $repeating = $_[2];
4304 72         142 my $_noactions = $_[3];
4305 72 50       266 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         128  
  72         174  
4306 72         147 my $_itempos = $_[5];
4307 72 50       274 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4308 72         206 my $text;
4309             my $lastsep;
4310 72         0 my $current_match;
4311 72         243 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
4312 72         536 $expectation->at($_[1]);
4313            
4314 72         324 my $thisline;
4315 72         281 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4316              
4317            
4318              
4319 72   33     700 while (!$_matched && !$commit)
4320             {
4321            
4322 72 50       223 Parse::RecDescent::_trace(q{Trying production: [NIL]},
4323             Parse::RecDescent::_tracefirst($_[1]),
4324             q{bodyMD5},
4325             $tracelevel)
4326             if defined $::RD_TRACE;
4327 72         276 my $thisprod = $thisrule->{"prods"}[0];
4328 72         159 $text = $_[1];
4329 72         159 my $_savetext;
4330 72         175 @item = (q{bodyMD5});
4331 72         242 %item = (__RULE__ => q{bodyMD5});
4332 72         157 my $repcount = 0;
4333              
4334              
4335 72 50       204 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
4336             Parse::RecDescent::_tracefirst($text),
4337             q{bodyMD5},
4338             $tracelevel)
4339             if defined $::RD_TRACE;
4340 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         286  
  72         149  
4341 72         298 $expectation->is(q{})->at($text);
4342 72 100   72   783 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         156  
4343             {
4344            
4345 8 50       31 Parse::RecDescent::_trace(q{<>},
4346             Parse::RecDescent::_tracefirst($text),
4347             q{bodyMD5},
4348             $tracelevel)
4349             if defined $::RD_TRACE;
4350 8         30 $expectation->failed();
4351 8         32 last;
4352             }
4353 64 50       288 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
4354             . $_tok . q{]},
4355              
4356             Parse::RecDescent::_tracefirst($text),
4357             q{bodyMD5},
4358             $tracelevel)
4359             if defined $::RD_TRACE;
4360 64         170 $item{q{NIL}} = $_tok;
4361 64         160 push @item, $_tok;
4362            
4363             }
4364              
4365 64 50       174 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
4366             Parse::RecDescent::_tracefirst($text),
4367             q{bodyMD5},
4368             $tracelevel)
4369             if defined $::RD_TRACE;
4370              
4371              
4372              
4373 64         137 $_matched = 1;
4374 64         127 last;
4375             }
4376              
4377             splice
4378 72 100       229 @{$thisparser->{deferred}}, $def_at unless $_matched;
  8         20  
4379            
4380 72   66     267 while (!$_matched && !$commit)
4381             {
4382            
4383 8 50       21 Parse::RecDescent::_trace(q{Trying production: [STRING]},
4384             Parse::RecDescent::_tracefirst($_[1]),
4385             q{bodyMD5},
4386             $tracelevel)
4387             if defined $::RD_TRACE;
4388 8         22 my $thisprod = $thisrule->{"prods"}[1];
4389 8         18 $text = $_[1];
4390 8         15 my $_savetext;
4391 8         23 @item = (q{bodyMD5});
4392 8         27 %item = (__RULE__ => q{bodyMD5});
4393 8         16 my $repcount = 0;
4394              
4395              
4396 8 50       24 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
4397             Parse::RecDescent::_tracefirst($text),
4398             q{bodyMD5},
4399             $tracelevel)
4400             if defined $::RD_TRACE;
4401 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         460  
  8         17  
4402 8         25 $expectation->is(q{})->at($text);
4403 8 100   8   99 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  8         19  
4404             {
4405            
4406 7 50       36 Parse::RecDescent::_trace(q{<>},
4407             Parse::RecDescent::_tracefirst($text),
4408             q{bodyMD5},
4409             $tracelevel)
4410             if defined $::RD_TRACE;
4411 7         25 $expectation->failed();
4412 7         28 last;
4413             }
4414 1 50       6 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
4415             . $_tok . q{]},
4416              
4417             Parse::RecDescent::_tracefirst($text),
4418             q{bodyMD5},
4419             $tracelevel)
4420             if defined $::RD_TRACE;
4421 1         3 $item{q{STRING}} = $_tok;
4422 1         2 push @item, $_tok;
4423            
4424             }
4425              
4426 1 50       5 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
4427             Parse::RecDescent::_tracefirst($text),
4428             q{bodyMD5},
4429             $tracelevel)
4430             if defined $::RD_TRACE;
4431              
4432              
4433              
4434 1         3 $_matched = 1;
4435 1         2 last;
4436             }
4437              
4438             splice
4439 72 100       216 @{$thisparser->{deferred}}, $def_at unless $_matched;
  7         24  
4440            
4441 72 100 66     291 unless ( $_matched || defined($score) )
4442             {
4443 7         14 splice @{$thisparser->{deferred}}, $def_at;
  7         17  
4444            
4445              
4446 7         19 $_[1] = $text; # NOT SURE THIS IS NEEDED
4447 7 50       22 Parse::RecDescent::_trace(q{<>},
4448             Parse::RecDescent::_tracefirst($_[1]),
4449             q{bodyMD5},
4450             $tracelevel)
4451             if defined $::RD_TRACE;
4452 7         34 return undef;
4453             }
4454 65 50 33     331 if (!defined($return) && defined($score))
4455             {
4456 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4457             q{bodyMD5},
4458             $tracelevel)
4459             if defined $::RD_TRACE;
4460 0         0 $return = $score_return;
4461             }
4462 65         133 splice @{$thisparser->{errors}}, $err_at;
  65         170  
4463 65 50       233 $return = $item[$#item] unless defined $return;
4464 65 50       175 if (defined $::RD_TRACE)
4465             {
4466 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4467             $return . q{])}, "",
4468             q{bodyMD5},
4469             $tracelevel);
4470 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4471             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4472             Parse::RecDescent::_tracefirst($text),
4473             , q{bodyMD5},
4474             $tracelevel)
4475             }
4476 65         172 $_[1] = $text;
4477 65         364 return $return;
4478             }
4479              
4480             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4481             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part
4482             {
4483 122     122   1207 my $thisparser = $_[0];
4484 1     1   8 use vars q{$tracelevel};
  1         2  
  1         362  
4485 122   50     535 local $tracelevel = ($tracelevel||0)+1;
4486 122         293 $ERRORS = 0;
4487 122         415 my $thisrule = $thisparser->{"rules"}{"part"};
4488              
4489 122 50       386 Parse::RecDescent::_trace(q{Trying rule: [part]},
4490             Parse::RecDescent::_tracefirst($_[1]),
4491             q{part},
4492             $tracelevel)
4493             if defined $::RD_TRACE;
4494              
4495 122         188 my $def_at = @{$thisparser->{deferred}};
  122         341  
4496 122         263 my $err_at = @{$thisparser->{errors}};
  122         352  
4497              
4498 122         431 my $score;
4499             my $score_return;
4500 122         0 my $_tok;
4501 122         259 my $return = undef;
4502 122         232 my $_matched=0;
4503 122         229 my $commit=0;
4504 122         329 my @item = ();
4505 122         227 my %item = ();
4506 122         289 my $repeating = $_[2];
4507 122         240 my $_noactions = $_[3];
4508 122 50       352 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  122         218  
  122         322  
4509 122         248 my $_itempos = $_[5];
4510 122 50       400 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4511 122         402 my $text;
4512             my $lastsep;
4513 122         0 my $current_match;
4514 122         417 my $expectation = new Parse::RecDescent::Expectation(q{multipart, or textmessage, or nestedmessage, or othertypemessage});
4515 122         877 $expectation->at($_[1]);
4516            
4517 122         743 my $thisline;
4518 122         520 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4519              
4520            
4521              
4522 122   33     1298 while (!$_matched && !$commit)
4523             {
4524            
4525 122 50       395 Parse::RecDescent::_trace(q{Trying production: [multipart]},
4526             Parse::RecDescent::_tracefirst($_[1]),
4527             q{part},
4528             $tracelevel)
4529             if defined $::RD_TRACE;
4530 122         373 my $thisprod = $thisrule->{"prods"}[0];
4531 122         448 $text = $_[1];
4532 122         275 my $_savetext;
4533 122         284 @item = (q{part});
4534 122         344 %item = (__RULE__ => q{part});
4535 122         242 my $repcount = 0;
4536              
4537              
4538 122 50       337 Parse::RecDescent::_trace(q{Trying subrule: [multipart]},
4539             Parse::RecDescent::_tracefirst($text),
4540             q{part},
4541             $tracelevel)
4542             if defined $::RD_TRACE;
4543 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         390  
  122         221  
4544 122         382 $expectation->is(q{})->at($text);
4545 122 100   122   1427 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::multipart($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  122         297  
4546             {
4547            
4548 92 50       342 Parse::RecDescent::_trace(q{<>},
4549             Parse::RecDescent::_tracefirst($text),
4550             q{part},
4551             $tracelevel)
4552             if defined $::RD_TRACE;
4553 92         302 $expectation->failed();
4554 92         369 last;
4555             }
4556 30 50       199 Parse::RecDescent::_trace(q{>>Matched subrule: [multipart]<< (return value: [}
4557             . $_tok . q{]},
4558              
4559             Parse::RecDescent::_tracefirst($text),
4560             q{part},
4561             $tracelevel)
4562             if defined $::RD_TRACE;
4563 30         89 $item{q{multipart}} = $_tok;
4564 30         76 push @item, $_tok;
4565            
4566             }
4567              
4568 30 50       96 Parse::RecDescent::_trace(q{Trying action},
4569             Parse::RecDescent::_tracefirst($text),
4570             q{part},
4571             $tracelevel)
4572             if defined $::RD_TRACE;
4573            
4574              
4575 30 50       77 $_tok = ($_noactions) ? 0 : do { $return = bless $item{multipart}, $mibs };
  30         110  
4576 30 50       100 unless (defined $_tok)
4577             {
4578 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4579             if defined $::RD_TRACE;
4580 0         0 last;
4581             }
4582 30 50       72 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4583             . $_tok . q{])},
4584             Parse::RecDescent::_tracefirst($text))
4585             if defined $::RD_TRACE;
4586 30         57 push @item, $_tok;
4587 30         75 $item{__ACTION1__}=$_tok;
4588            
4589              
4590 30 50       74 Parse::RecDescent::_trace(q{>>Matched production: [multipart]<<},
4591             Parse::RecDescent::_tracefirst($text),
4592             q{part},
4593             $tracelevel)
4594             if defined $::RD_TRACE;
4595              
4596              
4597              
4598 30         55 $_matched = 1;
4599 30         61 last;
4600             }
4601              
4602             splice
4603 122 100       452 @{$thisparser->{deferred}}, $def_at unless $_matched;
  92         240  
4604            
4605 122   66     593 while (!$_matched && !$commit)
4606             {
4607            
4608 92 50       259 Parse::RecDescent::_trace(q{Trying production: [textmessage]},
4609             Parse::RecDescent::_tracefirst($_[1]),
4610             q{part},
4611             $tracelevel)
4612             if defined $::RD_TRACE;
4613 92         247 my $thisprod = $thisrule->{"prods"}[1];
4614 92         301 $text = $_[1];
4615 92         138 my $_savetext;
4616 92         286 @item = (q{part});
4617 92         311 %item = (__RULE__ => q{part});
4618 92         167 my $repcount = 0;
4619              
4620              
4621 92 50       294 Parse::RecDescent::_trace(q{Trying subrule: [textmessage]},
4622             Parse::RecDescent::_tracefirst($text),
4623             q{part},
4624             $tracelevel)
4625             if defined $::RD_TRACE;
4626 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         389  
  92         181  
4627 92         284 $expectation->is(q{})->at($text);
4628 92 100   92   1220 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  92         222  
4629             {
4630            
4631 53 50       187 Parse::RecDescent::_trace(q{<>},
4632             Parse::RecDescent::_tracefirst($text),
4633             q{part},
4634             $tracelevel)
4635             if defined $::RD_TRACE;
4636 53         167 $expectation->failed();
4637 53         244 last;
4638             }
4639 39 50       249 Parse::RecDescent::_trace(q{>>Matched subrule: [textmessage]<< (return value: [}
4640             . $_tok . q{]},
4641              
4642             Parse::RecDescent::_tracefirst($text),
4643             q{part},
4644             $tracelevel)
4645             if defined $::RD_TRACE;
4646 39         146 $item{q{textmessage}} = $_tok;
4647 39         104 push @item, $_tok;
4648            
4649             }
4650              
4651 39 50       132 Parse::RecDescent::_trace(q{Trying action},
4652             Parse::RecDescent::_tracefirst($text),
4653             q{part},
4654             $tracelevel)
4655             if defined $::RD_TRACE;
4656            
4657              
4658 39 50       103 $_tok = ($_noactions) ? 0 : do { $return = bless $item{textmessage}, $mibs };
  39         176  
4659 39 50       117 unless (defined $_tok)
4660             {
4661 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4662             if defined $::RD_TRACE;
4663 0         0 last;
4664             }
4665 39 50       121 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4666             . $_tok . q{])},
4667             Parse::RecDescent::_tracefirst($text))
4668             if defined $::RD_TRACE;
4669 39         79 push @item, $_tok;
4670 39         97 $item{__ACTION1__}=$_tok;
4671            
4672              
4673 39 50       101 Parse::RecDescent::_trace(q{>>Matched production: [textmessage]<<},
4674             Parse::RecDescent::_tracefirst($text),
4675             q{part},
4676             $tracelevel)
4677             if defined $::RD_TRACE;
4678              
4679              
4680              
4681 39         81 $_matched = 1;
4682 39         106 last;
4683             }
4684              
4685             splice
4686 122 100       450 @{$thisparser->{deferred}}, $def_at unless $_matched;
  53         139  
4687            
4688 122   66     519 while (!$_matched && !$commit)
4689             {
4690            
4691 53 50       192 Parse::RecDescent::_trace(q{Trying production: [nestedmessage]},
4692             Parse::RecDescent::_tracefirst($_[1]),
4693             q{part},
4694             $tracelevel)
4695             if defined $::RD_TRACE;
4696 53         140 my $thisprod = $thisrule->{"prods"}[2];
4697 53         209 $text = $_[1];
4698 53         131 my $_savetext;
4699 53         157 @item = (q{part});
4700 53         164 %item = (__RULE__ => q{part});
4701 53         153 my $repcount = 0;
4702              
4703              
4704 53 50       156 Parse::RecDescent::_trace(q{Trying subrule: [nestedmessage]},
4705             Parse::RecDescent::_tracefirst($text),
4706             q{part},
4707             $tracelevel)
4708             if defined $::RD_TRACE;
4709 1     1   49 if (1) { no strict qw{refs};
  1         3  
  1         384  
  53         103  
4710 53         195 $expectation->is(q{})->at($text);
4711 53 100   53   819 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::nestedmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  53         143  
4712             {
4713            
4714 32 50       122 Parse::RecDescent::_trace(q{<>},
4715             Parse::RecDescent::_tracefirst($text),
4716             q{part},
4717             $tracelevel)
4718             if defined $::RD_TRACE;
4719 32         171 $expectation->failed();
4720 32         130 last;
4721             }
4722 21 50       149 Parse::RecDescent::_trace(q{>>Matched subrule: [nestedmessage]<< (return value: [}
4723             . $_tok . q{]},
4724              
4725             Parse::RecDescent::_tracefirst($text),
4726             q{part},
4727             $tracelevel)
4728             if defined $::RD_TRACE;
4729 21         72 $item{q{nestedmessage}} = $_tok;
4730 21         71 push @item, $_tok;
4731            
4732             }
4733              
4734 21 50       70 Parse::RecDescent::_trace(q{Trying action},
4735             Parse::RecDescent::_tracefirst($text),
4736             q{part},
4737             $tracelevel)
4738             if defined $::RD_TRACE;
4739            
4740              
4741 21 50       58 $_tok = ($_noactions) ? 0 : do { $return = bless $item{nestedmessage}, $mibs };
  21         80  
4742 21 50       64 unless (defined $_tok)
4743             {
4744 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4745             if defined $::RD_TRACE;
4746 0         0 last;
4747             }
4748 21 50       79 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4749             . $_tok . q{])},
4750             Parse::RecDescent::_tracefirst($text))
4751             if defined $::RD_TRACE;
4752 21         49 push @item, $_tok;
4753 21         51 $item{__ACTION1__}=$_tok;
4754            
4755              
4756 21 50       57 Parse::RecDescent::_trace(q{>>Matched production: [nestedmessage]<<},
4757             Parse::RecDescent::_tracefirst($text),
4758             q{part},
4759             $tracelevel)
4760             if defined $::RD_TRACE;
4761              
4762              
4763              
4764 21         41 $_matched = 1;
4765 21         46 last;
4766             }
4767              
4768             splice
4769 122 100       340 @{$thisparser->{deferred}}, $def_at unless $_matched;
  32         88  
4770            
4771 122   66     402 while (!$_matched && !$commit)
4772             {
4773            
4774 32 50       87 Parse::RecDescent::_trace(q{Trying production: [othertypemessage]},
4775             Parse::RecDescent::_tracefirst($_[1]),
4776             q{part},
4777             $tracelevel)
4778             if defined $::RD_TRACE;
4779 32         92 my $thisprod = $thisrule->{"prods"}[3];
4780 32         77 $text = $_[1];
4781 32         69 my $_savetext;
4782 32         104 @item = (q{part});
4783 32         95 %item = (__RULE__ => q{part});
4784 32         83 my $repcount = 0;
4785              
4786              
4787 32 50       99 Parse::RecDescent::_trace(q{Trying subrule: [othertypemessage]},
4788             Parse::RecDescent::_tracefirst($text),
4789             q{part},
4790             $tracelevel)
4791             if defined $::RD_TRACE;
4792 1     1   7 if (1) { no strict qw{refs};
  1         11  
  1         620  
  32         57  
4793 32         100 $expectation->is(q{})->at($text);
4794 32 100   32   405 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::othertypemessage($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  32         78  
4795             {
4796            
4797 20 50       76 Parse::RecDescent::_trace(q{<>},
4798             Parse::RecDescent::_tracefirst($text),
4799             q{part},
4800             $tracelevel)
4801             if defined $::RD_TRACE;
4802 20         67 $expectation->failed();
4803 20         68 last;
4804             }
4805 12 50       77 Parse::RecDescent::_trace(q{>>Matched subrule: [othertypemessage]<< (return value: [}
4806             . $_tok . q{]},
4807              
4808             Parse::RecDescent::_tracefirst($text),
4809             q{part},
4810             $tracelevel)
4811             if defined $::RD_TRACE;
4812 12         38 $item{q{othertypemessage}} = $_tok;
4813 12         66 push @item, $_tok;
4814            
4815             }
4816              
4817 12 50       42 Parse::RecDescent::_trace(q{Trying action},
4818             Parse::RecDescent::_tracefirst($text),
4819             q{part},
4820             $tracelevel)
4821             if defined $::RD_TRACE;
4822            
4823              
4824 12 50       46 $_tok = ($_noactions) ? 0 : do { $return = bless $item{othertypemessage}, $mibs };
  12         61  
4825 12 50       55 unless (defined $_tok)
4826             {
4827 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4828             if defined $::RD_TRACE;
4829 0         0 last;
4830             }
4831 12 50       40 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4832             . $_tok . q{])},
4833             Parse::RecDescent::_tracefirst($text))
4834             if defined $::RD_TRACE;
4835 12         29 push @item, $_tok;
4836 12         33 $item{__ACTION1__}=$_tok;
4837            
4838              
4839 12 50       37 Parse::RecDescent::_trace(q{>>Matched production: [othertypemessage]<<},
4840             Parse::RecDescent::_tracefirst($text),
4841             q{part},
4842             $tracelevel)
4843             if defined $::RD_TRACE;
4844              
4845              
4846              
4847 12         23 $_matched = 1;
4848 12         26 last;
4849             }
4850              
4851             splice
4852 122 100       302 @{$thisparser->{deferred}}, $def_at unless $_matched;
  20         66  
4853            
4854 122 100 66     413 unless ( $_matched || defined($score) )
4855             {
4856 20         36 splice @{$thisparser->{deferred}}, $def_at;
  20         56  
4857            
4858              
4859 20         41 $_[1] = $text; # NOT SURE THIS IS NEEDED
4860 20 50       66 Parse::RecDescent::_trace(q{<>},
4861             Parse::RecDescent::_tracefirst($_[1]),
4862             q{part},
4863             $tracelevel)
4864             if defined $::RD_TRACE;
4865 20         102 return undef;
4866             }
4867 102 50 33     377 if (!defined($return) && defined($score))
4868             {
4869 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4870             q{part},
4871             $tracelevel)
4872             if defined $::RD_TRACE;
4873 0         0 $return = $score_return;
4874             }
4875 102         249 splice @{$thisparser->{errors}}, $err_at;
  102         262  
4876 102 50       323 $return = $item[$#item] unless defined $return;
4877 102 50       258 if (defined $::RD_TRACE)
4878             {
4879 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4880             $return . q{])}, "",
4881             q{part},
4882             $tracelevel);
4883 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4884             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4885             Parse::RecDescent::_tracefirst($text),
4886             , q{part},
4887             $tracelevel)
4888             }
4889 102         289 $_[1] = $text;
4890 102         985 return $return;
4891             }
4892              
4893             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4894             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::TEXT
4895             {
4896 92     92   219 my $thisparser = $_[0];
4897 1     1   8 use vars q{$tracelevel};
  1         2  
  1         886  
4898 92   50     317 local $tracelevel = ($tracelevel||0)+1;
4899 92         190 $ERRORS = 0;
4900 92         266 my $thisrule = $thisparser->{"rules"}{"TEXT"};
4901              
4902 92 50       321 Parse::RecDescent::_trace(q{Trying rule: [TEXT]},
4903             Parse::RecDescent::_tracefirst($_[1]),
4904             q{TEXT},
4905             $tracelevel)
4906             if defined $::RD_TRACE;
4907              
4908 92         152 my $def_at = @{$thisparser->{deferred}};
  92         250  
4909 92         207 my $err_at = @{$thisparser->{errors}};
  92         287  
4910              
4911 92         299 my $score;
4912             my $score_return;
4913 92         0 my $_tok;
4914 92         154 my $return = undef;
4915 92         212 my $_matched=0;
4916 92         176 my $commit=0;
4917 92         199 my @item = ();
4918 92         184 my %item = ();
4919 92         163 my $repeating = $_[2];
4920 92         162 my $_noactions = $_[3];
4921 92 50       324 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  92         179  
  92         158  
4922 92         187 my $_itempos = $_[5];
4923 92 50       307 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4924 92         424 my $text;
4925             my $lastsep;
4926 92         0 my $current_match;
4927 92         268 my $expectation = new Parse::RecDescent::Expectation(q{/^"TEXT"|^TEXT/i});
4928 92         645 $expectation->at($_[1]);
4929            
4930 92         409 my $thisline;
4931 92         323 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4932              
4933            
4934              
4935 92   33     841 while (!$_matched && !$commit)
4936             {
4937            
4938 92 50       283 Parse::RecDescent::_trace(q{Trying production: [/^"TEXT"|^TEXT/i]},
4939             Parse::RecDescent::_tracefirst($_[1]),
4940             q{TEXT},
4941             $tracelevel)
4942             if defined $::RD_TRACE;
4943 92         260 my $thisprod = $thisrule->{"prods"}[0];
4944 92         232 $text = $_[1];
4945 92         196 my $_savetext;
4946 92         218 @item = (q{TEXT});
4947 92         272 %item = (__RULE__ => q{TEXT});
4948 92         160 my $repcount = 0;
4949              
4950              
4951 92 50       302 Parse::RecDescent::_trace(q{Trying terminal: [/^"TEXT"|^TEXT/i]}, Parse::RecDescent::_tracefirst($text),
4952             q{TEXT},
4953             $tracelevel)
4954             if defined $::RD_TRACE;
4955 92         300 undef $lastsep;
4956 92         290 $expectation->is(q{})->at($text);
4957            
4958              
4959 92 50 66     1227 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"TEXT"|^TEXT)/i)
  92 100       1052  
4960             {
4961 53 50       297 $text = $lastsep . $text if defined $lastsep;
4962 53         201 $expectation->failed();
4963 53 50       299 Parse::RecDescent::_trace(q{<>},
4964             Parse::RecDescent::_tracefirst($text))
4965             if defined $::RD_TRACE;
4966              
4967 53         165 last;
4968             }
4969 39         255 $current_match = substr($text, $-[0], $+[0] - $-[0]);
4970 39         215 substr($text,0,length($current_match),q{});
4971 39 50       142 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4972             . $current_match . q{])},
4973             Parse::RecDescent::_tracefirst($text))
4974             if defined $::RD_TRACE;
4975 39         136 push @item, $item{__PATTERN1__}=$current_match;
4976            
4977              
4978 39 50       130 Parse::RecDescent::_trace(q{Trying action},
4979             Parse::RecDescent::_tracefirst($text),
4980             q{TEXT},
4981             $tracelevel)
4982             if defined $::RD_TRACE;
4983            
4984              
4985 39 50       114 $_tok = ($_noactions) ? 0 : do { $return = "TEXT" };
  39         114  
4986 39 50       141 unless (defined $_tok)
4987             {
4988 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4989             if defined $::RD_TRACE;
4990 0         0 last;
4991             }
4992 39 50       115 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4993             . $_tok . q{])},
4994             Parse::RecDescent::_tracefirst($text))
4995             if defined $::RD_TRACE;
4996 39         99 push @item, $_tok;
4997 39         105 $item{__ACTION1__}=$_tok;
4998            
4999              
5000 39 50       111 Parse::RecDescent::_trace(q{>>Matched production: [/^"TEXT"|^TEXT/i]<<},
5001             Parse::RecDescent::_tracefirst($text),
5002             q{TEXT},
5003             $tracelevel)
5004             if defined $::RD_TRACE;
5005              
5006              
5007              
5008 39         95 $_matched = 1;
5009 39         101 last;
5010             }
5011              
5012             splice
5013 92 100       311 @{$thisparser->{deferred}}, $def_at unless $_matched;
  53         161  
5014            
5015 92 100 66     433 unless ( $_matched || defined($score) )
5016             {
5017 53         108 splice @{$thisparser->{deferred}}, $def_at;
  53         138  
5018            
5019              
5020 53         119 $_[1] = $text; # NOT SURE THIS IS NEEDED
5021 53 50       155 Parse::RecDescent::_trace(q{<>},
5022             Parse::RecDescent::_tracefirst($_[1]),
5023             q{TEXT},
5024             $tracelevel)
5025             if defined $::RD_TRACE;
5026 53         347 return undef;
5027             }
5028 39 50 33     158 if (!defined($return) && defined($score))
5029             {
5030 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5031             q{TEXT},
5032             $tracelevel)
5033             if defined $::RD_TRACE;
5034 0         0 $return = $score_return;
5035             }
5036 39         67 splice @{$thisparser->{errors}}, $err_at;
  39         103  
5037 39 50       123 $return = $item[$#item] unless defined $return;
5038 39 50       130 if (defined $::RD_TRACE)
5039             {
5040 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5041             $return . q{])}, "",
5042             q{TEXT},
5043             $tracelevel);
5044 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5045             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5046             Parse::RecDescent::_tracefirst($text),
5047             , q{TEXT},
5048             $tracelevel)
5049             }
5050 39         140 $_[1] = $text;
5051 39         320 return $return;
5052             }
5053              
5054             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5055             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::MESSAGE
5056             {
5057 53     53   119 my $thisparser = $_[0];
5058 1     1   7 use vars q{$tracelevel};
  1         3  
  1         1223  
5059 53   50     166 local $tracelevel = ($tracelevel||0)+1;
5060 53         119 $ERRORS = 0;
5061 53         144 my $thisrule = $thisparser->{"rules"}{"MESSAGE"};
5062              
5063 53 50       182 Parse::RecDescent::_trace(q{Trying rule: [MESSAGE]},
5064             Parse::RecDescent::_tracefirst($_[1]),
5065             q{MESSAGE},
5066             $tracelevel)
5067             if defined $::RD_TRACE;
5068              
5069 53         91 my $def_at = @{$thisparser->{deferred}};
  53         139  
5070 53         98 my $err_at = @{$thisparser->{errors}};
  53         132  
5071              
5072 53         194 my $score;
5073             my $score_return;
5074 53         0 my $_tok;
5075 53         105 my $return = undef;
5076 53         100 my $_matched=0;
5077 53         110 my $commit=0;
5078 53         107 my @item = ();
5079 53         120 my %item = ();
5080 53         106 my $repeating = $_[2];
5081 53         95 my $_noactions = $_[3];
5082 53 50       165 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  53         105  
  53         103  
5083 53         129 my $_itempos = $_[5];
5084 53 50       186 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5085 53         189 my $text;
5086             my $lastsep;
5087 53         0 my $current_match;
5088 53         161 my $expectation = new Parse::RecDescent::Expectation(q{/^"MESSAGE"|^MESSAGE/i});
5089 53         408 $expectation->at($_[1]);
5090            
5091 53         206 my $thisline;
5092 53         242 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5093              
5094            
5095              
5096 53   33     468 while (!$_matched && !$commit)
5097             {
5098            
5099 53 50       160 Parse::RecDescent::_trace(q{Trying production: [/^"MESSAGE"|^MESSAGE/i]},
5100             Parse::RecDescent::_tracefirst($_[1]),
5101             q{MESSAGE},
5102             $tracelevel)
5103             if defined $::RD_TRACE;
5104 53         190 my $thisprod = $thisrule->{"prods"}[0];
5105 53         135 $text = $_[1];
5106 53         107 my $_savetext;
5107 53         151 @item = (q{MESSAGE});
5108 53         152 %item = (__RULE__ => q{MESSAGE});
5109 53         133 my $repcount = 0;
5110              
5111              
5112 53 50       186 Parse::RecDescent::_trace(q{Trying terminal: [/^"MESSAGE"|^MESSAGE/i]}, Parse::RecDescent::_tracefirst($text),
5113             q{MESSAGE},
5114             $tracelevel)
5115             if defined $::RD_TRACE;
5116 53         133 undef $lastsep;
5117 53         166 $expectation->is(q{})->at($text);
5118            
5119              
5120 53 50 66     696 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"MESSAGE"|^MESSAGE)/i)
  53 100       656  
5121             {
5122 31 50       159 $text = $lastsep . $text if defined $lastsep;
5123 31         143 $expectation->failed();
5124 31 50       157 Parse::RecDescent::_trace(q{<>},
5125             Parse::RecDescent::_tracefirst($text))
5126             if defined $::RD_TRACE;
5127              
5128 31         76 last;
5129             }
5130 22         145 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5131 22         111 substr($text,0,length($current_match),q{});
5132 22 50       62 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5133             . $current_match . q{])},
5134             Parse::RecDescent::_tracefirst($text))
5135             if defined $::RD_TRACE;
5136 22         83 push @item, $item{__PATTERN1__}=$current_match;
5137            
5138              
5139 22 50       76 Parse::RecDescent::_trace(q{Trying action},
5140             Parse::RecDescent::_tracefirst($text),
5141             q{MESSAGE},
5142             $tracelevel)
5143             if defined $::RD_TRACE;
5144            
5145              
5146 22 50       65 $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE"};
  22         68  
5147 22 50       60 unless (defined $_tok)
5148             {
5149 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
5150             if defined $::RD_TRACE;
5151 0         0 last;
5152             }
5153 22 50       100 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5154             . $_tok . q{])},
5155             Parse::RecDescent::_tracefirst($text))
5156             if defined $::RD_TRACE;
5157 22         44 push @item, $_tok;
5158 22         57 $item{__ACTION1__}=$_tok;
5159            
5160              
5161 22 50       62 Parse::RecDescent::_trace(q{>>Matched production: [/^"MESSAGE"|^MESSAGE/i]<<},
5162             Parse::RecDescent::_tracefirst($text),
5163             q{MESSAGE},
5164             $tracelevel)
5165             if defined $::RD_TRACE;
5166              
5167              
5168              
5169 22         50 $_matched = 1;
5170 22         48 last;
5171             }
5172              
5173             splice
5174 53 100       175 @{$thisparser->{deferred}}, $def_at unless $_matched;
  31         96  
5175            
5176 53 100 66     257 unless ( $_matched || defined($score) )
5177             {
5178 31         71 splice @{$thisparser->{deferred}}, $def_at;
  31         76  
5179            
5180              
5181 31         84 $_[1] = $text; # NOT SURE THIS IS NEEDED
5182 31 50       93 Parse::RecDescent::_trace(q{<>},
5183             Parse::RecDescent::_tracefirst($_[1]),
5184             q{MESSAGE},
5185             $tracelevel)
5186             if defined $::RD_TRACE;
5187 31         207 return undef;
5188             }
5189 22 50 33     95 if (!defined($return) && defined($score))
5190             {
5191 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5192             q{MESSAGE},
5193             $tracelevel)
5194             if defined $::RD_TRACE;
5195 0         0 $return = $score_return;
5196             }
5197 22         62 splice @{$thisparser->{errors}}, $err_at;
  22         79  
5198 22 50       104 $return = $item[$#item] unless defined $return;
5199 22 50       72 if (defined $::RD_TRACE)
5200             {
5201 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5202             $return . q{])}, "",
5203             q{MESSAGE},
5204             $tracelevel);
5205 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5206             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5207             Parse::RecDescent::_tracefirst($text),
5208             , q{MESSAGE},
5209             $tracelevel)
5210             }
5211 22         93 $_[1] = $text;
5212 22         178 return $return;
5213             }
5214              
5215             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5216             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::start
5217             {
5218 9     9   890 my $thisparser = $_[0];
5219 1     1   8 use vars q{$tracelevel};
  1         3  
  1         1202  
5220 9   50     52 local $tracelevel = ($tracelevel||0)+1;
5221 9         31 $ERRORS = 0;
5222 9         30 my $thisrule = $thisparser->{"rules"}{"start"};
5223              
5224 9 50       40 Parse::RecDescent::_trace(q{Trying rule: [start]},
5225             Parse::RecDescent::_tracefirst($_[1]),
5226             q{start},
5227             $tracelevel)
5228             if defined $::RD_TRACE;
5229              
5230 9         22 my $def_at = @{$thisparser->{deferred}};
  9         28  
5231 9         18 my $err_at = @{$thisparser->{errors}};
  9         27  
5232              
5233 9         29 my $score;
5234             my $score_return;
5235 9         0 my $_tok;
5236 9         17 my $return = undef;
5237 9         24 my $_matched=0;
5238 9         20 my $commit=0;
5239 9         22 my @item = ();
5240 9         24 my %item = ();
5241 9         21 my $repeating = $_[2];
5242 9         18 my $_noactions = $_[3];
5243 9 50       27 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  9         16  
  9         26  
5244 9         47 my $_itempos = $_[5];
5245 9 50       32 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5246 9         29 my $text;
5247             my $lastsep;
5248 9         0 my $current_match;
5249 9         38 my $expectation = new Parse::RecDescent::Expectation(q{/.*?\\(.*?BODYSTRUCTURE \\(/i});
5250 9         100 $expectation->at($_[1]);
5251            
5252 9         47 my $thisline;
5253 9         52 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5254              
5255            
5256              
5257 9   33     115 while (!$_matched && !$commit)
5258             {
5259            
5260 9 50       29 Parse::RecDescent::_trace(q{Trying production: [/.*?\\(.*?BODYSTRUCTURE \\(/i part /\\).*\\)\\r?\\n?/]},
5261             Parse::RecDescent::_tracefirst($_[1]),
5262             q{start},
5263             $tracelevel)
5264             if defined $::RD_TRACE;
5265 9         41 my $thisprod = $thisrule->{"prods"}[0];
5266 9         23 $text = $_[1];
5267 9         19 my $_savetext;
5268 9         26 @item = (q{start});
5269 9         29 %item = (__RULE__ => q{start});
5270 9         18 my $repcount = 0;
5271              
5272              
5273 9 50       30 Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?BODYSTRUCTURE \\(/i]}, Parse::RecDescent::_tracefirst($text),
5274             q{start},
5275             $tracelevel)
5276             if defined $::RD_TRACE;
5277 9         23 undef $lastsep;
5278 9         35 $expectation->is(q{})->at($text);
5279            
5280              
5281 9 50 33     139 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*?\(.*?BODYSTRUCTURE \()/i)
  9 50       189  
5282             {
5283 0 0       0 $text = $lastsep . $text if defined $lastsep;
5284 0         0 $expectation->failed();
5285 0 0       0 Parse::RecDescent::_trace(q{<>},
5286             Parse::RecDescent::_tracefirst($text))
5287             if defined $::RD_TRACE;
5288              
5289 0         0 last;
5290             }
5291 9         69 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5292 9         58 substr($text,0,length($current_match),q{});
5293 9 50       42 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5294             . $current_match . q{])},
5295             Parse::RecDescent::_tracefirst($text))
5296             if defined $::RD_TRACE;
5297 9         35 push @item, $item{__PATTERN1__}=$current_match;
5298            
5299              
5300 9 50       28 Parse::RecDescent::_trace(q{Trying repeated subrule: [part]},
5301             Parse::RecDescent::_tracefirst($text),
5302             q{start},
5303             $tracelevel)
5304             if defined $::RD_TRACE;
5305 9         48 $expectation->is(q{part})->at($text);
5306            
5307 9 50   9   148 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 1, $_noactions,$expectation,sub { \@arg },undef)))
  9         25  
5308             {
5309 0 0       0 Parse::RecDescent::_trace(q{<>},
5310             Parse::RecDescent::_tracefirst($text),
5311             q{start},
5312             $tracelevel)
5313             if defined $::RD_TRACE;
5314 0         0 last;
5315             }
5316 9 50       234 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [part]<< (}
5317             . @$_tok . q{ times)},
5318              
5319             Parse::RecDescent::_tracefirst($text),
5320             q{start},
5321             $tracelevel)
5322             if defined $::RD_TRACE;
5323 9         31 $item{q{part(1)}} = $_tok;
5324 9         39 push @item, $_tok;
5325            
5326              
5327              
5328 9 50       28 Parse::RecDescent::_trace(q{Trying terminal: [/\\).*\\)\\r?\\n?/]}, Parse::RecDescent::_tracefirst($text),
5329             q{start},
5330             $tracelevel)
5331             if defined $::RD_TRACE;
5332 9         19 undef $lastsep;
5333 9         31 $expectation->is(q{/\\).*\\)\\r?\\n?/})->at($text);
5334            
5335              
5336 9 50 33     138 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\).*\)\r?\n?)/)
  9 50       146  
5337             {
5338 0 0       0 $text = $lastsep . $text if defined $lastsep;
5339 0         0 $expectation->failed();
5340 0 0       0 Parse::RecDescent::_trace(q{<>},
5341             Parse::RecDescent::_tracefirst($text))
5342             if defined $::RD_TRACE;
5343              
5344 0         0 last;
5345             }
5346 9         61 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5347 9         43 substr($text,0,length($current_match),q{});
5348 9 50       43 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5349             . $current_match . q{])},
5350             Parse::RecDescent::_tracefirst($text))
5351             if defined $::RD_TRACE;
5352 9         38 push @item, $item{__PATTERN2__}=$current_match;
5353            
5354              
5355 9 50       37 Parse::RecDescent::_trace(q{Trying action},
5356             Parse::RecDescent::_tracefirst($text),
5357             q{start},
5358             $tracelevel)
5359             if defined $::RD_TRACE;
5360            
5361              
5362 9 50       31 $_tok = ($_noactions) ? 0 : do { $return = $item{'part(1)'}[0] };
  9         35  
5363 9 50       35 unless (defined $_tok)
5364             {
5365 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
5366             if defined $::RD_TRACE;
5367 0         0 last;
5368             }
5369 9 50       25 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5370             . $_tok . q{])},
5371             Parse::RecDescent::_tracefirst($text))
5372             if defined $::RD_TRACE;
5373 9         20 push @item, $_tok;
5374 9         26 $item{__ACTION1__}=$_tok;
5375            
5376              
5377 9 50       22 Parse::RecDescent::_trace(q{>>Matched production: [/.*?\\(.*?BODYSTRUCTURE \\(/i part /\\).*\\)\\r?\\n?/]<<},
5378             Parse::RecDescent::_tracefirst($text),
5379             q{start},
5380             $tracelevel)
5381             if defined $::RD_TRACE;
5382              
5383              
5384              
5385 9         14 $_matched = 1;
5386 9         23 last;
5387             }
5388              
5389             splice
5390 9 50       23 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
5391            
5392 9 50 33     33 unless ( $_matched || defined($score) )
5393             {
5394 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
5395            
5396              
5397 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
5398 0 0       0 Parse::RecDescent::_trace(q{<>},
5399             Parse::RecDescent::_tracefirst($_[1]),
5400             q{start},
5401             $tracelevel)
5402             if defined $::RD_TRACE;
5403 0         0 return undef;
5404             }
5405 9 50 33     35 if (!defined($return) && defined($score))
5406             {
5407 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5408             q{start},
5409             $tracelevel)
5410             if defined $::RD_TRACE;
5411 0         0 $return = $score_return;
5412             }
5413 9         23 splice @{$thisparser->{errors}}, $err_at;
  9         37  
5414 9 50       29 $return = $item[$#item] unless defined $return;
5415 9 50       33 if (defined $::RD_TRACE)
5416             {
5417 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5418             $return . q{])}, "",
5419             q{start},
5420             $tracelevel);
5421 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5422             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5423             Parse::RecDescent::_tracefirst($text),
5424             , q{start},
5425             $tracelevel)
5426             }
5427 9         35 $_[1] = $text;
5428 9         95 return $return;
5429             }
5430              
5431             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5432             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::addressstruct
5433             {
5434 188     188   3530 my $thisparser = $_[0];
5435 1     1   9 use vars q{$tracelevel};
  1         2  
  1         509  
5436 188   50     488 local $tracelevel = ($tracelevel||0)+1;
5437 188         308 $ERRORS = 0;
5438 188         415 my $thisrule = $thisparser->{"rules"}{"addressstruct"};
5439              
5440 188 50       388 Parse::RecDescent::_trace(q{Trying rule: [addressstruct]},
5441             Parse::RecDescent::_tracefirst($_[1]),
5442             q{addressstruct},
5443             $tracelevel)
5444             if defined $::RD_TRACE;
5445              
5446 188         332 my $def_at = @{$thisparser->{deferred}};
  188         374  
5447 188         286 my $err_at = @{$thisparser->{errors}};
  188         382  
5448              
5449 188         442 my $score;
5450             my $score_return;
5451 188         0 my $_tok;
5452 188         293 my $return = undef;
5453 188         328 my $_matched=0;
5454 188         268 my $commit=0;
5455 188         353 my @item = ();
5456 188         336 my %item = ();
5457 188         321 my $repeating = $_[2];
5458 188         333 my $_noactions = $_[3];
5459 188 50       388 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  188         291  
  188         339  
5460 188         313 my $_itempos = $_[5];
5461 188 50       480 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5462 188         464 my $text;
5463             my $lastsep;
5464 188         0 my $current_match;
5465 188         509 my $expectation = new Parse::RecDescent::Expectation(q{'('});
5466 188         1326 $expectation->at($_[1]);
5467            
5468 188         777 my $thisline;
5469 188         707 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5470              
5471            
5472              
5473 188   33     1484 while (!$_matched && !$commit)
5474             {
5475            
5476 188 50       451 Parse::RecDescent::_trace(q{Trying production: ['(' personalname sourceroute mailboxname hostname ')']},
5477             Parse::RecDescent::_tracefirst($_[1]),
5478             q{addressstruct},
5479             $tracelevel)
5480             if defined $::RD_TRACE;
5481 188         407 my $thisprod = $thisrule->{"prods"}[0];
5482 188         326 $text = $_[1];
5483 188         274 my $_savetext;
5484 188         355 @item = (q{addressstruct});
5485 188         411 %item = (__RULE__ => q{addressstruct});
5486 188         282 my $repcount = 0;
5487              
5488              
5489 188 50       493 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
5490             Parse::RecDescent::_tracefirst($text),
5491             q{addressstruct},
5492             $tracelevel)
5493             if defined $::RD_TRACE;
5494 188         324 undef $lastsep;
5495 188         457 $expectation->is(q{})->at($text);
5496            
5497              
5498 188 50 33     2083 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  188 100 66     1134  
  188   66     343  
  188         950  
5499             substr($text,0,length($_tok)) eq $_tok and
5500 94         211 do { substr($text,0,length($_tok)) = ""; 1; }
  94         253  
5501             )
5502             {
5503 94 50       353 $text = $lastsep . $text if defined $lastsep;
5504            
5505 94         320 $expectation->failed();
5506 94 50       416 Parse::RecDescent::_trace(q{<>},
5507             Parse::RecDescent::_tracefirst($text))
5508             if defined $::RD_TRACE;
5509 94         200 last;
5510             }
5511 94 50       273 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5512             . $_tok . q{])},
5513             Parse::RecDescent::_tracefirst($text))
5514             if defined $::RD_TRACE;
5515 94         234 push @item, $item{__STRING1__}=$_tok;
5516            
5517              
5518 94 50       274 Parse::RecDescent::_trace(q{Trying subrule: [personalname]},
5519             Parse::RecDescent::_tracefirst($text),
5520             q{addressstruct},
5521             $tracelevel)
5522             if defined $::RD_TRACE;
5523 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         171  
  94         173  
5524 94         297 $expectation->is(q{personalname})->at($text);
5525 94 50   94   1135 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::personalname($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         204  
5526             {
5527            
5528 0 0       0 Parse::RecDescent::_trace(q{<>},
5529             Parse::RecDescent::_tracefirst($text),
5530             q{addressstruct},
5531             $tracelevel)
5532             if defined $::RD_TRACE;
5533 0         0 $expectation->failed();
5534 0         0 last;
5535             }
5536 94 50       313 Parse::RecDescent::_trace(q{>>Matched subrule: [personalname]<< (return value: [}
5537             . $_tok . q{]},
5538              
5539             Parse::RecDescent::_tracefirst($text),
5540             q{addressstruct},
5541             $tracelevel)
5542             if defined $::RD_TRACE;
5543 94         209 $item{q{personalname}} = $_tok;
5544 94         198 push @item, $_tok;
5545            
5546             }
5547              
5548 94 50       207 Parse::RecDescent::_trace(q{Trying subrule: [sourceroute]},
5549             Parse::RecDescent::_tracefirst($text),
5550             q{addressstruct},
5551             $tracelevel)
5552             if defined $::RD_TRACE;
5553 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         181  
  94         160  
5554 94         310 $expectation->is(q{sourceroute})->at($text);
5555 94 50   94   1099 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sourceroute($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         217  
5556             {
5557            
5558 0 0       0 Parse::RecDescent::_trace(q{<>},
5559             Parse::RecDescent::_tracefirst($text),
5560             q{addressstruct},
5561             $tracelevel)
5562             if defined $::RD_TRACE;
5563 0         0 $expectation->failed();
5564 0         0 last;
5565             }
5566 94 50       317 Parse::RecDescent::_trace(q{>>Matched subrule: [sourceroute]<< (return value: [}
5567             . $_tok . q{]},
5568              
5569             Parse::RecDescent::_tracefirst($text),
5570             q{addressstruct},
5571             $tracelevel)
5572             if defined $::RD_TRACE;
5573 94         244 $item{q{sourceroute}} = $_tok;
5574 94         185 push @item, $_tok;
5575            
5576             }
5577              
5578 94 50       266 Parse::RecDescent::_trace(q{Trying subrule: [mailboxname]},
5579             Parse::RecDescent::_tracefirst($text),
5580             q{addressstruct},
5581             $tracelevel)
5582             if defined $::RD_TRACE;
5583 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         161  
  94         151  
5584 94         330 $expectation->is(q{mailboxname})->at($text);
5585 94 50   94   1092 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::mailboxname($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         266  
5586             {
5587            
5588 0 0       0 Parse::RecDescent::_trace(q{<>},
5589             Parse::RecDescent::_tracefirst($text),
5590             q{addressstruct},
5591             $tracelevel)
5592             if defined $::RD_TRACE;
5593 0         0 $expectation->failed();
5594 0         0 last;
5595             }
5596 94 50       341 Parse::RecDescent::_trace(q{>>Matched subrule: [mailboxname]<< (return value: [}
5597             . $_tok . q{]},
5598              
5599             Parse::RecDescent::_tracefirst($text),
5600             q{addressstruct},
5601             $tracelevel)
5602             if defined $::RD_TRACE;
5603 94         226 $item{q{mailboxname}} = $_tok;
5604 94         200 push @item, $_tok;
5605            
5606             }
5607              
5608 94 50       229 Parse::RecDescent::_trace(q{Trying subrule: [hostname]},
5609             Parse::RecDescent::_tracefirst($text),
5610             q{addressstruct},
5611             $tracelevel)
5612             if defined $::RD_TRACE;
5613 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         731  
  94         155  
5614 94         336 $expectation->is(q{hostname})->at($text);
5615 94 50   94   1090 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::hostname($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         214  
5616             {
5617            
5618 0 0       0 Parse::RecDescent::_trace(q{<>},
5619             Parse::RecDescent::_tracefirst($text),
5620             q{addressstruct},
5621             $tracelevel)
5622             if defined $::RD_TRACE;
5623 0         0 $expectation->failed();
5624 0         0 last;
5625             }
5626 94 50       358 Parse::RecDescent::_trace(q{>>Matched subrule: [hostname]<< (return value: [}
5627             . $_tok . q{]},
5628              
5629             Parse::RecDescent::_tracefirst($text),
5630             q{addressstruct},
5631             $tracelevel)
5632             if defined $::RD_TRACE;
5633 94         217 $item{q{hostname}} = $_tok;
5634 94         183 push @item, $_tok;
5635            
5636             }
5637              
5638 94 50       221 Parse::RecDescent::_trace(q{Trying terminal: [')']},
5639             Parse::RecDescent::_tracefirst($text),
5640             q{addressstruct},
5641             $tracelevel)
5642             if defined $::RD_TRACE;
5643 94         188 undef $lastsep;
5644 94         347 $expectation->is(q{')'})->at($text);
5645            
5646              
5647 94 50 33     1115 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  94 50 33     676  
  94   33     506  
  94         558  
5648             substr($text,0,length($_tok)) eq $_tok and
5649 94         212 do { substr($text,0,length($_tok)) = ""; 1; }
  94         301  
5650             )
5651             {
5652 0 0       0 $text = $lastsep . $text if defined $lastsep;
5653            
5654 0         0 $expectation->failed();
5655 0 0       0 Parse::RecDescent::_trace(q{<>},
5656             Parse::RecDescent::_tracefirst($text))
5657             if defined $::RD_TRACE;
5658 0         0 last;
5659             }
5660 94 50       268 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5661             . $_tok . q{])},
5662             Parse::RecDescent::_tracefirst($text))
5663             if defined $::RD_TRACE;
5664 94         290 push @item, $item{__STRING2__}=$_tok;
5665            
5666              
5667 94 50       235 Parse::RecDescent::_trace(q{Trying action},
5668             Parse::RecDescent::_tracefirst($text),
5669             q{addressstruct},
5670             $tracelevel)
5671             if defined $::RD_TRACE;
5672            
5673              
5674 94 50       189 $_tok = ($_noactions) ? 0 : do { bless { personalname => $item{personalname}
5675             , sourceroute => $item{sourceroute}
5676             , mailboxname => $item{mailboxname}
5677             , hostname => $item{hostname}
5678 94         536 }, 'Mail::IMAPClient::BodyStructure::Address';
5679             };
5680 94 50       238 unless (defined $_tok)
5681             {
5682 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
5683             if defined $::RD_TRACE;
5684 0         0 last;
5685             }
5686 94 50       306 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5687             . $_tok . q{])},
5688             Parse::RecDescent::_tracefirst($text))
5689             if defined $::RD_TRACE;
5690 94         182 push @item, $_tok;
5691 94         183 $item{__ACTION1__}=$_tok;
5692            
5693              
5694 94 50       234 Parse::RecDescent::_trace(q{>>Matched production: ['(' personalname sourceroute mailboxname hostname ')']<<},
5695             Parse::RecDescent::_tracefirst($text),
5696             q{addressstruct},
5697             $tracelevel)
5698             if defined $::RD_TRACE;
5699              
5700              
5701              
5702 94         167 $_matched = 1;
5703 94         208 last;
5704             }
5705              
5706             splice
5707 188 100       472 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         220  
5708            
5709 188 100 66     617 unless ( $_matched || defined($score) )
5710             {
5711 94         152 splice @{$thisparser->{deferred}}, $def_at;
  94         163  
5712            
5713              
5714 94         197 $_[1] = $text; # NOT SURE THIS IS NEEDED
5715 94 50       222 Parse::RecDescent::_trace(q{<>},
5716             Parse::RecDescent::_tracefirst($_[1]),
5717             q{addressstruct},
5718             $tracelevel)
5719             if defined $::RD_TRACE;
5720 94         458 return undef;
5721             }
5722 94 50 33     375 if (!defined($return) && defined($score))
5723             {
5724 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5725             q{addressstruct},
5726             $tracelevel)
5727             if defined $::RD_TRACE;
5728 0         0 $return = $score_return;
5729             }
5730 94         155 splice @{$thisparser->{errors}}, $err_at;
  94         235  
5731 94 50       263 $return = $item[$#item] unless defined $return;
5732 94 50       223 if (defined $::RD_TRACE)
5733             {
5734 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5735             $return . q{])}, "",
5736             q{addressstruct},
5737             $tracelevel);
5738 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5739             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5740             Parse::RecDescent::_tracefirst($text),
5741             , q{addressstruct},
5742             $tracelevel)
5743             }
5744 94         314 $_[1] = $text;
5745 94         644 return $return;
5746             }
5747              
5748             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5749             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::date
5750             {
5751 24     24   59 my $thisparser = $_[0];
5752 1     1   7 use vars q{$tracelevel};
  1         3  
  1         339  
5753 24   50     94 local $tracelevel = ($tracelevel||0)+1;
5754 24         77 $ERRORS = 0;
5755 24         86 my $thisrule = $thisparser->{"rules"}{"date"};
5756              
5757 24 50       89 Parse::RecDescent::_trace(q{Trying rule: [date]},
5758             Parse::RecDescent::_tracefirst($_[1]),
5759             q{date},
5760             $tracelevel)
5761             if defined $::RD_TRACE;
5762              
5763 24         46 my $def_at = @{$thisparser->{deferred}};
  24         67  
5764 24         53 my $err_at = @{$thisparser->{errors}};
  24         64  
5765              
5766 24         100 my $score;
5767             my $score_return;
5768 24         0 my $_tok;
5769 24         46 my $return = undef;
5770 24         43 my $_matched=0;
5771 24         44 my $commit=0;
5772 24         50 my @item = ();
5773 24         49 my %item = ();
5774 24         53 my $repeating = $_[2];
5775 24         42 my $_noactions = $_[3];
5776 24 50       70 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         47  
  24         47  
5777 24         47 my $_itempos = $_[5];
5778 24 50       91 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5779 24         75 my $text;
5780             my $lastsep;
5781 24         0 my $current_match;
5782 24         64 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
5783 24         210 $expectation->at($_[1]);
5784            
5785 24         136 my $thisline;
5786 24         111 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5787              
5788            
5789              
5790 24   33     250 while (!$_matched && !$commit)
5791             {
5792            
5793 24 50       72 Parse::RecDescent::_trace(q{Trying production: [NIL]},
5794             Parse::RecDescent::_tracefirst($_[1]),
5795             q{date},
5796             $tracelevel)
5797             if defined $::RD_TRACE;
5798 24         97 my $thisprod = $thisrule->{"prods"}[0];
5799 24         127 $text = $_[1];
5800 24         48 my $_savetext;
5801 24         70 @item = (q{date});
5802 24         91 %item = (__RULE__ => q{date});
5803 24         53 my $repcount = 0;
5804              
5805              
5806 24 50       79 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
5807             Parse::RecDescent::_tracefirst($text),
5808             q{date},
5809             $tracelevel)
5810             if defined $::RD_TRACE;
5811 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         285  
  24         52  
5812 24         71 $expectation->is(q{})->at($text);
5813 24 50   24   263 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         58  
5814             {
5815            
5816 24 50       73 Parse::RecDescent::_trace(q{<>},
5817             Parse::RecDescent::_tracefirst($text),
5818             q{date},
5819             $tracelevel)
5820             if defined $::RD_TRACE;
5821 24         77 $expectation->failed();
5822 24         94 last;
5823             }
5824 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
5825             . $_tok . q{]},
5826              
5827             Parse::RecDescent::_tracefirst($text),
5828             q{date},
5829             $tracelevel)
5830             if defined $::RD_TRACE;
5831 0         0 $item{q{NIL}} = $_tok;
5832 0         0 push @item, $_tok;
5833            
5834             }
5835              
5836 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
5837             Parse::RecDescent::_tracefirst($text),
5838             q{date},
5839             $tracelevel)
5840             if defined $::RD_TRACE;
5841              
5842              
5843              
5844 0         0 $_matched = 1;
5845 0         0 last;
5846             }
5847              
5848             splice
5849 24 50       116 @{$thisparser->{deferred}}, $def_at unless $_matched;
  24         78  
5850            
5851 24   33     121 while (!$_matched && !$commit)
5852             {
5853            
5854 24 50       69 Parse::RecDescent::_trace(q{Trying production: [STRING]},
5855             Parse::RecDescent::_tracefirst($_[1]),
5856             q{date},
5857             $tracelevel)
5858             if defined $::RD_TRACE;
5859 24         73 my $thisprod = $thisrule->{"prods"}[1];
5860 24         72 $text = $_[1];
5861 24         55 my $_savetext;
5862 24         66 @item = (q{date});
5863 24         80 %item = (__RULE__ => q{date});
5864 24         54 my $repcount = 0;
5865              
5866              
5867 24 50       82 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
5868             Parse::RecDescent::_tracefirst($text),
5869             q{date},
5870             $tracelevel)
5871             if defined $::RD_TRACE;
5872 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         504  
  24         54  
5873 24         79 $expectation->is(q{})->at($text);
5874 24 50   24   274 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         49  
5875             {
5876            
5877 0 0       0 Parse::RecDescent::_trace(q{<>},
5878             Parse::RecDescent::_tracefirst($text),
5879             q{date},
5880             $tracelevel)
5881             if defined $::RD_TRACE;
5882 0         0 $expectation->failed();
5883 0         0 last;
5884             }
5885 24 50       98 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
5886             . $_tok . q{]},
5887              
5888             Parse::RecDescent::_tracefirst($text),
5889             q{date},
5890             $tracelevel)
5891             if defined $::RD_TRACE;
5892 24         65 $item{q{STRING}} = $_tok;
5893 24         61 push @item, $_tok;
5894            
5895             }
5896              
5897 24 50       71 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
5898             Parse::RecDescent::_tracefirst($text),
5899             q{date},
5900             $tracelevel)
5901             if defined $::RD_TRACE;
5902              
5903              
5904              
5905 24         47 $_matched = 1;
5906 24         50 last;
5907             }
5908              
5909             splice
5910 24 50       74 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
5911            
5912 24 50 33     100 unless ( $_matched || defined($score) )
5913             {
5914 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
5915            
5916              
5917 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
5918 0 0       0 Parse::RecDescent::_trace(q{<>},
5919             Parse::RecDescent::_tracefirst($_[1]),
5920             q{date},
5921             $tracelevel)
5922             if defined $::RD_TRACE;
5923 0         0 return undef;
5924             }
5925 24 50 33     120 if (!defined($return) && defined($score))
5926             {
5927 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5928             q{date},
5929             $tracelevel)
5930             if defined $::RD_TRACE;
5931 0         0 $return = $score_return;
5932             }
5933 24         69 splice @{$thisparser->{errors}}, $err_at;
  24         62  
5934 24 50       77 $return = $item[$#item] unless defined $return;
5935 24 50       77 if (defined $::RD_TRACE)
5936             {
5937 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5938             $return . q{])}, "",
5939             q{date},
5940             $tracelevel);
5941 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5942             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5943             Parse::RecDescent::_tracefirst($text),
5944             , q{date},
5945             $tracelevel)
5946             }
5947 24         62 $_[1] = $text;
5948 24         169 return $return;
5949             }
5950              
5951             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5952             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::hostname
5953             {
5954 94     94   177 my $thisparser = $_[0];
5955 1     1   8 use vars q{$tracelevel};
  1         3  
  1         352  
5956 94   50     265 local $tracelevel = ($tracelevel||0)+1;
5957 94         168 $ERRORS = 0;
5958 94         225 my $thisrule = $thisparser->{"rules"}{"hostname"};
5959              
5960 94 50       278 Parse::RecDescent::_trace(q{Trying rule: [hostname]},
5961             Parse::RecDescent::_tracefirst($_[1]),
5962             q{hostname},
5963             $tracelevel)
5964             if defined $::RD_TRACE;
5965              
5966 94         163 my $def_at = @{$thisparser->{deferred}};
  94         197  
5967 94         169 my $err_at = @{$thisparser->{errors}};
  94         178  
5968              
5969 94         248 my $score;
5970             my $score_return;
5971 94         0 my $_tok;
5972 94         151 my $return = undef;
5973 94         165 my $_matched=0;
5974 94         477 my $commit=0;
5975 94         199 my @item = ();
5976 94         190 my %item = ();
5977 94         151 my $repeating = $_[2];
5978 94         149 my $_noactions = $_[3];
5979 94 50       286 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         133  
  94         209  
5980 94         192 my $_itempos = $_[5];
5981 94 50       250 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5982 94         260 my $text;
5983             my $lastsep;
5984 94         0 my $current_match;
5985 94         288 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
5986 94         684 $expectation->at($_[1]);
5987            
5988 94         395 my $thisline;
5989 94         344 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5990              
5991            
5992              
5993 94   33     830 while (!$_matched && !$commit)
5994             {
5995            
5996 94 50       250 Parse::RecDescent::_trace(q{Trying production: [NIL]},
5997             Parse::RecDescent::_tracefirst($_[1]),
5998             q{hostname},
5999             $tracelevel)
6000             if defined $::RD_TRACE;
6001 94         232 my $thisprod = $thisrule->{"prods"}[0];
6002 94         180 $text = $_[1];
6003 94         136 my $_savetext;
6004 94         224 @item = (q{hostname});
6005 94         191 %item = (__RULE__ => q{hostname});
6006 94         143 my $repcount = 0;
6007              
6008              
6009 94 50       206 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
6010             Parse::RecDescent::_tracefirst($text),
6011             q{hostname},
6012             $tracelevel)
6013             if defined $::RD_TRACE;
6014 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         289  
  94         205  
6015 94         224 $expectation->is(q{})->at($text);
6016 94 50   94   933 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         186  
6017             {
6018            
6019 94 50       216 Parse::RecDescent::_trace(q{<>},
6020             Parse::RecDescent::_tracefirst($text),
6021             q{hostname},
6022             $tracelevel)
6023             if defined $::RD_TRACE;
6024 94         291 $expectation->failed();
6025 94         323 last;
6026             }
6027 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
6028             . $_tok . q{]},
6029              
6030             Parse::RecDescent::_tracefirst($text),
6031             q{hostname},
6032             $tracelevel)
6033             if defined $::RD_TRACE;
6034 0         0 $item{q{NIL}} = $_tok;
6035 0         0 push @item, $_tok;
6036            
6037             }
6038              
6039 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
6040             Parse::RecDescent::_tracefirst($text),
6041             q{hostname},
6042             $tracelevel)
6043             if defined $::RD_TRACE;
6044              
6045              
6046              
6047 0         0 $_matched = 1;
6048 0         0 last;
6049             }
6050              
6051             splice
6052 94 50       346 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         220  
6053            
6054 94   33     383 while (!$_matched && !$commit)
6055             {
6056            
6057 94 50       218 Parse::RecDescent::_trace(q{Trying production: [STRING]},
6058             Parse::RecDescent::_tracefirst($_[1]),
6059             q{hostname},
6060             $tracelevel)
6061             if defined $::RD_TRACE;
6062 94         197 my $thisprod = $thisrule->{"prods"}[1];
6063 94         169 $text = $_[1];
6064 94         156 my $_savetext;
6065 94         236 @item = (q{hostname});
6066 94         239 %item = (__RULE__ => q{hostname});
6067 94         151 my $repcount = 0;
6068              
6069              
6070 94 50       179 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
6071             Parse::RecDescent::_tracefirst($text),
6072             q{hostname},
6073             $tracelevel)
6074             if defined $::RD_TRACE;
6075 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         448  
  94         149  
6076 94         219 $expectation->is(q{})->at($text);
6077 94 50   94   952 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         188  
6078             {
6079            
6080 0 0       0 Parse::RecDescent::_trace(q{<>},
6081             Parse::RecDescent::_tracefirst($text),
6082             q{hostname},
6083             $tracelevel)
6084             if defined $::RD_TRACE;
6085 0         0 $expectation->failed();
6086 0         0 last;
6087             }
6088 94 50       331 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
6089             . $_tok . q{]},
6090              
6091             Parse::RecDescent::_tracefirst($text),
6092             q{hostname},
6093             $tracelevel)
6094             if defined $::RD_TRACE;
6095 94         206 $item{q{STRING}} = $_tok;
6096 94         203 push @item, $_tok;
6097            
6098             }
6099              
6100 94 50       239 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
6101             Parse::RecDescent::_tracefirst($text),
6102             q{hostname},
6103             $tracelevel)
6104             if defined $::RD_TRACE;
6105              
6106              
6107              
6108 94         167 $_matched = 1;
6109 94         169 last;
6110             }
6111              
6112             splice
6113 94 50       266 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
6114            
6115 94 50 33     301 unless ( $_matched || defined($score) )
6116             {
6117 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
6118            
6119              
6120 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
6121 0 0       0 Parse::RecDescent::_trace(q{<>},
6122             Parse::RecDescent::_tracefirst($_[1]),
6123             q{hostname},
6124             $tracelevel)
6125             if defined $::RD_TRACE;
6126 0         0 return undef;
6127             }
6128 94 50 33     412 if (!defined($return) && defined($score))
6129             {
6130 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6131             q{hostname},
6132             $tracelevel)
6133             if defined $::RD_TRACE;
6134 0         0 $return = $score_return;
6135             }
6136 94         173 splice @{$thisparser->{errors}}, $err_at;
  94         204  
6137 94 50       298 $return = $item[$#item] unless defined $return;
6138 94 50       234 if (defined $::RD_TRACE)
6139             {
6140 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6141             $return . q{])}, "",
6142             q{hostname},
6143             $tracelevel);
6144 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6145             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6146             Parse::RecDescent::_tracefirst($text),
6147             , q{hostname},
6148             $tracelevel)
6149             }
6150 94         233 $_[1] = $text;
6151 94         502 return $return;
6152             }
6153              
6154             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6155             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::HTML
6156             {
6157 51     51   111 my $thisparser = $_[0];
6158 1     1   8 use vars q{$tracelevel};
  1         2  
  1         918  
6159 51   50     154 local $tracelevel = ($tracelevel||0)+1;
6160 51         111 $ERRORS = 0;
6161 51         154 my $thisrule = $thisparser->{"rules"}{"HTML"};
6162              
6163 51 50       133 Parse::RecDescent::_trace(q{Trying rule: [HTML]},
6164             Parse::RecDescent::_tracefirst($_[1]),
6165             q{HTML},
6166             $tracelevel)
6167             if defined $::RD_TRACE;
6168              
6169 51         82 my $def_at = @{$thisparser->{deferred}};
  51         127  
6170 51         85 my $err_at = @{$thisparser->{errors}};
  51         141  
6171              
6172 51         165 my $score;
6173             my $score_return;
6174 51         0 my $_tok;
6175 51         123 my $return = undef;
6176 51         89 my $_matched=0;
6177 51         101 my $commit=0;
6178 51         98 my @item = ();
6179 51         102 my %item = ();
6180 51         91 my $repeating = $_[2];
6181 51         126 my $_noactions = $_[3];
6182 51 50       152 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  51         100  
  51         116  
6183 51         116 my $_itempos = $_[5];
6184 51 50       194 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6185 51         156 my $text;
6186             my $lastsep;
6187 51         0 my $current_match;
6188 51         138 my $expectation = new Parse::RecDescent::Expectation(q{/"HTML"|HTML/i});
6189 51         348 $expectation->at($_[1]);
6190            
6191 51         212 my $thisline;
6192 51         179 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6193              
6194            
6195              
6196 51   33     493 while (!$_matched && !$commit)
6197             {
6198            
6199 51 50       128 Parse::RecDescent::_trace(q{Trying production: [/"HTML"|HTML/i]},
6200             Parse::RecDescent::_tracefirst($_[1]),
6201             q{HTML},
6202             $tracelevel)
6203             if defined $::RD_TRACE;
6204 51         176 my $thisprod = $thisrule->{"prods"}[0];
6205 51         106 $text = $_[1];
6206 51         77 my $_savetext;
6207 51         111 @item = (q{HTML});
6208 51         142 %item = (__RULE__ => q{HTML});
6209 51         98 my $repcount = 0;
6210              
6211              
6212 51 50       154 Parse::RecDescent::_trace(q{Trying terminal: [/"HTML"|HTML/i]}, Parse::RecDescent::_tracefirst($text),
6213             q{HTML},
6214             $tracelevel)
6215             if defined $::RD_TRACE;
6216 51         130 undef $lastsep;
6217 51         141 $expectation->is(q{})->at($text);
6218            
6219              
6220 51 50 66     714 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:"HTML"|HTML)/i)
  51 100       666  
6221             {
6222 43 50       221 $text = $lastsep . $text if defined $lastsep;
6223 43         173 $expectation->failed();
6224 43 50       237 Parse::RecDescent::_trace(q{<>},
6225             Parse::RecDescent::_tracefirst($text))
6226             if defined $::RD_TRACE;
6227              
6228 43         106 last;
6229             }
6230 8         53 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6231 8         37 substr($text,0,length($current_match),q{});
6232 8 50       28 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6233             . $current_match . q{])},
6234             Parse::RecDescent::_tracefirst($text))
6235             if defined $::RD_TRACE;
6236 8         27 push @item, $item{__PATTERN1__}=$current_match;
6237            
6238              
6239 8 50       33 Parse::RecDescent::_trace(q{Trying action},
6240             Parse::RecDescent::_tracefirst($text),
6241             q{HTML},
6242             $tracelevel)
6243             if defined $::RD_TRACE;
6244            
6245              
6246 8 50       22 $_tok = ($_noactions) ? 0 : do { $return = "HTML" };
  8         22  
6247 8 50       24 unless (defined $_tok)
6248             {
6249 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
6250             if defined $::RD_TRACE;
6251 0         0 last;
6252             }
6253 8 50       25 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6254             . $_tok . q{])},
6255             Parse::RecDescent::_tracefirst($text))
6256             if defined $::RD_TRACE;
6257 8         31 push @item, $_tok;
6258 8         21 $item{__ACTION1__}=$_tok;
6259            
6260              
6261 8 50       25 Parse::RecDescent::_trace(q{>>Matched production: [/"HTML"|HTML/i]<<},
6262             Parse::RecDescent::_tracefirst($text),
6263             q{HTML},
6264             $tracelevel)
6265             if defined $::RD_TRACE;
6266              
6267              
6268              
6269 8         19 $_matched = 1;
6270 8         21 last;
6271             }
6272              
6273             splice
6274 51 100       161 @{$thisparser->{deferred}}, $def_at unless $_matched;
  43         116  
6275            
6276 51 100 66     246 unless ( $_matched || defined($score) )
6277             {
6278 43         84 splice @{$thisparser->{deferred}}, $def_at;
  43         89  
6279            
6280              
6281 43         94 $_[1] = $text; # NOT SURE THIS IS NEEDED
6282 43 50       124 Parse::RecDescent::_trace(q{<>},
6283             Parse::RecDescent::_tracefirst($_[1]),
6284             q{HTML},
6285             $tracelevel)
6286             if defined $::RD_TRACE;
6287 43         298 return undef;
6288             }
6289 8 50 33     35 if (!defined($return) && defined($score))
6290             {
6291 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6292             q{HTML},
6293             $tracelevel)
6294             if defined $::RD_TRACE;
6295 0         0 $return = $score_return;
6296             }
6297 8         17 splice @{$thisparser->{errors}}, $err_at;
  8         40  
6298 8 50       28 $return = $item[$#item] unless defined $return;
6299 8 50       28 if (defined $::RD_TRACE)
6300             {
6301 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6302             $return . q{])}, "",
6303             q{HTML},
6304             $tracelevel);
6305 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6306             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6307             Parse::RecDescent::_tracefirst($text),
6308             , q{HTML},
6309             $tracelevel)
6310             }
6311 8         26 $_[1] = $text;
6312 8         59 return $return;
6313             }
6314              
6315             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6316             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::kvpair
6317             {
6318 249     249   4524 my $thisparser = $_[0];
6319 1     1   8 use vars q{$tracelevel};
  1         2  
  1         509  
6320 249   50     668 local $tracelevel = ($tracelevel||0)+1;
6321 249         397 $ERRORS = 0;
6322 249         577 my $thisrule = $thisparser->{"rules"}{"kvpair"};
6323              
6324 249 50       519 Parse::RecDescent::_trace(q{Trying rule: [kvpair]},
6325             Parse::RecDescent::_tracefirst($_[1]),
6326             q{kvpair},
6327             $tracelevel)
6328             if defined $::RD_TRACE;
6329              
6330 249         345 my $def_at = @{$thisparser->{deferred}};
  249         543  
6331 249         447 my $err_at = @{$thisparser->{errors}};
  249         434  
6332              
6333 249         686 my $score;
6334             my $score_return;
6335 249         0 my $_tok;
6336 249         379 my $return = undef;
6337 249         364 my $_matched=0;
6338 249         389 my $commit=0;
6339 249         449 my @item = ();
6340 249         495 my %item = ();
6341 249         373 my $repeating = $_[2];
6342 249         431 my $_noactions = $_[3];
6343 249 50       570 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  249         442  
  249         498  
6344 249         536 my $_itempos = $_[5];
6345 249 50       598 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6346 249         622 my $text;
6347             my $lastsep;
6348 249         0 my $current_match;
6349 249         659 my $expectation = new Parse::RecDescent::Expectation(q{')'});
6350 249         1719 $expectation->at($_[1]);
6351            
6352 249         1017 my $thisline;
6353 249         825 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6354              
6355            
6356              
6357 249   33     1960 while (!$_matched && !$commit)
6358             {
6359            
6360 249 50       561 Parse::RecDescent::_trace(q{Trying production: [')' key value]},
6361             Parse::RecDescent::_tracefirst($_[1]),
6362             q{kvpair},
6363             $tracelevel)
6364             if defined $::RD_TRACE;
6365 249         581 my $thisprod = $thisrule->{"prods"}[0];
6366 249         448 $text = $_[1];
6367 249         358 my $_savetext;
6368 249         507 @item = (q{kvpair});
6369 249         565 %item = (__RULE__ => q{kvpair});
6370 249         403 my $repcount = 0;
6371              
6372              
6373 249 50       472 Parse::RecDescent::_trace(q{Trying terminal: [')']},
6374             Parse::RecDescent::_tracefirst($text),
6375             q{kvpair},
6376             $tracelevel)
6377             if defined $::RD_TRACE;
6378 249         539 undef $lastsep;
6379 249         621 $expectation->is(q{})->at($text);
6380 249         1717 $_savetext = $text;
6381              
6382 249 100 33     1538 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  249 50 66     1687  
  249   66     476  
  249         1324  
6383             substr($text,0,length($_tok)) eq $_tok and
6384 120         317 do { substr($text,0,length($_tok)) = ""; 1; }
  120         398  
6385             )
6386             {
6387 120         291 $text = $_savetext;
6388            
6389 120         400 $expectation->failed();
6390 120 50       589 Parse::RecDescent::_trace(q{<>},
6391             Parse::RecDescent::_tracefirst($text))
6392             if defined $::RD_TRACE;
6393 120         307 last;
6394             }
6395 129 50       353 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6396             . $_tok . q{])},
6397             Parse::RecDescent::_tracefirst($text))
6398             if defined $::RD_TRACE;
6399 129         347 push @item, $item{__STRING1__}=$_tok;
6400 129         290 $text = $_savetext;
6401              
6402 129 50       417 Parse::RecDescent::_trace(q{Trying subrule: [key]},
6403             Parse::RecDescent::_tracefirst($text),
6404             q{kvpair},
6405             $tracelevel)
6406             if defined $::RD_TRACE;
6407 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         168  
  129         278  
6408 129         405 $expectation->is(q{key})->at($text);
6409 129 50   129   1573 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::key($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         279  
6410             {
6411            
6412 0 0       0 Parse::RecDescent::_trace(q{<>},
6413             Parse::RecDescent::_tracefirst($text),
6414             q{kvpair},
6415             $tracelevel)
6416             if defined $::RD_TRACE;
6417 0         0 $expectation->failed();
6418 0         0 last;
6419             }
6420 129 50       472 Parse::RecDescent::_trace(q{>>Matched subrule: [key]<< (return value: [}
6421             . $_tok . q{]},
6422              
6423             Parse::RecDescent::_tracefirst($text),
6424             q{kvpair},
6425             $tracelevel)
6426             if defined $::RD_TRACE;
6427 129         326 $item{q{key}} = $_tok;
6428 129         314 push @item, $_tok;
6429            
6430             }
6431              
6432 129 50       299 Parse::RecDescent::_trace(q{Trying subrule: [value]},
6433             Parse::RecDescent::_tracefirst($text),
6434             q{kvpair},
6435             $tracelevel)
6436             if defined $::RD_TRACE;
6437 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         566  
  129         266  
6438 129         397 $expectation->is(q{value})->at($text);
6439 129 50   129   1555 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::value($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         325  
6440             {
6441            
6442 0 0       0 Parse::RecDescent::_trace(q{<>},
6443             Parse::RecDescent::_tracefirst($text),
6444             q{kvpair},
6445             $tracelevel)
6446             if defined $::RD_TRACE;
6447 0         0 $expectation->failed();
6448 0         0 last;
6449             }
6450 129 50       523 Parse::RecDescent::_trace(q{>>Matched subrule: [value]<< (return value: [}
6451             . $_tok . q{]},
6452              
6453             Parse::RecDescent::_tracefirst($text),
6454             q{kvpair},
6455             $tracelevel)
6456             if defined $::RD_TRACE;
6457 129         334 $item{q{value}} = $_tok;
6458 129         294 push @item, $_tok;
6459            
6460             }
6461              
6462 129 50       342 Parse::RecDescent::_trace(q{Trying action},
6463             Parse::RecDescent::_tracefirst($text),
6464             q{kvpair},
6465             $tracelevel)
6466             if defined $::RD_TRACE;
6467            
6468              
6469 129 50       375 $_tok = ($_noactions) ? 0 : do { $return = { $item{key} => $item{value} } };
  129         476  
6470 129 50       415 unless (defined $_tok)
6471             {
6472 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
6473             if defined $::RD_TRACE;
6474 0         0 last;
6475             }
6476 129 50       392 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6477             . $_tok . q{])},
6478             Parse::RecDescent::_tracefirst($text))
6479             if defined $::RD_TRACE;
6480 129         278 push @item, $_tok;
6481 129         269 $item{__ACTION1__}=$_tok;
6482            
6483              
6484 129 50       335 Parse::RecDescent::_trace(q{>>Matched production: [')' key value]<<},
6485             Parse::RecDescent::_tracefirst($text),
6486             q{kvpair},
6487             $tracelevel)
6488             if defined $::RD_TRACE;
6489              
6490              
6491              
6492 129         299 $_matched = 1;
6493 129         305 last;
6494             }
6495              
6496             splice
6497 249 100       582 @{$thisparser->{deferred}}, $def_at unless $_matched;
  120         353  
6498            
6499 249 100 66     837 unless ( $_matched || defined($score) )
6500             {
6501 120         218 splice @{$thisparser->{deferred}}, $def_at;
  120         262  
6502            
6503              
6504 120         284 $_[1] = $text; # NOT SURE THIS IS NEEDED
6505 120 50       337 Parse::RecDescent::_trace(q{<>},
6506             Parse::RecDescent::_tracefirst($_[1]),
6507             q{kvpair},
6508             $tracelevel)
6509             if defined $::RD_TRACE;
6510 120         588 return undef;
6511             }
6512 129 50 33     418 if (!defined($return) && defined($score))
6513             {
6514 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6515             q{kvpair},
6516             $tracelevel)
6517             if defined $::RD_TRACE;
6518 0         0 $return = $score_return;
6519             }
6520 129         212 splice @{$thisparser->{errors}}, $err_at;
  129         328  
6521 129 50       331 $return = $item[$#item] unless defined $return;
6522 129 50       318 if (defined $::RD_TRACE)
6523             {
6524 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6525             $return . q{])}, "",
6526             q{kvpair},
6527             $tracelevel);
6528 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6529             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6530             Parse::RecDescent::_tracefirst($text),
6531             , q{kvpair},
6532             $tracelevel)
6533             }
6534 129         259 $_[1] = $text;
6535 129         720 return $return;
6536             }
6537              
6538             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6539             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::replyto
6540             {
6541 24     24   53 my $thisparser = $_[0];
6542 1     1   7 use vars q{$tracelevel};
  1         3  
  1         354  
6543 24   50     87 local $tracelevel = ($tracelevel||0)+1;
6544 24         67 $ERRORS = 0;
6545 24         90 my $thisrule = $thisparser->{"rules"}{"replyto"};
6546              
6547 24 50       75 Parse::RecDescent::_trace(q{Trying rule: [replyto]},
6548             Parse::RecDescent::_tracefirst($_[1]),
6549             q{replyto},
6550             $tracelevel)
6551             if defined $::RD_TRACE;
6552              
6553 24         47 my $def_at = @{$thisparser->{deferred}};
  24         59  
6554 24         36 my $err_at = @{$thisparser->{errors}};
  24         52  
6555              
6556 24         85 my $score;
6557             my $score_return;
6558 24         0 my $_tok;
6559 24         53 my $return = undef;
6560 24         55 my $_matched=0;
6561 24         52 my $commit=0;
6562 24         57 my @item = ();
6563 24         52 my %item = ();
6564 24         58 my $repeating = $_[2];
6565 24         46 my $_noactions = $_[3];
6566 24 50       86 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         43  
  24         52  
6567 24         51 my $_itempos = $_[5];
6568 24 50       93 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6569 24         87 my $text;
6570             my $lastsep;
6571 24         0 my $current_match;
6572 24         79 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
6573 24         189 $expectation->at($_[1]);
6574            
6575 24         116 my $thisline;
6576 24         100 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6577              
6578            
6579              
6580 24   33     228 while (!$_matched && !$commit)
6581             {
6582            
6583 24 50       74 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
6584             Parse::RecDescent::_tracefirst($_[1]),
6585             q{replyto},
6586             $tracelevel)
6587             if defined $::RD_TRACE;
6588 24         81 my $thisprod = $thisrule->{"prods"}[0];
6589 24         67 $text = $_[1];
6590 24         53 my $_savetext;
6591 24         89 @item = (q{replyto});
6592 24         76 %item = (__RULE__ => q{replyto});
6593 24         59 my $repcount = 0;
6594              
6595              
6596 24 50       73 Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]},
6597             Parse::RecDescent::_tracefirst($text),
6598             q{replyto},
6599             $tracelevel)
6600             if defined $::RD_TRACE;
6601 1     1   9 if (1) { no strict qw{refs};
  1         2  
  1         456  
  24         60  
6602 24         83 $expectation->is(q{})->at($text);
6603 24 50   24   265 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         53  
6604             {
6605            
6606 0 0       0 Parse::RecDescent::_trace(q{<>},
6607             Parse::RecDescent::_tracefirst($text),
6608             q{replyto},
6609             $tracelevel)
6610             if defined $::RD_TRACE;
6611 0         0 $expectation->failed();
6612 0         0 last;
6613             }
6614 24 50       121 Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [}
6615             . $_tok . q{]},
6616              
6617             Parse::RecDescent::_tracefirst($text),
6618             q{replyto},
6619             $tracelevel)
6620             if defined $::RD_TRACE;
6621 24         74 $item{q{ADDRESSES}} = $_tok;
6622 24         69 push @item, $_tok;
6623            
6624             }
6625              
6626 24 50       72 Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<},
6627             Parse::RecDescent::_tracefirst($text),
6628             q{replyto},
6629             $tracelevel)
6630             if defined $::RD_TRACE;
6631              
6632              
6633              
6634 24         49 $_matched = 1;
6635 24         46 last;
6636             }
6637              
6638             splice
6639 24 50       108 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
6640            
6641 24 50 33     91 unless ( $_matched || defined($score) )
6642             {
6643 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
6644            
6645              
6646 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
6647 0 0       0 Parse::RecDescent::_trace(q{<>},
6648             Parse::RecDescent::_tracefirst($_[1]),
6649             q{replyto},
6650             $tracelevel)
6651             if defined $::RD_TRACE;
6652 0         0 return undef;
6653             }
6654 24 50 33     158 if (!defined($return) && defined($score))
6655             {
6656 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6657             q{replyto},
6658             $tracelevel)
6659             if defined $::RD_TRACE;
6660 0         0 $return = $score_return;
6661             }
6662 24         51 splice @{$thisparser->{errors}}, $err_at;
  24         77  
6663 24 50       81 $return = $item[$#item] unless defined $return;
6664 24 50       83 if (defined $::RD_TRACE)
6665             {
6666 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6667             $return . q{])}, "",
6668             q{replyto},
6669             $tracelevel);
6670 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6671             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6672             Parse::RecDescent::_tracefirst($text),
6673             , q{replyto},
6674             $tracelevel)
6675             }
6676 24         60 $_[1] = $text;
6677 24         170 return $return;
6678             }
6679              
6680             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6681             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::mailboxname
6682             {
6683 94     94   195 my $thisparser = $_[0];
6684 1     1   7 use vars q{$tracelevel};
  1         2  
  1         350  
6685 94   50     248 local $tracelevel = ($tracelevel||0)+1;
6686 94         168 $ERRORS = 0;
6687 94         244 my $thisrule = $thisparser->{"rules"}{"mailboxname"};
6688              
6689 94 50       219 Parse::RecDescent::_trace(q{Trying rule: [mailboxname]},
6690             Parse::RecDescent::_tracefirst($_[1]),
6691             q{mailboxname},
6692             $tracelevel)
6693             if defined $::RD_TRACE;
6694              
6695 94         147 my $def_at = @{$thisparser->{deferred}};
  94         212  
6696 94         237 my $err_at = @{$thisparser->{errors}};
  94         200  
6697              
6698 94         289 my $score;
6699             my $score_return;
6700 94         0 my $_tok;
6701 94         166 my $return = undef;
6702 94         156 my $_matched=0;
6703 94         204 my $commit=0;
6704 94         179 my @item = ();
6705 94         154 my %item = ();
6706 94         162 my $repeating = $_[2];
6707 94         148 my $_noactions = $_[3];
6708 94 50       218 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         148  
  94         163  
6709 94         157 my $_itempos = $_[5];
6710 94 50       254 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6711 94         281 my $text;
6712             my $lastsep;
6713 94         0 my $current_match;
6714 94         260 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
6715 94         620 $expectation->at($_[1]);
6716            
6717 94         460 my $thisline;
6718 94         331 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6719              
6720            
6721              
6722 94   33     792 while (!$_matched && !$commit)
6723             {
6724            
6725 94 50       264 Parse::RecDescent::_trace(q{Trying production: [NIL]},
6726             Parse::RecDescent::_tracefirst($_[1]),
6727             q{mailboxname},
6728             $tracelevel)
6729             if defined $::RD_TRACE;
6730 94         236 my $thisprod = $thisrule->{"prods"}[0];
6731 94         179 $text = $_[1];
6732 94         145 my $_savetext;
6733 94         199 @item = (q{mailboxname});
6734 94         234 %item = (__RULE__ => q{mailboxname});
6735 94         157 my $repcount = 0;
6736              
6737              
6738 94 50       227 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
6739             Parse::RecDescent::_tracefirst($text),
6740             q{mailboxname},
6741             $tracelevel)
6742             if defined $::RD_TRACE;
6743 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         279  
  94         162  
6744 94         212 $expectation->is(q{})->at($text);
6745 94 50   94   873 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         200  
6746             {
6747            
6748 94 50       266 Parse::RecDescent::_trace(q{<>},
6749             Parse::RecDescent::_tracefirst($text),
6750             q{mailboxname},
6751             $tracelevel)
6752             if defined $::RD_TRACE;
6753 94         291 $expectation->failed();
6754 94         326 last;
6755             }
6756 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
6757             . $_tok . q{]},
6758              
6759             Parse::RecDescent::_tracefirst($text),
6760             q{mailboxname},
6761             $tracelevel)
6762             if defined $::RD_TRACE;
6763 0         0 $item{q{NIL}} = $_tok;
6764 0         0 push @item, $_tok;
6765            
6766             }
6767              
6768 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
6769             Parse::RecDescent::_tracefirst($text),
6770             q{mailboxname},
6771             $tracelevel)
6772             if defined $::RD_TRACE;
6773              
6774              
6775              
6776 0         0 $_matched = 1;
6777 0         0 last;
6778             }
6779              
6780             splice
6781 94 50       339 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         227  
6782            
6783 94   33     397 while (!$_matched && !$commit)
6784             {
6785            
6786 94 50       231 Parse::RecDescent::_trace(q{Trying production: [STRING]},
6787             Parse::RecDescent::_tracefirst($_[1]),
6788             q{mailboxname},
6789             $tracelevel)
6790             if defined $::RD_TRACE;
6791 94         205 my $thisprod = $thisrule->{"prods"}[1];
6792 94         216 $text = $_[1];
6793 94         152 my $_savetext;
6794 94         219 @item = (q{mailboxname});
6795 94         236 %item = (__RULE__ => q{mailboxname});
6796 94         144 my $repcount = 0;
6797              
6798              
6799 94 50       206 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
6800             Parse::RecDescent::_tracefirst($text),
6801             q{mailboxname},
6802             $tracelevel)
6803             if defined $::RD_TRACE;
6804 1     1   7 if (1) { no strict qw{refs};
  1         9  
  1         446  
  94         146  
6805 94         274 $expectation->is(q{})->at($text);
6806 94 50   94   973 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         214  
6807             {
6808            
6809 0 0       0 Parse::RecDescent::_trace(q{<>},
6810             Parse::RecDescent::_tracefirst($text),
6811             q{mailboxname},
6812             $tracelevel)
6813             if defined $::RD_TRACE;
6814 0         0 $expectation->failed();
6815 0         0 last;
6816             }
6817 94 50       366 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
6818             . $_tok . q{]},
6819              
6820             Parse::RecDescent::_tracefirst($text),
6821             q{mailboxname},
6822             $tracelevel)
6823             if defined $::RD_TRACE;
6824 94         235 $item{q{STRING}} = $_tok;
6825 94         187 push @item, $_tok;
6826            
6827             }
6828              
6829 94 50       222 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
6830             Parse::RecDescent::_tracefirst($text),
6831             q{mailboxname},
6832             $tracelevel)
6833             if defined $::RD_TRACE;
6834              
6835              
6836              
6837 94         156 $_matched = 1;
6838 94         192 last;
6839             }
6840              
6841             splice
6842 94 50       219 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
6843            
6844 94 50 33     291 unless ( $_matched || defined($score) )
6845             {
6846 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
6847            
6848              
6849 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
6850 0 0       0 Parse::RecDescent::_trace(q{<>},
6851             Parse::RecDescent::_tracefirst($_[1]),
6852             q{mailboxname},
6853             $tracelevel)
6854             if defined $::RD_TRACE;
6855 0         0 return undef;
6856             }
6857 94 50 33     390 if (!defined($return) && defined($score))
6858             {
6859 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6860             q{mailboxname},
6861             $tracelevel)
6862             if defined $::RD_TRACE;
6863 0         0 $return = $score_return;
6864             }
6865 94         169 splice @{$thisparser->{errors}}, $err_at;
  94         205  
6866 94 50       315 $return = $item[$#item] unless defined $return;
6867 94 50       240 if (defined $::RD_TRACE)
6868             {
6869 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6870             $return . q{])}, "",
6871             q{mailboxname},
6872             $tracelevel);
6873 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6874             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6875             Parse::RecDescent::_tracefirst($text),
6876             , q{mailboxname},
6877             $tracelevel)
6878             }
6879 94         237 $_[1] = $text;
6880 94         485 return $return;
6881             }
6882              
6883             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6884             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields
6885             {
6886 51     51   119 my $thisparser = $_[0];
6887 1     1   8 use vars q{$tracelevel};
  1         2  
  1         348  
6888 51   50     222 local $tracelevel = ($tracelevel||0)+1;
6889 51         104 $ERRORS = 0;
6890 51         205 my $thisrule = $thisparser->{"rules"}{"basicfields"};
6891              
6892 51 50       154 Parse::RecDescent::_trace(q{Trying rule: [basicfields]},
6893             Parse::RecDescent::_tracefirst($_[1]),
6894             q{basicfields},
6895             $tracelevel)
6896             if defined $::RD_TRACE;
6897              
6898 51         103 my $def_at = @{$thisparser->{deferred}};
  51         130  
6899 51         99 my $err_at = @{$thisparser->{errors}};
  51         141  
6900              
6901 51         167 my $score;
6902             my $score_return;
6903 51         0 my $_tok;
6904 51         91 my $return = undef;
6905 51         121 my $_matched=0;
6906 51         91 my $commit=0;
6907 51         134 my @item = ();
6908 51         97 my %item = ();
6909 51         94 my $repeating = $_[2];
6910 51         96 my $_noactions = $_[3];
6911 51 50       148 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  51         85  
  51         101  
6912 51         107 my $_itempos = $_[5];
6913 51 50       172 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6914 51         167 my $text;
6915             my $lastsep;
6916 51         0 my $current_match;
6917 51         175 my $expectation = new Parse::RecDescent::Expectation(q{bodysubtype});
6918 51         487 $expectation->at($_[1]);
6919            
6920 51         206 my $thisline;
6921 51         216 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6922              
6923            
6924              
6925 51   33     508 while (!$_matched && !$commit)
6926             {
6927            
6928 51 50       160 Parse::RecDescent::_trace(q{Trying production: [bodysubtype bodyparms bodyid bodydesc bodyenc bodysize]},
6929             Parse::RecDescent::_tracefirst($_[1]),
6930             q{basicfields},
6931             $tracelevel)
6932             if defined $::RD_TRACE;
6933 51         156 my $thisprod = $thisrule->{"prods"}[0];
6934 51         143 $text = $_[1];
6935 51         129 my $_savetext;
6936 51         149 @item = (q{basicfields});
6937 51         190 %item = (__RULE__ => q{basicfields});
6938 51         114 my $repcount = 0;
6939              
6940              
6941 51 50       153 Parse::RecDescent::_trace(q{Trying subrule: [bodysubtype]},
6942             Parse::RecDescent::_tracefirst($text),
6943             q{basicfields},
6944             $tracelevel)
6945             if defined $::RD_TRACE;
6946 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         1173  
  51         89  
6947 51         247 $expectation->is(q{})->at($text);
6948 51 50   51   630 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  51         110  
6949             {
6950            
6951 0 0       0 Parse::RecDescent::_trace(q{<>},
6952             Parse::RecDescent::_tracefirst($text),
6953             q{basicfields},
6954             $tracelevel)
6955             if defined $::RD_TRACE;
6956 0         0 $expectation->failed();
6957 0         0 last;
6958             }
6959 51 50       250 Parse::RecDescent::_trace(q{>>Matched subrule: [bodysubtype]<< (return value: [}
6960             . $_tok . q{]},
6961              
6962             Parse::RecDescent::_tracefirst($text),
6963             q{basicfields},
6964             $tracelevel)
6965             if defined $::RD_TRACE;
6966 51         165 $item{q{bodysubtype}} = $_tok;
6967 51         122 push @item, $_tok;
6968            
6969             }
6970              
6971 51 50       156 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyparms]},
6972             Parse::RecDescent::_tracefirst($text),
6973             q{basicfields},
6974             $tracelevel)
6975             if defined $::RD_TRACE;
6976 51         175 $expectation->is(q{bodyparms})->at($text);
6977            
6978 51 50   51   707 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         118  
6979             {
6980 0 0       0 Parse::RecDescent::_trace(q{<>},
6981             Parse::RecDescent::_tracefirst($text),
6982             q{basicfields},
6983             $tracelevel)
6984             if defined $::RD_TRACE;
6985 0         0 last;
6986             }
6987 51 50       969 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyparms]<< (}
6988             . @$_tok . q{ times)},
6989              
6990             Parse::RecDescent::_tracefirst($text),
6991             q{basicfields},
6992             $tracelevel)
6993             if defined $::RD_TRACE;
6994 51         171 $item{q{bodyparms(?)}} = $_tok;
6995 51         123 push @item, $_tok;
6996            
6997              
6998              
6999 51 50       151 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyid]},
7000             Parse::RecDescent::_tracefirst($text),
7001             q{basicfields},
7002             $tracelevel)
7003             if defined $::RD_TRACE;
7004 51         188 $expectation->is(q{bodyid})->at($text);
7005            
7006 51 50   51   751 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         136  
7007             {
7008 0 0       0 Parse::RecDescent::_trace(q{<>},
7009             Parse::RecDescent::_tracefirst($text),
7010             q{basicfields},
7011             $tracelevel)
7012             if defined $::RD_TRACE;
7013 0         0 last;
7014             }
7015 51 50       916 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyid]<< (}
7016             . @$_tok . q{ times)},
7017              
7018             Parse::RecDescent::_tracefirst($text),
7019             q{basicfields},
7020             $tracelevel)
7021             if defined $::RD_TRACE;
7022 51         148 $item{q{bodyid(?)}} = $_tok;
7023 51         149 push @item, $_tok;
7024            
7025              
7026              
7027 51 50       157 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydesc]},
7028             Parse::RecDescent::_tracefirst($text),
7029             q{basicfields},
7030             $tracelevel)
7031             if defined $::RD_TRACE;
7032 51         205 $expectation->is(q{bodydesc})->at($text);
7033            
7034 51 50   51   671 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         162  
7035             {
7036 0 0       0 Parse::RecDescent::_trace(q{<>},
7037             Parse::RecDescent::_tracefirst($text),
7038             q{basicfields},
7039             $tracelevel)
7040             if defined $::RD_TRACE;
7041 0         0 last;
7042             }
7043 51 50       909 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydesc]<< (}
7044             . @$_tok . q{ times)},
7045              
7046             Parse::RecDescent::_tracefirst($text),
7047             q{basicfields},
7048             $tracelevel)
7049             if defined $::RD_TRACE;
7050 51         169 $item{q{bodydesc(?)}} = $_tok;
7051 51         125 push @item, $_tok;
7052            
7053              
7054              
7055 51 50       155 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyenc]},
7056             Parse::RecDescent::_tracefirst($text),
7057             q{basicfields},
7058             $tracelevel)
7059             if defined $::RD_TRACE;
7060 51         175 $expectation->is(q{bodyenc})->at($text);
7061            
7062 51 50   51   685 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         143  
7063             {
7064 0 0       0 Parse::RecDescent::_trace(q{<>},
7065             Parse::RecDescent::_tracefirst($text),
7066             q{basicfields},
7067             $tracelevel)
7068             if defined $::RD_TRACE;
7069 0         0 last;
7070             }
7071 51 50       932 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyenc]<< (}
7072             . @$_tok . q{ times)},
7073              
7074             Parse::RecDescent::_tracefirst($text),
7075             q{basicfields},
7076             $tracelevel)
7077             if defined $::RD_TRACE;
7078 51         152 $item{q{bodyenc(?)}} = $_tok;
7079 51         110 push @item, $_tok;
7080            
7081              
7082              
7083 51 50       153 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodysize]},
7084             Parse::RecDescent::_tracefirst($text),
7085             q{basicfields},
7086             $tracelevel)
7087             if defined $::RD_TRACE;
7088 51         172 $expectation->is(q{bodysize})->at($text);
7089            
7090 51 50   51   670 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         228  
7091             {
7092 0 0       0 Parse::RecDescent::_trace(q{<>},
7093             Parse::RecDescent::_tracefirst($text),
7094             q{basicfields},
7095             $tracelevel)
7096             if defined $::RD_TRACE;
7097 0         0 last;
7098             }
7099 51 50       960 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodysize]<< (}
7100             . @$_tok . q{ times)},
7101              
7102             Parse::RecDescent::_tracefirst($text),
7103             q{basicfields},
7104             $tracelevel)
7105             if defined $::RD_TRACE;
7106 51         136 $item{q{bodysize(?)}} = $_tok;
7107 51         105 push @item, $_tok;
7108            
7109              
7110              
7111 51 50       197 Parse::RecDescent::_trace(q{Trying action},
7112             Parse::RecDescent::_tracefirst($text),
7113             q{basicfields},
7114             $tracelevel)
7115             if defined $::RD_TRACE;
7116            
7117              
7118 51 50       146 $_tok = ($_noactions) ? 0 : do { $return = { bodysubtype => $item{bodysubtype} };
  51         196  
7119 51         285 take_optional_items($return, \%item,
7120             qw/bodyparms bodyid bodydesc bodyenc bodysize/);
7121 51         122 1;
7122             };
7123 51 50       158 unless (defined $_tok)
7124             {
7125 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
7126             if defined $::RD_TRACE;
7127 0         0 last;
7128             }
7129 51 50       215 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
7130             . $_tok . q{])},
7131             Parse::RecDescent::_tracefirst($text))
7132             if defined $::RD_TRACE;
7133 51         120 push @item, $_tok;
7134 51         128 $item{__ACTION1__}=$_tok;
7135            
7136              
7137 51 50       138 Parse::RecDescent::_trace(q{>>Matched production: [bodysubtype bodyparms bodyid bodydesc bodyenc bodysize]<<},
7138             Parse::RecDescent::_tracefirst($text),
7139             q{basicfields},
7140             $tracelevel)
7141             if defined $::RD_TRACE;
7142              
7143              
7144              
7145 51         117 $_matched = 1;
7146 51         106 last;
7147             }
7148              
7149             splice
7150 51 50       135 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
7151            
7152 51 50 33     195 unless ( $_matched || defined($score) )
7153             {
7154 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
7155            
7156              
7157 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
7158 0 0       0 Parse::RecDescent::_trace(q{<>},
7159             Parse::RecDescent::_tracefirst($_[1]),
7160             q{basicfields},
7161             $tracelevel)
7162             if defined $::RD_TRACE;
7163 0         0 return undef;
7164             }
7165 51 50 33     178 if (!defined($return) && defined($score))
7166             {
7167 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7168             q{basicfields},
7169             $tracelevel)
7170             if defined $::RD_TRACE;
7171 0         0 $return = $score_return;
7172             }
7173 51         120 splice @{$thisparser->{errors}}, $err_at;
  51         126  
7174 51 50       170 $return = $item[$#item] unless defined $return;
7175 51 50       138 if (defined $::RD_TRACE)
7176             {
7177 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7178             $return . q{])}, "",
7179             q{basicfields},
7180             $tracelevel);
7181 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7182             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7183             Parse::RecDescent::_tracefirst($text),
7184             , q{basicfields},
7185             $tracelevel)
7186             }
7187 51         128 $_[1] = $text;
7188 51         458 return $return;
7189             }
7190              
7191             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7192             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize
7193             {
7194 72     72   929 my $thisparser = $_[0];
7195 1     1   8 use vars q{$tracelevel};
  1         2  
  1         523  
7196 72   50     278 local $tracelevel = ($tracelevel||0)+1;
7197 72         143 $ERRORS = 0;
7198 72         207 my $thisrule = $thisparser->{"rules"}{"bodysize"};
7199              
7200 72 50       205 Parse::RecDescent::_trace(q{Trying rule: [bodysize]},
7201             Parse::RecDescent::_tracefirst($_[1]),
7202             q{bodysize},
7203             $tracelevel)
7204             if defined $::RD_TRACE;
7205              
7206 72         109 my $def_at = @{$thisparser->{deferred}};
  72         165  
7207 72         108 my $err_at = @{$thisparser->{errors}};
  72         188  
7208              
7209 72         239 my $score;
7210             my $score_return;
7211 72         0 my $_tok;
7212 72         124 my $return = undef;
7213 72         130 my $_matched=0;
7214 72         153 my $commit=0;
7215 72         144 my @item = ();
7216 72         154 my %item = ();
7217 72         134 my $repeating = $_[2];
7218 72         133 my $_noactions = $_[3];
7219 72 50       187 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         160  
  72         206  
7220 72         162 my $_itempos = $_[5];
7221 72 50       261 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7222 72         253 my $text;
7223             my $lastsep;
7224 72         0 my $current_match;
7225 72         222 my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or NUMBER});
7226 72         564 $expectation->at($_[1]);
7227            
7228 72         301 my $thisline;
7229 72         292 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7230              
7231            
7232              
7233 72   33     671 while (!$_matched && !$commit)
7234             {
7235            
7236 72 50       199 Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]},
7237             Parse::RecDescent::_tracefirst($_[1]),
7238             q{bodysize},
7239             $tracelevel)
7240             if defined $::RD_TRACE;
7241 72         266 my $thisprod = $thisrule->{"prods"}[0];
7242 72         162 $text = $_[1];
7243 72         262 my $_savetext;
7244 72         177 @item = (q{bodysize});
7245 72         183 %item = (__RULE__ => q{bodysize});
7246 72         166 my $repcount = 0;
7247              
7248              
7249 72 50       204 Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text),
7250             q{bodysize},
7251             $tracelevel)
7252             if defined $::RD_TRACE;
7253 72         168 undef $lastsep;
7254 72         212 $expectation->is(q{})->at($text);
7255 72         570 $_savetext = $text;
7256              
7257 72 50 33     540 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/)
  72 50       919  
7258             {
7259 0         0 $text = $_savetext;
7260 0         0 $expectation->failed();
7261 0 0       0 Parse::RecDescent::_trace(q{<>},
7262             Parse::RecDescent::_tracefirst($text))
7263             if defined $::RD_TRACE;
7264              
7265 0         0 last;
7266             }
7267 72         374 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7268 72         236 substr($text,0,length($current_match),q{});
7269 72 50       251 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7270             . $current_match . q{])},
7271             Parse::RecDescent::_tracefirst($text))
7272             if defined $::RD_TRACE;
7273 72         266 push @item, $item{__PATTERN1__}=$current_match;
7274 72         197 $text = $_savetext;
7275              
7276 72 50       211 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
7277             Parse::RecDescent::_tracefirst($text),
7278             q{bodysize},
7279             $tracelevel)
7280             if defined $::RD_TRACE;
7281 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         328  
  72         157  
7282 72         260 $expectation->is(q{NIL})->at($text);
7283 72 50   72   864 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         144  
7284             {
7285            
7286 72 50       219 Parse::RecDescent::_trace(q{<>},
7287             Parse::RecDescent::_tracefirst($text),
7288             q{bodysize},
7289             $tracelevel)
7290             if defined $::RD_TRACE;
7291 72         220 $expectation->failed();
7292 72         864 last;
7293             }
7294 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
7295             . $_tok . q{]},
7296              
7297             Parse::RecDescent::_tracefirst($text),
7298             q{bodysize},
7299             $tracelevel)
7300             if defined $::RD_TRACE;
7301 0         0 $item{q{NIL}} = $_tok;
7302 0         0 push @item, $_tok;
7303            
7304             }
7305              
7306 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<},
7307             Parse::RecDescent::_tracefirst($text),
7308             q{bodysize},
7309             $tracelevel)
7310             if defined $::RD_TRACE;
7311              
7312              
7313              
7314 0         0 $_matched = 1;
7315 0         0 last;
7316             }
7317              
7318             splice
7319 72 50       298 @{$thisparser->{deferred}}, $def_at unless $_matched;
  72         235  
7320            
7321 72   33     328 while (!$_matched && !$commit)
7322             {
7323            
7324 72 50       195 Parse::RecDescent::_trace(q{Trying production: [NUMBER]},
7325             Parse::RecDescent::_tracefirst($_[1]),
7326             q{bodysize},
7327             $tracelevel)
7328             if defined $::RD_TRACE;
7329 72         188 my $thisprod = $thisrule->{"prods"}[1];
7330 72         190 $text = $_[1];
7331 72         124 my $_savetext;
7332 72         224 @item = (q{bodysize});
7333 72         219 %item = (__RULE__ => q{bodysize});
7334 72         153 my $repcount = 0;
7335              
7336              
7337 72 50       221 Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]},
7338             Parse::RecDescent::_tracefirst($text),
7339             q{bodysize},
7340             $tracelevel)
7341             if defined $::RD_TRACE;
7342 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         486  
  72         160  
7343 72         256 $expectation->is(q{})->at($text);
7344 72 50   72   869 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         173  
7345             {
7346            
7347 0 0       0 Parse::RecDescent::_trace(q{<>},
7348             Parse::RecDescent::_tracefirst($text),
7349             q{bodysize},
7350             $tracelevel)
7351             if defined $::RD_TRACE;
7352 0         0 $expectation->failed();
7353 0         0 last;
7354             }
7355 72 50       361 Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [}
7356             . $_tok . q{]},
7357              
7358             Parse::RecDescent::_tracefirst($text),
7359             q{bodysize},
7360             $tracelevel)
7361             if defined $::RD_TRACE;
7362 72         209 $item{q{NUMBER}} = $_tok;
7363 72         155 push @item, $_tok;
7364            
7365             }
7366              
7367 72 50       196 Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<},
7368             Parse::RecDescent::_tracefirst($text),
7369             q{bodysize},
7370             $tracelevel)
7371             if defined $::RD_TRACE;
7372              
7373              
7374              
7375 72         155 $_matched = 1;
7376 72         192 last;
7377             }
7378              
7379             splice
7380 72 50       203 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
7381            
7382 72 50 33     242 unless ( $_matched || defined($score) )
7383             {
7384 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
7385            
7386              
7387 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
7388 0 0       0 Parse::RecDescent::_trace(q{<>},
7389             Parse::RecDescent::_tracefirst($_[1]),
7390             q{bodysize},
7391             $tracelevel)
7392             if defined $::RD_TRACE;
7393 0         0 return undef;
7394             }
7395 72 50 33     362 if (!defined($return) && defined($score))
7396             {
7397 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7398             q{bodysize},
7399             $tracelevel)
7400             if defined $::RD_TRACE;
7401 0         0 $return = $score_return;
7402             }
7403 72         144 splice @{$thisparser->{errors}}, $err_at;
  72         184  
7404 72 50       254 $return = $item[$#item] unless defined $return;
7405 72 50       205 if (defined $::RD_TRACE)
7406             {
7407 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7408             $return . q{])}, "",
7409             q{bodysize},
7410             $tracelevel);
7411 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7412             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7413             Parse::RecDescent::_tracefirst($text),
7414             , q{bodysize},
7415             $tracelevel)
7416             }
7417 72         180 $_[1] = $text;
7418 72         461 return $return;
7419             }
7420              
7421             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7422             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::othertypemessage
7423             {
7424 32     32   76 my $thisparser = $_[0];
7425 1     1   8 use vars q{$tracelevel};
  1         2  
  1         364  
7426 32   50     115 local $tracelevel = ($tracelevel||0)+1;
7427 32         65 $ERRORS = 0;
7428 32         106 my $thisrule = $thisparser->{"rules"}{"othertypemessage"};
7429              
7430 32 50       103 Parse::RecDescent::_trace(q{Trying rule: [othertypemessage]},
7431             Parse::RecDescent::_tracefirst($_[1]),
7432             q{othertypemessage},
7433             $tracelevel)
7434             if defined $::RD_TRACE;
7435              
7436 32         61 my $def_at = @{$thisparser->{deferred}};
  32         85  
7437 32         85 my $err_at = @{$thisparser->{errors}};
  32         83  
7438              
7439 32         141 my $score;
7440             my $score_return;
7441 32         0 my $_tok;
7442 32         56 my $return = undef;
7443 32         53 my $_matched=0;
7444 32         76 my $commit=0;
7445 32         69 my @item = ();
7446 32         80 my %item = ();
7447 32         64 my $repeating = $_[2];
7448 32         58 my $_noactions = $_[3];
7449 32 50       100 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  32         56  
  32         88  
7450 32         78 my $_itempos = $_[5];
7451 32 50       127 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7452 32         112 my $text;
7453             my $lastsep;
7454 32         0 my $current_match;
7455 32         111 my $expectation = new Parse::RecDescent::Expectation(q{bodytype});
7456 32         261 $expectation->at($_[1]);
7457            
7458 32         139 my $thisline;
7459 32         136 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7460              
7461            
7462              
7463 32   33     328 while (!$_matched && !$commit)
7464             {
7465            
7466 32 50       105 Parse::RecDescent::_trace(q{Trying production: [bodytype basicfields bodyMD5 bodydisp bodylang bodyextra]},
7467             Parse::RecDescent::_tracefirst($_[1]),
7468             q{othertypemessage},
7469             $tracelevel)
7470             if defined $::RD_TRACE;
7471 32         115 my $thisprod = $thisrule->{"prods"}[0];
7472 32         98 $text = $_[1];
7473 32         64 my $_savetext;
7474 32         77 @item = (q{othertypemessage});
7475 32         109 %item = (__RULE__ => q{othertypemessage});
7476 32         66 my $repcount = 0;
7477              
7478              
7479 32 50       92 Parse::RecDescent::_trace(q{Trying subrule: [bodytype]},
7480             Parse::RecDescent::_tracefirst($text),
7481             q{othertypemessage},
7482             $tracelevel)
7483             if defined $::RD_TRACE;
7484 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         170  
  32         71  
7485 32         116 $expectation->is(q{})->at($text);
7486 32 100   32   392 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodytype($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  32         80  
7487             {
7488            
7489 20 50       52 Parse::RecDescent::_trace(q{<>},
7490             Parse::RecDescent::_tracefirst($text),
7491             q{othertypemessage},
7492             $tracelevel)
7493             if defined $::RD_TRACE;
7494 20         77 $expectation->failed();
7495 20         76 last;
7496             }
7497 12 50       59 Parse::RecDescent::_trace(q{>>Matched subrule: [bodytype]<< (return value: [}
7498             . $_tok . q{]},
7499              
7500             Parse::RecDescent::_tracefirst($text),
7501             q{othertypemessage},
7502             $tracelevel)
7503             if defined $::RD_TRACE;
7504 12         38 $item{q{bodytype}} = $_tok;
7505 12         35 push @item, $_tok;
7506            
7507             }
7508              
7509 12 50       42 Parse::RecDescent::_trace(q{Trying subrule: [basicfields]},
7510             Parse::RecDescent::_tracefirst($text),
7511             q{othertypemessage},
7512             $tracelevel)
7513             if defined $::RD_TRACE;
7514 1     1   9 if (1) { no strict qw{refs};
  1         2  
  1         1077  
  12         25  
7515 12         47 $expectation->is(q{basicfields})->at($text);
7516 12 50   12   179 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  12         36  
7517             {
7518            
7519 0 0       0 Parse::RecDescent::_trace(q{<>},
7520             Parse::RecDescent::_tracefirst($text),
7521             q{othertypemessage},
7522             $tracelevel)
7523             if defined $::RD_TRACE;
7524 0         0 $expectation->failed();
7525 0         0 last;
7526             }
7527 12 50       74 Parse::RecDescent::_trace(q{>>Matched subrule: [basicfields]<< (return value: [}
7528             . $_tok . q{]},
7529              
7530             Parse::RecDescent::_tracefirst($text),
7531             q{othertypemessage},
7532             $tracelevel)
7533             if defined $::RD_TRACE;
7534 12         42 $item{q{basicfields}} = $_tok;
7535 12         40 push @item, $_tok;
7536            
7537             }
7538              
7539 12 50       42 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]},
7540             Parse::RecDescent::_tracefirst($text),
7541             q{othertypemessage},
7542             $tracelevel)
7543             if defined $::RD_TRACE;
7544 12         51 $expectation->is(q{bodyMD5})->at($text);
7545            
7546 12 50   12   170 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         29  
7547             {
7548 0 0       0 Parse::RecDescent::_trace(q{<>},
7549             Parse::RecDescent::_tracefirst($text),
7550             q{othertypemessage},
7551             $tracelevel)
7552             if defined $::RD_TRACE;
7553 0         0 last;
7554             }
7555 12 50       221 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (}
7556             . @$_tok . q{ times)},
7557              
7558             Parse::RecDescent::_tracefirst($text),
7559             q{othertypemessage},
7560             $tracelevel)
7561             if defined $::RD_TRACE;
7562 12         38 $item{q{bodyMD5(?)}} = $_tok;
7563 12         35 push @item, $_tok;
7564            
7565              
7566              
7567 12 50       38 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]},
7568             Parse::RecDescent::_tracefirst($text),
7569             q{othertypemessage},
7570             $tracelevel)
7571             if defined $::RD_TRACE;
7572 12         42 $expectation->is(q{bodydisp})->at($text);
7573            
7574 12 50   12   155 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         39  
7575             {
7576 0 0       0 Parse::RecDescent::_trace(q{<>},
7577             Parse::RecDescent::_tracefirst($text),
7578             q{othertypemessage},
7579             $tracelevel)
7580             if defined $::RD_TRACE;
7581 0         0 last;
7582             }
7583 12 50       233 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (}
7584             . @$_tok . q{ times)},
7585              
7586             Parse::RecDescent::_tracefirst($text),
7587             q{othertypemessage},
7588             $tracelevel)
7589             if defined $::RD_TRACE;
7590 12         42 $item{q{bodydisp(?)}} = $_tok;
7591 12         32 push @item, $_tok;
7592            
7593              
7594              
7595 12 50       43 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]},
7596             Parse::RecDescent::_tracefirst($text),
7597             q{othertypemessage},
7598             $tracelevel)
7599             if defined $::RD_TRACE;
7600 12         55 $expectation->is(q{bodylang})->at($text);
7601            
7602 12 50   12   167 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         32  
7603             {
7604 0 0       0 Parse::RecDescent::_trace(q{<>},
7605             Parse::RecDescent::_tracefirst($text),
7606             q{othertypemessage},
7607             $tracelevel)
7608             if defined $::RD_TRACE;
7609 0         0 last;
7610             }
7611 12 50       219 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (}
7612             . @$_tok . q{ times)},
7613              
7614             Parse::RecDescent::_tracefirst($text),
7615             q{othertypemessage},
7616             $tracelevel)
7617             if defined $::RD_TRACE;
7618 12         41 $item{q{bodylang(?)}} = $_tok;
7619 12         26 push @item, $_tok;
7620            
7621              
7622              
7623 12 50       46 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]},
7624             Parse::RecDescent::_tracefirst($text),
7625             q{othertypemessage},
7626             $tracelevel)
7627             if defined $::RD_TRACE;
7628 12         46 $expectation->is(q{bodyextra})->at($text);
7629            
7630 12 50   12   168 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         38  
7631             {
7632 0 0       0 Parse::RecDescent::_trace(q{<>},
7633             Parse::RecDescent::_tracefirst($text),
7634             q{othertypemessage},
7635             $tracelevel)
7636             if defined $::RD_TRACE;
7637 0         0 last;
7638             }
7639 12 50       211 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (}
7640             . @$_tok . q{ times)},
7641              
7642             Parse::RecDescent::_tracefirst($text),
7643             q{othertypemessage},
7644             $tracelevel)
7645             if defined $::RD_TRACE;
7646 12         34 $item{q{bodyextra(?)}} = $_tok;
7647 12         31 push @item, $_tok;
7648            
7649              
7650              
7651 12 50       44 Parse::RecDescent::_trace(q{Trying action},
7652             Parse::RecDescent::_tracefirst($text),
7653             q{othertypemessage},
7654             $tracelevel)
7655             if defined $::RD_TRACE;
7656            
7657              
7658 12 50       38 $_tok = ($_noactions) ? 0 : do { $return = { bodytype => $item{bodytype} };
  12         48  
7659 12         61 take_optional_items($return, \%item
7660             , qw/bodyMD5 bodydisp bodylang bodyextra/ );
7661 12         69 merge_hash($return, $item{basicfields});
7662 12         32 1;
7663             };
7664 12 50       37 unless (defined $_tok)
7665             {
7666 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
7667             if defined $::RD_TRACE;
7668 0         0 last;
7669             }
7670 12 50       34 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
7671             . $_tok . q{])},
7672             Parse::RecDescent::_tracefirst($text))
7673             if defined $::RD_TRACE;
7674 12         42 push @item, $_tok;
7675 12         37 $item{__ACTION1__}=$_tok;
7676            
7677              
7678 12 50       48 Parse::RecDescent::_trace(q{>>Matched production: [bodytype basicfields bodyMD5 bodydisp bodylang bodyextra]<<},
7679             Parse::RecDescent::_tracefirst($text),
7680             q{othertypemessage},
7681             $tracelevel)
7682             if defined $::RD_TRACE;
7683              
7684              
7685              
7686 12         26 $_matched = 1;
7687 12         31 last;
7688             }
7689              
7690             splice
7691 32 100       127 @{$thisparser->{deferred}}, $def_at unless $_matched;
  20         69  
7692            
7693 32 100 66     173 unless ( $_matched || defined($score) )
7694             {
7695 20         40 splice @{$thisparser->{deferred}}, $def_at;
  20         96  
7696            
7697              
7698 20         44 $_[1] = $text; # NOT SURE THIS IS NEEDED
7699 20 50       55 Parse::RecDescent::_trace(q{<>},
7700             Parse::RecDescent::_tracefirst($_[1]),
7701             q{othertypemessage},
7702             $tracelevel)
7703             if defined $::RD_TRACE;
7704 20         114 return undef;
7705             }
7706 12 50 33     48 if (!defined($return) && defined($score))
7707             {
7708 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7709             q{othertypemessage},
7710             $tracelevel)
7711             if defined $::RD_TRACE;
7712 0         0 $return = $score_return;
7713             }
7714 12         24 splice @{$thisparser->{errors}}, $err_at;
  12         45  
7715 12 50       48 $return = $item[$#item] unless defined $return;
7716 12 50       52 if (defined $::RD_TRACE)
7717             {
7718 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7719             $return . q{])}, "",
7720             q{othertypemessage},
7721             $tracelevel);
7722 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7723             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7724             Parse::RecDescent::_tracefirst($text),
7725             , q{othertypemessage},
7726             $tracelevel)
7727             }
7728 12         32 $_[1] = $text;
7729 12         145 return $return;
7730             }
7731              
7732             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7733             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc
7734             {
7735 72     72   955 my $thisparser = $_[0];
7736 1     1   8 use vars q{$tracelevel};
  1         1  
  1         536  
7737 72   50     254 local $tracelevel = ($tracelevel||0)+1;
7738 72         155 $ERRORS = 0;
7739 72         212 my $thisrule = $thisparser->{"rules"}{"bodydesc"};
7740              
7741 72 50       274 Parse::RecDescent::_trace(q{Trying rule: [bodydesc]},
7742             Parse::RecDescent::_tracefirst($_[1]),
7743             q{bodydesc},
7744             $tracelevel)
7745             if defined $::RD_TRACE;
7746              
7747 72         169 my $def_at = @{$thisparser->{deferred}};
  72         231  
7748 72         138 my $err_at = @{$thisparser->{errors}};
  72         155  
7749              
7750 72         217 my $score;
7751             my $score_return;
7752 72         0 my $_tok;
7753 72         136 my $return = undef;
7754 72         129 my $_matched=0;
7755 72         117 my $commit=0;
7756 72         197 my @item = ();
7757 72         145 my %item = ();
7758 72         122 my $repeating = $_[2];
7759 72         172 my $_noactions = $_[3];
7760 72 50       186 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         106  
  72         172  
7761 72         162 my $_itempos = $_[5];
7762 72 50       232 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7763 72         250 my $text;
7764             my $lastsep;
7765 72         0 my $current_match;
7766 72         217 my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or STRING});
7767 72         523 $expectation->at($_[1]);
7768            
7769 72         344 my $thisline;
7770 72         285 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7771              
7772            
7773              
7774 72   33     704 while (!$_matched && !$commit)
7775             {
7776            
7777 72 50       227 Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]},
7778             Parse::RecDescent::_tracefirst($_[1]),
7779             q{bodydesc},
7780             $tracelevel)
7781             if defined $::RD_TRACE;
7782 72         234 my $thisprod = $thisrule->{"prods"}[0];
7783 72         147 $text = $_[1];
7784 72         136 my $_savetext;
7785 72         178 @item = (q{bodydesc});
7786 72         188 %item = (__RULE__ => q{bodydesc});
7787 72         147 my $repcount = 0;
7788              
7789              
7790 72 50       224 Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text),
7791             q{bodydesc},
7792             $tracelevel)
7793             if defined $::RD_TRACE;
7794 72         152 undef $lastsep;
7795 72         213 $expectation->is(q{})->at($text);
7796 72         538 $_savetext = $text;
7797              
7798 72 50 33     559 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/)
  72 50       923  
7799             {
7800 0         0 $text = $_savetext;
7801 0         0 $expectation->failed();
7802 0 0       0 Parse::RecDescent::_trace(q{<>},
7803             Parse::RecDescent::_tracefirst($text))
7804             if defined $::RD_TRACE;
7805              
7806 0         0 last;
7807             }
7808 72         421 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7809 72         243 substr($text,0,length($current_match),q{});
7810 72 50       223 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7811             . $current_match . q{])},
7812             Parse::RecDescent::_tracefirst($text))
7813             if defined $::RD_TRACE;
7814 72         248 push @item, $item{__PATTERN1__}=$current_match;
7815 72         216 $text = $_savetext;
7816              
7817 72 50       217 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
7818             Parse::RecDescent::_tracefirst($text),
7819             q{bodydesc},
7820             $tracelevel)
7821             if defined $::RD_TRACE;
7822 1     1   7 if (1) { no strict qw{refs};
  1         3  
  1         273  
  72         153  
7823 72         283 $expectation->is(q{NIL})->at($text);
7824 72 100   72   848 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         161  
7825             {
7826            
7827 21 50       87 Parse::RecDescent::_trace(q{<>},
7828             Parse::RecDescent::_tracefirst($text),
7829             q{bodydesc},
7830             $tracelevel)
7831             if defined $::RD_TRACE;
7832 21         88 $expectation->failed();
7833 21         253 last;
7834             }
7835 51 50       225 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
7836             . $_tok . q{]},
7837              
7838             Parse::RecDescent::_tracefirst($text),
7839             q{bodydesc},
7840             $tracelevel)
7841             if defined $::RD_TRACE;
7842 51         144 $item{q{NIL}} = $_tok;
7843 51         108 push @item, $_tok;
7844            
7845             }
7846              
7847 51 50       155 Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<},
7848             Parse::RecDescent::_tracefirst($text),
7849             q{bodydesc},
7850             $tracelevel)
7851             if defined $::RD_TRACE;
7852              
7853              
7854              
7855 51         116 $_matched = 1;
7856 51         119 last;
7857             }
7858              
7859             splice
7860 72 100       290 @{$thisparser->{deferred}}, $def_at unless $_matched;
  21         74  
7861            
7862 72   66     315 while (!$_matched && !$commit)
7863             {
7864            
7865 21 50       78 Parse::RecDescent::_trace(q{Trying production: [STRING]},
7866             Parse::RecDescent::_tracefirst($_[1]),
7867             q{bodydesc},
7868             $tracelevel)
7869             if defined $::RD_TRACE;
7870 21         73 my $thisprod = $thisrule->{"prods"}[1];
7871 21         71 $text = $_[1];
7872 21         44 my $_savetext;
7873 21         69 @item = (q{bodydesc});
7874 21         75 %item = (__RULE__ => q{bodydesc});
7875 21         52 my $repcount = 0;
7876              
7877              
7878 21 50       92 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
7879             Parse::RecDescent::_tracefirst($text),
7880             q{bodydesc},
7881             $tracelevel)
7882             if defined $::RD_TRACE;
7883 1     1   8 if (1) { no strict qw{refs};
  1         4  
  1         474  
  21         43  
7884 21         74 $expectation->is(q{})->at($text);
7885 21 50   21   278 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         51  
7886             {
7887            
7888 0 0       0 Parse::RecDescent::_trace(q{<>},
7889             Parse::RecDescent::_tracefirst($text),
7890             q{bodydesc},
7891             $tracelevel)
7892             if defined $::RD_TRACE;
7893 0         0 $expectation->failed();
7894 0         0 last;
7895             }
7896 21 50       89 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
7897             . $_tok . q{]},
7898              
7899             Parse::RecDescent::_tracefirst($text),
7900             q{bodydesc},
7901             $tracelevel)
7902             if defined $::RD_TRACE;
7903 21         67 $item{q{STRING}} = $_tok;
7904 21         59 push @item, $_tok;
7905            
7906             }
7907              
7908 21 50       70 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
7909             Parse::RecDescent::_tracefirst($text),
7910             q{bodydesc},
7911             $tracelevel)
7912             if defined $::RD_TRACE;
7913              
7914              
7915              
7916 21         45 $_matched = 1;
7917 21         45 last;
7918             }
7919              
7920             splice
7921 72 50       198 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
7922            
7923 72 50 33     226 unless ( $_matched || defined($score) )
7924             {
7925 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
7926            
7927              
7928 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
7929 0 0       0 Parse::RecDescent::_trace(q{<>},
7930             Parse::RecDescent::_tracefirst($_[1]),
7931             q{bodydesc},
7932             $tracelevel)
7933             if defined $::RD_TRACE;
7934 0         0 return undef;
7935             }
7936 72 50 33     366 if (!defined($return) && defined($score))
7937             {
7938 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7939             q{bodydesc},
7940             $tracelevel)
7941             if defined $::RD_TRACE;
7942 0         0 $return = $score_return;
7943             }
7944 72         134 splice @{$thisparser->{errors}}, $err_at;
  72         185  
7945 72 50       234 $return = $item[$#item] unless defined $return;
7946 72 50       204 if (defined $::RD_TRACE)
7947             {
7948 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7949             $return . q{])}, "",
7950             q{bodydesc},
7951             $tracelevel);
7952 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7953             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7954             Parse::RecDescent::_tracefirst($text),
7955             , q{bodydesc},
7956             $tracelevel)
7957             }
7958 72         161 $_[1] = $text;
7959 72         419 return $return;
7960             }
7961              
7962             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7963             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc
7964             {
7965 72     72   964 my $thisparser = $_[0];
7966 1     1   8 use vars q{$tracelevel};
  1         3  
  1         341  
7967 72   50     294 local $tracelevel = ($tracelevel||0)+1;
7968 72         150 $ERRORS = 0;
7969 72         235 my $thisrule = $thisparser->{"rules"}{"bodyenc"};
7970              
7971 72 50       189 Parse::RecDescent::_trace(q{Trying rule: [bodyenc]},
7972             Parse::RecDescent::_tracefirst($_[1]),
7973             q{bodyenc},
7974             $tracelevel)
7975             if defined $::RD_TRACE;
7976              
7977 72         148 my $def_at = @{$thisparser->{deferred}};
  72         167  
7978 72         131 my $err_at = @{$thisparser->{errors}};
  72         225  
7979              
7980 72         251 my $score;
7981             my $score_return;
7982 72         0 my $_tok;
7983 72         156 my $return = undef;
7984 72         127 my $_matched=0;
7985 72         129 my $commit=0;
7986 72         141 my @item = ();
7987 72         168 my %item = ();
7988 72         148 my $repeating = $_[2];
7989 72         132 my $_noactions = $_[3];
7990 72 50       220 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         163  
  72         214  
7991 72         170 my $_itempos = $_[5];
7992 72 50       233 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7993 72         218 my $text;
7994             my $lastsep;
7995 72         0 my $current_match;
7996 72         248 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or KVPAIRS});
7997 72         571 $expectation->at($_[1]);
7998            
7999 72         301 my $thisline;
8000 72         269 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8001              
8002            
8003              
8004 72   33     673 while (!$_matched && !$commit)
8005             {
8006            
8007 72 50       184 Parse::RecDescent::_trace(q{Trying production: [NIL]},
8008             Parse::RecDescent::_tracefirst($_[1]),
8009             q{bodyenc},
8010             $tracelevel)
8011             if defined $::RD_TRACE;
8012 72         220 my $thisprod = $thisrule->{"prods"}[0];
8013 72         168 $text = $_[1];
8014 72         148 my $_savetext;
8015 72         204 @item = (q{bodyenc});
8016 72         188 %item = (__RULE__ => q{bodyenc});
8017 72         129 my $repcount = 0;
8018              
8019              
8020 72 50       189 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
8021             Parse::RecDescent::_tracefirst($text),
8022             q{bodyenc},
8023             $tracelevel)
8024             if defined $::RD_TRACE;
8025 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         327  
  72         120  
8026 72         211 $expectation->is(q{})->at($text);
8027 72 50   72   819 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         197  
8028             {
8029            
8030 72 50       219 Parse::RecDescent::_trace(q{<>},
8031             Parse::RecDescent::_tracefirst($text),
8032             q{bodyenc},
8033             $tracelevel)
8034             if defined $::RD_TRACE;
8035 72         226 $expectation->failed();
8036 72         311 last;
8037             }
8038 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
8039             . $_tok . q{]},
8040              
8041             Parse::RecDescent::_tracefirst($text),
8042             q{bodyenc},
8043             $tracelevel)
8044             if defined $::RD_TRACE;
8045 0         0 $item{q{NIL}} = $_tok;
8046 0         0 push @item, $_tok;
8047            
8048             }
8049              
8050 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
8051             Parse::RecDescent::_tracefirst($text),
8052             q{bodyenc},
8053             $tracelevel)
8054             if defined $::RD_TRACE;
8055              
8056              
8057              
8058 0         0 $_matched = 1;
8059 0         0 last;
8060             }
8061              
8062             splice
8063 72 50       294 @{$thisparser->{deferred}}, $def_at unless $_matched;
  72         220  
8064            
8065 72   33     342 while (!$_matched && !$commit)
8066             {
8067            
8068 72 50       236 Parse::RecDescent::_trace(q{Trying production: [STRING]},
8069             Parse::RecDescent::_tracefirst($_[1]),
8070             q{bodyenc},
8071             $tracelevel)
8072             if defined $::RD_TRACE;
8073 72         194 my $thisprod = $thisrule->{"prods"}[1];
8074 72         161 $text = $_[1];
8075 72         105 my $_savetext;
8076 72         204 @item = (q{bodyenc});
8077 72         198 %item = (__RULE__ => q{bodyenc});
8078 72         140 my $repcount = 0;
8079              
8080              
8081 72 50       295 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
8082             Parse::RecDescent::_tracefirst($text),
8083             q{bodyenc},
8084             $tracelevel)
8085             if defined $::RD_TRACE;
8086 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         281  
  72         126  
8087 72         234 $expectation->is(q{})->at($text);
8088 72 50   72   853 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         157  
8089             {
8090            
8091 0 0       0 Parse::RecDescent::_trace(q{<>},
8092             Parse::RecDescent::_tracefirst($text),
8093             q{bodyenc},
8094             $tracelevel)
8095             if defined $::RD_TRACE;
8096 0         0 $expectation->failed();
8097 0         0 last;
8098             }
8099 72 50       278 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
8100             . $_tok . q{]},
8101              
8102             Parse::RecDescent::_tracefirst($text),
8103             q{bodyenc},
8104             $tracelevel)
8105             if defined $::RD_TRACE;
8106 72         200 $item{q{STRING}} = $_tok;
8107 72         177 push @item, $_tok;
8108            
8109             }
8110              
8111 72 50       228 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
8112             Parse::RecDescent::_tracefirst($text),
8113             q{bodyenc},
8114             $tracelevel)
8115             if defined $::RD_TRACE;
8116              
8117              
8118              
8119 72         183 $_matched = 1;
8120 72         165 last;
8121             }
8122              
8123             splice
8124 72 50       189 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
8125            
8126 72   33     238 while (!$_matched && !$commit)
8127             {
8128            
8129 0 0       0 Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]},
8130             Parse::RecDescent::_tracefirst($_[1]),
8131             q{bodyenc},
8132             $tracelevel)
8133             if defined $::RD_TRACE;
8134 0         0 my $thisprod = $thisrule->{"prods"}[2];
8135 0         0 $text = $_[1];
8136 0         0 my $_savetext;
8137 0         0 @item = (q{bodyenc});
8138 0         0 %item = (__RULE__ => q{bodyenc});
8139 0         0 my $repcount = 0;
8140              
8141              
8142 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]},
8143             Parse::RecDescent::_tracefirst($text),
8144             q{bodyenc},
8145             $tracelevel)
8146             if defined $::RD_TRACE;
8147 1     1   8 if (1) { no strict qw{refs};
  1         4  
  1         494  
  0         0  
8148 0         0 $expectation->is(q{})->at($text);
8149 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
8150             {
8151            
8152 0 0       0 Parse::RecDescent::_trace(q{<>},
8153             Parse::RecDescent::_tracefirst($text),
8154             q{bodyenc},
8155             $tracelevel)
8156             if defined $::RD_TRACE;
8157 0         0 $expectation->failed();
8158 0         0 last;
8159             }
8160 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [}
8161             . $_tok . q{]},
8162              
8163             Parse::RecDescent::_tracefirst($text),
8164             q{bodyenc},
8165             $tracelevel)
8166             if defined $::RD_TRACE;
8167 0         0 $item{q{KVPAIRS}} = $_tok;
8168 0         0 push @item, $_tok;
8169            
8170             }
8171              
8172 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<},
8173             Parse::RecDescent::_tracefirst($text),
8174             q{bodyenc},
8175             $tracelevel)
8176             if defined $::RD_TRACE;
8177              
8178              
8179              
8180 0         0 $_matched = 1;
8181 0         0 last;
8182             }
8183              
8184             splice
8185 72 50       222 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
8186            
8187 72 50 33     216 unless ( $_matched || defined($score) )
8188             {
8189 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
8190            
8191              
8192 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
8193 0 0       0 Parse::RecDescent::_trace(q{<>},
8194             Parse::RecDescent::_tracefirst($_[1]),
8195             q{bodyenc},
8196             $tracelevel)
8197             if defined $::RD_TRACE;
8198 0         0 return undef;
8199             }
8200 72 50 33     357 if (!defined($return) && defined($score))
8201             {
8202 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
8203             q{bodyenc},
8204             $tracelevel)
8205             if defined $::RD_TRACE;
8206 0         0 $return = $score_return;
8207             }
8208 72         149 splice @{$thisparser->{errors}}, $err_at;
  72         198  
8209 72 50       366 $return = $item[$#item] unless defined $return;
8210 72 50       199 if (defined $::RD_TRACE)
8211             {
8212 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
8213             $return . q{])}, "",
8214             q{bodyenc},
8215             $tracelevel);
8216 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
8217             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
8218             Parse::RecDescent::_tracefirst($text),
8219             , q{bodyenc},
8220             $tracelevel)
8221             }
8222 72         172 $_[1] = $text;
8223 72         451 return $return;
8224             }
8225              
8226             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
8227             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING
8228             {
8229 824     824   1467 my $thisparser = $_[0];
8230 1     1   8 use vars q{$tracelevel};
  1         2  
  1         344  
8231 824   50     1917 local $tracelevel = ($tracelevel||0)+1;
8232 824         1260 $ERRORS = 0;
8233 824         2120 my $thisrule = $thisparser->{"rules"}{"STRING"};
8234              
8235 824 50       2033 Parse::RecDescent::_trace(q{Trying rule: [STRING]},
8236             Parse::RecDescent::_tracefirst($_[1]),
8237             q{STRING},
8238             $tracelevel)
8239             if defined $::RD_TRACE;
8240              
8241 824         1395 my $def_at = @{$thisparser->{deferred}};
  824         1604  
8242 824         1376 my $err_at = @{$thisparser->{errors}};
  824         1511  
8243              
8244 824         2003 my $score;
8245             my $score_return;
8246 824         0 my $_tok;
8247 824         1183 my $return = undef;
8248 824         1177 my $_matched=0;
8249 824         1156 my $commit=0;
8250 824         1424 my @item = ();
8251 824         1325 my %item = ();
8252 824         1160 my $repeating = $_[2];
8253 824         1514 my $_noactions = $_[3];
8254 824 50       1677 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  824         1119  
  824         1674  
8255 824         1388 my $_itempos = $_[5];
8256 824 50       1806 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8257 824         1997 my $text;
8258             my $lastsep;
8259 824         0 my $current_match;
8260 824         2087 my $expectation = new Parse::RecDescent::Expectation(q{DOUBLE_QUOTED_STRING, or SINGLE_QUOTED_STRING, or BARESTRING});
8261 824         5489 $expectation->at($_[1]);
8262            
8263 824         3326 my $thisline;
8264 824         2518 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8265              
8266            
8267              
8268 824   33     6349 while (!$_matched && !$commit)
8269             {
8270            
8271 824 50       1636 Parse::RecDescent::_trace(q{Trying production: [DOUBLE_QUOTED_STRING]},
8272             Parse::RecDescent::_tracefirst($_[1]),
8273             q{STRING},
8274             $tracelevel)
8275             if defined $::RD_TRACE;
8276 824         1712 my $thisprod = $thisrule->{"prods"}[0];
8277 824         1365 $text = $_[1];
8278 824         1124 my $_savetext;
8279 824         1564 @item = (q{STRING});
8280 824         1536 %item = (__RULE__ => q{STRING});
8281 824         1196 my $repcount = 0;
8282              
8283              
8284 824 50       1482 Parse::RecDescent::_trace(q{Trying subrule: [DOUBLE_QUOTED_STRING]},
8285             Parse::RecDescent::_tracefirst($text),
8286             q{STRING},
8287             $tracelevel)
8288             if defined $::RD_TRACE;
8289 1     1   9 if (1) { no strict qw{refs};
  1         3  
  1         283  
  824         1188  
8290 824         1728 $expectation->is(q{})->at($text);
8291 824 100   824   7430 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::DOUBLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  824         1631  
8292             {
8293            
8294 112 50       312 Parse::RecDescent::_trace(q{<>},
8295             Parse::RecDescent::_tracefirst($text),
8296             q{STRING},
8297             $tracelevel)
8298             if defined $::RD_TRACE;
8299 112         323 $expectation->failed();
8300 112         386 last;
8301             }
8302 712 50       2640 Parse::RecDescent::_trace(q{>>Matched subrule: [DOUBLE_QUOTED_STRING]<< (return value: [}
8303             . $_tok . q{]},
8304              
8305             Parse::RecDescent::_tracefirst($text),
8306             q{STRING},
8307             $tracelevel)
8308             if defined $::RD_TRACE;
8309 712         1573 $item{q{DOUBLE_QUOTED_STRING}} = $_tok;
8310 712         1425 push @item, $_tok;
8311            
8312             }
8313              
8314 712 50       1428 Parse::RecDescent::_trace(q{>>Matched production: [DOUBLE_QUOTED_STRING]<<},
8315             Parse::RecDescent::_tracefirst($text),
8316             q{STRING},
8317             $tracelevel)
8318             if defined $::RD_TRACE;
8319              
8320              
8321              
8322 712         1024 $_matched = 1;
8323 712         1233 last;
8324             }
8325              
8326             splice
8327 824 100       1880 @{$thisparser->{deferred}}, $def_at unless $_matched;
  112         268  
8328            
8329 824   66     1958 while (!$_matched && !$commit)
8330             {
8331            
8332 112 50       252 Parse::RecDescent::_trace(q{Trying production: [SINGLE_QUOTED_STRING]},
8333             Parse::RecDescent::_tracefirst($_[1]),
8334             q{STRING},
8335             $tracelevel)
8336             if defined $::RD_TRACE;
8337 112         318 my $thisprod = $thisrule->{"prods"}[1];
8338 112         210 $text = $_[1];
8339 112         172 my $_savetext;
8340 112         272 @item = (q{STRING});
8341 112         278 %item = (__RULE__ => q{STRING});
8342 112         237 my $repcount = 0;
8343              
8344              
8345 112 50       286 Parse::RecDescent::_trace(q{Trying subrule: [SINGLE_QUOTED_STRING]},
8346             Parse::RecDescent::_tracefirst($text),
8347             q{STRING},
8348             $tracelevel)
8349             if defined $::RD_TRACE;
8350 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         315  
  112         178  
8351 112         329 $expectation->is(q{})->at($text);
8352 112 100   112   1316 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::SINGLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  112         252  
8353             {
8354            
8355 111 50       291 Parse::RecDescent::_trace(q{<>},
8356             Parse::RecDescent::_tracefirst($text),
8357             q{STRING},
8358             $tracelevel)
8359             if defined $::RD_TRACE;
8360 111         346 $expectation->failed();
8361 111         389 last;
8362             }
8363 1 50       5 Parse::RecDescent::_trace(q{>>Matched subrule: [SINGLE_QUOTED_STRING]<< (return value: [}
8364             . $_tok . q{]},
8365              
8366             Parse::RecDescent::_tracefirst($text),
8367             q{STRING},
8368             $tracelevel)
8369             if defined $::RD_TRACE;
8370 1         2 $item{q{SINGLE_QUOTED_STRING}} = $_tok;
8371 1         3 push @item, $_tok;
8372            
8373             }
8374              
8375 1 50       3 Parse::RecDescent::_trace(q{>>Matched production: [SINGLE_QUOTED_STRING]<<},
8376             Parse::RecDescent::_tracefirst($text),
8377             q{STRING},
8378             $tracelevel)
8379             if defined $::RD_TRACE;
8380              
8381              
8382              
8383 1         2 $_matched = 1;
8384 1         1 last;
8385             }
8386              
8387             splice
8388 824 100       1780 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         261  
8389            
8390 824   66     1943 while (!$_matched && !$commit)
8391             {
8392            
8393 111 50       295 Parse::RecDescent::_trace(q{Trying production: [BARESTRING]},
8394             Parse::RecDescent::_tracefirst($_[1]),
8395             q{STRING},
8396             $tracelevel)
8397             if defined $::RD_TRACE;
8398 111         247 my $thisprod = $thisrule->{"prods"}[2];
8399 111         239 $text = $_[1];
8400 111         201 my $_savetext;
8401 111         282 @item = (q{STRING});
8402 111         302 %item = (__RULE__ => q{STRING});
8403 111         185 my $repcount = 0;
8404              
8405              
8406 111 50       296 Parse::RecDescent::_trace(q{Trying subrule: [BARESTRING]},
8407             Parse::RecDescent::_tracefirst($text),
8408             q{STRING},
8409             $tracelevel)
8410             if defined $::RD_TRACE;
8411 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         472  
  111         180  
8412 111         274 $expectation->is(q{})->at($text);
8413 111 50   111   1108 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::BARESTRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  111         239  
8414             {
8415            
8416 111 50       237 Parse::RecDescent::_trace(q{<>},
8417             Parse::RecDescent::_tracefirst($text),
8418             q{STRING},
8419             $tracelevel)
8420             if defined $::RD_TRACE;
8421 111         327 $expectation->failed();
8422 111         370 last;
8423             }
8424 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [BARESTRING]<< (return value: [}
8425             . $_tok . q{]},
8426              
8427             Parse::RecDescent::_tracefirst($text),
8428             q{STRING},
8429             $tracelevel)
8430             if defined $::RD_TRACE;
8431 0         0 $item{q{BARESTRING}} = $_tok;
8432 0         0 push @item, $_tok;
8433            
8434             }
8435              
8436 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [BARESTRING]<<},
8437             Parse::RecDescent::_tracefirst($text),
8438             q{STRING},
8439             $tracelevel)
8440             if defined $::RD_TRACE;
8441              
8442              
8443              
8444 0         0 $_matched = 1;
8445 0         0 last;
8446             }
8447              
8448             splice
8449 824 100       1743 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         247  
8450            
8451 824 100 66     2438 unless ( $_matched || defined($score) )
8452             {
8453 111         195 splice @{$thisparser->{deferred}}, $def_at;
  111         229  
8454            
8455              
8456 111         229 $_[1] = $text; # NOT SURE THIS IS NEEDED
8457 111 50       270 Parse::RecDescent::_trace(q{<>},
8458             Parse::RecDescent::_tracefirst($_[1]),
8459             q{STRING},
8460             $tracelevel)
8461             if defined $::RD_TRACE;
8462 111         596 return undef;
8463             }
8464 713 50 33     2579 if (!defined($return) && defined($score))
8465             {
8466 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
8467             q{STRING},
8468             $tracelevel)
8469             if defined $::RD_TRACE;
8470 0         0 $return = $score_return;
8471             }
8472 713         1068 splice @{$thisparser->{errors}}, $err_at;
  713         1353  
8473 713 50       1944 $return = $item[$#item] unless defined $return;
8474 713 50       1620 if (defined $::RD_TRACE)
8475             {
8476 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
8477             $return . q{])}, "",
8478             q{STRING},
8479             $tracelevel);
8480 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
8481             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
8482             Parse::RecDescent::_tracefirst($text),
8483             , q{STRING},
8484             $tracelevel)
8485             }
8486 713         1337 $_[1] = $text;
8487 713         4098 return $return;
8488             }
8489              
8490             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
8491             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelope
8492             {
8493 1     1   124 my $thisparser = $_[0];
8494 1     1   8 use vars q{$tracelevel};
  1         2  
  1         532  
8495 1   50     8 local $tracelevel = ($tracelevel||0)+1;
8496 1         2 $ERRORS = 0;
8497 1         4 my $thisrule = $thisparser->{"rules"}{"envelope"};
8498              
8499 1 50       4 Parse::RecDescent::_trace(q{Trying rule: [envelope]},
8500             Parse::RecDescent::_tracefirst($_[1]),
8501             q{envelope},
8502             $tracelevel)
8503             if defined $::RD_TRACE;
8504              
8505 1         2 my $def_at = @{$thisparser->{deferred}};
  1         3  
8506 1         2 my $err_at = @{$thisparser->{errors}};
  1         4  
8507              
8508 1         5 my $score;
8509             my $score_return;
8510 1         0 my $_tok;
8511 1         2 my $return = undef;
8512 1         2 my $_matched=0;
8513 1         2 my $commit=0;
8514 1         3 my @item = ();
8515 1         3 my %item = ();
8516 1         2 my $repeating = $_[2];
8517 1         3 my $_noactions = $_[3];
8518 1 50       5 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  1         2  
  1         5  
8519 1         6 my $_itempos = $_[5];
8520 1 50       5 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8521 1         5 my $text;
8522             my $lastsep;
8523 1         0 my $current_match;
8524 1         4 my $expectation = new Parse::RecDescent::Expectation(q{/.*?\\(.*?ENVELOPE/});
8525 1         11 $expectation->at($_[1]);
8526            
8527 1         4 my $thisline;
8528 1         6 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8529              
8530            
8531              
8532 1   33     13 while (!$_matched && !$commit)
8533             {
8534            
8535 1 50       4 Parse::RecDescent::_trace(q{Trying production: [/.*?\\(.*?ENVELOPE/ envelopestruct /.*\\)/]},
8536             Parse::RecDescent::_tracefirst($_[1]),
8537             q{envelope},
8538             $tracelevel)
8539             if defined $::RD_TRACE;
8540 1         4 my $thisprod = $thisrule->{"prods"}[0];
8541 1         3 $text = $_[1];
8542 1         3 my $_savetext;
8543 1         4 @item = (q{envelope});
8544 1         3 %item = (__RULE__ => q{envelope});
8545 1         3 my $repcount = 0;
8546              
8547              
8548 1 50       5 Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?ENVELOPE/]}, Parse::RecDescent::_tracefirst($text),
8549             q{envelope},
8550             $tracelevel)
8551             if defined $::RD_TRACE;
8552 1         2 undef $lastsep;
8553 1         3 $expectation->is(q{})->at($text);
8554            
8555              
8556 1 50 33     42 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*?\(.*?ENVELOPE)/)
  1 50       17  
8557             {
8558 0 0       0 $text = $lastsep . $text if defined $lastsep;
8559 0         0 $expectation->failed();
8560 0 0       0 Parse::RecDescent::_trace(q{<>},
8561             Parse::RecDescent::_tracefirst($text))
8562             if defined $::RD_TRACE;
8563              
8564 0         0 last;
8565             }
8566 1         8 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8567 1         5 substr($text,0,length($current_match),q{});
8568 1 50       4 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8569             . $current_match . q{])},
8570             Parse::RecDescent::_tracefirst($text))
8571             if defined $::RD_TRACE;
8572 1         4 push @item, $item{__PATTERN1__}=$current_match;
8573            
8574              
8575 1 50       5 Parse::RecDescent::_trace(q{Trying subrule: [envelopestruct]},
8576             Parse::RecDescent::_tracefirst($text),
8577             q{envelope},
8578             $tracelevel)
8579             if defined $::RD_TRACE;
8580 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         734  
  1         1  
8581 1         5 $expectation->is(q{envelopestruct})->at($text);
8582 1 50   1   16 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  1         5  
8583             {
8584            
8585 0 0       0 Parse::RecDescent::_trace(q{<>},
8586             Parse::RecDescent::_tracefirst($text),
8587             q{envelope},
8588             $tracelevel)
8589             if defined $::RD_TRACE;
8590 0         0 $expectation->failed();
8591 0         0 last;
8592             }
8593 1 50       9 Parse::RecDescent::_trace(q{>>Matched subrule: [envelopestruct]<< (return value: [}
8594             . $_tok . q{]},
8595              
8596             Parse::RecDescent::_tracefirst($text),
8597             q{envelope},
8598             $tracelevel)
8599             if defined $::RD_TRACE;
8600 1         3 $item{q{envelopestruct}} = $_tok;
8601 1         5 push @item, $_tok;
8602            
8603             }
8604              
8605 1 50       4 Parse::RecDescent::_trace(q{Trying terminal: [/.*\\)/]}, Parse::RecDescent::_tracefirst($text),
8606             q{envelope},
8607             $tracelevel)
8608             if defined $::RD_TRACE;
8609 1         3 undef $lastsep;
8610 1         4 $expectation->is(q{/.*\\)/})->at($text);
8611            
8612              
8613 1 50 33     42 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*\))/)
  1 50       57  
8614             {
8615 0 0       0 $text = $lastsep . $text if defined $lastsep;
8616 0         0 $expectation->failed();
8617 0 0       0 Parse::RecDescent::_trace(q{<>},
8618             Parse::RecDescent::_tracefirst($text))
8619             if defined $::RD_TRACE;
8620              
8621 0         0 last;
8622             }
8623 1         9 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8624 1         5 substr($text,0,length($current_match),q{});
8625 1 50       5 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8626             . $current_match . q{])},
8627             Parse::RecDescent::_tracefirst($text))
8628             if defined $::RD_TRACE;
8629 1         5 push @item, $item{__PATTERN2__}=$current_match;
8630            
8631              
8632 1 50       4 Parse::RecDescent::_trace(q{Trying action},
8633             Parse::RecDescent::_tracefirst($text),
8634             q{envelope},
8635             $tracelevel)
8636             if defined $::RD_TRACE;
8637            
8638              
8639 1 50       5 $_tok = ($_noactions) ? 0 : do { $return = $item{envelopestruct} };
  1         3  
8640 1 50       5 unless (defined $_tok)
8641             {
8642 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
8643             if defined $::RD_TRACE;
8644 0         0 last;
8645             }
8646 1 50       4 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
8647             . $_tok . q{])},
8648             Parse::RecDescent::_tracefirst($text))
8649             if defined $::RD_TRACE;
8650 1         3 push @item, $_tok;
8651 1         4 $item{__ACTION1__}=$_tok;
8652            
8653              
8654 1 50       4 Parse::RecDescent::_trace(q{>>Matched production: [/.*?\\(.*?ENVELOPE/ envelopestruct /.*\\)/]<<},
8655             Parse::RecDescent::_tracefirst($text),
8656             q{envelope},
8657             $tracelevel)
8658             if defined $::RD_TRACE;
8659              
8660              
8661              
8662 1         3 $_matched = 1;
8663 1         4 last;
8664             }
8665              
8666             splice
8667 1 50       6 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
8668            
8669 1 50 33     5 unless ( $_matched || defined($score) )
8670             {
8671 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
8672            
8673              
8674 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
8675 0 0       0 Parse::RecDescent::_trace(q{<>},
8676             Parse::RecDescent::_tracefirst($_[1]),
8677             q{envelope},
8678             $tracelevel)
8679             if defined $::RD_TRACE;
8680 0         0 return undef;
8681             }
8682 1 50 33     6 if (!defined($return) && defined($score))
8683             {
8684 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
8685             q{envelope},
8686             $tracelevel)
8687             if defined $::RD_TRACE;
8688 0         0 $return = $score_return;
8689             }
8690 1         3 splice @{$thisparser->{errors}}, $err_at;
  1         3  
8691 1 50       4 $return = $item[$#item] unless defined $return;
8692 1 50       5 if (defined $::RD_TRACE)
8693             {
8694 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
8695             $return . q{])}, "",
8696             q{envelope},
8697             $tracelevel);
8698 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
8699             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
8700             Parse::RecDescent::_tracefirst($text),
8701             , q{envelope},
8702             $tracelevel)
8703             }
8704 1         4 $_[1] = $text;
8705 1         13 return $return;
8706             }
8707              
8708             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
8709             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::to
8710             {
8711 24     24   63 my $thisparser = $_[0];
8712 1     1   8 use vars q{$tracelevel};
  1         2  
  1         419  
8713 24   50     88 local $tracelevel = ($tracelevel||0)+1;
8714 24         53 $ERRORS = 0;
8715 24         82 my $thisrule = $thisparser->{"rules"}{"to"};
8716              
8717 24 50       63 Parse::RecDescent::_trace(q{Trying rule: [to]},
8718             Parse::RecDescent::_tracefirst($_[1]),
8719             q{to},
8720             $tracelevel)
8721             if defined $::RD_TRACE;
8722              
8723 24         60 my $def_at = @{$thisparser->{deferred}};
  24         64  
8724 24         60 my $err_at = @{$thisparser->{errors}};
  24         58  
8725              
8726 24         103 my $score;
8727             my $score_return;
8728 24         0 my $_tok;
8729 24         47 my $return = undef;
8730 24         41 my $_matched=0;
8731 24         57 my $commit=0;
8732 24         57 my @item = ();
8733 24         58 my %item = ();
8734 24         43 my $repeating = $_[2];
8735 24         60 my $_noactions = $_[3];
8736 24 50       76 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         42  
  24         76  
8737 24         53 my $_itempos = $_[5];
8738 24 50       91 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8739 24         77 my $text;
8740             my $lastsep;
8741 24         0 my $current_match;
8742 24         87 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
8743 24         175 $expectation->at($_[1]);
8744            
8745 24         109 my $thisline;
8746 24         97 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8747              
8748            
8749              
8750 24   33     240 while (!$_matched && !$commit)
8751             {
8752            
8753 24 50       97 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
8754             Parse::RecDescent::_tracefirst($_[1]),
8755             q{to},
8756             $tracelevel)
8757             if defined $::RD_TRACE;
8758 24         89 my $thisprod = $thisrule->{"prods"}[0];
8759 24         55 $text = $_[1];
8760 24         39 my $_savetext;
8761 24         75 @item = (q{to});
8762 24         65 %item = (__RULE__ => q{to});
8763 24         46 my $repcount = 0;
8764              
8765              
8766 24 50       78 Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]},
8767             Parse::RecDescent::_tracefirst($text),
8768             q{to},
8769             $tracelevel)
8770             if defined $::RD_TRACE;
8771 1     1   8 if (1) { no strict qw{refs};
  1         10  
  1         446  
  24         41  
8772 24         100 $expectation->is(q{})->at($text);
8773 24 50   24   275 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         58  
8774             {
8775            
8776 0 0       0 Parse::RecDescent::_trace(q{<>},
8777             Parse::RecDescent::_tracefirst($text),
8778             q{to},
8779             $tracelevel)
8780             if defined $::RD_TRACE;
8781 0         0 $expectation->failed();
8782 0         0 last;
8783             }
8784 24 50       105 Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [}
8785             . $_tok . q{]},
8786              
8787             Parse::RecDescent::_tracefirst($text),
8788             q{to},
8789             $tracelevel)
8790             if defined $::RD_TRACE;
8791 24         71 $item{q{ADDRESSES}} = $_tok;
8792 24         70 push @item, $_tok;
8793            
8794             }
8795              
8796 24 50       85 Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<},
8797             Parse::RecDescent::_tracefirst($text),
8798             q{to},
8799             $tracelevel)
8800             if defined $::RD_TRACE;
8801              
8802              
8803              
8804 24         55 $_matched = 1;
8805 24         47 last;
8806             }
8807              
8808             splice
8809 24 50       87 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
8810            
8811 24 50 33     132 unless ( $_matched || defined($score) )
8812             {
8813 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
8814            
8815              
8816 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
8817 0 0       0 Parse::RecDescent::_trace(q{<>},
8818             Parse::RecDescent::_tracefirst($_[1]),
8819             q{to},
8820             $tracelevel)
8821             if defined $::RD_TRACE;
8822 0         0 return undef;
8823             }
8824 24 50 33     142 if (!defined($return) && defined($score))
8825             {
8826 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
8827             q{to},
8828             $tracelevel)
8829             if defined $::RD_TRACE;
8830 0         0 $return = $score_return;
8831             }
8832 24         55 splice @{$thisparser->{errors}}, $err_at;
  24         70  
8833 24 50       91 $return = $item[$#item] unless defined $return;
8834 24 50       74 if (defined $::RD_TRACE)
8835             {
8836 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
8837             $return . q{])}, "",
8838             q{to},
8839             $tracelevel);
8840 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
8841             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
8842             Parse::RecDescent::_tracefirst($text),
8843             , q{to},
8844             $tracelevel)
8845             }
8846 24         66 $_[1] = $text;
8847 24         173 return $return;
8848             }
8849              
8850             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
8851             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines
8852             {
8853 60     60   1090 my $thisparser = $_[0];
8854 1     1   8 use vars q{$tracelevel};
  1         2  
  1         327  
8855 60   50     207 local $tracelevel = ($tracelevel||0)+1;
8856 60         113 $ERRORS = 0;
8857 60         182 my $thisrule = $thisparser->{"rules"}{"textlines"};
8858              
8859 60 50       207 Parse::RecDescent::_trace(q{Trying rule: [textlines]},
8860             Parse::RecDescent::_tracefirst($_[1]),
8861             q{textlines},
8862             $tracelevel)
8863             if defined $::RD_TRACE;
8864              
8865 60         111 my $def_at = @{$thisparser->{deferred}};
  60         144  
8866 60         106 my $err_at = @{$thisparser->{errors}};
  60         167  
8867              
8868 60         183 my $score;
8869             my $score_return;
8870 60         0 my $_tok;
8871 60         172 my $return = undef;
8872 60         130 my $_matched=0;
8873 60         110 my $commit=0;
8874 60         153 my @item = ();
8875 60         124 my %item = ();
8876 60         127 my $repeating = $_[2];
8877 60         106 my $_noactions = $_[3];
8878 60 50       166 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  60         95  
  60         144  
8879 60         134 my $_itempos = $_[5];
8880 60 50       213 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8881 60         156 my $text;
8882             my $lastsep;
8883 60         0 my $current_match;
8884 60         191 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or NUMBER});
8885 60         431 $expectation->at($_[1]);
8886            
8887 60         276 my $thisline;
8888 60         239 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8889              
8890            
8891              
8892 60   33     580 while (!$_matched && !$commit)
8893             {
8894            
8895 60 50       174 Parse::RecDescent::_trace(q{Trying production: [NIL]},
8896             Parse::RecDescent::_tracefirst($_[1]),
8897             q{textlines},
8898             $tracelevel)
8899             if defined $::RD_TRACE;
8900 60         212 my $thisprod = $thisrule->{"prods"}[0];
8901 60         156 $text = $_[1];
8902 60         115 my $_savetext;
8903 60         143 @item = (q{textlines});
8904 60         162 %item = (__RULE__ => q{textlines});
8905 60         123 my $repcount = 0;
8906              
8907              
8908 60 50       191 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
8909             Parse::RecDescent::_tracefirst($text),
8910             q{textlines},
8911             $tracelevel)
8912             if defined $::RD_TRACE;
8913 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         320  
  60         113  
8914 60         193 $expectation->is(q{})->at($text);
8915 60 50   60   681 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  60         164  
8916             {
8917            
8918 60 50       207 Parse::RecDescent::_trace(q{<>},
8919             Parse::RecDescent::_tracefirst($text),
8920             q{textlines},
8921             $tracelevel)
8922             if defined $::RD_TRACE;
8923 60         224 $expectation->failed();
8924 60         233 last;
8925             }
8926 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
8927             . $_tok . q{]},
8928              
8929             Parse::RecDescent::_tracefirst($text),
8930             q{textlines},
8931             $tracelevel)
8932             if defined $::RD_TRACE;
8933 0         0 $item{q{NIL}} = $_tok;
8934 0         0 push @item, $_tok;
8935            
8936             }
8937              
8938 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
8939             Parse::RecDescent::_tracefirst($text),
8940             q{textlines},
8941             $tracelevel)
8942             if defined $::RD_TRACE;
8943              
8944              
8945              
8946 0         0 $_matched = 1;
8947 0         0 last;
8948             }
8949              
8950             splice
8951 60 50       245 @{$thisparser->{deferred}}, $def_at unless $_matched;
  60         199  
8952            
8953 60   33     316 while (!$_matched && !$commit)
8954             {
8955            
8956 60 50       164 Parse::RecDescent::_trace(q{Trying production: [NUMBER]},
8957             Parse::RecDescent::_tracefirst($_[1]),
8958             q{textlines},
8959             $tracelevel)
8960             if defined $::RD_TRACE;
8961 60         159 my $thisprod = $thisrule->{"prods"}[1];
8962 60         138 $text = $_[1];
8963 60         126 my $_savetext;
8964 60         182 @item = (q{textlines});
8965 60         197 %item = (__RULE__ => q{textlines});
8966 60         121 my $repcount = 0;
8967              
8968              
8969 60 50       158 Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]},
8970             Parse::RecDescent::_tracefirst($text),
8971             q{textlines},
8972             $tracelevel)
8973             if defined $::RD_TRACE;
8974 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         435  
  60         113  
8975 60         211 $expectation->is(q{})->at($text);
8976 60 100   60   737 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  60         150  
8977             {
8978            
8979 2 50       8 Parse::RecDescent::_trace(q{<>},
8980             Parse::RecDescent::_tracefirst($text),
8981             q{textlines},
8982             $tracelevel)
8983             if defined $::RD_TRACE;
8984 2         8 $expectation->failed();
8985 2         7 last;
8986             }
8987 58 50       262 Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [}
8988             . $_tok . q{]},
8989              
8990             Parse::RecDescent::_tracefirst($text),
8991             q{textlines},
8992             $tracelevel)
8993             if defined $::RD_TRACE;
8994 58         158 $item{q{NUMBER}} = $_tok;
8995 58         144 push @item, $_tok;
8996            
8997             }
8998              
8999 58 50       190 Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<},
9000             Parse::RecDescent::_tracefirst($text),
9001             q{textlines},
9002             $tracelevel)
9003             if defined $::RD_TRACE;
9004              
9005              
9006              
9007 58         122 $_matched = 1;
9008 58         119 last;
9009             }
9010              
9011             splice
9012 60 100       166 @{$thisparser->{deferred}}, $def_at unless $_matched;
  2         5  
9013            
9014 60 100 66     240 unless ( $_matched || defined($score) )
9015             {
9016 2         4 splice @{$thisparser->{deferred}}, $def_at;
  2         6  
9017            
9018              
9019 2         3 $_[1] = $text; # NOT SURE THIS IS NEEDED
9020 2 50       7 Parse::RecDescent::_trace(q{<>},
9021             Parse::RecDescent::_tracefirst($_[1]),
9022             q{textlines},
9023             $tracelevel)
9024             if defined $::RD_TRACE;
9025 2         10 return undef;
9026             }
9027 58 50 33     380 if (!defined($return) && defined($score))
9028             {
9029 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9030             q{textlines},
9031             $tracelevel)
9032             if defined $::RD_TRACE;
9033 0         0 $return = $score_return;
9034             }
9035 58         149 splice @{$thisparser->{errors}}, $err_at;
  58         159  
9036 58 50       213 $return = $item[$#item] unless defined $return;
9037 58 50       192 if (defined $::RD_TRACE)
9038             {
9039 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9040             $return . q{])}, "",
9041             q{textlines},
9042             $tracelevel);
9043 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9044             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9045             Parse::RecDescent::_tracefirst($text),
9046             , q{textlines},
9047             $tracelevel)
9048             }
9049 58         140 $_[1] = $text;
9050 58         348 return $return;
9051             }
9052              
9053             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9054             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::nestedmessage
9055             {
9056 53     53   119 my $thisparser = $_[0];
9057 1     1   8 use vars q{$tracelevel};
  1         2  
  1         345  
9058 53   50     197 local $tracelevel = ($tracelevel||0)+1;
9059 53         107 $ERRORS = 0;
9060 53         200 my $thisrule = $thisparser->{"rules"}{"nestedmessage"};
9061              
9062 53 50       164 Parse::RecDescent::_trace(q{Trying rule: [nestedmessage]},
9063             Parse::RecDescent::_tracefirst($_[1]),
9064             q{nestedmessage},
9065             $tracelevel)
9066             if defined $::RD_TRACE;
9067              
9068 53         88 my $def_at = @{$thisparser->{deferred}};
  53         137  
9069 53         115 my $err_at = @{$thisparser->{errors}};
  53         194  
9070              
9071 53         195 my $score;
9072             my $score_return;
9073 53         0 my $_tok;
9074 53         94 my $return = undef;
9075 53         97 my $_matched=0;
9076 53         87 my $commit=0;
9077 53         114 my @item = ();
9078 53         116 my %item = ();
9079 53         107 my $repeating = $_[2];
9080 53         94 my $_noactions = $_[3];
9081 53 50       146 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  53         101  
  53         144  
9082 53         120 my $_itempos = $_[5];
9083 53 50       161 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9084 53         159 my $text;
9085             my $lastsep;
9086 53         0 my $current_match;
9087 53         194 my $expectation = new Parse::RecDescent::Expectation(q{rfc822message});
9088 53         400 $expectation->at($_[1]);
9089            
9090 53         218 my $thisline;
9091 53         226 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9092              
9093            
9094              
9095 53   33     545 while (!$_matched && !$commit)
9096             {
9097            
9098 53 50       151 Parse::RecDescent::_trace(q{Trying production: [rfc822message bodyparms bodyid bodydesc bodyenc bodysize envelopestruct bodystructure textlines bodyMD5 bodydisp bodylang bodyextra]},
9099             Parse::RecDescent::_tracefirst($_[1]),
9100             q{nestedmessage},
9101             $tracelevel)
9102             if defined $::RD_TRACE;
9103 53         218 my $thisprod = $thisrule->{"prods"}[0];
9104 53         120 $text = $_[1];
9105 53         100 my $_savetext;
9106 53         135 @item = (q{nestedmessage});
9107 53         159 %item = (__RULE__ => q{nestedmessage});
9108 53         113 my $repcount = 0;
9109              
9110              
9111 53 50       173 Parse::RecDescent::_trace(q{Trying subrule: [rfc822message]},
9112             Parse::RecDescent::_tracefirst($text),
9113             q{nestedmessage},
9114             $tracelevel)
9115             if defined $::RD_TRACE;
9116 1     1   7 if (1) { no strict qw{refs};
  1         5  
  1         261  
  53         101  
9117 53         144 $expectation->is(q{})->at($text);
9118 53 100   53   660 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::rfc822message($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  53         142  
9119             {
9120            
9121 32 50       104 Parse::RecDescent::_trace(q{<>},
9122             Parse::RecDescent::_tracefirst($text),
9123             q{nestedmessage},
9124             $tracelevel)
9125             if defined $::RD_TRACE;
9126 32         130 $expectation->failed();
9127 32         117 last;
9128             }
9129 21 50       85 Parse::RecDescent::_trace(q{>>Matched subrule: [rfc822message]<< (return value: [}
9130             . $_tok . q{]},
9131              
9132             Parse::RecDescent::_tracefirst($text),
9133             q{nestedmessage},
9134             $tracelevel)
9135             if defined $::RD_TRACE;
9136 21         61 $item{q{rfc822message}} = $_tok;
9137 21         47 push @item, $_tok;
9138            
9139             }
9140              
9141            
9142              
9143 21 50       65 Parse::RecDescent::_trace(q{Trying directive: []},
9144             Parse::RecDescent::_tracefirst($text),
9145             q{nestedmessage},
9146             $tracelevel)
9147             if defined $::RD_TRACE;
9148 21         41 $_tok = do { $commit = 1 };
  21         52  
9149 21 50       77 if (defined($_tok))
9150             {
9151 21 50       63 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
9152             . $_tok . q{])},
9153             Parse::RecDescent::_tracefirst($text))
9154             if defined $::RD_TRACE;
9155             }
9156             else
9157             {
9158 0 0       0 Parse::RecDescent::_trace(q{<>},
9159             Parse::RecDescent::_tracefirst($text))
9160             if defined $::RD_TRACE;
9161             }
9162            
9163 21 50       60 last unless defined $_tok;
9164 21         72 push @item, $item{__DIRECTIVE1__}=$_tok;
9165            
9166              
9167 21 50       72 Parse::RecDescent::_trace(q{Trying subrule: [bodyparms]},
9168             Parse::RecDescent::_tracefirst($text),
9169             q{nestedmessage},
9170             $tracelevel)
9171             if defined $::RD_TRACE;
9172 1     1   9 if (1) { no strict qw{refs};
  1         2  
  1         152  
  21         35  
9173 21         87 $expectation->is(q{bodyparms})->at($text);
9174 21 50   21   285 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         64  
9175             {
9176            
9177 0 0       0 Parse::RecDescent::_trace(q{<>},
9178             Parse::RecDescent::_tracefirst($text),
9179             q{nestedmessage},
9180             $tracelevel)
9181             if defined $::RD_TRACE;
9182 0         0 $expectation->failed();
9183 0         0 last;
9184             }
9185 21 50       82 Parse::RecDescent::_trace(q{>>Matched subrule: [bodyparms]<< (return value: [}
9186             . $_tok . q{]},
9187              
9188             Parse::RecDescent::_tracefirst($text),
9189             q{nestedmessage},
9190             $tracelevel)
9191             if defined $::RD_TRACE;
9192 21         65 $item{q{bodyparms}} = $_tok;
9193 21         47 push @item, $_tok;
9194            
9195             }
9196              
9197 21 50       69 Parse::RecDescent::_trace(q{Trying subrule: [bodyid]},
9198             Parse::RecDescent::_tracefirst($text),
9199             q{nestedmessage},
9200             $tracelevel)
9201             if defined $::RD_TRACE;
9202 1     1   16 if (1) { no strict qw{refs};
  1         3  
  1         189  
  21         42  
9203 21         81 $expectation->is(q{bodyid})->at($text);
9204 21 50   21   317 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         54  
9205             {
9206            
9207 0 0       0 Parse::RecDescent::_trace(q{<>},
9208             Parse::RecDescent::_tracefirst($text),
9209             q{nestedmessage},
9210             $tracelevel)
9211             if defined $::RD_TRACE;
9212 0         0 $expectation->failed();
9213 0         0 last;
9214             }
9215 21 50       88 Parse::RecDescent::_trace(q{>>Matched subrule: [bodyid]<< (return value: [}
9216             . $_tok . q{]},
9217              
9218             Parse::RecDescent::_tracefirst($text),
9219             q{nestedmessage},
9220             $tracelevel)
9221             if defined $::RD_TRACE;
9222 21         62 $item{q{bodyid}} = $_tok;
9223 21         64 push @item, $_tok;
9224            
9225             }
9226              
9227 21 50       71 Parse::RecDescent::_trace(q{Trying subrule: [bodydesc]},
9228             Parse::RecDescent::_tracefirst($text),
9229             q{nestedmessage},
9230             $tracelevel)
9231             if defined $::RD_TRACE;
9232 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         146  
  21         40  
9233 21         84 $expectation->is(q{bodydesc})->at($text);
9234 21 50   21   284 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         86  
9235             {
9236            
9237 0 0       0 Parse::RecDescent::_trace(q{<>},
9238             Parse::RecDescent::_tracefirst($text),
9239             q{nestedmessage},
9240             $tracelevel)
9241             if defined $::RD_TRACE;
9242 0         0 $expectation->failed();
9243 0         0 last;
9244             }
9245 21 50       92 Parse::RecDescent::_trace(q{>>Matched subrule: [bodydesc]<< (return value: [}
9246             . $_tok . q{]},
9247              
9248             Parse::RecDescent::_tracefirst($text),
9249             q{nestedmessage},
9250             $tracelevel)
9251             if defined $::RD_TRACE;
9252 21         65 $item{q{bodydesc}} = $_tok;
9253 21         53 push @item, $_tok;
9254            
9255             }
9256              
9257 21 50       66 Parse::RecDescent::_trace(q{Trying subrule: [bodyenc]},
9258             Parse::RecDescent::_tracefirst($text),
9259             q{nestedmessage},
9260             $tracelevel)
9261             if defined $::RD_TRACE;
9262 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         187  
  21         49  
9263 21         86 $expectation->is(q{bodyenc})->at($text);
9264 21 50   21   276 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         57  
9265             {
9266            
9267 0 0       0 Parse::RecDescent::_trace(q{<>},
9268             Parse::RecDescent::_tracefirst($text),
9269             q{nestedmessage},
9270             $tracelevel)
9271             if defined $::RD_TRACE;
9272 0         0 $expectation->failed();
9273 0         0 last;
9274             }
9275 21 50       90 Parse::RecDescent::_trace(q{>>Matched subrule: [bodyenc]<< (return value: [}
9276             . $_tok . q{]},
9277              
9278             Parse::RecDescent::_tracefirst($text),
9279             q{nestedmessage},
9280             $tracelevel)
9281             if defined $::RD_TRACE;
9282 21         66 $item{q{bodyenc}} = $_tok;
9283 21         67 push @item, $_tok;
9284            
9285             }
9286              
9287 21 50       87 Parse::RecDescent::_trace(q{Trying subrule: [bodysize]},
9288             Parse::RecDescent::_tracefirst($text),
9289             q{nestedmessage},
9290             $tracelevel)
9291             if defined $::RD_TRACE;
9292 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         1576  
  21         41  
9293 21         133 $expectation->is(q{bodysize})->at($text);
9294 21 50   21   301 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         56  
9295             {
9296            
9297 0 0       0 Parse::RecDescent::_trace(q{<>},
9298             Parse::RecDescent::_tracefirst($text),
9299             q{nestedmessage},
9300             $tracelevel)
9301             if defined $::RD_TRACE;
9302 0         0 $expectation->failed();
9303 0         0 last;
9304             }
9305 21 50       93 Parse::RecDescent::_trace(q{>>Matched subrule: [bodysize]<< (return value: [}
9306             . $_tok . q{]},
9307              
9308             Parse::RecDescent::_tracefirst($text),
9309             q{nestedmessage},
9310             $tracelevel)
9311             if defined $::RD_TRACE;
9312 21         66 $item{q{bodysize}} = $_tok;
9313 21         59 push @item, $_tok;
9314            
9315             }
9316              
9317 21 50       75 Parse::RecDescent::_trace(q{Trying repeated subrule: [envelopestruct]},
9318             Parse::RecDescent::_tracefirst($text),
9319             q{nestedmessage},
9320             $tracelevel)
9321             if defined $::RD_TRACE;
9322 21         86 $expectation->is(q{envelopestruct})->at($text);
9323            
9324 21 50   21   298 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         60  
9325             {
9326 0 0       0 Parse::RecDescent::_trace(q{<>},
9327             Parse::RecDescent::_tracefirst($text),
9328             q{nestedmessage},
9329             $tracelevel)
9330             if defined $::RD_TRACE;
9331 0         0 last;
9332             }
9333 21 50       499 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [envelopestruct]<< (}
9334             . @$_tok . q{ times)},
9335              
9336             Parse::RecDescent::_tracefirst($text),
9337             q{nestedmessage},
9338             $tracelevel)
9339             if defined $::RD_TRACE;
9340 21         72 $item{q{envelopestruct(?)}} = $_tok;
9341 21         61 push @item, $_tok;
9342            
9343              
9344              
9345 21 50       87 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodystructure]},
9346             Parse::RecDescent::_tracefirst($text),
9347             q{nestedmessage},
9348             $tracelevel)
9349             if defined $::RD_TRACE;
9350 21         102 $expectation->is(q{bodystructure})->at($text);
9351            
9352 21 50   21   321 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodystructure, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         44  
9353             {
9354 0 0       0 Parse::RecDescent::_trace(q{<>},
9355             Parse::RecDescent::_tracefirst($text),
9356             q{nestedmessage},
9357             $tracelevel)
9358             if defined $::RD_TRACE;
9359 0         0 last;
9360             }
9361 21 50       465 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodystructure]<< (}
9362             . @$_tok . q{ times)},
9363              
9364             Parse::RecDescent::_tracefirst($text),
9365             q{nestedmessage},
9366             $tracelevel)
9367             if defined $::RD_TRACE;
9368 21         74 $item{q{bodystructure(?)}} = $_tok;
9369 21         56 push @item, $_tok;
9370            
9371              
9372              
9373 21 50       59 Parse::RecDescent::_trace(q{Trying repeated subrule: [textlines]},
9374             Parse::RecDescent::_tracefirst($text),
9375             q{nestedmessage},
9376             $tracelevel)
9377             if defined $::RD_TRACE;
9378 21         83 $expectation->is(q{textlines})->at($text);
9379            
9380 21 50   21   309 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         54  
9381             {
9382 0 0       0 Parse::RecDescent::_trace(q{<>},
9383             Parse::RecDescent::_tracefirst($text),
9384             q{nestedmessage},
9385             $tracelevel)
9386             if defined $::RD_TRACE;
9387 0         0 last;
9388             }
9389 21 50       439 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [textlines]<< (}
9390             . @$_tok . q{ times)},
9391              
9392             Parse::RecDescent::_tracefirst($text),
9393             q{nestedmessage},
9394             $tracelevel)
9395             if defined $::RD_TRACE;
9396 21         55 $item{q{textlines(?)}} = $_tok;
9397 21         56 push @item, $_tok;
9398            
9399              
9400              
9401 21 50       62 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]},
9402             Parse::RecDescent::_tracefirst($text),
9403             q{nestedmessage},
9404             $tracelevel)
9405             if defined $::RD_TRACE;
9406 21         78 $expectation->is(q{bodyMD5})->at($text);
9407            
9408 21 50   21   300 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         71  
9409             {
9410 0 0       0 Parse::RecDescent::_trace(q{<>},
9411             Parse::RecDescent::_tracefirst($text),
9412             q{nestedmessage},
9413             $tracelevel)
9414             if defined $::RD_TRACE;
9415 0         0 last;
9416             }
9417 21 50       383 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (}
9418             . @$_tok . q{ times)},
9419              
9420             Parse::RecDescent::_tracefirst($text),
9421             q{nestedmessage},
9422             $tracelevel)
9423             if defined $::RD_TRACE;
9424 21         59 $item{q{bodyMD5(?)}} = $_tok;
9425 21         52 push @item, $_tok;
9426            
9427              
9428              
9429 21 50       74 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]},
9430             Parse::RecDescent::_tracefirst($text),
9431             q{nestedmessage},
9432             $tracelevel)
9433             if defined $::RD_TRACE;
9434 21         72 $expectation->is(q{bodydisp})->at($text);
9435            
9436 21 50   21   269 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         60  
9437             {
9438 0 0       0 Parse::RecDescent::_trace(q{<>},
9439             Parse::RecDescent::_tracefirst($text),
9440             q{nestedmessage},
9441             $tracelevel)
9442             if defined $::RD_TRACE;
9443 0         0 last;
9444             }
9445 21 50       393 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (}
9446             . @$_tok . q{ times)},
9447              
9448             Parse::RecDescent::_tracefirst($text),
9449             q{nestedmessage},
9450             $tracelevel)
9451             if defined $::RD_TRACE;
9452 21         63 $item{q{bodydisp(?)}} = $_tok;
9453 21         53 push @item, $_tok;
9454            
9455              
9456              
9457 21 50       64 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]},
9458             Parse::RecDescent::_tracefirst($text),
9459             q{nestedmessage},
9460             $tracelevel)
9461             if defined $::RD_TRACE;
9462 21         70 $expectation->is(q{bodylang})->at($text);
9463            
9464 21 50   21   285 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         65  
9465             {
9466 0 0       0 Parse::RecDescent::_trace(q{<>},
9467             Parse::RecDescent::_tracefirst($text),
9468             q{nestedmessage},
9469             $tracelevel)
9470             if defined $::RD_TRACE;
9471 0         0 last;
9472             }
9473 21 50       397 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (}
9474             . @$_tok . q{ times)},
9475              
9476             Parse::RecDescent::_tracefirst($text),
9477             q{nestedmessage},
9478             $tracelevel)
9479             if defined $::RD_TRACE;
9480 21         71 $item{q{bodylang(?)}} = $_tok;
9481 21         57 push @item, $_tok;
9482            
9483              
9484              
9485 21 50       73 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]},
9486             Parse::RecDescent::_tracefirst($text),
9487             q{nestedmessage},
9488             $tracelevel)
9489             if defined $::RD_TRACE;
9490 21         67 $expectation->is(q{bodyextra})->at($text);
9491            
9492 21 50   21   283 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         53  
9493             {
9494 0 0       0 Parse::RecDescent::_trace(q{<>},
9495             Parse::RecDescent::_tracefirst($text),
9496             q{nestedmessage},
9497             $tracelevel)
9498             if defined $::RD_TRACE;
9499 0         0 last;
9500             }
9501 21 50       378 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (}
9502             . @$_tok . q{ times)},
9503              
9504             Parse::RecDescent::_tracefirst($text),
9505             q{nestedmessage},
9506             $tracelevel)
9507             if defined $::RD_TRACE;
9508 21         64 $item{q{bodyextra(?)}} = $_tok;
9509 21         52 push @item, $_tok;
9510            
9511              
9512              
9513 21 50       89 Parse::RecDescent::_trace(q{Trying action},
9514             Parse::RecDescent::_tracefirst($text),
9515             q{nestedmessage},
9516             $tracelevel)
9517             if defined $::RD_TRACE;
9518            
9519              
9520 21 50       61 $_tok = ($_noactions) ? 0 : do {
9521 21         45 $return = {};
9522             $return->{$_} = $item{$_}
9523 21         262 for qw/bodyparms bodyid bodydesc bodyenc bodysize/;
9524             # envelopestruct bodystructure textlines/;
9525              
9526 21         113 take_optional_items($return, \%item
9527             , qw/envelopestruct bodystructure textlines/
9528             , qw/bodyMD5 bodydisp bodylang bodyextra/);
9529              
9530 21         147 merge_hash($return, $item{bodystructure}[0]);
9531 21         102 merge_hash($return, $item{basicfields});
9532 21         80 $return->{bodytype} = "MESSAGE" ;
9533 21         56 $return->{bodysubtype} = "RFC822" ;
9534 21         57 1;
9535             };
9536 21 50       75 unless (defined $_tok)
9537             {
9538 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
9539             if defined $::RD_TRACE;
9540 0         0 last;
9541             }
9542 21 50       63 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
9543             . $_tok . q{])},
9544             Parse::RecDescent::_tracefirst($text))
9545             if defined $::RD_TRACE;
9546 21         50 push @item, $_tok;
9547 21         48 $item{__ACTION1__}=$_tok;
9548            
9549              
9550 21 50       57 Parse::RecDescent::_trace(q{>>Matched production: [rfc822message bodyparms bodyid bodydesc bodyenc bodysize envelopestruct bodystructure textlines bodyMD5 bodydisp bodylang bodyextra]<<},
9551             Parse::RecDescent::_tracefirst($text),
9552             q{nestedmessage},
9553             $tracelevel)
9554             if defined $::RD_TRACE;
9555              
9556              
9557              
9558 21         41 $_matched = 1;
9559 21         44 last;
9560             }
9561              
9562             splice
9563 53 100       202 @{$thisparser->{deferred}}, $def_at unless $_matched;
  32         125  
9564            
9565 53 100 66     254 unless ( $_matched || defined($score) )
9566             {
9567 32         65 splice @{$thisparser->{deferred}}, $def_at;
  32         81  
9568            
9569              
9570 32         59 $_[1] = $text; # NOT SURE THIS IS NEEDED
9571 32 50       99 Parse::RecDescent::_trace(q{<>},
9572             Parse::RecDescent::_tracefirst($_[1]),
9573             q{nestedmessage},
9574             $tracelevel)
9575             if defined $::RD_TRACE;
9576 32         209 return undef;
9577             }
9578 21 50 33     81 if (!defined($return) && defined($score))
9579             {
9580 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9581             q{nestedmessage},
9582             $tracelevel)
9583             if defined $::RD_TRACE;
9584 0         0 $return = $score_return;
9585             }
9586 21         44 splice @{$thisparser->{errors}}, $err_at;
  21         67  
9587 21 50       79 $return = $item[$#item] unless defined $return;
9588 21 50       81 if (defined $::RD_TRACE)
9589             {
9590 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9591             $return . q{])}, "",
9592             q{nestedmessage},
9593             $tracelevel);
9594 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9595             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9596             Parse::RecDescent::_tracefirst($text),
9597             , q{nestedmessage},
9598             $tracelevel)
9599             }
9600 21         61 $_[1] = $text;
9601 21         310 return $return;
9602             }
9603              
9604             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9605             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sender
9606             {
9607 24     24   57 my $thisparser = $_[0];
9608 1     1   9 use vars q{$tracelevel};
  1         9  
  1         350  
9609 24   50     353 local $tracelevel = ($tracelevel||0)+1;
9610 24         57 $ERRORS = 0;
9611 24         99 my $thisrule = $thisparser->{"rules"}{"sender"};
9612              
9613 24 50       66 Parse::RecDescent::_trace(q{Trying rule: [sender]},
9614             Parse::RecDescent::_tracefirst($_[1]),
9615             q{sender},
9616             $tracelevel)
9617             if defined $::RD_TRACE;
9618              
9619 24         49 my $def_at = @{$thisparser->{deferred}};
  24         66  
9620 24         48 my $err_at = @{$thisparser->{errors}};
  24         59  
9621              
9622 24         81 my $score;
9623             my $score_return;
9624 24         0 my $_tok;
9625 24         46 my $return = undef;
9626 24         49 my $_matched=0;
9627 24         48 my $commit=0;
9628 24         68 my @item = ();
9629 24         50 my %item = ();
9630 24         61 my $repeating = $_[2];
9631 24         45 my $_noactions = $_[3];
9632 24 50       89 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         47  
  24         53  
9633 24         54 my $_itempos = $_[5];
9634 24 50       87 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9635 24         79 my $text;
9636             my $lastsep;
9637 24         0 my $current_match;
9638 24         81 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
9639 24         193 $expectation->at($_[1]);
9640            
9641 24         113 my $thisline;
9642 24         103 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9643              
9644            
9645              
9646 24   33     241 while (!$_matched && !$commit)
9647             {
9648            
9649 24 50       76 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
9650             Parse::RecDescent::_tracefirst($_[1]),
9651             q{sender},
9652             $tracelevel)
9653             if defined $::RD_TRACE;
9654 24         83 my $thisprod = $thisrule->{"prods"}[0];
9655 24         48 $text = $_[1];
9656 24         45 my $_savetext;
9657 24         60 @item = (q{sender});
9658 24         74 %item = (__RULE__ => q{sender});
9659 24         48 my $repcount = 0;
9660              
9661              
9662 24 50       79 Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]},
9663             Parse::RecDescent::_tracefirst($text),
9664             q{sender},
9665             $tracelevel)
9666             if defined $::RD_TRACE;
9667 1     1   8 if (1) { no strict qw{refs};
  1         4  
  1         431  
  24         47  
9668 24         70 $expectation->is(q{})->at($text);
9669 24 50   24   272 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         60  
9670             {
9671            
9672 0 0       0 Parse::RecDescent::_trace(q{<>},
9673             Parse::RecDescent::_tracefirst($text),
9674             q{sender},
9675             $tracelevel)
9676             if defined $::RD_TRACE;
9677 0         0 $expectation->failed();
9678 0         0 last;
9679             }
9680 24 50       137 Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [}
9681             . $_tok . q{]},
9682              
9683             Parse::RecDescent::_tracefirst($text),
9684             q{sender},
9685             $tracelevel)
9686             if defined $::RD_TRACE;
9687 24         77 $item{q{ADDRESSES}} = $_tok;
9688 24         67 push @item, $_tok;
9689            
9690             }
9691              
9692 24 50       74 Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<},
9693             Parse::RecDescent::_tracefirst($text),
9694             q{sender},
9695             $tracelevel)
9696             if defined $::RD_TRACE;
9697              
9698              
9699              
9700 24         45 $_matched = 1;
9701 24         59 last;
9702             }
9703              
9704             splice
9705 24 50       106 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
9706            
9707 24 50 33     84 unless ( $_matched || defined($score) )
9708             {
9709 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
9710            
9711              
9712 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
9713 0 0       0 Parse::RecDescent::_trace(q{<>},
9714             Parse::RecDescent::_tracefirst($_[1]),
9715             q{sender},
9716             $tracelevel)
9717             if defined $::RD_TRACE;
9718 0         0 return undef;
9719             }
9720 24 50 33     190 if (!defined($return) && defined($score))
9721             {
9722 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9723             q{sender},
9724             $tracelevel)
9725             if defined $::RD_TRACE;
9726 0         0 $return = $score_return;
9727             }
9728 24         55 splice @{$thisparser->{errors}}, $err_at;
  24         63  
9729 24 50       92 $return = $item[$#item] unless defined $return;
9730 24 50       80 if (defined $::RD_TRACE)
9731             {
9732 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9733             $return . q{])}, "",
9734             q{sender},
9735             $tracelevel);
9736 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9737             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9738             Parse::RecDescent::_tracefirst($text),
9739             , q{sender},
9740             $tracelevel)
9741             }
9742 24         62 $_[1] = $text;
9743 24         173 return $return;
9744             }
9745              
9746             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9747             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::SINGLE_QUOTED_STRING
9748             {
9749 112     112   231 my $thisparser = $_[0];
9750 1     1   8 use vars q{$tracelevel};
  1         2  
  1         1178  
9751 112   50     322 local $tracelevel = ($tracelevel||0)+1;
9752 112         207 $ERRORS = 0;
9753 112         275 my $thisrule = $thisparser->{"rules"}{"SINGLE_QUOTED_STRING"};
9754              
9755 112 50       391 Parse::RecDescent::_trace(q{Trying rule: [SINGLE_QUOTED_STRING]},
9756             Parse::RecDescent::_tracefirst($_[1]),
9757             q{SINGLE_QUOTED_STRING},
9758             $tracelevel)
9759             if defined $::RD_TRACE;
9760              
9761 112         184 my $def_at = @{$thisparser->{deferred}};
  112         239  
9762 112         202 my $err_at = @{$thisparser->{errors}};
  112         257  
9763              
9764 112         339 my $score;
9765             my $score_return;
9766 112         0 my $_tok;
9767 112         185 my $return = undef;
9768 112         246 my $_matched=0;
9769 112         199 my $commit=0;
9770 112         198 my @item = ();
9771 112         225 my %item = ();
9772 112         176 my $repeating = $_[2];
9773 112         185 my $_noactions = $_[3];
9774 112 50       270 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  112         184  
  112         224  
9775 112         195 my $_itempos = $_[5];
9776 112 50       302 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9777 112         321 my $text;
9778             my $lastsep;
9779 112         0 my $current_match;
9780 112         294 my $expectation = new Parse::RecDescent::Expectation(q{'''});
9781 112         765 $expectation->at($_[1]);
9782            
9783 112         505 my $thisline;
9784 112         393 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9785              
9786            
9787              
9788 112   33     904 while (!$_matched && !$commit)
9789             {
9790            
9791 112 50       272 Parse::RecDescent::_trace(q{Trying production: [''' /(?:\\\\['\\\\]|[^'])*/ ''']},
9792             Parse::RecDescent::_tracefirst($_[1]),
9793             q{SINGLE_QUOTED_STRING},
9794             $tracelevel)
9795             if defined $::RD_TRACE;
9796 112         266 my $thisprod = $thisrule->{"prods"}[0];
9797 112         233 $text = $_[1];
9798 112         188 my $_savetext;
9799 112         231 @item = (q{SINGLE_QUOTED_STRING});
9800 112         272 %item = (__RULE__ => q{SINGLE_QUOTED_STRING});
9801 112         181 my $repcount = 0;
9802              
9803              
9804 112 50       245 Parse::RecDescent::_trace(q{Trying terminal: [''']},
9805             Parse::RecDescent::_tracefirst($text),
9806             q{SINGLE_QUOTED_STRING},
9807             $tracelevel)
9808             if defined $::RD_TRACE;
9809 112         242 undef $lastsep;
9810 112         276 $expectation->is(q{})->at($text);
9811            
9812              
9813 112 100 33     1267 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and
  112 100 66     744  
  112   66     226  
  112         634  
9814             substr($text,0,length($_tok)) eq $_tok and
9815 1         4 do { substr($text,0,length($_tok)) = ""; 1; }
  1         4  
9816             )
9817             {
9818 111 50       386 $text = $lastsep . $text if defined $lastsep;
9819            
9820 111         412 $expectation->failed();
9821 111 50       469 Parse::RecDescent::_trace(q{<>},
9822             Parse::RecDescent::_tracefirst($text))
9823             if defined $::RD_TRACE;
9824 111         256 last;
9825             }
9826 1 50       5 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
9827             . $_tok . q{])},
9828             Parse::RecDescent::_tracefirst($text))
9829             if defined $::RD_TRACE;
9830 1         5 push @item, $item{__STRING1__}=$_tok;
9831            
9832              
9833 1 50       3 Parse::RecDescent::_trace(q{Trying terminal: [/(?:\\\\['\\\\]|[^'])*/]}, Parse::RecDescent::_tracefirst($text),
9834             q{SINGLE_QUOTED_STRING},
9835             $tracelevel)
9836             if defined $::RD_TRACE;
9837 1         2 undef $lastsep;
9838 1         4 $expectation->is(q{/(?:\\\\['\\\\]|[^'])*/})->at($text);
9839            
9840              
9841 1 50 33     40 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:(?:\\['\\]|[^'])*)/)
  1 50       25  
9842             {
9843 0 0       0 $text = $lastsep . $text if defined $lastsep;
9844 0         0 $expectation->failed();
9845 0 0       0 Parse::RecDescent::_trace(q{<>},
9846             Parse::RecDescent::_tracefirst($text))
9847             if defined $::RD_TRACE;
9848              
9849 0         0 last;
9850             }
9851 1         7 $current_match = substr($text, $-[0], $+[0] - $-[0]);
9852 1         5 substr($text,0,length($current_match),q{});
9853 1 50       5 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
9854             . $current_match . q{])},
9855             Parse::RecDescent::_tracefirst($text))
9856             if defined $::RD_TRACE;
9857 1         4 push @item, $item{__PATTERN1__}=$current_match;
9858            
9859              
9860 1 50       3 Parse::RecDescent::_trace(q{Trying terminal: [''']},
9861             Parse::RecDescent::_tracefirst($text),
9862             q{SINGLE_QUOTED_STRING},
9863             $tracelevel)
9864             if defined $::RD_TRACE;
9865 1         3 undef $lastsep;
9866 1         4 $expectation->is(q{'''})->at($text);
9867            
9868              
9869 1 50 33     22 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and
  1 50 33     18  
  1   33     10  
  1         11  
9870             substr($text,0,length($_tok)) eq $_tok and
9871 1         3 do { substr($text,0,length($_tok)) = ""; 1; }
  1         4  
9872             )
9873             {
9874 0 0       0 $text = $lastsep . $text if defined $lastsep;
9875            
9876 0         0 $expectation->failed();
9877 0 0       0 Parse::RecDescent::_trace(q{<>},
9878             Parse::RecDescent::_tracefirst($text))
9879             if defined $::RD_TRACE;
9880 0         0 last;
9881             }
9882 1 50       4 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
9883             . $_tok . q{])},
9884             Parse::RecDescent::_tracefirst($text))
9885             if defined $::RD_TRACE;
9886 1         4 push @item, $item{__STRING2__}=$_tok;
9887            
9888              
9889 1 50       10 Parse::RecDescent::_trace(q{Trying action},
9890             Parse::RecDescent::_tracefirst($text),
9891             q{SINGLE_QUOTED_STRING},
9892             $tracelevel)
9893             if defined $::RD_TRACE;
9894            
9895              
9896 1 50       5 $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} };
  1         4  
9897 1 50       4 unless (defined $_tok)
9898             {
9899 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
9900             if defined $::RD_TRACE;
9901 0         0 last;
9902             }
9903 1 50       3 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
9904             . $_tok . q{])},
9905             Parse::RecDescent::_tracefirst($text))
9906             if defined $::RD_TRACE;
9907 1         3 push @item, $_tok;
9908 1         3 $item{__ACTION1__}=$_tok;
9909            
9910              
9911 1 50       3 Parse::RecDescent::_trace(q{>>Matched production: [''' /(?:\\\\['\\\\]|[^'])*/ ''']<<},
9912             Parse::RecDescent::_tracefirst($text),
9913             q{SINGLE_QUOTED_STRING},
9914             $tracelevel)
9915             if defined $::RD_TRACE;
9916              
9917              
9918              
9919 1         2 $_matched = 1;
9920 1         3 last;
9921             }
9922              
9923             splice
9924 112 100       316 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         277  
9925            
9926 112 100 66     468 unless ( $_matched || defined($score) )
9927             {
9928 111         175 splice @{$thisparser->{deferred}}, $def_at;
  111         229  
9929            
9930              
9931 111         216 $_[1] = $text; # NOT SURE THIS IS NEEDED
9932 111 50       257 Parse::RecDescent::_trace(q{<>},
9933             Parse::RecDescent::_tracefirst($_[1]),
9934             q{SINGLE_QUOTED_STRING},
9935             $tracelevel)
9936             if defined $::RD_TRACE;
9937 111         654 return undef;
9938             }
9939 1 50 33     5 if (!defined($return) && defined($score))
9940             {
9941 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9942             q{SINGLE_QUOTED_STRING},
9943             $tracelevel)
9944             if defined $::RD_TRACE;
9945 0         0 $return = $score_return;
9946             }
9947 1         2 splice @{$thisparser->{errors}}, $err_at;
  1         12  
9948 1 50       4 $return = $item[$#item] unless defined $return;
9949 1 50       4 if (defined $::RD_TRACE)
9950             {
9951 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9952             $return . q{])}, "",
9953             q{SINGLE_QUOTED_STRING},
9954             $tracelevel);
9955 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9956             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9957             Parse::RecDescent::_tracefirst($text),
9958             , q{SINGLE_QUOTED_STRING},
9959             $tracelevel)
9960             }
9961 1         4 $_[1] = $text;
9962 1         8 return $return;
9963             }
9964              
9965             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9966             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodystructure
9967             {
9968 21     21   407 my $thisparser = $_[0];
9969 1     1   8 use vars q{$tracelevel};
  1         4  
  1         1100  
9970 21   50     84 local $tracelevel = ($tracelevel||0)+1;
9971 21         48 $ERRORS = 0;
9972 21         79 my $thisrule = $thisparser->{"rules"}{"bodystructure"};
9973              
9974 21 50       86 Parse::RecDescent::_trace(q{Trying rule: [bodystructure]},
9975             Parse::RecDescent::_tracefirst($_[1]),
9976             q{bodystructure},
9977             $tracelevel)
9978             if defined $::RD_TRACE;
9979              
9980 21         40 my $def_at = @{$thisparser->{deferred}};
  21         164  
9981 21         39 my $err_at = @{$thisparser->{errors}};
  21         54  
9982              
9983 21         81 my $score;
9984             my $score_return;
9985 21         0 my $_tok;
9986 21         58 my $return = undef;
9987 21         49 my $_matched=0;
9988 21         43 my $commit=0;
9989 21         46 my @item = ();
9990 21         45 my %item = ();
9991 21         41 my $repeating = $_[2];
9992 21         41 my $_noactions = $_[3];
9993 21 50       66 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         49  
  21         42  
9994 21         57 my $_itempos = $_[5];
9995 21 50       97 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9996 21         71 my $text;
9997             my $lastsep;
9998 21         0 my $current_match;
9999 21         87 my $expectation = new Parse::RecDescent::Expectation(q{'('});
10000 21         171 $expectation->at($_[1]);
10001            
10002 21         124 my $thisline;
10003 21         97 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10004              
10005            
10006              
10007 21   33     226 while (!$_matched && !$commit)
10008             {
10009            
10010 21 50       76 Parse::RecDescent::_trace(q{Trying production: ['(' part ')']},
10011             Parse::RecDescent::_tracefirst($_[1]),
10012             q{bodystructure},
10013             $tracelevel)
10014             if defined $::RD_TRACE;
10015 21         78 my $thisprod = $thisrule->{"prods"}[0];
10016 21         56 $text = $_[1];
10017 21         38 my $_savetext;
10018 21         60 @item = (q{bodystructure});
10019 21         82 %item = (__RULE__ => q{bodystructure});
10020 21         52 my $repcount = 0;
10021              
10022              
10023 21 50       79 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
10024             Parse::RecDescent::_tracefirst($text),
10025             q{bodystructure},
10026             $tracelevel)
10027             if defined $::RD_TRACE;
10028 21         51 undef $lastsep;
10029 21         82 $expectation->is(q{})->at($text);
10030            
10031              
10032 21 100 33     343 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  21 100 66     249  
  21   66     52  
  21         150  
10033             substr($text,0,length($_tok)) eq $_tok and
10034 20         60 do { substr($text,0,length($_tok)) = ""; 1; }
  20         79  
10035             )
10036             {
10037 1 50       5 $text = $lastsep . $text if defined $lastsep;
10038            
10039 1         6 $expectation->failed();
10040 1 50       5 Parse::RecDescent::_trace(q{<>},
10041             Parse::RecDescent::_tracefirst($text))
10042             if defined $::RD_TRACE;
10043 1         3 last;
10044             }
10045 20 50       61 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10046             . $_tok . q{])},
10047             Parse::RecDescent::_tracefirst($text))
10048             if defined $::RD_TRACE;
10049 20         105 push @item, $item{__STRING1__}=$_tok;
10050            
10051              
10052 20 50       68 Parse::RecDescent::_trace(q{Trying repeated subrule: [part]},
10053             Parse::RecDescent::_tracefirst($text),
10054             q{bodystructure},
10055             $tracelevel)
10056             if defined $::RD_TRACE;
10057 20         76 $expectation->is(q{part})->at($text);
10058            
10059 20 50   40   294 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  40         130  
10060             {
10061 0 0       0 Parse::RecDescent::_trace(q{<>},
10062             Parse::RecDescent::_tracefirst($text),
10063             q{bodystructure},
10064             $tracelevel)
10065             if defined $::RD_TRACE;
10066 0         0 last;
10067             }
10068 20 50       383 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [part]<< (}
10069             . @$_tok . q{ times)},
10070              
10071             Parse::RecDescent::_tracefirst($text),
10072             q{bodystructure},
10073             $tracelevel)
10074             if defined $::RD_TRACE;
10075 20         65 $item{q{part(s)}} = $_tok;
10076 20         62 push @item, $_tok;
10077            
10078              
10079              
10080 20 50       54 Parse::RecDescent::_trace(q{Trying terminal: [')']},
10081             Parse::RecDescent::_tracefirst($text),
10082             q{bodystructure},
10083             $tracelevel)
10084             if defined $::RD_TRACE;
10085 20         51 undef $lastsep;
10086 20         56 $expectation->is(q{')'})->at($text);
10087            
10088              
10089 20 50 33     297 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  20 50 33     188  
  20   33     55  
  20         148  
10090             substr($text,0,length($_tok)) eq $_tok and
10091 20         61 do { substr($text,0,length($_tok)) = ""; 1; }
  20         82  
10092             )
10093             {
10094 0 0       0 $text = $lastsep . $text if defined $lastsep;
10095            
10096 0         0 $expectation->failed();
10097 0 0       0 Parse::RecDescent::_trace(q{<>},
10098             Parse::RecDescent::_tracefirst($text))
10099             if defined $::RD_TRACE;
10100 0         0 last;
10101             }
10102 20 50       71 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10103             . $_tok . q{])},
10104             Parse::RecDescent::_tracefirst($text))
10105             if defined $::RD_TRACE;
10106 20         85 push @item, $item{__STRING2__}=$_tok;
10107            
10108              
10109 20 50       70 Parse::RecDescent::_trace(q{Trying action},
10110             Parse::RecDescent::_tracefirst($text),
10111             q{bodystructure},
10112             $tracelevel)
10113             if defined $::RD_TRACE;
10114            
10115              
10116 20 50       60 $_tok = ($_noactions) ? 0 : do { $return = $item{'part(s)'} };
  20         59  
10117 20 50       67 unless (defined $_tok)
10118             {
10119 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
10120             if defined $::RD_TRACE;
10121 0         0 last;
10122             }
10123 20 50       63 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10124             . $_tok . q{])},
10125             Parse::RecDescent::_tracefirst($text))
10126             if defined $::RD_TRACE;
10127 20         50 push @item, $_tok;
10128 20         57 $item{__ACTION1__}=$_tok;
10129            
10130              
10131 20 50       61 Parse::RecDescent::_trace(q{>>Matched production: ['(' part ')']<<},
10132             Parse::RecDescent::_tracefirst($text),
10133             q{bodystructure},
10134             $tracelevel)
10135             if defined $::RD_TRACE;
10136              
10137              
10138              
10139 20         42 $_matched = 1;
10140 20         60 last;
10141             }
10142              
10143             splice
10144 21 100       52 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         4  
10145            
10146 21 100 66     80 unless ( $_matched || defined($score) )
10147             {
10148 1         3 splice @{$thisparser->{deferred}}, $def_at;
  1         3  
10149            
10150              
10151 1         2 $_[1] = $text; # NOT SURE THIS IS NEEDED
10152 1 50       5 Parse::RecDescent::_trace(q{<>},
10153             Parse::RecDescent::_tracefirst($_[1]),
10154             q{bodystructure},
10155             $tracelevel)
10156             if defined $::RD_TRACE;
10157 1         7 return undef;
10158             }
10159 20 50 33     87 if (!defined($return) && defined($score))
10160             {
10161 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10162             q{bodystructure},
10163             $tracelevel)
10164             if defined $::RD_TRACE;
10165 0         0 $return = $score_return;
10166             }
10167 20         35 splice @{$thisparser->{errors}}, $err_at;
  20         68  
10168 20 50       68 $return = $item[$#item] unless defined $return;
10169 20 50       82 if (defined $::RD_TRACE)
10170             {
10171 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10172             $return . q{])}, "",
10173             q{bodystructure},
10174             $tracelevel);
10175 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10176             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10177             Parse::RecDescent::_tracefirst($text),
10178             , q{bodystructure},
10179             $tracelevel)
10180             }
10181 20         86 $_[1] = $text;
10182 20         203 return $return;
10183             }
10184              
10185             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10186             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS
10187             {
10188 58     58   117 my $thisparser = $_[0];
10189 1     1   8 use vars q{$tracelevel};
  1         2  
  1         1181  
10190 58   50     191 local $tracelevel = ($tracelevel||0)+1;
10191 58         114 $ERRORS = 0;
10192 58         149 my $thisrule = $thisparser->{"rules"}{"STRINGS"};
10193              
10194 58 50       139 Parse::RecDescent::_trace(q{Trying rule: [STRINGS]},
10195             Parse::RecDescent::_tracefirst($_[1]),
10196             q{STRINGS},
10197             $tracelevel)
10198             if defined $::RD_TRACE;
10199              
10200 58         100 my $def_at = @{$thisparser->{deferred}};
  58         161  
10201 58         110 my $err_at = @{$thisparser->{errors}};
  58         150  
10202              
10203 58         181 my $score;
10204             my $score_return;
10205 58         0 my $_tok;
10206 58         100 my $return = undef;
10207 58         107 my $_matched=0;
10208 58         102 my $commit=0;
10209 58         99 my @item = ();
10210 58         108 my %item = ();
10211 58         94 my $repeating = $_[2];
10212 58         136 my $_noactions = $_[3];
10213 58 50       210 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  58         109  
  58         125  
10214 58         101 my $_itempos = $_[5];
10215 58 50       161 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10216 58         184 my $text;
10217             my $lastsep;
10218 58         0 my $current_match;
10219 58         150 my $expectation = new Parse::RecDescent::Expectation(q{'('});
10220 58         422 $expectation->at($_[1]);
10221            
10222 58         236 my $thisline;
10223 58         206 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10224              
10225            
10226              
10227 58   33     489 while (!$_matched && !$commit)
10228             {
10229            
10230 58 50       138 Parse::RecDescent::_trace(q{Trying production: ['(' STRING ')']},
10231             Parse::RecDescent::_tracefirst($_[1]),
10232             q{STRINGS},
10233             $tracelevel)
10234             if defined $::RD_TRACE;
10235 58         151 my $thisprod = $thisrule->{"prods"}[0];
10236 58         129 $text = $_[1];
10237 58         91 my $_savetext;
10238 58         161 @item = (q{STRINGS});
10239 58         142 %item = (__RULE__ => q{STRINGS});
10240 58         118 my $repcount = 0;
10241              
10242              
10243 58 50       147 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
10244             Parse::RecDescent::_tracefirst($text),
10245             q{STRINGS},
10246             $tracelevel)
10247             if defined $::RD_TRACE;
10248 58         156 undef $lastsep;
10249 58         195 $expectation->is(q{})->at($text);
10250            
10251              
10252 58 100 33     689 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  58 100 66     389  
  58   66     110  
  58         452  
10253             substr($text,0,length($_tok)) eq $_tok and
10254 1         4 do { substr($text,0,length($_tok)) = ""; 1; }
  1         5  
10255             )
10256             {
10257 57 50       310 $text = $lastsep . $text if defined $lastsep;
10258            
10259 57         212 $expectation->failed();
10260 57 50       262 Parse::RecDescent::_trace(q{<>},
10261             Parse::RecDescent::_tracefirst($text))
10262             if defined $::RD_TRACE;
10263 57         146 last;
10264             }
10265 1 50       5 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10266             . $_tok . q{])},
10267             Parse::RecDescent::_tracefirst($text))
10268             if defined $::RD_TRACE;
10269 1         4 push @item, $item{__STRING1__}=$_tok;
10270            
10271              
10272 1 50       3 Parse::RecDescent::_trace(q{Trying repeated subrule: [STRING]},
10273             Parse::RecDescent::_tracefirst($text),
10274             q{STRINGS},
10275             $tracelevel)
10276             if defined $::RD_TRACE;
10277 1         5 $expectation->is(q{STRING})->at($text);
10278            
10279 1 50   2   16 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  2         4  
10280             {
10281 0 0       0 Parse::RecDescent::_trace(q{<>},
10282             Parse::RecDescent::_tracefirst($text),
10283             q{STRINGS},
10284             $tracelevel)
10285             if defined $::RD_TRACE;
10286 0         0 last;
10287             }
10288 1 50       18 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [STRING]<< (}
10289             . @$_tok . q{ times)},
10290              
10291             Parse::RecDescent::_tracefirst($text),
10292             q{STRINGS},
10293             $tracelevel)
10294             if defined $::RD_TRACE;
10295 1         3 $item{q{STRING(s)}} = $_tok;
10296 1         3 push @item, $_tok;
10297            
10298              
10299              
10300 1 50       5 Parse::RecDescent::_trace(q{Trying terminal: [')']},
10301             Parse::RecDescent::_tracefirst($text),
10302             q{STRINGS},
10303             $tracelevel)
10304             if defined $::RD_TRACE;
10305 1         3 undef $lastsep;
10306 1         3 $expectation->is(q{')'})->at($text);
10307            
10308              
10309 1 50 33     39 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  1 50 33     11  
  1   33     3  
  1         9  
10310             substr($text,0,length($_tok)) eq $_tok and
10311 1         4 do { substr($text,0,length($_tok)) = ""; 1; }
  1         4  
10312             )
10313             {
10314 0 0       0 $text = $lastsep . $text if defined $lastsep;
10315            
10316 0         0 $expectation->failed();
10317 0 0       0 Parse::RecDescent::_trace(q{<>},
10318             Parse::RecDescent::_tracefirst($text))
10319             if defined $::RD_TRACE;
10320 0         0 last;
10321             }
10322 1 50       5 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10323             . $_tok . q{])},
10324             Parse::RecDescent::_tracefirst($text))
10325             if defined $::RD_TRACE;
10326 1         12 push @item, $item{__STRING2__}=$_tok;
10327            
10328              
10329 1 50       12 Parse::RecDescent::_trace(q{Trying action},
10330             Parse::RecDescent::_tracefirst($text),
10331             q{STRINGS},
10332             $tracelevel)
10333             if defined $::RD_TRACE;
10334            
10335              
10336 1 50       4 $_tok = ($_noactions) ? 0 : do { $return = $item{'STRING(s)'} };
  1         4  
10337 1 50       4 unless (defined $_tok)
10338             {
10339 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
10340             if defined $::RD_TRACE;
10341 0         0 last;
10342             }
10343 1 50       5 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10344             . $_tok . q{])},
10345             Parse::RecDescent::_tracefirst($text))
10346             if defined $::RD_TRACE;
10347 1         3 push @item, $_tok;
10348 1         2 $item{__ACTION1__}=$_tok;
10349            
10350              
10351 1 50       4 Parse::RecDescent::_trace(q{>>Matched production: ['(' STRING ')']<<},
10352             Parse::RecDescent::_tracefirst($text),
10353             q{STRINGS},
10354             $tracelevel)
10355             if defined $::RD_TRACE;
10356              
10357              
10358              
10359 1         2 $_matched = 1;
10360 1         3 last;
10361             }
10362              
10363             splice
10364 58 100       199 @{$thisparser->{deferred}}, $def_at unless $_matched;
  57         145  
10365            
10366 58 100 66     244 unless ( $_matched || defined($score) )
10367             {
10368 57         117 splice @{$thisparser->{deferred}}, $def_at;
  57         116  
10369            
10370              
10371 57         113 $_[1] = $text; # NOT SURE THIS IS NEEDED
10372 57 50       162 Parse::RecDescent::_trace(q{<>},
10373             Parse::RecDescent::_tracefirst($_[1]),
10374             q{STRINGS},
10375             $tracelevel)
10376             if defined $::RD_TRACE;
10377 57         337 return undef;
10378             }
10379 1 50 33     5 if (!defined($return) && defined($score))
10380             {
10381 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10382             q{STRINGS},
10383             $tracelevel)
10384             if defined $::RD_TRACE;
10385 0         0 $return = $score_return;
10386             }
10387 1         2 splice @{$thisparser->{errors}}, $err_at;
  1         4  
10388 1 50       4 $return = $item[$#item] unless defined $return;
10389 1 50       11 if (defined $::RD_TRACE)
10390             {
10391 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10392             $return . q{])}, "",
10393             q{STRINGS},
10394             $tracelevel);
10395 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10396             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10397             Parse::RecDescent::_tracefirst($text),
10398             , q{STRINGS},
10399             $tracelevel)
10400             }
10401 1         4 $_[1] = $text;
10402 1         10 return $return;
10403             }
10404              
10405             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10406             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::BARESTRING
10407             {
10408 111     111   250 my $thisparser = $_[0];
10409 1     1   9 use vars q{$tracelevel};
  1         3  
  1         1031  
10410 111   50     308 local $tracelevel = ($tracelevel||0)+1;
10411 111         192 $ERRORS = 0;
10412 111         256 my $thisrule = $thisparser->{"rules"}{"BARESTRING"};
10413              
10414 111 50       245 Parse::RecDescent::_trace(q{Trying rule: [BARESTRING]},
10415             Parse::RecDescent::_tracefirst($_[1]),
10416             q{BARESTRING},
10417             $tracelevel)
10418             if defined $::RD_TRACE;
10419              
10420 111         170 my $def_at = @{$thisparser->{deferred}};
  111         222  
10421 111         176 my $err_at = @{$thisparser->{errors}};
  111         231  
10422              
10423 111         297 my $score;
10424             my $score_return;
10425 111         0 my $_tok;
10426 111         186 my $return = undef;
10427 111         182 my $_matched=0;
10428 111         188 my $commit=0;
10429 111         219 my @item = ();
10430 111         183 my %item = ();
10431 111         189 my $repeating = $_[2];
10432 111         162 my $_noactions = $_[3];
10433 111 50       277 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  111         176  
  111         207  
10434 111         198 my $_itempos = $_[5];
10435 111 50       313 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10436 111         306 my $text;
10437             my $lastsep;
10438 111         0 my $current_match;
10439 111         260 my $expectation = new Parse::RecDescent::Expectation(q{/^[)('"]/});
10440 111         747 $expectation->at($_[1]);
10441            
10442 111         540 my $thisline;
10443 111         357 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10444              
10445            
10446              
10447 111   33     924 while (!$_matched && !$commit)
10448             {
10449            
10450 111 50       272 Parse::RecDescent::_trace(q{Trying production: [/^[)('"]/ /^(?!\\(|\\))(?:\\\\ |\\S)+/]},
10451             Parse::RecDescent::_tracefirst($_[1]),
10452             q{BARESTRING},
10453             $tracelevel)
10454             if defined $::RD_TRACE;
10455 111         312 my $thisprod = $thisrule->{"prods"}[0];
10456 111         223 $text = $_[1];
10457 111         183 my $_savetext;
10458 111         226 @item = (q{BARESTRING});
10459 111         251 %item = (__RULE__ => q{BARESTRING});
10460 111         183 my $repcount = 0;
10461              
10462              
10463 111 50       291 Parse::RecDescent::_trace(q{Trying terminal: [/^[)('"]/]}, Parse::RecDescent::_tracefirst($text),
10464             q{BARESTRING},
10465             $tracelevel)
10466             if defined $::RD_TRACE;
10467 111         214 undef $lastsep;
10468 111         261 $expectation->is(q{})->at($text);
10469 111         779 $_savetext = $text;
10470              
10471 111 100 33     728 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^[)('"])/)
  111 50       986  
10472             {
10473 111         267 $text = $_savetext;
10474 111         353 $expectation->failed();
10475 111 50       469 Parse::RecDescent::_trace(q{<>},
10476             Parse::RecDescent::_tracefirst($text))
10477             if defined $::RD_TRACE;
10478              
10479 111         287 last;
10480             }
10481 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10482 0         0 substr($text,0,length($current_match),q{});
10483 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10484             . $current_match . q{])},
10485             Parse::RecDescent::_tracefirst($text))
10486             if defined $::RD_TRACE;
10487 0         0 push @item, $item{__PATTERN1__}=$current_match;
10488 0         0 $text = $_savetext;
10489              
10490 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/^(?!\\(|\\))(?:\\\\ |\\S)+/]}, Parse::RecDescent::_tracefirst($text),
10491             q{BARESTRING},
10492             $tracelevel)
10493             if defined $::RD_TRACE;
10494 0         0 undef $lastsep;
10495 0         0 $expectation->is(q{/^(?!\\(|\\))(?:\\\\ |\\S)+/})->at($text);
10496            
10497              
10498 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^(?!\(|\))(?:\\ |\S)+)/)
  0 0       0  
10499             {
10500 0 0       0 $text = $lastsep . $text if defined $lastsep;
10501 0         0 $expectation->failed();
10502 0 0       0 Parse::RecDescent::_trace(q{<>},
10503             Parse::RecDescent::_tracefirst($text))
10504             if defined $::RD_TRACE;
10505              
10506 0         0 last;
10507             }
10508 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10509 0         0 substr($text,0,length($current_match),q{});
10510 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10511             . $current_match . q{])},
10512             Parse::RecDescent::_tracefirst($text))
10513             if defined $::RD_TRACE;
10514 0         0 push @item, $item{__PATTERN2__}=$current_match;
10515            
10516              
10517 0 0       0 Parse::RecDescent::_trace(q{Trying action},
10518             Parse::RecDescent::_tracefirst($text),
10519             q{BARESTRING},
10520             $tracelevel)
10521             if defined $::RD_TRACE;
10522            
10523              
10524 0 0       0 $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} };
  0         0  
10525 0 0       0 unless (defined $_tok)
10526             {
10527 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
10528             if defined $::RD_TRACE;
10529 0         0 last;
10530             }
10531 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10532             . $_tok . q{])},
10533             Parse::RecDescent::_tracefirst($text))
10534             if defined $::RD_TRACE;
10535 0         0 push @item, $_tok;
10536 0         0 $item{__ACTION1__}=$_tok;
10537            
10538              
10539 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/^[)('"]/ /^(?!\\(|\\))(?:\\\\ |\\S)+/]<<},
10540             Parse::RecDescent::_tracefirst($text),
10541             q{BARESTRING},
10542             $tracelevel)
10543             if defined $::RD_TRACE;
10544              
10545              
10546              
10547 0         0 $_matched = 1;
10548 0         0 last;
10549             }
10550              
10551             splice
10552 111 50       288 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         264  
10553            
10554 111 50 33     409 unless ( $_matched || defined($score) )
10555             {
10556 111         182 splice @{$thisparser->{deferred}}, $def_at;
  111         239  
10557            
10558              
10559 111         221 $_[1] = $text; # NOT SURE THIS IS NEEDED
10560 111 50       238 Parse::RecDescent::_trace(q{<>},
10561             Parse::RecDescent::_tracefirst($_[1]),
10562             q{BARESTRING},
10563             $tracelevel)
10564             if defined $::RD_TRACE;
10565 111         603 return undef;
10566             }
10567 0 0 0     0 if (!defined($return) && defined($score))
10568             {
10569 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10570             q{BARESTRING},
10571             $tracelevel)
10572             if defined $::RD_TRACE;
10573 0         0 $return = $score_return;
10574             }
10575 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
10576 0 0       0 $return = $item[$#item] unless defined $return;
10577 0 0       0 if (defined $::RD_TRACE)
10578             {
10579 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10580             $return . q{])}, "",
10581             q{BARESTRING},
10582             $tracelevel);
10583 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10584             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10585             Parse::RecDescent::_tracefirst($text),
10586             , q{BARESTRING},
10587             $tracelevel)
10588             }
10589 0         0 $_[1] = $text;
10590 0         0 return $return;
10591             }
10592              
10593             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10594             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms
10595             {
10596 102     102   1530 my $thisparser = $_[0];
10597 1     1   9 use vars q{$tracelevel};
  1         3  
  1         325  
10598 102   50     340 local $tracelevel = ($tracelevel||0)+1;
10599 102         205 $ERRORS = 0;
10600 102         295 my $thisrule = $thisparser->{"rules"}{"bodyparms"};
10601              
10602 102 50       309 Parse::RecDescent::_trace(q{Trying rule: [bodyparms]},
10603             Parse::RecDescent::_tracefirst($_[1]),
10604             q{bodyparms},
10605             $tracelevel)
10606             if defined $::RD_TRACE;
10607              
10608 102         176 my $def_at = @{$thisparser->{deferred}};
  102         295  
10609 102         174 my $err_at = @{$thisparser->{errors}};
  102         252  
10610              
10611 102         340 my $score;
10612             my $score_return;
10613 102         0 my $_tok;
10614 102         198 my $return = undef;
10615 102         203 my $_matched=0;
10616 102         156 my $commit=0;
10617 102         220 my @item = ();
10618 102         191 my %item = ();
10619 102         243 my $repeating = $_[2];
10620 102         203 my $_noactions = $_[3];
10621 102 50       306 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         241  
  102         230  
10622 102         198 my $_itempos = $_[5];
10623 102 50       315 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10624 102         323 my $text;
10625             my $lastsep;
10626 102         0 my $current_match;
10627 102         365 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or KVPAIRS});
10628 102         815 $expectation->at($_[1]);
10629            
10630 102         415 my $thisline;
10631 102         411 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10632              
10633            
10634              
10635 102   33     996 while (!$_matched && !$commit)
10636             {
10637            
10638 102 50       346 Parse::RecDescent::_trace(q{Trying production: [NIL]},
10639             Parse::RecDescent::_tracefirst($_[1]),
10640             q{bodyparms},
10641             $tracelevel)
10642             if defined $::RD_TRACE;
10643 102         317 my $thisprod = $thisrule->{"prods"}[0];
10644 102         257 $text = $_[1];
10645 102         157 my $_savetext;
10646 102         230 @item = (q{bodyparms});
10647 102         287 %item = (__RULE__ => q{bodyparms});
10648 102         184 my $repcount = 0;
10649              
10650              
10651 102 50       374 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
10652             Parse::RecDescent::_tracefirst($text),
10653             q{bodyparms},
10654             $tracelevel)
10655             if defined $::RD_TRACE;
10656 1     1   9 if (1) { no strict qw{refs};
  1         2  
  1         291  
  102         177  
10657 102         299 $expectation->is(q{})->at($text);
10658 102 100   102   1106 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         275  
10659             {
10660            
10661 79 50       219 Parse::RecDescent::_trace(q{<>},
10662             Parse::RecDescent::_tracefirst($text),
10663             q{bodyparms},
10664             $tracelevel)
10665             if defined $::RD_TRACE;
10666 79         237 $expectation->failed();
10667 79         304 last;
10668             }
10669 23 50       115 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
10670             . $_tok . q{]},
10671              
10672             Parse::RecDescent::_tracefirst($text),
10673             q{bodyparms},
10674             $tracelevel)
10675             if defined $::RD_TRACE;
10676 23         67 $item{q{NIL}} = $_tok;
10677 23         66 push @item, $_tok;
10678            
10679             }
10680              
10681 23 50       76 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
10682             Parse::RecDescent::_tracefirst($text),
10683             q{bodyparms},
10684             $tracelevel)
10685             if defined $::RD_TRACE;
10686              
10687              
10688              
10689 23         48 $_matched = 1;
10690 23         52 last;
10691             }
10692              
10693             splice
10694 102 100       399 @{$thisparser->{deferred}}, $def_at unless $_matched;
  79         246  
10695            
10696 102   66     578 while (!$_matched && !$commit)
10697             {
10698            
10699 79 50       311 Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]},
10700             Parse::RecDescent::_tracefirst($_[1]),
10701             q{bodyparms},
10702             $tracelevel)
10703             if defined $::RD_TRACE;
10704 79         198 my $thisprod = $thisrule->{"prods"}[1];
10705 79         178 $text = $_[1];
10706 79         135 my $_savetext;
10707 79         228 @item = (q{bodyparms});
10708 79         201 %item = (__RULE__ => q{bodyparms});
10709 79         187 my $repcount = 0;
10710              
10711              
10712 79 50       219 Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]},
10713             Parse::RecDescent::_tracefirst($text),
10714             q{bodyparms},
10715             $tracelevel)
10716             if defined $::RD_TRACE;
10717 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         497  
  79         162  
10718 79         238 $expectation->is(q{})->at($text);
10719 79 100   79   950 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  79         194  
10720             {
10721            
10722 3 50       11 Parse::RecDescent::_trace(q{<>},
10723             Parse::RecDescent::_tracefirst($text),
10724             q{bodyparms},
10725             $tracelevel)
10726             if defined $::RD_TRACE;
10727 3         11 $expectation->failed();
10728 3         11 last;
10729             }
10730 76 50       328 Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [}
10731             . $_tok . q{]},
10732              
10733             Parse::RecDescent::_tracefirst($text),
10734             q{bodyparms},
10735             $tracelevel)
10736             if defined $::RD_TRACE;
10737 76         228 $item{q{KVPAIRS}} = $_tok;
10738 76         189 push @item, $_tok;
10739            
10740             }
10741              
10742 76 50       224 Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<},
10743             Parse::RecDescent::_tracefirst($text),
10744             q{bodyparms},
10745             $tracelevel)
10746             if defined $::RD_TRACE;
10747              
10748              
10749              
10750 76         166 $_matched = 1;
10751 76         151 last;
10752             }
10753              
10754             splice
10755 102 100       255 @{$thisparser->{deferred}}, $def_at unless $_matched;
  3         9  
10756            
10757 102 100 66     361 unless ( $_matched || defined($score) )
10758             {
10759 3         7 splice @{$thisparser->{deferred}}, $def_at;
  3         7  
10760            
10761              
10762 3         7 $_[1] = $text; # NOT SURE THIS IS NEEDED
10763 3 50       10 Parse::RecDescent::_trace(q{<>},
10764             Parse::RecDescent::_tracefirst($_[1]),
10765             q{bodyparms},
10766             $tracelevel)
10767             if defined $::RD_TRACE;
10768 3         13 return undef;
10769             }
10770 99 50 33     632 if (!defined($return) && defined($score))
10771             {
10772 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10773             q{bodyparms},
10774             $tracelevel)
10775             if defined $::RD_TRACE;
10776 0         0 $return = $score_return;
10777             }
10778 99         200 splice @{$thisparser->{errors}}, $err_at;
  99         236  
10779 99 50       322 $return = $item[$#item] unless defined $return;
10780 99 50       270 if (defined $::RD_TRACE)
10781             {
10782 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10783             $return . q{])}, "",
10784             q{bodyparms},
10785             $tracelevel);
10786 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10787             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10788             Parse::RecDescent::_tracefirst($text),
10789             , q{bodyparms},
10790             $tracelevel)
10791             }
10792 99         245 $_[1] = $text;
10793 99         563 return $return;
10794             }
10795              
10796             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10797             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::DOUBLE_QUOTED_STRING
10798             {
10799 824     824   1401 my $thisparser = $_[0];
10800 1     1   8 use vars q{$tracelevel};
  1         3  
  1         1227  
10801 824   50     2114 local $tracelevel = ($tracelevel||0)+1;
10802 824         1292 $ERRORS = 0;
10803 824         1637 my $thisrule = $thisparser->{"rules"}{"DOUBLE_QUOTED_STRING"};
10804              
10805 824 50       1615 Parse::RecDescent::_trace(q{Trying rule: [DOUBLE_QUOTED_STRING]},
10806             Parse::RecDescent::_tracefirst($_[1]),
10807             q{DOUBLE_QUOTED_STRING},
10808             $tracelevel)
10809             if defined $::RD_TRACE;
10810              
10811 824         1155 my $def_at = @{$thisparser->{deferred}};
  824         1520  
10812 824         1209 my $err_at = @{$thisparser->{errors}};
  824         1462  
10813              
10814 824         2123 my $score;
10815             my $score_return;
10816 824         0 my $_tok;
10817 824         1142 my $return = undef;
10818 824         1301 my $_matched=0;
10819 824         1229 my $commit=0;
10820 824         1425 my @item = ();
10821 824         1279 my %item = ();
10822 824         1248 my $repeating = $_[2];
10823 824         1160 my $_noactions = $_[3];
10824 824 50       1589 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  824         1148  
  824         1384  
10825 824         1296 my $_itempos = $_[5];
10826 824 50       1717 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10827 824         1977 my $text;
10828             my $lastsep;
10829 824         0 my $current_match;
10830 824         2316 my $expectation = new Parse::RecDescent::Expectation(q{'"'});
10831 824         5462 $expectation->at($_[1]);
10832            
10833 824         3443 my $thisline;
10834 824         2156 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10835              
10836            
10837              
10838 824   33     6160 while (!$_matched && !$commit)
10839             {
10840            
10841 824 50       1774 Parse::RecDescent::_trace(q{Trying production: ['"' /(?:\\\\["\\\\]|[^"])*/ '"']},
10842             Parse::RecDescent::_tracefirst($_[1]),
10843             q{DOUBLE_QUOTED_STRING},
10844             $tracelevel)
10845             if defined $::RD_TRACE;
10846 824         1578 my $thisprod = $thisrule->{"prods"}[0];
10847 824         1631 $text = $_[1];
10848 824         1255 my $_savetext;
10849 824         1612 @item = (q{DOUBLE_QUOTED_STRING});
10850 824         1679 %item = (__RULE__ => q{DOUBLE_QUOTED_STRING});
10851 824         1411 my $repcount = 0;
10852              
10853              
10854 824 50       2029 Parse::RecDescent::_trace(q{Trying terminal: ['"']},
10855             Parse::RecDescent::_tracefirst($text),
10856             q{DOUBLE_QUOTED_STRING},
10857             $tracelevel)
10858             if defined $::RD_TRACE;
10859 824         1504 undef $lastsep;
10860 824         2021 $expectation->is(q{})->at($text);
10861            
10862              
10863 824 100 66     9768 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\"/)
  824 100       7602  
10864             {
10865 112 50       519 $text = $lastsep . $text if defined $lastsep;
10866            
10867 112         383 $expectation->failed();
10868 112 50       455 Parse::RecDescent::_trace(qq{<>},
10869             Parse::RecDescent::_tracefirst($text))
10870             if defined $::RD_TRACE;
10871 112         305 last;
10872             }
10873 712         3570 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10874 712         2492 substr($text,0,length($current_match),q{});
10875 712 50       1499 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10876             . $current_match . q{])},
10877             Parse::RecDescent::_tracefirst($text))
10878             if defined $::RD_TRACE;
10879 712         1934 push @item, $item{__STRING1__}=$current_match;
10880            
10881              
10882 712 50       1581 Parse::RecDescent::_trace(q{Trying terminal: [/(?:\\\\["\\\\]|[^"])*/]}, Parse::RecDescent::_tracefirst($text),
10883             q{DOUBLE_QUOTED_STRING},
10884             $tracelevel)
10885             if defined $::RD_TRACE;
10886 712         1178 undef $lastsep;
10887 712         1720 $expectation->is(q{/(?:\\\\["\\\\]|[^"])*/})->at($text);
10888            
10889              
10890 712 50 33     7754 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:(?:\\["\\]|[^"])*)/)
  712 50       8456  
10891             {
10892 0 0       0 $text = $lastsep . $text if defined $lastsep;
10893 0         0 $expectation->failed();
10894 0 0       0 Parse::RecDescent::_trace(q{<>},
10895             Parse::RecDescent::_tracefirst($text))
10896             if defined $::RD_TRACE;
10897              
10898 0         0 last;
10899             }
10900 712         3240 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10901 712         2511 substr($text,0,length($current_match),q{});
10902 712 50       1844 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10903             . $current_match . q{])},
10904             Parse::RecDescent::_tracefirst($text))
10905             if defined $::RD_TRACE;
10906 712         1761 push @item, $item{__PATTERN1__}=$current_match;
10907            
10908              
10909 712 50       1364 Parse::RecDescent::_trace(q{Trying terminal: ['"']},
10910             Parse::RecDescent::_tracefirst($text),
10911             q{DOUBLE_QUOTED_STRING},
10912             $tracelevel)
10913             if defined $::RD_TRACE;
10914 712         1245 undef $lastsep;
10915 712         1658 $expectation->is(q{'"'})->at($text);
10916            
10917              
10918 712 50 33     7093 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\"/)
  712 50       5502  
10919             {
10920 0 0       0 $text = $lastsep . $text if defined $lastsep;
10921            
10922 0         0 $expectation->failed();
10923 0 0       0 Parse::RecDescent::_trace(qq{<>},
10924             Parse::RecDescent::_tracefirst($text))
10925             if defined $::RD_TRACE;
10926 0         0 last;
10927             }
10928 712         3110 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10929 712         2245 substr($text,0,length($current_match),q{});
10930 712 50       1532 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10931             . $current_match . q{])},
10932             Parse::RecDescent::_tracefirst($text))
10933             if defined $::RD_TRACE;
10934 712         1846 push @item, $item{__STRING2__}=$current_match;
10935            
10936              
10937 712 50       1414 Parse::RecDescent::_trace(q{Trying action},
10938             Parse::RecDescent::_tracefirst($text),
10939             q{DOUBLE_QUOTED_STRING},
10940             $tracelevel)
10941             if defined $::RD_TRACE;
10942            
10943              
10944 712 50       1627 $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} };
  712         1826  
10945 712 50       1579 unless (defined $_tok)
10946             {
10947 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
10948             if defined $::RD_TRACE;
10949 0         0 last;
10950             }
10951 712 50       1331 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10952             . $_tok . q{])},
10953             Parse::RecDescent::_tracefirst($text))
10954             if defined $::RD_TRACE;
10955 712         1252 push @item, $_tok;
10956 712         1423 $item{__ACTION1__}=$_tok;
10957            
10958              
10959 712 50       1548 Parse::RecDescent::_trace(q{>>Matched production: ['"' /(?:\\\\["\\\\]|[^"])*/ '"']<<},
10960             Parse::RecDescent::_tracefirst($text),
10961             q{DOUBLE_QUOTED_STRING},
10962             $tracelevel)
10963             if defined $::RD_TRACE;
10964              
10965              
10966              
10967 712         1090 $_matched = 1;
10968 712         1797 last;
10969             }
10970              
10971             splice
10972 824 100       1672 @{$thisparser->{deferred}}, $def_at unless $_matched;
  112         259  
10973            
10974 824 100 66     1903 unless ( $_matched || defined($score) )
10975             {
10976 112         197 splice @{$thisparser->{deferred}}, $def_at;
  112         202  
10977            
10978              
10979 112         280 $_[1] = $text; # NOT SURE THIS IS NEEDED
10980 112 50       265 Parse::RecDescent::_trace(q{<>},
10981             Parse::RecDescent::_tracefirst($_[1]),
10982             q{DOUBLE_QUOTED_STRING},
10983             $tracelevel)
10984             if defined $::RD_TRACE;
10985 112         598 return undef;
10986             }
10987 712 50 33     1563 if (!defined($return) && defined($score))
10988             {
10989 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10990             q{DOUBLE_QUOTED_STRING},
10991             $tracelevel)
10992             if defined $::RD_TRACE;
10993 0         0 $return = $score_return;
10994             }
10995 712         1172 splice @{$thisparser->{errors}}, $err_at;
  712         1560  
10996 712 50       1603 $return = $item[$#item] unless defined $return;
10997 712 50       1365 if (defined $::RD_TRACE)
10998             {
10999 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11000             $return . q{])}, "",
11001             q{DOUBLE_QUOTED_STRING},
11002             $tracelevel);
11003 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11004             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11005             Parse::RecDescent::_tracefirst($text),
11006             , q{DOUBLE_QUOTED_STRING},
11007             $tracelevel)
11008             }
11009 712         1846 $_[1] = $text;
11010 712         5080 return $return;
11011             }
11012              
11013             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11014             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sourceroute
11015             {
11016 94     94   192 my $thisparser = $_[0];
11017 1     1   9 use vars q{$tracelevel};
  1         2  
  1         364  
11018 94   50     262 local $tracelevel = ($tracelevel||0)+1;
11019 94         161 $ERRORS = 0;
11020 94         226 my $thisrule = $thisparser->{"rules"}{"sourceroute"};
11021              
11022 94 50       228 Parse::RecDescent::_trace(q{Trying rule: [sourceroute]},
11023             Parse::RecDescent::_tracefirst($_[1]),
11024             q{sourceroute},
11025             $tracelevel)
11026             if defined $::RD_TRACE;
11027              
11028 94         189 my $def_at = @{$thisparser->{deferred}};
  94         199  
11029 94         162 my $err_at = @{$thisparser->{errors}};
  94         174  
11030              
11031 94         250 my $score;
11032             my $score_return;
11033 94         0 my $_tok;
11034 94         201 my $return = undef;
11035 94         167 my $_matched=0;
11036 94         137 my $commit=0;
11037 94         176 my @item = ();
11038 94         164 my %item = ();
11039 94         163 my $repeating = $_[2];
11040 94         162 my $_noactions = $_[3];
11041 94 50       264 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         157  
  94         194  
11042 94         158 my $_itempos = $_[5];
11043 94 50       240 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11044 94         267 my $text;
11045             my $lastsep;
11046 94         0 my $current_match;
11047 94         277 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
11048 94         642 $expectation->at($_[1]);
11049            
11050 94         404 my $thisline;
11051 94         367 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11052              
11053            
11054              
11055 94   33     864 while (!$_matched && !$commit)
11056             {
11057            
11058 94 50       229 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11059             Parse::RecDescent::_tracefirst($_[1]),
11060             q{sourceroute},
11061             $tracelevel)
11062             if defined $::RD_TRACE;
11063 94         236 my $thisprod = $thisrule->{"prods"}[0];
11064 94         194 $text = $_[1];
11065 94         149 my $_savetext;
11066 94         220 @item = (q{sourceroute});
11067 94         201 %item = (__RULE__ => q{sourceroute});
11068 94         146 my $repcount = 0;
11069              
11070              
11071 94 50       231 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
11072             Parse::RecDescent::_tracefirst($text),
11073             q{sourceroute},
11074             $tracelevel)
11075             if defined $::RD_TRACE;
11076 1     1   9 if (1) { no strict qw{refs};
  1         3  
  1         297  
  94         156  
11077 94         241 $expectation->is(q{})->at($text);
11078 94 50   94   896 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         194  
11079             {
11080            
11081 0 0       0 Parse::RecDescent::_trace(q{<>},
11082             Parse::RecDescent::_tracefirst($text),
11083             q{sourceroute},
11084             $tracelevel)
11085             if defined $::RD_TRACE;
11086 0         0 $expectation->failed();
11087 0         0 last;
11088             }
11089 94 50       337 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
11090             . $_tok . q{]},
11091              
11092             Parse::RecDescent::_tracefirst($text),
11093             q{sourceroute},
11094             $tracelevel)
11095             if defined $::RD_TRACE;
11096 94         239 $item{q{NIL}} = $_tok;
11097 94         220 push @item, $_tok;
11098            
11099             }
11100              
11101 94 50       200 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
11102             Parse::RecDescent::_tracefirst($text),
11103             q{sourceroute},
11104             $tracelevel)
11105             if defined $::RD_TRACE;
11106              
11107              
11108              
11109 94         156 $_matched = 1;
11110 94         181 last;
11111             }
11112              
11113             splice
11114 94 50       228 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11115            
11116 94   33     239 while (!$_matched && !$commit)
11117             {
11118            
11119 0 0       0 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11120             Parse::RecDescent::_tracefirst($_[1]),
11121             q{sourceroute},
11122             $tracelevel)
11123             if defined $::RD_TRACE;
11124 0         0 my $thisprod = $thisrule->{"prods"}[1];
11125 0         0 $text = $_[1];
11126 0         0 my $_savetext;
11127 0         0 @item = (q{sourceroute});
11128 0         0 %item = (__RULE__ => q{sourceroute});
11129 0         0 my $repcount = 0;
11130              
11131              
11132 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
11133             Parse::RecDescent::_tracefirst($text),
11134             q{sourceroute},
11135             $tracelevel)
11136             if defined $::RD_TRACE;
11137 1     1   9 if (1) { no strict qw{refs};
  1         4  
  1         461  
  0         0  
11138 0         0 $expectation->is(q{})->at($text);
11139 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
11140             {
11141            
11142 0 0       0 Parse::RecDescent::_trace(q{<>},
11143             Parse::RecDescent::_tracefirst($text),
11144             q{sourceroute},
11145             $tracelevel)
11146             if defined $::RD_TRACE;
11147 0         0 $expectation->failed();
11148 0         0 last;
11149             }
11150 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
11151             . $_tok . q{]},
11152              
11153             Parse::RecDescent::_tracefirst($text),
11154             q{sourceroute},
11155             $tracelevel)
11156             if defined $::RD_TRACE;
11157 0         0 $item{q{STRING}} = $_tok;
11158 0         0 push @item, $_tok;
11159            
11160             }
11161              
11162 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
11163             Parse::RecDescent::_tracefirst($text),
11164             q{sourceroute},
11165             $tracelevel)
11166             if defined $::RD_TRACE;
11167              
11168              
11169              
11170 0         0 $_matched = 1;
11171 0         0 last;
11172             }
11173              
11174             splice
11175 94 50       201 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11176            
11177 94 50 33     272 unless ( $_matched || defined($score) )
11178             {
11179 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
11180            
11181              
11182 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
11183 0 0       0 Parse::RecDescent::_trace(q{<>},
11184             Parse::RecDescent::_tracefirst($_[1]),
11185             q{sourceroute},
11186             $tracelevel)
11187             if defined $::RD_TRACE;
11188 0         0 return undef;
11189             }
11190 94 50 33     412 if (!defined($return) && defined($score))
11191             {
11192 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11193             q{sourceroute},
11194             $tracelevel)
11195             if defined $::RD_TRACE;
11196 0         0 $return = $score_return;
11197             }
11198 94         175 splice @{$thisparser->{errors}}, $err_at;
  94         192  
11199 94 50       289 $return = $item[$#item] unless defined $return;
11200 94 50       239 if (defined $::RD_TRACE)
11201             {
11202 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11203             $return . q{])}, "",
11204             q{sourceroute},
11205             $tracelevel);
11206 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11207             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11208             Parse::RecDescent::_tracefirst($text),
11209             , q{sourceroute},
11210             $tracelevel)
11211             }
11212 94         209 $_[1] = $text;
11213 94         460 return $return;
11214             }
11215              
11216             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11217             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodytype
11218             {
11219 32     32   78 my $thisparser = $_[0];
11220 1     1   8 use vars q{$tracelevel};
  1         10  
  1         345  
11221 32   50     130 local $tracelevel = ($tracelevel||0)+1;
11222 32         60 $ERRORS = 0;
11223 32         105 my $thisrule = $thisparser->{"rules"}{"bodytype"};
11224              
11225 32 50       89 Parse::RecDescent::_trace(q{Trying rule: [bodytype]},
11226             Parse::RecDescent::_tracefirst($_[1]),
11227             q{bodytype},
11228             $tracelevel)
11229             if defined $::RD_TRACE;
11230              
11231 32         54 my $def_at = @{$thisparser->{deferred}};
  32         78  
11232 32         63 my $err_at = @{$thisparser->{errors}};
  32         88  
11233              
11234 32         116 my $score;
11235             my $score_return;
11236 32         0 my $_tok;
11237 32         62 my $return = undef;
11238 32         76 my $_matched=0;
11239 32         65 my $commit=0;
11240 32         86 my @item = ();
11241 32         62 my %item = ();
11242 32         60 my $repeating = $_[2];
11243 32         52 my $_noactions = $_[3];
11244 32 50       106 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  32         45  
  32         69  
11245 32         83 my $_itempos = $_[5];
11246 32 50       105 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11247 32         116 my $text;
11248             my $lastsep;
11249 32         0 my $current_match;
11250 32         98 my $expectation = new Parse::RecDescent::Expectation(q{STRING});
11251 32         236 $expectation->at($_[1]);
11252            
11253 32         145 my $thisline;
11254 32         103 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11255              
11256            
11257              
11258 32   33     288 while (!$_matched && !$commit)
11259             {
11260            
11261 32 50       115 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11262             Parse::RecDescent::_tracefirst($_[1]),
11263             q{bodytype},
11264             $tracelevel)
11265             if defined $::RD_TRACE;
11266 32         106 my $thisprod = $thisrule->{"prods"}[0];
11267 32         77 $text = $_[1];
11268 32         55 my $_savetext;
11269 32         82 @item = (q{bodytype});
11270 32         96 %item = (__RULE__ => q{bodytype});
11271 32         58 my $repcount = 0;
11272              
11273              
11274 32 50       114 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
11275             Parse::RecDescent::_tracefirst($text),
11276             q{bodytype},
11277             $tracelevel)
11278             if defined $::RD_TRACE;
11279 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         408  
  32         55  
11280 32         80 $expectation->is(q{})->at($text);
11281 32 100   32   338 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  32         87  
11282             {
11283            
11284 20 50       62 Parse::RecDescent::_trace(q{<>},
11285             Parse::RecDescent::_tracefirst($text),
11286             q{bodytype},
11287             $tracelevel)
11288             if defined $::RD_TRACE;
11289 20         80 $expectation->failed();
11290 20         77 last;
11291             }
11292 12 50       61 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
11293             . $_tok . q{]},
11294              
11295             Parse::RecDescent::_tracefirst($text),
11296             q{bodytype},
11297             $tracelevel)
11298             if defined $::RD_TRACE;
11299 12         35 $item{q{STRING}} = $_tok;
11300 12         35 push @item, $_tok;
11301            
11302             }
11303              
11304 12 50       35 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
11305             Parse::RecDescent::_tracefirst($text),
11306             q{bodytype},
11307             $tracelevel)
11308             if defined $::RD_TRACE;
11309              
11310              
11311              
11312 12         24 $_matched = 1;
11313 12         26 last;
11314             }
11315              
11316             splice
11317 32 100       121 @{$thisparser->{deferred}}, $def_at unless $_matched;
  20         70  
11318            
11319 32 100 66     166 unless ( $_matched || defined($score) )
11320             {
11321 20         40 splice @{$thisparser->{deferred}}, $def_at;
  20         53  
11322            
11323              
11324 20         43 $_[1] = $text; # NOT SURE THIS IS NEEDED
11325 20 50       64 Parse::RecDescent::_trace(q{<>},
11326             Parse::RecDescent::_tracefirst($_[1]),
11327             q{bodytype},
11328             $tracelevel)
11329             if defined $::RD_TRACE;
11330 20         115 return undef;
11331             }
11332 12 50 33     73 if (!defined($return) && defined($score))
11333             {
11334 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11335             q{bodytype},
11336             $tracelevel)
11337             if defined $::RD_TRACE;
11338 0         0 $return = $score_return;
11339             }
11340 12         24 splice @{$thisparser->{errors}}, $err_at;
  12         35  
11341 12 50       62 $return = $item[$#item] unless defined $return;
11342 12 50       41 if (defined $::RD_TRACE)
11343             {
11344 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11345             $return . q{])}, "",
11346             q{bodytype},
11347             $tracelevel);
11348 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11349             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11350             Parse::RecDescent::_tracefirst($text),
11351             , q{bodytype},
11352             $tracelevel)
11353             }
11354 12         34 $_[1] = $text;
11355 12         76 return $return;
11356             }
11357              
11358             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11359             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::messageid
11360             {
11361 24     24   65 my $thisparser = $_[0];
11362 1     1   8 use vars q{$tracelevel};
  1         3  
  1         340  
11363 24   50     80 local $tracelevel = ($tracelevel||0)+1;
11364 24         58 $ERRORS = 0;
11365 24         76 my $thisrule = $thisparser->{"rules"}{"messageid"};
11366              
11367 24 50       93 Parse::RecDescent::_trace(q{Trying rule: [messageid]},
11368             Parse::RecDescent::_tracefirst($_[1]),
11369             q{messageid},
11370             $tracelevel)
11371             if defined $::RD_TRACE;
11372              
11373 24         40 my $def_at = @{$thisparser->{deferred}};
  24         65  
11374 24         45 my $err_at = @{$thisparser->{errors}};
  24         63  
11375              
11376 24         97 my $score;
11377             my $score_return;
11378 24         0 my $_tok;
11379 24         49 my $return = undef;
11380 24         49 my $_matched=0;
11381 24         45 my $commit=0;
11382 24         53 my @item = ();
11383 24         55 my %item = ();
11384 24         42 my $repeating = $_[2];
11385 24         41 my $_noactions = $_[3];
11386 24 50       79 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         48  
  24         54  
11387 24         62 my $_itempos = $_[5];
11388 24 50       86 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11389 24         75 my $text;
11390             my $lastsep;
11391 24         0 my $current_match;
11392 24         84 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
11393 24         189 $expectation->at($_[1]);
11394            
11395 24         116 my $thisline;
11396 24         125 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11397              
11398            
11399              
11400 24   33     241 while (!$_matched && !$commit)
11401             {
11402            
11403 24 50       70 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11404             Parse::RecDescent::_tracefirst($_[1]),
11405             q{messageid},
11406             $tracelevel)
11407             if defined $::RD_TRACE;
11408 24         88 my $thisprod = $thisrule->{"prods"}[0];
11409 24         62 $text = $_[1];
11410 24         45 my $_savetext;
11411 24         58 @item = (q{messageid});
11412 24         60 %item = (__RULE__ => q{messageid});
11413 24         48 my $repcount = 0;
11414              
11415              
11416 24 50       92 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
11417             Parse::RecDescent::_tracefirst($text),
11418             q{messageid},
11419             $tracelevel)
11420             if defined $::RD_TRACE;
11421 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         290  
  24         36  
11422 24         76 $expectation->is(q{})->at($text);
11423 24 50   24   266 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         81  
11424             {
11425            
11426 24 50       76 Parse::RecDescent::_trace(q{<>},
11427             Parse::RecDescent::_tracefirst($text),
11428             q{messageid},
11429             $tracelevel)
11430             if defined $::RD_TRACE;
11431 24         87 $expectation->failed();
11432 24         101 last;
11433             }
11434 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
11435             . $_tok . q{]},
11436              
11437             Parse::RecDescent::_tracefirst($text),
11438             q{messageid},
11439             $tracelevel)
11440             if defined $::RD_TRACE;
11441 0         0 $item{q{NIL}} = $_tok;
11442 0         0 push @item, $_tok;
11443            
11444             }
11445              
11446 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
11447             Parse::RecDescent::_tracefirst($text),
11448             q{messageid},
11449             $tracelevel)
11450             if defined $::RD_TRACE;
11451              
11452              
11453              
11454 0         0 $_matched = 1;
11455 0         0 last;
11456             }
11457              
11458             splice
11459 24 50       120 @{$thisparser->{deferred}}, $def_at unless $_matched;
  24         69  
11460            
11461 24   33     138 while (!$_matched && !$commit)
11462             {
11463            
11464 24 50       66 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11465             Parse::RecDescent::_tracefirst($_[1]),
11466             q{messageid},
11467             $tracelevel)
11468             if defined $::RD_TRACE;
11469 24         63 my $thisprod = $thisrule->{"prods"}[1];
11470 24         52 $text = $_[1];
11471 24         40 my $_savetext;
11472 24         66 @item = (q{messageid});
11473 24         76 %item = (__RULE__ => q{messageid});
11474 24         48 my $repcount = 0;
11475              
11476              
11477 24 50       75 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
11478             Parse::RecDescent::_tracefirst($text),
11479             q{messageid},
11480             $tracelevel)
11481             if defined $::RD_TRACE;
11482 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         470  
  24         50  
11483 24         84 $expectation->is(q{})->at($text);
11484 24 50   24   275 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         54  
11485             {
11486            
11487 0 0       0 Parse::RecDescent::_trace(q{<>},
11488             Parse::RecDescent::_tracefirst($text),
11489             q{messageid},
11490             $tracelevel)
11491             if defined $::RD_TRACE;
11492 0         0 $expectation->failed();
11493 0         0 last;
11494             }
11495 24 50       115 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
11496             . $_tok . q{]},
11497              
11498             Parse::RecDescent::_tracefirst($text),
11499             q{messageid},
11500             $tracelevel)
11501             if defined $::RD_TRACE;
11502 24         69 $item{q{STRING}} = $_tok;
11503 24         68 push @item, $_tok;
11504            
11505             }
11506              
11507 24 50       65 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
11508             Parse::RecDescent::_tracefirst($text),
11509             q{messageid},
11510             $tracelevel)
11511             if defined $::RD_TRACE;
11512              
11513              
11514              
11515 24         47 $_matched = 1;
11516 24         58 last;
11517             }
11518              
11519             splice
11520 24 50       73 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11521            
11522 24 50 33     90 unless ( $_matched || defined($score) )
11523             {
11524 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
11525            
11526              
11527 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
11528 0 0       0 Parse::RecDescent::_trace(q{<>},
11529             Parse::RecDescent::_tracefirst($_[1]),
11530             q{messageid},
11531             $tracelevel)
11532             if defined $::RD_TRACE;
11533 0         0 return undef;
11534             }
11535 24 50 33     131 if (!defined($return) && defined($score))
11536             {
11537 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11538             q{messageid},
11539             $tracelevel)
11540             if defined $::RD_TRACE;
11541 0         0 $return = $score_return;
11542             }
11543 24         46 splice @{$thisparser->{errors}}, $err_at;
  24         65  
11544 24 50       78 $return = $item[$#item] unless defined $return;
11545 24 50       87 if (defined $::RD_TRACE)
11546             {
11547 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11548             $return . q{])}, "",
11549             q{messageid},
11550             $tracelevel);
11551 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11552             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11553             Parse::RecDescent::_tracefirst($text),
11554             , q{messageid},
11555             $tracelevel)
11556             }
11557 24         53 $_[1] = $text;
11558 24         154 return $return;
11559             }
11560              
11561             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11562             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::value
11563             {
11564 129     129   281 my $thisparser = $_[0];
11565 1     1   8 use vars q{$tracelevel};
  1         2  
  1         323  
11566 129   50     370 local $tracelevel = ($tracelevel||0)+1;
11567 129         248 $ERRORS = 0;
11568 129         360 my $thisrule = $thisparser->{"rules"}{"value"};
11569              
11570 129 50       378 Parse::RecDescent::_trace(q{Trying rule: [value]},
11571             Parse::RecDescent::_tracefirst($_[1]),
11572             q{value},
11573             $tracelevel)
11574             if defined $::RD_TRACE;
11575              
11576 129         223 my $def_at = @{$thisparser->{deferred}};
  129         315  
11577 129         249 my $err_at = @{$thisparser->{errors}};
  129         328  
11578              
11579 129         363 my $score;
11580             my $score_return;
11581 129         0 my $_tok;
11582 129         231 my $return = undef;
11583 129         200 my $_matched=0;
11584 129         210 my $commit=0;
11585 129         273 my @item = ();
11586 129         228 my %item = ();
11587 129         219 my $repeating = $_[2];
11588 129         214 my $_noactions = $_[3];
11589 129 50       326 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  129         235  
  129         252  
11590 129         278 my $_itempos = $_[5];
11591 129 50       376 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11592 129         396 my $text;
11593             my $lastsep;
11594 129         0 my $current_match;
11595 129         395 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or NUMBER, or STRING, or KVPAIRS});
11596 129         921 $expectation->at($_[1]);
11597            
11598 129         499 my $thisline;
11599 129         510 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11600              
11601            
11602              
11603 129   33     1138 while (!$_matched && !$commit)
11604             {
11605            
11606 129 50       342 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11607             Parse::RecDescent::_tracefirst($_[1]),
11608             q{value},
11609             $tracelevel)
11610             if defined $::RD_TRACE;
11611 129         401 my $thisprod = $thisrule->{"prods"}[0];
11612 129         244 $text = $_[1];
11613 129         201 my $_savetext;
11614 129         266 @item = (q{value});
11615 129         281 %item = (__RULE__ => q{value});
11616 129         246 my $repcount = 0;
11617              
11618              
11619 129 50       314 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
11620             Parse::RecDescent::_tracefirst($text),
11621             q{value},
11622             $tracelevel)
11623             if defined $::RD_TRACE;
11624 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         330  
  129         243  
11625 129         306 $expectation->is(q{})->at($text);
11626 129 100   129   1243 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         270  
11627             {
11628            
11629 117 50       286 Parse::RecDescent::_trace(q{<>},
11630             Parse::RecDescent::_tracefirst($text),
11631             q{value},
11632             $tracelevel)
11633             if defined $::RD_TRACE;
11634 117         363 $expectation->failed();
11635 117         445 last;
11636             }
11637 12 50       63 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
11638             . $_tok . q{]},
11639              
11640             Parse::RecDescent::_tracefirst($text),
11641             q{value},
11642             $tracelevel)
11643             if defined $::RD_TRACE;
11644 12         37 $item{q{NIL}} = $_tok;
11645 12         31 push @item, $_tok;
11646            
11647             }
11648              
11649 12 50       41 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
11650             Parse::RecDescent::_tracefirst($text),
11651             q{value},
11652             $tracelevel)
11653             if defined $::RD_TRACE;
11654              
11655              
11656              
11657 12         27 $_matched = 1;
11658 12         27 last;
11659             }
11660              
11661             splice
11662 129 100       548 @{$thisparser->{deferred}}, $def_at unless $_matched;
  117         294  
11663            
11664 129   66     579 while (!$_matched && !$commit)
11665             {
11666            
11667 117 50       327 Parse::RecDescent::_trace(q{Trying production: [NUMBER]},
11668             Parse::RecDescent::_tracefirst($_[1]),
11669             q{value},
11670             $tracelevel)
11671             if defined $::RD_TRACE;
11672 117         325 my $thisprod = $thisrule->{"prods"}[1];
11673 117         247 $text = $_[1];
11674 117         185 my $_savetext;
11675 117         326 @item = (q{value});
11676 117         382 %item = (__RULE__ => q{value});
11677 117         240 my $repcount = 0;
11678              
11679              
11680 117 50       298 Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]},
11681             Parse::RecDescent::_tracefirst($text),
11682             q{value},
11683             $tracelevel)
11684             if defined $::RD_TRACE;
11685 1     1   9 if (1) { no strict qw{refs};
  1         3  
  1         296  
  117         253  
11686 117         358 $expectation->is(q{})->at($text);
11687 117 50   117   1336 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  117         290  
11688             {
11689            
11690 117 50       290 Parse::RecDescent::_trace(q{<>},
11691             Parse::RecDescent::_tracefirst($text),
11692             q{value},
11693             $tracelevel)
11694             if defined $::RD_TRACE;
11695 117         408 $expectation->failed();
11696 117         424 last;
11697             }
11698 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [}
11699             . $_tok . q{]},
11700              
11701             Parse::RecDescent::_tracefirst($text),
11702             q{value},
11703             $tracelevel)
11704             if defined $::RD_TRACE;
11705 0         0 $item{q{NUMBER}} = $_tok;
11706 0         0 push @item, $_tok;
11707            
11708             }
11709              
11710 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<},
11711             Parse::RecDescent::_tracefirst($text),
11712             q{value},
11713             $tracelevel)
11714             if defined $::RD_TRACE;
11715              
11716              
11717              
11718 0         0 $_matched = 1;
11719 0         0 last;
11720             }
11721              
11722             splice
11723 129 100       467 @{$thisparser->{deferred}}, $def_at unless $_matched;
  117         302  
11724            
11725 129   66     564 while (!$_matched && !$commit)
11726             {
11727            
11728 117 50       311 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11729             Parse::RecDescent::_tracefirst($_[1]),
11730             q{value},
11731             $tracelevel)
11732             if defined $::RD_TRACE;
11733 117         263 my $thisprod = $thisrule->{"prods"}[2];
11734 117         217 $text = $_[1];
11735 117         191 my $_savetext;
11736 117         280 @item = (q{value});
11737 117         322 %item = (__RULE__ => q{value});
11738 117         579 my $repcount = 0;
11739              
11740              
11741 117 50       361 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
11742             Parse::RecDescent::_tracefirst($text),
11743             q{value},
11744             $tracelevel)
11745             if defined $::RD_TRACE;
11746 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         299  
  117         242  
11747 117         347 $expectation->is(q{})->at($text);
11748 117 100   117   1297 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  117         281  
11749             {
11750            
11751 16 50       67 Parse::RecDescent::_trace(q{<>},
11752             Parse::RecDescent::_tracefirst($text),
11753             q{value},
11754             $tracelevel)
11755             if defined $::RD_TRACE;
11756 16         76 $expectation->failed();
11757 16         60 last;
11758             }
11759 101 50       370 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
11760             . $_tok . q{]},
11761              
11762             Parse::RecDescent::_tracefirst($text),
11763             q{value},
11764             $tracelevel)
11765             if defined $::RD_TRACE;
11766 101         296 $item{q{STRING}} = $_tok;
11767 101         254 push @item, $_tok;
11768            
11769             }
11770              
11771 101 50       272 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
11772             Parse::RecDescent::_tracefirst($text),
11773             q{value},
11774             $tracelevel)
11775             if defined $::RD_TRACE;
11776              
11777              
11778              
11779 101         197 $_matched = 1;
11780 101         213 last;
11781             }
11782              
11783             splice
11784 129 100       359 @{$thisparser->{deferred}}, $def_at unless $_matched;
  16         49  
11785            
11786 129   66     398 while (!$_matched && !$commit)
11787             {
11788            
11789 16 50       54 Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]},
11790             Parse::RecDescent::_tracefirst($_[1]),
11791             q{value},
11792             $tracelevel)
11793             if defined $::RD_TRACE;
11794 16         53 my $thisprod = $thisrule->{"prods"}[3];
11795 16         44 $text = $_[1];
11796 16         47 my $_savetext;
11797 16         51 @item = (q{value});
11798 16         48 %item = (__RULE__ => q{value});
11799 16         38 my $repcount = 0;
11800              
11801              
11802 16 50       69 Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]},
11803             Parse::RecDescent::_tracefirst($text),
11804             q{value},
11805             $tracelevel)
11806             if defined $::RD_TRACE;
11807 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         551  
  16         34  
11808 16         56 $expectation->is(q{})->at($text);
11809 16 50   16   208 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  16         43  
11810             {
11811            
11812 0 0       0 Parse::RecDescent::_trace(q{<>},
11813             Parse::RecDescent::_tracefirst($text),
11814             q{value},
11815             $tracelevel)
11816             if defined $::RD_TRACE;
11817 0         0 $expectation->failed();
11818 0         0 last;
11819             }
11820 16 50       81 Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [}
11821             . $_tok . q{]},
11822              
11823             Parse::RecDescent::_tracefirst($text),
11824             q{value},
11825             $tracelevel)
11826             if defined $::RD_TRACE;
11827 16         48 $item{q{KVPAIRS}} = $_tok;
11828 16         43 push @item, $_tok;
11829            
11830             }
11831              
11832 16 50       50 Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<},
11833             Parse::RecDescent::_tracefirst($text),
11834             q{value},
11835             $tracelevel)
11836             if defined $::RD_TRACE;
11837              
11838              
11839              
11840 16         31 $_matched = 1;
11841 16         31 last;
11842             }
11843              
11844             splice
11845 129 50       317 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11846            
11847 129 50 33     426 unless ( $_matched || defined($score) )
11848             {
11849 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
11850            
11851              
11852 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
11853 0 0       0 Parse::RecDescent::_trace(q{<>},
11854             Parse::RecDescent::_tracefirst($_[1]),
11855             q{value},
11856             $tracelevel)
11857             if defined $::RD_TRACE;
11858 0         0 return undef;
11859             }
11860 129 50 33     649 if (!defined($return) && defined($score))
11861             {
11862 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11863             q{value},
11864             $tracelevel)
11865             if defined $::RD_TRACE;
11866 0         0 $return = $score_return;
11867             }
11868 129         254 splice @{$thisparser->{errors}}, $err_at;
  129         327  
11869 129 50       369 $return = $item[$#item] unless defined $return;
11870 129 50       366 if (defined $::RD_TRACE)
11871             {
11872 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11873             $return . q{])}, "",
11874             q{value},
11875             $tracelevel);
11876 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11877             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11878             Parse::RecDescent::_tracefirst($text),
11879             , q{value},
11880             $tracelevel)
11881             }
11882 129         300 $_[1] = $text;
11883 129         741 return $return;
11884             }
11885              
11886             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11887             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::personalname
11888             {
11889 94     94   191 my $thisparser = $_[0];
11890 1     1   8 use vars q{$tracelevel};
  1         3  
  1         352  
11891 94   50     244 local $tracelevel = ($tracelevel||0)+1;
11892 94         172 $ERRORS = 0;
11893 94         231 my $thisrule = $thisparser->{"rules"}{"personalname"};
11894              
11895 94 50       238 Parse::RecDescent::_trace(q{Trying rule: [personalname]},
11896             Parse::RecDescent::_tracefirst($_[1]),
11897             q{personalname},
11898             $tracelevel)
11899             if defined $::RD_TRACE;
11900              
11901 94         178 my $def_at = @{$thisparser->{deferred}};
  94         216  
11902 94         157 my $err_at = @{$thisparser->{errors}};
  94         183  
11903              
11904 94         305 my $score;
11905             my $score_return;
11906 94         0 my $_tok;
11907 94         145 my $return = undef;
11908 94         168 my $_matched=0;
11909 94         168 my $commit=0;
11910 94         187 my @item = ();
11911 94         187 my %item = ();
11912 94         196 my $repeating = $_[2];
11913 94         141 my $_noactions = $_[3];
11914 94 50       253 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         182  
  94         191  
11915 94         163 my $_itempos = $_[5];
11916 94 50       243 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11917 94         261 my $text;
11918             my $lastsep;
11919 94         0 my $current_match;
11920 94         273 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
11921 94         640 $expectation->at($_[1]);
11922            
11923 94         525 my $thisline;
11924 94         300 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11925              
11926            
11927              
11928 94   33     790 while (!$_matched && !$commit)
11929             {
11930            
11931 94 50       303 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11932             Parse::RecDescent::_tracefirst($_[1]),
11933             q{personalname},
11934             $tracelevel)
11935             if defined $::RD_TRACE;
11936 94         264 my $thisprod = $thisrule->{"prods"}[0];
11937 94         350 $text = $_[1];
11938 94         161 my $_savetext;
11939 94         198 @item = (q{personalname});
11940 94         228 %item = (__RULE__ => q{personalname});
11941 94         150 my $repcount = 0;
11942              
11943              
11944 94 50       257 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
11945             Parse::RecDescent::_tracefirst($text),
11946             q{personalname},
11947             $tracelevel)
11948             if defined $::RD_TRACE;
11949 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         298  
  94         133  
11950 94         249 $expectation->is(q{})->at($text);
11951 94 100   94   937 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         194  
11952             {
11953            
11954 70 50       195 Parse::RecDescent::_trace(q{<>},
11955             Parse::RecDescent::_tracefirst($text),
11956             q{personalname},
11957             $tracelevel)
11958             if defined $::RD_TRACE;
11959 70         209 $expectation->failed();
11960 70         257 last;
11961             }
11962 24 50       137 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
11963             . $_tok . q{]},
11964              
11965             Parse::RecDescent::_tracefirst($text),
11966             q{personalname},
11967             $tracelevel)
11968             if defined $::RD_TRACE;
11969 24         69 $item{q{NIL}} = $_tok;
11970 24         70 push @item, $_tok;
11971            
11972             }
11973              
11974 24 50       80 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
11975             Parse::RecDescent::_tracefirst($text),
11976             q{personalname},
11977             $tracelevel)
11978             if defined $::RD_TRACE;
11979              
11980              
11981              
11982 24         46 $_matched = 1;
11983 24         42 last;
11984             }
11985              
11986             splice
11987 94 100       353 @{$thisparser->{deferred}}, $def_at unless $_matched;
  70         175  
11988            
11989 94   66     367 while (!$_matched && !$commit)
11990             {
11991            
11992 70 50       157 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11993             Parse::RecDescent::_tracefirst($_[1]),
11994             q{personalname},
11995             $tracelevel)
11996             if defined $::RD_TRACE;
11997 70         147 my $thisprod = $thisrule->{"prods"}[1];
11998 70         182 $text = $_[1];
11999 70         115 my $_savetext;
12000 70         163 @item = (q{personalname});
12001 70         177 %item = (__RULE__ => q{personalname});
12002 70         122 my $repcount = 0;
12003              
12004              
12005 70 50       165 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
12006             Parse::RecDescent::_tracefirst($text),
12007             q{personalname},
12008             $tracelevel)
12009             if defined $::RD_TRACE;
12010 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         432  
  70         107  
12011 70         164 $expectation->is(q{})->at($text);
12012 70 50   70   727 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  70         176  
12013             {
12014            
12015 0 0       0 Parse::RecDescent::_trace(q{<>},
12016             Parse::RecDescent::_tracefirst($text),
12017             q{personalname},
12018             $tracelevel)
12019             if defined $::RD_TRACE;
12020 0         0 $expectation->failed();
12021 0         0 last;
12022             }
12023 70 50       250 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
12024             . $_tok . q{]},
12025              
12026             Parse::RecDescent::_tracefirst($text),
12027             q{personalname},
12028             $tracelevel)
12029             if defined $::RD_TRACE;
12030 70         169 $item{q{STRING}} = $_tok;
12031 70         146 push @item, $_tok;
12032            
12033             }
12034              
12035 70 50       203 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
12036             Parse::RecDescent::_tracefirst($text),
12037             q{personalname},
12038             $tracelevel)
12039             if defined $::RD_TRACE;
12040              
12041              
12042              
12043 70         130 $_matched = 1;
12044 70         131 last;
12045             }
12046              
12047             splice
12048 94 50       225 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
12049            
12050 94 50 33     236 unless ( $_matched || defined($score) )
12051             {
12052 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
12053            
12054              
12055 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
12056 0 0       0 Parse::RecDescent::_trace(q{<>},
12057             Parse::RecDescent::_tracefirst($_[1]),
12058             q{personalname},
12059             $tracelevel)
12060             if defined $::RD_TRACE;
12061 0         0 return undef;
12062             }
12063 94 50 33     380 if (!defined($return) && defined($score))
12064             {
12065 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12066             q{personalname},
12067             $tracelevel)
12068             if defined $::RD_TRACE;
12069 0         0 $return = $score_return;
12070             }
12071 94         164 splice @{$thisparser->{errors}}, $err_at;
  94         268  
12072 94 50       261 $return = $item[$#item] unless defined $return;
12073 94 50       228 if (defined $::RD_TRACE)
12074             {
12075 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12076             $return . q{])}, "",
12077             q{personalname},
12078             $tracelevel);
12079 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12080             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12081             Parse::RecDescent::_tracefirst($text),
12082             , q{personalname},
12083             $tracelevel)
12084             }
12085 94         220 $_[1] = $text;
12086 94         498 return $return;
12087             }
12088              
12089             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12090             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::cc
12091             {
12092 24     24   54 my $thisparser = $_[0];
12093 1     1   8 use vars q{$tracelevel};
  1         2  
  1         340  
12094 24   50     83 local $tracelevel = ($tracelevel||0)+1;
12095 24         50 $ERRORS = 0;
12096 24         79 my $thisrule = $thisparser->{"rules"}{"cc"};
12097              
12098 24 50       109 Parse::RecDescent::_trace(q{Trying rule: [cc]},
12099             Parse::RecDescent::_tracefirst($_[1]),
12100             q{cc},
12101             $tracelevel)
12102             if defined $::RD_TRACE;
12103              
12104 24         60 my $def_at = @{$thisparser->{deferred}};
  24         71  
12105 24         45 my $err_at = @{$thisparser->{errors}};
  24         68  
12106              
12107 24         83 my $score;
12108             my $score_return;
12109 24         0 my $_tok;
12110 24         46 my $return = undef;
12111 24         45 my $_matched=0;
12112 24         40 my $commit=0;
12113 24         69 my @item = ();
12114 24         52 my %item = ();
12115 24         46 my $repeating = $_[2];
12116 24         46 my $_noactions = $_[3];
12117 24 50       77 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         34  
  24         64  
12118 24         60 my $_itempos = $_[5];
12119 24 50       80 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12120 24         102 my $text;
12121             my $lastsep;
12122 24         0 my $current_match;
12123 24         99 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
12124 24         186 $expectation->at($_[1]);
12125            
12126 24         107 my $thisline;
12127 24         94 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12128              
12129            
12130              
12131 24   33     257 while (!$_matched && !$commit)
12132             {
12133            
12134 24 50       155 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
12135             Parse::RecDescent::_tracefirst($_[1]),
12136             q{cc},
12137             $tracelevel)
12138             if defined $::RD_TRACE;
12139 24         82 my $thisprod = $thisrule->{"prods"}[0];
12140 24         69 $text = $_[1];
12141 24         38 my $_savetext;
12142 24         64 @item = (q{cc});
12143 24         68 %item = (__RULE__ => q{cc});
12144 24         54 my $repcount = 0;
12145              
12146              
12147 24 50       71 Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]},
12148             Parse::RecDescent::_tracefirst($text),
12149             q{cc},
12150             $tracelevel)
12151             if defined $::RD_TRACE;
12152 1     1   7 if (1) { no strict qw{refs};
  1         91  
  1         418  
  24         39  
12153 24         78 $expectation->is(q{})->at($text);
12154 24 50   24   296 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         61  
12155             {
12156            
12157 0 0       0 Parse::RecDescent::_trace(q{<>},
12158             Parse::RecDescent::_tracefirst($text),
12159             q{cc},
12160             $tracelevel)
12161             if defined $::RD_TRACE;
12162 0         0 $expectation->failed();
12163 0         0 last;
12164             }
12165 24 50       115 Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [}
12166             . $_tok . q{]},
12167              
12168             Parse::RecDescent::_tracefirst($text),
12169             q{cc},
12170             $tracelevel)
12171             if defined $::RD_TRACE;
12172 24         70 $item{q{ADDRESSES}} = $_tok;
12173 24         56 push @item, $_tok;
12174            
12175             }
12176              
12177 24 50       81 Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<},
12178             Parse::RecDescent::_tracefirst($text),
12179             q{cc},
12180             $tracelevel)
12181             if defined $::RD_TRACE;
12182              
12183              
12184              
12185 24         54 $_matched = 1;
12186 24         50 last;
12187             }
12188              
12189             splice
12190 24 50       80 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
12191            
12192 24 50 33     116 unless ( $_matched || defined($score) )
12193             {
12194 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
12195            
12196              
12197 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
12198 0 0       0 Parse::RecDescent::_trace(q{<>},
12199             Parse::RecDescent::_tracefirst($_[1]),
12200             q{cc},
12201             $tracelevel)
12202             if defined $::RD_TRACE;
12203 0         0 return undef;
12204             }
12205 24 50 33     135 if (!defined($return) && defined($score))
12206             {
12207 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12208             q{cc},
12209             $tracelevel)
12210             if defined $::RD_TRACE;
12211 0         0 $return = $score_return;
12212             }
12213 24         44 splice @{$thisparser->{errors}}, $err_at;
  24         55  
12214 24 50       104 $return = $item[$#item] unless defined $return;
12215 24 50       77 if (defined $::RD_TRACE)
12216             {
12217 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12218             $return . q{])}, "",
12219             q{cc},
12220             $tracelevel);
12221 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12222             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12223             Parse::RecDescent::_tracefirst($text),
12224             , q{cc},
12225             $tracelevel)
12226             }
12227 24         72 $_[1] = $text;
12228 24         163 return $return;
12229             }
12230              
12231             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12232             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER
12233             {
12234 249     249   460 my $thisparser = $_[0];
12235 1     1   8 use vars q{$tracelevel};
  1         3  
  1         920  
12236 249   50     686 local $tracelevel = ($tracelevel||0)+1;
12237 249         421 $ERRORS = 0;
12238 249         575 my $thisrule = $thisparser->{"rules"}{"NUMBER"};
12239              
12240 249 50       576 Parse::RecDescent::_trace(q{Trying rule: [NUMBER]},
12241             Parse::RecDescent::_tracefirst($_[1]),
12242             q{NUMBER},
12243             $tracelevel)
12244             if defined $::RD_TRACE;
12245              
12246 249         363 my $def_at = @{$thisparser->{deferred}};
  249         504  
12247 249         392 my $err_at = @{$thisparser->{errors}};
  249         478  
12248              
12249 249         687 my $score;
12250             my $score_return;
12251 249         0 my $_tok;
12252 249         415 my $return = undef;
12253 249         484 my $_matched=0;
12254 249         482 my $commit=0;
12255 249         456 my @item = ();
12256 249         456 my %item = ();
12257 249         378 my $repeating = $_[2];
12258 249         386 my $_noactions = $_[3];
12259 249 50       585 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  249         370  
  249         528  
12260 249         438 my $_itempos = $_[5];
12261 249 50       623 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12262 249         653 my $text;
12263             my $lastsep;
12264 249         0 my $current_match;
12265 249         803 my $expectation = new Parse::RecDescent::Expectation(q{/^(\\d+)/});
12266 249         1787 $expectation->at($_[1]);
12267            
12268 249         1035 my $thisline;
12269 249         806 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12270              
12271            
12272              
12273 249   33     2038 while (!$_matched && !$commit)
12274             {
12275            
12276 249 50       618 Parse::RecDescent::_trace(q{Trying production: [/^(\\d+)/]},
12277             Parse::RecDescent::_tracefirst($_[1]),
12278             q{NUMBER},
12279             $tracelevel)
12280             if defined $::RD_TRACE;
12281 249         558 my $thisprod = $thisrule->{"prods"}[0];
12282 249         469 $text = $_[1];
12283 249         408 my $_savetext;
12284 249         488 @item = (q{NUMBER});
12285 249         498 %item = (__RULE__ => q{NUMBER});
12286 249         417 my $repcount = 0;
12287              
12288              
12289 249 50       487 Parse::RecDescent::_trace(q{Trying terminal: [/^(\\d+)/]}, Parse::RecDescent::_tracefirst($text),
12290             q{NUMBER},
12291             $tracelevel)
12292             if defined $::RD_TRACE;
12293 249         540 undef $lastsep;
12294 249         614 $expectation->is(q{})->at($text);
12295            
12296              
12297 249 100 66     2787 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^(\d+))/)
  249 100       2568  
12298             {
12299 119 50       607 $text = $lastsep . $text if defined $lastsep;
12300 119         455 $expectation->failed();
12301 119 50       543 Parse::RecDescent::_trace(q{<>},
12302             Parse::RecDescent::_tracefirst($text))
12303             if defined $::RD_TRACE;
12304              
12305 119         302 last;
12306             }
12307 130         754 $current_match = substr($text, $-[0], $+[0] - $-[0]);
12308 130         569 substr($text,0,length($current_match),q{});
12309 130 50       349 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12310             . $current_match . q{])},
12311             Parse::RecDescent::_tracefirst($text))
12312             if defined $::RD_TRACE;
12313 130         385 push @item, $item{__PATTERN1__}=$current_match;
12314            
12315              
12316 130 50       335 Parse::RecDescent::_trace(q{Trying action},
12317             Parse::RecDescent::_tracefirst($text),
12318             q{NUMBER},
12319             $tracelevel)
12320             if defined $::RD_TRACE;
12321            
12322              
12323 130 50       271 $_tok = ($_noactions) ? 0 : do { $return = $item[1] };
  130         336  
12324 130 50       362 unless (defined $_tok)
12325             {
12326 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
12327             if defined $::RD_TRACE;
12328 0         0 last;
12329             }
12330 130 50       338 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12331             . $_tok . q{])},
12332             Parse::RecDescent::_tracefirst($text))
12333             if defined $::RD_TRACE;
12334 130         282 push @item, $_tok;
12335 130         286 $item{__ACTION1__}=$_tok;
12336            
12337              
12338 130 50       344 Parse::RecDescent::_trace(q{>>Matched production: [/^(\\d+)/]<<},
12339             Parse::RecDescent::_tracefirst($text),
12340             q{NUMBER},
12341             $tracelevel)
12342             if defined $::RD_TRACE;
12343              
12344              
12345              
12346 130         214 $_matched = 1;
12347 130         266 last;
12348             }
12349              
12350             splice
12351 249 100       599 @{$thisparser->{deferred}}, $def_at unless $_matched;
  119         354  
12352            
12353 249 100 66     819 unless ( $_matched || defined($score) )
12354             {
12355 119         213 splice @{$thisparser->{deferred}}, $def_at;
  119         232  
12356            
12357              
12358 119         274 $_[1] = $text; # NOT SURE THIS IS NEEDED
12359 119 50       321 Parse::RecDescent::_trace(q{<>},
12360             Parse::RecDescent::_tracefirst($_[1]),
12361             q{NUMBER},
12362             $tracelevel)
12363             if defined $::RD_TRACE;
12364 119         605 return undef;
12365             }
12366 130 50 33     387 if (!defined($return) && defined($score))
12367             {
12368 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12369             q{NUMBER},
12370             $tracelevel)
12371             if defined $::RD_TRACE;
12372 0         0 $return = $score_return;
12373             }
12374 130         260 splice @{$thisparser->{errors}}, $err_at;
  130         299  
12375 130 50       427 $return = $item[$#item] unless defined $return;
12376 130 50       338 if (defined $::RD_TRACE)
12377             {
12378 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12379             $return . q{])}, "",
12380             q{NUMBER},
12381             $tracelevel);
12382 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12383             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12384             Parse::RecDescent::_tracefirst($text),
12385             , q{NUMBER},
12386             $tracelevel)
12387             }
12388 130         405 $_[1] = $text;
12389 130         1033 return $return;
12390             }
12391              
12392             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12393             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textmessage
12394             {
12395 92     92   203 my $thisparser = $_[0];
12396 1     1   9 use vars q{$tracelevel};
  1         3  
  1         374  
12397 92   50     374 local $tracelevel = ($tracelevel||0)+1;
12398 92         187 $ERRORS = 0;
12399 92         289 my $thisrule = $thisparser->{"rules"}{"textmessage"};
12400              
12401 92 50       245 Parse::RecDescent::_trace(q{Trying rule: [textmessage]},
12402             Parse::RecDescent::_tracefirst($_[1]),
12403             q{textmessage},
12404             $tracelevel)
12405             if defined $::RD_TRACE;
12406              
12407 92         154 my $def_at = @{$thisparser->{deferred}};
  92         214  
12408 92         159 my $err_at = @{$thisparser->{errors}};
  92         191  
12409              
12410 92         328 my $score;
12411             my $score_return;
12412 92         0 my $_tok;
12413 92         246 my $return = undef;
12414 92         162 my $_matched=0;
12415 92         178 my $commit=0;
12416 92         225 my @item = ();
12417 92         209 my %item = ();
12418 92         200 my $repeating = $_[2];
12419 92         205 my $_noactions = $_[3];
12420 92 50       268 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  92         158  
  92         229  
12421 92         199 my $_itempos = $_[5];
12422 92 50       362 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12423 92         310 my $text;
12424             my $lastsep;
12425 92         0 my $current_match;
12426 92         337 my $expectation = new Parse::RecDescent::Expectation(q{TEXT});
12427 92         715 $expectation->at($_[1]);
12428            
12429 92         369 my $thisline;
12430 92         381 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12431              
12432            
12433              
12434 92   33     927 while (!$_matched && !$commit)
12435             {
12436            
12437 92 50       296 Parse::RecDescent::_trace(q{Trying production: [TEXT basicfields textlines bodyMD5 bodydisp bodylang bodyextra]},
12438             Parse::RecDescent::_tracefirst($_[1]),
12439             q{textmessage},
12440             $tracelevel)
12441             if defined $::RD_TRACE;
12442 92         275 my $thisprod = $thisrule->{"prods"}[0];
12443 92         210 $text = $_[1];
12444 92         165 my $_savetext;
12445 92         208 @item = (q{textmessage});
12446 92         209 %item = (__RULE__ => q{textmessage});
12447 92         170 my $repcount = 0;
12448              
12449              
12450 92 50       266 Parse::RecDescent::_trace(q{Trying subrule: [TEXT]},
12451             Parse::RecDescent::_tracefirst($text),
12452             q{textmessage},
12453             $tracelevel)
12454             if defined $::RD_TRACE;
12455 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         249  
  92         164  
12456 92         256 $expectation->is(q{})->at($text);
12457 92 100   92   1058 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::TEXT($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  92         205  
12458             {
12459            
12460 53 50       185 Parse::RecDescent::_trace(q{<>},
12461             Parse::RecDescent::_tracefirst($text),
12462             q{textmessage},
12463             $tracelevel)
12464             if defined $::RD_TRACE;
12465 53         189 $expectation->failed();
12466 53         186 last;
12467             }
12468 39 50       194 Parse::RecDescent::_trace(q{>>Matched subrule: [TEXT]<< (return value: [}
12469             . $_tok . q{]},
12470              
12471             Parse::RecDescent::_tracefirst($text),
12472             q{textmessage},
12473             $tracelevel)
12474             if defined $::RD_TRACE;
12475 39         111 $item{q{TEXT}} = $_tok;
12476 39         101 push @item, $_tok;
12477            
12478             }
12479              
12480            
12481              
12482 39 50       137 Parse::RecDescent::_trace(q{Trying directive: []},
12483             Parse::RecDescent::_tracefirst($text),
12484             q{textmessage},
12485             $tracelevel)
12486             if defined $::RD_TRACE;
12487 39         83 $_tok = do { $commit = 1 };
  39         128  
12488 39 50       120 if (defined($_tok))
12489             {
12490 39 50       137 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
12491             . $_tok . q{])},
12492             Parse::RecDescent::_tracefirst($text))
12493             if defined $::RD_TRACE;
12494             }
12495             else
12496             {
12497 0 0       0 Parse::RecDescent::_trace(q{<>},
12498             Parse::RecDescent::_tracefirst($text))
12499             if defined $::RD_TRACE;
12500             }
12501            
12502 39 50       140 last unless defined $_tok;
12503 39         118 push @item, $item{__DIRECTIVE1__}=$_tok;
12504            
12505              
12506 39 50       109 Parse::RecDescent::_trace(q{Trying subrule: [basicfields]},
12507             Parse::RecDescent::_tracefirst($text),
12508             q{textmessage},
12509             $tracelevel)
12510             if defined $::RD_TRACE;
12511 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         1309  
  39         65  
12512 39         163 $expectation->is(q{basicfields})->at($text);
12513 39 50   39   538 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  39         100  
12514             {
12515            
12516 0 0       0 Parse::RecDescent::_trace(q{<>},
12517             Parse::RecDescent::_tracefirst($text),
12518             q{textmessage},
12519             $tracelevel)
12520             if defined $::RD_TRACE;
12521 0         0 $expectation->failed();
12522 0         0 last;
12523             }
12524 39 50       163 Parse::RecDescent::_trace(q{>>Matched subrule: [basicfields]<< (return value: [}
12525             . $_tok . q{]},
12526              
12527             Parse::RecDescent::_tracefirst($text),
12528             q{textmessage},
12529             $tracelevel)
12530             if defined $::RD_TRACE;
12531 39         116 $item{q{basicfields}} = $_tok;
12532 39         110 push @item, $_tok;
12533            
12534             }
12535              
12536 39 50       128 Parse::RecDescent::_trace(q{Trying repeated subrule: [textlines]},
12537             Parse::RecDescent::_tracefirst($text),
12538             q{textmessage},
12539             $tracelevel)
12540             if defined $::RD_TRACE;
12541 39         145 $expectation->is(q{textlines})->at($text);
12542            
12543 39 50   39   564 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         94  
12544             {
12545 0 0       0 Parse::RecDescent::_trace(q{<>},
12546             Parse::RecDescent::_tracefirst($text),
12547             q{textmessage},
12548             $tracelevel)
12549             if defined $::RD_TRACE;
12550 0         0 last;
12551             }
12552 39 50       710 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [textlines]<< (}
12553             . @$_tok . q{ times)},
12554              
12555             Parse::RecDescent::_tracefirst($text),
12556             q{textmessage},
12557             $tracelevel)
12558             if defined $::RD_TRACE;
12559 39         140 $item{q{textlines(?)}} = $_tok;
12560 39         100 push @item, $_tok;
12561            
12562              
12563              
12564 39 50       122 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]},
12565             Parse::RecDescent::_tracefirst($text),
12566             q{textmessage},
12567             $tracelevel)
12568             if defined $::RD_TRACE;
12569 39         138 $expectation->is(q{bodyMD5})->at($text);
12570            
12571 39 50   39   509 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         105  
12572             {
12573 0 0       0 Parse::RecDescent::_trace(q{<>},
12574             Parse::RecDescent::_tracefirst($text),
12575             q{textmessage},
12576             $tracelevel)
12577             if defined $::RD_TRACE;
12578 0         0 last;
12579             }
12580 39 50       714 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (}
12581             . @$_tok . q{ times)},
12582              
12583             Parse::RecDescent::_tracefirst($text),
12584             q{textmessage},
12585             $tracelevel)
12586             if defined $::RD_TRACE;
12587 39         115 $item{q{bodyMD5(?)}} = $_tok;
12588 39         98 push @item, $_tok;
12589            
12590              
12591              
12592 39 50       120 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]},
12593             Parse::RecDescent::_tracefirst($text),
12594             q{textmessage},
12595             $tracelevel)
12596             if defined $::RD_TRACE;
12597 39         132 $expectation->is(q{bodydisp})->at($text);
12598            
12599 39 50   39   786 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         94  
12600             {
12601 0 0       0 Parse::RecDescent::_trace(q{<>},
12602             Parse::RecDescent::_tracefirst($text),
12603             q{textmessage},
12604             $tracelevel)
12605             if defined $::RD_TRACE;
12606 0         0 last;
12607             }
12608 39 50       686 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (}
12609             . @$_tok . q{ times)},
12610              
12611             Parse::RecDescent::_tracefirst($text),
12612             q{textmessage},
12613             $tracelevel)
12614             if defined $::RD_TRACE;
12615 39         129 $item{q{bodydisp(?)}} = $_tok;
12616 39         93 push @item, $_tok;
12617            
12618              
12619              
12620 39 50       101 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]},
12621             Parse::RecDescent::_tracefirst($text),
12622             q{textmessage},
12623             $tracelevel)
12624             if defined $::RD_TRACE;
12625 39         119 $expectation->is(q{bodylang})->at($text);
12626            
12627 39 50   39   503 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         92  
12628             {
12629 0 0       0 Parse::RecDescent::_trace(q{<>},
12630             Parse::RecDescent::_tracefirst($text),
12631             q{textmessage},
12632             $tracelevel)
12633             if defined $::RD_TRACE;
12634 0         0 last;
12635             }
12636 39 50       714 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (}
12637             . @$_tok . q{ times)},
12638              
12639             Parse::RecDescent::_tracefirst($text),
12640             q{textmessage},
12641             $tracelevel)
12642             if defined $::RD_TRACE;
12643 39         112 $item{q{bodylang(?)}} = $_tok;
12644 39         99 push @item, $_tok;
12645            
12646              
12647              
12648 39 50       130 Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]},
12649             Parse::RecDescent::_tracefirst($text),
12650             q{textmessage},
12651             $tracelevel)
12652             if defined $::RD_TRACE;
12653 39         124 $expectation->is(q{bodyextra})->at($text);
12654            
12655 39 50   39   540 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         101  
12656             {
12657 0 0       0 Parse::RecDescent::_trace(q{<>},
12658             Parse::RecDescent::_tracefirst($text),
12659             q{textmessage},
12660             $tracelevel)
12661             if defined $::RD_TRACE;
12662 0         0 last;
12663             }
12664 39 50       668 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (}
12665             . @$_tok . q{ times)},
12666              
12667             Parse::RecDescent::_tracefirst($text),
12668             q{textmessage},
12669             $tracelevel)
12670             if defined $::RD_TRACE;
12671 39         126 $item{q{bodyextra(?)}} = $_tok;
12672 39         132 push @item, $_tok;
12673            
12674              
12675              
12676 39 50       122 Parse::RecDescent::_trace(q{Trying action},
12677             Parse::RecDescent::_tracefirst($text),
12678             q{textmessage},
12679             $tracelevel)
12680             if defined $::RD_TRACE;
12681            
12682              
12683 39 50       125 $_tok = ($_noactions) ? 0 : do {
12684 39   50     135 $return = $item{basicfields} || {};
12685 39         129 $return->{bodytype} = 'TEXT';
12686 39         180 take_optional_items($return, \%item
12687             , qw/textlines bodyMD5 bodydisp bodylang bodyextra/);
12688 39         103 1;
12689             };
12690 39 50       112 unless (defined $_tok)
12691             {
12692 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
12693             if defined $::RD_TRACE;
12694 0         0 last;
12695             }
12696 39 50       100 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12697             . $_tok . q{])},
12698             Parse::RecDescent::_tracefirst($text))
12699             if defined $::RD_TRACE;
12700 39         78 push @item, $_tok;
12701 39         88 $item{__ACTION1__}=$_tok;
12702            
12703              
12704 39 50       99 Parse::RecDescent::_trace(q{>>Matched production: [TEXT basicfields textlines bodyMD5 bodydisp bodylang bodyextra]<<},
12705             Parse::RecDescent::_tracefirst($text),
12706             q{textmessage},
12707             $tracelevel)
12708             if defined $::RD_TRACE;
12709              
12710              
12711              
12712 39         68 $_matched = 1;
12713 39         67 last;
12714             }
12715              
12716             splice
12717 92 100       352 @{$thisparser->{deferred}}, $def_at unless $_matched;
  53         138  
12718            
12719 92 100 66     388 unless ( $_matched || defined($score) )
12720             {
12721 53         144 splice @{$thisparser->{deferred}}, $def_at;
  53         133  
12722            
12723              
12724 53         128 $_[1] = $text; # NOT SURE THIS IS NEEDED
12725 53 50       148 Parse::RecDescent::_trace(q{<>},
12726             Parse::RecDescent::_tracefirst($_[1]),
12727             q{textmessage},
12728             $tracelevel)
12729             if defined $::RD_TRACE;
12730 53         315 return undef;
12731             }
12732 39 50 33     192 if (!defined($return) && defined($score))
12733             {
12734 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12735             q{textmessage},
12736             $tracelevel)
12737             if defined $::RD_TRACE;
12738 0         0 $return = $score_return;
12739             }
12740 39         96 splice @{$thisparser->{errors}}, $err_at;
  39         119  
12741 39 50       109 $return = $item[$#item] unless defined $return;
12742 39 50       111 if (defined $::RD_TRACE)
12743             {
12744 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12745             $return . q{])}, "",
12746             q{textmessage},
12747             $tracelevel);
12748 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12749             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12750             Parse::RecDescent::_tracefirst($text),
12751             , q{textmessage},
12752             $tracelevel)
12753             }
12754 39         101 $_[1] = $text;
12755 39         443 return $return;
12756             }
12757              
12758             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12759             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFCNONCOMPLY
12760             {
12761 98     98   187 my $thisparser = $_[0];
12762 1     1   42 use vars q{$tracelevel};
  1         12  
  1         919  
12763 98   50     286 local $tracelevel = ($tracelevel||0)+1;
12764 98         160 $ERRORS = 0;
12765 98         234 my $thisrule = $thisparser->{"rules"}{"RFCNONCOMPLY"};
12766              
12767 98 50       214 Parse::RecDescent::_trace(q{Trying rule: [RFCNONCOMPLY]},
12768             Parse::RecDescent::_tracefirst($_[1]),
12769             q{RFCNONCOMPLY},
12770             $tracelevel)
12771             if defined $::RD_TRACE;
12772              
12773 98         153 my $def_at = @{$thisparser->{deferred}};
  98         212  
12774 98         164 my $err_at = @{$thisparser->{errors}};
  98         195  
12775              
12776 98         262 my $score;
12777             my $score_return;
12778 98         0 my $_tok;
12779 98         183 my $return = undef;
12780 98         156 my $_matched=0;
12781 98         164 my $commit=0;
12782 98         188 my @item = ();
12783 98         163 my %item = ();
12784 98         155 my $repeating = $_[2];
12785 98         140 my $_noactions = $_[3];
12786 98 50       231 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  98         155  
  98         174  
12787 98         216 my $_itempos = $_[5];
12788 98 50       264 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12789 98         245 my $text;
12790             my $lastsep;
12791 98         0 my $current_match;
12792 98         246 my $expectation = new Parse::RecDescent::Expectation(q{/^\\(\\)/i});
12793 98         687 $expectation->at($_[1]);
12794            
12795 98         445 my $thisline;
12796 98         349 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12797              
12798            
12799              
12800 98   33     774 while (!$_matched && !$commit)
12801             {
12802            
12803 98 50       222 Parse::RecDescent::_trace(q{Trying production: [/^\\(\\)/i]},
12804             Parse::RecDescent::_tracefirst($_[1]),
12805             q{RFCNONCOMPLY},
12806             $tracelevel)
12807             if defined $::RD_TRACE;
12808 98         235 my $thisprod = $thisrule->{"prods"}[0];
12809 98         192 $text = $_[1];
12810 98         186 my $_savetext;
12811 98         180 @item = (q{RFCNONCOMPLY});
12812 98         200 %item = (__RULE__ => q{RFCNONCOMPLY});
12813 98         197 my $repcount = 0;
12814              
12815              
12816 98 50       261 Parse::RecDescent::_trace(q{Trying terminal: [/^\\(\\)/i]}, Parse::RecDescent::_tracefirst($text),
12817             q{RFCNONCOMPLY},
12818             $tracelevel)
12819             if defined $::RD_TRACE;
12820 98         194 undef $lastsep;
12821 98         230 $expectation->is(q{})->at($text);
12822            
12823              
12824 98 50 66     1155 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^\(\))/i)
  98 100       927  
12825             {
12826 94 50       420 $text = $lastsep . $text if defined $lastsep;
12827 94         311 $expectation->failed();
12828 94 50       420 Parse::RecDescent::_trace(q{<>},
12829             Parse::RecDescent::_tracefirst($text))
12830             if defined $::RD_TRACE;
12831              
12832 94         229 last;
12833             }
12834 4         24 $current_match = substr($text, $-[0], $+[0] - $-[0]);
12835 4         16 substr($text,0,length($current_match),q{});
12836 4 50       11 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12837             . $current_match . q{])},
12838             Parse::RecDescent::_tracefirst($text))
12839             if defined $::RD_TRACE;
12840 4         15 push @item, $item{__PATTERN1__}=$current_match;
12841            
12842              
12843 4 50       12 Parse::RecDescent::_trace(q{Trying action},
12844             Parse::RecDescent::_tracefirst($text),
12845             q{RFCNONCOMPLY},
12846             $tracelevel)
12847             if defined $::RD_TRACE;
12848            
12849              
12850 4 50       11 $_tok = ($_noactions) ? 0 : do { $return = "NIL" };
  4         10  
12851 4 50       11 unless (defined $_tok)
12852             {
12853 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
12854             if defined $::RD_TRACE;
12855 0         0 last;
12856             }
12857 4 50       10 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12858             . $_tok . q{])},
12859             Parse::RecDescent::_tracefirst($text))
12860             if defined $::RD_TRACE;
12861 4         9 push @item, $_tok;
12862 4         9 $item{__ACTION1__}=$_tok;
12863            
12864              
12865 4 50       12 Parse::RecDescent::_trace(q{>>Matched production: [/^\\(\\)/i]<<},
12866             Parse::RecDescent::_tracefirst($text),
12867             q{RFCNONCOMPLY},
12868             $tracelevel)
12869             if defined $::RD_TRACE;
12870              
12871              
12872              
12873 4         6 $_matched = 1;
12874 4         8 last;
12875             }
12876              
12877             splice
12878 98 100       237 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         226  
12879            
12880 98 100 66     371 unless ( $_matched || defined($score) )
12881             {
12882 94         140 splice @{$thisparser->{deferred}}, $def_at;
  94         201  
12883            
12884              
12885 94         205 $_[1] = $text; # NOT SURE THIS IS NEEDED
12886 94 50       221 Parse::RecDescent::_trace(q{<>},
12887             Parse::RecDescent::_tracefirst($_[1]),
12888             q{RFCNONCOMPLY},
12889             $tracelevel)
12890             if defined $::RD_TRACE;
12891 94         502 return undef;
12892             }
12893 4 50 33     16 if (!defined($return) && defined($score))
12894             {
12895 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12896             q{RFCNONCOMPLY},
12897             $tracelevel)
12898             if defined $::RD_TRACE;
12899 0         0 $return = $score_return;
12900             }
12901 4         6 splice @{$thisparser->{errors}}, $err_at;
  4         12  
12902 4 50       11 $return = $item[$#item] unless defined $return;
12903 4 50       11 if (defined $::RD_TRACE)
12904             {
12905 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12906             $return . q{])}, "",
12907             q{RFCNONCOMPLY},
12908             $tracelevel);
12909 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12910             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12911             Parse::RecDescent::_tracefirst($text),
12912             , q{RFCNONCOMPLY},
12913             $tracelevel)
12914             }
12915 4         9 $_[1] = $text;
12916 4         23 return $return;
12917             }
12918              
12919             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12920             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subject
12921             {
12922 24     24   61 my $thisparser = $_[0];
12923 1     1   8 use vars q{$tracelevel};
  1         2  
  1         326  
12924 24   50     86 local $tracelevel = ($tracelevel||0)+1;
12925 24         54 $ERRORS = 0;
12926 24         73 my $thisrule = $thisparser->{"rules"}{"subject"};
12927              
12928 24 50       73 Parse::RecDescent::_trace(q{Trying rule: [subject]},
12929             Parse::RecDescent::_tracefirst($_[1]),
12930             q{subject},
12931             $tracelevel)
12932             if defined $::RD_TRACE;
12933              
12934 24         46 my $def_at = @{$thisparser->{deferred}};
  24         64  
12935 24         43 my $err_at = @{$thisparser->{errors}};
  24         57  
12936              
12937 24         82 my $score;
12938             my $score_return;
12939 24         0 my $_tok;
12940 24         39 my $return = undef;
12941 24         54 my $_matched=0;
12942 24         48 my $commit=0;
12943 24         56 my @item = ();
12944 24         55 my %item = ();
12945 24         53 my $repeating = $_[2];
12946 24         47 my $_noactions = $_[3];
12947 24 50       73 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         52  
  24         55  
12948 24         57 my $_itempos = $_[5];
12949 24 50       80 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12950 24         111 my $text;
12951             my $lastsep;
12952 24         0 my $current_match;
12953 24         89 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
12954 24         194 $expectation->at($_[1]);
12955            
12956 24         116 my $thisline;
12957 24         101 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12958              
12959            
12960              
12961 24   33     248 while (!$_matched && !$commit)
12962             {
12963            
12964 24 50       85 Parse::RecDescent::_trace(q{Trying production: [NIL]},
12965             Parse::RecDescent::_tracefirst($_[1]),
12966             q{subject},
12967             $tracelevel)
12968             if defined $::RD_TRACE;
12969 24         89 my $thisprod = $thisrule->{"prods"}[0];
12970 24         63 $text = $_[1];
12971 24         56 my $_savetext;
12972 24         63 @item = (q{subject});
12973 24         66 %item = (__RULE__ => q{subject});
12974 24         50 my $repcount = 0;
12975              
12976              
12977 24 50       98 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
12978             Parse::RecDescent::_tracefirst($text),
12979             q{subject},
12980             $tracelevel)
12981             if defined $::RD_TRACE;
12982 1     1   8 if (1) { no strict qw{refs};
  1         2  
  1         286  
  24         44  
12983 24         78 $expectation->is(q{})->at($text);
12984 24 50   24   267 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         54  
12985             {
12986            
12987 24 50       75 Parse::RecDescent::_trace(q{<>},
12988             Parse::RecDescent::_tracefirst($text),
12989             q{subject},
12990             $tracelevel)
12991             if defined $::RD_TRACE;
12992 24         99 $expectation->failed();
12993 24         90 last;
12994             }
12995 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
12996             . $_tok . q{]},
12997              
12998             Parse::RecDescent::_tracefirst($text),
12999             q{subject},
13000             $tracelevel)
13001             if defined $::RD_TRACE;
13002 0         0 $item{q{NIL}} = $_tok;
13003 0         0 push @item, $_tok;
13004            
13005             }
13006              
13007 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
13008             Parse::RecDescent::_tracefirst($text),
13009             q{subject},
13010             $tracelevel)
13011             if defined $::RD_TRACE;
13012              
13013              
13014              
13015 0         0 $_matched = 1;
13016 0         0 last;
13017             }
13018              
13019             splice
13020 24 50       103 @{$thisparser->{deferred}}, $def_at unless $_matched;
  24         74  
13021            
13022 24   33     162 while (!$_matched && !$commit)
13023             {
13024            
13025 24 50       68 Parse::RecDescent::_trace(q{Trying production: [STRING]},
13026             Parse::RecDescent::_tracefirst($_[1]),
13027             q{subject},
13028             $tracelevel)
13029             if defined $::RD_TRACE;
13030 24         62 my $thisprod = $thisrule->{"prods"}[1];
13031 24         66 $text = $_[1];
13032 24         55 my $_savetext;
13033 24         91 @item = (q{subject});
13034 24         77 %item = (__RULE__ => q{subject});
13035 24         54 my $repcount = 0;
13036              
13037              
13038 24 50       68 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
13039             Parse::RecDescent::_tracefirst($text),
13040             q{subject},
13041             $tracelevel)
13042             if defined $::RD_TRACE;
13043 1     1   7 if (1) { no strict qw{refs};
  1         3  
  1         493  
  24         40  
13044 24         71 $expectation->is(q{})->at($text);
13045 24 50   24   296 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         49  
13046             {
13047            
13048 0 0       0 Parse::RecDescent::_trace(q{<>},
13049             Parse::RecDescent::_tracefirst($text),
13050             q{subject},
13051             $tracelevel)
13052             if defined $::RD_TRACE;
13053 0         0 $expectation->failed();
13054 0         0 last;
13055             }
13056 24 50       109 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
13057             . $_tok . q{]},
13058              
13059             Parse::RecDescent::_tracefirst($text),
13060             q{subject},
13061             $tracelevel)
13062             if defined $::RD_TRACE;
13063 24         69 $item{q{STRING}} = $_tok;
13064 24         57 push @item, $_tok;
13065            
13066             }
13067              
13068 24 50       72 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
13069             Parse::RecDescent::_tracefirst($text),
13070             q{subject},
13071             $tracelevel)
13072             if defined $::RD_TRACE;
13073              
13074              
13075              
13076 24         48 $_matched = 1;
13077 24         49 last;
13078             }
13079              
13080             splice
13081 24 50       74 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
13082            
13083 24 50 33     80 unless ( $_matched || defined($score) )
13084             {
13085 0         0 splice @{$thisparser->{deferred}}, $def_at;
  0         0  
13086            
13087              
13088 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
13089 0 0       0 Parse::RecDescent::_trace(q{<>},
13090             Parse::RecDescent::_tracefirst($_[1]),
13091             q{subject},
13092             $tracelevel)
13093             if defined $::RD_TRACE;
13094 0         0 return undef;
13095             }
13096 24 50 33     137 if (!defined($return) && defined($score))
13097             {
13098 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
13099             q{subject},
13100             $tracelevel)
13101             if defined $::RD_TRACE;
13102 0         0 $return = $score_return;
13103             }
13104 24         43 splice @{$thisparser->{errors}}, $err_at;
  24         53  
13105 24 50       83 $return = $item[$#item] unless defined $return;
13106 24 50       78 if (defined $::RD_TRACE)
13107             {
13108 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
13109             $return . q{])}, "",
13110             q{subject},
13111             $tracelevel);
13112 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13113             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13114             Parse::RecDescent::_tracefirst($text),
13115             , q{subject},
13116             $tracelevel)
13117             }
13118 24         75 $_[1] = $text;
13119 24         159 return $return;
13120             }
13121              
13122             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
13123             sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra
13124             {
13125 102     102   1860 my $thisparser = $_[0];
13126 1     1   7 use vars q{$tracelevel};
  1         3  
  1         363  
13127 102   50     343 local $tracelevel = ($tracelevel||0)+1;
13128 102         221 $ERRORS = 0;
13129 102         273 my $thisrule = $thisparser->{"rules"}{"bodyextra"};
13130              
13131 102 50       256 Parse::RecDescent::_trace(q{Trying rule: [bodyextra]},
13132             Parse::RecDescent::_tracefirst($_[1]),
13133             q{bodyextra},
13134             $tracelevel)
13135             if defined $::RD_TRACE;
13136              
13137 102         177 my $def_at = @{$thisparser->{deferred}};
  102         279  
13138 102         173 my $err_at = @{$thisparser->{errors}};
  102         282  
13139              
13140 102         366 my $score;
13141             my $score_return;
13142 102         0 my $_tok;
13143 102         176 my $return = undef;
13144 102         170 my $_matched=0;
13145 102         186 my $commit=0;
13146 102         190 my @item = ();
13147 102         188 my %item = ();
13148 102         184 my $repeating = $_[2];
13149 102         160 my $_noactions = $_[3];
13150 102 50       293 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         152  
  102         221  
13151 102         212 my $_itempos = $_[5];
13152 102 50       350 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13153 102         327 my $text;
13154             my $lastsep;
13155 102         0 my $current_match;
13156 102         299 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or STRINGS});
13157 102         752 $expectation->at($_[1]);
13158            
13159 102         408 my $thisline;
13160 102         404 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13161              
13162            
13163              
13164 102   33     963 while (!$_matched && !$commit)
13165             {
13166            
13167 102 50       333 Parse::RecDescent::_trace(q{Trying production: [NIL]},
13168             Parse::RecDescent::_tracefirst($_[1]),
13169             q{bodyextra},
13170             $tracelevel)
13171             if defined $::RD_TRACE;
13172 102         312 my $thisprod = $thisrule->{"prods"}[0];
13173 102         248 $text = $_[1];
13174 102         177 my $_savetext;
13175 102         244 @item = (q{bodyextra});
13176 102         312 %item = (__RULE__ => q{bodyextra});
13177 102         220 my $repcount = 0;
13178              
13179              
13180 102 50       271 Parse::RecDescent::_trace(q{Trying subrule: [NIL]},
13181             Parse::RecDescent::_tracefirst($text),
13182             q{bodyextra},
13183             $tracelevel)
13184             if defined $::RD_TRACE;
13185 1     1   8 if (1) { no strict qw{refs};
  1         3  
  1         283  
  102         172  
13186 102         353 $expectation->is(q{})->at($text);
13187 102 100   102   1083 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         236  
13188             {
13189            
13190 47 50       123 Parse::RecDescent::_trace(q{<>},
13191             Parse::RecDescent::_tracefirst($text),
13192             q{bodyextra},
13193             $tracelevel)
13194             if defined $::RD_TRACE;
13195 47         157 $expectation->failed();
13196 47         178 last;
13197             }
13198 55 50       338 Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [}
13199             . $_tok . q{]},
13200              
13201             Parse::RecDescent::_tracefirst($text),
13202             q{bodyextra},
13203             $tracelevel)
13204             if defined $::RD_TRACE;
13205 55         184 $item{q{NIL}} = $_tok;
13206 55         173 push @item, $_tok;
13207            
13208             }
13209              
13210 55 50       214 Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<},
13211             Parse::RecDescent::_tracefirst($text),
13212             q{bodyextra},
13213             $tracelevel)
13214             if defined $::RD_TRACE;
13215              
13216              
13217              
13218 55         127 $_matched = 1;
13219 55         110 last;
13220             }
13221              
13222             splice
13223 102 100       313 @{$thisparser->{deferred}}, $def_at unless $_matched;
  47         122  
13224            
13225 102   66     446 while (!$_matched && !$commit)
13226             {
13227            
13228 47 50       122 Parse::RecDescent::_trace(q{Trying production: [STRING]},
13229             Parse::RecDescent::_tracefirst($_[1]),
13230             q{bodyextra},
13231             $tracelevel)
13232             if defined $::RD_TRACE;
13233 47         100 my $thisprod = $thisrule->{"prods"}[1];
13234 47         105 $text = $_[1];
13235 47         74 my $_savetext;
13236 47         140 @item = (q{bodyextra});
13237 47         130 %item = (__RULE__ => q{bodyextra});
13238 47         104 my $repcount = 0;
13239              
13240              
13241 47 50       125 Parse::RecDescent::_trace(q{Trying subrule: [STRING]},
13242             Parse::RecDescent::_tracefirst($text),
13243             q{bodyextra},
13244             $tracelevel)
13245             if defined $::RD_TRACE;
13246 1     1   7 if (1) { no strict qw{refs};
  1         3  
  1         277  
  47         147  
13247 47         137 $expectation->is(q{})->at($text);
13248 47 50   47   530 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  47         112  
13249             {
13250            
13251 47 50       132 Parse::RecDescent::_trace(q{<>},
13252             Parse::RecDescent::_tracefirst($text),
13253             q{bodyextra},
13254             $tracelevel)
13255             if defined $::RD_TRACE;
13256 47         174 $expectation->failed();
13257 47         256 last;
13258             }
13259 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [}
13260             . $_tok . q{]},
13261              
13262             Parse::RecDescent::_tracefirst($text),
13263             q{bodyextra},
13264             $tracelevel)
13265             if defined $::RD_TRACE;
13266 0         0 $item{q{STRING}} = $_tok;
13267 0         0 push @item, $_tok;
13268            
13269             }
13270              
13271 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<},
13272             Parse::RecDescent::_tracefirst($text),
13273             q{bodyextra},
13274             $tracelevel)
13275             if defined $::RD_TRACE;
13276              
13277              
13278              
13279 0         0 $_matched = 1;
13280 0         0 last;
13281             }
13282              
13283             splice
13284 102 100       350 @{$thisparser->{deferred}}, $def_at unless $_matched;
  47         118  
13285            
13286 102   66     446 while (!$_matched && !$commit)
13287             {
13288            
13289 47 50       179 Parse::RecDescent::_trace(q{Trying production: [STRINGS]},
13290             Parse::RecDescent::_tracefirst($_[1]),
13291             q{bodyextra},
13292             $tracelevel)
13293             if defined $::RD_TRACE;
13294 47         149 my $thisprod = $thisrule->{"prods"}[2];
13295 47         106 $text = $_[1];
13296 47         105 my $_savetext;
13297 47         147 @item = (q{bodyextra});
13298 47         145 %item = (__RULE__ => q{bodyextra});
13299 47         95 my $repcount = 0;
13300              
13301              
13302 47 50       107 Parse::RecDescent::_trace(q{Trying subrule: [STRINGS]},
13303             Parse::RecDescent::_tracefirst($text),
13304             q{bodyextra},
13305             $tracelevel)
13306             if defined $::RD_TRACE;
13307 1     1   7 if (1) { no strict qw{refs};
  1         2  
  1         8134  
  47         112  
13308 47         162 $expectation->is(q{})->at($text);
13309 47 50   47   593 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  47         110  
13310             {
13311            
13312 47 50       132 Parse::RecDescent::_trace(q{<>},
13313             Parse::RecDescent::_tracefirst($text),
13314             q{bodyextra},
13315             $tracelevel)
13316             if defined $::RD_TRACE;
13317 47         161 $expectation->failed();
13318 47         197 last;
13319             }
13320 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [STRINGS]<< (return value: [}
13321             . $_tok . q{]},
13322              
13323             Parse::RecDescent::_tracefirst($text),
13324             q{bodyextra},
13325             $tracelevel)
13326             if defined $::RD_TRACE;
13327 0         0 $item{q{STRINGS}} = $_tok;
13328 0         0 push @item, $_tok;
13329            
13330             }
13331              
13332 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [STRINGS]<<},
13333             Parse::RecDescent::_tracefirst($text),
13334             q{bodyextra},
13335             $tracelevel)
13336             if defined $::RD_TRACE;
13337              
13338              
13339              
13340 0         0 $_matched = 1;
13341 0         0 last;
13342             }
13343              
13344             splice
13345 102 100       446 @{$thisparser->{deferred}}, $def_at unless $_matched;
  47         113  
13346            
13347 102 100 66     403 unless ( $_matched || defined($score) )
13348             {
13349 47         111 splice @{$thisparser->{deferred}}, $def_at;
  47         97  
13350            
13351              
13352 47         128 $_[1] = $text; # NOT SURE THIS IS NEEDED
13353 47 50       117 Parse::RecDescent::_trace(q{<>},
13354             Parse::RecDescent::_tracefirst($_[1]),
13355             q{bodyextra},
13356             $tracelevel)
13357             if defined $::RD_TRACE;
13358 47         229 return undef;
13359             }
13360 55 50 33     358 if (!defined($return) && defined($score))
13361             {
13362 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
13363             q{bodyextra},
13364             $tracelevel)
13365             if defined $::RD_TRACE;
13366 0         0 $return = $score_return;
13367             }
13368 55         124 splice @{$thisparser->{errors}}, $err_at;
  55         165  
13369 55 50       256 $return = $item[$#item] unless defined $return;
13370 55 50       209 if (defined $::RD_TRACE)
13371             {
13372 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
13373             $return . q{])}, "",
13374             q{bodyextra},
13375             $tracelevel);
13376 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13377             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13378             Parse::RecDescent::_tracefirst($text),
13379             , q{bodyextra},
13380             $tracelevel)
13381             }
13382 55         152 $_[1] = $text;
13383 55         293 return $return;
13384             }
13385             }
13386 1     1 0 1092 package Mail::IMAPClient::BodyStructure::Parse; sub new { my $self = bless( {
13387             'localvars' => '',
13388             'startcode' => '',
13389             'rules' => {
13390             'envelopestruct' => bless( {
13391             'calls' => [
13392             'date',
13393             'subject',
13394             'from',
13395             'sender',
13396             'replyto',
13397             'to',
13398             'cc',
13399             'bcc',
13400             'inreplyto',
13401             'messageid'
13402             ],
13403             'prods' => [
13404             bless( {
13405             'error' => undef,
13406             'number' => 0,
13407             'patcount' => 0,
13408             'line' => undef,
13409             'items' => [
13410             bless( {
13411             'lookahead' => 0,
13412             'pattern' => '(',
13413             'line' => 105,
13414             'description' => '\'(\'',
13415             'hashname' => '__STRING1__'
13416             }, 'Parse::RecDescent::InterpLit' ),
13417             bless( {
13418             'line' => 105,
13419             'implicit' => undef,
13420             'subrule' => 'date',
13421             'lookahead' => 0,
13422             'argcode' => undef,
13423             'matchrule' => 0
13424             }, 'Parse::RecDescent::Subrule' ),
13425             bless( {
13426             'matchrule' => 0,
13427             'lookahead' => 0,
13428             'line' => 105,
13429             'implicit' => undef,
13430             'subrule' => 'subject',
13431             'argcode' => undef
13432             }, 'Parse::RecDescent::Subrule' ),
13433             bless( {
13434             'implicit' => undef,
13435             'line' => 105,
13436             'subrule' => 'from',
13437             'lookahead' => 0,
13438             'argcode' => undef,
13439             'matchrule' => 0
13440             }, 'Parse::RecDescent::Subrule' ),
13441             bless( {
13442             'matchrule' => 0,
13443             'argcode' => undef,
13444             'implicit' => undef,
13445             'line' => 105,
13446             'subrule' => 'sender',
13447             'lookahead' => 0
13448             }, 'Parse::RecDescent::Subrule' ),
13449             bless( {
13450             'lookahead' => 0,
13451             'implicit' => undef,
13452             'line' => 105,
13453             'subrule' => 'replyto',
13454             'argcode' => undef,
13455             'matchrule' => 0
13456             }, 'Parse::RecDescent::Subrule' ),
13457             bless( {
13458             'matchrule' => 0,
13459             'subrule' => 'to',
13460             'implicit' => undef,
13461             'line' => 105,
13462             'lookahead' => 0,
13463             'argcode' => undef
13464             }, 'Parse::RecDescent::Subrule' ),
13465             bless( {
13466             'matchrule' => 0,
13467             'argcode' => undef,
13468             'subrule' => 'cc',
13469             'implicit' => undef,
13470             'line' => 105,
13471             'lookahead' => 0
13472             }, 'Parse::RecDescent::Subrule' ),
13473             bless( {
13474             'matchrule' => 0,
13475             'implicit' => undef,
13476             'subrule' => 'bcc',
13477             'line' => 106,
13478             'lookahead' => 0,
13479             'argcode' => undef
13480             }, 'Parse::RecDescent::Subrule' ),
13481             bless( {
13482             'matchrule' => 0,
13483             'lookahead' => 0,
13484             'line' => 106,
13485             'implicit' => undef,
13486             'subrule' => 'inreplyto',
13487             'argcode' => undef
13488             }, 'Parse::RecDescent::Subrule' ),
13489             bless( {
13490             'argcode' => undef,
13491             'lookahead' => 0,
13492             'implicit' => undef,
13493             'line' => 106,
13494             'subrule' => 'messageid',
13495             'matchrule' => 0
13496             }, 'Parse::RecDescent::Subrule' ),
13497             bless( {
13498             'description' => '\')\'',
13499             'hashname' => '__STRING2__',
13500             'lookahead' => 0,
13501             'line' => 106,
13502             'pattern' => ')'
13503             }, 'Parse::RecDescent::InterpLit' ),
13504             bless( {
13505             'hashname' => '__ACTION1__',
13506             'code' => '{ $return = bless {}, "Mail::IMAPClient::BodyStructure::Envelope";
13507             $return->{$_} = $item{$_}
13508             for qw/date subject from sender replyto to cc/
13509             , qw/bcc inreplyto messageid/;
13510             1;
13511             }',
13512             'line' => 107,
13513             'lookahead' => 0
13514             }, 'Parse::RecDescent::Action' )
13515             ],
13516             'dircount' => 0,
13517             'strcount' => 2,
13518             'uncommit' => undef,
13519             'actcount' => 1
13520             }, 'Parse::RecDescent::Production' )
13521             ],
13522             'line' => 105,
13523             'opcount' => 0,
13524             'name' => 'envelopestruct',
13525             'changed' => 0,
13526             'impcount' => 0,
13527             'vars' => ''
13528             }, 'Parse::RecDescent::Rule' ),
13529             'subpart' => bless( {
13530             'name' => 'subpart',
13531             'opcount' => 0,
13532             'changed' => 0,
13533             'impcount' => 0,
13534             'vars' => '',
13535             'line' => 175,
13536             'prods' => [
13537             bless( {
13538             'actcount' => 1,
13539             'uncommit' => undef,
13540             'items' => [
13541             bless( {
13542             'hashname' => '__STRING1__',
13543             'description' => '\'(\'',
13544             'line' => 175,
13545             'pattern' => '(',
13546             'lookahead' => 0
13547             }, 'Parse::RecDescent::InterpLit' ),
13548             bless( {
13549             'argcode' => undef,
13550             'lookahead' => 0,
13551             'implicit' => undef,
13552             'subrule' => 'part',
13553             'line' => 175,
13554             'matchrule' => 0
13555             }, 'Parse::RecDescent::Subrule' ),
13556             bless( {
13557             'line' => 175,
13558             'pattern' => ')',
13559             'lookahead' => 0,
13560             'hashname' => '__STRING2__',
13561             'description' => '\')\''
13562             }, 'Parse::RecDescent::InterpLit' ),
13563             bless( {
13564             'line' => 175,
13565             'lookahead' => 0,
13566             'hashname' => '__ACTION1__',
13567             'code' => '{$return = $item{part}}'
13568             }, 'Parse::RecDescent::Action' ),
13569             bless( {
13570             'line' => 175,
13571             'lookahead' => 0,
13572             'code' => 'push @{$thisparser->{deferred}}, sub { ++$subpartCount; };',
13573             'hashname' => '__DIRECTIVE1__',
13574             'name' => ''
13575             }, 'Parse::RecDescent::Directive' )
13576             ],
13577             'dircount' => 1,
13578             'line' => undef,
13579             'strcount' => 2,
13580             'number' => 0,
13581             'patcount' => 0,
13582             'error' => undef
13583             }, 'Parse::RecDescent::Production' )
13584             ],
13585             'calls' => [
13586             'part'
13587             ]
13588             }, 'Parse::RecDescent::Rule' ),
13589             'NIL' => bless( {
13590             'opcount' => 0,
13591             'name' => 'NIL',
13592             'changed' => 0,
13593             'impcount' => 0,
13594             'vars' => '',
13595             'prods' => [
13596             bless( {
13597             'actcount' => 1,
13598             'uncommit' => undef,
13599             'strcount' => 0,
13600             'dircount' => 0,
13601             'line' => undef,
13602             'items' => [
13603             bless( {
13604             'description' => '/^NIL/i',
13605             'mod' => 'i',
13606             'ldelim' => '/',
13607             'hashname' => '__PATTERN1__',
13608             'rdelim' => '/',
13609             'lookahead' => 0,
13610             'line' => 34,
13611             'pattern' => '^NIL'
13612             }, 'Parse::RecDescent::Token' ),
13613             bless( {
13614             'hashname' => '__ACTION1__',
13615             'code' => '{ $return = "NIL" }',
13616             'lookahead' => 0,
13617             'line' => 34
13618             }, 'Parse::RecDescent::Action' )
13619             ],
13620             'patcount' => 1,
13621             'number' => 0,
13622             'error' => undef
13623             }, 'Parse::RecDescent::Production' )
13624             ],
13625             'calls' => [],
13626             'line' => 34
13627             }, 'Parse::RecDescent::Rule' ),
13628             'PLAIN' => bless( {
13629             'opcount' => 0,
13630             'name' => 'PLAIN',
13631             'impcount' => 0,
13632             'changed' => 0,
13633             'vars' => '',
13634             'line' => 30,
13635             'prods' => [
13636             bless( {
13637             'error' => undef,
13638             'actcount' => 1,
13639             'uncommit' => undef,
13640             'strcount' => 0,
13641             'line' => undef,
13642             'dircount' => 0,
13643             'items' => [
13644             bless( {
13645             'hashname' => '__PATTERN1__',
13646             'rdelim' => '/',
13647             'pattern' => '^"PLAIN"|^PLAIN',
13648             'line' => 30,
13649             'lookahead' => 0,
13650             'mod' => 'i',
13651             'description' => '/^"PLAIN"|^PLAIN/i',
13652             'ldelim' => '/'
13653             }, 'Parse::RecDescent::Token' ),
13654             bless( {
13655             'lookahead' => 0,
13656             'line' => 30,
13657             'code' => '{ $return = "PLAIN" }',
13658             'hashname' => '__ACTION1__'
13659             }, 'Parse::RecDescent::Action' )
13660             ],
13661             'patcount' => 1,
13662             'number' => 0
13663             }, 'Parse::RecDescent::Production' )
13664             ],
13665             'calls' => []
13666             }, 'Parse::RecDescent::Rule' ),
13667             'RFC822' => bless( {
13668             'prods' => [
13669             bless( {
13670             'error' => undef,
13671             'actcount' => 1,
13672             'uncommit' => undef,
13673             'strcount' => 0,
13674             'items' => [
13675             bless( {
13676             'line' => 33,
13677             'pattern' => '^"RFC822"|^RFC822',
13678             'lookahead' => 0,
13679             'rdelim' => '/',
13680             'hashname' => '__PATTERN1__',
13681             'ldelim' => '/',
13682             'description' => '/^"RFC822"|^RFC822/i',
13683             'mod' => 'i'
13684             }, 'Parse::RecDescent::Token' ),
13685             bless( {
13686             'code' => '{ $return = "RFC822" }',
13687             'hashname' => '__ACTION1__',
13688             'lookahead' => 0,
13689             'line' => 33
13690             }, 'Parse::RecDescent::Action' )
13691             ],
13692             'line' => undef,
13693             'dircount' => 0,
13694             'patcount' => 1,
13695             'number' => 0
13696             }, 'Parse::RecDescent::Production' )
13697             ],
13698             'calls' => [],
13699             'line' => 33,
13700             'vars' => '',
13701             'impcount' => 0,
13702             'changed' => 0,
13703             'opcount' => 0,
13704             'name' => 'RFC822'
13705             }, 'Parse::RecDescent::Rule' ),
13706             'bodysubtype' => bless( {
13707             'vars' => '',
13708             'impcount' => 0,
13709             'changed' => 0,
13710             'opcount' => 0,
13711             'name' => 'bodysubtype',
13712             'line' => 54,
13713             'prods' => [
13714             bless( {
13715             'error' => undef,
13716             'line' => undef,
13717             'items' => [
13718             bless( {
13719             'argcode' => undef,
13720             'lookahead' => 0,
13721             'subrule' => 'PLAIN',
13722             'implicit' => undef,
13723             'line' => 54,
13724             'matchrule' => 0
13725             }, 'Parse::RecDescent::Subrule' )
13726             ],
13727             'dircount' => 0,
13728             'strcount' => 0,
13729             'number' => 0,
13730             'patcount' => 0,
13731             'actcount' => 0,
13732             'uncommit' => undef
13733             }, 'Parse::RecDescent::Production' ),
13734             bless( {
13735             'error' => undef,
13736             'strcount' => 0,
13737             'items' => [
13738             bless( {
13739             'argcode' => undef,
13740             'lookahead' => 0,
13741             'line' => 54,
13742             'implicit' => undef,
13743             'subrule' => 'HTML',
13744             'matchrule' => 0
13745             }, 'Parse::RecDescent::Subrule' )
13746             ],
13747             'line' => 54,
13748             'dircount' => 0,
13749             'patcount' => 0,
13750             'number' => 1,
13751             'actcount' => 0,
13752             'uncommit' => undef
13753             }, 'Parse::RecDescent::Production' ),
13754             bless( {
13755             'uncommit' => undef,
13756             'actcount' => 0,
13757             'number' => 2,
13758             'patcount' => 0,
13759             'line' => 54,
13760             'items' => [
13761             bless( {
13762             'argcode' => undef,
13763             'lookahead' => 0,
13764             'subrule' => 'NIL',
13765             'implicit' => undef,
13766             'line' => 54,
13767             'matchrule' => 0
13768             }, 'Parse::RecDescent::Subrule' )
13769             ],
13770             'dircount' => 0,
13771             'strcount' => 0,
13772             'error' => undef
13773             }, 'Parse::RecDescent::Production' ),
13774             bless( {
13775             'strcount' => 0,
13776             'line' => 54,
13777             'items' => [
13778             bless( {
13779             'argcode' => undef,
13780             'line' => 54,
13781             'implicit' => undef,
13782             'subrule' => 'STRING',
13783             'lookahead' => 0,
13784             'matchrule' => 0
13785             }, 'Parse::RecDescent::Subrule' )
13786             ],
13787             'dircount' => 0,
13788             'patcount' => 0,
13789             'number' => 3,
13790             'actcount' => 0,
13791             'uncommit' => undef,
13792             'error' => undef
13793             }, 'Parse::RecDescent::Production' )
13794             ],
13795             'calls' => [
13796             'PLAIN',
13797             'HTML',
13798             'NIL',
13799             'STRING'
13800             ]
13801             }, 'Parse::RecDescent::Rule' ),
13802             'from' => bless( {
13803             'opcount' => 0,
13804             'name' => 'from',
13805             'vars' => '',
13806             'impcount' => 0,
13807             'changed' => 0,
13808             'calls' => [
13809             'ADDRESSES'
13810             ],
13811             'prods' => [
13812             bless( {
13813             'error' => undef,
13814             'uncommit' => undef,
13815             'actcount' => 0,
13816             'patcount' => 0,
13817             'number' => 0,
13818             'strcount' => 0,
13819             'items' => [
13820             bless( {
13821             'matchrule' => 0,
13822             'argcode' => undef,
13823             'implicit' => undef,
13824             'subrule' => 'ADDRESSES',
13825             'line' => 100,
13826             'lookahead' => 0
13827             }, 'Parse::RecDescent::Subrule' )
13828             ],
13829             'line' => undef,
13830             'dircount' => 0
13831             }, 'Parse::RecDescent::Production' )
13832             ],
13833             'line' => 100
13834             }, 'Parse::RecDescent::Rule' ),
13835             'multipart' => bless( {
13836             'prods' => [
13837             bless( {
13838             'error' => undef,
13839             'uncommit' => undef,
13840             'actcount' => 1,
13841             'number' => 0,
13842             'patcount' => 0,
13843             'line' => undef,
13844             'dircount' => 2,
13845             'items' => [
13846             bless( {
13847             'matchrule' => 0,
13848             'expected' => undef,
13849             'repspec' => 's',
13850             'min' => 1,
13851             'argcode' => undef,
13852             'max' => 100000000,
13853             'subrule' => 'subpart',
13854             'line' => 162,
13855             'lookahead' => 0
13856             }, 'Parse::RecDescent::Repetition' ),
13857             bless( {
13858             'lookahead' => 0,
13859             'line' => 162,
13860             'name' => '',
13861             'hashname' => '__DIRECTIVE1__',
13862             'code' => '$commit = 1'
13863             }, 'Parse::RecDescent::Directive' ),
13864             bless( {
13865             'argcode' => undef,
13866             'lookahead' => 0,
13867             'subrule' => 'bodysubtype',
13868             'implicit' => undef,
13869             'line' => 162,
13870             'matchrule' => 0
13871             }, 'Parse::RecDescent::Subrule' ),
13872             bless( {
13873             'repspec' => '?',
13874             'expected' => undef,
13875             'matchrule' => 0,
13876             'argcode' => undef,
13877             'min' => 0,
13878             'max' => 1,
13879             'lookahead' => 0,
13880             'line' => 163,
13881             'subrule' => 'bodyparms'
13882             }, 'Parse::RecDescent::Repetition' ),
13883             bless( {
13884             'min' => 0,
13885             'argcode' => undef,
13886             'matchrule' => 0,
13887             'expected' => undef,
13888             'repspec' => '?',
13889             'line' => 163,
13890             'subrule' => 'bodydisp',
13891             'lookahead' => 0,
13892             'max' => 1
13893             }, 'Parse::RecDescent::Repetition' ),
13894             bless( {
13895             'max' => 1,
13896             'lookahead' => 0,
13897             'line' => 163,
13898             'subrule' => 'bodylang',
13899             'repspec' => '?',
13900             'expected' => undef,
13901             'matchrule' => 0,
13902             'argcode' => undef,
13903             'min' => 0
13904             }, 'Parse::RecDescent::Repetition' ),
13905             bless( {
13906             'max' => 1,
13907             'lookahead' => 0,
13908             'line' => 163,
13909             'subrule' => 'bodyloc',
13910             'expected' => undef,
13911             'matchrule' => 0,
13912             'repspec' => '?',
13913             'min' => 0,
13914             'argcode' => undef
13915             }, 'Parse::RecDescent::Repetition' ),
13916             bless( {
13917             'max' => 1,
13918             'subrule' => 'bodyextra',
13919             'line' => 163,
13920             'lookahead' => 0,
13921             'repspec' => '?',
13922             'matchrule' => 0,
13923             'expected' => undef,
13924             'argcode' => undef,
13925             'min' => 0
13926             }, 'Parse::RecDescent::Repetition' ),
13927             bless( {
13928             'hashname' => '__DIRECTIVE2__',
13929             'name' => '',
13930             'code' => 'push @{$thisparser->{deferred}}, sub { $subpartCount = 0 };',
13931             'line' => 164,
13932             'lookahead' => 0
13933             }, 'Parse::RecDescent::Directive' ),
13934             bless( {
13935             'lookahead' => 0,
13936             'line' => 165,
13937             'hashname' => '__ACTION1__',
13938             'code' => '{ $return =
13939             { bodysubtype => $item{bodysubtype}
13940             , bodytype => \'MULTIPART\'
13941             , bodystructure => $item{\'subpart(s)\'}
13942             };
13943             take_optional_items($return, \\%item
13944             , qw/bodyparms bodydisp bodylang bodyloc bodyextra/);
13945             1;
13946             }'
13947             }, 'Parse::RecDescent::Action' )
13948             ],
13949             'strcount' => 0
13950             }, 'Parse::RecDescent::Production' )
13951             ],
13952             'calls' => [
13953             'subpart',
13954             'bodysubtype',
13955             'bodyparms',
13956             'bodydisp',
13957             'bodylang',
13958             'bodyloc',
13959             'bodyextra'
13960             ],
13961             'line' => 162,
13962             'vars' => '',
13963             'impcount' => 0,
13964             'changed' => 0,
13965             'name' => 'multipart',
13966             'opcount' => 0
13967             }, 'Parse::RecDescent::Rule' ),
13968             'bodyid' => bless( {
13969             'opcount' => 0,
13970             'name' => 'bodyid',
13971             'changed' => 0,
13972             'impcount' => 0,
13973             'vars' => '',
13974             'calls' => [
13975             'NIL',
13976             'STRING'
13977             ],
13978             'prods' => [
13979             bless( {
13980             'number' => 0,
13981             'patcount' => 1,
13982             'line' => undef,
13983             'dircount' => 0,
13984             'items' => [
13985             bless( {
13986             'hashname' => '__PATTERN1__',
13987             'rdelim' => '/',
13988             'lookahead' => -1,
13989             'line' => 68,
13990             'pattern' => '[()]',
13991             'mod' => '',
13992             'description' => '/[()]/',
13993             'ldelim' => '/'
13994             }, 'Parse::RecDescent::Token' ),
13995             bless( {
13996             'matchrule' => 0,
13997             'line' => 68,
13998             'implicit' => undef,
13999             'subrule' => 'NIL',
14000             'lookahead' => 0,
14001             'argcode' => undef
14002             }, 'Parse::RecDescent::Subrule' )
14003             ],
14004             'strcount' => 0,
14005             'uncommit' => undef,
14006             'actcount' => 0,
14007             'error' => undef
14008             }, 'Parse::RecDescent::Production' ),
14009             bless( {
14010             'line' => 68,
14011             'items' => [
14012             bless( {
14013             'argcode' => undef,
14014             'line' => 68,
14015             'implicit' => undef,
14016             'subrule' => 'STRING',
14017             'lookahead' => 0,
14018             'matchrule' => 0
14019             }, 'Parse::RecDescent::Subrule' )
14020             ],
14021             'dircount' => 0,
14022             'strcount' => 0,
14023             'number' => 1,
14024             'patcount' => 0,
14025             'actcount' => 0,
14026             'uncommit' => undef,
14027             'error' => undef
14028             }, 'Parse::RecDescent::Production' )
14029             ],
14030             'line' => 68
14031             }, 'Parse::RecDescent::Rule' ),
14032             'bodylang' => bless( {
14033             'line' => 73,
14034             'calls' => [
14035             'NIL',
14036             'STRING',
14037             'STRINGS'
14038             ],
14039             'prods' => [
14040             bless( {
14041             'error' => undef,
14042             'number' => 0,
14043             'patcount' => 0,
14044             'line' => undef,
14045             'items' => [
14046             bless( {
14047             'lookahead' => 0,
14048             'subrule' => 'NIL',
14049             'implicit' => undef,
14050             'line' => 73,
14051             'argcode' => undef,
14052             'matchrule' => 0
14053             }, 'Parse::RecDescent::Subrule' )
14054             ],
14055             'dircount' => 0,
14056             'strcount' => 0,
14057             'uncommit' => undef,
14058             'actcount' => 0
14059             }, 'Parse::RecDescent::Production' ),
14060             bless( {
14061             'uncommit' => undef,
14062             'actcount' => 0,
14063             'patcount' => 0,
14064             'number' => 1,
14065             'strcount' => 0,
14066             'items' => [
14067             bless( {
14068             'matchrule' => 0,
14069             'argcode' => undef,
14070             'implicit' => undef,
14071             'subrule' => 'STRING',
14072             'line' => 73,
14073             'lookahead' => 0
14074             }, 'Parse::RecDescent::Subrule' )
14075             ],
14076             'dircount' => 0,
14077             'line' => 73,
14078             'error' => undef
14079             }, 'Parse::RecDescent::Production' ),
14080             bless( {
14081             'uncommit' => undef,
14082             'actcount' => 0,
14083             'number' => 2,
14084             'patcount' => 0,
14085             'items' => [
14086             bless( {
14087             'matchrule' => 0,
14088             'lookahead' => 0,
14089             'implicit' => undef,
14090             'line' => 73,
14091             'subrule' => 'STRINGS',
14092             'argcode' => undef
14093             }, 'Parse::RecDescent::Subrule' )
14094             ],
14095             'line' => 73,
14096             'dircount' => 0,
14097             'strcount' => 0,
14098             'error' => undef
14099             }, 'Parse::RecDescent::Production' )
14100             ],
14101             'opcount' => 0,
14102             'name' => 'bodylang',
14103             'vars' => '',
14104             'impcount' => 0,
14105             'changed' => 0
14106             }, 'Parse::RecDescent::Rule' ),
14107             'bodyloc' => bless( {
14108             'line' => 75,
14109             'calls' => [
14110             'NIL',
14111             'STRING'
14112             ],
14113             'prods' => [
14114             bless( {
14115             'error' => undef,
14116             'uncommit' => undef,
14117             'actcount' => 0,
14118             'number' => 0,
14119             'patcount' => 0,
14120             'items' => [
14121             bless( {
14122             'matchrule' => 0,
14123             'argcode' => undef,
14124             'implicit' => undef,
14125             'line' => 75,
14126             'subrule' => 'NIL',
14127             'lookahead' => 0
14128             }, 'Parse::RecDescent::Subrule' )
14129             ],
14130             'line' => undef,
14131             'dircount' => 0,
14132             'strcount' => 0
14133             }, 'Parse::RecDescent::Production' ),
14134             bless( {
14135             'error' => undef,
14136             'strcount' => 0,
14137             'items' => [
14138             bless( {
14139             'implicit' => undef,
14140             'line' => 75,
14141             'subrule' => 'STRING',
14142             'lookahead' => 0,
14143             'argcode' => undef,
14144             'matchrule' => 0
14145             }, 'Parse::RecDescent::Subrule' )
14146             ],
14147             'line' => 75,
14148             'dircount' => 0,
14149             'patcount' => 0,
14150             'number' => 1,
14151             'actcount' => 0,
14152             'uncommit' => undef
14153             }, 'Parse::RecDescent::Production' )
14154             ],
14155             'opcount' => 0,
14156             'name' => 'bodyloc',
14157             'vars' => '',
14158             'impcount' => 0,
14159             'changed' => 0
14160             }, 'Parse::RecDescent::Rule' ),
14161             'inreplyto' => bless( {
14162             'opcount' => 0,
14163             'name' => 'inreplyto',
14164             'impcount' => 0,
14165             'changed' => 0,
14166             'vars' => '',
14167             'calls' => [
14168             'NIL',
14169             'STRING'
14170             ],
14171             'prods' => [
14172             bless( {
14173             'patcount' => 0,
14174             'number' => 0,
14175             'strcount' => 0,
14176             'line' => undef,
14177             'dircount' => 0,
14178             'items' => [
14179             bless( {
14180             'argcode' => undef,
14181             'subrule' => 'NIL',
14182             'implicit' => undef,
14183             'line' => 91,
14184             'lookahead' => 0,
14185             'matchrule' => 0
14186             }, 'Parse::RecDescent::Subrule' )
14187             ],
14188             'uncommit' => undef,
14189             'actcount' => 0,
14190             'error' => undef
14191             }, 'Parse::RecDescent::Production' ),
14192             bless( {
14193             'error' => undef,
14194             'actcount' => 0,
14195             'uncommit' => undef,
14196             'dircount' => 0,
14197             'items' => [
14198             bless( {
14199             'argcode' => undef,
14200             'lookahead' => 0,
14201             'implicit' => undef,
14202             'subrule' => 'STRING',
14203             'line' => 91,
14204             'matchrule' => 0
14205             }, 'Parse::RecDescent::Subrule' )
14206             ],
14207             'line' => 91,
14208             'strcount' => 0,
14209             'number' => 1,
14210             'patcount' => 0
14211             }, 'Parse::RecDescent::Production' )
14212             ],
14213             'line' => 91
14214             }, 'Parse::RecDescent::Rule' ),
14215             'ADDRESSES' => bless( {
14216             'line' => 95,
14217             'prods' => [
14218             bless( {
14219             'uncommit' => undef,
14220             'actcount' => 0,
14221             'patcount' => 0,
14222             'number' => 0,
14223             'strcount' => 0,
14224             'dircount' => 0,
14225             'items' => [
14226             bless( {
14227             'matchrule' => 0,
14228             'lookahead' => 0,
14229             'line' => 95,
14230             'implicit' => undef,
14231             'subrule' => 'NIL',
14232             'argcode' => undef
14233             }, 'Parse::RecDescent::Subrule' )
14234             ],
14235             'line' => undef,
14236             'error' => undef
14237             }, 'Parse::RecDescent::Production' ),
14238             bless( {
14239             'patcount' => 0,
14240             'number' => 1,
14241             'strcount' => 0,
14242             'items' => [
14243             bless( {
14244             'argcode' => undef,
14245             'implicit' => undef,
14246             'line' => 95,
14247             'subrule' => 'RFCNONCOMPLY',
14248             'lookahead' => 0,
14249             'matchrule' => 0
14250             }, 'Parse::RecDescent::Subrule' )
14251             ],
14252             'line' => 95,
14253             'dircount' => 0,
14254             'uncommit' => undef,
14255             'actcount' => 0,
14256             'error' => undef
14257             }, 'Parse::RecDescent::Production' ),
14258             bless( {
14259             'actcount' => 1,
14260             'uncommit' => undef,
14261             'strcount' => 2,
14262             'line' => 96,
14263             'dircount' => 0,
14264             'items' => [
14265             bless( {
14266             'lookahead' => 0,
14267             'line' => 96,
14268             'pattern' => '(',
14269             'description' => '\'(\'',
14270             'hashname' => '__STRING1__'
14271             }, 'Parse::RecDescent::InterpLit' ),
14272             bless( {
14273             'argcode' => undef,
14274             'min' => 1,
14275             'repspec' => 's',
14276             'matchrule' => 0,
14277             'expected' => undef,
14278             'subrule' => 'addressstruct',
14279             'line' => 96,
14280             'lookahead' => 0,
14281             'max' => 100000000
14282             }, 'Parse::RecDescent::Repetition' ),
14283             bless( {
14284             'lookahead' => 0,
14285             'line' => 96,
14286             'pattern' => ')',
14287             'description' => '\')\'',
14288             'hashname' => '__STRING2__'
14289             }, 'Parse::RecDescent::InterpLit' ),
14290             bless( {
14291             'lookahead' => 0,
14292             'line' => 96,
14293             'code' => '{ $return = $item{\'addressstruct(s)\'} }',
14294             'hashname' => '__ACTION1__'
14295             }, 'Parse::RecDescent::Action' )
14296             ],
14297             'patcount' => 0,
14298             'number' => 2,
14299             'error' => undef
14300             }, 'Parse::RecDescent::Production' )
14301             ],
14302             'calls' => [
14303             'NIL',
14304             'RFCNONCOMPLY',
14305             'addressstruct'
14306             ],
14307             'vars' => '',
14308             'impcount' => 0,
14309             'changed' => 0,
14310             'opcount' => 0,
14311             'name' => 'ADDRESSES'
14312             }, 'Parse::RecDescent::Rule' ),
14313             'key' => bless( {
14314             'calls' => [
14315             'STRING'
14316             ],
14317             'prods' => [
14318             bless( {
14319             'error' => undef,
14320             'number' => 0,
14321             'patcount' => 0,
14322             'items' => [
14323             bless( {
14324             'argcode' => undef,
14325             'implicit' => undef,
14326             'line' => 56,
14327             'subrule' => 'STRING',
14328             'lookahead' => 0,
14329             'matchrule' => 0
14330             }, 'Parse::RecDescent::Subrule' )
14331             ],
14332             'dircount' => 0,
14333             'line' => undef,
14334             'strcount' => 0,
14335             'uncommit' => undef,
14336             'actcount' => 0
14337             }, 'Parse::RecDescent::Production' )
14338             ],
14339             'line' => 56,
14340             'impcount' => 0,
14341             'changed' => 0,
14342             'vars' => '',
14343             'opcount' => 0,
14344             'name' => 'key'
14345             }, 'Parse::RecDescent::Rule' ),
14346             'rfc822message' => bless( {
14347             'prods' => [
14348             bless( {
14349             'error' => undef,
14350             'actcount' => 1,
14351             'uncommit' => undef,
14352             'dircount' => 0,
14353             'items' => [
14354             bless( {
14355             'lookahead' => 0,
14356             'subrule' => 'MESSAGE',
14357             'implicit' => undef,
14358             'line' => 52,
14359             'argcode' => undef,
14360             'matchrule' => 0
14361             }, 'Parse::RecDescent::Subrule' ),
14362             bless( {
14363             'argcode' => undef,
14364             'lookahead' => 0,
14365             'subrule' => 'RFC822',
14366             'implicit' => undef,
14367             'line' => 52,
14368             'matchrule' => 0
14369             }, 'Parse::RecDescent::Subrule' ),
14370             bless( {
14371             'lookahead' => 0,
14372             'line' => 52,
14373             'hashname' => '__ACTION1__',
14374             'code' => '{ $return = "MESSAGE RFC822" }'
14375             }, 'Parse::RecDescent::Action' )
14376             ],
14377             'line' => undef,
14378             'strcount' => 0,
14379             'number' => 0,
14380             'patcount' => 0
14381             }, 'Parse::RecDescent::Production' )
14382             ],
14383             'calls' => [
14384             'MESSAGE',
14385             'RFC822'
14386             ],
14387             'line' => 52,
14388             'changed' => 0,
14389             'impcount' => 0,
14390             'vars' => '',
14391             'opcount' => 0,
14392             'name' => 'rfc822message'
14393             }, 'Parse::RecDescent::Rule' ),
14394             'bcc' => bless( {
14395             'opcount' => 0,
14396             'name' => 'bcc',
14397             'vars' => '',
14398             'impcount' => 0,
14399             'changed' => 0,
14400             'calls' => [
14401             'ADDRESSES'
14402             ],
14403             'prods' => [
14404             bless( {
14405             'patcount' => 0,
14406             'number' => 0,
14407             'strcount' => 0,
14408             'items' => [
14409             bless( {
14410             'matchrule' => 0,
14411             'subrule' => 'ADDRESSES',
14412             'implicit' => undef,
14413             'line' => 99,
14414             'lookahead' => 0,
14415             'argcode' => undef
14416             }, 'Parse::RecDescent::Subrule' )
14417             ],
14418             'line' => undef,
14419             'dircount' => 0,
14420             'uncommit' => undef,
14421             'actcount' => 0,
14422             'error' => undef
14423             }, 'Parse::RecDescent::Production' )
14424             ],
14425             'line' => 99
14426             }, 'Parse::RecDescent::Rule' ),
14427             'bodydisp' => bless( {
14428             'opcount' => 0,
14429             'name' => 'bodydisp',
14430             'changed' => 0,
14431             'impcount' => 0,
14432             'vars' => '',
14433             'line' => 67,
14434             'calls' => [
14435             'NIL',
14436             'KVPAIRS'
14437             ],
14438             'prods' => [
14439             bless( {
14440             'error' => undef,
14441             'uncommit' => undef,
14442             'actcount' => 0,
14443             'patcount' => 0,
14444             'number' => 0,
14445             'strcount' => 0,
14446             'line' => undef,
14447             'dircount' => 0,
14448             'items' => [
14449             bless( {
14450             'matchrule' => 0,
14451             'line' => 67,
14452             'implicit' => undef,
14453             'subrule' => 'NIL',
14454             'lookahead' => 0,
14455             'argcode' => undef
14456             }, 'Parse::RecDescent::Subrule' )
14457             ]
14458             }, 'Parse::RecDescent::Production' ),
14459             bless( {
14460             'error' => undef,
14461             'strcount' => 0,
14462             'line' => 67,
14463             'dircount' => 0,
14464             'items' => [
14465             bless( {
14466             'lookahead' => 0,
14467             'implicit' => undef,
14468             'line' => 67,
14469             'subrule' => 'KVPAIRS',
14470             'argcode' => undef,
14471             'matchrule' => 0
14472             }, 'Parse::RecDescent::Subrule' )
14473             ],
14474             'patcount' => 0,
14475             'number' => 1,
14476             'actcount' => 0,
14477             'uncommit' => undef
14478             }, 'Parse::RecDescent::Production' )
14479             ]
14480             }, 'Parse::RecDescent::Rule' ),
14481             'KVPAIRS' => bless( {
14482             'vars' => '',
14483             'impcount' => 0,
14484             'changed' => 0,
14485             'opcount' => 0,
14486             'name' => 'KVPAIRS',
14487             'line' => 62,
14488             'prods' => [
14489             bless( {
14490             'error' => undef,
14491             'dircount' => 0,
14492             'line' => undef,
14493             'items' => [
14494             bless( {
14495             'description' => '\'(\'',
14496             'hashname' => '__STRING1__',
14497             'lookahead' => 0,
14498             'line' => 62,
14499             'pattern' => '('
14500             }, 'Parse::RecDescent::InterpLit' ),
14501             bless( {
14502             'lookahead' => 0,
14503             'line' => 62,
14504             'subrule' => 'kvpair',
14505             'max' => 100000000,
14506             'min' => 1,
14507             'argcode' => undef,
14508             'expected' => undef,
14509             'matchrule' => 0,
14510             'repspec' => 's'
14511             }, 'Parse::RecDescent::Repetition' ),
14512             bless( {
14513             'hashname' => '__STRING2__',
14514             'description' => '\')\'',
14515             'line' => 62,
14516             'pattern' => ')',
14517             'lookahead' => 0
14518             }, 'Parse::RecDescent::InterpLit' ),
14519             bless( {
14520             'hashname' => '__ACTION1__',
14521             'code' => '{ $return = { map { (%$_) } @{$item{\'kvpair(s)\'}} } }',
14522             'lookahead' => 0,
14523             'line' => 63
14524             }, 'Parse::RecDescent::Action' )
14525             ],
14526             'strcount' => 2,
14527             'number' => 0,
14528             'patcount' => 0,
14529             'actcount' => 1,
14530             'uncommit' => undef
14531             }, 'Parse::RecDescent::Production' )
14532             ],
14533             'calls' => [
14534             'kvpair'
14535             ]
14536             }, 'Parse::RecDescent::Rule' ),
14537             'bodyMD5' => bless( {
14538             'calls' => [
14539             'NIL',
14540             'STRING'
14541             ],
14542             'prods' => [
14543             bless( {
14544             'uncommit' => undef,
14545             'actcount' => 0,
14546             'number' => 0,
14547             'patcount' => 0,
14548             'line' => undef,
14549             'items' => [
14550             bless( {
14551             'argcode' => undef,
14552             'line' => 72,
14553             'implicit' => undef,
14554             'subrule' => 'NIL',
14555             'lookahead' => 0,
14556             'matchrule' => 0
14557             }, 'Parse::RecDescent::Subrule' )
14558             ],
14559             'dircount' => 0,
14560             'strcount' => 0,
14561             'error' => undef
14562             }, 'Parse::RecDescent::Production' ),
14563             bless( {
14564             'error' => undef,
14565             'actcount' => 0,
14566             'uncommit' => undef,
14567             'items' => [
14568             bless( {
14569             'matchrule' => 0,
14570             'subrule' => 'STRING',
14571             'implicit' => undef,
14572             'line' => 72,
14573             'lookahead' => 0,
14574             'argcode' => undef
14575             }, 'Parse::RecDescent::Subrule' )
14576             ],
14577             'dircount' => 0,
14578             'line' => 72,
14579             'strcount' => 0,
14580             'number' => 1,
14581             'patcount' => 0
14582             }, 'Parse::RecDescent::Production' )
14583             ],
14584             'line' => 72,
14585             'name' => 'bodyMD5',
14586             'opcount' => 0,
14587             'vars' => '',
14588             'changed' => 0,
14589             'impcount' => 0
14590             }, 'Parse::RecDescent::Rule' ),
14591             'part' => bless( {
14592             'name' => 'part',
14593             'opcount' => 0,
14594             'vars' => '',
14595             'impcount' => 0,
14596             'changed' => 0,
14597             'line' => 177,
14598             'prods' => [
14599             bless( {
14600             'error' => undef,
14601             'number' => 0,
14602             'patcount' => 0,
14603             'line' => undef,
14604             'items' => [
14605             bless( {
14606             'implicit' => undef,
14607             'subrule' => 'multipart',
14608             'line' => 177,
14609             'lookahead' => 0,
14610             'argcode' => undef,
14611             'matchrule' => 0
14612             }, 'Parse::RecDescent::Subrule' ),
14613             bless( {
14614             'line' => 177,
14615             'lookahead' => 0,
14616             'code' => '{ $return = bless $item{multipart}, $mibs }',
14617             'hashname' => '__ACTION1__'
14618             }, 'Parse::RecDescent::Action' )
14619             ],
14620             'dircount' => 0,
14621             'strcount' => 0,
14622             'uncommit' => undef,
14623             'actcount' => 1
14624             }, 'Parse::RecDescent::Production' ),
14625             bless( {
14626             'uncommit' => undef,
14627             'actcount' => 1,
14628             'number' => 1,
14629             'patcount' => 0,
14630             'line' => 178,
14631             'items' => [
14632             bless( {
14633             'lookahead' => 0,
14634             'implicit' => undef,
14635             'subrule' => 'textmessage',
14636             'line' => 178,
14637             'argcode' => undef,
14638             'matchrule' => 0
14639             }, 'Parse::RecDescent::Subrule' ),
14640             bless( {
14641             'hashname' => '__ACTION1__',
14642             'code' => '{ $return = bless $item{textmessage}, $mibs }',
14643             'line' => 178,
14644             'lookahead' => 0
14645             }, 'Parse::RecDescent::Action' )
14646             ],
14647             'dircount' => 0,
14648             'strcount' => 0,
14649             'error' => undef
14650             }, 'Parse::RecDescent::Production' ),
14651             bless( {
14652             'error' => undef,
14653             'actcount' => 1,
14654             'uncommit' => undef,
14655             'strcount' => 0,
14656             'line' => 179,
14657             'items' => [
14658             bless( {
14659             'matchrule' => 0,
14660             'implicit' => undef,
14661             'subrule' => 'nestedmessage',
14662             'line' => 179,
14663             'lookahead' => 0,
14664             'argcode' => undef
14665             }, 'Parse::RecDescent::Subrule' ),
14666             bless( {
14667             'line' => 179,
14668             'lookahead' => 0,
14669             'hashname' => '__ACTION1__',
14670             'code' => '{ $return = bless $item{nestedmessage}, $mibs }'
14671             }, 'Parse::RecDescent::Action' )
14672             ],
14673             'dircount' => 0,
14674             'patcount' => 0,
14675             'number' => 2
14676             }, 'Parse::RecDescent::Production' ),
14677             bless( {
14678             'error' => undef,
14679             'actcount' => 1,
14680             'uncommit' => undef,
14681             'dircount' => 0,
14682             'line' => 180,
14683             'items' => [
14684             bless( {
14685             'matchrule' => 0,
14686             'lookahead' => 0,
14687             'implicit' => undef,
14688             'subrule' => 'othertypemessage',
14689             'line' => 180,
14690             'argcode' => undef
14691             }, 'Parse::RecDescent::Subrule' ),
14692             bless( {
14693             'lookahead' => 0,
14694             'line' => 180,
14695             'hashname' => '__ACTION1__',
14696             'code' => '{ $return = bless $item{othertypemessage}, $mibs }'
14697             }, 'Parse::RecDescent::Action' )
14698             ],
14699             'strcount' => 0,
14700             'number' => 3,
14701             'patcount' => 0
14702             }, 'Parse::RecDescent::Production' )
14703             ],
14704             'calls' => [
14705             'multipart',
14706             'textmessage',
14707             'nestedmessage',
14708             'othertypemessage'
14709             ]
14710             }, 'Parse::RecDescent::Rule' ),
14711             'TEXT' => bless( {
14712             'line' => 27,
14713             'prods' => [
14714             bless( {
14715             'uncommit' => undef,
14716             'actcount' => 1,
14717             'number' => 0,
14718             'patcount' => 1,
14719             'line' => undef,
14720             'items' => [
14721             bless( {
14722             'hashname' => '__PATTERN1__',
14723             'rdelim' => '/',
14724             'lookahead' => 0,
14725             'pattern' => '^"TEXT"|^TEXT',
14726             'line' => 29,
14727             'mod' => 'i',
14728             'description' => '/^"TEXT"|^TEXT/i',
14729             'ldelim' => '/'
14730             }, 'Parse::RecDescent::Token' ),
14731             bless( {
14732             'line' => 29,
14733             'lookahead' => 0,
14734             'code' => '{ $return = "TEXT" }',
14735             'hashname' => '__ACTION1__'
14736             }, 'Parse::RecDescent::Action' )
14737             ],
14738             'dircount' => 0,
14739             'strcount' => 0,
14740             'error' => undef
14741             }, 'Parse::RecDescent::Production' )
14742             ],
14743             'calls' => [],
14744             'vars' => '',
14745             'impcount' => 0,
14746             'changed' => 0,
14747             'name' => 'TEXT',
14748             'opcount' => 0
14749             }, 'Parse::RecDescent::Rule' ),
14750             'MESSAGE' => bless( {
14751             'name' => 'MESSAGE',
14752             'opcount' => 0,
14753             'impcount' => 0,
14754             'changed' => 0,
14755             'vars' => '',
14756             'line' => 32,
14757             'prods' => [
14758             bless( {
14759             'actcount' => 1,
14760             'uncommit' => undef,
14761             'strcount' => 0,
14762             'line' => undef,
14763             'dircount' => 0,
14764             'items' => [
14765             bless( {
14766             'description' => '/^"MESSAGE"|^MESSAGE/i',
14767             'mod' => 'i',
14768             'ldelim' => '/',
14769             'hashname' => '__PATTERN1__',
14770             'rdelim' => '/',
14771             'lookahead' => 0,
14772             'pattern' => '^"MESSAGE"|^MESSAGE',
14773             'line' => 32
14774             }, 'Parse::RecDescent::Token' ),
14775             bless( {
14776             'code' => '{ $return = "MESSAGE"}',
14777             'hashname' => '__ACTION1__',
14778             'lookahead' => 0,
14779             'line' => 32
14780             }, 'Parse::RecDescent::Action' )
14781             ],
14782             'patcount' => 1,
14783             'number' => 0,
14784             'error' => undef
14785             }, 'Parse::RecDescent::Production' )
14786             ],
14787             'calls' => []
14788             }, 'Parse::RecDescent::Rule' ),
14789             'start' => bless( {
14790             'opcount' => 0,
14791             'name' => 'start',
14792             'vars' => '',
14793             'changed' => 0,
14794             'impcount' => 0,
14795             'calls' => [
14796             'part'
14797             ],
14798             'prods' => [
14799             bless( {
14800             'error' => undef,
14801             'strcount' => 0,
14802             'line' => undef,
14803             'items' => [
14804             bless( {
14805             'hashname' => '__PATTERN1__',
14806             'pattern' => '.*?\\(.*?BODYSTRUCTURE \\(',
14807             'line' => 185,
14808             'lookahead' => 0,
14809             'rdelim' => '/',
14810             'mod' => 'i',
14811             'description' => '/.*?\\\\(.*?BODYSTRUCTURE \\\\(/i',
14812             'ldelim' => '/'
14813             }, 'Parse::RecDescent::Token' ),
14814             bless( {
14815             'lookahead' => 0,
14816             'subrule' => 'part',
14817             'line' => 185,
14818             'max' => 1,
14819             'min' => 1,
14820             'argcode' => undef,
14821             'expected' => undef,
14822             'matchrule' => 0,
14823             'repspec' => '1'
14824             }, 'Parse::RecDescent::Repetition' ),
14825             bless( {
14826             'mod' => '',
14827             'description' => '/\\\\).*\\\\)\\\\r?\\\\n?/',
14828             'ldelim' => '/',
14829             'hashname' => '__PATTERN2__',
14830             'line' => 185,
14831             'pattern' => '\\).*\\)\\r?\\n?',
14832             'lookahead' => 0,
14833             'rdelim' => '/'
14834             }, 'Parse::RecDescent::Token' ),
14835             bless( {
14836             'hashname' => '__ACTION1__',
14837             'code' => '{ $return = $item{\'part(1)\'}[0] }',
14838             'line' => 186,
14839             'lookahead' => 0
14840             }, 'Parse::RecDescent::Action' )
14841             ],
14842             'dircount' => 0,
14843             'patcount' => 2,
14844             'number' => 0,
14845             'actcount' => 1,
14846             'uncommit' => undef
14847             }, 'Parse::RecDescent::Production' )
14848             ],
14849             'line' => 185
14850             }, 'Parse::RecDescent::Rule' ),
14851             'addressstruct' => bless( {
14852             'prods' => [
14853             bless( {
14854             'actcount' => 1,
14855             'uncommit' => undef,
14856             'strcount' => 2,
14857             'items' => [
14858             bless( {
14859             'line' => 82,
14860             'pattern' => '(',
14861             'lookahead' => 0,
14862             'hashname' => '__STRING1__',
14863             'description' => '\'(\''
14864             }, 'Parse::RecDescent::InterpLit' ),
14865             bless( {
14866             'lookahead' => 0,
14867             'implicit' => undef,
14868             'subrule' => 'personalname',
14869             'line' => 82,
14870             'argcode' => undef,
14871             'matchrule' => 0
14872             }, 'Parse::RecDescent::Subrule' ),
14873             bless( {
14874             'implicit' => undef,
14875             'subrule' => 'sourceroute',
14876             'line' => 82,
14877             'lookahead' => 0,
14878             'argcode' => undef,
14879             'matchrule' => 0
14880             }, 'Parse::RecDescent::Subrule' ),
14881             bless( {
14882             'implicit' => undef,
14883             'line' => 82,
14884             'subrule' => 'mailboxname',
14885             'lookahead' => 0,
14886             'argcode' => undef,
14887             'matchrule' => 0
14888             }, 'Parse::RecDescent::Subrule' ),
14889             bless( {
14890             'argcode' => undef,
14891             'lookahead' => 0,
14892             'implicit' => undef,
14893             'subrule' => 'hostname',
14894             'line' => 82,
14895             'matchrule' => 0
14896             }, 'Parse::RecDescent::Subrule' ),
14897             bless( {
14898             'pattern' => ')',
14899             'line' => 82,
14900             'lookahead' => 0,
14901             'hashname' => '__STRING2__',
14902             'description' => '\')\''
14903             }, 'Parse::RecDescent::InterpLit' ),
14904             bless( {
14905             'lookahead' => 0,
14906             'line' => 83,
14907             'code' => '{ bless { personalname => $item{personalname}
14908             , sourceroute => $item{sourceroute}
14909             , mailboxname => $item{mailboxname}
14910             , hostname => $item{hostname}
14911             }, \'Mail::IMAPClient::BodyStructure::Address\';
14912             }',
14913             'hashname' => '__ACTION1__'
14914             }, 'Parse::RecDescent::Action' )
14915             ],
14916             'line' => undef,
14917             'dircount' => 0,
14918             'patcount' => 0,
14919             'number' => 0,
14920             'error' => undef
14921             }, 'Parse::RecDescent::Production' )
14922             ],
14923             'calls' => [
14924             'personalname',
14925             'sourceroute',
14926             'mailboxname',
14927             'hostname'
14928             ],
14929             'line' => 82,
14930             'changed' => 0,
14931             'impcount' => 0,
14932             'vars' => '',
14933             'name' => 'addressstruct',
14934             'opcount' => 0
14935             }, 'Parse::RecDescent::Rule' ),
14936             'date' => bless( {
14937             'vars' => '',
14938             'impcount' => 0,
14939             'changed' => 0,
14940             'opcount' => 0,
14941             'name' => 'date',
14942             'line' => 93,
14943             'prods' => [
14944             bless( {
14945             'actcount' => 0,
14946             'uncommit' => undef,
14947             'strcount' => 0,
14948             'dircount' => 0,
14949             'items' => [
14950             bless( {
14951             'matchrule' => 0,
14952             'line' => 93,
14953             'implicit' => undef,
14954             'subrule' => 'NIL',
14955             'lookahead' => 0,
14956             'argcode' => undef
14957             }, 'Parse::RecDescent::Subrule' )
14958             ],
14959             'line' => undef,
14960             'patcount' => 0,
14961             'number' => 0,
14962             'error' => undef
14963             }, 'Parse::RecDescent::Production' ),
14964             bless( {
14965             'uncommit' => undef,
14966             'actcount' => 0,
14967             'number' => 1,
14968             'patcount' => 0,
14969             'dircount' => 0,
14970             'line' => 93,
14971             'items' => [
14972             bless( {
14973             'matchrule' => 0,
14974             'argcode' => undef,
14975             'implicit' => undef,
14976             'line' => 93,
14977             'subrule' => 'STRING',
14978             'lookahead' => 0
14979             }, 'Parse::RecDescent::Subrule' )
14980             ],
14981             'strcount' => 0,
14982             'error' => undef
14983             }, 'Parse::RecDescent::Production' )
14984             ],
14985             'calls' => [
14986             'NIL',
14987             'STRING'
14988             ]
14989             }, 'Parse::RecDescent::Rule' ),
14990             'hostname' => bless( {
14991             'changed' => 0,
14992             'impcount' => 0,
14993             'vars' => '',
14994             'opcount' => 0,
14995             'name' => 'hostname',
14996             'calls' => [
14997             'NIL',
14998             'STRING'
14999             ],
15000             'prods' => [
15001             bless( {
15002             'error' => undef,
15003             'uncommit' => undef,
15004             'actcount' => 0,
15005             'patcount' => 0,
15006             'number' => 0,
15007             'strcount' => 0,
15008             'items' => [
15009             bless( {
15010             'argcode' => undef,
15011             'implicit' => undef,
15012             'subrule' => 'NIL',
15013             'line' => 80,
15014             'lookahead' => 0,
15015             'matchrule' => 0
15016             }, 'Parse::RecDescent::Subrule' )
15017             ],
15018             'line' => undef,
15019             'dircount' => 0
15020             }, 'Parse::RecDescent::Production' ),
15021             bless( {
15022             'uncommit' => undef,
15023             'actcount' => 0,
15024             'patcount' => 0,
15025             'number' => 1,
15026             'strcount' => 0,
15027             'items' => [
15028             bless( {
15029             'argcode' => undef,
15030             'lookahead' => 0,
15031             'line' => 80,
15032             'implicit' => undef,
15033             'subrule' => 'STRING',
15034             'matchrule' => 0
15035             }, 'Parse::RecDescent::Subrule' )
15036             ],
15037             'line' => 80,
15038             'dircount' => 0,
15039             'error' => undef
15040             }, 'Parse::RecDescent::Production' )
15041             ],
15042             'line' => 80
15043             }, 'Parse::RecDescent::Rule' ),
15044             'HTML' => bless( {
15045             'name' => 'HTML',
15046             'opcount' => 0,
15047             'changed' => 0,
15048             'impcount' => 0,
15049             'vars' => '',
15050             'prods' => [
15051             bless( {
15052             'error' => undef,
15053             'actcount' => 1,
15054             'uncommit' => undef,
15055             'items' => [
15056             bless( {
15057             'ldelim' => '/',
15058             'description' => '/"HTML"|HTML/i',
15059             'mod' => 'i',
15060             'lookahead' => 0,
15061             'pattern' => '"HTML"|HTML',
15062             'line' => 31,
15063             'rdelim' => '/',
15064             'hashname' => '__PATTERN1__'
15065             }, 'Parse::RecDescent::Token' ),
15066             bless( {
15067             'lookahead' => 0,
15068             'line' => 31,
15069             'code' => '{ $return = "HTML" }',
15070             'hashname' => '__ACTION1__'
15071             }, 'Parse::RecDescent::Action' )
15072             ],
15073             'line' => undef,
15074             'dircount' => 0,
15075             'strcount' => 0,
15076             'number' => 0,
15077             'patcount' => 1
15078             }, 'Parse::RecDescent::Production' )
15079             ],
15080             'calls' => [],
15081             'line' => 31
15082             }, 'Parse::RecDescent::Rule' ),
15083             'kvpair' => bless( {
15084             'line' => 59,
15085             'prods' => [
15086             bless( {
15087             'error' => undef,
15088             'dircount' => 0,
15089             'line' => undef,
15090             'items' => [
15091             bless( {
15092             'hashname' => '__STRING1__',
15093             'description' => '\')\'',
15094             'line' => 59,
15095             'pattern' => ')',
15096             'lookahead' => -1
15097             }, 'Parse::RecDescent::InterpLit' ),
15098             bless( {
15099             'matchrule' => 0,
15100             'implicit' => undef,
15101             'subrule' => 'key',
15102             'line' => 59,
15103             'lookahead' => 0,
15104             'argcode' => undef
15105             }, 'Parse::RecDescent::Subrule' ),
15106             bless( {
15107             'subrule' => 'value',
15108             'implicit' => undef,
15109             'line' => 59,
15110             'lookahead' => 0,
15111             'argcode' => undef,
15112             'matchrule' => 0
15113             }, 'Parse::RecDescent::Subrule' ),
15114             bless( {
15115             'hashname' => '__ACTION1__',
15116             'code' => '{ $return = { $item{key} => $item{value} } }',
15117             'line' => 60,
15118             'lookahead' => 0
15119             }, 'Parse::RecDescent::Action' )
15120             ],
15121             'strcount' => 1,
15122             'number' => 0,
15123             'patcount' => 0,
15124             'actcount' => 1,
15125             'uncommit' => undef
15126             }, 'Parse::RecDescent::Production' )
15127             ],
15128             'calls' => [
15129             'key',
15130             'value'
15131             ],
15132             'name' => 'kvpair',
15133             'opcount' => 0,
15134             'vars' => '',
15135             'changed' => 0,
15136             'impcount' => 0
15137             }, 'Parse::RecDescent::Rule' ),
15138             'replyto' => bless( {
15139             'opcount' => 0,
15140             'name' => 'replyto',
15141             'vars' => '',
15142             'changed' => 0,
15143             'impcount' => 0,
15144             'line' => 101,
15145             'calls' => [
15146             'ADDRESSES'
15147             ],
15148             'prods' => [
15149             bless( {
15150             'error' => undef,
15151             'strcount' => 0,
15152             'line' => undef,
15153             'items' => [
15154             bless( {
15155             'matchrule' => 0,
15156             'argcode' => undef,
15157             'subrule' => 'ADDRESSES',
15158             'implicit' => undef,
15159             'line' => 101,
15160             'lookahead' => 0
15161             }, 'Parse::RecDescent::Subrule' )
15162             ],
15163             'dircount' => 0,
15164             'patcount' => 0,
15165             'number' => 0,
15166             'actcount' => 0,
15167             'uncommit' => undef
15168             }, 'Parse::RecDescent::Production' )
15169             ]
15170             }, 'Parse::RecDescent::Rule' ),
15171             'mailboxname' => bless( {
15172             'impcount' => 0,
15173             'changed' => 0,
15174             'vars' => '',
15175             'opcount' => 0,
15176             'name' => 'mailboxname',
15177             'line' => 79,
15178             'calls' => [
15179             'NIL',
15180             'STRING'
15181             ],
15182             'prods' => [
15183             bless( {
15184             'error' => undef,
15185             'patcount' => 0,
15186             'number' => 0,
15187             'strcount' => 0,
15188             'dircount' => 0,
15189             'items' => [
15190             bless( {
15191             'matchrule' => 0,
15192             'argcode' => undef,
15193             'implicit' => undef,
15194             'line' => 79,
15195             'subrule' => 'NIL',
15196             'lookahead' => 0
15197             }, 'Parse::RecDescent::Subrule' )
15198             ],
15199             'line' => undef,
15200             'uncommit' => undef,
15201             'actcount' => 0
15202             }, 'Parse::RecDescent::Production' ),
15203             bless( {
15204             'number' => 1,
15205             'patcount' => 0,
15206             'items' => [
15207             bless( {
15208             'lookahead' => 0,
15209             'implicit' => undef,
15210             'subrule' => 'STRING',
15211             'line' => 79,
15212             'argcode' => undef,
15213             'matchrule' => 0
15214             }, 'Parse::RecDescent::Subrule' )
15215             ],
15216             'line' => 79,
15217             'dircount' => 0,
15218             'strcount' => 0,
15219             'uncommit' => undef,
15220             'actcount' => 0,
15221             'error' => undef
15222             }, 'Parse::RecDescent::Production' )
15223             ]
15224             }, 'Parse::RecDescent::Rule' ),
15225             'basicfields' => bless( {
15226             'calls' => [
15227             'bodysubtype',
15228             'bodyparms',
15229             'bodyid',
15230             'bodydesc',
15231             'bodyenc',
15232             'bodysize'
15233             ],
15234             'prods' => [
15235             bless( {
15236             'error' => undef,
15237             'number' => 0,
15238             'patcount' => 0,
15239             'items' => [
15240             bless( {
15241             'lookahead' => 0,
15242             'implicit' => undef,
15243             'subrule' => 'bodysubtype',
15244             'line' => 114,
15245             'argcode' => undef,
15246             'matchrule' => 0
15247             }, 'Parse::RecDescent::Subrule' ),
15248             bless( {
15249             'max' => 1,
15250             'subrule' => 'bodyparms',
15251             'line' => 114,
15252             'lookahead' => 0,
15253             'matchrule' => 0,
15254             'expected' => undef,
15255             'repspec' => '?',
15256             'min' => 0,
15257             'argcode' => undef
15258             }, 'Parse::RecDescent::Repetition' ),
15259             bless( {
15260             'min' => 0,
15261             'argcode' => undef,
15262             'matchrule' => 0,
15263             'expected' => undef,
15264             'repspec' => '?',
15265             'subrule' => 'bodyid',
15266             'line' => 114,
15267             'lookahead' => 0,
15268             'max' => 1
15269             }, 'Parse::RecDescent::Repetition' ),
15270             bless( {
15271             'lookahead' => 0,
15272             'subrule' => 'bodydesc',
15273             'line' => 115,
15274             'max' => 1,
15275             'argcode' => undef,
15276             'min' => 0,
15277             'repspec' => '?',
15278             'expected' => undef,
15279             'matchrule' => 0
15280             }, 'Parse::RecDescent::Repetition' ),
15281             bless( {
15282             'argcode' => undef,
15283             'min' => 0,
15284             'repspec' => '?',
15285             'expected' => undef,
15286             'matchrule' => 0,
15287             'lookahead' => 0,
15288             'line' => 115,
15289             'subrule' => 'bodyenc',
15290             'max' => 1
15291             }, 'Parse::RecDescent::Repetition' ),
15292             bless( {
15293             'max' => 1,
15294             'subrule' => 'bodysize',
15295             'line' => 115,
15296             'lookahead' => 0,
15297             'repspec' => '?',
15298             'matchrule' => 0,
15299             'expected' => undef,
15300             'argcode' => undef,
15301             'min' => 0
15302             }, 'Parse::RecDescent::Repetition' ),
15303             bless( {
15304             'lookahead' => 0,
15305             'line' => 116,
15306             'code' => '{ $return = { bodysubtype => $item{bodysubtype} };
15307             take_optional_items($return, \\%item,
15308             qw/bodyparms bodyid bodydesc bodyenc bodysize/);
15309             1;
15310             }',
15311             'hashname' => '__ACTION1__'
15312             }, 'Parse::RecDescent::Action' )
15313             ],
15314             'dircount' => 0,
15315             'line' => undef,
15316             'strcount' => 0,
15317             'uncommit' => undef,
15318             'actcount' => 1
15319             }, 'Parse::RecDescent::Production' )
15320             ],
15321             'line' => 114,
15322             'impcount' => 0,
15323             'changed' => 0,
15324             'vars' => '',
15325             'opcount' => 0,
15326             'name' => 'basicfields'
15327             }, 'Parse::RecDescent::Rule' ),
15328             'bodysize' => bless( {
15329             'opcount' => 0,
15330             'name' => 'bodysize',
15331             'vars' => '',
15332             'changed' => 0,
15333             'impcount' => 0,
15334             'prods' => [
15335             bless( {
15336             'line' => undef,
15337             'items' => [
15338             bless( {
15339             'hashname' => '__PATTERN1__',
15340             'lookahead' => -1,
15341             'pattern' => '[()]',
15342             'line' => 70,
15343             'rdelim' => '/',
15344             'mod' => '',
15345             'description' => '/[()]/',
15346             'ldelim' => '/'
15347             }, 'Parse::RecDescent::Token' ),
15348             bless( {
15349             'matchrule' => 0,
15350             'argcode' => undef,
15351             'line' => 70,
15352             'implicit' => undef,
15353             'subrule' => 'NIL',
15354             'lookahead' => 0
15355             }, 'Parse::RecDescent::Subrule' )
15356             ],
15357             'dircount' => 0,
15358             'strcount' => 0,
15359             'number' => 0,
15360             'patcount' => 1,
15361             'actcount' => 0,
15362             'uncommit' => undef,
15363             'error' => undef
15364             }, 'Parse::RecDescent::Production' ),
15365             bless( {
15366             'error' => undef,
15367             'actcount' => 0,
15368             'uncommit' => undef,
15369             'line' => 70,
15370             'items' => [
15371             bless( {
15372             'matchrule' => 0,
15373             'argcode' => undef,
15374             'line' => 70,
15375             'implicit' => undef,
15376             'subrule' => 'NUMBER',
15377             'lookahead' => 0
15378             }, 'Parse::RecDescent::Subrule' )
15379             ],
15380             'dircount' => 0,
15381             'strcount' => 0,
15382             'number' => 1,
15383             'patcount' => 0
15384             }, 'Parse::RecDescent::Production' )
15385             ],
15386             'calls' => [
15387             'NIL',
15388             'NUMBER'
15389             ],
15390             'line' => 70
15391             }, 'Parse::RecDescent::Rule' ),
15392             'othertypemessage' => bless( {
15393             'opcount' => 0,
15394             'name' => 'othertypemessage',
15395             'vars' => '',
15396             'impcount' => 0,
15397             'changed' => 0,
15398             'line' => 132,
15399             'prods' => [
15400             bless( {
15401             'error' => undef,
15402             'uncommit' => undef,
15403             'actcount' => 1,
15404             'patcount' => 0,
15405             'number' => 0,
15406             'strcount' => 0,
15407             'line' => undef,
15408             'items' => [
15409             bless( {
15410             'matchrule' => 0,
15411             'lookahead' => 0,
15412             'line' => 132,
15413             'implicit' => undef,
15414             'subrule' => 'bodytype',
15415             'argcode' => undef
15416             }, 'Parse::RecDescent::Subrule' ),
15417             bless( {
15418             'matchrule' => 0,
15419             'argcode' => undef,
15420             'subrule' => 'basicfields',
15421             'implicit' => undef,
15422             'line' => 132,
15423             'lookahead' => 0
15424             }, 'Parse::RecDescent::Subrule' ),
15425             bless( {
15426             'min' => 0,
15427             'argcode' => undef,
15428             'expected' => undef,
15429             'matchrule' => 0,
15430             'repspec' => '?',
15431             'lookahead' => 0,
15432             'line' => 132,
15433             'subrule' => 'bodyMD5',
15434             'max' => 1
15435             }, 'Parse::RecDescent::Repetition' ),
15436             bless( {
15437             'lookahead' => 0,
15438             'subrule' => 'bodydisp',
15439             'line' => 132,
15440             'max' => 1,
15441             'argcode' => undef,
15442             'min' => 0,
15443             'repspec' => '?',
15444             'expected' => undef,
15445             'matchrule' => 0
15446             }, 'Parse::RecDescent::Repetition' ),
15447             bless( {
15448             'repspec' => '?',
15449             'matchrule' => 0,
15450             'expected' => undef,
15451             'argcode' => undef,
15452             'min' => 0,
15453             'max' => 1,
15454             'line' => 133,
15455             'subrule' => 'bodylang',
15456             'lookahead' => 0
15457             }, 'Parse::RecDescent::Repetition' ),
15458             bless( {
15459             'repspec' => '?',
15460             'matchrule' => 0,
15461             'expected' => undef,
15462             'argcode' => undef,
15463             'min' => 0,
15464             'max' => 1,
15465             'subrule' => 'bodyextra',
15466             'line' => 133,
15467             'lookahead' => 0
15468             }, 'Parse::RecDescent::Repetition' ),
15469             bless( {
15470             'code' => '{ $return = { bodytype => $item{bodytype} };
15471             take_optional_items($return, \\%item
15472             , qw/bodyMD5 bodydisp bodylang bodyextra/ );
15473             merge_hash($return, $item{basicfields});
15474             1;
15475             }',
15476             'hashname' => '__ACTION1__',
15477             'line' => 134,
15478             'lookahead' => 0
15479             }, 'Parse::RecDescent::Action' )
15480             ],
15481             'dircount' => 0
15482             }, 'Parse::RecDescent::Production' )
15483             ],
15484             'calls' => [
15485             'bodytype',
15486             'basicfields',
15487             'bodyMD5',
15488             'bodydisp',
15489             'bodylang',
15490             'bodyextra'
15491             ]
15492             }, 'Parse::RecDescent::Rule' ),
15493             'bodydesc' => bless( {
15494             'impcount' => 0,
15495             'changed' => 0,
15496             'vars' => '',
15497             'opcount' => 0,
15498             'name' => 'bodydesc',
15499             'calls' => [
15500             'NIL',
15501             'STRING'
15502             ],
15503             'prods' => [
15504             bless( {
15505             'uncommit' => undef,
15506             'actcount' => 0,
15507             'number' => 0,
15508             'patcount' => 1,
15509             'dircount' => 0,
15510             'line' => undef,
15511             'items' => [
15512             bless( {
15513             'description' => '/[()]/',
15514             'mod' => '',
15515             'ldelim' => '/',
15516             'hashname' => '__PATTERN1__',
15517             'lookahead' => -1,
15518             'pattern' => '[()]',
15519             'line' => 69,
15520             'rdelim' => '/'
15521             }, 'Parse::RecDescent::Token' ),
15522             bless( {
15523             'argcode' => undef,
15524             'lookahead' => 0,
15525             'implicit' => undef,
15526             'subrule' => 'NIL',
15527             'line' => 69,
15528             'matchrule' => 0
15529             }, 'Parse::RecDescent::Subrule' )
15530             ],
15531             'strcount' => 0,
15532             'error' => undef
15533             }, 'Parse::RecDescent::Production' ),
15534             bless( {
15535             'line' => 69,
15536             'items' => [
15537             bless( {
15538             'matchrule' => 0,
15539             'lookahead' => 0,
15540             'implicit' => undef,
15541             'subrule' => 'STRING',
15542             'line' => 69,
15543             'argcode' => undef
15544             }, 'Parse::RecDescent::Subrule' )
15545             ],
15546             'dircount' => 0,
15547             'strcount' => 0,
15548             'number' => 1,
15549             'patcount' => 0,
15550             'actcount' => 0,
15551             'uncommit' => undef,
15552             'error' => undef
15553             }, 'Parse::RecDescent::Production' )
15554             ],
15555             'line' => 69
15556             }, 'Parse::RecDescent::Rule' ),
15557             'bodyenc' => bless( {
15558             'line' => 71,
15559             'calls' => [
15560             'NIL',
15561             'STRING',
15562             'KVPAIRS'
15563             ],
15564             'prods' => [
15565             bless( {
15566             'uncommit' => undef,
15567             'actcount' => 0,
15568             'number' => 0,
15569             'patcount' => 0,
15570             'items' => [
15571             bless( {
15572             'argcode' => undef,
15573             'line' => 71,
15574             'implicit' => undef,
15575             'subrule' => 'NIL',
15576             'lookahead' => 0,
15577             'matchrule' => 0
15578             }, 'Parse::RecDescent::Subrule' )
15579             ],
15580             'line' => undef,
15581             'dircount' => 0,
15582             'strcount' => 0,
15583             'error' => undef
15584             }, 'Parse::RecDescent::Production' ),
15585             bless( {
15586             'error' => undef,
15587             'actcount' => 0,
15588             'uncommit' => undef,
15589             'strcount' => 0,
15590             'dircount' => 0,
15591             'line' => 71,
15592             'items' => [
15593             bless( {
15594             'argcode' => undef,
15595             'lookahead' => 0,
15596             'implicit' => undef,
15597             'subrule' => 'STRING',
15598             'line' => 71,
15599             'matchrule' => 0
15600             }, 'Parse::RecDescent::Subrule' )
15601             ],
15602             'patcount' => 0,
15603             'number' => 1
15604             }, 'Parse::RecDescent::Production' ),
15605             bless( {
15606             'uncommit' => undef,
15607             'actcount' => 0,
15608             'number' => 2,
15609             'patcount' => 0,
15610             'items' => [
15611             bless( {
15612             'matchrule' => 0,
15613             'argcode' => undef,
15614             'lookahead' => 0,
15615             'line' => 71,
15616             'implicit' => undef,
15617             'subrule' => 'KVPAIRS'
15618             }, 'Parse::RecDescent::Subrule' )
15619             ],
15620             'line' => 71,
15621             'dircount' => 0,
15622             'strcount' => 0,
15623             'error' => undef
15624             }, 'Parse::RecDescent::Production' )
15625             ],
15626             'changed' => 0,
15627             'impcount' => 0,
15628             'vars' => '',
15629             'name' => 'bodyenc',
15630             'opcount' => 0
15631             }, 'Parse::RecDescent::Rule' ),
15632             'STRING' => bless( {
15633             'name' => 'STRING',
15634             'opcount' => 0,
15635             'vars' => '',
15636             'changed' => 0,
15637             'impcount' => 0,
15638             'line' => 46,
15639             'calls' => [
15640             'DOUBLE_QUOTED_STRING',
15641             'SINGLE_QUOTED_STRING',
15642             'BARESTRING'
15643             ],
15644             'prods' => [
15645             bless( {
15646             'uncommit' => undef,
15647             'actcount' => 0,
15648             'number' => 0,
15649             'patcount' => 0,
15650             'line' => undef,
15651             'items' => [
15652             bless( {
15653             'lookahead' => 0,
15654             'implicit' => undef,
15655             'subrule' => 'DOUBLE_QUOTED_STRING',
15656             'line' => 46,
15657             'argcode' => undef,
15658             'matchrule' => 0
15659             }, 'Parse::RecDescent::Subrule' )
15660             ],
15661             'dircount' => 0,
15662             'strcount' => 0,
15663             'error' => undef
15664             }, 'Parse::RecDescent::Production' ),
15665             bless( {
15666             'patcount' => 0,
15667             'number' => 1,
15668             'strcount' => 0,
15669             'dircount' => 0,
15670             'items' => [
15671             bless( {
15672             'matchrule' => 0,
15673             'argcode' => undef,
15674             'line' => 46,
15675             'implicit' => undef,
15676             'subrule' => 'SINGLE_QUOTED_STRING',
15677             'lookahead' => 0
15678             }, 'Parse::RecDescent::Subrule' )
15679             ],
15680             'line' => 46,
15681             'uncommit' => undef,
15682             'actcount' => 0,
15683             'error' => undef
15684             }, 'Parse::RecDescent::Production' ),
15685             bless( {
15686             'uncommit' => undef,
15687             'actcount' => 0,
15688             'number' => 2,
15689             'patcount' => 0,
15690             'dircount' => 0,
15691             'items' => [
15692             bless( {
15693             'matchrule' => 0,
15694             'argcode' => undef,
15695             'implicit' => undef,
15696             'subrule' => 'BARESTRING',
15697             'line' => 46,
15698             'lookahead' => 0
15699             }, 'Parse::RecDescent::Subrule' )
15700             ],
15701             'line' => 46,
15702             'strcount' => 0,
15703             'error' => undef
15704             }, 'Parse::RecDescent::Production' )
15705             ]
15706             }, 'Parse::RecDescent::Rule' ),
15707             'envelope' => bless( {
15708             'prods' => [
15709             bless( {
15710             'uncommit' => undef,
15711             'actcount' => 1,
15712             'patcount' => 2,
15713             'number' => 0,
15714             'strcount' => 0,
15715             'dircount' => 0,
15716             'items' => [
15717             bless( {
15718             'rdelim' => '/',
15719             'pattern' => '.*?\\(.*?ENVELOPE',
15720             'line' => 188,
15721             'lookahead' => 0,
15722             'hashname' => '__PATTERN1__',
15723             'ldelim' => '/',
15724             'description' => '/.*?\\\\(.*?ENVELOPE/',
15725             'mod' => ''
15726             }, 'Parse::RecDescent::Token' ),
15727             bless( {
15728             'matchrule' => 0,
15729             'implicit' => undef,
15730             'line' => 188,
15731             'subrule' => 'envelopestruct',
15732             'lookahead' => 0,
15733             'argcode' => undef
15734             }, 'Parse::RecDescent::Subrule' ),
15735             bless( {
15736             'ldelim' => '/',
15737             'description' => '/.*\\\\)/',
15738             'mod' => '',
15739             'line' => 188,
15740             'pattern' => '.*\\)',
15741             'lookahead' => 0,
15742             'rdelim' => '/',
15743             'hashname' => '__PATTERN2__'
15744             }, 'Parse::RecDescent::Token' ),
15745             bless( {
15746             'lookahead' => 0,
15747             'line' => 189,
15748             'code' => '{ $return = $item{envelopestruct} }',
15749             'hashname' => '__ACTION1__'
15750             }, 'Parse::RecDescent::Action' )
15751             ],
15752             'line' => undef,
15753             'error' => undef
15754             }, 'Parse::RecDescent::Production' )
15755             ],
15756             'calls' => [
15757             'envelopestruct'
15758             ],
15759             'line' => 188,
15760             'impcount' => 0,
15761             'changed' => 0,
15762             'vars' => '',
15763             'name' => 'envelope',
15764             'opcount' => 0
15765             }, 'Parse::RecDescent::Rule' ),
15766             'to' => bless( {
15767             'line' => 103,
15768             'prods' => [
15769             bless( {
15770             'error' => undef,
15771             'uncommit' => undef,
15772             'actcount' => 0,
15773             'patcount' => 0,
15774             'number' => 0,
15775             'strcount' => 0,
15776             'items' => [
15777             bless( {
15778             'argcode' => undef,
15779             'lookahead' => 0,
15780             'subrule' => 'ADDRESSES',
15781             'implicit' => undef,
15782             'line' => 103,
15783             'matchrule' => 0
15784             }, 'Parse::RecDescent::Subrule' )
15785             ],
15786             'line' => undef,
15787             'dircount' => 0
15788             }, 'Parse::RecDescent::Production' )
15789             ],
15790             'calls' => [
15791             'ADDRESSES'
15792             ],
15793             'name' => 'to',
15794             'opcount' => 0,
15795             'vars' => '',
15796             'changed' => 0,
15797             'impcount' => 0
15798             }, 'Parse::RecDescent::Rule' ),
15799             'textlines' => bless( {
15800             'vars' => '',
15801             'changed' => 0,
15802             'impcount' => 0,
15803             'opcount' => 0,
15804             'name' => 'textlines',
15805             'calls' => [
15806             'NIL',
15807             'NUMBER'
15808             ],
15809             'prods' => [
15810             bless( {
15811             'patcount' => 0,
15812             'number' => 0,
15813             'strcount' => 0,
15814             'items' => [
15815             bless( {
15816             'matchrule' => 0,
15817             'argcode' => undef,
15818             'lookahead' => 0,
15819             'implicit' => undef,
15820             'line' => 50,
15821             'subrule' => 'NIL'
15822             }, 'Parse::RecDescent::Subrule' )
15823             ],
15824             'dircount' => 0,
15825             'line' => undef,
15826             'uncommit' => undef,
15827             'actcount' => 0,
15828             'error' => undef
15829             }, 'Parse::RecDescent::Production' ),
15830             bless( {
15831             'patcount' => 0,
15832             'number' => 1,
15833             'strcount' => 0,
15834             'items' => [
15835             bless( {
15836             'matchrule' => 0,
15837             'lookahead' => 0,
15838             'subrule' => 'NUMBER',
15839             'implicit' => undef,
15840             'line' => 50,
15841             'argcode' => undef
15842             }, 'Parse::RecDescent::Subrule' )
15843             ],
15844             'dircount' => 0,
15845             'line' => 50,
15846             'uncommit' => undef,
15847             'actcount' => 0,
15848             'error' => undef
15849             }, 'Parse::RecDescent::Production' )
15850             ],
15851             'line' => 50
15852             }, 'Parse::RecDescent::Rule' ),
15853             'nestedmessage' => bless( {
15854             'opcount' => 0,
15855             'name' => 'nestedmessage',
15856             'changed' => 0,
15857             'impcount' => 0,
15858             'vars' => '',
15859             'prods' => [
15860             bless( {
15861             'line' => undef,
15862             'items' => [
15863             bless( {
15864             'matchrule' => 0,
15865             'argcode' => undef,
15866             'lookahead' => 0,
15867             'implicit' => undef,
15868             'subrule' => 'rfc822message',
15869             'line' => 141
15870             }, 'Parse::RecDescent::Subrule' ),
15871             bless( {
15872             'line' => 141,
15873             'lookahead' => 0,
15874             'hashname' => '__DIRECTIVE1__',
15875             'name' => '',
15876             'code' => '$commit = 1'
15877             }, 'Parse::RecDescent::Directive' ),
15878             bless( {
15879             'argcode' => undef,
15880             'implicit' => undef,
15881             'line' => 141,
15882             'subrule' => 'bodyparms',
15883             'lookahead' => 0,
15884             'matchrule' => 0
15885             }, 'Parse::RecDescent::Subrule' ),
15886             bless( {
15887             'matchrule' => 0,
15888             'argcode' => undef,
15889             'line' => 141,
15890             'implicit' => undef,
15891             'subrule' => 'bodyid',
15892             'lookahead' => 0
15893             }, 'Parse::RecDescent::Subrule' ),
15894             bless( {
15895             'matchrule' => 0,
15896             'argcode' => undef,
15897             'lookahead' => 0,
15898             'implicit' => undef,
15899             'line' => 141,
15900             'subrule' => 'bodydesc'
15901             }, 'Parse::RecDescent::Subrule' ),
15902             bless( {
15903             'subrule' => 'bodyenc',
15904             'implicit' => undef,
15905             'line' => 141,
15906             'lookahead' => 0,
15907             'argcode' => undef,
15908             'matchrule' => 0
15909             }, 'Parse::RecDescent::Subrule' ),
15910             bless( {
15911             'argcode' => undef,
15912             'implicit' => undef,
15913             'subrule' => 'bodysize',
15914             'line' => 142,
15915             'lookahead' => 0,
15916             'matchrule' => 0
15917             }, 'Parse::RecDescent::Subrule' ),
15918             bless( {
15919             'max' => 1,
15920             'lookahead' => 0,
15921             'subrule' => 'envelopestruct',
15922             'line' => 143,
15923             'repspec' => '?',
15924             'expected' => undef,
15925             'matchrule' => 0,
15926             'argcode' => undef,
15927             'min' => 0
15928             }, 'Parse::RecDescent::Repetition' ),
15929             bless( {
15930             'max' => 1,
15931             'lookahead' => 0,
15932             'line' => 143,
15933             'subrule' => 'bodystructure',
15934             'repspec' => '?',
15935             'expected' => undef,
15936             'matchrule' => 0,
15937             'argcode' => undef,
15938             'min' => 0
15939             }, 'Parse::RecDescent::Repetition' ),
15940             bless( {
15941             'argcode' => undef,
15942             'min' => 0,
15943             'repspec' => '?',
15944             'matchrule' => 0,
15945             'expected' => undef,
15946             'line' => 143,
15947             'subrule' => 'textlines',
15948             'lookahead' => 0,
15949             'max' => 1
15950             }, 'Parse::RecDescent::Repetition' ),
15951             bless( {
15952             'max' => 1,
15953             'lookahead' => 0,
15954             'subrule' => 'bodyMD5',
15955             'line' => 144,
15956             'expected' => undef,
15957             'matchrule' => 0,
15958             'repspec' => '?',
15959             'min' => 0,
15960             'argcode' => undef
15961             }, 'Parse::RecDescent::Repetition' ),
15962             bless( {
15963             'max' => 1,
15964             'line' => 144,
15965             'subrule' => 'bodydisp',
15966             'lookahead' => 0,
15967             'repspec' => '?',
15968             'matchrule' => 0,
15969             'expected' => undef,
15970             'argcode' => undef,
15971             'min' => 0
15972             }, 'Parse::RecDescent::Repetition' ),
15973             bless( {
15974             'line' => 144,
15975             'subrule' => 'bodylang',
15976             'lookahead' => 0,
15977             'max' => 1,
15978             'min' => 0,
15979             'argcode' => undef,
15980             'matchrule' => 0,
15981             'expected' => undef,
15982             'repspec' => '?'
15983             }, 'Parse::RecDescent::Repetition' ),
15984             bless( {
15985             'expected' => undef,
15986             'matchrule' => 0,
15987             'repspec' => '?',
15988             'min' => 0,
15989             'argcode' => undef,
15990             'max' => 1,
15991             'lookahead' => 0,
15992             'subrule' => 'bodyextra',
15993             'line' => 144
15994             }, 'Parse::RecDescent::Repetition' ),
15995             bless( {
15996             'line' => 145,
15997             'lookahead' => 0,
15998             'hashname' => '__ACTION1__',
15999             'code' => '{
16000             $return = {};
16001             $return->{$_} = $item{$_}
16002             for qw/bodyparms bodyid bodydesc bodyenc bodysize/;
16003             # envelopestruct bodystructure textlines/;
16004              
16005             take_optional_items($return, \\%item
16006             , qw/envelopestruct bodystructure textlines/
16007             , qw/bodyMD5 bodydisp bodylang bodyextra/);
16008              
16009             merge_hash($return, $item{bodystructure}[0]);
16010             merge_hash($return, $item{basicfields});
16011             $return->{bodytype} = "MESSAGE" ;
16012             $return->{bodysubtype} = "RFC822" ;
16013             1;
16014             }'
16015             }, 'Parse::RecDescent::Action' )
16016             ],
16017             'dircount' => 1,
16018             'strcount' => 0,
16019             'number' => 0,
16020             'patcount' => 0,
16021             'actcount' => 1,
16022             'uncommit' => undef,
16023             'error' => undef
16024             }, 'Parse::RecDescent::Production' )
16025             ],
16026             'calls' => [
16027             'rfc822message',
16028             'bodyparms',
16029             'bodyid',
16030             'bodydesc',
16031             'bodyenc',
16032             'bodysize',
16033             'envelopestruct',
16034             'bodystructure',
16035             'textlines',
16036             'bodyMD5',
16037             'bodydisp',
16038             'bodylang',
16039             'bodyextra'
16040             ],
16041             'line' => 141
16042             }, 'Parse::RecDescent::Rule' ),
16043             'sender' => bless( {
16044             'line' => 102,
16045             'calls' => [
16046             'ADDRESSES'
16047             ],
16048             'prods' => [
16049             bless( {
16050             'error' => undef,
16051             'actcount' => 0,
16052             'uncommit' => undef,
16053             'items' => [
16054             bless( {
16055             'argcode' => undef,
16056             'subrule' => 'ADDRESSES',
16057             'implicit' => undef,
16058             'line' => 102,
16059             'lookahead' => 0,
16060             'matchrule' => 0
16061             }, 'Parse::RecDescent::Subrule' )
16062             ],
16063             'line' => undef,
16064             'dircount' => 0,
16065             'strcount' => 0,
16066             'number' => 0,
16067             'patcount' => 0
16068             }, 'Parse::RecDescent::Production' )
16069             ],
16070             'vars' => '',
16071             'impcount' => 0,
16072             'changed' => 0,
16073             'opcount' => 0,
16074             'name' => 'sender'
16075             }, 'Parse::RecDescent::Rule' ),
16076             'SINGLE_QUOTED_STRING' => bless( {
16077             'calls' => [],
16078             'prods' => [
16079             bless( {
16080             'strcount' => 2,
16081             'line' => undef,
16082             'items' => [
16083             bless( {
16084             'lookahead' => 0,
16085             'line' => 40,
16086             'pattern' => '\'',
16087             'description' => '\'\'\'',
16088             'hashname' => '__STRING1__'
16089             }, 'Parse::RecDescent::InterpLit' ),
16090             bless( {
16091             'hashname' => '__PATTERN1__',
16092             'rdelim' => '/',
16093             'lookahead' => 0,
16094             'pattern' => '(?:\\\\[\'\\\\]|[^\'])*',
16095             'line' => 40,
16096             'description' => '/(?:\\\\\\\\[\'\\\\\\\\]|[^\'])*/',
16097             'mod' => '',
16098             'ldelim' => '/'
16099             }, 'Parse::RecDescent::Token' ),
16100             bless( {
16101             'hashname' => '__STRING2__',
16102             'description' => '\'\'\'',
16103             'line' => 40,
16104             'pattern' => '\'',
16105             'lookahead' => 0
16106             }, 'Parse::RecDescent::InterpLit' ),
16107             bless( {
16108             'code' => '{ $return = $item{__PATTERN1__} }',
16109             'hashname' => '__ACTION1__',
16110             'line' => 40,
16111             'lookahead' => 0
16112             }, 'Parse::RecDescent::Action' )
16113             ],
16114             'dircount' => 0,
16115             'patcount' => 1,
16116             'number' => 0,
16117             'actcount' => 1,
16118             'uncommit' => undef,
16119             'error' => undef
16120             }, 'Parse::RecDescent::Production' )
16121             ],
16122             'line' => 38,
16123             'impcount' => 0,
16124             'changed' => 0,
16125             'vars' => '',
16126             'opcount' => 0,
16127             'name' => 'SINGLE_QUOTED_STRING'
16128             }, 'Parse::RecDescent::Rule' ),
16129             'bodystructure' => bless( {
16130             'calls' => [
16131             'part'
16132             ],
16133             'prods' => [
16134             bless( {
16135             'dircount' => 0,
16136             'items' => [
16137             bless( {
16138             'lookahead' => 0,
16139             'line' => 182,
16140             'pattern' => '(',
16141             'description' => '\'(\'',
16142             'hashname' => '__STRING1__'
16143             }, 'Parse::RecDescent::InterpLit' ),
16144             bless( {
16145             'min' => 1,
16146             'argcode' => undef,
16147             'expected' => undef,
16148             'matchrule' => 0,
16149             'repspec' => 's',
16150             'lookahead' => 0,
16151             'line' => 182,
16152             'subrule' => 'part',
16153             'max' => 100000000
16154             }, 'Parse::RecDescent::Repetition' ),
16155             bless( {
16156             'hashname' => '__STRING2__',
16157             'description' => '\')\'',
16158             'pattern' => ')',
16159             'line' => 182,
16160             'lookahead' => 0
16161             }, 'Parse::RecDescent::InterpLit' ),
16162             bless( {
16163             'lookahead' => 0,
16164             'line' => 183,
16165             'code' => '{ $return = $item{\'part(s)\'} }',
16166             'hashname' => '__ACTION1__'
16167             }, 'Parse::RecDescent::Action' )
16168             ],
16169             'line' => undef,
16170             'strcount' => 2,
16171             'number' => 0,
16172             'patcount' => 0,
16173             'actcount' => 1,
16174             'uncommit' => undef,
16175             'error' => undef
16176             }, 'Parse::RecDescent::Production' )
16177             ],
16178             'line' => 182,
16179             'impcount' => 0,
16180             'changed' => 0,
16181             'vars' => '',
16182             'name' => 'bodystructure',
16183             'opcount' => 0
16184             }, 'Parse::RecDescent::Rule' ),
16185             'STRINGS' => bless( {
16186             'impcount' => 0,
16187             'changed' => 0,
16188             'vars' => '',
16189             'opcount' => 0,
16190             'name' => 'STRINGS',
16191             'prods' => [
16192             bless( {
16193             'uncommit' => undef,
16194             'actcount' => 1,
16195             'number' => 0,
16196             'patcount' => 0,
16197             'items' => [
16198             bless( {
16199             'pattern' => '(',
16200             'line' => 48,
16201             'lookahead' => 0,
16202             'hashname' => '__STRING1__',
16203             'description' => '\'(\''
16204             }, 'Parse::RecDescent::InterpLit' ),
16205             bless( {
16206             'line' => 48,
16207             'subrule' => 'STRING',
16208             'lookahead' => 0,
16209             'max' => 100000000,
16210             'min' => 1,
16211             'argcode' => undef,
16212             'matchrule' => 0,
16213             'expected' => undef,
16214             'repspec' => 's'
16215             }, 'Parse::RecDescent::Repetition' ),
16216             bless( {
16217             'hashname' => '__STRING2__',
16218             'description' => '\')\'',
16219             'pattern' => ')',
16220             'line' => 48,
16221             'lookahead' => 0
16222             }, 'Parse::RecDescent::InterpLit' ),
16223             bless( {
16224             'hashname' => '__ACTION1__',
16225             'code' => '{ $return = $item{\'STRING(s)\'} }',
16226             'lookahead' => 0,
16227             'line' => 48
16228             }, 'Parse::RecDescent::Action' )
16229             ],
16230             'line' => undef,
16231             'dircount' => 0,
16232             'strcount' => 2,
16233             'error' => undef
16234             }, 'Parse::RecDescent::Production' )
16235             ],
16236             'calls' => [
16237             'STRING'
16238             ],
16239             'line' => 48
16240             }, 'Parse::RecDescent::Rule' ),
16241             'BARESTRING' => bless( {
16242             'vars' => '',
16243             'changed' => 0,
16244             'impcount' => 0,
16245             'opcount' => 0,
16246             'name' => 'BARESTRING',
16247             'prods' => [
16248             bless( {
16249             'error' => undef,
16250             'number' => 0,
16251             'patcount' => 2,
16252             'items' => [
16253             bless( {
16254             'description' => '/^[)(\'"]/',
16255             'mod' => '',
16256             'ldelim' => '/',
16257             'hashname' => '__PATTERN1__',
16258             'line' => 43,
16259             'pattern' => '^[)(\'"]',
16260             'lookahead' => -1,
16261             'rdelim' => '/'
16262             }, 'Parse::RecDescent::Token' ),
16263             bless( {
16264             'mod' => '',
16265             'description' => '/^(?!\\\\(|\\\\))(?:\\\\\\\\ |\\\\S)+/',
16266             'ldelim' => '/',
16267             'hashname' => '__PATTERN2__',
16268             'pattern' => '^(?!\\(|\\))(?:\\\\ |\\S)+',
16269             'line' => 43,
16270             'lookahead' => 0,
16271             'rdelim' => '/'
16272             }, 'Parse::RecDescent::Token' ),
16273             bless( {
16274             'lookahead' => 0,
16275             'line' => 44,
16276             'code' => '{ $return = $item{__PATTERN1__} }',
16277             'hashname' => '__ACTION1__'
16278             }, 'Parse::RecDescent::Action' )
16279             ],
16280             'line' => undef,
16281             'dircount' => 0,
16282             'strcount' => 0,
16283             'uncommit' => undef,
16284             'actcount' => 1
16285             }, 'Parse::RecDescent::Production' )
16286             ],
16287             'calls' => [],
16288             'line' => 43
16289             }, 'Parse::RecDescent::Rule' ),
16290             'bodyparms' => bless( {
16291             'line' => 66,
16292             'calls' => [
16293             'NIL',
16294             'KVPAIRS'
16295             ],
16296             'prods' => [
16297             bless( {
16298             'items' => [
16299             bless( {
16300             'argcode' => undef,
16301             'line' => 66,
16302             'implicit' => undef,
16303             'subrule' => 'NIL',
16304             'lookahead' => 0,
16305             'matchrule' => 0
16306             }, 'Parse::RecDescent::Subrule' )
16307             ],
16308             'line' => undef,
16309             'dircount' => 0,
16310             'strcount' => 0,
16311             'number' => 0,
16312             'patcount' => 0,
16313             'actcount' => 0,
16314             'uncommit' => undef,
16315             'error' => undef
16316             }, 'Parse::RecDescent::Production' ),
16317             bless( {
16318             'error' => undef,
16319             'number' => 1,
16320             'patcount' => 0,
16321             'line' => 66,
16322             'dircount' => 0,
16323             'items' => [
16324             bless( {
16325             'argcode' => undef,
16326             'subrule' => 'KVPAIRS',
16327             'implicit' => undef,
16328             'line' => 66,
16329             'lookahead' => 0,
16330             'matchrule' => 0
16331             }, 'Parse::RecDescent::Subrule' )
16332             ],
16333             'strcount' => 0,
16334             'uncommit' => undef,
16335             'actcount' => 0
16336             }, 'Parse::RecDescent::Production' )
16337             ],
16338             'opcount' => 0,
16339             'name' => 'bodyparms',
16340             'impcount' => 0,
16341             'changed' => 0,
16342             'vars' => ''
16343             }, 'Parse::RecDescent::Rule' ),
16344             'DOUBLE_QUOTED_STRING' => bless( {
16345             'line' => 41,
16346             'prods' => [
16347             bless( {
16348             'items' => [
16349             bless( {
16350             'lookahead' => 0,
16351             'pattern' => '"',
16352             'line' => 41,
16353             'description' => '\'"\'',
16354             'hashname' => '__STRING1__'
16355             }, 'Parse::RecDescent::Literal' ),
16356             bless( {
16357             'hashname' => '__PATTERN1__',
16358             'rdelim' => '/',
16359             'line' => 41,
16360             'pattern' => '(?:\\\\["\\\\]|[^"])*',
16361             'lookahead' => 0,
16362             'mod' => '',
16363             'description' => '/(?:\\\\\\\\["\\\\\\\\]|[^"])*/',
16364             'ldelim' => '/'
16365             }, 'Parse::RecDescent::Token' ),
16366             bless( {
16367             'hashname' => '__STRING2__',
16368             'description' => '\'"\'',
16369             'line' => 41,
16370             'pattern' => '"',
16371             'lookahead' => 0
16372             }, 'Parse::RecDescent::Literal' ),
16373             bless( {
16374             'code' => '{ $return = $item{__PATTERN1__} }',
16375             'hashname' => '__ACTION1__',
16376             'line' => 41,
16377             'lookahead' => 0
16378             }, 'Parse::RecDescent::Action' )
16379             ],
16380             'line' => undef,
16381             'dircount' => 0,
16382             'strcount' => 2,
16383             'number' => 0,
16384             'patcount' => 1,
16385             'actcount' => 1,
16386             'uncommit' => undef,
16387             'error' => undef
16388             }, 'Parse::RecDescent::Production' )
16389             ],
16390             'calls' => [],
16391             'vars' => '',
16392             'impcount' => 0,
16393             'changed' => 0,
16394             'opcount' => 0,
16395             'name' => 'DOUBLE_QUOTED_STRING'
16396             }, 'Parse::RecDescent::Rule' ),
16397             'sourceroute' => bless( {
16398             'line' => 78,
16399             'prods' => [
16400             bless( {
16401             'actcount' => 0,
16402             'uncommit' => undef,
16403             'line' => undef,
16404             'items' => [
16405             bless( {
16406             'argcode' => undef,
16407             'subrule' => 'NIL',
16408             'implicit' => undef,
16409             'line' => 78,
16410             'lookahead' => 0,
16411             'matchrule' => 0
16412             }, 'Parse::RecDescent::Subrule' )
16413             ],
16414             'dircount' => 0,
16415             'strcount' => 0,
16416             'number' => 0,
16417             'patcount' => 0,
16418             'error' => undef
16419             }, 'Parse::RecDescent::Production' ),
16420             bless( {
16421             'error' => undef,
16422             'actcount' => 0,
16423             'uncommit' => undef,
16424             'line' => 78,
16425             'items' => [
16426             bless( {
16427             'matchrule' => 0,
16428             'argcode' => undef,
16429             'line' => 78,
16430             'implicit' => undef,
16431             'subrule' => 'STRING',
16432             'lookahead' => 0
16433             }, 'Parse::RecDescent::Subrule' )
16434             ],
16435             'dircount' => 0,
16436             'strcount' => 0,
16437             'number' => 1,
16438             'patcount' => 0
16439             }, 'Parse::RecDescent::Production' )
16440             ],
16441             'calls' => [
16442             'NIL',
16443             'STRING'
16444             ],
16445             'vars' => '',
16446             'changed' => 0,
16447             'impcount' => 0,
16448             'name' => 'sourceroute',
16449             'opcount' => 0
16450             }, 'Parse::RecDescent::Rule' ),
16451             'bodytype' => bless( {
16452             'changed' => 0,
16453             'impcount' => 0,
16454             'vars' => '',
16455             'name' => 'bodytype',
16456             'opcount' => 0,
16457             'line' => 65,
16458             'prods' => [
16459             bless( {
16460             'uncommit' => undef,
16461             'actcount' => 0,
16462             'number' => 0,
16463             'patcount' => 0,
16464             'dircount' => 0,
16465             'items' => [
16466             bless( {
16467             'matchrule' => 0,
16468             'lookahead' => 0,
16469             'subrule' => 'STRING',
16470             'implicit' => undef,
16471             'line' => 65,
16472             'argcode' => undef
16473             }, 'Parse::RecDescent::Subrule' )
16474             ],
16475             'line' => undef,
16476             'strcount' => 0,
16477             'error' => undef
16478             }, 'Parse::RecDescent::Production' )
16479             ],
16480             'calls' => [
16481             'STRING'
16482             ]
16483             }, 'Parse::RecDescent::Rule' ),
16484             'messageid' => bless( {
16485             'line' => 92,
16486             'prods' => [
16487             bless( {
16488             'line' => undef,
16489             'dircount' => 0,
16490             'items' => [
16491             bless( {
16492             'lookahead' => 0,
16493             'subrule' => 'NIL',
16494             'implicit' => undef,
16495             'line' => 92,
16496             'argcode' => undef,
16497             'matchrule' => 0
16498             }, 'Parse::RecDescent::Subrule' )
16499             ],
16500             'strcount' => 0,
16501             'number' => 0,
16502             'patcount' => 0,
16503             'actcount' => 0,
16504             'uncommit' => undef,
16505             'error' => undef
16506             }, 'Parse::RecDescent::Production' ),
16507             bless( {
16508             'actcount' => 0,
16509             'uncommit' => undef,
16510             'dircount' => 0,
16511             'items' => [
16512             bless( {
16513             'matchrule' => 0,
16514             'argcode' => undef,
16515             'lookahead' => 0,
16516             'line' => 92,
16517             'implicit' => undef,
16518             'subrule' => 'STRING'
16519             }, 'Parse::RecDescent::Subrule' )
16520             ],
16521             'line' => 92,
16522             'strcount' => 0,
16523             'number' => 1,
16524             'patcount' => 0,
16525             'error' => undef
16526             }, 'Parse::RecDescent::Production' )
16527             ],
16528             'calls' => [
16529             'NIL',
16530             'STRING'
16531             ],
16532             'name' => 'messageid',
16533             'opcount' => 0,
16534             'vars' => '',
16535             'impcount' => 0,
16536             'changed' => 0
16537             }, 'Parse::RecDescent::Rule' ),
16538             'value' => bless( {
16539             'vars' => '',
16540             'changed' => 0,
16541             'impcount' => 0,
16542             'name' => 'value',
16543             'opcount' => 0,
16544             'line' => 57,
16545             'calls' => [
16546             'NIL',
16547             'NUMBER',
16548             'STRING',
16549             'KVPAIRS'
16550             ],
16551             'prods' => [
16552             bless( {
16553             'items' => [
16554             bless( {
16555             'matchrule' => 0,
16556             'argcode' => undef,
16557             'line' => 57,
16558             'implicit' => undef,
16559             'subrule' => 'NIL',
16560             'lookahead' => 0
16561             }, 'Parse::RecDescent::Subrule' )
16562             ],
16563             'line' => undef,
16564             'dircount' => 0,
16565             'strcount' => 0,
16566             'number' => 0,
16567             'patcount' => 0,
16568             'actcount' => 0,
16569             'uncommit' => undef,
16570             'error' => undef
16571             }, 'Parse::RecDescent::Production' ),
16572             bless( {
16573             'error' => undef,
16574             'items' => [
16575             bless( {
16576             'matchrule' => 0,
16577             'line' => 57,
16578             'implicit' => undef,
16579             'subrule' => 'NUMBER',
16580             'lookahead' => 0,
16581             'argcode' => undef
16582             }, 'Parse::RecDescent::Subrule' )
16583             ],
16584             'line' => 57,
16585             'dircount' => 0,
16586             'strcount' => 0,
16587             'number' => 1,
16588             'patcount' => 0,
16589             'actcount' => 0,
16590             'uncommit' => undef
16591             }, 'Parse::RecDescent::Production' ),
16592             bless( {
16593             'error' => undef,
16594             'line' => 57,
16595             'items' => [
16596             bless( {
16597             'matchrule' => 0,
16598             'lookahead' => 0,
16599             'subrule' => 'STRING',
16600             'implicit' => undef,
16601             'line' => 57,
16602             'argcode' => undef
16603             }, 'Parse::RecDescent::Subrule' )
16604             ],
16605             'dircount' => 0,
16606             'strcount' => 0,
16607             'number' => 2,
16608             'patcount' => 0,
16609             'actcount' => 0,
16610             'uncommit' => undef
16611             }, 'Parse::RecDescent::Production' ),
16612             bless( {
16613             'patcount' => 0,
16614             'number' => 3,
16615             'strcount' => 0,
16616             'line' => 57,
16617             'items' => [
16618             bless( {
16619             'matchrule' => 0,
16620             'argcode' => undef,
16621             'lookahead' => 0,
16622             'implicit' => undef,
16623             'subrule' => 'KVPAIRS',
16624             'line' => 57
16625             }, 'Parse::RecDescent::Subrule' )
16626             ],
16627             'dircount' => 0,
16628             'uncommit' => undef,
16629             'actcount' => 0,
16630             'error' => undef
16631             }, 'Parse::RecDescent::Production' )
16632             ]
16633             }, 'Parse::RecDescent::Rule' ),
16634             'personalname' => bless( {
16635             'calls' => [
16636             'NIL',
16637             'STRING'
16638             ],
16639             'prods' => [
16640             bless( {
16641             'error' => undef,
16642             'actcount' => 0,
16643             'uncommit' => undef,
16644             'strcount' => 0,
16645             'items' => [
16646             bless( {
16647             'matchrule' => 0,
16648             'argcode' => undef,
16649             'lookahead' => 0,
16650             'implicit' => undef,
16651             'subrule' => 'NIL',
16652             'line' => 77
16653             }, 'Parse::RecDescent::Subrule' )
16654             ],
16655             'line' => undef,
16656             'dircount' => 0,
16657             'patcount' => 0,
16658             'number' => 0
16659             }, 'Parse::RecDescent::Production' ),
16660             bless( {
16661             'error' => undef,
16662             'uncommit' => undef,
16663             'actcount' => 0,
16664             'number' => 1,
16665             'patcount' => 0,
16666             'items' => [
16667             bless( {
16668             'argcode' => undef,
16669             'lookahead' => 0,
16670             'implicit' => undef,
16671             'line' => 77,
16672             'subrule' => 'STRING',
16673             'matchrule' => 0
16674             }, 'Parse::RecDescent::Subrule' )
16675             ],
16676             'line' => 77,
16677             'dircount' => 0,
16678             'strcount' => 0
16679             }, 'Parse::RecDescent::Production' )
16680             ],
16681             'line' => 77,
16682             'opcount' => 0,
16683             'name' => 'personalname',
16684             'vars' => '',
16685             'changed' => 0,
16686             'impcount' => 0
16687             }, 'Parse::RecDescent::Rule' ),
16688             'cc' => bless( {
16689             'changed' => 0,
16690             'impcount' => 0,
16691             'vars' => '',
16692             'opcount' => 0,
16693             'name' => 'cc',
16694             'calls' => [
16695             'ADDRESSES'
16696             ],
16697             'prods' => [
16698             bless( {
16699             'strcount' => 0,
16700             'dircount' => 0,
16701             'line' => undef,
16702             'items' => [
16703             bless( {
16704             'matchrule' => 0,
16705             'argcode' => undef,
16706             'lookahead' => 0,
16707             'implicit' => undef,
16708             'line' => 98,
16709             'subrule' => 'ADDRESSES'
16710             }, 'Parse::RecDescent::Subrule' )
16711             ],
16712             'patcount' => 0,
16713             'number' => 0,
16714             'actcount' => 0,
16715             'uncommit' => undef,
16716             'error' => undef
16717             }, 'Parse::RecDescent::Production' )
16718             ],
16719             'line' => 98
16720             }, 'Parse::RecDescent::Rule' ),
16721             'NUMBER' => bless( {
16722             'line' => 36,
16723             'prods' => [
16724             bless( {
16725             'uncommit' => undef,
16726             'actcount' => 1,
16727             'number' => 0,
16728             'patcount' => 1,
16729             'line' => undef,
16730             'items' => [
16731             bless( {
16732             'mod' => '',
16733             'description' => '/^(\\\\d+)/',
16734             'ldelim' => '/',
16735             'hashname' => '__PATTERN1__',
16736             'pattern' => '^(\\d+)',
16737             'line' => 36,
16738             'lookahead' => 0,
16739             'rdelim' => '/'
16740             }, 'Parse::RecDescent::Token' ),
16741             bless( {
16742             'code' => '{ $return = $item[1] }',
16743             'hashname' => '__ACTION1__',
16744             'line' => 36,
16745             'lookahead' => 0
16746             }, 'Parse::RecDescent::Action' )
16747             ],
16748             'dircount' => 0,
16749             'strcount' => 0,
16750             'error' => undef
16751             }, 'Parse::RecDescent::Production' )
16752             ],
16753             'calls' => [],
16754             'changed' => 0,
16755             'impcount' => 0,
16756             'vars' => '',
16757             'opcount' => 0,
16758             'name' => 'NUMBER'
16759             }, 'Parse::RecDescent::Rule' ),
16760             'textmessage' => bless( {
16761             'changed' => 0,
16762             'impcount' => 0,
16763             'vars' => '',
16764             'opcount' => 0,
16765             'name' => 'textmessage',
16766             'line' => 122,
16767             'prods' => [
16768             bless( {
16769             'error' => undef,
16770             'uncommit' => undef,
16771             'actcount' => 1,
16772             'patcount' => 0,
16773             'number' => 0,
16774             'strcount' => 0,
16775             'items' => [
16776             bless( {
16777             'lookahead' => 0,
16778             'implicit' => undef,
16779             'line' => 122,
16780             'subrule' => 'TEXT',
16781             'argcode' => undef,
16782             'matchrule' => 0
16783             }, 'Parse::RecDescent::Subrule' ),
16784             bless( {
16785             'code' => '$commit = 1',
16786             'name' => '',
16787             'hashname' => '__DIRECTIVE1__',
16788             'lookahead' => 0,
16789             'line' => 122
16790             }, 'Parse::RecDescent::Directive' ),
16791             bless( {
16792             'argcode' => undef,
16793             'implicit' => undef,
16794             'subrule' => 'basicfields',
16795             'line' => 122,
16796             'lookahead' => 0,
16797             'matchrule' => 0
16798             }, 'Parse::RecDescent::Subrule' ),
16799             bless( {
16800             'argcode' => undef,
16801             'min' => 0,
16802             'repspec' => '?',
16803             'matchrule' => 0,
16804             'expected' => undef,
16805             'subrule' => 'textlines',
16806             'line' => 122,
16807             'lookahead' => 0,
16808             'max' => 1
16809             }, 'Parse::RecDescent::Repetition' ),
16810             bless( {
16811             'min' => 0,
16812             'argcode' => undef,
16813             'expected' => undef,
16814             'matchrule' => 0,
16815             'repspec' => '?',
16816             'lookahead' => 0,
16817             'line' => 122,
16818             'subrule' => 'bodyMD5',
16819             'max' => 1
16820             }, 'Parse::RecDescent::Repetition' ),
16821             bless( {
16822             'repspec' => '?',
16823             'matchrule' => 0,
16824             'expected' => undef,
16825             'argcode' => undef,
16826             'min' => 0,
16827             'max' => 1,
16828             'subrule' => 'bodydisp',
16829             'line' => 123,
16830             'lookahead' => 0
16831             }, 'Parse::RecDescent::Repetition' ),
16832             bless( {
16833             'max' => 1,
16834             'lookahead' => 0,
16835             'line' => 123,
16836             'subrule' => 'bodylang',
16837             'repspec' => '?',
16838             'expected' => undef,
16839             'matchrule' => 0,
16840             'argcode' => undef,
16841             'min' => 0
16842             }, 'Parse::RecDescent::Repetition' ),
16843             bless( {
16844             'subrule' => 'bodyextra',
16845             'line' => 123,
16846             'lookahead' => 0,
16847             'max' => 1,
16848             'min' => 0,
16849             'argcode' => undef,
16850             'matchrule' => 0,
16851             'expected' => undef,
16852             'repspec' => '?'
16853             }, 'Parse::RecDescent::Repetition' ),
16854             bless( {
16855             'code' => '{
16856             $return = $item{basicfields} || {};
16857             $return->{bodytype} = \'TEXT\';
16858             take_optional_items($return, \\%item
16859             , qw/textlines bodyMD5 bodydisp bodylang bodyextra/);
16860             1;
16861             }',
16862             'hashname' => '__ACTION1__',
16863             'line' => 124,
16864             'lookahead' => 0
16865             }, 'Parse::RecDescent::Action' )
16866             ],
16867             'line' => undef,
16868             'dircount' => 1
16869             }, 'Parse::RecDescent::Production' )
16870             ],
16871             'calls' => [
16872             'TEXT',
16873             'basicfields',
16874             'textlines',
16875             'bodyMD5',
16876             'bodydisp',
16877             'bodylang',
16878             'bodyextra'
16879             ]
16880             }, 'Parse::RecDescent::Rule' ),
16881             'RFCNONCOMPLY' => bless( {
16882             'calls' => [],
16883             'prods' => [
16884             bless( {
16885             'error' => undef,
16886             'actcount' => 1,
16887             'uncommit' => undef,
16888             'strcount' => 0,
16889             'line' => undef,
16890             'items' => [
16891             bless( {
16892             'mod' => 'i',
16893             'description' => '/^\\\\(\\\\)/i',
16894             'ldelim' => '/',
16895             'hashname' => '__PATTERN1__',
16896             'rdelim' => '/',
16897             'lookahead' => 0,
16898             'line' => 35,
16899             'pattern' => '^\\(\\)'
16900             }, 'Parse::RecDescent::Token' ),
16901             bless( {
16902             'code' => '{ $return = "NIL" }',
16903             'hashname' => '__ACTION1__',
16904             'lookahead' => 0,
16905             'line' => 35
16906             }, 'Parse::RecDescent::Action' )
16907             ],
16908             'dircount' => 0,
16909             'patcount' => 1,
16910             'number' => 0
16911             }, 'Parse::RecDescent::Production' )
16912             ],
16913             'line' => 35,
16914             'vars' => '',
16915             'changed' => 0,
16916             'impcount' => 0,
16917             'opcount' => 0,
16918             'name' => 'RFCNONCOMPLY'
16919             }, 'Parse::RecDescent::Rule' ),
16920             'subject' => bless( {
16921             'line' => 90,
16922             'calls' => [
16923             'NIL',
16924             'STRING'
16925             ],
16926             'prods' => [
16927             bless( {
16928             'items' => [
16929             bless( {
16930             'argcode' => undef,
16931             'implicit' => undef,
16932             'subrule' => 'NIL',
16933             'line' => 90,
16934             'lookahead' => 0,
16935             'matchrule' => 0
16936             }, 'Parse::RecDescent::Subrule' )
16937             ],
16938             'line' => undef,
16939             'dircount' => 0,
16940             'strcount' => 0,
16941             'number' => 0,
16942             'patcount' => 0,
16943             'actcount' => 0,
16944             'uncommit' => undef,
16945             'error' => undef
16946             }, 'Parse::RecDescent::Production' ),
16947             bless( {
16948             'uncommit' => undef,
16949             'actcount' => 0,
16950             'patcount' => 0,
16951             'number' => 1,
16952             'strcount' => 0,
16953             'line' => 90,
16954             'items' => [
16955             bless( {
16956             'line' => 90,
16957             'implicit' => undef,
16958             'subrule' => 'STRING',
16959             'lookahead' => 0,
16960             'argcode' => undef,
16961             'matchrule' => 0
16962             }, 'Parse::RecDescent::Subrule' )
16963             ],
16964             'dircount' => 0,
16965             'error' => undef
16966             }, 'Parse::RecDescent::Production' )
16967             ],
16968             'opcount' => 0,
16969             'name' => 'subject',
16970             'changed' => 0,
16971             'impcount' => 0,
16972             'vars' => ''
16973             }, 'Parse::RecDescent::Rule' ),
16974             'bodyextra' => bless( {
16975             'impcount' => 0,
16976             'changed' => 0,
16977             'vars' => '',
16978             'name' => 'bodyextra',
16979             'opcount' => 0,
16980             'calls' => [
16981             'NIL',
16982             'STRING',
16983             'STRINGS'
16984             ],
16985             'prods' => [
16986             bless( {
16987             'error' => undef,
16988             'line' => undef,
16989             'items' => [
16990             bless( {
16991             'subrule' => 'NIL',
16992             'implicit' => undef,
16993             'line' => 74,
16994             'lookahead' => 0,
16995             'argcode' => undef,
16996             'matchrule' => 0
16997             }, 'Parse::RecDescent::Subrule' )
16998             ],
16999             'dircount' => 0,
17000             'strcount' => 0,
17001             'number' => 0,
17002             'patcount' => 0,
17003             'actcount' => 0,
17004             'uncommit' => undef
17005             }, 'Parse::RecDescent::Production' ),
17006             bless( {
17007             'error' => undef,
17008             'actcount' => 0,
17009             'uncommit' => undef,
17010             'strcount' => 0,
17011             'dircount' => 0,
17012             'line' => 74,
17013             'items' => [
17014             bless( {
17015             'matchrule' => 0,
17016             'implicit' => undef,
17017             'line' => 74,
17018             'subrule' => 'STRING',
17019             'lookahead' => 0,
17020             'argcode' => undef
17021             }, 'Parse::RecDescent::Subrule' )
17022             ],
17023             'patcount' => 0,
17024             'number' => 1
17025             }, 'Parse::RecDescent::Production' ),
17026             bless( {
17027             'error' => undef,
17028             'actcount' => 0,
17029             'uncommit' => undef,
17030             'strcount' => 0,
17031             'items' => [
17032             bless( {
17033             'matchrule' => 0,
17034             'subrule' => 'STRINGS',
17035             'implicit' => undef,
17036             'line' => 74,
17037             'lookahead' => 0,
17038             'argcode' => undef
17039             }, 'Parse::RecDescent::Subrule' )
17040             ],
17041             'dircount' => 0,
17042             'line' => 74,
17043             'patcount' => 0,
17044             'number' => 2
17045             }, 'Parse::RecDescent::Production' )
17046             ],
17047             'line' => 74
17048             }, 'Parse::RecDescent::Rule' )
17049             },
17050             '_check' => {
17051             'prevoffset' => '',
17052             'thiscolumn' => '',
17053             'itempos' => '',
17054             'prevline' => '',
17055             'prevcolumn' => '',
17056             'thisoffset' => ''
17057             },
17058             '_AUTOACTION' => undef,
17059             'deferrable' => 1,
17060             'namespace' => 'Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse',
17061             '_AUTOTREE' => undef
17062             }, 'Parse::RecDescent' );
17063             }