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   984 use Parse::RecDescent;
  1         34553  
  1         8  
3             { my $ERRORS;
4              
5              
6             package Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse;
7 1     1   58 use strict;
  1         2  
  1         22  
8 1     1   4 use vars qw($skip $AUTOLOAD );
  1         2  
  1         192  
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   359 { my ($r, $items) = (shift, shift);
18 153         359 foreach (@_)
19 795         1197 { my $opt = $_ .'(?)';
20 795 50       1347 exists $items->{$opt} or next;
21             $r->{$_} = UNIVERSAL::isa($items->{$opt}, 'ARRAY')
22 795 50       2556 ? $items->{$opt}[0] : $items->{$opt};
23             }
24             }
25              
26             sub merge_hash($$)
27 54     54   111 { my $to = shift;
28 54 100       154 my $from = shift or return;
29 12         72 while( my($k,$v) = each %$from) { $to->{$k} = $v }
  72         208  
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   6 no strict 'refs';
  1         2  
  1         87  
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   521 my $thisparser = $_[0];
51 1     1   6 use vars q{$tracelevel};
  1         1  
  1         386  
52 25   100     91 local $tracelevel = ($tracelevel||0)+1;
53 25         49 $ERRORS = 0;
54 25         73 my $thisrule = $thisparser->{"rules"}{"envelopestruct"};
55              
56 25 50       68 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         42 my $def_at = @{$thisparser->{deferred}};
  25         63  
63 25         53 my $err_at = @{$thisparser->{errors}};
  25         59  
64              
65 25         98 my $score;
66             my $score_return;
67 25         0 my $_tok;
68 25         41 my $return = undef;
69 25         41 my $_matched=0;
70 25         43 my $commit=0;
71 25         47 my @item = ();
72 25         45 my %item = ();
73 25         41 my $repeating = $_[2];
74 25         36 my $_noactions = $_[3];
75 25 50       60 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  25         40  
  25         44  
76 25         54 my $_itempos = $_[5];
77 25 50       82 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
78 25         95 my $text;
79             my $lastsep;
80 25         0 my $current_match;
81 25         64 my $expectation = new Parse::RecDescent::Expectation(q{'('});
82 25         179 $expectation->at($_[1]);
83            
84 25         87 my $thisline;
85 25         96 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
86              
87            
88              
89 25   33     222 while (!$_matched && !$commit)
90             {
91            
92 25 50       68 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         93 my $thisprod = $thisrule->{"prods"}[0];
98 25         60 $text = $_[1];
99 25         46 my $_savetext;
100 25         57 @item = (q{envelopestruct});
101 25         73 %item = (__RULE__ => q{envelopestruct});
102 25         45 my $repcount = 0;
103              
104              
105 25 50       67 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
106             Parse::RecDescent::_tracefirst($text),
107             q{envelopestruct},
108             $tracelevel)
109             if defined $::RD_TRACE;
110 25         48 undef $lastsep;
111 25         49 $expectation->is(q{})->at($text);
112            
113              
114 25 100 33     291 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  25 100 66     235  
  25   66     50  
  25         174  
115             substr($text,0,length($_tok)) eq $_tok and
116 24         66 do { substr($text,0,length($_tok)) = ""; 1; }
  24         83  
117             )
118             {
119 1 50       4 $text = $lastsep . $text if defined $lastsep;
120            
121 1         5 $expectation->failed();
122 1 50       5 Parse::RecDescent::_trace(q{<>},
123             Parse::RecDescent::_tracefirst($text))
124             if defined $::RD_TRACE;
125 1         3 last;
126             }
127 24 50       70 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
128             . $_tok . q{])},
129             Parse::RecDescent::_tracefirst($text))
130             if defined $::RD_TRACE;
131 24         81 push @item, $item{__STRING1__}=$_tok;
132            
133              
134 24 50       61 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   7 if (1) { no strict qw{refs};
  1         2  
  1         132  
  24         34  
140 24         67 $expectation->is(q{date})->at($text);
141 24 50   24   340 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::date($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         57  
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       106 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         71 $item{q{date}} = $_tok;
160 24         52 push @item, $_tok;
161            
162             }
163              
164 24 50       67 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         146  
  24         37  
170 24         82 $expectation->is(q{subject})->at($text);
171 24 50   24   316 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subject($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         52  
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       88 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         69 $item{q{subject}} = $_tok;
190 24         56 push @item, $_tok;
191            
192             }
193              
194 24 50       73 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   5 if (1) { no strict qw{refs};
  1         2  
  1         122  
  24         49  
200 24         86 $expectation->is(q{from})->at($text);
201 24 50   24   296 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::from($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         54  
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       84 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         70 $item{q{from}} = $_tok;
220 24         52 push @item, $_tok;
221            
222             }
223              
224 24 50       78 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   5 if (1) { no strict qw{refs};
  1         2  
  1         176  
  24         33  
230 24         91 $expectation->is(q{sender})->at($text);
231 24 50   24   278 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sender($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         43  
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       94 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         67 $item{q{sender}} = $_tok;
250 24         53 push @item, $_tok;
251            
252             }
253              
254 24 50       74 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   6 if (1) { no strict qw{refs};
  1         1  
  1         131  
  24         47  
260 24         78 $expectation->is(q{replyto})->at($text);
261 24 50   24   268 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::replyto($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         47  
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       93 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         60 $item{q{replyto}} = $_tok;
280 24         69 push @item, $_tok;
281            
282             }
283              
284 24 50       62 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   5 if (1) { no strict qw{refs};
  1         2  
  1         153  
  24         36  
290 24         80 $expectation->is(q{to})->at($text);
291 24 50   24   274 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::to($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         48  
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       96 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         87 $item{q{to}} = $_tok;
310 24         50 push @item, $_tok;
311            
312             }
313              
314 24 50       66 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   5 if (1) { no strict qw{refs};
  1         2  
  1         136  
  24         36  
320 24         72 $expectation->is(q{cc})->at($text);
321 24 50   24   291 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::cc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         62  
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       120 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         70 $item{q{cc}} = $_tok;
340 24         55 push @item, $_tok;
341            
342             }
343              
344 24 50       62 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   5 if (1) { no strict qw{refs};
  1         2  
  1         145  
  24         43  
350 24         78 $expectation->is(q{bcc})->at($text);
351 24 50   24   300 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bcc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         56  
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       83 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         64 $item{q{bcc}} = $_tok;
370 24         41 push @item, $_tok;
371            
372             }
373              
374 24 50       72 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   5 if (1) { no strict qw{refs};
  1         3  
  1         116  
  24         39  
380 24         82 $expectation->is(q{inreplyto})->at($text);
381 24 50   24   298 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::inreplyto($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         45  
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       94 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         73 $item{q{inreplyto}} = $_tok;
400 24         51 push @item, $_tok;
401            
402             }
403              
404 24 50       68 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         1  
  1         650  
  24         40  
410 24         84 $expectation->is(q{messageid})->at($text);
411 24 50   24   280 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::messageid($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         53  
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       79 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         66 $item{q{messageid}} = $_tok;
430 24         53 push @item, $_tok;
431            
432             }
433              
434 24 50       64 Parse::RecDescent::_trace(q{Trying terminal: [')']},
435             Parse::RecDescent::_tracefirst($text),
436             q{envelopestruct},
437             $tracelevel)
438             if defined $::RD_TRACE;
439 24         52 undef $lastsep;
440 24         95 $expectation->is(q{')'})->at($text);
441            
442              
443 24 50 33     280 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  24 50 33     184  
  24   33     48  
  24         147  
444             substr($text,0,length($_tok)) eq $_tok and
445 24         57 do { substr($text,0,length($_tok)) = ""; 1; }
  24         57  
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       65 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
457             . $_tok . q{])},
458             Parse::RecDescent::_tracefirst($text))
459             if defined $::RD_TRACE;
460 24         88 push @item, $item{__STRING2__}=$_tok;
461            
462              
463 24 50       95 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       75 $_tok = ($_noactions) ? 0 : do { $return = bless {}, "Mail::IMAPClient::BodyStructure::Envelope";
  24         85  
471             $return->{$_} = $item{$_}
472 24         336 for qw/date subject from sender replyto to cc/
473             , qw/bcc inreplyto messageid/;
474 24         55 1;
475             };
476 24 50       70 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       66 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
483             . $_tok . q{])},
484             Parse::RecDescent::_tracefirst($text))
485             if defined $::RD_TRACE;
486 24         46 push @item, $_tok;
487 24         55 $item{__ACTION1__}=$_tok;
488            
489              
490 24 50       55 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         48 $_matched = 1;
499 24         60 last;
500             }
501              
502             splice
503 25 100       63 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         3  
504            
505 25 100 66     92 unless ( $_matched || defined($score) )
506             {
507 1         2 splice @{$thisparser->{deferred}}, $def_at;
  1         2  
508            
509              
510 1         3 $_[1] = $text; # NOT SURE THIS IS NEEDED
511 1 50       4 Parse::RecDescent::_trace(q{<>},
512             Parse::RecDescent::_tracefirst($_[1]),
513             q{envelopestruct},
514             $tracelevel)
515             if defined $::RD_TRACE;
516 1         4 return undef;
517             }
518 24 50 33     78 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         49 splice @{$thisparser->{errors}}, $err_at;
  24         66  
527 24 50       69 $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         84 $_[1] = $text;
541 24         252 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   2918 my $thisparser = $_[0];
548 1     1   7 use vars q{$tracelevel};
  1         1  
  1         446  
549 195   50     475 local $tracelevel = ($tracelevel||0)+1;
550 195         291 $ERRORS = 0;
551 195         446 my $thisrule = $thisparser->{"rules"}{"subpart"};
552              
553 195 50       426 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         237 my $def_at = @{$thisparser->{deferred}};
  195         367  
560 195         277 my $err_at = @{$thisparser->{errors}};
  195         348  
561              
562 195         477 my $score;
563             my $score_return;
564 195         0 my $_tok;
565 195         314 my $return = undef;
566 195         240 my $_matched=0;
567 195         266 my $commit=0;
568 195         313 my @item = ();
569 195         331 my %item = ();
570 195         290 my $repeating = $_[2];
571 195         268 my $_noactions = $_[3];
572 195 50       363 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  195         260  
  195         327  
573 195         307 my $_itempos = $_[5];
574 195 50       468 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
575 195         428 my $text;
576             my $lastsep;
577 195         0 my $current_match;
578 195         409 my $expectation = new Parse::RecDescent::Expectation(q{'('});
579 195         1179 $expectation->at($_[1]);
580            
581 195         667 my $thisline;
582 195         592 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
583              
584            
585              
586 195   33     1370 while (!$_matched && !$commit)
587             {
588            
589 195 50       369 Parse::RecDescent::_trace(q{Trying production: ['(' part ')' ]},
590             Parse::RecDescent::_tracefirst($_[1]),
591             q{subpart},
592             $tracelevel)
593             if defined $::RD_TRACE;
594 195         454 my $thisprod = $thisrule->{"prods"}[0];
595 195         269 $text = $_[1];
596 195         308 my $_savetext;
597 195         360 @item = (q{subpart});
598 195         453 %item = (__RULE__ => q{subpart});
599 195         259 my $repcount = 0;
600              
601              
602 195 50       370 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
603             Parse::RecDescent::_tracefirst($text),
604             q{subpart},
605             $tracelevel)
606             if defined $::RD_TRACE;
607 195         277 undef $lastsep;
608 195         384 $expectation->is(q{})->at($text);
609            
610              
611 195 100 33     1869 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  195 100 66     1283  
  195   66     360  
  195         1097  
612             substr($text,0,length($_tok)) eq $_tok and
613 73         178 do { substr($text,0,length($_tok)) = ""; 1; }
  73         205  
614             )
615             {
616 122 50       503 $text = $lastsep . $text if defined $lastsep;
617            
618 122         400 $expectation->failed();
619 122 50       558 Parse::RecDescent::_trace(q{<>},
620             Parse::RecDescent::_tracefirst($text))
621             if defined $::RD_TRACE;
622 122         231 last;
623             }
624 73 50       194 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
625             . $_tok . q{])},
626             Parse::RecDescent::_tracefirst($text))
627             if defined $::RD_TRACE;
628 73         239 push @item, $item{__STRING1__}=$_tok;
629            
630              
631 73 50       180 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   7 if (1) { no strict qw{refs};
  1         2  
  1         670  
  73         152  
637 73         187 $expectation->is(q{part})->at($text);
638 73 50   73   837 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  73         141  
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       351 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         214 $item{q{part}} = $_tok;
657 73         160 push @item, $_tok;
658            
659             }
660              
661 73 50       181 Parse::RecDescent::_trace(q{Trying terminal: [')']},
662             Parse::RecDescent::_tracefirst($text),
663             q{subpart},
664             $tracelevel)
665             if defined $::RD_TRACE;
666 73         169 undef $lastsep;
667 73         254 $expectation->is(q{')'})->at($text);
668            
669              
670 73 50 33     905 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  73 50 33     572  
  73   33     156  
  73         544  
671             substr($text,0,length($_tok)) eq $_tok and
672 73         171 do { substr($text,0,length($_tok)) = ""; 1; }
  73         243  
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       200 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
684             . $_tok . q{])},
685             Parse::RecDescent::_tracefirst($text))
686             if defined $::RD_TRACE;
687 73         204 push @item, $item{__STRING2__}=$_tok;
688            
689              
690 73 50       198 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       165 $_tok = ($_noactions) ? 0 : do {$return = $item{part}};
  73         155  
698 73 50       158 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       153 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
705             . $_tok . q{])},
706             Parse::RecDescent::_tracefirst($text))
707             if defined $::RD_TRACE;
708 73         116 push @item, $_tok;
709 73         143 $item{__ACTION1__}=$_tok;
710            
711              
712            
713              
714 73 50       157 Parse::RecDescent::_trace(q{Trying directive: []},
715             Parse::RecDescent::_tracefirst($text),
716             q{subpart},
717             $tracelevel)
718             if defined $::RD_TRACE;
719 73     73   122 $_tok = do { push @{$thisparser->{deferred}}, sub { ++$subpartCount; }; };
  73         83  
  73         384  
  73         294  
720 73 50       196 if (defined($_tok))
721             {
722 73 50       168 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       145 last unless defined $_tok;
735 73         162 push @item, $item{__DIRECTIVE1__}=$_tok;
736            
737              
738 73 50       173 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         177 last;
748             }
749              
750             splice
751 195 100       436 @{$thisparser->{deferred}}, $def_at unless $_matched;
  122         307  
752            
753 195 100 66     641 unless ( $_matched || defined($score) )
754             {
755 122         155 splice @{$thisparser->{deferred}}, $def_at;
  122         251  
756            
757              
758 122         211 $_[1] = $text; # NOT SURE THIS IS NEEDED
759 122 50       274 Parse::RecDescent::_trace(q{<>},
760             Parse::RecDescent::_tracefirst($_[1]),
761             q{subpart},
762             $tracelevel)
763             if defined $::RD_TRACE;
764 122         509 return undef;
765             }
766 73 50 33     209 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         132 splice @{$thisparser->{errors}}, $err_at;
  73         177  
775 73 50       215 $return = $item[$#item] unless defined $return;
776 73 50       200 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         249 $_[1] = $text;
789 73         545 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   2462 my $thisparser = $_[0];
796 1     1   6 use vars q{$tracelevel};
  1         2  
  1         704  
797 1646   50     3228 local $tracelevel = ($tracelevel||0)+1;
798 1646         2123 $ERRORS = 0;
799 1646         2711 my $thisrule = $thisparser->{"rules"}{"NIL"};
800              
801 1646 50       2607 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         2114 my $def_at = @{$thisparser->{deferred}};
  1646         2192  
808 1646         1956 my $err_at = @{$thisparser->{errors}};
  1646         2235  
809              
810 1646         3152 my $score;
811             my $score_return;
812 1646         0 my $_tok;
813 1646         2076 my $return = undef;
814 1646         1867 my $_matched=0;
815 1646         1895 my $commit=0;
816 1646         1960 my @item = ();
817 1646         1960 my %item = ();
818 1646         1939 my $repeating = $_[2];
819 1646         1959 my $_noactions = $_[3];
820 1646 50       2494 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  1646         2169  
  1646         2688  
821 1646         2207 my $_itempos = $_[5];
822 1646 50       3014 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
823 1646         3298 my $text;
824             my $lastsep;
825 1646         0 my $current_match;
826 1646         3212 my $expectation = new Parse::RecDescent::Expectation(q{/^NIL/i});
827 1646         8609 $expectation->at($_[1]);
828            
829 1646         5449 my $thisline;
830 1646         3718 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
831              
832            
833              
834 1646   33     9899 while (!$_matched && !$commit)
835             {
836            
837 1646 50       2789 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         2776 my $thisprod = $thisrule->{"prods"}[0];
843 1646         2362 $text = $_[1];
844 1646         1881 my $_savetext;
845 1646         2687 @item = (q{NIL});
846 1646         2831 %item = (__RULE__ => q{NIL});
847 1646         1889 my $repcount = 0;
848              
849              
850 1646 50       2702 Parse::RecDescent::_trace(q{Trying terminal: [/^NIL/i]}, Parse::RecDescent::_tracefirst($text),
851             q{NIL},
852             $tracelevel)
853             if defined $::RD_TRACE;
854 1646         2241 undef $lastsep;
855 1646         2802 $expectation->is(q{})->at($text);
856            
857              
858 1646 100 66     14605 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^NIL)/i)
  1646 100       12687  
859             {
860 1008 50       3564 $text = $lastsep . $text if defined $lastsep;
861 1008         2700 $expectation->failed();
862 1008 50       3279 Parse::RecDescent::_trace(q{<>},
863             Parse::RecDescent::_tracefirst($text))
864             if defined $::RD_TRACE;
865              
866 1008         1837 last;
867             }
868 638         2578 $current_match = substr($text, $-[0], $+[0] - $-[0]);
869 638         1865 substr($text,0,length($current_match),q{});
870 638 50       1080 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
871             . $current_match . q{])},
872             Parse::RecDescent::_tracefirst($text))
873             if defined $::RD_TRACE;
874 638         1300 push @item, $item{__PATTERN1__}=$current_match;
875            
876              
877 638 50       1107 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       997 $_tok = ($_noactions) ? 0 : do { $return = "NIL" };
  638         986  
885 638 50       1305 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       1035 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
892             . $_tok . q{])},
893             Parse::RecDescent::_tracefirst($text))
894             if defined $::RD_TRACE;
895 638         807 push @item, $_tok;
896 638         958 $item{__ACTION1__}=$_tok;
897            
898              
899 638 50       1098 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         777 $_matched = 1;
908 638         1013 last;
909             }
910              
911             splice
912 1646 100       2801 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1008         2040  
913            
914 1646 100 66     3984 unless ( $_matched || defined($score) )
915             {
916 1008         1265 splice @{$thisparser->{deferred}}, $def_at;
  1008         1497  
917            
918              
919 1008         1535 $_[1] = $text; # NOT SURE THIS IS NEEDED
920 1008 50       1579 Parse::RecDescent::_trace(q{<>},
921             Parse::RecDescent::_tracefirst($_[1]),
922             q{NIL},
923             $tracelevel)
924             if defined $::RD_TRACE;
925 1008         5110 return undef;
926             }
927 638 50 33     2036 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         785 splice @{$thisparser->{errors}}, $err_at;
  638         1126  
936 638 50       975 $return = $item[$#item] unless defined $return;
937 638 50       1101 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         1451 $_[1] = $text;
950 638         3851 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   147 my $thisparser = $_[0];
957 1     1   11 use vars q{$tracelevel};
  1         3  
  1         675  
958 81   50     251 local $tracelevel = ($tracelevel||0)+1;
959 81         180 $ERRORS = 0;
960 81         212 my $thisrule = $thisparser->{"rules"}{"PLAIN"};
961              
962 81 50       194 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         118 my $def_at = @{$thisparser->{deferred}};
  81         146  
969 81         115 my $err_at = @{$thisparser->{errors}};
  81         157  
970              
971 81         236 my $score;
972             my $score_return;
973 81         0 my $_tok;
974 81         131 my $return = undef;
975 81         115 my $_matched=0;
976 81         131 my $commit=0;
977 81         142 my @item = ();
978 81         121 my %item = ();
979 81         125 my $repeating = $_[2];
980 81         122 my $_noactions = $_[3];
981 81 50       156 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  81         115  
  81         150  
982 81         144 my $_itempos = $_[5];
983 81 50       195 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
984 81         197 my $text;
985             my $lastsep;
986 81         0 my $current_match;
987 81         226 my $expectation = new Parse::RecDescent::Expectation(q{/^"PLAIN"|^PLAIN/i});
988 81         539 $expectation->at($_[1]);
989            
990 81         299 my $thisline;
991 81         206 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
992              
993            
994              
995 81   33     592 while (!$_matched && !$commit)
996             {
997            
998 81 50       239 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         210 my $thisprod = $thisrule->{"prods"}[0];
1004 81         164 $text = $_[1];
1005 81         106 my $_savetext;
1006 81         148 @item = (q{PLAIN});
1007 81         177 %item = (__RULE__ => q{PLAIN});
1008 81         127 my $repcount = 0;
1009              
1010              
1011 81 50       177 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         166 undef $lastsep;
1016 81         233 $expectation->is(q{})->at($text);
1017            
1018              
1019 81 50 66     900 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"PLAIN"|^PLAIN)/i)
  81 100       837  
1020             {
1021 51 50       225 $text = $lastsep . $text if defined $lastsep;
1022 51         165 $expectation->failed();
1023 51 50       230 Parse::RecDescent::_trace(q{<>},
1024             Parse::RecDescent::_tracefirst($text))
1025             if defined $::RD_TRACE;
1026              
1027 51         107 last;
1028             }
1029 30         198 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1030 30         120 substr($text,0,length($current_match),q{});
1031 30 50       88 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1032             . $current_match . q{])},
1033             Parse::RecDescent::_tracefirst($text))
1034             if defined $::RD_TRACE;
1035 30         91 push @item, $item{__PATTERN1__}=$current_match;
1036            
1037              
1038 30 50       91 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       75 $_tok = ($_noactions) ? 0 : do { $return = "PLAIN" };
  30         74  
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       87 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1053             . $_tok . q{])},
1054             Parse::RecDescent::_tracefirst($text))
1055             if defined $::RD_TRACE;
1056 30         55 push @item, $_tok;
1057 30         81 $item{__ACTION1__}=$_tok;
1058            
1059              
1060 30 50       72 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         51 $_matched = 1;
1069 30         65 last;
1070             }
1071              
1072             splice
1073 81 100       217 @{$thisparser->{deferred}}, $def_at unless $_matched;
  51         141  
1074            
1075 81 100 66     333 unless ( $_matched || defined($score) )
1076             {
1077 51         93 splice @{$thisparser->{deferred}}, $def_at;
  51         99  
1078            
1079              
1080 51         97 $_[1] = $text; # NOT SURE THIS IS NEEDED
1081 51 50       120 Parse::RecDescent::_trace(q{<>},
1082             Parse::RecDescent::_tracefirst($_[1]),
1083             q{PLAIN},
1084             $tracelevel)
1085             if defined $::RD_TRACE;
1086 51         275 return undef;
1087             }
1088 30 50 33     117 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         85  
1097 30 50       89 $return = $item[$#item] unless defined $return;
1098 30 50       80 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         115 $_[1] = $text;
1111 30         215 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   46 my $thisparser = $_[0];
1118 1     1   7 use vars q{$tracelevel};
  1         23  
  1         706  
1119 22   50     70 local $tracelevel = ($tracelevel||0)+1;
1120 22         35 $ERRORS = 0;
1121 22         62 my $thisrule = $thisparser->{"rules"}{"RFC822"};
1122              
1123 22 50       62 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         29 my $def_at = @{$thisparser->{deferred}};
  22         65  
1130 22         36 my $err_at = @{$thisparser->{errors}};
  22         56  
1131              
1132 22         79 my $score;
1133             my $score_return;
1134 22         0 my $_tok;
1135 22         37 my $return = undef;
1136 22         33 my $_matched=0;
1137 22         33 my $commit=0;
1138 22         45 my @item = ();
1139 22         41 my %item = ();
1140 22         36 my $repeating = $_[2];
1141 22         39 my $_noactions = $_[3];
1142 22 50       67 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  22         36  
  22         41  
1143 22         46 my $_itempos = $_[5];
1144 22 50       69 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1145 22         66 my $text;
1146             my $lastsep;
1147 22         0 my $current_match;
1148 22         69 my $expectation = new Parse::RecDescent::Expectation(q{/^"RFC822"|^RFC822/i});
1149 22         143 $expectation->at($_[1]);
1150            
1151 22         87 my $thisline;
1152 22         67 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1153              
1154            
1155              
1156 22   33     210 while (!$_matched && !$commit)
1157             {
1158            
1159 22 50       57 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         66 my $thisprod = $thisrule->{"prods"}[0];
1165 22         44 $text = $_[1];
1166 22         33 my $_savetext;
1167 22         49 @item = (q{RFC822});
1168 22         54 %item = (__RULE__ => q{RFC822});
1169 22         31 my $repcount = 0;
1170              
1171              
1172 22 50       54 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         48 undef $lastsep;
1177 22         58 $expectation->is(q{})->at($text);
1178            
1179              
1180 22 50 66     272 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"RFC822"|^RFC822)/i)
  22 100       303  
1181             {
1182 1 50       6 $text = $lastsep . $text if defined $lastsep;
1183 1         5 $expectation->failed();
1184 1 50       4 Parse::RecDescent::_trace(q{<>},
1185             Parse::RecDescent::_tracefirst($text))
1186             if defined $::RD_TRACE;
1187              
1188 1         3 last;
1189             }
1190 21         124 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1191 21         88 substr($text,0,length($current_match),q{});
1192 21 50       65 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1193             . $current_match . q{])},
1194             Parse::RecDescent::_tracefirst($text))
1195             if defined $::RD_TRACE;
1196 21         70 push @item, $item{__PATTERN1__}=$current_match;
1197            
1198              
1199 21 50       65 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       59 $_tok = ($_noactions) ? 0 : do { $return = "RFC822" };
  21         48  
1207 21 50       66 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       111 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1214             . $_tok . q{])},
1215             Parse::RecDescent::_tracefirst($text))
1216             if defined $::RD_TRACE;
1217 21         50 push @item, $_tok;
1218 21         43 $item{__ACTION1__}=$_tok;
1219            
1220              
1221 21 50       44 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         37 $_matched = 1;
1230 21         47 last;
1231             }
1232              
1233             splice
1234 22 100       74 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         3  
1235            
1236 22 100 66     69 unless ( $_matched || defined($score) )
1237             {
1238 1         3 splice @{$thisparser->{deferred}}, $def_at;
  1         3  
1239            
1240              
1241 1         11 $_[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     79 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         42 splice @{$thisparser->{errors}}, $err_at;
  21         52  
1258 21 50       69 $return = $item[$#item] unless defined $return;
1259 21 50       66 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         87 $_[1] = $text;
1272 21         162 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   149 my $thisparser = $_[0];
1279 1     1   6 use vars q{$tracelevel};
  1         2  
  1         268  
1280 81   50     232 local $tracelevel = ($tracelevel||0)+1;
1281 81         165 $ERRORS = 0;
1282 81         195 my $thisrule = $thisparser->{"rules"}{"bodysubtype"};
1283              
1284 81 50       213 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         110 my $def_at = @{$thisparser->{deferred}};
  81         162  
1291 81         172 my $err_at = @{$thisparser->{errors}};
  81         145  
1292              
1293 81         218 my $score;
1294             my $score_return;
1295 81         0 my $_tok;
1296 81         118 my $return = undef;
1297 81         98 my $_matched=0;
1298 81         137 my $commit=0;
1299 81         179 my @item = ();
1300 81         128 my %item = ();
1301 81         134 my $repeating = $_[2];
1302 81         122 my $_noactions = $_[3];
1303 81 50       179 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  81         112  
  81         132  
1304 81         129 my $_itempos = $_[5];
1305 81 50       240 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1306 81         240 my $text;
1307             my $lastsep;
1308 81         0 my $current_match;
1309 81         269 my $expectation = new Parse::RecDescent::Expectation(q{PLAIN, or HTML, or NIL, or STRING});
1310 81         514 $expectation->at($_[1]);
1311            
1312 81         349 my $thisline;
1313 81         250 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1314              
1315            
1316              
1317 81   33     624 while (!$_matched && !$commit)
1318             {
1319            
1320 81 50       182 Parse::RecDescent::_trace(q{Trying production: [PLAIN]},
1321             Parse::RecDescent::_tracefirst($_[1]),
1322             q{bodysubtype},
1323             $tracelevel)
1324             if defined $::RD_TRACE;
1325 81         219 my $thisprod = $thisrule->{"prods"}[0];
1326 81         163 $text = $_[1];
1327 81         105 my $_savetext;
1328 81         175 @item = (q{bodysubtype});
1329 81         172 %item = (__RULE__ => q{bodysubtype});
1330 81         111 my $repcount = 0;
1331              
1332              
1333 81 50       180 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   6 if (1) { no strict qw{refs};
  1         8  
  1         247  
  81         106  
1339 81         222 $expectation->is(q{})->at($text);
1340 81 100   81   766 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::PLAIN($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  81         160  
1341             {
1342            
1343 51 50       136 Parse::RecDescent::_trace(q{<>},
1344             Parse::RecDescent::_tracefirst($text),
1345             q{bodysubtype},
1346             $tracelevel)
1347             if defined $::RD_TRACE;
1348 51         160 $expectation->failed();
1349 51         187 last;
1350             }
1351 30 50       131 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         81 $item{q{PLAIN}} = $_tok;
1359 30         72 push @item, $_tok;
1360            
1361             }
1362              
1363 30 50       78 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         53 $_matched = 1;
1372 30         46 last;
1373             }
1374              
1375             splice
1376 81 100       269 @{$thisparser->{deferred}}, $def_at unless $_matched;
  51         126  
1377            
1378 81   66     352 while (!$_matched && !$commit)
1379             {
1380            
1381 51 50       123 Parse::RecDescent::_trace(q{Trying production: [HTML]},
1382             Parse::RecDescent::_tracefirst($_[1]),
1383             q{bodysubtype},
1384             $tracelevel)
1385             if defined $::RD_TRACE;
1386 51         118 my $thisprod = $thisrule->{"prods"}[1];
1387 51         96 $text = $_[1];
1388 51         64 my $_savetext;
1389 51         114 @item = (q{bodysubtype});
1390 51         109 %item = (__RULE__ => q{bodysubtype});
1391 51         71 my $repcount = 0;
1392              
1393              
1394 51 50       90 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   6 if (1) { no strict qw{refs};
  1         2  
  1         230  
  51         79  
1400 51         136 $expectation->is(q{})->at($text);
1401 51 100   51   494 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::HTML($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  51         91  
1402             {
1403            
1404 43 50       141 Parse::RecDescent::_trace(q{<>},
1405             Parse::RecDescent::_tracefirst($text),
1406             q{bodysubtype},
1407             $tracelevel)
1408             if defined $::RD_TRACE;
1409 43         119 $expectation->failed();
1410 43         124 last;
1411             }
1412 8 50       32 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         16 push @item, $_tok;
1421            
1422             }
1423              
1424 8 50       26 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         11 $_matched = 1;
1433 8         13 last;
1434             }
1435              
1436             splice
1437 81 100       248 @{$thisparser->{deferred}}, $def_at unless $_matched;
  43         108  
1438            
1439 81   66     259 while (!$_matched && !$commit)
1440             {
1441            
1442 43 50       91 Parse::RecDescent::_trace(q{Trying production: [NIL]},
1443             Parse::RecDescent::_tracefirst($_[1]),
1444             q{bodysubtype},
1445             $tracelevel)
1446             if defined $::RD_TRACE;
1447 43         101 my $thisprod = $thisrule->{"prods"}[2];
1448 43         71 $text = $_[1];
1449 43         54 my $_savetext;
1450 43         91 @item = (q{bodysubtype});
1451 43         104 %item = (__RULE__ => q{bodysubtype});
1452 43         81 my $repcount = 0;
1453              
1454              
1455 43 50       107 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   6 if (1) { no strict qw{refs};
  1         2  
  1         233  
  43         58  
1461 43         92 $expectation->is(q{})->at($text);
1462 43 50   43   345 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  43         87  
1463             {
1464            
1465 43 50       125 Parse::RecDescent::_trace(q{<>},
1466             Parse::RecDescent::_tracefirst($text),
1467             q{bodysubtype},
1468             $tracelevel)
1469             if defined $::RD_TRACE;
1470 43         129 $expectation->failed();
1471 43         128 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       227 @{$thisparser->{deferred}}, $def_at unless $_matched;
  43         120  
1499            
1500 81   66     294 while (!$_matched && !$commit)
1501             {
1502            
1503 43 50       108 Parse::RecDescent::_trace(q{Trying production: [STRING]},
1504             Parse::RecDescent::_tracefirst($_[1]),
1505             q{bodysubtype},
1506             $tracelevel)
1507             if defined $::RD_TRACE;
1508 43         86 my $thisprod = $thisrule->{"prods"}[3];
1509 43         106 $text = $_[1];
1510 43         57 my $_savetext;
1511 43         102 @item = (q{bodysubtype});
1512 43         88 %item = (__RULE__ => q{bodysubtype});
1513 43         62 my $repcount = 0;
1514              
1515              
1516 43 50       88 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   31 if (1) { no strict qw{refs};
  1         4  
  1         410  
  43         73  
1522 43         110 $expectation->is(q{})->at($text);
1523 43 50   43   403 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  43         75  
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       136 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         120 $item{q{STRING}} = $_tok;
1542 43         85 push @item, $_tok;
1543            
1544             }
1545              
1546 43 50       114 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         97 $_matched = 1;
1555 43         72 last;
1556             }
1557              
1558             splice
1559 81 50       225 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
1560            
1561 81 50 33     229 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     350 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         136 splice @{$thisparser->{errors}}, $err_at;
  81         162  
1583 81 50       233 $return = $item[$#item] unless defined $return;
1584 81 50       196 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         153 $_[1] = $text;
1597 81         425 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   65 my $thisparser = $_[0];
1604 1     1   6 use vars q{$tracelevel};
  1         2  
  1         298  
1605 24   50     80 local $tracelevel = ($tracelevel||0)+1;
1606 24         53 $ERRORS = 0;
1607 24         58 my $thisrule = $thisparser->{"rules"}{"from"};
1608              
1609 24 50       69 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         38 my $def_at = @{$thisparser->{deferred}};
  24         50  
1616 24         41 my $err_at = @{$thisparser->{errors}};
  24         57  
1617              
1618 24         75 my $score;
1619             my $score_return;
1620 24         0 my $_tok;
1621 24         38 my $return = undef;
1622 24         39 my $_matched=0;
1623 24         39 my $commit=0;
1624 24         42 my @item = ();
1625 24         47 my %item = ();
1626 24         37 my $repeating = $_[2];
1627 24         39 my $_noactions = $_[3];
1628 24 50       60 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         30  
  24         44  
1629 24         60 my $_itempos = $_[5];
1630 24 50       77 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1631 24         70 my $text;
1632             my $lastsep;
1633 24         0 my $current_match;
1634 24         73 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
1635 24         154 $expectation->at($_[1]);
1636            
1637 24         87 my $thisline;
1638 24         77 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1639              
1640            
1641              
1642 24   33     200 while (!$_matched && !$commit)
1643             {
1644            
1645 24 50       68 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
1646             Parse::RecDescent::_tracefirst($_[1]),
1647             q{from},
1648             $tracelevel)
1649             if defined $::RD_TRACE;
1650 24         75 my $thisprod = $thisrule->{"prods"}[0];
1651 24         54 $text = $_[1];
1652 24         46 my $_savetext;
1653 24         41 @item = (q{from});
1654 24         63 %item = (__RULE__ => q{from});
1655 24         37 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   6 if (1) { no strict qw{refs};
  1         2  
  1         345  
  24         33  
1664 24         51 $expectation->is(q{})->at($text);
1665 24 50   24   262 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         44  
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       91 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         63 $item{q{ADDRESSES}} = $_tok;
1684 24         55 push @item, $_tok;
1685            
1686             }
1687              
1688 24 50       57 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         49 $_matched = 1;
1697 24         37 last;
1698             }
1699              
1700             splice
1701 24 50       61 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
1702            
1703 24 50 33     77 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     105 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         40 splice @{$thisparser->{errors}}, $err_at;
  24         53  
1725 24 50       57 $return = $item[$#item] unless defined $return;
1726 24 50       52 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         87 $_[1] = $text;
1739 24         143 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   531 my $thisparser = $_[0];
1746 1     1   6 use vars q{$tracelevel};
  1         2  
  1         435  
1747 122   50     402 local $tracelevel = ($tracelevel||0)+1;
1748 122         204 $ERRORS = 0;
1749 122         330 my $thisrule = $thisparser->{"rules"}{"multipart"};
1750              
1751 122 50       272 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         164 my $def_at = @{$thisparser->{deferred}};
  122         250  
1758 122         192 my $err_at = @{$thisparser->{errors}};
  122         266  
1759              
1760 122         355 my $score;
1761             my $score_return;
1762 122         0 my $_tok;
1763 122         190 my $return = undef;
1764 122         197 my $_matched=0;
1765 122         176 my $commit=0;
1766 122         252 my @item = ();
1767 122         198 my %item = ();
1768 122         163 my $repeating = $_[2];
1769 122         186 my $_noactions = $_[3];
1770 122 50       242 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  122         170  
  122         248  
1771 122         231 my $_itempos = $_[5];
1772 122 50       351 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1773 122         260 my $text;
1774             my $lastsep;
1775 122         0 my $current_match;
1776 122         305 my $expectation = new Parse::RecDescent::Expectation(q{subpart});
1777 122         748 $expectation->at($_[1]);
1778            
1779 122         449 my $thisline;
1780 122         331 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1781              
1782            
1783              
1784 122   33     985 while (!$_matched && !$commit)
1785             {
1786            
1787 122 50       313 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         324 my $thisprod = $thisrule->{"prods"}[0];
1793 122         282 $text = $_[1];
1794 122         185 my $_savetext;
1795 122         247 @item = (q{multipart});
1796 122         277 %item = (__RULE__ => q{multipart});
1797 122         179 my $repcount = 0;
1798              
1799              
1800 122 50       298 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         269 $expectation->is(q{})->at($text);
1806            
1807 122 100   195   1187 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subpart, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  195         386  
1808             {
1809 92 50       1189 Parse::RecDescent::_trace(q{<>},
1810             Parse::RecDescent::_tracefirst($text),
1811             q{multipart},
1812             $tracelevel)
1813             if defined $::RD_TRACE;
1814 92         145 last;
1815             }
1816 30 50       447 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         95 $item{q{subpart(s)}} = $_tok;
1824 30         66 push @item, $_tok;
1825            
1826              
1827              
1828            
1829              
1830 30 50       101 Parse::RecDescent::_trace(q{Trying directive: []},
1831             Parse::RecDescent::_tracefirst($text),
1832             q{multipart},
1833             $tracelevel)
1834             if defined $::RD_TRACE;
1835 30         56 $_tok = do { $commit = 1 };
  30         63  
1836 30 50       85 if (defined($_tok))
1837             {
1838 30 50       86 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       115 last unless defined $_tok;
1851 30         88 push @item, $item{__DIRECTIVE1__}=$_tok;
1852            
1853              
1854 30 50       78 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   7 if (1) { no strict qw{refs};
  1         2  
  1         1116  
  30         62  
1860 30         91 $expectation->is(q{bodysubtype})->at($text);
1861 30 50   30   296 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  30         56  
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       107 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         68 $item{q{bodysubtype}} = $_tok;
1880 30         56 push @item, $_tok;
1881            
1882             }
1883              
1884 30 50       69 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         93 $expectation->is(q{bodyparms})->at($text);
1890            
1891 30 50   30   313 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         77  
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       435 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         78 $item{q{bodyparms(?)}} = $_tok;
1908 30         61 push @item, $_tok;
1909            
1910              
1911              
1912 30 50       79 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         89 $expectation->is(q{bodydisp})->at($text);
1918            
1919 30 50   30   299 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         53  
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       418 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         69 $item{q{bodydisp(?)}} = $_tok;
1936 30         71 push @item, $_tok;
1937            
1938              
1939              
1940 30 50       83 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         99 $expectation->is(q{bodylang})->at($text);
1946            
1947 30 50   30   313 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         57  
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       493 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         84 $item{q{bodylang(?)}} = $_tok;
1964 30         59 push @item, $_tok;
1965            
1966              
1967              
1968 30 50       79 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         90 $expectation->is(q{bodyloc})->at($text);
1974            
1975 30 50   30   318 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyloc, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         61  
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       410 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         79 $item{q{bodyloc(?)}} = $_tok;
1992 30         59 push @item, $_tok;
1993            
1994              
1995              
1996 30 50       73 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         78 $expectation->is(q{bodyextra})->at($text);
2002            
2003 30 50   30   317 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  30         67  
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       375 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         84 $item{q{bodyextra(?)}} = $_tok;
2020 30         61 push @item, $_tok;
2021            
2022              
2023              
2024            
2025              
2026 30 50       110 Parse::RecDescent::_trace(q{Trying directive: []},
2027             Parse::RecDescent::_tracefirst($text),
2028             q{multipart},
2029             $tracelevel)
2030             if defined $::RD_TRACE;
2031 30     30   53 $_tok = do { push @{$thisparser->{deferred}}, sub { $subpartCount = 0 }; };
  30         51  
  30         149  
  30         87  
2032 30 50       71 if (defined($_tok))
2033             {
2034 30 50       84 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       76 last unless defined $_tok;
2047 30         74 push @item, $item{__DIRECTIVE2__}=$_tok;
2048            
2049              
2050 30 50       58 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       77 $_tok = ($_noactions) ? 0 : do { $return =
2058             { bodysubtype => $item{bodysubtype}
2059             , bodytype => 'MULTIPART'
2060 30         143 , bodystructure => $item{'subpart(s)'}
2061             };
2062 30         123 take_optional_items($return, \%item
2063             , qw/bodyparms bodydisp bodylang bodyloc bodyextra/);
2064 30         62 1;
2065             };
2066 30 50       93 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       77 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2073             . $_tok . q{])},
2074             Parse::RecDescent::_tracefirst($text))
2075             if defined $::RD_TRACE;
2076 30         63 push @item, $_tok;
2077 30         59 $item{__ACTION1__}=$_tok;
2078            
2079              
2080 30 50       65 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         42 $_matched = 1;
2089 30         47 last;
2090             }
2091              
2092             splice
2093 122 100       435 @{$thisparser->{deferred}}, $def_at unless $_matched;
  92         217  
2094            
2095 122 100 66     506 unless ( $_matched || defined($score) )
2096             {
2097 92         142 splice @{$thisparser->{deferred}}, $def_at;
  92         172  
2098            
2099              
2100 92         211 $_[1] = $text; # NOT SURE THIS IS NEEDED
2101 92 50       213 Parse::RecDescent::_trace(q{<>},
2102             Parse::RecDescent::_tracefirst($_[1]),
2103             q{multipart},
2104             $tracelevel)
2105             if defined $::RD_TRACE;
2106 92         427 return undef;
2107             }
2108 30 50 33     100 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         47 splice @{$thisparser->{errors}}, $err_at;
  30         68  
2117 30 50       83 $return = $item[$#item] unless defined $return;
2118 30 50       75 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         82 $_[1] = $text;
2131 30         284 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   796 my $thisparser = $_[0];
2138 1     1   13 use vars q{$tracelevel};
  1         7  
  1         400  
2139 72   50     193 local $tracelevel = ($tracelevel||0)+1;
2140 72         123 $ERRORS = 0;
2141 72         180 my $thisrule = $thisparser->{"rules"}{"bodyid"};
2142              
2143 72 50       187 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         109 my $def_at = @{$thisparser->{deferred}};
  72         157  
2150 72         105 my $err_at = @{$thisparser->{errors}};
  72         150  
2151              
2152 72         185 my $score;
2153             my $score_return;
2154 72         0 my $_tok;
2155 72         105 my $return = undef;
2156 72         95 my $_matched=0;
2157 72         133 my $commit=0;
2158 72         162 my @item = ();
2159 72         115 my %item = ();
2160 72         132 my $repeating = $_[2];
2161 72         118 my $_noactions = $_[3];
2162 72 50       160 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         115  
  72         166  
2163 72         107 my $_itempos = $_[5];
2164 72 50       237 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2165 72         211 my $text;
2166             my $lastsep;
2167 72         0 my $current_match;
2168 72         196 my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or STRING});
2169 72         454 $expectation->at($_[1]);
2170            
2171 72         262 my $thisline;
2172 72         233 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2173              
2174            
2175              
2176 72   33     601 while (!$_matched && !$commit)
2177             {
2178            
2179 72 50       195 Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]},
2180             Parse::RecDescent::_tracefirst($_[1]),
2181             q{bodyid},
2182             $tracelevel)
2183             if defined $::RD_TRACE;
2184 72         208 my $thisprod = $thisrule->{"prods"}[0];
2185 72         122 $text = $_[1];
2186 72         120 my $_savetext;
2187 72         151 @item = (q{bodyid});
2188 72         163 %item = (__RULE__ => q{bodyid});
2189 72         116 my $repcount = 0;
2190              
2191              
2192 72 50       161 Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text),
2193             q{bodyid},
2194             $tracelevel)
2195             if defined $::RD_TRACE;
2196 72         137 undef $lastsep;
2197 72         198 $expectation->is(q{})->at($text);
2198 72         461 $_savetext = $text;
2199              
2200 72 50 33     442 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/)
  72 50       691  
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         355 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2211 72         203 substr($text,0,length($current_match),q{});
2212 72 50       190 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2213             . $current_match . q{])},
2214             Parse::RecDescent::_tracefirst($text))
2215             if defined $::RD_TRACE;
2216 72         204 push @item, $item{__PATTERN1__}=$current_match;
2217 72         141 $text = $_savetext;
2218              
2219 72 50       160 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   6 if (1) { no strict qw{refs};
  1         3  
  1         231  
  72         114  
2225 72         195 $expectation->is(q{NIL})->at($text);
2226 72 100   72   667 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         125  
2227             {
2228            
2229 2 50       8 Parse::RecDescent::_trace(q{<>},
2230             Parse::RecDescent::_tracefirst($text),
2231             q{bodyid},
2232             $tracelevel)
2233             if defined $::RD_TRACE;
2234 2         8 $expectation->failed();
2235 2         16 last;
2236             }
2237 70 50       241 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         208 $item{q{NIL}} = $_tok;
2245 70         164 push @item, $_tok;
2246            
2247             }
2248              
2249 70 50       167 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         126 $_matched = 1;
2258 70         120 last;
2259             }
2260              
2261             splice
2262 72 100       189 @{$thisparser->{deferred}}, $def_at unless $_matched;
  2         5  
2263            
2264 72   66     233 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         6 my $thisprod = $thisrule->{"prods"}[1];
2273 2         4 $text = $_[1];
2274 2         3 my $_savetext;
2275 2         6 @item = (q{bodyid});
2276 2         5 %item = (__RULE__ => q{bodyid});
2277 2         3 my $repcount = 0;
2278              
2279              
2280 2 50       6 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   6 if (1) { no strict qw{refs};
  1         3  
  1         387  
  2         3  
2286 2         6 $expectation->is(q{})->at($text);
2287 2 50   2   20 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  2         4  
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       7 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         5 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         4 $_matched = 1;
2319 2         3 last;
2320             }
2321              
2322             splice
2323 72 50       194 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
2324            
2325 72 50 33     197 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     342 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         125 splice @{$thisparser->{errors}}, $err_at;
  72         177  
2347 72 50       262 $return = $item[$#item] unless defined $return;
2348 72 50       192 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         133 $_[1] = $text;
2361 72         355 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   1392 my $thisparser = $_[0];
2368 1     1   6 use vars q{$tracelevel};
  1         2  
  1         317  
2369 102   50     266 local $tracelevel = ($tracelevel||0)+1;
2370 102         174 $ERRORS = 0;
2371 102         239 my $thisrule = $thisparser->{"rules"}{"bodylang"};
2372              
2373 102 50       234 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         175 my $def_at = @{$thisparser->{deferred}};
  102         190  
2380 102         176 my $err_at = @{$thisparser->{errors}};
  102         198  
2381              
2382 102         256 my $score;
2383             my $score_return;
2384 102         0 my $_tok;
2385 102         173 my $return = undef;
2386 102         142 my $_matched=0;
2387 102         141 my $commit=0;
2388 102         170 my @item = ();
2389 102         227 my %item = ();
2390 102         151 my $repeating = $_[2];
2391 102         145 my $_noactions = $_[3];
2392 102 50       202 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         141  
  102         160  
2393 102         167 my $_itempos = $_[5];
2394 102 50       262 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2395 102         264 my $text;
2396             my $lastsep;
2397 102         0 my $current_match;
2398 102         244 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or STRINGS});
2399 102         665 $expectation->at($_[1]);
2400            
2401 102         333 my $thisline;
2402 102         383 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2403              
2404            
2405              
2406 102   33     779 while (!$_matched && !$commit)
2407             {
2408            
2409 102 50       214 Parse::RecDescent::_trace(q{Trying production: [NIL]},
2410             Parse::RecDescent::_tracefirst($_[1]),
2411             q{bodylang},
2412             $tracelevel)
2413             if defined $::RD_TRACE;
2414 102         253 my $thisprod = $thisrule->{"prods"}[0];
2415 102         158 $text = $_[1];
2416 102         184 my $_savetext;
2417 102         220 @item = (q{bodylang});
2418 102         208 %item = (__RULE__ => q{bodylang});
2419 102         140 my $repcount = 0;
2420              
2421              
2422 102 50       230 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   7 if (1) { no strict qw{refs};
  1         1  
  1         224  
  102         162  
2428 102         288 $expectation->is(q{})->at($text);
2429 102 100   102   877 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         184  
2430             {
2431            
2432 11 50       32 Parse::RecDescent::_trace(q{<>},
2433             Parse::RecDescent::_tracefirst($text),
2434             q{bodylang},
2435             $tracelevel)
2436             if defined $::RD_TRACE;
2437 11         39 $expectation->failed();
2438 11         37 last;
2439             }
2440 91 50       309 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         181 $item{q{NIL}} = $_tok;
2448 91         184 push @item, $_tok;
2449            
2450             }
2451              
2452 91 50       184 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         140 $_matched = 1;
2461 91         168 last;
2462             }
2463              
2464             splice
2465 102 100       214 @{$thisparser->{deferred}}, $def_at unless $_matched;
  11         27  
2466            
2467 102   66     284 while (!$_matched && !$commit)
2468             {
2469            
2470 11 50       29 Parse::RecDescent::_trace(q{Trying production: [STRING]},
2471             Parse::RecDescent::_tracefirst($_[1]),
2472             q{bodylang},
2473             $tracelevel)
2474             if defined $::RD_TRACE;
2475 11         22 my $thisprod = $thisrule->{"prods"}[1];
2476 11         20 $text = $_[1];
2477 11         14 my $_savetext;
2478 11         26 @item = (q{bodylang});
2479 11         27 %item = (__RULE__ => q{bodylang});
2480 11         19 my $repcount = 0;
2481              
2482              
2483 11 50       25 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   6 if (1) { no strict qw{refs};
  1         2  
  1         246  
  11         16  
2489 11         28 $expectation->is(q{})->at($text);
2490 11 50   11   109 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  11         20  
2491             {
2492            
2493 11 50       27 Parse::RecDescent::_trace(q{<>},
2494             Parse::RecDescent::_tracefirst($text),
2495             q{bodylang},
2496             $tracelevel)
2497             if defined $::RD_TRACE;
2498 11         33 $expectation->failed();
2499 11         35 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       218 @{$thisparser->{deferred}}, $def_at unless $_matched;
  11         22  
2527            
2528 102   66     318 while (!$_matched && !$commit)
2529             {
2530            
2531 11 50       24 Parse::RecDescent::_trace(q{Trying production: [STRINGS]},
2532             Parse::RecDescent::_tracefirst($_[1]),
2533             q{bodylang},
2534             $tracelevel)
2535             if defined $::RD_TRACE;
2536 11         33 my $thisprod = $thisrule->{"prods"}[2];
2537 11         21 $text = $_[1];
2538 11         12 my $_savetext;
2539 11         26 @item = (q{bodylang});
2540 11         28 %item = (__RULE__ => q{bodylang});
2541 11         28 my $repcount = 0;
2542              
2543              
2544 11 50       26 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   6 if (1) { no strict qw{refs};
  1         2  
  1         404  
  11         15  
2550 11         28 $expectation->is(q{})->at($text);
2551 11 100   11   122 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  11         17  
2552             {
2553            
2554 10 50       26 Parse::RecDescent::_trace(q{<>},
2555             Parse::RecDescent::_tracefirst($text),
2556             q{bodylang},
2557             $tracelevel)
2558             if defined $::RD_TRACE;
2559 10         28 $expectation->failed();
2560 10         31 last;
2561             }
2562 1 50       4 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       3 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         2 $_matched = 1;
2583 1         3 last;
2584             }
2585              
2586             splice
2587 102 100       247 @{$thisparser->{deferred}}, $def_at unless $_matched;
  10         26  
2588            
2589 102 100 66     270 unless ( $_matched || defined($score) )
2590             {
2591 10         14 splice @{$thisparser->{deferred}}, $def_at;
  10         18  
2592            
2593              
2594 10         18 $_[1] = $text; # NOT SURE THIS IS NEEDED
2595 10 50       19 Parse::RecDescent::_trace(q{<>},
2596             Parse::RecDescent::_tracefirst($_[1]),
2597             q{bodylang},
2598             $tracelevel)
2599             if defined $::RD_TRACE;
2600 10         37 return undef;
2601             }
2602 92 50 33     353 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         156 splice @{$thisparser->{errors}}, $err_at;
  92         169  
2611 92 50       263 $return = $item[$#item] unless defined $return;
2612 92 50       210 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         140 $_[1] = $text;
2625 92         402 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   413 my $thisparser = $_[0];
2632 1     1   7 use vars q{$tracelevel};
  1         2  
  1         268  
2633 30   50     91 local $tracelevel = ($tracelevel||0)+1;
2634 30         71 $ERRORS = 0;
2635 30         71 my $thisrule = $thisparser->{"rules"}{"bodyloc"};
2636              
2637 30 50       89 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         48 my $def_at = @{$thisparser->{deferred}};
  30         62  
2644 30         45 my $err_at = @{$thisparser->{errors}};
  30         57  
2645              
2646 30         99 my $score;
2647             my $score_return;
2648 30         0 my $_tok;
2649 30         47 my $return = undef;
2650 30         64 my $_matched=0;
2651 30         50 my $commit=0;
2652 30         48 my @item = ();
2653 30         58 my %item = ();
2654 30         46 my $repeating = $_[2];
2655 30         49 my $_noactions = $_[3];
2656 30 50       68 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  30         45  
  30         51  
2657 30         51 my $_itempos = $_[5];
2658 30 50       91 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2659 30         80 my $text;
2660             my $lastsep;
2661 30         0 my $current_match;
2662 30         108 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
2663 30         201 $expectation->at($_[1]);
2664            
2665 30         103 my $thisline;
2666 30         105 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2667              
2668            
2669              
2670 30   33     263 while (!$_matched && !$commit)
2671             {
2672            
2673 30 50       73 Parse::RecDescent::_trace(q{Trying production: [NIL]},
2674             Parse::RecDescent::_tracefirst($_[1]),
2675             q{bodyloc},
2676             $tracelevel)
2677             if defined $::RD_TRACE;
2678 30         89 my $thisprod = $thisrule->{"prods"}[0];
2679 30         50 $text = $_[1];
2680 30         42 my $_savetext;
2681 30         60 @item = (q{bodyloc});
2682 30         77 %item = (__RULE__ => q{bodyloc});
2683 30         56 my $repcount = 0;
2684              
2685              
2686 30 50       76 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   7 if (1) { no strict qw{refs};
  1         1  
  1         229  
  30         48  
2692 30         71 $expectation->is(q{})->at($text);
2693 30 100   30   293 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  30         47  
2694             {
2695            
2696 9 50       24 Parse::RecDescent::_trace(q{<>},
2697             Parse::RecDescent::_tracefirst($text),
2698             q{bodyloc},
2699             $tracelevel)
2700             if defined $::RD_TRACE;
2701 9         28 $expectation->failed();
2702 9         26 last;
2703             }
2704 21 50       106 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         56 $item{q{NIL}} = $_tok;
2712 21         46 push @item, $_tok;
2713            
2714             }
2715              
2716 21 50       74 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         42 $_matched = 1;
2725 21         44 last;
2726             }
2727              
2728             splice
2729 30 100       87 @{$thisparser->{deferred}}, $def_at unless $_matched;
  9         20  
2730            
2731 30   66     114 while (!$_matched && !$commit)
2732             {
2733            
2734 9 50       30 Parse::RecDescent::_trace(q{Trying production: [STRING]},
2735             Parse::RecDescent::_tracefirst($_[1]),
2736             q{bodyloc},
2737             $tracelevel)
2738             if defined $::RD_TRACE;
2739 9         21 my $thisprod = $thisrule->{"prods"}[1];
2740 9         17 $text = $_[1];
2741 9         14 my $_savetext;
2742 9         21 @item = (q{bodyloc});
2743 9         23 %item = (__RULE__ => q{bodyloc});
2744 9         14 my $repcount = 0;
2745              
2746              
2747 9 50       20 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   6 if (1) { no strict qw{refs};
  1         2  
  1         375  
  9         13  
2753 9         28 $expectation->is(q{})->at($text);
2754 9 50   9   88 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  9         26  
2755             {
2756            
2757 9 50       23 Parse::RecDescent::_trace(q{<>},
2758             Parse::RecDescent::_tracefirst($text),
2759             q{bodyloc},
2760             $tracelevel)
2761             if defined $::RD_TRACE;
2762 9         26 $expectation->failed();
2763 9         28 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       109 @{$thisparser->{deferred}}, $def_at unless $_matched;
  9         18  
2791            
2792 30 100 66     113 unless ( $_matched || defined($score) )
2793             {
2794 9         12 splice @{$thisparser->{deferred}}, $def_at;
  9         16  
2795            
2796              
2797 9         14 $_[1] = $text; # NOT SURE THIS IS NEEDED
2798 9 50       20 Parse::RecDescent::_trace(q{<>},
2799             Parse::RecDescent::_tracefirst($_[1]),
2800             q{bodyloc},
2801             $tracelevel)
2802             if defined $::RD_TRACE;
2803 9         35 return undef;
2804             }
2805 21 50 33     113 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         44 splice @{$thisparser->{errors}}, $err_at;
  21         46  
2814 21 50       64 $return = $item[$#item] unless defined $return;
2815 21 50       55 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         34 $_[1] = $text;
2828 21         100 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   49 my $thisparser = $_[0];
2835 1     1   7 use vars q{$tracelevel};
  1         2  
  1         283  
2836 24   50     81 local $tracelevel = ($tracelevel||0)+1;
2837 24         46 $ERRORS = 0;
2838 24         82 my $thisrule = $thisparser->{"rules"}{"inreplyto"};
2839              
2840 24 50       55 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         45 my $def_at = @{$thisparser->{deferred}};
  24         61  
2847 24         47 my $err_at = @{$thisparser->{errors}};
  24         49  
2848              
2849 24         74 my $score;
2850             my $score_return;
2851 24         0 my $_tok;
2852 24         46 my $return = undef;
2853 24         33 my $_matched=0;
2854 24         39 my $commit=0;
2855 24         44 my @item = ();
2856 24         52 my %item = ();
2857 24         65 my $repeating = $_[2];
2858 24         65 my $_noactions = $_[3];
2859 24 50       67 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         49  
  24         37  
2860 24         48 my $_itempos = $_[5];
2861 24 50       75 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2862 24         67 my $text;
2863             my $lastsep;
2864 24         0 my $current_match;
2865 24         65 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
2866 24         145 $expectation->at($_[1]);
2867            
2868 24         99 my $thisline;
2869 24         83 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2870              
2871            
2872              
2873 24   33     190 while (!$_matched && !$commit)
2874             {
2875            
2876 24 50       83 Parse::RecDescent::_trace(q{Trying production: [NIL]},
2877             Parse::RecDescent::_tracefirst($_[1]),
2878             q{inreplyto},
2879             $tracelevel)
2880             if defined $::RD_TRACE;
2881 24         85 my $thisprod = $thisrule->{"prods"}[0];
2882 24         49 $text = $_[1];
2883 24         57 my $_savetext;
2884 24         59 @item = (q{inreplyto});
2885 24         61 %item = (__RULE__ => q{inreplyto});
2886 24         42 my $repcount = 0;
2887              
2888              
2889 24 50       73 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   6 if (1) { no strict qw{refs};
  1         7  
  1         219  
  24         43  
2895 24         62 $expectation->is(q{})->at($text);
2896 24 100   24   222 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         46  
2897             {
2898            
2899 1 50       3 Parse::RecDescent::_trace(q{<>},
2900             Parse::RecDescent::_tracefirst($text),
2901             q{inreplyto},
2902             $tracelevel)
2903             if defined $::RD_TRACE;
2904 1         4 $expectation->failed();
2905 1         4 last;
2906             }
2907 23 50       108 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         52 $item{q{NIL}} = $_tok;
2915 23         48 push @item, $_tok;
2916            
2917             }
2918              
2919 23 50       66 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         40 $_matched = 1;
2928 23         50 last;
2929             }
2930              
2931             splice
2932 24 100       59 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         3  
2933            
2934 24   66     75 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         4 my $thisprod = $thisrule->{"prods"}[1];
2943 1         2 $text = $_[1];
2944 1         2 my $_savetext;
2945 1         2 @item = (q{inreplyto});
2946 1         3 %item = (__RULE__ => q{inreplyto});
2947 1         3 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   6 if (1) { no strict qw{refs};
  1         3  
  1         364  
  1         2  
2956 1         3 $expectation->is(q{})->at($text);
2957 1 50   1   11 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       5 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         4 $item{q{STRING}} = $_tok;
2976 1         2 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       58 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
2994            
2995 24 50 33     82 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     141 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         58 splice @{$thisparser->{errors}}, $err_at;
  24         56  
3017 24 50       73 $return = $item[$#item] unless defined $return;
3018 24 50       70 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         72 $_[1] = $text;
3031 24         131 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   218 my $thisparser = $_[0];
3038 1     1   6 use vars q{$tracelevel};
  1         10  
  1         271  
3039 144   50     315 local $tracelevel = ($tracelevel||0)+1;
3040 144         222 $ERRORS = 0;
3041 144         273 my $thisrule = $thisparser->{"rules"}{"ADDRESSES"};
3042              
3043 144 50       244 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         172 my $def_at = @{$thisparser->{deferred}};
  144         220  
3050 144         179 my $err_at = @{$thisparser->{errors}};
  144         229  
3051              
3052 144         298 my $score;
3053             my $score_return;
3054 144         0 my $_tok;
3055 144         212 my $return = undef;
3056 144         181 my $_matched=0;
3057 144         186 my $commit=0;
3058 144         240 my @item = ();
3059 144         181 my %item = ();
3060 144         201 my $repeating = $_[2];
3061 144         168 my $_noactions = $_[3];
3062 144 50       257 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  144         168  
  144         212  
3063 144         265 my $_itempos = $_[5];
3064 144 50       306 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3065 144         289 my $text;
3066             my $lastsep;
3067 144         0 my $current_match;
3068 144         298 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or RFCNONCOMPLY, or '('});
3069 144         763 $expectation->at($_[1]);
3070            
3071 144         475 my $thisline;
3072 144         324 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3073              
3074            
3075              
3076 144   33     907 while (!$_matched && !$commit)
3077             {
3078            
3079 144 50       258 Parse::RecDescent::_trace(q{Trying production: [NIL]},
3080             Parse::RecDescent::_tracefirst($_[1]),
3081             q{ADDRESSES},
3082             $tracelevel)
3083             if defined $::RD_TRACE;
3084 144         264 my $thisprod = $thisrule->{"prods"}[0];
3085 144         205 $text = $_[1];
3086 144         167 my $_savetext;
3087 144         232 @item = (q{ADDRESSES});
3088 144         248 %item = (__RULE__ => q{ADDRESSES});
3089 144         211 my $repcount = 0;
3090              
3091              
3092 144 50       244 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   6 if (1) { no strict qw{refs};
  1         2  
  1         234  
  144         202  
3098 144         304 $expectation->is(q{})->at($text);
3099 144 100   144   1023 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  144         232  
3100             {
3101            
3102 98 50       204 Parse::RecDescent::_trace(q{<>},
3103             Parse::RecDescent::_tracefirst($text),
3104             q{ADDRESSES},
3105             $tracelevel)
3106             if defined $::RD_TRACE;
3107 98         246 $expectation->failed();
3108 98         286 last;
3109             }
3110 46 50       154 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         92 $item{q{NIL}} = $_tok;
3118 46         87 push @item, $_tok;
3119            
3120             }
3121              
3122 46 50       99 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         57 $_matched = 1;
3131 46         64 last;
3132             }
3133              
3134             splice
3135 144 100       412 @{$thisparser->{deferred}}, $def_at unless $_matched;
  98         213  
3136            
3137 144   66     423 while (!$_matched && !$commit)
3138             {
3139            
3140 98 50       194 Parse::RecDescent::_trace(q{Trying production: [RFCNONCOMPLY]},
3141             Parse::RecDescent::_tracefirst($_[1]),
3142             q{ADDRESSES},
3143             $tracelevel)
3144             if defined $::RD_TRACE;
3145 98         173 my $thisprod = $thisrule->{"prods"}[1];
3146 98         153 $text = $_[1];
3147 98         148 my $_savetext;
3148 98         185 @item = (q{ADDRESSES});
3149 98         187 %item = (__RULE__ => q{ADDRESSES});
3150 98         137 my $repcount = 0;
3151              
3152              
3153 98 50       164 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   5 if (1) { no strict qw{refs};
  1         2  
  1         1002  
  98         135  
3159 98         208 $expectation->is(q{})->at($text);
3160 98 100   98   843 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFCNONCOMPLY($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  98         145  
3161             {
3162            
3163 94 50       209 Parse::RecDescent::_trace(q{<>},
3164             Parse::RecDescent::_tracefirst($text),
3165             q{ADDRESSES},
3166             $tracelevel)
3167             if defined $::RD_TRACE;
3168 94         242 $expectation->failed();
3169 94         263 last;
3170             }
3171 4 50       15 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         7 push @item, $_tok;
3180            
3181             }
3182              
3183 4 50       12 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         8 $_matched = 1;
3192 4         6 last;
3193             }
3194              
3195             splice
3196 144 100       367 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         189  
3197            
3198 144   66     420 while (!$_matched && !$commit)
3199             {
3200            
3201 94 50       180 Parse::RecDescent::_trace(q{Trying production: ['(' addressstruct ')']},
3202             Parse::RecDescent::_tracefirst($_[1]),
3203             q{ADDRESSES},
3204             $tracelevel)
3205             if defined $::RD_TRACE;
3206 94         191 my $thisprod = $thisrule->{"prods"}[2];
3207 94         168 $text = $_[1];
3208 94         115 my $_savetext;
3209 94         200 @item = (q{ADDRESSES});
3210 94         198 %item = (__RULE__ => q{ADDRESSES});
3211 94         123 my $repcount = 0;
3212              
3213              
3214 94 50       195 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
3215             Parse::RecDescent::_tracefirst($text),
3216             q{ADDRESSES},
3217             $tracelevel)
3218             if defined $::RD_TRACE;
3219 94         124 undef $lastsep;
3220 94         218 $expectation->is(q{})->at($text);
3221            
3222              
3223 94 50 33     810 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  94 50 33     589  
  94   33     161  
  94         463  
3224             substr($text,0,length($_tok)) eq $_tok and
3225 94         182 do { substr($text,0,length($_tok)) = ""; 1; }
  94         227  
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       211 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3237             . $_tok . q{])},
3238             Parse::RecDescent::_tracefirst($text))
3239             if defined $::RD_TRACE;
3240 94         197 push @item, $item{__STRING1__}=$_tok;
3241            
3242              
3243 94 50       190 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         241 $expectation->is(q{addressstruct})->at($text);
3249            
3250 94 50   188   951 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::addressstruct, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  188         310  
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       1247 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         197 $item{q{addressstruct(s)}} = $_tok;
3267 94         156 push @item, $_tok;
3268            
3269              
3270              
3271 94 50       166 Parse::RecDescent::_trace(q{Trying terminal: [')']},
3272             Parse::RecDescent::_tracefirst($text),
3273             q{ADDRESSES},
3274             $tracelevel)
3275             if defined $::RD_TRACE;
3276 94         162 undef $lastsep;
3277 94         224 $expectation->is(q{')'})->at($text);
3278            
3279              
3280 94 50 33     816 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  94 50 33     553  
  94   33     173  
  94         457  
3281             substr($text,0,length($_tok)) eq $_tok and
3282 94         193 do { substr($text,0,length($_tok)) = ""; 1; }
  94         254  
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       212 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3294             . $_tok . q{])},
3295             Parse::RecDescent::_tracefirst($text))
3296             if defined $::RD_TRACE;
3297 94         205 push @item, $item{__STRING2__}=$_tok;
3298            
3299              
3300 94 50       202 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       172 $_tok = ($_noactions) ? 0 : do { $return = $item{'addressstruct(s)'} };
  94         182  
3308 94 50       176 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       177 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3315             . $_tok . q{])},
3316             Parse::RecDescent::_tracefirst($text))
3317             if defined $::RD_TRACE;
3318 94         136 push @item, $_tok;
3319 94         168 $item{__ACTION1__}=$_tok;
3320            
3321              
3322 94 50       161 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         159 $_matched = 1;
3331 94         200 last;
3332             }
3333              
3334             splice
3335 144 50       238 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
3336            
3337 144 50 33     283 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     384 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         169 splice @{$thisparser->{errors}}, $err_at;
  144         255  
3359 144 100       303 $return = $item[$#item] unless defined $return;
3360 144 50       277 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         293 $_[1] = $text;
3373 144         887 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   225 my $thisparser = $_[0];
3380 1     1   9 use vars q{$tracelevel};
  1         3  
  1         302  
3381 129   50     322 local $tracelevel = ($tracelevel||0)+1;
3382 129         198 $ERRORS = 0;
3383 129         298 my $thisrule = $thisparser->{"rules"}{"key"};
3384              
3385 129 50       275 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         183 my $def_at = @{$thisparser->{deferred}};
  129         235  
3392 129         176 my $err_at = @{$thisparser->{errors}};
  129         202  
3393              
3394 129         305 my $score;
3395             my $score_return;
3396 129         0 my $_tok;
3397 129         208 my $return = undef;
3398 129         164 my $_matched=0;
3399 129         149 my $commit=0;
3400 129         202 my @item = ();
3401 129         254 my %item = ();
3402 129         206 my $repeating = $_[2];
3403 129         165 my $_noactions = $_[3];
3404 129 50       283 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  129         162  
  129         222  
3405 129         207 my $_itempos = $_[5];
3406 129 50       272 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3407 129         389 my $text;
3408             my $lastsep;
3409 129         0 my $current_match;
3410 129         333 my $expectation = new Parse::RecDescent::Expectation(q{STRING});
3411 129         769 $expectation->at($_[1]);
3412            
3413 129         464 my $thisline;
3414 129         371 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3415              
3416            
3417              
3418 129   33     942 while (!$_matched && !$commit)
3419             {
3420            
3421 129 50       317 Parse::RecDescent::_trace(q{Trying production: [STRING]},
3422             Parse::RecDescent::_tracefirst($_[1]),
3423             q{key},
3424             $tracelevel)
3425             if defined $::RD_TRACE;
3426 129         325 my $thisprod = $thisrule->{"prods"}[0];
3427 129         195 $text = $_[1];
3428 129         241 my $_savetext;
3429 129         244 @item = (q{key});
3430 129         258 %item = (__RULE__ => q{key});
3431 129         174 my $repcount = 0;
3432              
3433              
3434 129 50       247 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   7 if (1) { no strict qw{refs};
  1         3  
  1         357  
  129         157  
3440 129         304 $expectation->is(q{})->at($text);
3441 129 50   129   1141 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         270  
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       392 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         303 $item{q{STRING}} = $_tok;
3460 129         212 push @item, $_tok;
3461            
3462             }
3463              
3464 129 50       248 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         185 $_matched = 1;
3473 129         209 last;
3474             }
3475              
3476             splice
3477 129 50       294 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
3478            
3479 129 50 33     292 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     427 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         185 splice @{$thisparser->{errors}}, $err_at;
  129         261  
3501 129 50       314 $return = $item[$#item] unless defined $return;
3502 129 50       280 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         225 $_[1] = $text;
3515 129         583 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   81 my $thisparser = $_[0];
3522 1     1   7 use vars q{$tracelevel};
  1         1  
  1         291  
3523 53   50     127 local $tracelevel = ($tracelevel||0)+1;
3524 53         98 $ERRORS = 0;
3525 53         143 my $thisrule = $thisparser->{"rules"}{"rfc822message"};
3526              
3527 53 50       139 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         69 my $def_at = @{$thisparser->{deferred}};
  53         119  
3534 53         82 my $err_at = @{$thisparser->{errors}};
  53         112  
3535              
3536 53         144 my $score;
3537             my $score_return;
3538 53         0 my $_tok;
3539 53         76 my $return = undef;
3540 53         103 my $_matched=0;
3541 53         68 my $commit=0;
3542 53         92 my @item = ();
3543 53         79 my %item = ();
3544 53         77 my $repeating = $_[2];
3545 53         86 my $_noactions = $_[3];
3546 53 50       122 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  53         66  
  53         108  
3547 53         100 my $_itempos = $_[5];
3548 53 50       127 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3549 53         134 my $text;
3550             my $lastsep;
3551 53         0 my $current_match;
3552 53         151 my $expectation = new Parse::RecDescent::Expectation(q{MESSAGE});
3553 53         297 $expectation->at($_[1]);
3554            
3555 53         221 my $thisline;
3556 53         138 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3557              
3558            
3559              
3560 53   33     407 while (!$_matched && !$commit)
3561             {
3562            
3563 53 50       120 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         167 my $thisprod = $thisrule->{"prods"}[0];
3569 53         105 $text = $_[1];
3570 53         68 my $_savetext;
3571 53         105 @item = (q{rfc822message});
3572 53         130 %item = (__RULE__ => q{rfc822message});
3573 53         79 my $repcount = 0;
3574              
3575              
3576 53 50       131 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   7 if (1) { no strict qw{refs};
  1         1  
  1         128  
  53         86  
3582 53         172 $expectation->is(q{})->at($text);
3583 53 100   53   537 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::MESSAGE($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  53         120  
3584             {
3585            
3586 31 50       76 Parse::RecDescent::_trace(q{<>},
3587             Parse::RecDescent::_tracefirst($text),
3588             q{rfc822message},
3589             $tracelevel)
3590             if defined $::RD_TRACE;
3591 31         88 $expectation->failed();
3592 31         100 last;
3593             }
3594 22 50       93 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         57 $item{q{MESSAGE}} = $_tok;
3602 22         50 push @item, $_tok;
3603            
3604             }
3605              
3606 22 50       62 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   6 if (1) { no strict qw{refs};
  1         2  
  1         425  
  22         46  
3612 22         72 $expectation->is(q{RFC822})->at($text);
3613 22 100   22   251 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFC822($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  22         43  
3614             {
3615            
3616 1 50       4 Parse::RecDescent::_trace(q{<>},
3617             Parse::RecDescent::_tracefirst($text),
3618             q{rfc822message},
3619             $tracelevel)
3620             if defined $::RD_TRACE;
3621 1         4 $expectation->failed();
3622 1         8 last;
3623             }
3624 21 50       83 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         55 $item{q{RFC822}} = $_tok;
3632 21         39 push @item, $_tok;
3633            
3634             }
3635              
3636 21 50       70 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       46 $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE RFC822" };
  21         47  
3644 21 50       74 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       71 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3651             . $_tok . q{])},
3652             Parse::RecDescent::_tracefirst($text))
3653             if defined $::RD_TRACE;
3654 21         57 push @item, $_tok;
3655 21         48 $item{__ACTION1__}=$_tok;
3656            
3657              
3658 21 50       89 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         33 $_matched = 1;
3667 21         32 last;
3668             }
3669              
3670             splice
3671 53 100       183 @{$thisparser->{deferred}}, $def_at unless $_matched;
  32         83  
3672            
3673 53 100 66     222 unless ( $_matched || defined($score) )
3674             {
3675 32         44 splice @{$thisparser->{deferred}}, $def_at;
  32         76  
3676            
3677              
3678 32         71 $_[1] = $text; # NOT SURE THIS IS NEEDED
3679 32 50       96 Parse::RecDescent::_trace(q{<>},
3680             Parse::RecDescent::_tracefirst($_[1]),
3681             q{rfc822message},
3682             $tracelevel)
3683             if defined $::RD_TRACE;
3684 32         157 return undef;
3685             }
3686 21 50 33     65 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         28 splice @{$thisparser->{errors}}, $err_at;
  21         44  
3695 21 50       60 $return = $item[$#item] unless defined $return;
3696 21 50       63 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         39 $_[1] = $text;
3709 21         113 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   50 my $thisparser = $_[0];
3716 1     1   7 use vars q{$tracelevel};
  1         1  
  1         283  
3717 24   50     77 local $tracelevel = ($tracelevel||0)+1;
3718 24         42 $ERRORS = 0;
3719 24         70 my $thisrule = $thisparser->{"rules"}{"bcc"};
3720              
3721 24 50       78 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         35 my $def_at = @{$thisparser->{deferred}};
  24         66  
3728 24         33 my $err_at = @{$thisparser->{errors}};
  24         53  
3729              
3730 24         88 my $score;
3731             my $score_return;
3732 24         0 my $_tok;
3733 24         39 my $return = undef;
3734 24         50 my $_matched=0;
3735 24         33 my $commit=0;
3736 24         69 my @item = ();
3737 24         39 my %item = ();
3738 24         37 my $repeating = $_[2];
3739 24         29 my $_noactions = $_[3];
3740 24 50       75 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         40  
  24         45  
3741 24         46 my $_itempos = $_[5];
3742 24 50       82 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3743 24         66 my $text;
3744             my $lastsep;
3745 24         0 my $current_match;
3746 24         62 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
3747 24         147 $expectation->at($_[1]);
3748            
3749 24         88 my $thisline;
3750 24         78 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3751              
3752            
3753              
3754 24   33     201 while (!$_matched && !$commit)
3755             {
3756            
3757 24 50       58 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
3758             Parse::RecDescent::_tracefirst($_[1]),
3759             q{bcc},
3760             $tracelevel)
3761             if defined $::RD_TRACE;
3762 24         73 my $thisprod = $thisrule->{"prods"}[0];
3763 24         46 $text = $_[1];
3764 24         33 my $_savetext;
3765 24         62 @item = (q{bcc});
3766 24         62 %item = (__RULE__ => q{bcc});
3767 24         45 my $repcount = 0;
3768              
3769              
3770 24 50       65 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   6 if (1) { no strict qw{refs};
  1         2  
  1         343  
  24         37  
3776 24         51 $expectation->is(q{})->at($text);
3777 24 50   24   214 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         45  
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       90 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         60 $item{q{ADDRESSES}} = $_tok;
3796 24         50 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         45 $_matched = 1;
3809 24         41 last;
3810             }
3811              
3812             splice
3813 24 50       52 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
3814            
3815 24 50 33     84 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     114 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         38 splice @{$thisparser->{errors}}, $err_at;
  24         57  
3837 24 50       63 $return = $item[$#item] unless defined $return;
3838 24 50       60 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         49 $_[1] = $text;
3851 24         134 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   1425 my $thisparser = $_[0];
3858 1     1   7 use vars q{$tracelevel};
  1         2  
  1         276  
3859 102   50     261 local $tracelevel = ($tracelevel||0)+1;
3860 102         174 $ERRORS = 0;
3861 102         223 my $thisrule = $thisparser->{"rules"}{"bodydisp"};
3862              
3863 102 50       245 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         130 my $def_at = @{$thisparser->{deferred}};
  102         187  
3870 102         196 my $err_at = @{$thisparser->{errors}};
  102         197  
3871              
3872 102         252 my $score;
3873             my $score_return;
3874 102         0 my $_tok;
3875 102         145 my $return = undef;
3876 102         130 my $_matched=0;
3877 102         145 my $commit=0;
3878 102         164 my @item = ();
3879 102         198 my %item = ();
3880 102         147 my $repeating = $_[2];
3881 102         138 my $_noactions = $_[3];
3882 102 50       194 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         168  
  102         184  
3883 102         227 my $_itempos = $_[5];
3884 102 50       277 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3885 102         223 my $text;
3886             my $lastsep;
3887 102         0 my $current_match;
3888 102         276 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or KVPAIRS});
3889 102         628 $expectation->at($_[1]);
3890            
3891 102         331 my $thisline;
3892 102         336 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3893              
3894            
3895              
3896 102   33     746 while (!$_matched && !$commit)
3897             {
3898            
3899 102 50       218 Parse::RecDescent::_trace(q{Trying production: [NIL]},
3900             Parse::RecDescent::_tracefirst($_[1]),
3901             q{bodydisp},
3902             $tracelevel)
3903             if defined $::RD_TRACE;
3904 102         250 my $thisprod = $thisrule->{"prods"}[0];
3905 102         171 $text = $_[1];
3906 102         118 my $_savetext;
3907 102         204 @item = (q{bodydisp});
3908 102         221 %item = (__RULE__ => q{bodydisp});
3909 102         164 my $repcount = 0;
3910              
3911              
3912 102 50       213 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   6 if (1) { no strict qw{refs};
  1         3  
  1         224  
  102         147  
3918 102         234 $expectation->is(q{})->at($text);
3919 102 100   102   899 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         171  
3920             {
3921            
3922 38 50       119 Parse::RecDescent::_trace(q{<>},
3923             Parse::RecDescent::_tracefirst($text),
3924             q{bodydisp},
3925             $tracelevel)
3926             if defined $::RD_TRACE;
3927 38         121 $expectation->failed();
3928 38         113 last;
3929             }
3930 64 50       241 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         127 $item{q{NIL}} = $_tok;
3938 64         116 push @item, $_tok;
3939            
3940             }
3941              
3942 64 50       153 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         117 $_matched = 1;
3951 64         114 last;
3952             }
3953              
3954             splice
3955 102 100       245 @{$thisparser->{deferred}}, $def_at unless $_matched;
  38         85  
3956            
3957 102   66     339 while (!$_matched && !$commit)
3958             {
3959            
3960 38 50       108 Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]},
3961             Parse::RecDescent::_tracefirst($_[1]),
3962             q{bodydisp},
3963             $tracelevel)
3964             if defined $::RD_TRACE;
3965 38         80 my $thisprod = $thisrule->{"prods"}[1];
3966 38         70 $text = $_[1];
3967 38         55 my $_savetext;
3968 38         83 @item = (q{bodydisp});
3969 38         90 %item = (__RULE__ => q{bodydisp});
3970 38         54 my $repcount = 0;
3971              
3972              
3973 38 50       100 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         2  
  1         383  
  38         74  
3979 38         98 $expectation->is(q{})->at($text);
3980 38 100   38   356 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  38         75  
3981             {
3982            
3983 10 50       30 Parse::RecDescent::_trace(q{<>},
3984             Parse::RecDescent::_tracefirst($text),
3985             q{bodydisp},
3986             $tracelevel)
3987             if defined $::RD_TRACE;
3988 10         28 $expectation->failed();
3989 10         30 last;
3990             }
3991 28 50       132 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         65 $item{q{KVPAIRS}} = $_tok;
3999 28         69 push @item, $_tok;
4000            
4001             }
4002              
4003 28 50       83 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         55 $_matched = 1;
4012 28         50 last;
4013             }
4014              
4015             splice
4016 102 100       202 @{$thisparser->{deferred}}, $def_at unless $_matched;
  10         30  
4017            
4018 102 100 66     298 unless ( $_matched || defined($score) )
4019             {
4020 10         15 splice @{$thisparser->{deferred}}, $def_at;
  10         18  
4021            
4022              
4023 10         18 $_[1] = $text; # NOT SURE THIS IS NEEDED
4024 10 50       31 Parse::RecDescent::_trace(q{<>},
4025             Parse::RecDescent::_tracefirst($_[1]),
4026             q{bodydisp},
4027             $tracelevel)
4028             if defined $::RD_TRACE;
4029 10         39 return undef;
4030             }
4031 92 50 33     363 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         163 splice @{$thisparser->{errors}}, $err_at;
  92         189  
4040 92 50       242 $return = $item[$#item] unless defined $return;
4041 92 50       237 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         169 $_[1] = $text;
4054 92         397 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   230 my $thisparser = $_[0];
4061 1     1   7 use vars q{$tracelevel};
  1         2  
  1         979  
4062 133   50     382 local $tracelevel = ($tracelevel||0)+1;
4063 133         244 $ERRORS = 0;
4064 133         292 my $thisrule = $thisparser->{"rules"}{"KVPAIRS"};
4065              
4066 133 50       244 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         204 my $def_at = @{$thisparser->{deferred}};
  133         244  
4073 133         179 my $err_at = @{$thisparser->{errors}};
  133         224  
4074              
4075 133         319 my $score;
4076             my $score_return;
4077 133         0 my $_tok;
4078 133         169 my $return = undef;
4079 133         212 my $_matched=0;
4080 133         176 my $commit=0;
4081 133         201 my @item = ();
4082 133         194 my %item = ();
4083 133         211 my $repeating = $_[2];
4084 133         188 my $_noactions = $_[3];
4085 133 50       258 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  133         160  
  133         275  
4086 133         229 my $_itempos = $_[5];
4087 133 50       352 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4088 133         326 my $text;
4089             my $lastsep;
4090 133         0 my $current_match;
4091 133         323 my $expectation = new Parse::RecDescent::Expectation(q{'('});
4092 133         771 $expectation->at($_[1]);
4093            
4094 133         489 my $thisline;
4095 133         384 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4096              
4097            
4098              
4099 133   33     968 while (!$_matched && !$commit)
4100             {
4101            
4102 133 50       265 Parse::RecDescent::_trace(q{Trying production: ['(' kvpair ')']},
4103             Parse::RecDescent::_tracefirst($_[1]),
4104             q{KVPAIRS},
4105             $tracelevel)
4106             if defined $::RD_TRACE;
4107 133         288 my $thisprod = $thisrule->{"prods"}[0];
4108 133         251 $text = $_[1];
4109 133         180 my $_savetext;
4110 133         237 @item = (q{KVPAIRS});
4111 133         249 %item = (__RULE__ => q{KVPAIRS});
4112 133         179 my $repcount = 0;
4113              
4114              
4115 133 50       303 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
4116             Parse::RecDescent::_tracefirst($text),
4117             q{KVPAIRS},
4118             $tracelevel)
4119             if defined $::RD_TRACE;
4120 133         227 undef $lastsep;
4121 133         277 $expectation->is(q{})->at($text);
4122            
4123              
4124 133 100 33     1358 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  133 100 66     1002  
  133   66     225  
  133         728  
4125             substr($text,0,length($_tok)) eq $_tok and
4126 120         286 do { substr($text,0,length($_tok)) = ""; 1; }
  120         358  
4127             )
4128             {
4129 13 50       39 $text = $lastsep . $text if defined $lastsep;
4130            
4131 13         37 $expectation->failed();
4132 13 50       46 Parse::RecDescent::_trace(q{<>},
4133             Parse::RecDescent::_tracefirst($text))
4134             if defined $::RD_TRACE;
4135 13         27 last;
4136             }
4137 120 50       284 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4138             . $_tok . q{])},
4139             Parse::RecDescent::_tracefirst($text))
4140             if defined $::RD_TRACE;
4141 120         289 push @item, $item{__STRING1__}=$_tok;
4142            
4143              
4144 120 50       280 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         289 $expectation->is(q{kvpair})->at($text);
4150            
4151 120 50   249   1218 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::kvpair, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  249         439  
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       1662 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         275 $item{q{kvpair(s)}} = $_tok;
4168 120         207 push @item, $_tok;
4169            
4170              
4171              
4172 120 50       291 Parse::RecDescent::_trace(q{Trying terminal: [')']},
4173             Parse::RecDescent::_tracefirst($text),
4174             q{KVPAIRS},
4175             $tracelevel)
4176             if defined $::RD_TRACE;
4177 120         253 undef $lastsep;
4178 120         313 $expectation->is(q{')'})->at($text);
4179            
4180              
4181 120 50 33     1121 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  120 50 33     755  
  120   33     231  
  120         617  
4182             substr($text,0,length($_tok)) eq $_tok and
4183 120         302 do { substr($text,0,length($_tok)) = ""; 1; }
  120         303  
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       314 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4195             . $_tok . q{])},
4196             Parse::RecDescent::_tracefirst($text))
4197             if defined $::RD_TRACE;
4198 120         340 push @item, $item{__STRING2__}=$_tok;
4199            
4200              
4201 120 50       334 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       263 $_tok = ($_noactions) ? 0 : do { $return = { map { (%$_) } @{$item{'kvpair(s)'}} } };
  120         162  
  129         656  
  120         264  
4209 120 50       295 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       264 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4216             . $_tok . q{])},
4217             Parse::RecDescent::_tracefirst($text))
4218             if defined $::RD_TRACE;
4219 120         199 push @item, $_tok;
4220 120         206 $item{__ACTION1__}=$_tok;
4221            
4222              
4223 120 50       213 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         193 $_matched = 1;
4232 120         233 last;
4233             }
4234              
4235             splice
4236 133 100       287 @{$thisparser->{deferred}}, $def_at unless $_matched;
  13         31  
4237            
4238 133 100 66     354 unless ( $_matched || defined($score) )
4239             {
4240 13         29 splice @{$thisparser->{deferred}}, $def_at;
  13         20  
4241            
4242              
4243 13         21 $_[1] = $text; # NOT SURE THIS IS NEEDED
4244 13 50       30 Parse::RecDescent::_trace(q{<>},
4245             Parse::RecDescent::_tracefirst($_[1]),
4246             q{KVPAIRS},
4247             $tracelevel)
4248             if defined $::RD_TRACE;
4249 13         64 return undef;
4250             }
4251 120 50 33     325 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         184 splice @{$thisparser->{errors}}, $err_at;
  120         255  
4260 120 50       285 $return = $item[$#item] unless defined $return;
4261 120 50       236 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         357 $_[1] = $text;
4274 120         837 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   1073 my $thisparser = $_[0];
4281 1     1   9 use vars q{$tracelevel};
  1         2  
  1         293  
4282 72   50     184 local $tracelevel = ($tracelevel||0)+1;
4283 72         439 $ERRORS = 0;
4284 72         167 my $thisrule = $thisparser->{"rules"}{"bodyMD5"};
4285              
4286 72 50       218 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         135 my $def_at = @{$thisparser->{deferred}};
  72         146  
4293 72         106 my $err_at = @{$thisparser->{errors}};
  72         197  
4294              
4295 72         276 my $score;
4296             my $score_return;
4297 72         0 my $_tok;
4298 72         128 my $return = undef;
4299 72         95 my $_matched=0;
4300 72         100 my $commit=0;
4301 72         150 my @item = ();
4302 72         139 my %item = ();
4303 72         130 my $repeating = $_[2];
4304 72         115 my $_noactions = $_[3];
4305 72 50       195 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         112  
  72         139  
4306 72         144 my $_itempos = $_[5];
4307 72 50       223 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4308 72         174 my $text;
4309             my $lastsep;
4310 72         0 my $current_match;
4311 72         237 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
4312 72         541 $expectation->at($_[1]);
4313            
4314 72         254 my $thisline;
4315 72         240 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4316              
4317            
4318              
4319 72   33     587 while (!$_matched && !$commit)
4320             {
4321            
4322 72 50       205 Parse::RecDescent::_trace(q{Trying production: [NIL]},
4323             Parse::RecDescent::_tracefirst($_[1]),
4324             q{bodyMD5},
4325             $tracelevel)
4326             if defined $::RD_TRACE;
4327 72         205 my $thisprod = $thisrule->{"prods"}[0];
4328 72         128 $text = $_[1];
4329 72         120 my $_savetext;
4330 72         151 @item = (q{bodyMD5});
4331 72         156 %item = (__RULE__ => q{bodyMD5});
4332 72         100 my $repcount = 0;
4333              
4334              
4335 72 50       134 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   6 if (1) { no strict qw{refs};
  1         3  
  1         264  
  72         127  
4341 72         160 $expectation->is(q{})->at($text);
4342 72 100   72   666 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         150  
4343             {
4344            
4345 8 50       24 Parse::RecDescent::_trace(q{<>},
4346             Parse::RecDescent::_tracefirst($text),
4347             q{bodyMD5},
4348             $tracelevel)
4349             if defined $::RD_TRACE;
4350 8         26 $expectation->failed();
4351 8         30 last;
4352             }
4353 64 50       251 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         140 $item{q{NIL}} = $_tok;
4361 64         135 push @item, $_tok;
4362            
4363             }
4364              
4365 64 50       143 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         92 $_matched = 1;
4374 64         109 last;
4375             }
4376              
4377             splice
4378 72 100       211 @{$thisparser->{deferred}}, $def_at unless $_matched;
  8         23  
4379            
4380 72   66     254 while (!$_matched && !$commit)
4381             {
4382            
4383 8 50       20 Parse::RecDescent::_trace(q{Trying production: [STRING]},
4384             Parse::RecDescent::_tracefirst($_[1]),
4385             q{bodyMD5},
4386             $tracelevel)
4387             if defined $::RD_TRACE;
4388 8         21 my $thisprod = $thisrule->{"prods"}[1];
4389 8         14 $text = $_[1];
4390 8         12 my $_savetext;
4391 8         18 @item = (q{bodyMD5});
4392 8         21 %item = (__RULE__ => q{bodyMD5});
4393 8         16 my $repcount = 0;
4394              
4395              
4396 8 50       23 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         377  
  8         22  
4402 8         20 $expectation->is(q{})->at($text);
4403 8 100   8   77 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  8         15  
4404             {
4405            
4406 7 50       19 Parse::RecDescent::_trace(q{<>},
4407             Parse::RecDescent::_tracefirst($text),
4408             q{bodyMD5},
4409             $tracelevel)
4410             if defined $::RD_TRACE;
4411 7         22 $expectation->failed();
4412 7         20 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         3 push @item, $_tok;
4423            
4424             }
4425              
4426 1 50       4 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       175 @{$thisparser->{deferred}}, $def_at unless $_matched;
  7         20  
4440            
4441 72 100 66     208 unless ( $_matched || defined($score) )
4442             {
4443 7         13 splice @{$thisparser->{deferred}}, $def_at;
  7         15  
4444            
4445              
4446 7         13 $_[1] = $text; # NOT SURE THIS IS NEEDED
4447 7 50       16 Parse::RecDescent::_trace(q{<>},
4448             Parse::RecDescent::_tracefirst($_[1]),
4449             q{bodyMD5},
4450             $tracelevel)
4451             if defined $::RD_TRACE;
4452 7         29 return undef;
4453             }
4454 65 50 33     314 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         126 splice @{$thisparser->{errors}}, $err_at;
  65         184  
4463 65 50       204 $return = $item[$#item] unless defined $return;
4464 65 50       156 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         132 $_[1] = $text;
4477 65         290 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   999 my $thisparser = $_[0];
4484 1     1   6 use vars q{$tracelevel};
  1         2  
  1         276  
4485 122   50     330 local $tracelevel = ($tracelevel||0)+1;
4486 122         240 $ERRORS = 0;
4487 122         334 my $thisrule = $thisparser->{"rules"}{"part"};
4488              
4489 122 50       328 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         176 my $def_at = @{$thisparser->{deferred}};
  122         259  
4496 122         209 my $err_at = @{$thisparser->{errors}};
  122         212  
4497              
4498 122         317 my $score;
4499             my $score_return;
4500 122         0 my $_tok;
4501 122         184 my $return = undef;
4502 122         199 my $_matched=0;
4503 122         194 my $commit=0;
4504 122         212 my @item = ();
4505 122         191 my %item = ();
4506 122         195 my $repeating = $_[2];
4507 122         203 my $_noactions = $_[3];
4508 122 50       280 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  122         173  
  122         198  
4509 122         221 my $_itempos = $_[5];
4510 122 50       333 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4511 122         253 my $text;
4512             my $lastsep;
4513 122         0 my $current_match;
4514 122         340 my $expectation = new Parse::RecDescent::Expectation(q{multipart, or textmessage, or nestedmessage, or othertypemessage});
4515 122         763 $expectation->at($_[1]);
4516            
4517 122         569 my $thisline;
4518 122         374 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4519              
4520            
4521              
4522 122   33     950 while (!$_matched && !$commit)
4523             {
4524            
4525 122 50       299 Parse::RecDescent::_trace(q{Trying production: [multipart]},
4526             Parse::RecDescent::_tracefirst($_[1]),
4527             q{part},
4528             $tracelevel)
4529             if defined $::RD_TRACE;
4530 122         299 my $thisprod = $thisrule->{"prods"}[0];
4531 122         376 $text = $_[1];
4532 122         212 my $_savetext;
4533 122         251 @item = (q{part});
4534 122         296 %item = (__RULE__ => q{part});
4535 122         190 my $repcount = 0;
4536              
4537              
4538 122 50       285 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   7 if (1) { no strict qw{refs};
  1         1  
  1         302  
  122         173  
4544 122         346 $expectation->is(q{})->at($text);
4545 122 100   122   1209 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::multipart($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  122         285  
4546             {
4547            
4548 92 50       215 Parse::RecDescent::_trace(q{<>},
4549             Parse::RecDescent::_tracefirst($text),
4550             q{part},
4551             $tracelevel)
4552             if defined $::RD_TRACE;
4553 92         269 $expectation->failed();
4554 92         311 last;
4555             }
4556 30 50       161 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         83 $item{q{multipart}} = $_tok;
4564 30         75 push @item, $_tok;
4565            
4566             }
4567              
4568 30 50       83 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       73 $_tok = ($_noactions) ? 0 : do { $return = bless $item{multipart}, $mibs };
  30         105  
4576 30 50       85 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       65 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4583             . $_tok . q{])},
4584             Parse::RecDescent::_tracefirst($text))
4585             if defined $::RD_TRACE;
4586 30         47 push @item, $_tok;
4587 30         77 $item{__ACTION1__}=$_tok;
4588            
4589              
4590 30 50       73 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         47 $_matched = 1;
4599 30         49 last;
4600             }
4601              
4602             splice
4603 122 100       337 @{$thisparser->{deferred}}, $def_at unless $_matched;
  92         168  
4604            
4605 122   66     423 while (!$_matched && !$commit)
4606             {
4607            
4608 92 50       201 Parse::RecDescent::_trace(q{Trying production: [textmessage]},
4609             Parse::RecDescent::_tracefirst($_[1]),
4610             q{part},
4611             $tracelevel)
4612             if defined $::RD_TRACE;
4613 92         211 my $thisprod = $thisrule->{"prods"}[1];
4614 92         206 $text = $_[1];
4615 92         150 my $_savetext;
4616 92         257 @item = (q{part});
4617 92         240 %item = (__RULE__ => q{part});
4618 92         149 my $repcount = 0;
4619              
4620              
4621 92 50       272 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   7 if (1) { no strict qw{refs};
  1         3  
  1         320  
  92         120  
4627 92         273 $expectation->is(q{})->at($text);
4628 92 100   92   924 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  92         215  
4629             {
4630            
4631 53 50       137 Parse::RecDescent::_trace(q{<>},
4632             Parse::RecDescent::_tracefirst($text),
4633             q{part},
4634             $tracelevel)
4635             if defined $::RD_TRACE;
4636 53         182 $expectation->failed();
4637 53         155 last;
4638             }
4639 39 50       165 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         113 $item{q{textmessage}} = $_tok;
4647 39         81 push @item, $_tok;
4648            
4649             }
4650              
4651 39 50       111 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       125 $_tok = ($_noactions) ? 0 : do { $return = bless $item{textmessage}, $mibs };
  39         151  
4659 39 50       110 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       97 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4666             . $_tok . q{])},
4667             Parse::RecDescent::_tracefirst($text))
4668             if defined $::RD_TRACE;
4669 39         60 push @item, $_tok;
4670 39         76 $item{__ACTION1__}=$_tok;
4671            
4672              
4673 39 50       93 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         68 $_matched = 1;
4682 39         57 last;
4683             }
4684              
4685             splice
4686 122 100       300 @{$thisparser->{deferred}}, $def_at unless $_matched;
  53         123  
4687            
4688 122   66     398 while (!$_matched && !$commit)
4689             {
4690            
4691 53 50       127 Parse::RecDescent::_trace(q{Trying production: [nestedmessage]},
4692             Parse::RecDescent::_tracefirst($_[1]),
4693             q{part},
4694             $tracelevel)
4695             if defined $::RD_TRACE;
4696 53         118 my $thisprod = $thisrule->{"prods"}[2];
4697 53         104 $text = $_[1];
4698 53         114 my $_savetext;
4699 53         147 @item = (q{part});
4700 53         146 %item = (__RULE__ => q{part});
4701 53         101 my $repcount = 0;
4702              
4703              
4704 53 50       138 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   52 if (1) { no strict qw{refs};
  1         3  
  1         309  
  53         75  
4710 53         144 $expectation->is(q{})->at($text);
4711 53 100   53   623 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::nestedmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  53         107  
4712             {
4713            
4714 32 50       85 Parse::RecDescent::_trace(q{<>},
4715             Parse::RecDescent::_tracefirst($text),
4716             q{part},
4717             $tracelevel)
4718             if defined $::RD_TRACE;
4719 32         106 $expectation->failed();
4720 32         93 last;
4721             }
4722 21 50       118 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         63 $item{q{nestedmessage}} = $_tok;
4730 21         51 push @item, $_tok;
4731            
4732             }
4733              
4734 21 50       55 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       51 $_tok = ($_noactions) ? 0 : do { $return = bless $item{nestedmessage}, $mibs };
  21         82  
4742 21 50       66 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       65 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4749             . $_tok . q{])},
4750             Parse::RecDescent::_tracefirst($text))
4751             if defined $::RD_TRACE;
4752 21         42 push @item, $_tok;
4753 21         42 $item{__ACTION1__}=$_tok;
4754            
4755              
4756 21 50       56 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         30 $_matched = 1;
4765 21         40 last;
4766             }
4767              
4768             splice
4769 122 100       302 @{$thisparser->{deferred}}, $def_at unless $_matched;
  32         83  
4770            
4771 122   66     307 while (!$_matched && !$commit)
4772             {
4773            
4774 32 50       105 Parse::RecDescent::_trace(q{Trying production: [othertypemessage]},
4775             Parse::RecDescent::_tracefirst($_[1]),
4776             q{part},
4777             $tracelevel)
4778             if defined $::RD_TRACE;
4779 32         75 my $thisprod = $thisrule->{"prods"}[3];
4780 32         59 $text = $_[1];
4781 32         48 my $_savetext;
4782 32         104 @item = (q{part});
4783 32         83 %item = (__RULE__ => q{part});
4784 32         59 my $repcount = 0;
4785              
4786              
4787 32 50       86 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   6 if (1) { no strict qw{refs};
  1         9  
  1         514  
  32         54  
4793 32         103 $expectation->is(q{})->at($text);
4794 32 100   32   376 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::othertypemessage($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  32         68  
4795             {
4796            
4797 20 50       60 Parse::RecDescent::_trace(q{<>},
4798             Parse::RecDescent::_tracefirst($text),
4799             q{part},
4800             $tracelevel)
4801             if defined $::RD_TRACE;
4802 20         74 $expectation->failed();
4803 20         60 last;
4804             }
4805 12 50       69 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         46 $item{q{othertypemessage}} = $_tok;
4813 12         30 push @item, $_tok;
4814            
4815             }
4816              
4817 12 50       37 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       31 $_tok = ($_noactions) ? 0 : do { $return = bless $item{othertypemessage}, $mibs };
  12         50  
4825 12 50       44 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       39 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4832             . $_tok . q{])},
4833             Parse::RecDescent::_tracefirst($text))
4834             if defined $::RD_TRACE;
4835 12         23 push @item, $_tok;
4836 12         23 $item{__ACTION1__}=$_tok;
4837            
4838              
4839 12 50       29 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         18 $_matched = 1;
4848 12         25 last;
4849             }
4850              
4851             splice
4852 122 100       278 @{$thisparser->{deferred}}, $def_at unless $_matched;
  20         48  
4853            
4854 122 100 66     358 unless ( $_matched || defined($score) )
4855             {
4856 20         28 splice @{$thisparser->{deferred}}, $def_at;
  20         38  
4857            
4858              
4859 20         35 $_[1] = $text; # NOT SURE THIS IS NEEDED
4860 20 50       51 Parse::RecDescent::_trace(q{<>},
4861             Parse::RecDescent::_tracefirst($_[1]),
4862             q{part},
4863             $tracelevel)
4864             if defined $::RD_TRACE;
4865 20         100 return undef;
4866             }
4867 102 50 33     322 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         155 splice @{$thisparser->{errors}}, $err_at;
  102         217  
4876 102 50       278 $return = $item[$#item] unless defined $return;
4877 102 50       211 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         260 $_[1] = $text;
4890 102         863 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   196 my $thisparser = $_[0];
4897 1     1   6 use vars q{$tracelevel};
  1         2  
  1         737  
4898 92   50     258 local $tracelevel = ($tracelevel||0)+1;
4899 92         140 $ERRORS = 0;
4900 92         234 my $thisrule = $thisparser->{"rules"}{"TEXT"};
4901              
4902 92 50       227 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         160 my $def_at = @{$thisparser->{deferred}};
  92         229  
4909 92         136 my $err_at = @{$thisparser->{errors}};
  92         189  
4910              
4911 92         277 my $score;
4912             my $score_return;
4913 92         0 my $_tok;
4914 92         159 my $return = undef;
4915 92         120 my $_matched=0;
4916 92         161 my $commit=0;
4917 92         190 my @item = ();
4918 92         176 my %item = ();
4919 92         173 my $repeating = $_[2];
4920 92         132 my $_noactions = $_[3];
4921 92 50       209 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  92         150  
  92         160  
4922 92         136 my $_itempos = $_[5];
4923 92 50       255 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4924 92         256 my $text;
4925             my $lastsep;
4926 92         0 my $current_match;
4927 92         223 my $expectation = new Parse::RecDescent::Expectation(q{/^"TEXT"|^TEXT/i});
4928 92         567 $expectation->at($_[1]);
4929            
4930 92         314 my $thisline;
4931 92         265 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4932              
4933            
4934              
4935 92   33     696 while (!$_matched && !$commit)
4936             {
4937            
4938 92 50       247 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         299 my $thisprod = $thisrule->{"prods"}[0];
4944 92         158 $text = $_[1];
4945 92         135 my $_savetext;
4946 92         181 @item = (q{TEXT});
4947 92         230 %item = (__RULE__ => q{TEXT});
4948 92         123 my $repcount = 0;
4949              
4950              
4951 92 50       217 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         219 undef $lastsep;
4956 92         268 $expectation->is(q{})->at($text);
4957            
4958              
4959 92 50 66     1081 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"TEXT"|^TEXT)/i)
  92 100       953  
4960             {
4961 53 50       282 $text = $lastsep . $text if defined $lastsep;
4962 53         178 $expectation->failed();
4963 53 50       208 Parse::RecDescent::_trace(q{<>},
4964             Parse::RecDescent::_tracefirst($text))
4965             if defined $::RD_TRACE;
4966              
4967 53         139 last;
4968             }
4969 39         233 $current_match = substr($text, $-[0], $+[0] - $-[0]);
4970 39         176 substr($text,0,length($current_match),q{});
4971 39 50       117 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4972             . $current_match . q{])},
4973             Parse::RecDescent::_tracefirst($text))
4974             if defined $::RD_TRACE;
4975 39         153 push @item, $item{__PATTERN1__}=$current_match;
4976            
4977              
4978 39 50       109 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       107 $_tok = ($_noactions) ? 0 : do { $return = "TEXT" };
  39         89  
4986 39 50       105 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       110 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4993             . $_tok . q{])},
4994             Parse::RecDescent::_tracefirst($text))
4995             if defined $::RD_TRACE;
4996 39         82 push @item, $_tok;
4997 39         100 $item{__ACTION1__}=$_tok;
4998            
4999              
5000 39 50       90 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         55 $_matched = 1;
5009 39         71 last;
5010             }
5011              
5012             splice
5013 92 100       296 @{$thisparser->{deferred}}, $def_at unless $_matched;
  53         156  
5014            
5015 92 100 66     371 unless ( $_matched || defined($score) )
5016             {
5017 53         90 splice @{$thisparser->{deferred}}, $def_at;
  53         109  
5018            
5019              
5020 53         100 $_[1] = $text; # NOT SURE THIS IS NEEDED
5021 53 50       125 Parse::RecDescent::_trace(q{<>},
5022             Parse::RecDescent::_tracefirst($_[1]),
5023             q{TEXT},
5024             $tracelevel)
5025             if defined $::RD_TRACE;
5026 53         271 return undef;
5027             }
5028 39 50 33     163 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         59 splice @{$thisparser->{errors}}, $err_at;
  39         101  
5037 39 50       96 $return = $item[$#item] unless defined $return;
5038 39 50       132 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         116 $_[1] = $text;
5051 39         271 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   126 my $thisparser = $_[0];
5058 1     1   8 use vars q{$tracelevel};
  1         2  
  1         757  
5059 53   50     174 local $tracelevel = ($tracelevel||0)+1;
5060 53         97 $ERRORS = 0;
5061 53         169 my $thisrule = $thisparser->{"rules"}{"MESSAGE"};
5062              
5063 53 50       146 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         92 my $def_at = @{$thisparser->{deferred}};
  53         127  
5070 53         88 my $err_at = @{$thisparser->{errors}};
  53         135  
5071              
5072 53         156 my $score;
5073             my $score_return;
5074 53         0 my $_tok;
5075 53         78 my $return = undef;
5076 53         84 my $_matched=0;
5077 53         68 my $commit=0;
5078 53         136 my @item = ();
5079 53         89 my %item = ();
5080 53         73 my $repeating = $_[2];
5081 53         86 my $_noactions = $_[3];
5082 53 50       124 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  53         62  
  53         85  
5083 53         91 my $_itempos = $_[5];
5084 53 50       155 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5085 53         133 my $text;
5086             my $lastsep;
5087 53         0 my $current_match;
5088 53         163 my $expectation = new Parse::RecDescent::Expectation(q{/^"MESSAGE"|^MESSAGE/i});
5089 53         376 $expectation->at($_[1]);
5090            
5091 53         174 my $thisline;
5092 53         179 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5093              
5094            
5095              
5096 53   33     452 while (!$_matched && !$commit)
5097             {
5098            
5099 53 50       154 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         165 my $thisprod = $thisrule->{"prods"}[0];
5105 53         97 $text = $_[1];
5106 53         65 my $_savetext;
5107 53         117 @item = (q{MESSAGE});
5108 53         140 %item = (__RULE__ => q{MESSAGE});
5109 53         88 my $repcount = 0;
5110              
5111              
5112 53 50       128 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         110 undef $lastsep;
5117 53         131 $expectation->is(q{})->at($text);
5118            
5119              
5120 53 50 66     584 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"MESSAGE"|^MESSAGE)/i)
  53 100       548  
5121             {
5122 31 50       145 $text = $lastsep . $text if defined $lastsep;
5123 31         119 $expectation->failed();
5124 31 50       131 Parse::RecDescent::_trace(q{<>},
5125             Parse::RecDescent::_tracefirst($text))
5126             if defined $::RD_TRACE;
5127              
5128 31         77 last;
5129             }
5130 22         131 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5131 22         119 substr($text,0,length($current_match),q{});
5132 22 50       84 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5133             . $current_match . q{])},
5134             Parse::RecDescent::_tracefirst($text))
5135             if defined $::RD_TRACE;
5136 22         65 push @item, $item{__PATTERN1__}=$current_match;
5137            
5138              
5139 22 50       61 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       58 $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE"};
  22         50  
5147 22 50       66 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       60 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5154             . $_tok . q{])},
5155             Parse::RecDescent::_tracefirst($text))
5156             if defined $::RD_TRACE;
5157 22         37 push @item, $_tok;
5158 22         44 $item{__ACTION1__}=$_tok;
5159            
5160              
5161 22 50       56 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         32 $_matched = 1;
5170 22         41 last;
5171             }
5172              
5173             splice
5174 53 100       138 @{$thisparser->{deferred}}, $def_at unless $_matched;
  31         89  
5175            
5176 53 100 66     225 unless ( $_matched || defined($score) )
5177             {
5178 31         47 splice @{$thisparser->{deferred}}, $def_at;
  31         54  
5179            
5180              
5181 31         89 $_[1] = $text; # NOT SURE THIS IS NEEDED
5182 31 50       78 Parse::RecDescent::_trace(q{<>},
5183             Parse::RecDescent::_tracefirst($_[1]),
5184             q{MESSAGE},
5185             $tracelevel)
5186             if defined $::RD_TRACE;
5187 31         160 return undef;
5188             }
5189 22 50 33     75 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         29 splice @{$thisparser->{errors}}, $err_at;
  22         54  
5198 22 50       65 $return = $item[$#item] unless defined $return;
5199 22 50       66 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         87 $_[1] = $text;
5212 22         147 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   768 my $thisparser = $_[0];
5219 1     1   7 use vars q{$tracelevel};
  1         2  
  1         955  
5220 9   50     47 local $tracelevel = ($tracelevel||0)+1;
5221 9         19 $ERRORS = 0;
5222 9         27 my $thisrule = $thisparser->{"rules"}{"start"};
5223              
5224 9 50       34 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         14 my $def_at = @{$thisparser->{deferred}};
  9         25  
5231 9         17 my $err_at = @{$thisparser->{errors}};
  9         24  
5232              
5233 9         34 my $score;
5234             my $score_return;
5235 9         0 my $_tok;
5236 9         31 my $return = undef;
5237 9         14 my $_matched=0;
5238 9         16 my $commit=0;
5239 9         47 my @item = ();
5240 9         20 my %item = ();
5241 9         19 my $repeating = $_[2];
5242 9         13 my $_noactions = $_[3];
5243 9 50       28 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  9         19  
  9         23  
5244 9         41 my $_itempos = $_[5];
5245 9 50       34 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5246 9         21 my $text;
5247             my $lastsep;
5248 9         0 my $current_match;
5249 9         33 my $expectation = new Parse::RecDescent::Expectation(q{/.*?\\(.*?BODYSTRUCTURE \\(/i});
5250 9         73 $expectation->at($_[1]);
5251            
5252 9         41 my $thisline;
5253 9         37 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5254              
5255            
5256              
5257 9   33     97 while (!$_matched && !$commit)
5258             {
5259            
5260 9 50       32 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         32 my $thisprod = $thisrule->{"prods"}[0];
5266 9         18 $text = $_[1];
5267 9         19 my $_savetext;
5268 9         20 @item = (q{start});
5269 9         31 %item = (__RULE__ => q{start});
5270 9         18 my $repcount = 0;
5271              
5272              
5273 9 50       24 Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?BODYSTRUCTURE \\(/i]}, Parse::RecDescent::_tracefirst($text),
5274             q{start},
5275             $tracelevel)
5276             if defined $::RD_TRACE;
5277 9         17 undef $lastsep;
5278 9         31 $expectation->is(q{})->at($text);
5279            
5280              
5281 9 50 33     116 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*?\(.*?BODYSTRUCTURE \()/i)
  9 50       151  
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         83 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5292 9         56 substr($text,0,length($current_match),q{});
5293 9 50       31 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5294             . $current_match . q{])},
5295             Parse::RecDescent::_tracefirst($text))
5296             if defined $::RD_TRACE;
5297 9         31 push @item, $item{__PATTERN1__}=$current_match;
5298            
5299              
5300 9 50       26 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         33 $expectation->is(q{part})->at($text);
5306            
5307 9 50   9   117 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 1, $_noactions,$expectation,sub { \@arg },undef)))
  9         20  
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       184 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         27 $item{q{part(1)}} = $_tok;
5324 9         25 push @item, $_tok;
5325            
5326              
5327              
5328 9 50       21 Parse::RecDescent::_trace(q{Trying terminal: [/\\).*\\)\\r?\\n?/]}, Parse::RecDescent::_tracefirst($text),
5329             q{start},
5330             $tracelevel)
5331             if defined $::RD_TRACE;
5332 9         18 undef $lastsep;
5333 9         25 $expectation->is(q{/\\).*\\)\\r?\\n?/})->at($text);
5334            
5335              
5336 9 50 33     114 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\).*\)\r?\n?)/)
  9 50       116  
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         52 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5347 9         36 substr($text,0,length($current_match),q{});
5348 9 50       25 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5349             . $current_match . q{])},
5350             Parse::RecDescent::_tracefirst($text))
5351             if defined $::RD_TRACE;
5352 9         30 push @item, $item{__PATTERN2__}=$current_match;
5353            
5354              
5355 9 50       25 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       23 $_tok = ($_noactions) ? 0 : do { $return = $item{'part(1)'}[0] };
  9         23  
5363 9 50       24 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       27 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5370             . $_tok . q{])},
5371             Parse::RecDescent::_tracefirst($text))
5372             if defined $::RD_TRACE;
5373 9         16 push @item, $_tok;
5374 9         23 $item{__ACTION1__}=$_tok;
5375            
5376              
5377 9 50       21 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         10 $_matched = 1;
5386 9         25 last;
5387             }
5388              
5389             splice
5390 9 50       26 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
5391            
5392 9 50 33     29 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     34 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         13 splice @{$thisparser->{errors}}, $err_at;
  9         27  
5414 9 50       21 $return = $item[$#item] unless defined $return;
5415 9 50       39 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         30 $_[1] = $text;
5428 9         85 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   2774 my $thisparser = $_[0];
5435 1     1   8 use vars q{$tracelevel};
  1         1  
  1         421  
5436 188   50     424 local $tracelevel = ($tracelevel||0)+1;
5437 188         253 $ERRORS = 0;
5438 188         310 my $thisrule = $thisparser->{"rules"}{"addressstruct"};
5439              
5440 188 50       299 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         216 my $def_at = @{$thisparser->{deferred}};
  188         311  
5447 188         241 my $err_at = @{$thisparser->{errors}};
  188         267  
5448              
5449 188         368 my $score;
5450             my $score_return;
5451 188         0 my $_tok;
5452 188         231 my $return = undef;
5453 188         285 my $_matched=0;
5454 188         235 my $commit=0;
5455 188         260 my @item = ();
5456 188         257 my %item = ();
5457 188         226 my $repeating = $_[2];
5458 188         231 my $_noactions = $_[3];
5459 188 50       321 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  188         216  
  188         298  
5460 188         238 my $_itempos = $_[5];
5461 188 50       399 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5462 188         362 my $text;
5463             my $lastsep;
5464 188         0 my $current_match;
5465 188         390 my $expectation = new Parse::RecDescent::Expectation(q{'('});
5466 188         1091 $expectation->at($_[1]);
5467            
5468 188         647 my $thisline;
5469 188         544 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5470              
5471            
5472              
5473 188   33     1228 while (!$_matched && !$commit)
5474             {
5475            
5476 188 50       376 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         301 my $thisprod = $thisrule->{"prods"}[0];
5482 188         296 $text = $_[1];
5483 188         254 my $_savetext;
5484 188         289 @item = (q{addressstruct});
5485 188         337 %item = (__RULE__ => q{addressstruct});
5486 188         246 my $repcount = 0;
5487              
5488              
5489 188 50       342 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
5490             Parse::RecDescent::_tracefirst($text),
5491             q{addressstruct},
5492             $tracelevel)
5493             if defined $::RD_TRACE;
5494 188         291 undef $lastsep;
5495 188         378 $expectation->is(q{})->at($text);
5496            
5497              
5498 188 50 33     1636 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  188 100 66     953  
  188   66     312  
  188         750  
5499             substr($text,0,length($_tok)) eq $_tok and
5500 94         179 do { substr($text,0,length($_tok)) = ""; 1; }
  94         214  
5501             )
5502             {
5503 94 50       324 $text = $lastsep . $text if defined $lastsep;
5504            
5505 94         257 $expectation->failed();
5506 94 50       342 Parse::RecDescent::_trace(q{<>},
5507             Parse::RecDescent::_tracefirst($text))
5508             if defined $::RD_TRACE;
5509 94         160 last;
5510             }
5511 94 50       225 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5512             . $_tok . q{])},
5513             Parse::RecDescent::_tracefirst($text))
5514             if defined $::RD_TRACE;
5515 94         212 push @item, $item{__STRING1__}=$_tok;
5516            
5517              
5518 94 50       191 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   6 if (1) { no strict qw{refs};
  1         2  
  1         151  
  94         126  
5524 94         216 $expectation->is(q{personalname})->at($text);
5525 94 50   94   892 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::personalname($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         147  
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       255 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         189 $item{q{personalname}} = $_tok;
5544 94         159 push @item, $_tok;
5545            
5546             }
5547              
5548 94 50       170 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   6 if (1) { no strict qw{refs};
  1         2  
  1         148  
  94         156  
5554 94         266 $expectation->is(q{sourceroute})->at($text);
5555 94 50   94   1129 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sourceroute($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         158  
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       251 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         200 $item{q{sourceroute}} = $_tok;
5574 94         186 push @item, $_tok;
5575            
5576             }
5577              
5578 94 50       164 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   6 if (1) { no strict qw{refs};
  1         2  
  1         136  
  94         124  
5584 94         264 $expectation->is(q{mailboxname})->at($text);
5585 94 50   94   850 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::mailboxname($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         158  
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       260 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         187 $item{q{mailboxname}} = $_tok;
5604 94         143 push @item, $_tok;
5605            
5606             }
5607              
5608 94 50       160 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   6 if (1) { no strict qw{refs};
  1         2  
  1         591  
  94         134  
5614 94         252 $expectation->is(q{hostname})->at($text);
5615 94 50   94   912 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::hostname($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         175  
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       253 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         181 $item{q{hostname}} = $_tok;
5634 94         154 push @item, $_tok;
5635            
5636             }
5637              
5638 94 50       164 Parse::RecDescent::_trace(q{Trying terminal: [')']},
5639             Parse::RecDescent::_tracefirst($text),
5640             q{addressstruct},
5641             $tracelevel)
5642             if defined $::RD_TRACE;
5643 94         165 undef $lastsep;
5644 94         264 $expectation->is(q{')'})->at($text);
5645            
5646              
5647 94 50 33     913 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  94 50 33     547  
  94   33     475  
  94         445  
5648             substr($text,0,length($_tok)) eq $_tok and
5649 94         195 do { substr($text,0,length($_tok)) = ""; 1; }
  94         230  
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       208 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5661             . $_tok . q{])},
5662             Parse::RecDescent::_tracefirst($text))
5663             if defined $::RD_TRACE;
5664 94         205 push @item, $item{__STRING2__}=$_tok;
5665            
5666              
5667 94 50       162 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       165 $_tok = ($_noactions) ? 0 : do { bless { personalname => $item{personalname}
5675             , sourceroute => $item{sourceroute}
5676             , mailboxname => $item{mailboxname}
5677             , hostname => $item{hostname}
5678 94         411 }, 'Mail::IMAPClient::BodyStructure::Address';
5679             };
5680 94 50       240 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       172 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5687             . $_tok . q{])},
5688             Parse::RecDescent::_tracefirst($text))
5689             if defined $::RD_TRACE;
5690 94         142 push @item, $_tok;
5691 94         139 $item{__ACTION1__}=$_tok;
5692            
5693              
5694 94 50       174 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         131 $_matched = 1;
5703 94         172 last;
5704             }
5705              
5706             splice
5707 188 100       333 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         191  
5708            
5709 188 100 66     490 unless ( $_matched || defined($score) )
5710             {
5711 94         135 splice @{$thisparser->{deferred}}, $def_at;
  94         153  
5712            
5713              
5714 94         158 $_[1] = $text; # NOT SURE THIS IS NEEDED
5715 94 50       161 Parse::RecDescent::_trace(q{<>},
5716             Parse::RecDescent::_tracefirst($_[1]),
5717             q{addressstruct},
5718             $tracelevel)
5719             if defined $::RD_TRACE;
5720 94         365 return undef;
5721             }
5722 94 50 33     303 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         118 splice @{$thisparser->{errors}}, $err_at;
  94         164  
5731 94 50       226 $return = $item[$#item] unless defined $return;
5732 94 50       177 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         224 $_[1] = $text;
5745 94         512 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   56 my $thisparser = $_[0];
5752 1     1   7 use vars q{$tracelevel};
  1         4  
  1         283  
5753 24   50     78 local $tracelevel = ($tracelevel||0)+1;
5754 24         56 $ERRORS = 0;
5755 24         81 my $thisrule = $thisparser->{"rules"}{"date"};
5756              
5757 24 50       58 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         44 my $def_at = @{$thisparser->{deferred}};
  24         49  
5764 24         45 my $err_at = @{$thisparser->{errors}};
  24         51  
5765              
5766 24         67 my $score;
5767             my $score_return;
5768 24         0 my $_tok;
5769 24         42 my $return = undef;
5770 24         37 my $_matched=0;
5771 24         33 my $commit=0;
5772 24         50 my @item = ();
5773 24         39 my %item = ();
5774 24         39 my $repeating = $_[2];
5775 24         39 my $_noactions = $_[3];
5776 24 50       58 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         33  
  24         52  
5777 24         47 my $_itempos = $_[5];
5778 24 50       102 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5779 24         79 my $text;
5780             my $lastsep;
5781 24         0 my $current_match;
5782 24         57 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
5783 24         143 $expectation->at($_[1]);
5784            
5785 24         113 my $thisline;
5786 24         87 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5787              
5788            
5789              
5790 24   33     198 while (!$_matched && !$commit)
5791             {
5792            
5793 24 50       67 Parse::RecDescent::_trace(q{Trying production: [NIL]},
5794             Parse::RecDescent::_tracefirst($_[1]),
5795             q{date},
5796             $tracelevel)
5797             if defined $::RD_TRACE;
5798 24         73 my $thisprod = $thisrule->{"prods"}[0];
5799 24         78 $text = $_[1];
5800 24         49 my $_savetext;
5801 24         66 @item = (q{date});
5802 24         65 %item = (__RULE__ => q{date});
5803 24         34 my $repcount = 0;
5804              
5805              
5806 24 50       61 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   6 if (1) { no strict qw{refs};
  1         3  
  1         238  
  24         40  
5812 24         72 $expectation->is(q{})->at($text);
5813 24 50   24   259 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         40  
5814             {
5815            
5816 24 50       61 Parse::RecDescent::_trace(q{<>},
5817             Parse::RecDescent::_tracefirst($text),
5818             q{date},
5819             $tracelevel)
5820             if defined $::RD_TRACE;
5821 24         69 $expectation->failed();
5822 24         79 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       108 @{$thisparser->{deferred}}, $def_at unless $_matched;
  24         83  
5850            
5851 24   33     104 while (!$_matched && !$commit)
5852             {
5853            
5854 24 50       68 Parse::RecDescent::_trace(q{Trying production: [STRING]},
5855             Parse::RecDescent::_tracefirst($_[1]),
5856             q{date},
5857             $tracelevel)
5858             if defined $::RD_TRACE;
5859 24         60 my $thisprod = $thisrule->{"prods"}[1];
5860 24         63 $text = $_[1];
5861 24         45 my $_savetext;
5862 24         63 @item = (q{date});
5863 24         65 %item = (__RULE__ => q{date});
5864 24         37 my $repcount = 0;
5865              
5866              
5867 24 50       59 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   6 if (1) { no strict qw{refs};
  1         6  
  1         411  
  24         49  
5873 24         81 $expectation->is(q{})->at($text);
5874 24 50   24   227 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         38  
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       128 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         71 $item{q{STRING}} = $_tok;
5893 24         56 push @item, $_tok;
5894            
5895             }
5896              
5897 24 50       72 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         67 $_matched = 1;
5906 24         65 last;
5907             }
5908              
5909             splice
5910 24 50       66 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
5911            
5912 24 50 33     81 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     113 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         47 splice @{$thisparser->{errors}}, $err_at;
  24         52  
5934 24 50       72 $return = $item[$#item] unless defined $return;
5935 24 50       54 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         46 $_[1] = $text;
5948 24         124 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   146 my $thisparser = $_[0];
5955 1     1   8 use vars q{$tracelevel};
  1         2  
  1         278  
5956 94   50     228 local $tracelevel = ($tracelevel||0)+1;
5957 94         152 $ERRORS = 0;
5958 94         169 my $thisrule = $thisparser->{"rules"}{"hostname"};
5959              
5960 94 50       178 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         120 my $def_at = @{$thisparser->{deferred}};
  94         163  
5967 94         127 my $err_at = @{$thisparser->{errors}};
  94         142  
5968              
5969 94         205 my $score;
5970             my $score_return;
5971 94         0 my $_tok;
5972 94         113 my $return = undef;
5973 94         140 my $_matched=0;
5974 94         107 my $commit=0;
5975 94         144 my @item = ();
5976 94         163 my %item = ();
5977 94         117 my $repeating = $_[2];
5978 94         152 my $_noactions = $_[3];
5979 94 50       207 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         186  
  94         189  
5980 94         148 my $_itempos = $_[5];
5981 94 50       219 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5982 94         198 my $text;
5983             my $lastsep;
5984 94         0 my $current_match;
5985 94         235 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
5986 94         558 $expectation->at($_[1]);
5987            
5988 94         353 my $thisline;
5989 94         253 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5990              
5991            
5992              
5993 94   33     632 while (!$_matched && !$commit)
5994             {
5995            
5996 94 50       233 Parse::RecDescent::_trace(q{Trying production: [NIL]},
5997             Parse::RecDescent::_tracefirst($_[1]),
5998             q{hostname},
5999             $tracelevel)
6000             if defined $::RD_TRACE;
6001 94         210 my $thisprod = $thisrule->{"prods"}[0];
6002 94         172 $text = $_[1];
6003 94         115 my $_savetext;
6004 94         172 @item = (q{hostname});
6005 94         161 %item = (__RULE__ => q{hostname});
6006 94         113 my $repcount = 0;
6007              
6008              
6009 94 50       173 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         3  
  1         249  
  94         136  
6015 94         197 $expectation->is(q{})->at($text);
6016 94 50   94   743 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         148  
6017             {
6018            
6019 94 50       190 Parse::RecDescent::_trace(q{<>},
6020             Parse::RecDescent::_tracefirst($text),
6021             q{hostname},
6022             $tracelevel)
6023             if defined $::RD_TRACE;
6024 94         238 $expectation->failed();
6025 94         276 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       287 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         186  
6053            
6054 94   33     316 while (!$_matched && !$commit)
6055             {
6056            
6057 94 50       203 Parse::RecDescent::_trace(q{Trying production: [STRING]},
6058             Parse::RecDescent::_tracefirst($_[1]),
6059             q{hostname},
6060             $tracelevel)
6061             if defined $::RD_TRACE;
6062 94         196 my $thisprod = $thisrule->{"prods"}[1];
6063 94         152 $text = $_[1];
6064 94         109 my $_savetext;
6065 94         176 @item = (q{hostname});
6066 94         213 %item = (__RULE__ => q{hostname});
6067 94         139 my $repcount = 0;
6068              
6069              
6070 94 50       176 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   6 if (1) { no strict qw{refs};
  1         3  
  1         371  
  94         115  
6076 94         183 $expectation->is(q{})->at($text);
6077 94 50   94   724 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         178  
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       280 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         167 $item{q{STRING}} = $_tok;
6096 94         150 push @item, $_tok;
6097            
6098             }
6099              
6100 94 50       172 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         122 $_matched = 1;
6109 94         151 last;
6110             }
6111              
6112             splice
6113 94 50       213 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
6114            
6115 94 50 33     207 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     332 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         136 splice @{$thisparser->{errors}}, $err_at;
  94         184  
6137 94 50       210 $return = $item[$#item] unless defined $return;
6138 94 50       161 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         183 $_[1] = $text;
6151 94         407 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   118 my $thisparser = $_[0];
6158 1     1   7 use vars q{$tracelevel};
  1         2  
  1         717  
6159 51   50     132 local $tracelevel = ($tracelevel||0)+1;
6160 51         80 $ERRORS = 0;
6161 51         142 my $thisrule = $thisparser->{"rules"}{"HTML"};
6162              
6163 51 50       118 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         70 my $def_at = @{$thisparser->{deferred}};
  51         108  
6170 51         78 my $err_at = @{$thisparser->{errors}};
  51         95  
6171              
6172 51         146 my $score;
6173             my $score_return;
6174 51         0 my $_tok;
6175 51         96 my $return = undef;
6176 51         76 my $_matched=0;
6177 51         88 my $commit=0;
6178 51         86 my @item = ();
6179 51         93 my %item = ();
6180 51         74 my $repeating = $_[2];
6181 51         73 my $_noactions = $_[3];
6182 51 50       105 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  51         84  
  51         106  
6183 51         79 my $_itempos = $_[5];
6184 51 50       159 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6185 51         119 my $text;
6186             my $lastsep;
6187 51         0 my $current_match;
6188 51         123 my $expectation = new Parse::RecDescent::Expectation(q{/"HTML"|HTML/i});
6189 51         314 $expectation->at($_[1]);
6190            
6191 51         172 my $thisline;
6192 51         138 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6193              
6194            
6195              
6196 51   33     410 while (!$_matched && !$commit)
6197             {
6198            
6199 51 50       98 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         135 my $thisprod = $thisrule->{"prods"}[0];
6205 51         93 $text = $_[1];
6206 51         75 my $_savetext;
6207 51         101 @item = (q{HTML});
6208 51         106 %item = (__RULE__ => q{HTML});
6209 51         64 my $repcount = 0;
6210              
6211              
6212 51 50       104 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         126 undef $lastsep;
6217 51         115 $expectation->is(q{})->at($text);
6218            
6219              
6220 51 50 66     534 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:"HTML"|HTML)/i)
  51 100       565  
6221             {
6222 43 50       164 $text = $lastsep . $text if defined $lastsep;
6223 43         142 $expectation->failed();
6224 43 50       181 Parse::RecDescent::_trace(q{<>},
6225             Parse::RecDescent::_tracefirst($text))
6226             if defined $::RD_TRACE;
6227              
6228 43         91 last;
6229             }
6230 8         45 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6231 8         29 substr($text,0,length($current_match),q{});
6232 8 50       22 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6233             . $current_match . q{])},
6234             Parse::RecDescent::_tracefirst($text))
6235             if defined $::RD_TRACE;
6236 8         26 push @item, $item{__PATTERN1__}=$current_match;
6237            
6238              
6239 8 50       24 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       19 $_tok = ($_noactions) ? 0 : do { $return = "HTML" };
  8         19  
6247 8 50       22 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       20 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6254             . $_tok . q{])},
6255             Parse::RecDescent::_tracefirst($text))
6256             if defined $::RD_TRACE;
6257 8         21 push @item, $_tok;
6258 8         18 $item{__ACTION1__}=$_tok;
6259            
6260              
6261 8 50       18 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         16 $_matched = 1;
6270 8         16 last;
6271             }
6272              
6273             splice
6274 51 100       118 @{$thisparser->{deferred}}, $def_at unless $_matched;
  43         107  
6275            
6276 51 100 66     216 unless ( $_matched || defined($score) )
6277             {
6278 43         79 splice @{$thisparser->{deferred}}, $def_at;
  43         87  
6279            
6280              
6281 43         78 $_[1] = $text; # NOT SURE THIS IS NEEDED
6282 43 50       94 Parse::RecDescent::_trace(q{<>},
6283             Parse::RecDescent::_tracefirst($_[1]),
6284             q{HTML},
6285             $tracelevel)
6286             if defined $::RD_TRACE;
6287 43         206 return undef;
6288             }
6289 8 50 33     27 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         13 splice @{$thisparser->{errors}}, $err_at;
  8         17  
6298 8 50       26 $return = $item[$#item] unless defined $return;
6299 8 50       25 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         20 $_[1] = $text;
6312 8         46 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   3603 my $thisparser = $_[0];
6319 1     1   7 use vars q{$tracelevel};
  1         2  
  1         416  
6320 249   50     598 local $tracelevel = ($tracelevel||0)+1;
6321 249         337 $ERRORS = 0;
6322 249         452 my $thisrule = $thisparser->{"rules"}{"kvpair"};
6323              
6324 249 50       505 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         298 my $def_at = @{$thisparser->{deferred}};
  249         437  
6331 249         360 my $err_at = @{$thisparser->{errors}};
  249         481  
6332              
6333 249         543 my $score;
6334             my $score_return;
6335 249         0 my $_tok;
6336 249         328 my $return = undef;
6337 249         367 my $_matched=0;
6338 249         303 my $commit=0;
6339 249         354 my @item = ();
6340 249         335 my %item = ();
6341 249         330 my $repeating = $_[2];
6342 249         335 my $_noactions = $_[3];
6343 249 50       456 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  249         341  
  249         365  
6344 249         360 my $_itempos = $_[5];
6345 249 50       487 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6346 249         523 my $text;
6347             my $lastsep;
6348 249         0 my $current_match;
6349 249         574 my $expectation = new Parse::RecDescent::Expectation(q{')'});
6350 249         1456 $expectation->at($_[1]);
6351            
6352 249         834 my $thisline;
6353 249         730 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6354              
6355            
6356              
6357 249   33     1669 while (!$_matched && !$commit)
6358             {
6359            
6360 249 50       494 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         511 my $thisprod = $thisrule->{"prods"}[0];
6366 249         329 $text = $_[1];
6367 249         293 my $_savetext;
6368 249         442 @item = (q{kvpair});
6369 249         444 %item = (__RULE__ => q{kvpair});
6370 249         356 my $repcount = 0;
6371              
6372              
6373 249 50       444 Parse::RecDescent::_trace(q{Trying terminal: [')']},
6374             Parse::RecDescent::_tracefirst($text),
6375             q{kvpair},
6376             $tracelevel)
6377             if defined $::RD_TRACE;
6378 249         410 undef $lastsep;
6379 249         540 $expectation->is(q{})->at($text);
6380 249         1458 $_savetext = $text;
6381              
6382 249 100 33     1374 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  249 50 66     1407  
  249   66     378  
  249         1203  
6383             substr($text,0,length($_tok)) eq $_tok and
6384 120         269 do { substr($text,0,length($_tok)) = ""; 1; }
  120         286  
6385             )
6386             {
6387 120         255 $text = $_savetext;
6388            
6389 120         327 $expectation->failed();
6390 120 50       438 Parse::RecDescent::_trace(q{<>},
6391             Parse::RecDescent::_tracefirst($text))
6392             if defined $::RD_TRACE;
6393 120         221 last;
6394             }
6395 129 50       329 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6396             . $_tok . q{])},
6397             Parse::RecDescent::_tracefirst($text))
6398             if defined $::RD_TRACE;
6399 129         298 push @item, $item{__STRING1__}=$_tok;
6400 129         242 $text = $_savetext;
6401              
6402 129 50       280 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   7 if (1) { no strict qw{refs};
  1         1  
  1         129  
  129         172  
6408 129         296 $expectation->is(q{key})->at($text);
6409 129 50   129   1265 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::key($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         256  
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       430 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         277 $item{q{key}} = $_tok;
6428 129         224 push @item, $_tok;
6429            
6430             }
6431              
6432 129 50       272 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   7 if (1) { no strict qw{refs};
  1         2  
  1         456  
  129         167  
6438 129         402 $expectation->is(q{value})->at($text);
6439 129 50   129   1314 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::value($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         231  
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       405 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         308 $item{q{value}} = $_tok;
6458 129         228 push @item, $_tok;
6459            
6460             }
6461              
6462 129 50       261 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       248 $_tok = ($_noactions) ? 0 : do { $return = { $item{key} => $item{value} } };
  129         409  
6470 129 50       298 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       330 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6477             . $_tok . q{])},
6478             Parse::RecDescent::_tracefirst($text))
6479             if defined $::RD_TRACE;
6480 129         212 push @item, $_tok;
6481 129         216 $item{__ACTION1__}=$_tok;
6482            
6483              
6484 129 50       267 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         166 $_matched = 1;
6493 129         217 last;
6494             }
6495              
6496             splice
6497 249 100       490 @{$thisparser->{deferred}}, $def_at unless $_matched;
  120         243  
6498            
6499 249 100 66     736 unless ( $_matched || defined($score) )
6500             {
6501 120         166 splice @{$thisparser->{deferred}}, $def_at;
  120         215  
6502            
6503              
6504 120         193 $_[1] = $text; # NOT SURE THIS IS NEEDED
6505 120 50       281 Parse::RecDescent::_trace(q{<>},
6506             Parse::RecDescent::_tracefirst($_[1]),
6507             q{kvpair},
6508             $tracelevel)
6509             if defined $::RD_TRACE;
6510 120         529 return undef;
6511             }
6512 129 50 33     380 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         187 splice @{$thisparser->{errors}}, $err_at;
  129         259  
6521 129 50       293 $return = $item[$#item] unless defined $return;
6522 129 50       258 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         236 $_[1] = $text;
6535 129         623 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   54 my $thisparser = $_[0];
6542 1     1   6 use vars q{$tracelevel};
  1         2  
  1         282  
6543 24   50     78 local $tracelevel = ($tracelevel||0)+1;
6544 24         39 $ERRORS = 0;
6545 24         67 my $thisrule = $thisparser->{"rules"}{"replyto"};
6546              
6547 24 50       71 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         55 my $def_at = @{$thisparser->{deferred}};
  24         52  
6554 24         34 my $err_at = @{$thisparser->{errors}};
  24         66  
6555              
6556 24         69 my $score;
6557             my $score_return;
6558 24         0 my $_tok;
6559 24         33 my $return = undef;
6560 24         35 my $_matched=0;
6561 24         36 my $commit=0;
6562 24         46 my @item = ();
6563 24         43 my %item = ();
6564 24         42 my $repeating = $_[2];
6565 24         45 my $_noactions = $_[3];
6566 24 50       61 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         29  
  24         42  
6567 24         40 my $_itempos = $_[5];
6568 24 50       86 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6569 24         60 my $text;
6570             my $lastsep;
6571 24         0 my $current_match;
6572 24         65 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
6573 24         156 $expectation->at($_[1]);
6574            
6575 24         86 my $thisline;
6576 24         77 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6577              
6578            
6579              
6580 24   33     212 while (!$_matched && !$commit)
6581             {
6582            
6583 24 50       65 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
6584             Parse::RecDescent::_tracefirst($_[1]),
6585             q{replyto},
6586             $tracelevel)
6587             if defined $::RD_TRACE;
6588 24         71 my $thisprod = $thisrule->{"prods"}[0];
6589 24         45 $text = $_[1];
6590 24         42 my $_savetext;
6591 24         47 @item = (q{replyto});
6592 24         62 %item = (__RULE__ => q{replyto});
6593 24         41 my $repcount = 0;
6594              
6595              
6596 24 50       71 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   7 if (1) { no strict qw{refs};
  1         2  
  1         366  
  24         49  
6602 24         88 $expectation->is(q{})->at($text);
6603 24 50   24   247 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         49  
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       114 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         62 $item{q{ADDRESSES}} = $_tok;
6622 24         57 push @item, $_tok;
6623            
6624             }
6625              
6626 24 50       63 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         42 $_matched = 1;
6635 24         51 last;
6636             }
6637              
6638             splice
6639 24 50       68 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
6640            
6641 24 50 33     79 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     103 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         39 splice @{$thisparser->{errors}}, $err_at;
  24         56  
6663 24 50       80 $return = $item[$#item] unless defined $return;
6664 24 50       78 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         55 $_[1] = $text;
6677 24         122 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   148 my $thisparser = $_[0];
6684 1     1   7 use vars q{$tracelevel};
  1         1  
  1         261  
6685 94   50     220 local $tracelevel = ($tracelevel||0)+1;
6686 94         127 $ERRORS = 0;
6687 94         192 my $thisrule = $thisparser->{"rules"}{"mailboxname"};
6688              
6689 94 50       201 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         115 my $def_at = @{$thisparser->{deferred}};
  94         163  
6696 94         150 my $err_at = @{$thisparser->{errors}};
  94         146  
6697              
6698 94         220 my $score;
6699             my $score_return;
6700 94         0 my $_tok;
6701 94         125 my $return = undef;
6702 94         126 my $_matched=0;
6703 94         123 my $commit=0;
6704 94         153 my @item = ();
6705 94         136 my %item = ();
6706 94         115 my $repeating = $_[2];
6707 94         112 my $_noactions = $_[3];
6708 94 50       165 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         117  
  94         129  
6709 94         136 my $_itempos = $_[5];
6710 94 50       196 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6711 94         203 my $text;
6712             my $lastsep;
6713 94         0 my $current_match;
6714 94         227 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
6715 94         527 $expectation->at($_[1]);
6716            
6717 94         339 my $thisline;
6718 94         263 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6719              
6720            
6721              
6722 94   33     626 while (!$_matched && !$commit)
6723             {
6724            
6725 94 50       187 Parse::RecDescent::_trace(q{Trying production: [NIL]},
6726             Parse::RecDescent::_tracefirst($_[1]),
6727             q{mailboxname},
6728             $tracelevel)
6729             if defined $::RD_TRACE;
6730 94         181 my $thisprod = $thisrule->{"prods"}[0];
6731 94         138 $text = $_[1];
6732 94         106 my $_savetext;
6733 94         155 @item = (q{mailboxname});
6734 94         191 %item = (__RULE__ => q{mailboxname});
6735 94         122 my $repcount = 0;
6736              
6737              
6738 94 50       168 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   6 if (1) { no strict qw{refs};
  1         2  
  1         224  
  94         119  
6744 94         207 $expectation->is(q{})->at($text);
6745 94 50   94   711 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         154  
6746             {
6747            
6748 94 50       195 Parse::RecDescent::_trace(q{<>},
6749             Parse::RecDescent::_tracefirst($text),
6750             q{mailboxname},
6751             $tracelevel)
6752             if defined $::RD_TRACE;
6753 94         227 $expectation->failed();
6754 94         287 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       285 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         187  
6782            
6783 94   33     326 while (!$_matched && !$commit)
6784             {
6785            
6786 94 50       207 Parse::RecDescent::_trace(q{Trying production: [STRING]},
6787             Parse::RecDescent::_tracefirst($_[1]),
6788             q{mailboxname},
6789             $tracelevel)
6790             if defined $::RD_TRACE;
6791 94         166 my $thisprod = $thisrule->{"prods"}[1];
6792 94         167 $text = $_[1];
6793 94         136 my $_savetext;
6794 94         180 @item = (q{mailboxname});
6795 94         173 %item = (__RULE__ => q{mailboxname});
6796 94         124 my $repcount = 0;
6797              
6798              
6799 94 50       161 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   6 if (1) { no strict qw{refs};
  1         6  
  1         406  
  94         114  
6805 94         187 $expectation->is(q{})->at($text);
6806 94 50   94   768 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         154  
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       298 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         180 $item{q{STRING}} = $_tok;
6825 94         143 push @item, $_tok;
6826            
6827             }
6828              
6829 94 50       186 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         116 $_matched = 1;
6838 94         133 last;
6839             }
6840              
6841             splice
6842 94 50       200 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
6843            
6844 94 50 33     196 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     315 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         125 splice @{$thisparser->{errors}}, $err_at;
  94         151  
6866 94 50       202 $return = $item[$#item] unless defined $return;
6867 94 50       210 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         157 $_[1] = $text;
6880 94         403 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   113 my $thisparser = $_[0];
6887 1     1   7 use vars q{$tracelevel};
  1         3  
  1         297  
6888 51   50     172 local $tracelevel = ($tracelevel||0)+1;
6889 51         102 $ERRORS = 0;
6890 51         155 my $thisrule = $thisparser->{"rules"}{"basicfields"};
6891              
6892 51 50       124 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         76 my $def_at = @{$thisparser->{deferred}};
  51         114  
6899 51         90 my $err_at = @{$thisparser->{errors}};
  51         117  
6900              
6901 51         159 my $score;
6902             my $score_return;
6903 51         0 my $_tok;
6904 51         79 my $return = undef;
6905 51         73 my $_matched=0;
6906 51         95 my $commit=0;
6907 51         102 my @item = ();
6908 51         109 my %item = ();
6909 51         68 my $repeating = $_[2];
6910 51         88 my $_noactions = $_[3];
6911 51 50       167 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  51         66  
  51         88  
6912 51         104 my $_itempos = $_[5];
6913 51 50       166 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6914 51         161 my $text;
6915             my $lastsep;
6916 51         0 my $current_match;
6917 51         124 my $expectation = new Parse::RecDescent::Expectation(q{bodysubtype});
6918 51         360 $expectation->at($_[1]);
6919            
6920 51         182 my $thisline;
6921 51         184 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6922              
6923            
6924              
6925 51   33     483 while (!$_matched && !$commit)
6926             {
6927            
6928 51 50       132 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         144 my $thisprod = $thisrule->{"prods"}[0];
6934 51         78 $text = $_[1];
6935 51         74 my $_savetext;
6936 51         129 @item = (q{basicfields});
6937 51         137 %item = (__RULE__ => q{basicfields});
6938 51         133 my $repcount = 0;
6939              
6940              
6941 51 50       133 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   7 if (1) { no strict qw{refs};
  1         2  
  1         952  
  51         72  
6947 51         139 $expectation->is(q{})->at($text);
6948 51 50   51   488 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  51         82  
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       210 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         113 $item{q{bodysubtype}} = $_tok;
6967 51         111 push @item, $_tok;
6968            
6969             }
6970              
6971 51 50       171 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         177 $expectation->is(q{bodyparms})->at($text);
6977            
6978 51 50   51   629 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         120  
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       792 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         160 $item{q{bodyparms(?)}} = $_tok;
6995 51         100 push @item, $_tok;
6996            
6997              
6998              
6999 51 50       112 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         150 $expectation->is(q{bodyid})->at($text);
7005            
7006 51 50   51   532 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         105  
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       759 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         120 $item{q{bodyid(?)}} = $_tok;
7023 51         100 push @item, $_tok;
7024            
7025              
7026              
7027 51 50       120 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         133 $expectation->is(q{bodydesc})->at($text);
7033            
7034 51 50   51   510 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         124  
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       772 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         111 $item{q{bodydesc(?)}} = $_tok;
7051 51         102 push @item, $_tok;
7052            
7053              
7054              
7055 51 50       120 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         151 $expectation->is(q{bodyenc})->at($text);
7061            
7062 51 50   51   534 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         103  
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       767 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         124 $item{q{bodyenc(?)}} = $_tok;
7079 51         93 push @item, $_tok;
7080            
7081              
7082              
7083 51 50       134 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         470 $expectation->is(q{bodysize})->at($text);
7089            
7090 51 50   51   542 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  51         96  
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       795 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         133 $item{q{bodysize(?)}} = $_tok;
7107 51         101 push @item, $_tok;
7108            
7109              
7110              
7111 51 50       143 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       107 $_tok = ($_noactions) ? 0 : do { $return = { bodysubtype => $item{bodysubtype} };
  51         149  
7119 51         245 take_optional_items($return, \%item,
7120             qw/bodyparms bodyid bodydesc bodyenc bodysize/);
7121 51         104 1;
7122             };
7123 51 50       152 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       129 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
7130             . $_tok . q{])},
7131             Parse::RecDescent::_tracefirst($text))
7132             if defined $::RD_TRACE;
7133 51         110 push @item, $_tok;
7134 51         109 $item{__ACTION1__}=$_tok;
7135            
7136              
7137 51 50       117 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         72 $_matched = 1;
7146 51         85 last;
7147             }
7148              
7149             splice
7150 51 50       115 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
7151            
7152 51 50 33     156 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     158 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         98 splice @{$thisparser->{errors}}, $err_at;
  51         115  
7174 51 50       126 $return = $item[$#item] unless defined $return;
7175 51 50       114 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         111 $_[1] = $text;
7188 51         372 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   752 my $thisparser = $_[0];
7195 1     1   7 use vars q{$tracelevel};
  1         2  
  1         418  
7196 72   50     211 local $tracelevel = ($tracelevel||0)+1;
7197 72         131 $ERRORS = 0;
7198 72         209 my $thisrule = $thisparser->{"rules"}{"bodysize"};
7199              
7200 72 50       160 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         103 my $def_at = @{$thisparser->{deferred}};
  72         178  
7207 72         114 my $err_at = @{$thisparser->{errors}};
  72         138  
7208              
7209 72         217 my $score;
7210             my $score_return;
7211 72         0 my $_tok;
7212 72         117 my $return = undef;
7213 72         115 my $_matched=0;
7214 72         106 my $commit=0;
7215 72         122 my @item = ();
7216 72         153 my %item = ();
7217 72         135 my $repeating = $_[2];
7218 72         123 my $_noactions = $_[3];
7219 72 50       193 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         108  
  72         135  
7220 72         125 my $_itempos = $_[5];
7221 72 50       192 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7222 72         181 my $text;
7223             my $lastsep;
7224 72         0 my $current_match;
7225 72         198 my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or NUMBER});
7226 72         485 $expectation->at($_[1]);
7227            
7228 72         266 my $thisline;
7229 72         246 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7230              
7231            
7232              
7233 72   33     560 while (!$_matched && !$commit)
7234             {
7235            
7236 72 50       188 Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]},
7237             Parse::RecDescent::_tracefirst($_[1]),
7238             q{bodysize},
7239             $tracelevel)
7240             if defined $::RD_TRACE;
7241 72         223 my $thisprod = $thisrule->{"prods"}[0];
7242 72         123 $text = $_[1];
7243 72         205 my $_savetext;
7244 72         137 @item = (q{bodysize});
7245 72         174 %item = (__RULE__ => q{bodysize});
7246 72         124 my $repcount = 0;
7247              
7248              
7249 72 50       187 Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text),
7250             q{bodysize},
7251             $tracelevel)
7252             if defined $::RD_TRACE;
7253 72         139 undef $lastsep;
7254 72         163 $expectation->is(q{})->at($text);
7255 72         499 $_savetext = $text;
7256              
7257 72 50 33     417 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/)
  72 50       685  
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         320 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7268 72         196 substr($text,0,length($current_match),q{});
7269 72 50       171 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7270             . $current_match . q{])},
7271             Parse::RecDescent::_tracefirst($text))
7272             if defined $::RD_TRACE;
7273 72         198 push @item, $item{__PATTERN1__}=$current_match;
7274 72         176 $text = $_savetext;
7275              
7276 72 50       183 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   7 if (1) { no strict qw{refs};
  1         2  
  1         240  
  72         120  
7282 72         219 $expectation->is(q{NIL})->at($text);
7283 72 50   72   784 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         169  
7284             {
7285            
7286 72 50       166 Parse::RecDescent::_trace(q{<>},
7287             Parse::RecDescent::_tracefirst($text),
7288             q{bodysize},
7289             $tracelevel)
7290             if defined $::RD_TRACE;
7291 72         239 $expectation->failed();
7292 72         644 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       248 @{$thisparser->{deferred}}, $def_at unless $_matched;
  72         206  
7320            
7321 72   33     321 while (!$_matched && !$commit)
7322             {
7323            
7324 72 50       160 Parse::RecDescent::_trace(q{Trying production: [NUMBER]},
7325             Parse::RecDescent::_tracefirst($_[1]),
7326             q{bodysize},
7327             $tracelevel)
7328             if defined $::RD_TRACE;
7329 72         168 my $thisprod = $thisrule->{"prods"}[1];
7330 72         182 $text = $_[1];
7331 72         92 my $_savetext;
7332 72         169 @item = (q{bodysize});
7333 72         186 %item = (__RULE__ => q{bodysize});
7334 72         109 my $repcount = 0;
7335              
7336              
7337 72 50       139 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   6 if (1) { no strict qw{refs};
  1         2  
  1         391  
  72         120  
7343 72         161 $expectation->is(q{})->at($text);
7344 72 50   72   653 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         142  
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       233 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         160 $item{q{NUMBER}} = $_tok;
7363 72         155 push @item, $_tok;
7364            
7365             }
7366              
7367 72 50       179 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         106 $_matched = 1;
7376 72         122 last;
7377             }
7378              
7379             splice
7380 72 50       171 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
7381            
7382 72 50 33     223 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     381 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         155 splice @{$thisparser->{errors}}, $err_at;
  72         156  
7404 72 50       192 $return = $item[$#item] unless defined $return;
7405 72 50       191 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         146 $_[1] = $text;
7418 72         329 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   67 my $thisparser = $_[0];
7425 1     1   7 use vars q{$tracelevel};
  1         3  
  1         269  
7426 32   50     132 local $tracelevel = ($tracelevel||0)+1;
7427 32         73 $ERRORS = 0;
7428 32         82 my $thisrule = $thisparser->{"rules"}{"othertypemessage"};
7429              
7430 32 50       92 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         59 my $def_at = @{$thisparser->{deferred}};
  32         69  
7437 32         59 my $err_at = @{$thisparser->{errors}};
  32         54  
7438              
7439 32         90 my $score;
7440             my $score_return;
7441 32         0 my $_tok;
7442 32         51 my $return = undef;
7443 32         47 my $_matched=0;
7444 32         54 my $commit=0;
7445 32         63 my @item = ();
7446 32         70 my %item = ();
7447 32         57 my $repeating = $_[2];
7448 32         60 my $_noactions = $_[3];
7449 32 50       77 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  32         48  
  32         60  
7450 32         58 my $_itempos = $_[5];
7451 32 50       90 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7452 32         84 my $text;
7453             my $lastsep;
7454 32         0 my $current_match;
7455 32         85 my $expectation = new Parse::RecDescent::Expectation(q{bodytype});
7456 32         184 $expectation->at($_[1]);
7457            
7458 32         112 my $thisline;
7459 32         103 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7460              
7461            
7462              
7463 32   33     287 while (!$_matched && !$commit)
7464             {
7465            
7466 32 50       98 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         95 my $thisprod = $thisrule->{"prods"}[0];
7472 32         51 $text = $_[1];
7473 32         66 my $_savetext;
7474 32         69 @item = (q{othertypemessage});
7475 32         67 %item = (__RULE__ => q{othertypemessage});
7476 32         51 my $repcount = 0;
7477              
7478              
7479 32 50       73 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   7 if (1) { no strict qw{refs};
  1         2  
  1         142  
  32         50  
7485 32         106 $expectation->is(q{})->at($text);
7486 32 100   32   361 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodytype($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  32         58  
7487             {
7488            
7489 20 50       54 Parse::RecDescent::_trace(q{<>},
7490             Parse::RecDescent::_tracefirst($text),
7491             q{othertypemessage},
7492             $tracelevel)
7493             if defined $::RD_TRACE;
7494 20         79 $expectation->failed();
7495 20         65 last;
7496             }
7497 12 50       48 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         32 $item{q{bodytype}} = $_tok;
7505 12         27 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   6 if (1) { no strict qw{refs};
  1         1  
  1         869  
  12         38  
7515 12         41 $expectation->is(q{basicfields})->at($text);
7516 12 50   12   150 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  12         27  
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       70 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         46 $item{q{basicfields}} = $_tok;
7535 12         31 push @item, $_tok;
7536            
7537             }
7538              
7539 12 50       33 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         37 $expectation->is(q{bodyMD5})->at($text);
7545            
7546 12 50   12   140 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         26  
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       179 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         31 $item{q{bodyMD5(?)}} = $_tok;
7563 12         29 push @item, $_tok;
7564            
7565              
7566              
7567 12 50       35 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         36 $expectation->is(q{bodydisp})->at($text);
7573            
7574 12 50   12   125 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         26  
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       176 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         34 $item{q{bodydisp(?)}} = $_tok;
7591 12         25 push @item, $_tok;
7592            
7593              
7594              
7595 12 50       66 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         39 $expectation->is(q{bodylang})->at($text);
7601            
7602 12 50   12   128 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         21  
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       178 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         31 $item{q{bodylang(?)}} = $_tok;
7619 12         26 push @item, $_tok;
7620            
7621              
7622              
7623 12 50       37 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         38 $expectation->is(q{bodyextra})->at($text);
7629            
7630 12 50   12   153 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  12         40  
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       181 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         29 $item{q{bodyextra(?)}} = $_tok;
7647 12         22 push @item, $_tok;
7648            
7649              
7650              
7651 12 50       40 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       32 $_tok = ($_noactions) ? 0 : do { $return = { bodytype => $item{bodytype} };
  12         34  
7659 12         48 take_optional_items($return, \%item
7660             , qw/bodyMD5 bodydisp bodylang bodyextra/ );
7661 12         54 merge_hash($return, $item{basicfields});
7662 12         23 1;
7663             };
7664 12 50       36 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       39 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
7671             . $_tok . q{])},
7672             Parse::RecDescent::_tracefirst($text))
7673             if defined $::RD_TRACE;
7674 12         34 push @item, $_tok;
7675 12         28 $item{__ACTION1__}=$_tok;
7676            
7677              
7678 12 50       32 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         20 $_matched = 1;
7687 12         24 last;
7688             }
7689              
7690             splice
7691 32 100       105 @{$thisparser->{deferred}}, $def_at unless $_matched;
  20         57  
7692            
7693 32 100 66     155 unless ( $_matched || defined($score) )
7694             {
7695 20         42 splice @{$thisparser->{deferred}}, $def_at;
  20         48  
7696            
7697              
7698 20         45 $_[1] = $text; # NOT SURE THIS IS NEEDED
7699 20 50       44 Parse::RecDescent::_trace(q{<>},
7700             Parse::RecDescent::_tracefirst($_[1]),
7701             q{othertypemessage},
7702             $tracelevel)
7703             if defined $::RD_TRACE;
7704 20         102 return undef;
7705             }
7706 12 50 33     42 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         23 splice @{$thisparser->{errors}}, $err_at;
  12         31  
7715 12 50       35 $return = $item[$#item] unless defined $return;
7716 12 50       33 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         37 $_[1] = $text;
7729 12         129 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   782 my $thisparser = $_[0];
7736 1     1   6 use vars q{$tracelevel};
  1         2  
  1         471  
7737 72   50     199 local $tracelevel = ($tracelevel||0)+1;
7738 72         194 $ERRORS = 0;
7739 72         188 my $thisrule = $thisparser->{"rules"}{"bodydesc"};
7740              
7741 72 50       173 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         98 my $def_at = @{$thisparser->{deferred}};
  72         140  
7748 72         123 my $err_at = @{$thisparser->{errors}};
  72         164  
7749              
7750 72         214 my $score;
7751             my $score_return;
7752 72         0 my $_tok;
7753 72         118 my $return = undef;
7754 72         98 my $_matched=0;
7755 72         128 my $commit=0;
7756 72         158 my @item = ();
7757 72         130 my %item = ();
7758 72         127 my $repeating = $_[2];
7759 72         104 my $_noactions = $_[3];
7760 72 50       149 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         83  
  72         148  
7761 72         146 my $_itempos = $_[5];
7762 72 50       231 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7763 72         181 my $text;
7764             my $lastsep;
7765 72         0 my $current_match;
7766 72         157 my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or STRING});
7767 72         463 $expectation->at($_[1]);
7768            
7769 72         243 my $thisline;
7770 72         281 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7771              
7772            
7773              
7774 72   33     591 while (!$_matched && !$commit)
7775             {
7776            
7777 72 50       211 Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]},
7778             Parse::RecDescent::_tracefirst($_[1]),
7779             q{bodydesc},
7780             $tracelevel)
7781             if defined $::RD_TRACE;
7782 72         209 my $thisprod = $thisrule->{"prods"}[0];
7783 72         141 $text = $_[1];
7784 72         148 my $_savetext;
7785 72         210 @item = (q{bodydesc});
7786 72         167 %item = (__RULE__ => q{bodydesc});
7787 72         101 my $repcount = 0;
7788              
7789              
7790 72 50       145 Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text),
7791             q{bodydesc},
7792             $tracelevel)
7793             if defined $::RD_TRACE;
7794 72         135 undef $lastsep;
7795 72         173 $expectation->is(q{})->at($text);
7796 72         457 $_savetext = $text;
7797              
7798 72 50 33     471 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/)
  72 50       762  
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         381 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7809 72         207 substr($text,0,length($current_match),q{});
7810 72 50       159 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7811             . $current_match . q{])},
7812             Parse::RecDescent::_tracefirst($text))
7813             if defined $::RD_TRACE;
7814 72         182 push @item, $item{__PATTERN1__}=$current_match;
7815 72         137 $text = $_savetext;
7816              
7817 72 50       188 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         223  
  72         92  
7823 72         252 $expectation->is(q{NIL})->at($text);
7824 72 100   72   653 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         147  
7825             {
7826            
7827 21 50       75 Parse::RecDescent::_trace(q{<>},
7828             Parse::RecDescent::_tracefirst($text),
7829             q{bodydesc},
7830             $tracelevel)
7831             if defined $::RD_TRACE;
7832 21         74 $expectation->failed();
7833 21         175 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         115 $item{q{NIL}} = $_tok;
7843 51         100 push @item, $_tok;
7844            
7845             }
7846              
7847 51 50       140 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         73 $_matched = 1;
7856 51         106 last;
7857             }
7858              
7859             splice
7860 72 100       186 @{$thisparser->{deferred}}, $def_at unless $_matched;
  21         61  
7861            
7862 72   66     246 while (!$_matched && !$commit)
7863             {
7864            
7865 21 50       66 Parse::RecDescent::_trace(q{Trying production: [STRING]},
7866             Parse::RecDescent::_tracefirst($_[1]),
7867             q{bodydesc},
7868             $tracelevel)
7869             if defined $::RD_TRACE;
7870 21         50 my $thisprod = $thisrule->{"prods"}[1];
7871 21         54 $text = $_[1];
7872 21         33 my $_savetext;
7873 21         52 @item = (q{bodydesc});
7874 21         65 %item = (__RULE__ => q{bodydesc});
7875 21         43 my $repcount = 0;
7876              
7877              
7878 21 50       71 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   6 if (1) { no strict qw{refs};
  1         7  
  1         381  
  21         33  
7884 21         61 $expectation->is(q{})->at($text);
7885 21 50   21   232 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         42  
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       125 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         62 $item{q{STRING}} = $_tok;
7904 21         40 push @item, $_tok;
7905            
7906             }
7907              
7908 21 50       73 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         38 $_matched = 1;
7917 21         38 last;
7918             }
7919              
7920             splice
7921 72 50       166 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
7922            
7923 72 50 33     198 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     293 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         118 splice @{$thisparser->{errors}}, $err_at;
  72         135  
7945 72 50       230 $return = $item[$#item] unless defined $return;
7946 72 50       192 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         139 $_[1] = $text;
7959 72         364 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   773 my $thisparser = $_[0];
7966 1     1   8 use vars q{$tracelevel};
  1         1  
  1         271  
7967 72   50     244 local $tracelevel = ($tracelevel||0)+1;
7968 72         140 $ERRORS = 0;
7969 72         155 my $thisrule = $thisparser->{"rules"}{"bodyenc"};
7970              
7971 72 50       155 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         117 my $def_at = @{$thisparser->{deferred}};
  72         151  
7978 72         130 my $err_at = @{$thisparser->{errors}};
  72         140  
7979              
7980 72         211 my $score;
7981             my $score_return;
7982 72         0 my $_tok;
7983 72         107 my $return = undef;
7984 72         114 my $_matched=0;
7985 72         90 my $commit=0;
7986 72         114 my @item = ();
7987 72         136 my %item = ();
7988 72         113 my $repeating = $_[2];
7989 72         104 my $_noactions = $_[3];
7990 72 50       143 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  72         108  
  72         121  
7991 72         147 my $_itempos = $_[5];
7992 72 50       221 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7993 72         180 my $text;
7994             my $lastsep;
7995 72         0 my $current_match;
7996 72         183 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or KVPAIRS});
7997 72         463 $expectation->at($_[1]);
7998            
7999 72         259 my $thisline;
8000 72         253 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8001              
8002            
8003              
8004 72   33     571 while (!$_matched && !$commit)
8005             {
8006            
8007 72 50       232 Parse::RecDescent::_trace(q{Trying production: [NIL]},
8008             Parse::RecDescent::_tracefirst($_[1]),
8009             q{bodyenc},
8010             $tracelevel)
8011             if defined $::RD_TRACE;
8012 72         180 my $thisprod = $thisrule->{"prods"}[0];
8013 72         135 $text = $_[1];
8014 72         113 my $_savetext;
8015 72         162 @item = (q{bodyenc});
8016 72         198 %item = (__RULE__ => q{bodyenc});
8017 72         121 my $repcount = 0;
8018              
8019              
8020 72 50       188 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   7 if (1) { no strict qw{refs};
  1         2  
  1         234  
  72         104  
8026 72         192 $expectation->is(q{})->at($text);
8027 72 50   72   687 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         136  
8028             {
8029            
8030 72 50       164 Parse::RecDescent::_trace(q{<>},
8031             Parse::RecDescent::_tracefirst($text),
8032             q{bodyenc},
8033             $tracelevel)
8034             if defined $::RD_TRACE;
8035 72         236 $expectation->failed();
8036 72         231 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       265 @{$thisparser->{deferred}}, $def_at unless $_matched;
  72         176  
8064            
8065 72   33     324 while (!$_matched && !$commit)
8066             {
8067            
8068 72 50       179 Parse::RecDescent::_trace(q{Trying production: [STRING]},
8069             Parse::RecDescent::_tracefirst($_[1]),
8070             q{bodyenc},
8071             $tracelevel)
8072             if defined $::RD_TRACE;
8073 72         166 my $thisprod = $thisrule->{"prods"}[1];
8074 72         138 $text = $_[1];
8075 72         98 my $_savetext;
8076 72         175 @item = (q{bodyenc});
8077 72         187 %item = (__RULE__ => q{bodyenc});
8078 72         107 my $repcount = 0;
8079              
8080              
8081 72 50       168 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         3  
  1         231  
  72         100  
8087 72         213 $expectation->is(q{})->at($text);
8088 72 50   72   649 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  72         201  
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       249 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         157 $item{q{STRING}} = $_tok;
8107 72         130 push @item, $_tok;
8108            
8109             }
8110              
8111 72 50       238 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         116 $_matched = 1;
8120 72         137 last;
8121             }
8122              
8123             splice
8124 72 50       172 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
8125            
8126 72   33     200 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   6 if (1) { no strict qw{refs};
  1         2  
  1         383  
  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       177 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
8186            
8187 72 50 33     223 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     286 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         113 splice @{$thisparser->{errors}}, $err_at;
  72         138  
8209 72 50       340 $return = $item[$#item] unless defined $return;
8210 72 50       210 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         136 $_[1] = $text;
8223 72         346 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   1255 my $thisparser = $_[0];
8230 1     1   7 use vars q{$tracelevel};
  1         2  
  1         280  
8231 824   50     1545 local $tracelevel = ($tracelevel||0)+1;
8232 824         1050 $ERRORS = 0;
8233 824         1290 my $thisrule = $thisparser->{"rules"}{"STRING"};
8234              
8235 824 50       1332 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         1028 my $def_at = @{$thisparser->{deferred}};
  824         1139  
8242 824         961 my $err_at = @{$thisparser->{errors}};
  824         1090  
8243              
8244 824         1509 my $score;
8245             my $score_return;
8246 824         0 my $_tok;
8247 824         946 my $return = undef;
8248 824         922 my $_matched=0;
8249 824         1063 my $commit=0;
8250 824         1046 my @item = ();
8251 824         1021 my %item = ();
8252 824         949 my $repeating = $_[2];
8253 824         1084 my $_noactions = $_[3];
8254 824 50       1443 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  824         933  
  824         1289  
8255 824         1050 my $_itempos = $_[5];
8256 824 50       1410 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8257 824         1624 my $text;
8258             my $lastsep;
8259 824         0 my $current_match;
8260 824         1733 my $expectation = new Parse::RecDescent::Expectation(q{DOUBLE_QUOTED_STRING, or SINGLE_QUOTED_STRING, or BARESTRING});
8261 824         4301 $expectation->at($_[1]);
8262            
8263 824         2742 my $thisline;
8264 824         2156 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8265              
8266            
8267              
8268 824   33     4896 while (!$_matched && !$commit)
8269             {
8270            
8271 824 50       1370 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         1495 my $thisprod = $thisrule->{"prods"}[0];
8277 824         1068 $text = $_[1];
8278 824         981 my $_savetext;
8279 824         1230 @item = (q{STRING});
8280 824         1241 %item = (__RULE__ => q{STRING});
8281 824         990 my $repcount = 0;
8282              
8283              
8284 824 50       1288 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   6 if (1) { no strict qw{refs};
  1         2  
  1         221  
  824         1042  
8290 824         1613 $expectation->is(q{})->at($text);
8291 824 100   824   6019 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::DOUBLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  824         1266  
8292             {
8293            
8294 112 50       226 Parse::RecDescent::_trace(q{<>},
8295             Parse::RecDescent::_tracefirst($text),
8296             q{STRING},
8297             $tracelevel)
8298             if defined $::RD_TRACE;
8299 112         290 $expectation->failed();
8300 112         324 last;
8301             }
8302 712 50       2043 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         1310 $item{q{DOUBLE_QUOTED_STRING}} = $_tok;
8310 712         997 push @item, $_tok;
8311            
8312             }
8313              
8314 712 50       1204 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         914 $_matched = 1;
8323 712         988 last;
8324             }
8325              
8326             splice
8327 824 100       1455 @{$thisparser->{deferred}}, $def_at unless $_matched;
  112         198  
8328            
8329 824   66     1875 while (!$_matched && !$commit)
8330             {
8331            
8332 112 50       220 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         180 my $thisprod = $thisrule->{"prods"}[1];
8338 112         192 $text = $_[1];
8339 112         130 my $_savetext;
8340 112         231 @item = (q{STRING});
8341 112         217 %item = (__RULE__ => q{STRING});
8342 112         150 my $repcount = 0;
8343              
8344              
8345 112 50       212 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   6 if (1) { no strict qw{refs};
  1         3  
  1         245  
  112         164  
8351 112         255 $expectation->is(q{})->at($text);
8352 112 100   112   979 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::SINGLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  112         197  
8353             {
8354            
8355 111 50       237 Parse::RecDescent::_trace(q{<>},
8356             Parse::RecDescent::_tracefirst($text),
8357             q{STRING},
8358             $tracelevel)
8359             if defined $::RD_TRACE;
8360 111         267 $expectation->failed();
8361 111         306 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         3 $item{q{SINGLE_QUOTED_STRING}} = $_tok;
8371 1         3 push @item, $_tok;
8372            
8373             }
8374              
8375 1 50       2 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         2 last;
8385             }
8386              
8387             splice
8388 824 100       1674 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         216  
8389            
8390 824   66     1484 while (!$_matched && !$commit)
8391             {
8392            
8393 111 50       218 Parse::RecDescent::_trace(q{Trying production: [BARESTRING]},
8394             Parse::RecDescent::_tracefirst($_[1]),
8395             q{STRING},
8396             $tracelevel)
8397             if defined $::RD_TRACE;
8398 111         193 my $thisprod = $thisrule->{"prods"}[2];
8399 111         190 $text = $_[1];
8400 111         137 my $_savetext;
8401 111         248 @item = (q{STRING});
8402 111         238 %item = (__RULE__ => q{STRING});
8403 111         154 my $repcount = 0;
8404              
8405              
8406 111 50       202 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   7 if (1) { no strict qw{refs};
  1         2  
  1         390  
  111         187  
8412 111         230 $expectation->is(q{})->at($text);
8413 111 50   111   977 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::BARESTRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  111         186  
8414             {
8415            
8416 111 50       219 Parse::RecDescent::_trace(q{<>},
8417             Parse::RecDescent::_tracefirst($text),
8418             q{STRING},
8419             $tracelevel)
8420             if defined $::RD_TRACE;
8421 111         277 $expectation->failed();
8422 111         296 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       1468 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         193  
8450            
8451 824 100 66     1781 unless ( $_matched || defined($score) )
8452             {
8453 111         189 splice @{$thisparser->{deferred}}, $def_at;
  111         206  
8454            
8455              
8456 111         194 $_[1] = $text; # NOT SURE THIS IS NEEDED
8457 111 50       215 Parse::RecDescent::_trace(q{<>},
8458             Parse::RecDescent::_tracefirst($_[1]),
8459             q{STRING},
8460             $tracelevel)
8461             if defined $::RD_TRACE;
8462 111         497 return undef;
8463             }
8464 713 50 33     2024 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         854 splice @{$thisparser->{errors}}, $err_at;
  713         1130  
8473 713 50       1585 $return = $item[$#item] unless defined $return;
8474 713 50       1225 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         1035 $_[1] = $text;
8487 713         3232 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   97 my $thisparser = $_[0];
8494 1     1   7 use vars q{$tracelevel};
  1         2  
  1         440  
8495 1   50     6 local $tracelevel = ($tracelevel||0)+1;
8496 1         2 $ERRORS = 0;
8497 1         3 my $thisrule = $thisparser->{"rules"}{"envelope"};
8498              
8499 1 50       3 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         3  
8507              
8508 1         4 my $score;
8509             my $score_return;
8510 1         0 my $_tok;
8511 1         1 my $return = undef;
8512 1         2 my $_matched=0;
8513 1         2 my $commit=0;
8514 1         2 my @item = ();
8515 1         2 my %item = ();
8516 1         2 my $repeating = $_[2];
8517 1         2 my $_noactions = $_[3];
8518 1 50       4 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  1         2  
  1         3  
8519 1         5 my $_itempos = $_[5];
8520 1 50       4 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8521 1         3 my $text;
8522             my $lastsep;
8523 1         0 my $current_match;
8524 1         3 my $expectation = new Parse::RecDescent::Expectation(q{/.*?\\(.*?ENVELOPE/});
8525 1         9 $expectation->at($_[1]);
8526            
8527 1         4 my $thisline;
8528 1         4 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8529              
8530            
8531              
8532 1   33     11 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         3 my $thisprod = $thisrule->{"prods"}[0];
8541 1         2 $text = $_[1];
8542 1         2 my $_savetext;
8543 1         2 @item = (q{envelope});
8544 1         4 %item = (__RULE__ => q{envelope});
8545 1         2 my $repcount = 0;
8546              
8547              
8548 1 50       3 Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?ENVELOPE/]}, Parse::RecDescent::_tracefirst($text),
8549             q{envelope},
8550             $tracelevel)
8551             if defined $::RD_TRACE;
8552 1         3 undef $lastsep;
8553 1         3 $expectation->is(q{})->at($text);
8554            
8555              
8556 1 50 33     22 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*?\(.*?ENVELOPE)/)
  1 50       15  
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         6 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8567 1         5 substr($text,0,length($current_match),q{});
8568 1 50       2 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8569             . $current_match . q{])},
8570             Parse::RecDescent::_tracefirst($text))
8571             if defined $::RD_TRACE;
8572 1         3 push @item, $item{__PATTERN1__}=$current_match;
8573            
8574              
8575 1 50       4 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         1  
  1         647  
  1         2  
8581 1         3 $expectation->is(q{envelopestruct})->at($text);
8582 1 50   1   14 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  1         3  
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       7 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         4 $item{q{envelopestruct}} = $_tok;
8601 1         3 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       58  
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         8 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8624 1         3 substr($text,0,length($current_match),q{});
8625 1 50       4 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8626             . $current_match . q{])},
8627             Parse::RecDescent::_tracefirst($text))
8628             if defined $::RD_TRACE;
8629 1         4 push @item, $item{__PATTERN2__}=$current_match;
8630            
8631              
8632 1 50       3 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       3 $_tok = ($_noactions) ? 0 : do { $return = $item{envelopestruct} };
  1         3  
8640 1 50       4 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         1 push @item, $_tok;
8651 1         3 $item{__ACTION1__}=$_tok;
8652            
8653              
8654 1 50       3 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         2 $_matched = 1;
8663 1         2 last;
8664             }
8665              
8666             splice
8667 1 50       5 @{$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     4 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       3 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         11 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   53 my $thisparser = $_[0];
8712 1     1   7 use vars q{$tracelevel};
  1         2  
  1         298  
8713 24   50     85 local $tracelevel = ($tracelevel||0)+1;
8714 24         42 $ERRORS = 0;
8715 24         68 my $thisrule = $thisparser->{"rules"}{"to"};
8716              
8717 24 50       69 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         38 my $def_at = @{$thisparser->{deferred}};
  24         49  
8724 24         43 my $err_at = @{$thisparser->{errors}};
  24         50  
8725              
8726 24         81 my $score;
8727             my $score_return;
8728 24         0 my $_tok;
8729 24         37 my $return = undef;
8730 24         56 my $_matched=0;
8731 24         39 my $commit=0;
8732 24         47 my @item = ();
8733 24         44 my %item = ();
8734 24         36 my $repeating = $_[2];
8735 24         36 my $_noactions = $_[3];
8736 24 50       54 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         37  
  24         36  
8737 24         37 my $_itempos = $_[5];
8738 24 50       75 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8739 24         71 my $text;
8740             my $lastsep;
8741 24         0 my $current_match;
8742 24         73 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
8743 24         152 $expectation->at($_[1]);
8744            
8745 24         93 my $thisline;
8746 24         80 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8747              
8748            
8749              
8750 24   33     210 while (!$_matched && !$commit)
8751             {
8752            
8753 24 50       89 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
8754             Parse::RecDescent::_tracefirst($_[1]),
8755             q{to},
8756             $tracelevel)
8757             if defined $::RD_TRACE;
8758 24         71 my $thisprod = $thisrule->{"prods"}[0];
8759 24         46 $text = $_[1];
8760 24         36 my $_savetext;
8761 24         49 @item = (q{to});
8762 24         67 %item = (__RULE__ => q{to});
8763 24         42 my $repcount = 0;
8764              
8765              
8766 24 50       87 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   7 if (1) { no strict qw{refs};
  1         8  
  1         343  
  24         35  
8772 24         55 $expectation->is(q{})->at($text);
8773 24 50   24   241 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         40  
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       95 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         58 $item{q{ADDRESSES}} = $_tok;
8792 24         57 push @item, $_tok;
8793            
8794             }
8795              
8796 24 50       74 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         36 $_matched = 1;
8805 24         65 last;
8806             }
8807              
8808             splice
8809 24 50       71 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
8810            
8811 24 50 33     89 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     126 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         47 splice @{$thisparser->{errors}}, $err_at;
  24         56  
8833 24 50       80 $return = $item[$#item] unless defined $return;
8834 24 50       60 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         62 $_[1] = $text;
8847 24         124 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   857 my $thisparser = $_[0];
8854 1     1   7 use vars q{$tracelevel};
  1         8  
  1         259  
8855 60   50     202 local $tracelevel = ($tracelevel||0)+1;
8856 60         105 $ERRORS = 0;
8857 60         149 my $thisrule = $thisparser->{"rules"}{"textlines"};
8858              
8859 60 50       224 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         102 my $def_at = @{$thisparser->{deferred}};
  60         137  
8866 60         84 my $err_at = @{$thisparser->{errors}};
  60         126  
8867              
8868 60         168 my $score;
8869             my $score_return;
8870 60         0 my $_tok;
8871 60         125 my $return = undef;
8872 60         104 my $_matched=0;
8873 60         89 my $commit=0;
8874 60         114 my @item = ();
8875 60         148 my %item = ();
8876 60         100 my $repeating = $_[2];
8877 60         77 my $_noactions = $_[3];
8878 60 50       142 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  60         94  
  60         114  
8879 60         101 my $_itempos = $_[5];
8880 60 50       198 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8881 60         181 my $text;
8882             my $lastsep;
8883 60         0 my $current_match;
8884 60         152 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or NUMBER});
8885 60         438 $expectation->at($_[1]);
8886            
8887 60         223 my $thisline;
8888 60         232 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8889              
8890            
8891              
8892 60   33     535 while (!$_matched && !$commit)
8893             {
8894            
8895 60 50       184 Parse::RecDescent::_trace(q{Trying production: [NIL]},
8896             Parse::RecDescent::_tracefirst($_[1]),
8897             q{textlines},
8898             $tracelevel)
8899             if defined $::RD_TRACE;
8900 60         191 my $thisprod = $thisrule->{"prods"}[0];
8901 60         127 $text = $_[1];
8902 60         81 my $_savetext;
8903 60         117 @item = (q{textlines});
8904 60         133 %item = (__RULE__ => q{textlines});
8905 60         102 my $repcount = 0;
8906              
8907              
8908 60 50       159 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   6 if (1) { no strict qw{refs};
  1         3  
  1         262  
  60         117  
8914 60         152 $expectation->is(q{})->at($text);
8915 60 50   60   535 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  60         117  
8916             {
8917            
8918 60 50       158 Parse::RecDescent::_trace(q{<>},
8919             Parse::RecDescent::_tracefirst($text),
8920             q{textlines},
8921             $tracelevel)
8922             if defined $::RD_TRACE;
8923 60         243 $expectation->failed();
8924 60         226 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       203 @{$thisparser->{deferred}}, $def_at unless $_matched;
  60         142  
8952            
8953 60   33     306 while (!$_matched && !$commit)
8954             {
8955            
8956 60 50       145 Parse::RecDescent::_trace(q{Trying production: [NUMBER]},
8957             Parse::RecDescent::_tracefirst($_[1]),
8958             q{textlines},
8959             $tracelevel)
8960             if defined $::RD_TRACE;
8961 60         158 my $thisprod = $thisrule->{"prods"}[1];
8962 60         98 $text = $_[1];
8963 60         101 my $_savetext;
8964 60         125 @item = (q{textlines});
8965 60         144 %item = (__RULE__ => q{textlines});
8966 60         97 my $repcount = 0;
8967              
8968              
8969 60 50       129 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   6 if (1) { no strict qw{refs};
  1         2  
  1         359  
  60         87  
8975 60         169 $expectation->is(q{})->at($text);
8976 60 100   60   605 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  60         135  
8977             {
8978            
8979 2 50       6 Parse::RecDescent::_trace(q{<>},
8980             Parse::RecDescent::_tracefirst($text),
8981             q{textlines},
8982             $tracelevel)
8983             if defined $::RD_TRACE;
8984 2         7 $expectation->failed();
8985 2         8 last;
8986             }
8987 58 50       228 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         128 $item{q{NUMBER}} = $_tok;
8995 58         114 push @item, $_tok;
8996            
8997             }
8998              
8999 58 50       176 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         93 $_matched = 1;
9008 58         92 last;
9009             }
9010              
9011             splice
9012 60 100       154 @{$thisparser->{deferred}}, $def_at unless $_matched;
  2         5  
9013            
9014 60 100 66     153 unless ( $_matched || defined($score) )
9015             {
9016 2         3 splice @{$thisparser->{deferred}}, $def_at;
  2         5  
9017            
9018              
9019 2         5 $_[1] = $text; # NOT SURE THIS IS NEEDED
9020 2 50       5 Parse::RecDescent::_trace(q{<>},
9021             Parse::RecDescent::_tracefirst($_[1]),
9022             q{textlines},
9023             $tracelevel)
9024             if defined $::RD_TRACE;
9025 2         8 return undef;
9026             }
9027 58 50 33     223 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         86 splice @{$thisparser->{errors}}, $err_at;
  58         124  
9036 58 50       157 $return = $item[$#item] unless defined $return;
9037 58 50       127 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         113 $_[1] = $text;
9050 58         246 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   99 my $thisparser = $_[0];
9057 1     1   6 use vars q{$tracelevel};
  1         2  
  1         275  
9058 53   50     198 local $tracelevel = ($tracelevel||0)+1;
9059 53         79 $ERRORS = 0;
9060 53         146 my $thisrule = $thisparser->{"rules"}{"nestedmessage"};
9061              
9062 53 50       139 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         81 my $def_at = @{$thisparser->{deferred}};
  53         114  
9069 53         80 my $err_at = @{$thisparser->{errors}};
  53         115  
9070              
9071 53         154 my $score;
9072             my $score_return;
9073 53         0 my $_tok;
9074 53         87 my $return = undef;
9075 53         74 my $_matched=0;
9076 53         71 my $commit=0;
9077 53         111 my @item = ();
9078 53         81 my %item = ();
9079 53         84 my $repeating = $_[2];
9080 53         76 my $_noactions = $_[3];
9081 53 50       127 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  53         70  
  53         88  
9082 53         102 my $_itempos = $_[5];
9083 53 50       154 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9084 53         125 my $text;
9085             my $lastsep;
9086 53         0 my $current_match;
9087 53         143 my $expectation = new Parse::RecDescent::Expectation(q{rfc822message});
9088 53         355 $expectation->at($_[1]);
9089            
9090 53         189 my $thisline;
9091 53         176 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9092              
9093            
9094              
9095 53   33     422 while (!$_matched && !$commit)
9096             {
9097            
9098 53 50       142 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         152 my $thisprod = $thisrule->{"prods"}[0];
9104 53         84 $text = $_[1];
9105 53         72 my $_savetext;
9106 53         100 @item = (q{nestedmessage});
9107 53         128 %item = (__RULE__ => q{nestedmessage});
9108 53         100 my $repcount = 0;
9109              
9110              
9111 53 50       115 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   6 if (1) { no strict qw{refs};
  1         2  
  1         210  
  53         93  
9117 53         122 $expectation->is(q{})->at($text);
9118 53 100   53   547 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::rfc822message($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  53         121  
9119             {
9120            
9121 32 50       94 Parse::RecDescent::_trace(q{<>},
9122             Parse::RecDescent::_tracefirst($text),
9123             q{nestedmessage},
9124             $tracelevel)
9125             if defined $::RD_TRACE;
9126 32         87 $expectation->failed();
9127 32         99 last;
9128             }
9129 21 50       88 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         55 $item{q{rfc822message}} = $_tok;
9137 21         50 push @item, $_tok;
9138            
9139             }
9140              
9141            
9142              
9143 21 50       50 Parse::RecDescent::_trace(q{Trying directive: []},
9144             Parse::RecDescent::_tracefirst($text),
9145             q{nestedmessage},
9146             $tracelevel)
9147             if defined $::RD_TRACE;
9148 21         39 $_tok = do { $commit = 1 };
  21         47  
9149 21 50       52 if (defined($_tok))
9150             {
9151 21 50       66 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       55 last unless defined $_tok;
9164 21         62 push @item, $item{__DIRECTIVE1__}=$_tok;
9165            
9166              
9167 21 50       45 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   7 if (1) { no strict qw{refs};
  1         2  
  1         129  
  21         32  
9173 21         73 $expectation->is(q{bodyparms})->at($text);
9174 21 50   21   233 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         55  
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       76 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         57 $item{q{bodyparms}} = $_tok;
9193 21         43 push @item, $_tok;
9194            
9195             }
9196              
9197 21 50       57 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   7 if (1) { no strict qw{refs};
  1         1  
  1         153  
  21         41  
9203 21         68 $expectation->is(q{bodyid})->at($text);
9204 21 50   21   240 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         41  
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       80 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         53 $item{q{bodyid}} = $_tok;
9223 21         39 push @item, $_tok;
9224            
9225             }
9226              
9227 21 50       58 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   6 if (1) { no strict qw{refs};
  1         2  
  1         116  
  21         32  
9233 21         76 $expectation->is(q{bodydesc})->at($text);
9234 21 50   21   255 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         45  
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       94 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         59 $item{q{bodydesc}} = $_tok;
9253 21         46 push @item, $_tok;
9254            
9255             }
9256              
9257 21 50       68 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   6 if (1) { no strict qw{refs};
  1         1  
  1         163  
  21         33  
9263 21         73 $expectation->is(q{bodyenc})->at($text);
9264 21 50   21   255 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         56  
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       78 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         59 $item{q{bodyenc}} = $_tok;
9283 21         44 push @item, $_tok;
9284            
9285             }
9286              
9287 21 50       61 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   6 if (1) { no strict qw{refs};
  1         2  
  1         1289  
  21         25  
9293 21         80 $expectation->is(q{bodysize})->at($text);
9294 21 50   21   265 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         46  
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       76 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         57 $item{q{bodysize}} = $_tok;
9313 21         44 push @item, $_tok;
9314            
9315             }
9316              
9317 21 50       59 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         94 $expectation->is(q{envelopestruct})->at($text);
9323            
9324 21 50   21   266 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         51  
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       409 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         64 $item{q{envelopestruct(?)}} = $_tok;
9341 21         53 push @item, $_tok;
9342            
9343              
9344              
9345 21 50       58 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         75 $expectation->is(q{bodystructure})->at($text);
9351            
9352 21 50   21   269 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodystructure, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         43  
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       376 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         60 $item{q{bodystructure(?)}} = $_tok;
9369 21         47 push @item, $_tok;
9370            
9371              
9372              
9373 21 50       78 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   242 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         44  
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       307 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         52 $item{q{textlines(?)}} = $_tok;
9397 21         44 push @item, $_tok;
9398            
9399              
9400              
9401 21 50       51 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         62 $expectation->is(q{bodyMD5})->at($text);
9407            
9408 21 50   21   246 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         43  
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       321 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         57 $item{q{bodyMD5(?)}} = $_tok;
9425 21         39 push @item, $_tok;
9426            
9427              
9428              
9429 21 50       77 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         76 $expectation->is(q{bodydisp})->at($text);
9435            
9436 21 50   21   222 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         52  
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       331 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         54 $item{q{bodydisp(?)}} = $_tok;
9453 21         55 push @item, $_tok;
9454            
9455              
9456              
9457 21 50       71 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         61 $expectation->is(q{bodylang})->at($text);
9463            
9464 21 50   21   231 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         46  
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       302 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         51 $item{q{bodylang(?)}} = $_tok;
9481 21         43 push @item, $_tok;
9482            
9483              
9484              
9485 21 50       54 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         61 $expectation->is(q{bodyextra})->at($text);
9491            
9492 21 50   21   235 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  21         52  
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       320 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         53 $item{q{bodyextra(?)}} = $_tok;
9509 21         46 push @item, $_tok;
9510            
9511              
9512              
9513 21 50       59 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       50 $_tok = ($_noactions) ? 0 : do {
9521 21         32 $return = {};
9522             $return->{$_} = $item{$_}
9523 21         203 for qw/bodyparms bodyid bodydesc bodyenc bodysize/;
9524             # envelopestruct bodystructure textlines/;
9525              
9526 21         100 take_optional_items($return, \%item
9527             , qw/envelopestruct bodystructure textlines/
9528             , qw/bodyMD5 bodydisp bodylang bodyextra/);
9529              
9530 21         128 merge_hash($return, $item{bodystructure}[0]);
9531 21         81 merge_hash($return, $item{basicfields});
9532 21         63 $return->{bodytype} = "MESSAGE" ;
9533 21         58 $return->{bodysubtype} = "RFC822" ;
9534 21         42 1;
9535             };
9536 21 50       66 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       73 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
9543             . $_tok . q{])},
9544             Parse::RecDescent::_tracefirst($text))
9545             if defined $::RD_TRACE;
9546 21         42 push @item, $_tok;
9547 21         37 $item{__ACTION1__}=$_tok;
9548            
9549              
9550 21 50       71 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         32 $_matched = 1;
9559 21         38 last;
9560             }
9561              
9562             splice
9563 53 100       187 @{$thisparser->{deferred}}, $def_at unless $_matched;
  32         96  
9564            
9565 53 100 66     202 unless ( $_matched || defined($score) )
9566             {
9567 32         53 splice @{$thisparser->{deferred}}, $def_at;
  32         75  
9568            
9569              
9570 32         77 $_[1] = $text; # NOT SURE THIS IS NEEDED
9571 32 50       72 Parse::RecDescent::_trace(q{<>},
9572             Parse::RecDescent::_tracefirst($_[1]),
9573             q{nestedmessage},
9574             $tracelevel)
9575             if defined $::RD_TRACE;
9576 32         146 return undef;
9577             }
9578 21 50 33     69 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         33 splice @{$thisparser->{errors}}, $err_at;
  21         50  
9587 21 50       72 $return = $item[$#item] unless defined $return;
9588 21 50       53 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         46 $_[1] = $text;
9601 21         260 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   55 my $thisparser = $_[0];
9608 1     1   7 use vars q{$tracelevel};
  1         2  
  1         273  
9609 24   50     268 local $tracelevel = ($tracelevel||0)+1;
9610 24         49 $ERRORS = 0;
9611 24         74 my $thisrule = $thisparser->{"rules"}{"sender"};
9612              
9613 24 50       65 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         37 my $def_at = @{$thisparser->{deferred}};
  24         55  
9620 24         43 my $err_at = @{$thisparser->{errors}};
  24         52  
9621              
9622 24         71 my $score;
9623             my $score_return;
9624 24         0 my $_tok;
9625 24         33 my $return = undef;
9626 24         35 my $_matched=0;
9627 24         37 my $commit=0;
9628 24         47 my @item = ();
9629 24         46 my %item = ();
9630 24         40 my $repeating = $_[2];
9631 24         45 my $_noactions = $_[3];
9632 24 50       56 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         40  
  24         46  
9633 24         43 my $_itempos = $_[5];
9634 24 50       81 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9635 24         74 my $text;
9636             my $lastsep;
9637 24         0 my $current_match;
9638 24         92 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
9639 24         204 $expectation->at($_[1]);
9640            
9641 24         107 my $thisline;
9642 24         91 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9643              
9644            
9645              
9646 24   33     229 while (!$_matched && !$commit)
9647             {
9648            
9649 24 50       65 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
9650             Parse::RecDescent::_tracefirst($_[1]),
9651             q{sender},
9652             $tracelevel)
9653             if defined $::RD_TRACE;
9654 24         77 my $thisprod = $thisrule->{"prods"}[0];
9655 24         51 $text = $_[1];
9656 24         37 my $_savetext;
9657 24         48 @item = (q{sender});
9658 24         60 %item = (__RULE__ => q{sender});
9659 24         43 my $repcount = 0;
9660              
9661              
9662 24 50       68 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   6 if (1) { no strict qw{refs};
  1         2  
  1         359  
  24         33  
9668 24         60 $expectation->is(q{})->at($text);
9669 24 50   24   264 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         48  
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       99 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         64 push @item, $_tok;
9689            
9690             }
9691              
9692 24 50       59 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         41 $_matched = 1;
9701 24         46 last;
9702             }
9703              
9704             splice
9705 24 50       51 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
9706            
9707 24 50 33     81 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     96 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         53  
9729 24 50       86 $return = $item[$#item] unless defined $return;
9730 24 50       61 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         59 $_[1] = $text;
9743 24         127 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   165 my $thisparser = $_[0];
9750 1     1   7 use vars q{$tracelevel};
  1         1  
  1         983  
9751 112   50     241 local $tracelevel = ($tracelevel||0)+1;
9752 112         172 $ERRORS = 0;
9753 112         247 my $thisrule = $thisparser->{"rules"}{"SINGLE_QUOTED_STRING"};
9754              
9755 112 50       231 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         150 my $def_at = @{$thisparser->{deferred}};
  112         175  
9762 112         162 my $err_at = @{$thisparser->{errors}};
  112         219  
9763              
9764 112         271 my $score;
9765             my $score_return;
9766 112         0 my $_tok;
9767 112         158 my $return = undef;
9768 112         175 my $_matched=0;
9769 112         137 my $commit=0;
9770 112         159 my @item = ();
9771 112         156 my %item = ();
9772 112         160 my $repeating = $_[2];
9773 112         143 my $_noactions = $_[3];
9774 112 50       210 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  112         132  
  112         150  
9775 112         164 my $_itempos = $_[5];
9776 112 50       293 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9777 112         272 my $text;
9778             my $lastsep;
9779 112         0 my $current_match;
9780 112         259 my $expectation = new Parse::RecDescent::Expectation(q{'''});
9781 112         645 $expectation->at($_[1]);
9782            
9783 112         369 my $thisline;
9784 112         344 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9785              
9786            
9787              
9788 112   33     812 while (!$_matched && !$commit)
9789             {
9790            
9791 112 50       243 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         243 my $thisprod = $thisrule->{"prods"}[0];
9797 112         160 $text = $_[1];
9798 112         151 my $_savetext;
9799 112         197 @item = (q{SINGLE_QUOTED_STRING});
9800 112         180 %item = (__RULE__ => q{SINGLE_QUOTED_STRING});
9801 112         160 my $repcount = 0;
9802              
9803              
9804 112 50       211 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         173 undef $lastsep;
9810 112         249 $expectation->is(q{})->at($text);
9811            
9812              
9813 112 100 33     1015 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and
  112 100 66     602  
  112   66     177  
  112         581  
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       342 $text = $lastsep . $text if defined $lastsep;
9819            
9820 111         341 $expectation->failed();
9821 111 50       381 Parse::RecDescent::_trace(q{<>},
9822             Parse::RecDescent::_tracefirst($text))
9823             if defined $::RD_TRACE;
9824 111         191 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         4 push @item, $item{__STRING1__}=$_tok;
9831            
9832              
9833 1 50       4 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         5 $expectation->is(q{/(?:\\\\['\\\\]|[^'])*/})->at($text);
9839            
9840              
9841 1 50 33     22 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:(?:\\['\\]|[^'])*)/)
  1 50       20  
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         6 $current_match = substr($text, $-[0], $+[0] - $-[0]);
9852 1         4 substr($text,0,length($current_match),q{});
9853 1 50       3 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         2 undef $lastsep;
9866 1         4 $expectation->is(q{'''})->at($text);
9867            
9868              
9869 1 50 33     23 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and
  1 50 33     9  
  1   33     7  
  1         9  
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         3 push @item, $item{__STRING2__}=$_tok;
9887            
9888              
9889 1 50       8 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         3  
9897 1 50       3 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         2 $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         2 last;
9921             }
9922              
9923             splice
9924 112 100       295 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         243  
9925            
9926 112 100 66     362 unless ( $_matched || defined($score) )
9927             {
9928 111         139 splice @{$thisparser->{deferred}}, $def_at;
  111         199  
9929            
9930              
9931 111         163 $_[1] = $text; # NOT SURE THIS IS NEEDED
9932 111 50       217 Parse::RecDescent::_trace(q{<>},
9933             Parse::RecDescent::_tracefirst($_[1]),
9934             q{SINGLE_QUOTED_STRING},
9935             $tracelevel)
9936             if defined $::RD_TRACE;
9937 111         509 return undef;
9938             }
9939 1 50 33     11 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         3  
9948 1 50       4 $return = $item[$#item] unless defined $return;
9949 1 50       3 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   344 my $thisparser = $_[0];
9969 1     1   8 use vars q{$tracelevel};
  1         2  
  1         939  
9970 21   50     66 local $tracelevel = ($tracelevel||0)+1;
9971 21         38 $ERRORS = 0;
9972 21         65 my $thisrule = $thisparser->{"rules"}{"bodystructure"};
9973              
9974 21 50       49 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         41 my $def_at = @{$thisparser->{deferred}};
  21         54  
9981 21         53 my $err_at = @{$thisparser->{errors}};
  21         49  
9982              
9983 21         67 my $score;
9984             my $score_return;
9985 21         0 my $_tok;
9986 21         35 my $return = undef;
9987 21         37 my $_matched=0;
9988 21         45 my $commit=0;
9989 21         34 my @item = ();
9990 21         52 my %item = ();
9991 21         35 my $repeating = $_[2];
9992 21         32 my $_noactions = $_[3];
9993 21 50       62 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         46  
  21         41  
9994 21         38 my $_itempos = $_[5];
9995 21 50       67 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9996 21         57 my $text;
9997             my $lastsep;
9998 21         0 my $current_match;
9999 21         56 my $expectation = new Parse::RecDescent::Expectation(q{'('});
10000 21         144 $expectation->at($_[1]);
10001            
10002 21         89 my $thisline;
10003 21         77 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10004              
10005            
10006              
10007 21   33     183 while (!$_matched && !$commit)
10008             {
10009            
10010 21 50       49 Parse::RecDescent::_trace(q{Trying production: ['(' part ')']},
10011             Parse::RecDescent::_tracefirst($_[1]),
10012             q{bodystructure},
10013             $tracelevel)
10014             if defined $::RD_TRACE;
10015 21         67 my $thisprod = $thisrule->{"prods"}[0];
10016 21         45 $text = $_[1];
10017 21         30 my $_savetext;
10018 21         54 @item = (q{bodystructure});
10019 21         50 %item = (__RULE__ => q{bodystructure});
10020 21         41 my $repcount = 0;
10021              
10022              
10023 21 50       60 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
10024             Parse::RecDescent::_tracefirst($text),
10025             q{bodystructure},
10026             $tracelevel)
10027             if defined $::RD_TRACE;
10028 21         61 undef $lastsep;
10029 21         65 $expectation->is(q{})->at($text);
10030            
10031              
10032 21 100 33     241 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  21 100 66     185  
  21   66     42  
  21         145  
10033             substr($text,0,length($_tok)) eq $_tok and
10034 20         48 do { substr($text,0,length($_tok)) = ""; 1; }
  20         57  
10035             )
10036             {
10037 1 50       5 $text = $lastsep . $text if defined $lastsep;
10038            
10039 1         5 $expectation->failed();
10040 1 50       5 Parse::RecDescent::_trace(q{<>},
10041             Parse::RecDescent::_tracefirst($text))
10042             if defined $::RD_TRACE;
10043 1         11 last;
10044             }
10045 20 50       59 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10046             . $_tok . q{])},
10047             Parse::RecDescent::_tracefirst($text))
10048             if defined $::RD_TRACE;
10049 20         57 push @item, $item{__STRING1__}=$_tok;
10050            
10051              
10052 20 50       56 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         71 $expectation->is(q{part})->at($text);
10058            
10059 20 50   40   253 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  40         104  
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       322 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         68 $item{q{part(s)}} = $_tok;
10076 20         47 push @item, $_tok;
10077            
10078              
10079              
10080 20 50       51 Parse::RecDescent::_trace(q{Trying terminal: [')']},
10081             Parse::RecDescent::_tracefirst($text),
10082             q{bodystructure},
10083             $tracelevel)
10084             if defined $::RD_TRACE;
10085 20         39 undef $lastsep;
10086 20         48 $expectation->is(q{')'})->at($text);
10087            
10088              
10089 20 50 33     245 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  20 50 33     150  
  20   33     50  
  20         134  
10090             substr($text,0,length($_tok)) eq $_tok and
10091 20         60 do { substr($text,0,length($_tok)) = ""; 1; }
  20         69  
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       59 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10103             . $_tok . q{])},
10104             Parse::RecDescent::_tracefirst($text))
10105             if defined $::RD_TRACE;
10106 20         59 push @item, $item{__STRING2__}=$_tok;
10107            
10108              
10109 20 50       47 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       47 $_tok = ($_noactions) ? 0 : do { $return = $item{'part(s)'} };
  20         50  
10117 20 50       62 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       49 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10124             . $_tok . q{])},
10125             Parse::RecDescent::_tracefirst($text))
10126             if defined $::RD_TRACE;
10127 20         49 push @item, $_tok;
10128 20         54 $item{__ACTION1__}=$_tok;
10129            
10130              
10131 20 50       52 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         40 $_matched = 1;
10140 20         50 last;
10141             }
10142              
10143             splice
10144 21 100       48 @{$thisparser->{deferred}}, $def_at unless $_matched;
  1         3  
10145            
10146 21 100 66     76 unless ( $_matched || defined($score) )
10147             {
10148 1         2 splice @{$thisparser->{deferred}}, $def_at;
  1         3  
10149            
10150              
10151 1         3 $_[1] = $text; # NOT SURE THIS IS NEEDED
10152 1 50       4 Parse::RecDescent::_trace(q{<>},
10153             Parse::RecDescent::_tracefirst($_[1]),
10154             q{bodystructure},
10155             $tracelevel)
10156             if defined $::RD_TRACE;
10157 1         5 return undef;
10158             }
10159 20 50 33     68 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         45 splice @{$thisparser->{errors}}, $err_at;
  20         48  
10168 20 50       44 $return = $item[$#item] unless defined $return;
10169 20 50       68 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         71 $_[1] = $text;
10182 20         166 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   101 my $thisparser = $_[0];
10189 1     1   7 use vars q{$tracelevel};
  1         2  
  1         904  
10190 58   50     136 local $tracelevel = ($tracelevel||0)+1;
10191 58         92 $ERRORS = 0;
10192 58         136 my $thisrule = $thisparser->{"rules"}{"STRINGS"};
10193              
10194 58 50       133 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         76 my $def_at = @{$thisparser->{deferred}};
  58         106  
10201 58         90 my $err_at = @{$thisparser->{errors}};
  58         106  
10202              
10203 58         131 my $score;
10204             my $score_return;
10205 58         0 my $_tok;
10206 58         89 my $return = undef;
10207 58         93 my $_matched=0;
10208 58         77 my $commit=0;
10209 58         103 my @item = ();
10210 58         101 my %item = ();
10211 58         84 my $repeating = $_[2];
10212 58         80 my $_noactions = $_[3];
10213 58 50       113 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  58         80  
  58         95  
10214 58         118 my $_itempos = $_[5];
10215 58 50       130 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10216 58         125 my $text;
10217             my $lastsep;
10218 58         0 my $current_match;
10219 58         154 my $expectation = new Parse::RecDescent::Expectation(q{'('});
10220 58         343 $expectation->at($_[1]);
10221            
10222 58         201 my $thisline;
10223 58         153 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10224              
10225            
10226              
10227 58   33     407 while (!$_matched && !$commit)
10228             {
10229            
10230 58 50       139 Parse::RecDescent::_trace(q{Trying production: ['(' STRING ')']},
10231             Parse::RecDescent::_tracefirst($_[1]),
10232             q{STRINGS},
10233             $tracelevel)
10234             if defined $::RD_TRACE;
10235 58         138 my $thisprod = $thisrule->{"prods"}[0];
10236 58         98 $text = $_[1];
10237 58         72 my $_savetext;
10238 58         98 @item = (q{STRINGS});
10239 58         145 %item = (__RULE__ => q{STRINGS});
10240 58         90 my $repcount = 0;
10241              
10242              
10243 58 50       136 Parse::RecDescent::_trace(q{Trying terminal: ['(']},
10244             Parse::RecDescent::_tracefirst($text),
10245             q{STRINGS},
10246             $tracelevel)
10247             if defined $::RD_TRACE;
10248 58         98 undef $lastsep;
10249 58         128 $expectation->is(q{})->at($text);
10250            
10251              
10252 58 100 33     587 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and
  58 100 66     348  
  58   66     99  
  58         326  
10253             substr($text,0,length($_tok)) eq $_tok and
10254 1         2 do { substr($text,0,length($_tok)) = ""; 1; }
  1         4  
10255             )
10256             {
10257 57 50       191 $text = $lastsep . $text if defined $lastsep;
10258            
10259 57         183 $expectation->failed();
10260 57 50       249 Parse::RecDescent::_trace(q{<>},
10261             Parse::RecDescent::_tracefirst($text))
10262             if defined $::RD_TRACE;
10263 57         110 last;
10264             }
10265 1 50       3 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       4 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         4 $expectation->is(q{STRING})->at($text);
10278            
10279 1 50   2   13 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  2         3  
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       14 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         2 push @item, $_tok;
10297            
10298              
10299              
10300 1 50       4 Parse::RecDescent::_trace(q{Trying terminal: [')']},
10301             Parse::RecDescent::_tracefirst($text),
10302             q{STRINGS},
10303             $tracelevel)
10304             if defined $::RD_TRACE;
10305 1         1 undef $lastsep;
10306 1         11 $expectation->is(q{')'})->at($text);
10307            
10308              
10309 1 50 33     21 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and
  1 50 33     8  
  1   33     2  
  1         9  
10310             substr($text,0,length($_tok)) eq $_tok and
10311 1         3 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       3 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10323             . $_tok . q{])},
10324             Parse::RecDescent::_tracefirst($text))
10325             if defined $::RD_TRACE;
10326 1         10 push @item, $item{__STRING2__}=$_tok;
10327            
10328              
10329 1 50       9 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         3  
10337 1 50       3 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       4 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10344             . $_tok . q{])},
10345             Parse::RecDescent::_tracefirst($text))
10346             if defined $::RD_TRACE;
10347 1         2 push @item, $_tok;
10348 1         3 $item{__ACTION1__}=$_tok;
10349            
10350              
10351 1 50       3 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         1 $_matched = 1;
10360 1         2 last;
10361             }
10362              
10363             splice
10364 58 100       158 @{$thisparser->{deferred}}, $def_at unless $_matched;
  57         141  
10365            
10366 58 100 66     253 unless ( $_matched || defined($score) )
10367             {
10368 57         95 splice @{$thisparser->{deferred}}, $def_at;
  57         99  
10369            
10370              
10371 57         99 $_[1] = $text; # NOT SURE THIS IS NEEDED
10372 57 50       127 Parse::RecDescent::_trace(q{<>},
10373             Parse::RecDescent::_tracefirst($_[1]),
10374             q{STRINGS},
10375             $tracelevel)
10376             if defined $::RD_TRACE;
10377 57         282 return undef;
10378             }
10379 1 50 33     9 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         3  
10388 1 50       3 $return = $item[$#item] unless defined $return;
10389 1 50       2 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         3 $_[1] = $text;
10402 1         7 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   173 my $thisparser = $_[0];
10409 1     1   50 use vars q{$tracelevel};
  1         10  
  1         1144  
10410 111   50     244 local $tracelevel = ($tracelevel||0)+1;
10411 111         155 $ERRORS = 0;
10412 111         275 my $thisrule = $thisparser->{"rules"}{"BARESTRING"};
10413              
10414 111 50       225 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         140 my $def_at = @{$thisparser->{deferred}};
  111         194  
10421 111         155 my $err_at = @{$thisparser->{errors}};
  111         178  
10422              
10423 111         238 my $score;
10424             my $score_return;
10425 111         0 my $_tok;
10426 111         180 my $return = undef;
10427 111         137 my $_matched=0;
10428 111         142 my $commit=0;
10429 111         183 my @item = ();
10430 111         199 my %item = ();
10431 111         158 my $repeating = $_[2];
10432 111         153 my $_noactions = $_[3];
10433 111 50       197 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  111         132  
  111         176  
10434 111         151 my $_itempos = $_[5];
10435 111 50       279 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10436 111         226 my $text;
10437             my $lastsep;
10438 111         0 my $current_match;
10439 111         278 my $expectation = new Parse::RecDescent::Expectation(q{/^[)('"]/});
10440 111         601 $expectation->at($_[1]);
10441            
10442 111         376 my $thisline;
10443 111         298 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10444              
10445            
10446              
10447 111   33     836 while (!$_matched && !$commit)
10448             {
10449            
10450 111 50       266 Parse::RecDescent::_trace(q{Trying production: [/^[)('"]/ /^(?!\\(|\\))(?:\\\\ |\\S)+/]},
10451             Parse::RecDescent::_tracefirst($_[1]),
10452             q{BARESTRING},
10453             $tracelevel)
10454             if defined $::RD_TRACE;
10455 111         221 my $thisprod = $thisrule->{"prods"}[0];
10456 111         200 $text = $_[1];
10457 111         142 my $_savetext;
10458 111         187 @item = (q{BARESTRING});
10459 111         247 %item = (__RULE__ => q{BARESTRING});
10460 111         146 my $repcount = 0;
10461              
10462              
10463 111 50       203 Parse::RecDescent::_trace(q{Trying terminal: [/^[)('"]/]}, Parse::RecDescent::_tracefirst($text),
10464             q{BARESTRING},
10465             $tracelevel)
10466             if defined $::RD_TRACE;
10467 111         212 undef $lastsep;
10468 111         235 $expectation->is(q{})->at($text);
10469 111         590 $_savetext = $text;
10470              
10471 111 100 33     654 if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^[)('"])/)
  111 50       796  
10472             {
10473 111         239 $text = $_savetext;
10474 111         294 $expectation->failed();
10475 111 50       394 Parse::RecDescent::_trace(q{<>},
10476             Parse::RecDescent::_tracefirst($text))
10477             if defined $::RD_TRACE;
10478              
10479 111         212 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       227 @{$thisparser->{deferred}}, $def_at unless $_matched;
  111         242  
10553            
10554 111 50 33     362 unless ( $_matched || defined($score) )
10555             {
10556 111         151 splice @{$thisparser->{deferred}}, $def_at;
  111         183  
10557            
10558              
10559 111         174 $_[1] = $text; # NOT SURE THIS IS NEEDED
10560 111 50       213 Parse::RecDescent::_trace(q{<>},
10561             Parse::RecDescent::_tracefirst($_[1]),
10562             q{BARESTRING},
10563             $tracelevel)
10564             if defined $::RD_TRACE;
10565 111         502 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   1183 my $thisparser = $_[0];
10597 1     1   7 use vars q{$tracelevel};
  1         2  
  1         270  
10598 102   50     277 local $tracelevel = ($tracelevel||0)+1;
10599 102         206 $ERRORS = 0;
10600 102         234 my $thisrule = $thisparser->{"rules"}{"bodyparms"};
10601              
10602 102 50       292 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         166 my $def_at = @{$thisparser->{deferred}};
  102         221  
10609 102         170 my $err_at = @{$thisparser->{errors}};
  102         182  
10610              
10611 102         330 my $score;
10612             my $score_return;
10613 102         0 my $_tok;
10614 102         160 my $return = undef;
10615 102         201 my $_matched=0;
10616 102         182 my $commit=0;
10617 102         175 my @item = ();
10618 102         180 my %item = ();
10619 102         152 my $repeating = $_[2];
10620 102         140 my $_noactions = $_[3];
10621 102 50       241 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         164  
  102         198  
10622 102         180 my $_itempos = $_[5];
10623 102 50       272 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10624 102         224 my $text;
10625             my $lastsep;
10626 102         0 my $current_match;
10627 102         296 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or KVPAIRS});
10628 102         639 $expectation->at($_[1]);
10629            
10630 102         354 my $thisline;
10631 102         327 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10632              
10633            
10634              
10635 102   33     826 while (!$_matched && !$commit)
10636             {
10637            
10638 102 50       220 Parse::RecDescent::_trace(q{Trying production: [NIL]},
10639             Parse::RecDescent::_tracefirst($_[1]),
10640             q{bodyparms},
10641             $tracelevel)
10642             if defined $::RD_TRACE;
10643 102         280 my $thisprod = $thisrule->{"prods"}[0];
10644 102         191 $text = $_[1];
10645 102         156 my $_savetext;
10646 102         204 @item = (q{bodyparms});
10647 102         242 %item = (__RULE__ => q{bodyparms});
10648 102         144 my $repcount = 0;
10649              
10650              
10651 102 50       230 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   7 if (1) { no strict qw{refs};
  1         2  
  1         242  
  102         157  
10657 102         245 $expectation->is(q{})->at($text);
10658 102 100   102   903 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         200  
10659             {
10660            
10661 79 50       205 Parse::RecDescent::_trace(q{<>},
10662             Parse::RecDescent::_tracefirst($text),
10663             q{bodyparms},
10664             $tracelevel)
10665             if defined $::RD_TRACE;
10666 79         225 $expectation->failed();
10667 79         251 last;
10668             }
10669 23 50       100 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         60 $item{q{NIL}} = $_tok;
10677 23         53 push @item, $_tok;
10678            
10679             }
10680              
10681 23 50       62 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         31 $_matched = 1;
10690 23         51 last;
10691             }
10692              
10693             splice
10694 102 100       305 @{$thisparser->{deferred}}, $def_at unless $_matched;
  79         174  
10695            
10696 102   66     413 while (!$_matched && !$commit)
10697             {
10698            
10699 79 50       184 Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]},
10700             Parse::RecDescent::_tracefirst($_[1]),
10701             q{bodyparms},
10702             $tracelevel)
10703             if defined $::RD_TRACE;
10704 79         159 my $thisprod = $thisrule->{"prods"}[1];
10705 79         124 $text = $_[1];
10706 79         139 my $_savetext;
10707 79         201 @item = (q{bodyparms});
10708 79         199 %item = (__RULE__ => q{bodyparms});
10709 79         113 my $repcount = 0;
10710              
10711              
10712 79 50       169 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   6 if (1) { no strict qw{refs};
  1         3  
  1         403  
  79         113  
10718 79         211 $expectation->is(q{})->at($text);
10719 79 100   79   855 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  79         153  
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         9 $expectation->failed();
10728 3         9 last;
10729             }
10730 76 50       254 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         157 $item{q{KVPAIRS}} = $_tok;
10738 76         149 push @item, $_tok;
10739            
10740             }
10741              
10742 76 50       207 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         137 $_matched = 1;
10751 76         134 last;
10752             }
10753              
10754             splice
10755 102 100       259 @{$thisparser->{deferred}}, $def_at unless $_matched;
  3         8  
10756            
10757 102 100 66     349 unless ( $_matched || defined($score) )
10758             {
10759 3         6 splice @{$thisparser->{deferred}}, $def_at;
  3         9  
10760            
10761              
10762 3         6 $_[1] = $text; # NOT SURE THIS IS NEEDED
10763 3 50       9 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     404 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         134 splice @{$thisparser->{errors}}, $err_at;
  99         188  
10779 99 50       297 $return = $item[$#item] unless defined $return;
10780 99 50       249 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         183 $_[1] = $text;
10793 99         504 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   1112 my $thisparser = $_[0];
10800 1     1   7 use vars q{$tracelevel};
  1         2  
  1         980  
10801 824   50     1555 local $tracelevel = ($tracelevel||0)+1;
10802 824         1121 $ERRORS = 0;
10803 824         1279 my $thisrule = $thisparser->{"rules"}{"DOUBLE_QUOTED_STRING"};
10804              
10805 824 50       1444 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         943 my $def_at = @{$thisparser->{deferred}};
  824         1192  
10812 824         999 my $err_at = @{$thisparser->{errors}};
  824         1134  
10813              
10814 824         1495 my $score;
10815             my $score_return;
10816 824         0 my $_tok;
10817 824         1094 my $return = undef;
10818 824         930 my $_matched=0;
10819 824         931 my $commit=0;
10820 824         1045 my @item = ();
10821 824         983 my %item = ();
10822 824         1113 my $repeating = $_[2];
10823 824         1001 my $_noactions = $_[3];
10824 824 50       1292 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  824         962  
  824         1117  
10825 824         1049 my $_itempos = $_[5];
10826 824 50       1449 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10827 824         1690 my $text;
10828             my $lastsep;
10829 824         0 my $current_match;
10830 824         1695 my $expectation = new Parse::RecDescent::Expectation(q{'"'});
10831 824         4184 $expectation->at($_[1]);
10832            
10833 824         2904 my $thisline;
10834 824         1817 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10835              
10836            
10837              
10838 824   33     4919 while (!$_matched && !$commit)
10839             {
10840            
10841 824 50       1381 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         1482 my $thisprod = $thisrule->{"prods"}[0];
10847 824         1189 $text = $_[1];
10848 824         1183 my $_savetext;
10849 824         1289 @item = (q{DOUBLE_QUOTED_STRING});
10850 824         1443 %item = (__RULE__ => q{DOUBLE_QUOTED_STRING});
10851 824         1113 my $repcount = 0;
10852              
10853              
10854 824 50       1382 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         1134 undef $lastsep;
10860 824         1689 $expectation->is(q{})->at($text);
10861            
10862              
10863 824 100 66     7362 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\"/)
  824 100       6178  
10864             {
10865 112 50       416 $text = $lastsep . $text if defined $lastsep;
10866            
10867 112         364 $expectation->failed();
10868 112 50       413 Parse::RecDescent::_trace(qq{<>},
10869             Parse::RecDescent::_tracefirst($text))
10870             if defined $::RD_TRACE;
10871 112         250 last;
10872             }
10873 712         2936 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10874 712         1999 substr($text,0,length($current_match),q{});
10875 712 50       1369 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10876             . $current_match . q{])},
10877             Parse::RecDescent::_tracefirst($text))
10878             if defined $::RD_TRACE;
10879 712         1596 push @item, $item{__STRING1__}=$current_match;
10880            
10881              
10882 712 50       1236 Parse::RecDescent::_trace(q{Trying terminal: [/(?:\\\\["\\\\]|[^"])*/]}, Parse::RecDescent::_tracefirst($text),
10883             q{DOUBLE_QUOTED_STRING},
10884             $tracelevel)
10885             if defined $::RD_TRACE;
10886 712         1001 undef $lastsep;
10887 712         1464 $expectation->is(q{/(?:\\\\["\\\\]|[^"])*/})->at($text);
10888            
10889              
10890 712 50 33     5888 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:(?:\\["\\]|[^"])*)/)
  712 50       7042  
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         2692 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10901 712         1818 substr($text,0,length($current_match),q{});
10902 712 50       1382 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10903             . $current_match . q{])},
10904             Parse::RecDescent::_tracefirst($text))
10905             if defined $::RD_TRACE;
10906 712         1529 push @item, $item{__PATTERN1__}=$current_match;
10907            
10908              
10909 712 50       1230 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         910 undef $lastsep;
10915 712         1397 $expectation->is(q{'"'})->at($text);
10916            
10917              
10918 712 50 33     5706 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\"/)
  712 50       4578  
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         2448 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10929 712         1824 substr($text,0,length($current_match),q{});
10930 712 50       1324 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10931             . $current_match . q{])},
10932             Parse::RecDescent::_tracefirst($text))
10933             if defined $::RD_TRACE;
10934 712         1451 push @item, $item{__STRING2__}=$current_match;
10935            
10936              
10937 712 50       1331 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       1147 $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} };
  712         1335  
10945 712 50       1521 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       1086 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10952             . $_tok . q{])},
10953             Parse::RecDescent::_tracefirst($text))
10954             if defined $::RD_TRACE;
10955 712         935 push @item, $_tok;
10956 712         1152 $item{__ACTION1__}=$_tok;
10957            
10958              
10959 712 50       1098 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         968 $_matched = 1;
10968 712         1418 last;
10969             }
10970              
10971             splice
10972 824 100       1427 @{$thisparser->{deferred}}, $def_at unless $_matched;
  112         234  
10973            
10974 824 100 66     1826 unless ( $_matched || defined($score) )
10975             {
10976 112         150 splice @{$thisparser->{deferred}}, $def_at;
  112         192  
10977            
10978              
10979 112         230 $_[1] = $text; # NOT SURE THIS IS NEEDED
10980 112 50       514 Parse::RecDescent::_trace(q{<>},
10981             Parse::RecDescent::_tracefirst($_[1]),
10982             q{DOUBLE_QUOTED_STRING},
10983             $tracelevel)
10984             if defined $::RD_TRACE;
10985 112         521 return undef;
10986             }
10987 712 50 33     1523 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         918 splice @{$thisparser->{errors}}, $err_at;
  712         1458  
10996 712 50       1192 $return = $item[$#item] unless defined $return;
10997 712 50       1297 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         1507 $_[1] = $text;
11010 712         3838 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   176 my $thisparser = $_[0];
11017 1     1   7 use vars q{$tracelevel};
  1         2  
  1         275  
11018 94   50     225 local $tracelevel = ($tracelevel||0)+1;
11019 94         131 $ERRORS = 0;
11020 94         172 my $thisrule = $thisparser->{"rules"}{"sourceroute"};
11021              
11022 94 50       182 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         124 my $def_at = @{$thisparser->{deferred}};
  94         172  
11029 94         144 my $err_at = @{$thisparser->{errors}};
  94         148  
11030              
11031 94         202 my $score;
11032             my $score_return;
11033 94         0 my $_tok;
11034 94         123 my $return = undef;
11035 94         145 my $_matched=0;
11036 94         118 my $commit=0;
11037 94         147 my @item = ();
11038 94         137 my %item = ();
11039 94         132 my $repeating = $_[2];
11040 94         110 my $_noactions = $_[3];
11041 94 50       174 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         127  
  94         129  
11042 94         150 my $_itempos = $_[5];
11043 94 50       206 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11044 94         250 my $text;
11045             my $lastsep;
11046 94         0 my $current_match;
11047 94         240 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
11048 94         539 $expectation->at($_[1]);
11049            
11050 94         378 my $thisline;
11051 94         269 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11052              
11053            
11054              
11055 94   33     640 while (!$_matched && !$commit)
11056             {
11057            
11058 94 50       186 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11059             Parse::RecDescent::_tracefirst($_[1]),
11060             q{sourceroute},
11061             $tracelevel)
11062             if defined $::RD_TRACE;
11063 94         193 my $thisprod = $thisrule->{"prods"}[0];
11064 94         146 $text = $_[1];
11065 94         113 my $_savetext;
11066 94         172 @item = (q{sourceroute});
11067 94         168 %item = (__RULE__ => q{sourceroute});
11068 94         119 my $repcount = 0;
11069              
11070              
11071 94 50       182 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   6 if (1) { no strict qw{refs};
  1         4  
  1         240  
  94         121  
11077 94         190 $expectation->is(q{})->at($text);
11078 94 50   94   709 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         152  
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       291 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         185 $item{q{NIL}} = $_tok;
11097 94         151 push @item, $_tok;
11098            
11099             }
11100              
11101 94 50       165 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         118 $_matched = 1;
11110 94         133 last;
11111             }
11112              
11113             splice
11114 94 50       167 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11115            
11116 94   33     229 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   6 if (1) { no strict qw{refs};
  1         2  
  1         411  
  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       219 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11176            
11177 94 50 33     225 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     287 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         117 splice @{$thisparser->{errors}}, $err_at;
  94         163  
11199 94 50       236 $return = $item[$#item] unless defined $return;
11200 94 50       184 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         169 $_[1] = $text;
11213 94         389 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   63 my $thisparser = $_[0];
11220 1     1   7 use vars q{$tracelevel};
  1         11  
  1         276  
11221 32   50     97 local $tracelevel = ($tracelevel||0)+1;
11222 32         64 $ERRORS = 0;
11223 32         85 my $thisrule = $thisparser->{"rules"}{"bodytype"};
11224              
11225 32 50       79 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         46 my $def_at = @{$thisparser->{deferred}};
  32         84  
11232 32         44 my $err_at = @{$thisparser->{errors}};
  32         63  
11233              
11234 32         97 my $score;
11235             my $score_return;
11236 32         0 my $_tok;
11237 32         61 my $return = undef;
11238 32         59 my $_matched=0;
11239 32         42 my $commit=0;
11240 32         60 my @item = ();
11241 32         55 my %item = ();
11242 32         51 my $repeating = $_[2];
11243 32         61 my $_noactions = $_[3];
11244 32 50       79 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  32         46  
  32         54  
11245 32         58 my $_itempos = $_[5];
11246 32 50       87 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11247 32         89 my $text;
11248             my $lastsep;
11249 32         0 my $current_match;
11250 32         112 my $expectation = new Parse::RecDescent::Expectation(q{STRING});
11251 32         178 $expectation->at($_[1]);
11252            
11253 32         114 my $thisline;
11254 32         90 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11255              
11256            
11257              
11258 32   33     252 while (!$_matched && !$commit)
11259             {
11260            
11261 32 50       104 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11262             Parse::RecDescent::_tracefirst($_[1]),
11263             q{bodytype},
11264             $tracelevel)
11265             if defined $::RD_TRACE;
11266 32         99 my $thisprod = $thisrule->{"prods"}[0];
11267 32         60 $text = $_[1];
11268 32         45 my $_savetext;
11269 32         71 @item = (q{bodytype});
11270 32         72 %item = (__RULE__ => q{bodytype});
11271 32         51 my $repcount = 0;
11272              
11273              
11274 32 50       87 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   7 if (1) { no strict qw{refs};
  1         2  
  1         349  
  32         46  
11280 32         74 $expectation->is(q{})->at($text);
11281 32 100   32   250 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  32         56  
11282             {
11283            
11284 20 50       52 Parse::RecDescent::_trace(q{<>},
11285             Parse::RecDescent::_tracefirst($text),
11286             q{bodytype},
11287             $tracelevel)
11288             if defined $::RD_TRACE;
11289 20         65 $expectation->failed();
11290 20         60 last;
11291             }
11292 12 50       47 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         28 $item{q{STRING}} = $_tok;
11300 12         29 push @item, $_tok;
11301            
11302             }
11303              
11304 12 50       39 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         28 $_matched = 1;
11313 12         26 last;
11314             }
11315              
11316             splice
11317 32 100       109 @{$thisparser->{deferred}}, $def_at unless $_matched;
  20         45  
11318            
11319 32 100 66     128 unless ( $_matched || defined($score) )
11320             {
11321 20         32 splice @{$thisparser->{deferred}}, $def_at;
  20         37  
11322            
11323              
11324 20         37 $_[1] = $text; # NOT SURE THIS IS NEEDED
11325 20 50       51 Parse::RecDescent::_trace(q{<>},
11326             Parse::RecDescent::_tracefirst($_[1]),
11327             q{bodytype},
11328             $tracelevel)
11329             if defined $::RD_TRACE;
11330 20         107 return undef;
11331             }
11332 12 50 33     64 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         26 splice @{$thisparser->{errors}}, $err_at;
  12         31  
11341 12 50       38 $return = $item[$#item] unless defined $return;
11342 12 50       45 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         27 $_[1] = $text;
11355 12         64 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   49 my $thisparser = $_[0];
11362 1     1   7 use vars q{$tracelevel};
  1         2  
  1         281  
11363 24   50     78 local $tracelevel = ($tracelevel||0)+1;
11364 24         42 $ERRORS = 0;
11365 24         74 my $thisrule = $thisparser->{"rules"}{"messageid"};
11366              
11367 24 50       52 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         41 my $def_at = @{$thisparser->{deferred}};
  24         62  
11374 24         31 my $err_at = @{$thisparser->{errors}};
  24         52  
11375              
11376 24         93 my $score;
11377             my $score_return;
11378 24         0 my $_tok;
11379 24         44 my $return = undef;
11380 24         31 my $_matched=0;
11381 24         39 my $commit=0;
11382 24         46 my @item = ();
11383 24         41 my %item = ();
11384 24         37 my $repeating = $_[2];
11385 24         36 my $_noactions = $_[3];
11386 24 50       58 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         30  
  24         66  
11387 24         44 my $_itempos = $_[5];
11388 24 50       112 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11389 24         77 my $text;
11390             my $lastsep;
11391 24         0 my $current_match;
11392 24         104 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
11393 24         179 $expectation->at($_[1]);
11394            
11395 24         87 my $thisline;
11396 24         79 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11397              
11398            
11399              
11400 24   33     201 while (!$_matched && !$commit)
11401             {
11402            
11403 24 50       68 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11404             Parse::RecDescent::_tracefirst($_[1]),
11405             q{messageid},
11406             $tracelevel)
11407             if defined $::RD_TRACE;
11408 24         66 my $thisprod = $thisrule->{"prods"}[0];
11409 24         54 $text = $_[1];
11410 24         38 my $_savetext;
11411 24         65 @item = (q{messageid});
11412 24         71 %item = (__RULE__ => q{messageid});
11413 24         47 my $repcount = 0;
11414              
11415              
11416 24 50       62 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   6 if (1) { no strict qw{refs};
  1         3  
  1         240  
  24         42  
11422 24         55 $expectation->is(q{})->at($text);
11423 24 50   24   264 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         42  
11424             {
11425            
11426 24 50       64 Parse::RecDescent::_trace(q{<>},
11427             Parse::RecDescent::_tracefirst($text),
11428             q{messageid},
11429             $tracelevel)
11430             if defined $::RD_TRACE;
11431 24         77 $expectation->failed();
11432 24         78 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       81 @{$thisparser->{deferred}}, $def_at unless $_matched;
  24         78  
11460            
11461 24   33     131 while (!$_matched && !$commit)
11462             {
11463            
11464 24 50       62 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11465             Parse::RecDescent::_tracefirst($_[1]),
11466             q{messageid},
11467             $tracelevel)
11468             if defined $::RD_TRACE;
11469 24         56 my $thisprod = $thisrule->{"prods"}[1];
11470 24         60 $text = $_[1];
11471 24         45 my $_savetext;
11472 24         57 @item = (q{messageid});
11473 24         61 %item = (__RULE__ => q{messageid});
11474 24         33 my $repcount = 0;
11475              
11476              
11477 24 50       80 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   7 if (1) { no strict qw{refs};
  1         2  
  1         372  
  24         37  
11483 24         67 $expectation->is(q{})->at($text);
11484 24 50   24   227 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         43  
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       84 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         52 $item{q{STRING}} = $_tok;
11503 24         57 push @item, $_tok;
11504            
11505             }
11506              
11507 24 50       70 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         62 $_matched = 1;
11516 24         53 last;
11517             }
11518              
11519             splice
11520 24 50       68 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11521            
11522 24 50 33     87 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     103 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         39 splice @{$thisparser->{errors}}, $err_at;
  24         59  
11544 24 50       62 $return = $item[$#item] unless defined $return;
11545 24 50       81 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         78 $_[1] = $text;
11558 24         139 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   235 my $thisparser = $_[0];
11565 1     1   6 use vars q{$tracelevel};
  1         2  
  1         261  
11566 129   50     349 local $tracelevel = ($tracelevel||0)+1;
11567 129         173 $ERRORS = 0;
11568 129         279 my $thisrule = $thisparser->{"rules"}{"value"};
11569              
11570 129 50       283 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         168 my $def_at = @{$thisparser->{deferred}};
  129         228  
11577 129         226 my $err_at = @{$thisparser->{errors}};
  129         209  
11578              
11579 129         338 my $score;
11580             my $score_return;
11581 129         0 my $_tok;
11582 129         184 my $return = undef;
11583 129         195 my $_matched=0;
11584 129         208 my $commit=0;
11585 129         235 my @item = ();
11586 129         261 my %item = ();
11587 129         170 my $repeating = $_[2];
11588 129         194 my $_noactions = $_[3];
11589 129 50       257 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  129         177  
  129         202  
11590 129         224 my $_itempos = $_[5];
11591 129 50       305 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11592 129         264 my $text;
11593             my $lastsep;
11594 129         0 my $current_match;
11595 129         352 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or NUMBER, or STRING, or KVPAIRS});
11596 129         754 $expectation->at($_[1]);
11597            
11598 129         433 my $thisline;
11599 129         433 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11600              
11601            
11602              
11603 129   33     1003 while (!$_matched && !$commit)
11604             {
11605            
11606 129 50       291 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11607             Parse::RecDescent::_tracefirst($_[1]),
11608             q{value},
11609             $tracelevel)
11610             if defined $::RD_TRACE;
11611 129         291 my $thisprod = $thisrule->{"prods"}[0];
11612 129         213 $text = $_[1];
11613 129         167 my $_savetext;
11614 129         240 @item = (q{value});
11615 129         260 %item = (__RULE__ => q{value});
11616 129         233 my $repcount = 0;
11617              
11618              
11619 129 50       337 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   6 if (1) { no strict qw{refs};
  1         2  
  1         235  
  129         174  
11625 129         267 $expectation->is(q{})->at($text);
11626 129 100   129   1052 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  129         275  
11627             {
11628            
11629 117 50       256 Parse::RecDescent::_trace(q{<>},
11630             Parse::RecDescent::_tracefirst($text),
11631             q{value},
11632             $tracelevel)
11633             if defined $::RD_TRACE;
11634 117         312 $expectation->failed();
11635 117         359 last;
11636             }
11637 12 50       65 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         33 $item{q{NIL}} = $_tok;
11645 12         32 push @item, $_tok;
11646            
11647             }
11648              
11649 12 50       32 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         36 $_matched = 1;
11658 12         24 last;
11659             }
11660              
11661             splice
11662 129 100       458 @{$thisparser->{deferred}}, $def_at unless $_matched;
  117         281  
11663            
11664 129   66     496 while (!$_matched && !$commit)
11665             {
11666            
11667 117 50       236 Parse::RecDescent::_trace(q{Trying production: [NUMBER]},
11668             Parse::RecDescent::_tracefirst($_[1]),
11669             q{value},
11670             $tracelevel)
11671             if defined $::RD_TRACE;
11672 117         196 my $thisprod = $thisrule->{"prods"}[1];
11673 117         199 $text = $_[1];
11674 117         162 my $_savetext;
11675 117         227 @item = (q{value});
11676 117         256 %item = (__RULE__ => q{value});
11677 117         158 my $repcount = 0;
11678              
11679              
11680 117 50       255 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   7 if (1) { no strict qw{refs};
  1         2  
  1         239  
  117         156  
11686 117         221 $expectation->is(q{})->at($text);
11687 117 50   117   1000 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  117         220  
11688             {
11689            
11690 117 50       304 Parse::RecDescent::_trace(q{<>},
11691             Parse::RecDescent::_tracefirst($text),
11692             q{value},
11693             $tracelevel)
11694             if defined $::RD_TRACE;
11695 117         296 $expectation->failed();
11696 117         331 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       382 @{$thisparser->{deferred}}, $def_at unless $_matched;
  117         227  
11724            
11725 129   66     449 while (!$_matched && !$commit)
11726             {
11727            
11728 117 50       218 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11729             Parse::RecDescent::_tracefirst($_[1]),
11730             q{value},
11731             $tracelevel)
11732             if defined $::RD_TRACE;
11733 117         231 my $thisprod = $thisrule->{"prods"}[2];
11734 117         210 $text = $_[1];
11735 117         143 my $_savetext;
11736 117         219 @item = (q{value});
11737 117         232 %item = (__RULE__ => q{value});
11738 117         189 my $repcount = 0;
11739              
11740              
11741 117 50       288 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   6 if (1) { no strict qw{refs};
  1         2  
  1         234  
  117         163  
11747 117         280 $expectation->is(q{})->at($text);
11748 117 100   117   985 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  117         192  
11749             {
11750            
11751 16 50       61 Parse::RecDescent::_trace(q{<>},
11752             Parse::RecDescent::_tracefirst($text),
11753             q{value},
11754             $tracelevel)
11755             if defined $::RD_TRACE;
11756 16         60 $expectation->failed();
11757 16         52 last;
11758             }
11759 101 50       347 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         204 $item{q{STRING}} = $_tok;
11767 101         209 push @item, $_tok;
11768            
11769             }
11770              
11771 101 50       212 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         158 $_matched = 1;
11780 101         189 last;
11781             }
11782              
11783             splice
11784 129 100       283 @{$thisparser->{deferred}}, $def_at unless $_matched;
  16         40  
11785            
11786 129   66     366 while (!$_matched && !$commit)
11787             {
11788            
11789 16 50       57 Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]},
11790             Parse::RecDescent::_tracefirst($_[1]),
11791             q{value},
11792             $tracelevel)
11793             if defined $::RD_TRACE;
11794 16         41 my $thisprod = $thisrule->{"prods"}[3];
11795 16         33 $text = $_[1];
11796 16         28 my $_savetext;
11797 16         37 @item = (q{value});
11798 16         47 %item = (__RULE__ => q{value});
11799 16         30 my $repcount = 0;
11800              
11801              
11802 16 50       46 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   6 if (1) { no strict qw{refs};
  1         2  
  1         423  
  16         24  
11808 16         49 $expectation->is(q{})->at($text);
11809 16 50   16   177 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  16         28  
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       78 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         41 $item{q{KVPAIRS}} = $_tok;
11828 16         35 push @item, $_tok;
11829            
11830             }
11831              
11832 16 50       43 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         26 $_matched = 1;
11841 16         29 last;
11842             }
11843              
11844             splice
11845 129 50       334 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
11846            
11847 129 50 33     259 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     543 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         189 splice @{$thisparser->{errors}}, $err_at;
  129         277  
11869 129 50       320 $return = $item[$#item] unless defined $return;
11870 129 50       267 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         236 $_[1] = $text;
11883 129         616 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   154 my $thisparser = $_[0];
11890 1     1   6 use vars q{$tracelevel};
  1         2  
  1         324  
11891 94   50     210 local $tracelevel = ($tracelevel||0)+1;
11892 94         135 $ERRORS = 0;
11893 94         183 my $thisrule = $thisparser->{"rules"}{"personalname"};
11894              
11895 94 50       189 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         132 my $def_at = @{$thisparser->{deferred}};
  94         144  
11902 94         141 my $err_at = @{$thisparser->{errors}};
  94         137  
11903              
11904 94         226 my $score;
11905             my $score_return;
11906 94         0 my $_tok;
11907 94         125 my $return = undef;
11908 94         153 my $_matched=0;
11909 94         121 my $commit=0;
11910 94         146 my @item = ();
11911 94         145 my %item = ();
11912 94         155 my $repeating = $_[2];
11913 94         148 my $_noactions = $_[3];
11914 94 50       176 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  94         130  
  94         152  
11915 94         139 my $_itempos = $_[5];
11916 94 50       189 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11917 94         224 my $text;
11918             my $lastsep;
11919 94         0 my $current_match;
11920 94         213 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
11921 94         537 $expectation->at($_[1]);
11922            
11923 94         415 my $thisline;
11924 94         257 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11925              
11926            
11927              
11928 94   33     659 while (!$_matched && !$commit)
11929             {
11930            
11931 94 50       300 Parse::RecDescent::_trace(q{Trying production: [NIL]},
11932             Parse::RecDescent::_tracefirst($_[1]),
11933             q{personalname},
11934             $tracelevel)
11935             if defined $::RD_TRACE;
11936 94         216 my $thisprod = $thisrule->{"prods"}[0];
11937 94         244 $text = $_[1];
11938 94         125 my $_savetext;
11939 94         156 @item = (q{personalname});
11940 94         168 %item = (__RULE__ => q{personalname});
11941 94         145 my $repcount = 0;
11942              
11943              
11944 94 50       190 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   6 if (1) { no strict qw{refs};
  1         2  
  1         253  
  94         122  
11950 94         206 $expectation->is(q{})->at($text);
11951 94 100   94   780 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  94         146  
11952             {
11953            
11954 70 50       154 Parse::RecDescent::_trace(q{<>},
11955             Parse::RecDescent::_tracefirst($text),
11956             q{personalname},
11957             $tracelevel)
11958             if defined $::RD_TRACE;
11959 70         186 $expectation->failed();
11960 70         500 last;
11961             }
11962 24 50       108 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         59 $item{q{NIL}} = $_tok;
11970 24         51 push @item, $_tok;
11971            
11972             }
11973              
11974 24 50       63 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         37 $_matched = 1;
11983 24         48 last;
11984             }
11985              
11986             splice
11987 94 100       270 @{$thisparser->{deferred}}, $def_at unless $_matched;
  70         169  
11988            
11989 94   66     304 while (!$_matched && !$commit)
11990             {
11991            
11992 70 50       144 Parse::RecDescent::_trace(q{Trying production: [STRING]},
11993             Parse::RecDescent::_tracefirst($_[1]),
11994             q{personalname},
11995             $tracelevel)
11996             if defined $::RD_TRACE;
11997 70         138 my $thisprod = $thisrule->{"prods"}[1];
11998 70         151 $text = $_[1];
11999 70         104 my $_savetext;
12000 70         149 @item = (q{personalname});
12001 70         143 %item = (__RULE__ => q{personalname});
12002 70         108 my $repcount = 0;
12003              
12004              
12005 70 50       128 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   6 if (1) { no strict qw{refs};
  1         2  
  1         360  
  70         107  
12011 70         176 $expectation->is(q{})->at($text);
12012 70 50   70   612 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  70         119  
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       208 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         130 $item{q{STRING}} = $_tok;
12031 70         114 push @item, $_tok;
12032            
12033             }
12034              
12035 70 50       135 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         96 $_matched = 1;
12044 70         114 last;
12045             }
12046              
12047             splice
12048 94 50       199 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
12049            
12050 94 50 33     233 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     345 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         136 splice @{$thisparser->{errors}}, $err_at;
  94         156  
12072 94 50       208 $return = $item[$#item] unless defined $return;
12073 94 50       199 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         173 $_[1] = $text;
12086 94         373 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   50 my $thisparser = $_[0];
12093 1     1   7 use vars q{$tracelevel};
  1         2  
  1         303  
12094 24   50     101 local $tracelevel = ($tracelevel||0)+1;
12095 24         43 $ERRORS = 0;
12096 24         70 my $thisrule = $thisparser->{"rules"}{"cc"};
12097              
12098 24 50       57 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         53 my $def_at = @{$thisparser->{deferred}};
  24         57  
12105 24         39 my $err_at = @{$thisparser->{errors}};
  24         43  
12106              
12107 24         70 my $score;
12108             my $score_return;
12109 24         0 my $_tok;
12110 24         39 my $return = undef;
12111 24         29 my $_matched=0;
12112 24         40 my $commit=0;
12113 24         42 my @item = ();
12114 24         42 my %item = ();
12115 24         45 my $repeating = $_[2];
12116 24         41 my $_noactions = $_[3];
12117 24 50       61 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         39  
  24         46  
12118 24         48 my $_itempos = $_[5];
12119 24 50       78 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12120 24         85 my $text;
12121             my $lastsep;
12122 24         0 my $current_match;
12123 24         78 my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES});
12124 24         157 $expectation->at($_[1]);
12125            
12126 24         91 my $thisline;
12127 24         93 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12128              
12129            
12130              
12131 24   33     201 while (!$_matched && !$commit)
12132             {
12133            
12134 24 50       75 Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]},
12135             Parse::RecDescent::_tracefirst($_[1]),
12136             q{cc},
12137             $tracelevel)
12138             if defined $::RD_TRACE;
12139 24         68 my $thisprod = $thisrule->{"prods"}[0];
12140 24         50 $text = $_[1];
12141 24         38 my $_savetext;
12142 24         59 @item = (q{cc});
12143 24         60 %item = (__RULE__ => q{cc});
12144 24         36 my $repcount = 0;
12145              
12146              
12147 24 50       59 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   6 if (1) { no strict qw{refs};
  1         99  
  1         338  
  24         48  
12153 24         69 $expectation->is(q{})->at($text);
12154 24 50   24   242 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         56  
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       103 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         52 $item{q{ADDRESSES}} = $_tok;
12173 24         49 push @item, $_tok;
12174            
12175             }
12176              
12177 24 50       58 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         42 $_matched = 1;
12186 24         46 last;
12187             }
12188              
12189             splice
12190 24 50       73 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
12191            
12192 24 50 33     98 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     125 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         49 splice @{$thisparser->{errors}}, $err_at;
  24         66  
12214 24 50       70 $return = $item[$#item] unless defined $return;
12215 24 50       65 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         62 $_[1] = $text;
12228 24         117 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   402 my $thisparser = $_[0];
12235 1     1   6 use vars q{$tracelevel};
  1         2  
  1         725  
12236 249   50     501 local $tracelevel = ($tracelevel||0)+1;
12237 249         363 $ERRORS = 0;
12238 249         475 my $thisrule = $thisparser->{"rules"}{"NUMBER"};
12239              
12240 249 50       428 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         299 my $def_at = @{$thisparser->{deferred}};
  249         424  
12247 249         353 my $err_at = @{$thisparser->{errors}};
  249         362  
12248              
12249 249         576 my $score;
12250             my $score_return;
12251 249         0 my $_tok;
12252 249         313 my $return = undef;
12253 249         350 my $_matched=0;
12254 249         446 my $commit=0;
12255 249         347 my @item = ();
12256 249         345 my %item = ();
12257 249         329 my $repeating = $_[2];
12258 249         313 my $_noactions = $_[3];
12259 249 50       526 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  249         303  
  249         438  
12260 249         376 my $_itempos = $_[5];
12261 249 50       677 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12262 249         500 my $text;
12263             my $lastsep;
12264 249         0 my $current_match;
12265 249         567 my $expectation = new Parse::RecDescent::Expectation(q{/^(\\d+)/});
12266 249         1510 $expectation->at($_[1]);
12267            
12268 249         813 my $thisline;
12269 249         685 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12270              
12271            
12272              
12273 249   33     1664 while (!$_matched && !$commit)
12274             {
12275            
12276 249 50       456 Parse::RecDescent::_trace(q{Trying production: [/^(\\d+)/]},
12277             Parse::RecDescent::_tracefirst($_[1]),
12278             q{NUMBER},
12279             $tracelevel)
12280             if defined $::RD_TRACE;
12281 249         440 my $thisprod = $thisrule->{"prods"}[0];
12282 249         390 $text = $_[1];
12283 249         309 my $_savetext;
12284 249         439 @item = (q{NUMBER});
12285 249         450 %item = (__RULE__ => q{NUMBER});
12286 249         337 my $repcount = 0;
12287              
12288              
12289 249 50       466 Parse::RecDescent::_trace(q{Trying terminal: [/^(\\d+)/]}, Parse::RecDescent::_tracefirst($text),
12290             q{NUMBER},
12291             $tracelevel)
12292             if defined $::RD_TRACE;
12293 249         433 undef $lastsep;
12294 249         517 $expectation->is(q{})->at($text);
12295            
12296              
12297 249 100 66     2199 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^(\d+))/)
  249 100       2115  
12298             {
12299 119 50       419 $text = $lastsep . $text if defined $lastsep;
12300 119         387 $expectation->failed();
12301 119 50       442 Parse::RecDescent::_trace(q{<>},
12302             Parse::RecDescent::_tracefirst($text))
12303             if defined $::RD_TRACE;
12304              
12305 119         224 last;
12306             }
12307 130         582 $current_match = substr($text, $-[0], $+[0] - $-[0]);
12308 130         468 substr($text,0,length($current_match),q{});
12309 130 50       310 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12310             . $current_match . q{])},
12311             Parse::RecDescent::_tracefirst($text))
12312             if defined $::RD_TRACE;
12313 130         336 push @item, $item{__PATTERN1__}=$current_match;
12314            
12315              
12316 130 50       354 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       254 $_tok = ($_noactions) ? 0 : do { $return = $item[1] };
  130         255  
12324 130 50       320 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       290 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12331             . $_tok . q{])},
12332             Parse::RecDescent::_tracefirst($text))
12333             if defined $::RD_TRACE;
12334 130         227 push @item, $_tok;
12335 130         240 $item{__ACTION1__}=$_tok;
12336            
12337              
12338 130 50       269 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         206 $_matched = 1;
12347 130         245 last;
12348             }
12349              
12350             splice
12351 249 100       486 @{$thisparser->{deferred}}, $def_at unless $_matched;
  119         259  
12352            
12353 249 100 66     710 unless ( $_matched || defined($score) )
12354             {
12355 119         161 splice @{$thisparser->{deferred}}, $def_at;
  119         225  
12356            
12357              
12358 119         209 $_[1] = $text; # NOT SURE THIS IS NEEDED
12359 119 50       282 Parse::RecDescent::_trace(q{<>},
12360             Parse::RecDescent::_tracefirst($_[1]),
12361             q{NUMBER},
12362             $tracelevel)
12363             if defined $::RD_TRACE;
12364 119         545 return undef;
12365             }
12366 130 50 33     358 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         177 splice @{$thisparser->{errors}}, $err_at;
  130         287  
12375 130 50       306 $return = $item[$#item] unless defined $return;
12376 130 50       268 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         313 $_[1] = $text;
12389 130         793 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   193 my $thisparser = $_[0];
12396 1     1   6 use vars q{$tracelevel};
  1         2  
  1         288  
12397 92   50     262 local $tracelevel = ($tracelevel||0)+1;
12398 92         137 $ERRORS = 0;
12399 92         233 my $thisrule = $thisparser->{"rules"}{"textmessage"};
12400              
12401 92 50       210 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         131 my $def_at = @{$thisparser->{deferred}};
  92         183  
12408 92         133 my $err_at = @{$thisparser->{errors}};
  92         167  
12409              
12410 92         261 my $score;
12411             my $score_return;
12412 92         0 my $_tok;
12413 92         150 my $return = undef;
12414 92         143 my $_matched=0;
12415 92         142 my $commit=0;
12416 92         200 my @item = ();
12417 92         144 my %item = ();
12418 92         144 my $repeating = $_[2];
12419 92         121 my $_noactions = $_[3];
12420 92 50       226 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  92         146  
  92         206  
12421 92         191 my $_itempos = $_[5];
12422 92 50       328 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12423 92         237 my $text;
12424             my $lastsep;
12425 92         0 my $current_match;
12426 92         277 my $expectation = new Parse::RecDescent::Expectation(q{TEXT});
12427 92         564 $expectation->at($_[1]);
12428            
12429 92         323 my $thisline;
12430 92         271 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12431              
12432            
12433              
12434 92   33     705 while (!$_matched && !$commit)
12435             {
12436            
12437 92 50       250 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         242 my $thisprod = $thisrule->{"prods"}[0];
12443 92         158 $text = $_[1];
12444 92         133 my $_savetext;
12445 92         163 @item = (q{textmessage});
12446 92         213 %item = (__RULE__ => q{textmessage});
12447 92         116 my $repcount = 0;
12448              
12449              
12450 92 50       204 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   6 if (1) { no strict qw{refs};
  1         2  
  1         201  
  92         157  
12456 92         282 $expectation->is(q{})->at($text);
12457 92 100   92   881 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::TEXT($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  92         215  
12458             {
12459            
12460 53 50       150 Parse::RecDescent::_trace(q{<>},
12461             Parse::RecDescent::_tracefirst($text),
12462             q{textmessage},
12463             $tracelevel)
12464             if defined $::RD_TRACE;
12465 53         201 $expectation->failed();
12466 53         159 last;
12467             }
12468 39 50       179 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         101 $item{q{TEXT}} = $_tok;
12476 39         84 push @item, $_tok;
12477            
12478             }
12479              
12480            
12481              
12482 39 50       82 Parse::RecDescent::_trace(q{Trying directive: []},
12483             Parse::RecDescent::_tracefirst($text),
12484             q{textmessage},
12485             $tracelevel)
12486             if defined $::RD_TRACE;
12487 39         58 $_tok = do { $commit = 1 };
  39         87  
12488 39 50       100 if (defined($_tok))
12489             {
12490 39 50       96 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       126 last unless defined $_tok;
12503 39         119 push @item, $item{__DIRECTIVE1__}=$_tok;
12504            
12505              
12506 39 50       101 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   6 if (1) { no strict qw{refs};
  1         2  
  1         994  
  39         54  
12512 39         132 $expectation->is(q{basicfields})->at($text);
12513 39 50   39   397 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  39         84  
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       180 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         106 $item{q{basicfields}} = $_tok;
12532 39         89 push @item, $_tok;
12533            
12534             }
12535              
12536 39 50       117 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         131 $expectation->is(q{textlines})->at($text);
12542            
12543 39 50   39   417 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         87  
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       606 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         97 $item{q{textlines(?)}} = $_tok;
12560 39         85 push @item, $_tok;
12561            
12562              
12563              
12564 39 50       109 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         110 $expectation->is(q{bodyMD5})->at($text);
12570            
12571 39 50   39   433 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         73  
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       594 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         99 $item{q{bodyMD5(?)}} = $_tok;
12588 39         79 push @item, $_tok;
12589            
12590              
12591              
12592 39 50       84 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         117 $expectation->is(q{bodydisp})->at($text);
12598            
12599 39 50   39   458 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         86  
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       540 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         94 $item{q{bodydisp(?)}} = $_tok;
12616 39         66 push @item, $_tok;
12617            
12618              
12619              
12620 39 50       109 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         101 $expectation->is(q{bodylang})->at($text);
12626            
12627 39 50   39   451 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         84  
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       572 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         110 $item{q{bodylang(?)}} = $_tok;
12644 39         73 push @item, $_tok;
12645            
12646              
12647              
12648 39 50       76 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         113 $expectation->is(q{bodyextra})->at($text);
12654            
12655 39 50   39   387 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  39         104  
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       575 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         108 $item{q{bodyextra(?)}} = $_tok;
12672 39         87 push @item, $_tok;
12673            
12674              
12675              
12676 39 50       113 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       99 $_tok = ($_noactions) ? 0 : do {
12684 39   50     126 $return = $item{basicfields} || {};
12685 39         114 $return->{bodytype} = 'TEXT';
12686 39         136 take_optional_items($return, \%item
12687             , qw/textlines bodyMD5 bodydisp bodylang bodyextra/);
12688 39         89 1;
12689             };
12690 39 50       107 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       101 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12697             . $_tok . q{])},
12698             Parse::RecDescent::_tracefirst($text))
12699             if defined $::RD_TRACE;
12700 39         74 push @item, $_tok;
12701 39         104 $item{__ACTION1__}=$_tok;
12702            
12703              
12704 39 50       87 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         64 $_matched = 1;
12713 39         76 last;
12714             }
12715              
12716             splice
12717 92 100       300 @{$thisparser->{deferred}}, $def_at unless $_matched;
  53         144  
12718            
12719 92 100 66     334 unless ( $_matched || defined($score) )
12720             {
12721 53         90 splice @{$thisparser->{deferred}}, $def_at;
  53         117  
12722            
12723              
12724 53         117 $_[1] = $text; # NOT SURE THIS IS NEEDED
12725 53 50       182 Parse::RecDescent::_trace(q{<>},
12726             Parse::RecDescent::_tracefirst($_[1]),
12727             q{textmessage},
12728             $tracelevel)
12729             if defined $::RD_TRACE;
12730 53         282 return undef;
12731             }
12732 39 50 33     129 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         55 splice @{$thisparser->{errors}}, $err_at;
  39         84  
12741 39 50       101 $return = $item[$#item] unless defined $return;
12742 39 50       102 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         87 $_[1] = $text;
12755 39         349 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   168 my $thisparser = $_[0];
12762 1     1   7 use vars q{$tracelevel};
  1         2  
  1         713  
12763 98   50     233 local $tracelevel = ($tracelevel||0)+1;
12764 98         159 $ERRORS = 0;
12765 98         180 my $thisrule = $thisparser->{"rules"}{"RFCNONCOMPLY"};
12766              
12767 98 50       159 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         133 my $def_at = @{$thisparser->{deferred}};
  98         176  
12774 98         126 my $err_at = @{$thisparser->{errors}};
  98         167  
12775              
12776 98         239 my $score;
12777             my $score_return;
12778 98         0 my $_tok;
12779 98         116 my $return = undef;
12780 98         133 my $_matched=0;
12781 98         144 my $commit=0;
12782 98         150 my @item = ();
12783 98         125 my %item = ();
12784 98         140 my $repeating = $_[2];
12785 98         120 my $_noactions = $_[3];
12786 98 50       171 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  98         112  
  98         188  
12787 98         126 my $_itempos = $_[5];
12788 98 50       184 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12789 98         204 my $text;
12790             my $lastsep;
12791 98         0 my $current_match;
12792 98         212 my $expectation = new Parse::RecDescent::Expectation(q{/^\\(\\)/i});
12793 98         530 $expectation->at($_[1]);
12794            
12795 98         315 my $thisline;
12796 98         282 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12797              
12798            
12799              
12800 98   33     683 while (!$_matched && !$commit)
12801             {
12802            
12803 98 50       197 Parse::RecDescent::_trace(q{Trying production: [/^\\(\\)/i]},
12804             Parse::RecDescent::_tracefirst($_[1]),
12805             q{RFCNONCOMPLY},
12806             $tracelevel)
12807             if defined $::RD_TRACE;
12808 98         186 my $thisprod = $thisrule->{"prods"}[0];
12809 98         164 $text = $_[1];
12810 98         126 my $_savetext;
12811 98         166 @item = (q{RFCNONCOMPLY});
12812 98         195 %item = (__RULE__ => q{RFCNONCOMPLY});
12813 98         128 my $repcount = 0;
12814              
12815              
12816 98 50       167 Parse::RecDescent::_trace(q{Trying terminal: [/^\\(\\)/i]}, Parse::RecDescent::_tracefirst($text),
12817             q{RFCNONCOMPLY},
12818             $tracelevel)
12819             if defined $::RD_TRACE;
12820 98         162 undef $lastsep;
12821 98         249 $expectation->is(q{})->at($text);
12822            
12823              
12824 98 50 66     888 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^\(\))/i)
  98 100       817  
12825             {
12826 94 50       393 $text = $lastsep . $text if defined $lastsep;
12827 94         292 $expectation->failed();
12828 94 50       349 Parse::RecDescent::_trace(q{<>},
12829             Parse::RecDescent::_tracefirst($text))
12830             if defined $::RD_TRACE;
12831              
12832 94         192 last;
12833             }
12834 4         21 $current_match = substr($text, $-[0], $+[0] - $-[0]);
12835 4         16 substr($text,0,length($current_match),q{});
12836 4 50       12 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12837             . $current_match . q{])},
12838             Parse::RecDescent::_tracefirst($text))
12839             if defined $::RD_TRACE;
12840 4         10 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         9  
12851 4 50       14 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       11 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12858             . $_tok . q{])},
12859             Parse::RecDescent::_tracefirst($text))
12860             if defined $::RD_TRACE;
12861 4         6 push @item, $_tok;
12862 4         8 $item{__ACTION1__}=$_tok;
12863            
12864              
12865 4 50       10 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         7 $_matched = 1;
12874 4         6 last;
12875             }
12876              
12877             splice
12878 98 100       210 @{$thisparser->{deferred}}, $def_at unless $_matched;
  94         191  
12879            
12880 98 100 66     280 unless ( $_matched || defined($score) )
12881             {
12882 94         140 splice @{$thisparser->{deferred}}, $def_at;
  94         129  
12883            
12884              
12885 94         162 $_[1] = $text; # NOT SURE THIS IS NEEDED
12886 94 50       177 Parse::RecDescent::_trace(q{<>},
12887             Parse::RecDescent::_tracefirst($_[1]),
12888             q{RFCNONCOMPLY},
12889             $tracelevel)
12890             if defined $::RD_TRACE;
12891 94         419 return undef;
12892             }
12893 4 50 33     14 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         10  
12902 4 50       12 $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         10 $_[1] = $text;
12916 4         21 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   53 my $thisparser = $_[0];
12923 1     1   7 use vars q{$tracelevel};
  1         2  
  1         308  
12924 24   50     74 local $tracelevel = ($tracelevel||0)+1;
12925 24         44 $ERRORS = 0;
12926 24         69 my $thisrule = $thisparser->{"rules"}{"subject"};
12927              
12928 24 50       74 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         43 my $def_at = @{$thisparser->{deferred}};
  24         49  
12935 24         31 my $err_at = @{$thisparser->{errors}};
  24         51  
12936              
12937 24         81 my $score;
12938             my $score_return;
12939 24         0 my $_tok;
12940 24         46 my $return = undef;
12941 24         56 my $_matched=0;
12942 24         36 my $commit=0;
12943 24         54 my @item = ();
12944 24         55 my %item = ();
12945 24         38 my $repeating = $_[2];
12946 24         38 my $_noactions = $_[3];
12947 24 50       55 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         29  
  24         46  
12948 24         55 my $_itempos = $_[5];
12949 24 50       77 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12950 24         66 my $text;
12951             my $lastsep;
12952 24         0 my $current_match;
12953 24         75 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING});
12954 24         167 $expectation->at($_[1]);
12955            
12956 24         87 my $thisline;
12957 24         99 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12958              
12959            
12960              
12961 24   33     206 while (!$_matched && !$commit)
12962             {
12963            
12964 24 50       79 Parse::RecDescent::_trace(q{Trying production: [NIL]},
12965             Parse::RecDescent::_tracefirst($_[1]),
12966             q{subject},
12967             $tracelevel)
12968             if defined $::RD_TRACE;
12969 24         73 my $thisprod = $thisrule->{"prods"}[0];
12970 24         51 $text = $_[1];
12971 24         40 my $_savetext;
12972 24         70 @item = (q{subject});
12973 24         71 %item = (__RULE__ => q{subject});
12974 24         37 my $repcount = 0;
12975              
12976              
12977 24 50       51 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   7 if (1) { no strict qw{refs};
  1         2  
  1         237  
  24         45  
12983 24         60 $expectation->is(q{})->at($text);
12984 24 50   24   235 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         46  
12985             {
12986            
12987 24 50       76 Parse::RecDescent::_trace(q{<>},
12988             Parse::RecDescent::_tracefirst($text),
12989             q{subject},
12990             $tracelevel)
12991             if defined $::RD_TRACE;
12992 24         78 $expectation->failed();
12993 24         75 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       94 @{$thisparser->{deferred}}, $def_at unless $_matched;
  24         59  
13021            
13022 24   33     106 while (!$_matched && !$commit)
13023             {
13024            
13025 24 50       55 Parse::RecDescent::_trace(q{Trying production: [STRING]},
13026             Parse::RecDescent::_tracefirst($_[1]),
13027             q{subject},
13028             $tracelevel)
13029             if defined $::RD_TRACE;
13030 24         52 my $thisprod = $thisrule->{"prods"}[1];
13031 24         47 $text = $_[1];
13032 24         57 my $_savetext;
13033 24         58 @item = (q{subject});
13034 24         66 %item = (__RULE__ => q{subject});
13035 24         52 my $repcount = 0;
13036              
13037              
13038 24 50       60 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   6 if (1) { no strict qw{refs};
  1         2  
  1         392  
  24         42  
13044 24         65 $expectation->is(q{})->at($text);
13045 24 50   24   226 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         48  
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       94 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         71 $item{q{STRING}} = $_tok;
13064 24         51 push @item, $_tok;
13065            
13066             }
13067              
13068 24 50       65 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         45 $_matched = 1;
13077 24         49 last;
13078             }
13079              
13080             splice
13081 24 50       56 @{$thisparser->{deferred}}, $def_at unless $_matched;
  0         0  
13082            
13083 24 50 33     78 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     114 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         39 splice @{$thisparser->{errors}}, $err_at;
  24         50  
13105 24 50       62 $return = $item[$#item] unless defined $return;
13106 24 50       59 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         52 $_[1] = $text;
13119 24         141 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   1413 my $thisparser = $_[0];
13126 1     1   7 use vars q{$tracelevel};
  1         2  
  1         281  
13127 102   50     306 local $tracelevel = ($tracelevel||0)+1;
13128 102         142 $ERRORS = 0;
13129 102         255 my $thisrule = $thisparser->{"rules"}{"bodyextra"};
13130              
13131 102 50       222 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         153 my $def_at = @{$thisparser->{deferred}};
  102         192  
13138 102         234 my $err_at = @{$thisparser->{errors}};
  102         182  
13139              
13140 102         249 my $score;
13141             my $score_return;
13142 102         0 my $_tok;
13143 102         145 my $return = undef;
13144 102         161 my $_matched=0;
13145 102         149 my $commit=0;
13146 102         157 my @item = ();
13147 102         182 my %item = ();
13148 102         152 my $repeating = $_[2];
13149 102         158 my $_noactions = $_[3];
13150 102 50       197 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  102         150  
  102         183  
13151 102         181 my $_itempos = $_[5];
13152 102 50       252 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13153 102         222 my $text;
13154             my $lastsep;
13155 102         0 my $current_match;
13156 102         259 my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or STRINGS});
13157 102         624 $expectation->at($_[1]);
13158            
13159 102         381 my $thisline;
13160 102         358 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13161              
13162            
13163              
13164 102   33     770 while (!$_matched && !$commit)
13165             {
13166            
13167 102 50       227 Parse::RecDescent::_trace(q{Trying production: [NIL]},
13168             Parse::RecDescent::_tracefirst($_[1]),
13169             q{bodyextra},
13170             $tracelevel)
13171             if defined $::RD_TRACE;
13172 102         249 my $thisprod = $thisrule->{"prods"}[0];
13173 102         175 $text = $_[1];
13174 102         130 my $_savetext;
13175 102         202 @item = (q{bodyextra});
13176 102         204 %item = (__RULE__ => q{bodyextra});
13177 102         180 my $repcount = 0;
13178              
13179              
13180 102 50       249 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   6 if (1) { no strict qw{refs};
  1         2  
  1         227  
  102         142  
13186 102         258 $expectation->is(q{})->at($text);
13187 102 100   102   782 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  102         171  
13188             {
13189            
13190 47 50       111 Parse::RecDescent::_trace(q{<>},
13191             Parse::RecDescent::_tracefirst($text),
13192             q{bodyextra},
13193             $tracelevel)
13194             if defined $::RD_TRACE;
13195 47         120 $expectation->failed();
13196 47         137 last;
13197             }
13198 55 50       206 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         152 $item{q{NIL}} = $_tok;
13206 55         133 push @item, $_tok;
13207            
13208             }
13209              
13210 55 50       194 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         114 $_matched = 1;
13219 55         110 last;
13220             }
13221              
13222             splice
13223 102 100       320 @{$thisparser->{deferred}}, $def_at unless $_matched;
  47         88  
13224            
13225 102   66     354 while (!$_matched && !$commit)
13226             {
13227            
13228 47 50       87 Parse::RecDescent::_trace(q{Trying production: [STRING]},
13229             Parse::RecDescent::_tracefirst($_[1]),
13230             q{bodyextra},
13231             $tracelevel)
13232             if defined $::RD_TRACE;
13233 47         95 my $thisprod = $thisrule->{"prods"}[1];
13234 47         82 $text = $_[1];
13235 47         63 my $_savetext;
13236 47         91 @item = (q{bodyextra});
13237 47         123 %item = (__RULE__ => q{bodyextra});
13238 47         66 my $repcount = 0;
13239              
13240              
13241 47 50       113 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   8 if (1) { no strict qw{refs};
  1         8  
  1         223  
  47         62  
13247 47         421 $expectation->is(q{})->at($text);
13248 47 50   47   421 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  47         80  
13249             {
13250            
13251 47 50       114 Parse::RecDescent::_trace(q{<>},
13252             Parse::RecDescent::_tracefirst($text),
13253             q{bodyextra},
13254             $tracelevel)
13255             if defined $::RD_TRACE;
13256 47         138 $expectation->failed();
13257 47         134 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       263 @{$thisparser->{deferred}}, $def_at unless $_matched;
  47         118  
13285            
13286 102   66     357 while (!$_matched && !$commit)
13287             {
13288            
13289 47 50       97 Parse::RecDescent::_trace(q{Trying production: [STRINGS]},
13290             Parse::RecDescent::_tracefirst($_[1]),
13291             q{bodyextra},
13292             $tracelevel)
13293             if defined $::RD_TRACE;
13294 47         106 my $thisprod = $thisrule->{"prods"}[2];
13295 47         72 $text = $_[1];
13296 47         98 my $_savetext;
13297 47         102 @item = (q{bodyextra});
13298 47         99 %item = (__RULE__ => q{bodyextra});
13299 47         60 my $repcount = 0;
13300              
13301              
13302 47 50       102 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   6 if (1) { no strict qw{refs};
  1         2  
  1         6777  
  47         79  
13308 47         135 $expectation->is(q{})->at($text);
13309 47 50   47   498 unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  47         80  
13310             {
13311            
13312 47 50       113 Parse::RecDescent::_trace(q{<>},
13313             Parse::RecDescent::_tracefirst($text),
13314             q{bodyextra},
13315             $tracelevel)
13316             if defined $::RD_TRACE;
13317 47         119 $expectation->failed();
13318 47         136 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       286 @{$thisparser->{deferred}}, $def_at unless $_matched;
  47         103  
13346            
13347 102 100 66     386 unless ( $_matched || defined($score) )
13348             {
13349 47         86 splice @{$thisparser->{deferred}}, $def_at;
  47         99  
13350            
13351              
13352 47         84 $_[1] = $text; # NOT SURE THIS IS NEEDED
13353 47 50       105 Parse::RecDescent::_trace(q{<>},
13354             Parse::RecDescent::_tracefirst($_[1]),
13355             q{bodyextra},
13356             $tracelevel)
13357             if defined $::RD_TRACE;
13358 47         198 return undef;
13359             }
13360 55 50 33     265 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         104 splice @{$thisparser->{errors}}, $err_at;
  55         124  
13369 55 50       189 $return = $item[$#item] unless defined $return;
13370 55 50       155 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         105 $_[1] = $text;
13383 55         270 return $return;
13384             }
13385             }
13386 1     1 0 1134 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             }