File Coverage

blib/lib/Text/FormBuilder/Parser.pm
Criterion Covered Total %
statement 3443 6878 50.0
branch 835 3846 21.7
condition 251 1070 23.4
subroutine 241 310 77.7
pod 0 1 0.0
total 4770 12105 39.4


line stmt bran cond sub pod time code
1             package Text::FormBuilder::Parser;
2 2     2   33531 use Parse::RecDescent;
  2         111161  
  2         18  
3             { my $ERRORS;
4              
5              
6             package Parse::RecDescent::Text::FormBuilder::Parser;
7 2     2   135 use strict;
  2         4  
  2         79  
8 2     2   11 use vars qw($skip $AUTOLOAD );
  2         16  
  2         457  
9             @Parse::RecDescent::Text::FormBuilder::Parser::ISA = ();
10             $skip = '\s*';
11              
12             #$::RD_TRACE = 1;
13             my (
14             @sections, # master data structure
15             $section_head,
16             $section_id,
17             @lines, # lines in each section
18             %lists,
19             %patterns,
20             %subs, # validation subs
21             @group, # current group
22             %groups, # stored groups of fields
23             $type,
24             @options,
25             $required,
26             $multiple,
27             $list_var,
28             $size,
29             $maxlength,
30             $rows,
31             $cols,
32             @submit,
33             );
34             my $context = 'line'; # start in line context by default
35             my %formspec;
36            
37             # TODO: helper sub?
38             sub alert ($) {
39 0     0   0 warn '[' . (split(/::/, (caller(1))[3]))[-1] . '] ' . shift() . "\n";
40             }
41             ;
42              
43              
44             {
45             local $SIG{__WARN__} = sub {0};
46             # PRETEND TO BE IN Parse::RecDescent NAMESPACE
47             *Parse::RecDescent::Text::FormBuilder::Parser::AUTOLOAD = sub
48             {
49 2     2   11 no strict 'refs';
  2         6  
  2         462  
50              
51 0     0   0 ${"AUTOLOAD"} =~ s/^Parse::RecDescent::Text::FormBuilder::Parser/Parse::RecDescent/;
  0         0  
52 0         0 goto &{${"AUTOLOAD"}};
  0         0  
  0         0  
53             }
54             }
55              
56             push @Parse::RecDescent::Text::FormBuilder::Parser::ISA, 'Parse::RecDescent';
57             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
58             sub Parse::RecDescent::Text::FormBuilder::Parser::options
59             {
60 24     24   56 my $thisparser = $_[0];
61 2     2   10 use vars q{$tracelevel};
  2         5  
  2         1495  
62 24   50     83 local $tracelevel = ($tracelevel||0)+1;
63 24         43 $ERRORS = 0;
64 24         69 my $thisrule = $thisparser->{"rules"}{"options"};
65              
66 24 50       62 Parse::RecDescent::_trace(q{Trying rule: [options]},
67             Parse::RecDescent::_tracefirst($_[1]),
68             q{options},
69             $tracelevel)
70             if defined $::RD_TRACE;
71              
72            
73 24         34 my $err_at = @{$thisparser->{errors}};
  24         65  
74              
75 24         47 my $score;
76             my $score_return;
77 0         0 my $_tok;
78 24         38 my $return = undef;
79 24         40 my $_matched=0;
80 24         41 my $commit=0;
81 24         55 my @item = ();
82 24         59 my %item = ();
83 24         44 my $repeating = $_[2];
84 24         45 my $_noactions = $_[3];
85 24 50       69 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         38  
  24         65  
86 24         50 my $_itempos = $_[5];
87 24 50       88 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
88 24         49 my $text;
89             my $lastsep;
90 0         0 my $current_match;
91 24         3676 my $expectation = new Parse::RecDescent::Expectation(q{'\{'});
92 24         2695 $expectation->at($_[1]);
93            
94 24         226 my $thisline;
95 24         131 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
96              
97            
98              
99 24   33     462 while (!$_matched && !$commit)
100             {
101            
102 24 50       118 Parse::RecDescent::_trace(q{Trying production: ['\{' '\}']},
103             Parse::RecDescent::_tracefirst($_[1]),
104             q{options},
105             $tracelevel)
106             if defined $::RD_TRACE;
107 24         81 my $thisprod = $thisrule->{"prods"}[0];
108 24         124 $text = $_[1];
109 24         45 my $_savetext;
110 24         72 @item = (q{options});
111 24         83 %item = (__RULE__ => q{options});
112 24         45 my $repcount = 0;
113              
114              
115 24 50       72 Parse::RecDescent::_trace(q{Trying terminal: ['\{']},
116             Parse::RecDescent::_tracefirst($text),
117             q{options},
118             $tracelevel)
119             if defined $::RD_TRACE;
120 24         49 undef $lastsep;
121 24         89 $expectation->is(q{})->at($text);
122            
123              
124 24 50 33     410 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\{/)
  24 50       360  
125             {
126 24 50       252 $text = $lastsep . $text if defined $lastsep;
127            
128 24         103 $expectation->failed();
129 24 50       140 Parse::RecDescent::_trace(qq{<>},
130             Parse::RecDescent::_tracefirst($text))
131             if defined $::RD_TRACE;
132 24         60 last;
133             }
134 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
135 0         0 substr($text,0,length($current_match),q{});
136 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
137             . $current_match . q{])},
138             Parse::RecDescent::_tracefirst($text))
139             if defined $::RD_TRACE;
140 0         0 push @item, $item{__STRING1__}=$current_match;
141            
142              
143 0 0       0 Parse::RecDescent::_trace(q{Trying operator: []},
144             Parse::RecDescent::_tracefirst($text),
145             q{options},
146             $tracelevel)
147             if defined $::RD_TRACE;
148 0         0 $expectation->is(q{})->at($text);
149              
150 0         0 $_tok = undef;
151 0         0 OPLOOP: while (1)
152             {
153 0         0 $repcount = 0;
154 0         0 my @item;
155             my %item;
156              
157             # MATCH LEFTARG
158            
159 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [option]},
160             Parse::RecDescent::_tracefirst($text),
161             q{options},
162             $tracelevel)
163             if defined $::RD_TRACE;
164 2     2   13 if (1) { no strict qw{refs};
  2         4  
  2         1072  
  0         0  
165 0         0 $expectation->is(q{option})->at($text);
166 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
167             {
168            
169 0 0       0 Parse::RecDescent::_trace(q{<>},
170             Parse::RecDescent::_tracefirst($text),
171             q{options},
172             $tracelevel)
173             if defined $::RD_TRACE;
174 0         0 $expectation->failed();
175 0         0 last;
176             }
177 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
178             . $_tok . q{]},
179              
180             Parse::RecDescent::_tracefirst($text),
181             q{options},
182             $tracelevel)
183             if defined $::RD_TRACE;
184 0         0 $item{q{option}} = $_tok;
185 0         0 push @item, $_tok;
186            
187             }
188              
189              
190              
191 0         0 $repcount++;
192              
193 0         0 my $savetext = $text;
194 0         0 my $backtrack;
195              
196             # MATCH (OP RIGHTARG)(s)
197 0         0 while ($repcount < 100000000)
198             {
199 0         0 $backtrack = 0;
200            
201 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/\\s*,\\s*/]}, Parse::RecDescent::_tracefirst($text),
202             q{options},
203             $tracelevel)
204             if defined $::RD_TRACE;
205 0         0 undef $lastsep;
206 0         0 $expectation->is(q{/\\s*,\\s*/})->at($text);
207            
208              
209 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\s*,\s*)/)
  0 0       0  
210             {
211 0 0       0 $text = $lastsep . $text if defined $lastsep;
212 0         0 $expectation->failed();
213 0 0       0 Parse::RecDescent::_trace(q{<>},
214             Parse::RecDescent::_tracefirst($text))
215             if defined $::RD_TRACE;
216              
217 0         0 last;
218             }
219 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
220 0         0 substr($text,0,length($current_match),q{});
221 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
222             . $current_match . q{])},
223             Parse::RecDescent::_tracefirst($text))
224             if defined $::RD_TRACE;
225 0         0 push @item, $item{__PATTERN1__}=$current_match;
226            
227              
228 0         0 pop @item;
229 0 0       0 if (defined $1) {push @item, $item{'option(s)'}=$1; $backtrack=1;}
  0         0  
  0         0  
230            
231 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [option]},
232             Parse::RecDescent::_tracefirst($text),
233             q{options},
234             $tracelevel)
235             if defined $::RD_TRACE;
236 2     2   11 if (1) { no strict qw{refs};
  2         5  
  2         2186  
  0         0  
237 0         0 $expectation->is(q{option})->at($text);
238 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
239             {
240            
241 0 0       0 Parse::RecDescent::_trace(q{<>},
242             Parse::RecDescent::_tracefirst($text),
243             q{options},
244             $tracelevel)
245             if defined $::RD_TRACE;
246 0         0 $expectation->failed();
247 0         0 last;
248             }
249 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
250             . $_tok . q{]},
251              
252             Parse::RecDescent::_tracefirst($text),
253             q{options},
254             $tracelevel)
255             if defined $::RD_TRACE;
256 0         0 $item{q{option}} = $_tok;
257 0         0 push @item, $_tok;
258            
259             }
260              
261 0         0 $savetext = $text;
262 0         0 $repcount++;
263             }
264 0         0 $text = $savetext;
265 0 0       0 pop @item if $backtrack;
266              
267 0 0       0 unless (@item) { undef $_tok; last }
  0         0  
  0         0  
268 0         0 $_tok = [ @item ];
269              
270 0         0 last;
271             } # end of OPLOOP
272              
273 0 0       0 unless ($repcount>=1)
274             {
275 0 0       0 Parse::RecDescent::_trace(q{<]>>},
276             Parse::RecDescent::_tracefirst($text),
277             q{options},
278             $tracelevel)
279             if defined $::RD_TRACE;
280 0         0 $expectation->failed();
281 0         0 last;
282             }
283 0 0       0 Parse::RecDescent::_trace(q{>>Matched operator: []<< (return value: [}
284 0 0       0 . qq{@{$_tok||[]}} . q{]},
285             Parse::RecDescent::_tracefirst($text),
286             q{options},
287             $tracelevel)
288             if defined $::RD_TRACE;
289              
290 0   0     0 push @item, $item{'option(s)'}=$_tok||[];
291              
292 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\}']},
293             Parse::RecDescent::_tracefirst($text),
294             q{options},
295             $tracelevel)
296             if defined $::RD_TRACE;
297 0         0 undef $lastsep;
298 0         0 $expectation->is(q{'\}'})->at($text);
299            
300              
301 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\}/)
  0 0       0  
302             {
303 0 0       0 $text = $lastsep . $text if defined $lastsep;
304            
305 0         0 $expectation->failed();
306 0 0       0 Parse::RecDescent::_trace(qq{<>},
307             Parse::RecDescent::_tracefirst($text))
308             if defined $::RD_TRACE;
309 0         0 last;
310             }
311 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
312 0         0 substr($text,0,length($current_match),q{});
313 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
314             . $current_match . q{])},
315             Parse::RecDescent::_tracefirst($text))
316             if defined $::RD_TRACE;
317 0         0 push @item, $item{__STRING2__}=$current_match;
318            
319              
320 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['\{' '\}']<<},
321             Parse::RecDescent::_tracefirst($text),
322             q{options},
323             $tracelevel)
324             if defined $::RD_TRACE;
325              
326              
327              
328 0         0 $_matched = 1;
329 0         0 last;
330             }
331              
332              
333 24 50 33     142 unless ( $_matched || defined($score) )
334             {
335            
336              
337 24         45 $_[1] = $text; # NOT SURE THIS IS NEEDED
338 24 50       70 Parse::RecDescent::_trace(q{<>},
339             Parse::RecDescent::_tracefirst($_[1]),
340             q{options},
341             $tracelevel)
342             if defined $::RD_TRACE;
343 24         2372 return undef;
344             }
345 0 0 0     0 if (!defined($return) && defined($score))
346             {
347 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
348             q{options},
349             $tracelevel)
350             if defined $::RD_TRACE;
351 0         0 $return = $score_return;
352             }
353 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
354 0 0       0 $return = $item[$#item] unless defined $return;
355 0 0       0 if (defined $::RD_TRACE)
356             {
357 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
358             $return . q{])}, "",
359             q{options},
360             $tracelevel);
361 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
362             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
363             Parse::RecDescent::_tracefirst($text),
364             , q{options},
365             $tracelevel)
366             }
367 0         0 $_[1] = $text;
368 0         0 return $return;
369             }
370              
371             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
372             sub Parse::RecDescent::Text::FormBuilder::Parser::name
373             {
374 56     56   103 my $thisparser = $_[0];
375 2     2   12 use vars q{$tracelevel};
  2         4  
  2         838  
376 56   50     198 local $tracelevel = ($tracelevel||0)+1;
377 56         103 $ERRORS = 0;
378 56         204 my $thisrule = $thisparser->{"rules"}{"name"};
379              
380 56 50       142 Parse::RecDescent::_trace(q{Trying rule: [name]},
381             Parse::RecDescent::_tracefirst($_[1]),
382             q{name},
383             $tracelevel)
384             if defined $::RD_TRACE;
385              
386            
387 56         72 my $err_at = @{$thisparser->{errors}};
  56         116  
388              
389 56         93 my $score;
390             my $score_return;
391 0         0 my $_tok;
392 56         97 my $return = undef;
393 56         82 my $_matched=0;
394 56         121 my $commit=0;
395 56         114 my @item = ();
396 56         95 my %item = ();
397 56         80 my $repeating = $_[2];
398 56         81 my $_noactions = $_[3];
399 56 50       140 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  56         76  
  56         145  
400 56         95 my $_itempos = $_[5];
401 56 50       161 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
402 56         99 my $text;
403             my $lastsep;
404 0         0 my $current_match;
405 56         209 my $expectation = new Parse::RecDescent::Expectation(q{identifier});
406 56         465 $expectation->at($_[1]);
407            
408 56         235 my $thisline;
409 56         253 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
410              
411            
412              
413 56   33     581 while (!$_matched && !$commit)
414             {
415            
416 56 50       273 Parse::RecDescent::_trace(q{Trying production: [identifier]},
417             Parse::RecDescent::_tracefirst($_[1]),
418             q{name},
419             $tracelevel)
420             if defined $::RD_TRACE;
421 56         360 my $thisprod = $thisrule->{"prods"}[0];
422 56         92 $text = $_[1];
423 56         82 my $_savetext;
424 56         150 @item = (q{name});
425 56         141 %item = (__RULE__ => q{name});
426 56         85 my $repcount = 0;
427              
428              
429 56 50       144 Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
430             Parse::RecDescent::_tracefirst($text),
431             q{name},
432             $tracelevel)
433             if defined $::RD_TRACE;
434 2     2   11 if (1) { no strict qw{refs};
  2         4  
  2         1048  
  56         71  
435 56         170 $expectation->is(q{})->at($text);
436 56 100   56   632 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  56         122  
437             {
438            
439 22 50       45 Parse::RecDescent::_trace(q{<>},
440             Parse::RecDescent::_tracefirst($text),
441             q{name},
442             $tracelevel)
443             if defined $::RD_TRACE;
444 22         122 $expectation->failed();
445 22         77 last;
446             }
447 34 50       179 Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
448             . $_tok . q{]},
449              
450             Parse::RecDescent::_tracefirst($text),
451             q{name},
452             $tracelevel)
453             if defined $::RD_TRACE;
454 34         82 $item{q{identifier}} = $_tok;
455 34         180 push @item, $_tok;
456            
457             }
458              
459 34 50       84 Parse::RecDescent::_trace(q{>>Matched production: [identifier]<<},
460             Parse::RecDescent::_tracefirst($text),
461             q{name},
462             $tracelevel)
463             if defined $::RD_TRACE;
464              
465              
466              
467 34         47 $_matched = 1;
468 34         64 last;
469             }
470              
471              
472 56 100 66     263 unless ( $_matched || defined($score) )
473             {
474            
475              
476 22         27 $_[1] = $text; # NOT SURE THIS IS NEEDED
477 22 50       52 Parse::RecDescent::_trace(q{<>},
478             Parse::RecDescent::_tracefirst($_[1]),
479             q{name},
480             $tracelevel)
481             if defined $::RD_TRACE;
482 22         190 return undef;
483             }
484 34 50 33     364 if (!defined($return) && defined($score))
485             {
486 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
487             q{name},
488             $tracelevel)
489             if defined $::RD_TRACE;
490 0         0 $return = $score_return;
491             }
492 34         56 splice @{$thisparser->{errors}}, $err_at;
  34         86  
493 34 50       378 $return = $item[$#item] unless defined $return;
494 34 50       93 if (defined $::RD_TRACE)
495             {
496 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
497             $return . q{])}, "",
498             q{name},
499             $tracelevel);
500 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
501             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
502             Parse::RecDescent::_tracefirst($text),
503             , q{name},
504             $tracelevel)
505             }
506 34         65 $_[1] = $text;
507 34         291 return $return;
508             }
509              
510             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
511             sub Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_line
512             {
513 21     21   41 my $thisparser = $_[0];
514 2     2   9 use vars q{$tracelevel};
  2         4  
  2         900  
515 21   50     70 local $tracelevel = ($tracelevel||0)+1;
516 21         37 $ERRORS = 0;
517 21         57 my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_line"};
518              
519 21 50       54 Parse::RecDescent::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_line]},
520             Parse::RecDescent::_tracefirst($_[1]),
521             q{_alternation_1_of_production_1_of_rule_line},
522             $tracelevel)
523             if defined $::RD_TRACE;
524              
525            
526 21         39 my $err_at = @{$thisparser->{errors}};
  21         41  
527              
528 21         32 my $score;
529             my $score_return;
530 0         0 my $_tok;
531 21         42 my $return = undef;
532 21         55 my $_matched=0;
533 21         25 my $commit=0;
534 21         40 my @item = ();
535 21         41 my %item = ();
536 21         32 my $repeating = $_[2];
537 21         27 my $_noactions = $_[3];
538 21 50       66 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         30  
  21         43  
539 21         31 my $_itempos = $_[5];
540 21 50       71 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
541 21         41 my $text;
542             my $lastsep;
543 0         0 my $current_match;
544 21         85 my $expectation = new Parse::RecDescent::Expectation(q{title, or author, or pattern_def, or section_head, or heading, or submit, or reset, or group_field, or field_group, or unknown_directive, or field, or comment, or blank});
545 21         172 $expectation->at($_[1]);
546            
547 21         97 my $thisline;
548 21         97 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
549              
550            
551              
552 21   33     249 while (!$_matched && !$commit)
553             {
554            
555 21 50       56 Parse::RecDescent::_trace(q{Trying production: [title]},
556             Parse::RecDescent::_tracefirst($_[1]),
557             q{_alternation_1_of_production_1_of_rule_line},
558             $tracelevel)
559             if defined $::RD_TRACE;
560 21         60 my $thisprod = $thisrule->{"prods"}[0];
561 21         32 $text = $_[1];
562 21         39 my $_savetext;
563 21         56 @item = (q{_alternation_1_of_production_1_of_rule_line});
564 21         58 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
565 21         35 my $repcount = 0;
566              
567              
568 21 50       43 Parse::RecDescent::_trace(q{Trying subrule: [title]},
569             Parse::RecDescent::_tracefirst($text),
570             q{_alternation_1_of_production_1_of_rule_line},
571             $tracelevel)
572             if defined $::RD_TRACE;
573 2     2   10 if (1) { no strict qw{refs};
  2         4  
  2         741  
  21         23  
574 21         67 $expectation->is(q{})->at($text);
575 21 50   21   256 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::title($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         59  
576             {
577            
578 21 50       52 Parse::RecDescent::_trace(q{<>},
579             Parse::RecDescent::_tracefirst($text),
580             q{_alternation_1_of_production_1_of_rule_line},
581             $tracelevel)
582             if defined $::RD_TRACE;
583 21         71 $expectation->failed();
584 21         82 last;
585             }
586 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [title]<< (return value: [}
587             . $_tok . q{]},
588              
589             Parse::RecDescent::_tracefirst($text),
590             q{_alternation_1_of_production_1_of_rule_line},
591             $tracelevel)
592             if defined $::RD_TRACE;
593 0         0 $item{q{title}} = $_tok;
594 0         0 push @item, $_tok;
595            
596             }
597              
598 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [title]<<},
599             Parse::RecDescent::_tracefirst($text),
600             q{_alternation_1_of_production_1_of_rule_line},
601             $tracelevel)
602             if defined $::RD_TRACE;
603              
604              
605              
606 0         0 $_matched = 1;
607 0         0 last;
608             }
609              
610              
611 21   33     150 while (!$_matched && !$commit)
612             {
613            
614 21 50       64 Parse::RecDescent::_trace(q{Trying production: [author]},
615             Parse::RecDescent::_tracefirst($_[1]),
616             q{_alternation_1_of_production_1_of_rule_line},
617             $tracelevel)
618             if defined $::RD_TRACE;
619 21         52 my $thisprod = $thisrule->{"prods"}[1];
620 21         34 $text = $_[1];
621 21         29 my $_savetext;
622 21         56 @item = (q{_alternation_1_of_production_1_of_rule_line});
623 21         52 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
624 21         36 my $repcount = 0;
625              
626              
627 21 50       51 Parse::RecDescent::_trace(q{Trying subrule: [author]},
628             Parse::RecDescent::_tracefirst($text),
629             q{_alternation_1_of_production_1_of_rule_line},
630             $tracelevel)
631             if defined $::RD_TRACE;
632 2     2   12 if (1) { no strict qw{refs};
  2         3  
  2         836  
  21         30  
633 21         65 $expectation->is(q{})->at($text);
634 21 50   21   257 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::author($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         47  
635             {
636            
637 21 50       56 Parse::RecDescent::_trace(q{<>},
638             Parse::RecDescent::_tracefirst($text),
639             q{_alternation_1_of_production_1_of_rule_line},
640             $tracelevel)
641             if defined $::RD_TRACE;
642 21         66 $expectation->failed();
643 21         103 last;
644             }
645 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [author]<< (return value: [}
646             . $_tok . q{]},
647              
648             Parse::RecDescent::_tracefirst($text),
649             q{_alternation_1_of_production_1_of_rule_line},
650             $tracelevel)
651             if defined $::RD_TRACE;
652 0         0 $item{q{author}} = $_tok;
653 0         0 push @item, $_tok;
654            
655             }
656              
657 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [author]<<},
658             Parse::RecDescent::_tracefirst($text),
659             q{_alternation_1_of_production_1_of_rule_line},
660             $tracelevel)
661             if defined $::RD_TRACE;
662              
663              
664              
665 0         0 $_matched = 1;
666 0         0 last;
667             }
668              
669              
670 21   33     140 while (!$_matched && !$commit)
671             {
672            
673 21 50       53 Parse::RecDescent::_trace(q{Trying production: [pattern_def]},
674             Parse::RecDescent::_tracefirst($_[1]),
675             q{_alternation_1_of_production_1_of_rule_line},
676             $tracelevel)
677             if defined $::RD_TRACE;
678 21         76 my $thisprod = $thisrule->{"prods"}[2];
679 21         36 $text = $_[1];
680 21         27 my $_savetext;
681 21         58 @item = (q{_alternation_1_of_production_1_of_rule_line});
682 21         52 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
683 21         32 my $repcount = 0;
684              
685              
686 21 50       45 Parse::RecDescent::_trace(q{Trying subrule: [pattern_def]},
687             Parse::RecDescent::_tracefirst($text),
688             q{_alternation_1_of_production_1_of_rule_line},
689             $tracelevel)
690             if defined $::RD_TRACE;
691 2     2   12 if (1) { no strict qw{refs};
  2         3  
  2         936  
  21         32  
692 21         73 $expectation->is(q{})->at($text);
693 21 50   21   288 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::pattern_def($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         69  
694             {
695            
696 21 50       47 Parse::RecDescent::_trace(q{<>},
697             Parse::RecDescent::_tracefirst($text),
698             q{_alternation_1_of_production_1_of_rule_line},
699             $tracelevel)
700             if defined $::RD_TRACE;
701 21         64 $expectation->failed();
702 21         83 last;
703             }
704 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [pattern_def]<< (return value: [}
705             . $_tok . q{]},
706              
707             Parse::RecDescent::_tracefirst($text),
708             q{_alternation_1_of_production_1_of_rule_line},
709             $tracelevel)
710             if defined $::RD_TRACE;
711 0         0 $item{q{pattern_def}} = $_tok;
712 0         0 push @item, $_tok;
713            
714             }
715              
716 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [pattern_def]<<},
717             Parse::RecDescent::_tracefirst($text),
718             q{_alternation_1_of_production_1_of_rule_line},
719             $tracelevel)
720             if defined $::RD_TRACE;
721              
722              
723              
724 0         0 $_matched = 1;
725 0         0 last;
726             }
727              
728              
729 21   33     129 while (!$_matched && !$commit)
730             {
731            
732 21 50       46 Parse::RecDescent::_trace(q{Trying production: [section_head]},
733             Parse::RecDescent::_tracefirst($_[1]),
734             q{_alternation_1_of_production_1_of_rule_line},
735             $tracelevel)
736             if defined $::RD_TRACE;
737 21         55 my $thisprod = $thisrule->{"prods"}[3];
738 21         48 $text = $_[1];
739 21         30 my $_savetext;
740 21         53 @item = (q{_alternation_1_of_production_1_of_rule_line});
741 21         61 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
742 21         40 my $repcount = 0;
743              
744              
745 21 50       64 Parse::RecDescent::_trace(q{Trying subrule: [section_head]},
746             Parse::RecDescent::_tracefirst($text),
747             q{_alternation_1_of_production_1_of_rule_line},
748             $tracelevel)
749             if defined $::RD_TRACE;
750 2     2   21 if (1) { no strict qw{refs};
  2         4  
  2         885  
  21         31  
751 21         67 $expectation->is(q{})->at($text);
752 21 50   21   288 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::section_head($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         50  
753             {
754            
755 21 50       46 Parse::RecDescent::_trace(q{<>},
756             Parse::RecDescent::_tracefirst($text),
757             q{_alternation_1_of_production_1_of_rule_line},
758             $tracelevel)
759             if defined $::RD_TRACE;
760 21         65 $expectation->failed();
761 21         123 last;
762             }
763 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [section_head]<< (return value: [}
764             . $_tok . q{]},
765              
766             Parse::RecDescent::_tracefirst($text),
767             q{_alternation_1_of_production_1_of_rule_line},
768             $tracelevel)
769             if defined $::RD_TRACE;
770 0         0 $item{q{section_head}} = $_tok;
771 0         0 push @item, $_tok;
772            
773             }
774              
775 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [section_head]<<},
776             Parse::RecDescent::_tracefirst($text),
777             q{_alternation_1_of_production_1_of_rule_line},
778             $tracelevel)
779             if defined $::RD_TRACE;
780              
781              
782              
783 0         0 $_matched = 1;
784 0         0 last;
785             }
786              
787              
788 21   33     128 while (!$_matched && !$commit)
789             {
790            
791 21 50       91 Parse::RecDescent::_trace(q{Trying production: [heading]},
792             Parse::RecDescent::_tracefirst($_[1]),
793             q{_alternation_1_of_production_1_of_rule_line},
794             $tracelevel)
795             if defined $::RD_TRACE;
796 21         60 my $thisprod = $thisrule->{"prods"}[4];
797 21         38 $text = $_[1];
798 21         39 my $_savetext;
799 21         55 @item = (q{_alternation_1_of_production_1_of_rule_line});
800 21         57 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
801 21         33 my $repcount = 0;
802              
803              
804 21 50       56 Parse::RecDescent::_trace(q{Trying subrule: [heading]},
805             Parse::RecDescent::_tracefirst($text),
806             q{_alternation_1_of_production_1_of_rule_line},
807             $tracelevel)
808             if defined $::RD_TRACE;
809 2     2   12 if (1) { no strict qw{refs};
  2         5  
  2         942  
  21         45  
810 21         72 $expectation->is(q{})->at($text);
811 21 50   21   279 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::heading($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         53  
812             {
813            
814 21 50       57 Parse::RecDescent::_trace(q{<>},
815             Parse::RecDescent::_tracefirst($text),
816             q{_alternation_1_of_production_1_of_rule_line},
817             $tracelevel)
818             if defined $::RD_TRACE;
819 21         61 $expectation->failed();
820 21         85 last;
821             }
822 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [heading]<< (return value: [}
823             . $_tok . q{]},
824              
825             Parse::RecDescent::_tracefirst($text),
826             q{_alternation_1_of_production_1_of_rule_line},
827             $tracelevel)
828             if defined $::RD_TRACE;
829 0         0 $item{q{heading}} = $_tok;
830 0         0 push @item, $_tok;
831            
832             }
833              
834 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [heading]<<},
835             Parse::RecDescent::_tracefirst($text),
836             q{_alternation_1_of_production_1_of_rule_line},
837             $tracelevel)
838             if defined $::RD_TRACE;
839              
840              
841              
842 0         0 $_matched = 1;
843 0         0 last;
844             }
845              
846              
847 21   33     136 while (!$_matched && !$commit)
848             {
849            
850 21 50       52 Parse::RecDescent::_trace(q{Trying production: [submit]},
851             Parse::RecDescent::_tracefirst($_[1]),
852             q{_alternation_1_of_production_1_of_rule_line},
853             $tracelevel)
854             if defined $::RD_TRACE;
855 21         52 my $thisprod = $thisrule->{"prods"}[5];
856 21         42 $text = $_[1];
857 21         33 my $_savetext;
858 21         46 @item = (q{_alternation_1_of_production_1_of_rule_line});
859 21         50 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
860 21         32 my $repcount = 0;
861              
862              
863 21 50       61 Parse::RecDescent::_trace(q{Trying subrule: [submit]},
864             Parse::RecDescent::_tracefirst($text),
865             q{_alternation_1_of_production_1_of_rule_line},
866             $tracelevel)
867             if defined $::RD_TRACE;
868 2     2   16 if (1) { no strict qw{refs};
  2         4  
  2         994  
  21         44  
869 21         73 $expectation->is(q{})->at($text);
870 21 50   21   265 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::submit($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         49  
871             {
872            
873 21 50       58 Parse::RecDescent::_trace(q{<>},
874             Parse::RecDescent::_tracefirst($text),
875             q{_alternation_1_of_production_1_of_rule_line},
876             $tracelevel)
877             if defined $::RD_TRACE;
878 21         71 $expectation->failed();
879 21         84 last;
880             }
881 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [submit]<< (return value: [}
882             . $_tok . q{]},
883              
884             Parse::RecDescent::_tracefirst($text),
885             q{_alternation_1_of_production_1_of_rule_line},
886             $tracelevel)
887             if defined $::RD_TRACE;
888 0         0 $item{q{submit}} = $_tok;
889 0         0 push @item, $_tok;
890            
891             }
892              
893 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [submit]<<},
894             Parse::RecDescent::_tracefirst($text),
895             q{_alternation_1_of_production_1_of_rule_line},
896             $tracelevel)
897             if defined $::RD_TRACE;
898              
899              
900              
901 0         0 $_matched = 1;
902 0         0 last;
903             }
904              
905              
906 21   33     131 while (!$_matched && !$commit)
907             {
908            
909 21 50       44 Parse::RecDescent::_trace(q{Trying production: [reset]},
910             Parse::RecDescent::_tracefirst($_[1]),
911             q{_alternation_1_of_production_1_of_rule_line},
912             $tracelevel)
913             if defined $::RD_TRACE;
914 21         52 my $thisprod = $thisrule->{"prods"}[6];
915 21         36 $text = $_[1];
916 21         46 my $_savetext;
917 21         57 @item = (q{_alternation_1_of_production_1_of_rule_line});
918 21         47 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
919 21         36 my $repcount = 0;
920              
921              
922 21 50       65 Parse::RecDescent::_trace(q{Trying subrule: [reset]},
923             Parse::RecDescent::_tracefirst($text),
924             q{_alternation_1_of_production_1_of_rule_line},
925             $tracelevel)
926             if defined $::RD_TRACE;
927 2     2   12 if (1) { no strict qw{refs};
  2         6  
  2         915  
  21         23  
928 21         77 $expectation->is(q{})->at($text);
929 21 50   21   266 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::reset($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         50  
930             {
931            
932 21 50       50 Parse::RecDescent::_trace(q{<>},
933             Parse::RecDescent::_tracefirst($text),
934             q{_alternation_1_of_production_1_of_rule_line},
935             $tracelevel)
936             if defined $::RD_TRACE;
937 21         69 $expectation->failed();
938 21         88 last;
939             }
940 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [reset]<< (return value: [}
941             . $_tok . q{]},
942              
943             Parse::RecDescent::_tracefirst($text),
944             q{_alternation_1_of_production_1_of_rule_line},
945             $tracelevel)
946             if defined $::RD_TRACE;
947 0         0 $item{q{reset}} = $_tok;
948 0         0 push @item, $_tok;
949            
950             }
951              
952 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [reset]<<},
953             Parse::RecDescent::_tracefirst($text),
954             q{_alternation_1_of_production_1_of_rule_line},
955             $tracelevel)
956             if defined $::RD_TRACE;
957              
958              
959              
960 0         0 $_matched = 1;
961 0         0 last;
962             }
963              
964              
965 21   33     130 while (!$_matched && !$commit)
966             {
967            
968 21 50       67 Parse::RecDescent::_trace(q{Trying production: [group_field]},
969             Parse::RecDescent::_tracefirst($_[1]),
970             q{_alternation_1_of_production_1_of_rule_line},
971             $tracelevel)
972             if defined $::RD_TRACE;
973 21         57 my $thisprod = $thisrule->{"prods"}[7];
974 21         41 $text = $_[1];
975 21         27 my $_savetext;
976 21         52 @item = (q{_alternation_1_of_production_1_of_rule_line});
977 21         54 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
978 21         31 my $repcount = 0;
979              
980              
981 21 50       51 Parse::RecDescent::_trace(q{Trying subrule: [group_field]},
982             Parse::RecDescent::_tracefirst($text),
983             q{_alternation_1_of_production_1_of_rule_line},
984             $tracelevel)
985             if defined $::RD_TRACE;
986 2     2   12 if (1) { no strict qw{refs};
  2         3  
  2         843  
  21         28  
987 21         66 $expectation->is(q{})->at($text);
988 21 50   21   334 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::group_field($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         44  
989             {
990            
991 21 50       55 Parse::RecDescent::_trace(q{<>},
992             Parse::RecDescent::_tracefirst($text),
993             q{_alternation_1_of_production_1_of_rule_line},
994             $tracelevel)
995             if defined $::RD_TRACE;
996 21         75 $expectation->failed();
997 21         86 last;
998             }
999 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [group_field]<< (return value: [}
1000             . $_tok . q{]},
1001              
1002             Parse::RecDescent::_tracefirst($text),
1003             q{_alternation_1_of_production_1_of_rule_line},
1004             $tracelevel)
1005             if defined $::RD_TRACE;
1006 0         0 $item{q{group_field}} = $_tok;
1007 0         0 push @item, $_tok;
1008            
1009             }
1010              
1011 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [group_field]<<},
1012             Parse::RecDescent::_tracefirst($text),
1013             q{_alternation_1_of_production_1_of_rule_line},
1014             $tracelevel)
1015             if defined $::RD_TRACE;
1016              
1017              
1018              
1019 0         0 $_matched = 1;
1020 0         0 last;
1021             }
1022              
1023              
1024 21   33     128 while (!$_matched && !$commit)
1025             {
1026            
1027 21 50       51 Parse::RecDescent::_trace(q{Trying production: [field_group]},
1028             Parse::RecDescent::_tracefirst($_[1]),
1029             q{_alternation_1_of_production_1_of_rule_line},
1030             $tracelevel)
1031             if defined $::RD_TRACE;
1032 21         62 my $thisprod = $thisrule->{"prods"}[8];
1033 21         33 $text = $_[1];
1034 21         25 my $_savetext;
1035 21         57 @item = (q{_alternation_1_of_production_1_of_rule_line});
1036 21         204 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
1037 21         36 my $repcount = 0;
1038              
1039              
1040 21 50       56 Parse::RecDescent::_trace(q{Trying subrule: [field_group]},
1041             Parse::RecDescent::_tracefirst($text),
1042             q{_alternation_1_of_production_1_of_rule_line},
1043             $tracelevel)
1044             if defined $::RD_TRACE;
1045 2     2   11 if (1) { no strict qw{refs};
  2         3  
  2         893  
  21         34  
1046 21         72 $expectation->is(q{})->at($text);
1047 21 50   21   284 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::field_group($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         53  
1048             {
1049            
1050 21 50       59 Parse::RecDescent::_trace(q{<>},
1051             Parse::RecDescent::_tracefirst($text),
1052             q{_alternation_1_of_production_1_of_rule_line},
1053             $tracelevel)
1054             if defined $::RD_TRACE;
1055 21         67 $expectation->failed();
1056 21         89 last;
1057             }
1058 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [field_group]<< (return value: [}
1059             . $_tok . q{]},
1060              
1061             Parse::RecDescent::_tracefirst($text),
1062             q{_alternation_1_of_production_1_of_rule_line},
1063             $tracelevel)
1064             if defined $::RD_TRACE;
1065 0         0 $item{q{field_group}} = $_tok;
1066 0         0 push @item, $_tok;
1067            
1068             }
1069              
1070 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [field_group]<<},
1071             Parse::RecDescent::_tracefirst($text),
1072             q{_alternation_1_of_production_1_of_rule_line},
1073             $tracelevel)
1074             if defined $::RD_TRACE;
1075              
1076              
1077              
1078 0         0 $_matched = 1;
1079 0         0 last;
1080             }
1081              
1082              
1083 21   33     128 while (!$_matched && !$commit)
1084             {
1085            
1086 21 50       50 Parse::RecDescent::_trace(q{Trying production: [unknown_directive]},
1087             Parse::RecDescent::_tracefirst($_[1]),
1088             q{_alternation_1_of_production_1_of_rule_line},
1089             $tracelevel)
1090             if defined $::RD_TRACE;
1091 21         56 my $thisprod = $thisrule->{"prods"}[9];
1092 21         40 $text = $_[1];
1093 21         25 my $_savetext;
1094 21         56 @item = (q{_alternation_1_of_production_1_of_rule_line});
1095 21         53 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
1096 21         30 my $repcount = 0;
1097              
1098              
1099 21 50       60 Parse::RecDescent::_trace(q{Trying subrule: [unknown_directive]},
1100             Parse::RecDescent::_tracefirst($text),
1101             q{_alternation_1_of_production_1_of_rule_line},
1102             $tracelevel)
1103             if defined $::RD_TRACE;
1104 2     2   11 if (1) { no strict qw{refs};
  2         25  
  2         910  
  21         59  
1105 21         87 $expectation->is(q{})->at($text);
1106 21 50   21   259 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::unknown_directive($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         52  
1107             {
1108            
1109 21 50       146 Parse::RecDescent::_trace(q{<>},
1110             Parse::RecDescent::_tracefirst($text),
1111             q{_alternation_1_of_production_1_of_rule_line},
1112             $tracelevel)
1113             if defined $::RD_TRACE;
1114 21         68 $expectation->failed();
1115 21         80 last;
1116             }
1117 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [unknown_directive]<< (return value: [}
1118             . $_tok . q{]},
1119              
1120             Parse::RecDescent::_tracefirst($text),
1121             q{_alternation_1_of_production_1_of_rule_line},
1122             $tracelevel)
1123             if defined $::RD_TRACE;
1124 0         0 $item{q{unknown_directive}} = $_tok;
1125 0         0 push @item, $_tok;
1126            
1127             }
1128              
1129 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [unknown_directive]<<},
1130             Parse::RecDescent::_tracefirst($text),
1131             q{_alternation_1_of_production_1_of_rule_line},
1132             $tracelevel)
1133             if defined $::RD_TRACE;
1134              
1135              
1136              
1137 0         0 $_matched = 1;
1138 0         0 last;
1139             }
1140              
1141              
1142 21   33     128 while (!$_matched && !$commit)
1143             {
1144            
1145 21 50       49 Parse::RecDescent::_trace(q{Trying production: [field]},
1146             Parse::RecDescent::_tracefirst($_[1]),
1147             q{_alternation_1_of_production_1_of_rule_line},
1148             $tracelevel)
1149             if defined $::RD_TRACE;
1150 21         60 my $thisprod = $thisrule->{"prods"}[10];
1151 21         35 $text = $_[1];
1152 21         33 my $_savetext;
1153 21         59 @item = (q{_alternation_1_of_production_1_of_rule_line});
1154 21         59 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
1155 21         30 my $repcount = 0;
1156              
1157              
1158 21 50       58 Parse::RecDescent::_trace(q{Trying subrule: [field]},
1159             Parse::RecDescent::_tracefirst($text),
1160             q{_alternation_1_of_production_1_of_rule_line},
1161             $tracelevel)
1162             if defined $::RD_TRACE;
1163 2     2   10 if (1) { no strict qw{refs};
  2         3  
  2         12902  
  21         31  
1164 21         68 $expectation->is(q{})->at($text);
1165 21 100   21   242 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::field($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         52  
1166             {
1167            
1168 11 50       26 Parse::RecDescent::_trace(q{<>},
1169             Parse::RecDescent::_tracefirst($text),
1170             q{_alternation_1_of_production_1_of_rule_line},
1171             $tracelevel)
1172             if defined $::RD_TRACE;
1173 11         30 $expectation->failed();
1174 11         40 last;
1175             }
1176 10 50       63 Parse::RecDescent::_trace(q{>>Matched subrule: [field]<< (return value: [}
1177             . $_tok . q{]},
1178              
1179             Parse::RecDescent::_tracefirst($text),
1180             q{_alternation_1_of_production_1_of_rule_line},
1181             $tracelevel)
1182             if defined $::RD_TRACE;
1183 10         30 $item{q{field}} = $_tok;
1184 10         24 push @item, $_tok;
1185            
1186             }
1187              
1188 10 50       39 Parse::RecDescent::_trace(q{>>Matched production: [field]<<},
1189             Parse::RecDescent::_tracefirst($text),
1190             q{_alternation_1_of_production_1_of_rule_line},
1191             $tracelevel)
1192             if defined $::RD_TRACE;
1193              
1194              
1195              
1196 10         16 $_matched = 1;
1197 10         25 last;
1198             }
1199              
1200              
1201 21   66     97 while (!$_matched && !$commit)
1202             {
1203            
1204 11 50       29 Parse::RecDescent::_trace(q{Trying production: [comment]},
1205             Parse::RecDescent::_tracefirst($_[1]),
1206             q{_alternation_1_of_production_1_of_rule_line},
1207             $tracelevel)
1208             if defined $::RD_TRACE;
1209 11         30 my $thisprod = $thisrule->{"prods"}[11];
1210 11         16 $text = $_[1];
1211 11         17 my $_savetext;
1212 11         26 @item = (q{_alternation_1_of_production_1_of_rule_line});
1213 11         31 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
1214 11         18 my $repcount = 0;
1215              
1216              
1217 11 50       31 Parse::RecDescent::_trace(q{Trying subrule: [comment]},
1218             Parse::RecDescent::_tracefirst($text),
1219             q{_alternation_1_of_production_1_of_rule_line},
1220             $tracelevel)
1221             if defined $::RD_TRACE;
1222 2     2   17 if (1) { no strict qw{refs};
  2         3  
  2         1210  
  11         20  
1223 11         39 $expectation->is(q{})->at($text);
1224 11 50   11   125 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::comment($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  11         29  
1225             {
1226            
1227 11 50       27 Parse::RecDescent::_trace(q{<>},
1228             Parse::RecDescent::_tracefirst($text),
1229             q{_alternation_1_of_production_1_of_rule_line},
1230             $tracelevel)
1231             if defined $::RD_TRACE;
1232 11         36 $expectation->failed();
1233 11         41 last;
1234             }
1235 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [comment]<< (return value: [}
1236             . $_tok . q{]},
1237              
1238             Parse::RecDescent::_tracefirst($text),
1239             q{_alternation_1_of_production_1_of_rule_line},
1240             $tracelevel)
1241             if defined $::RD_TRACE;
1242 0         0 $item{q{comment}} = $_tok;
1243 0         0 push @item, $_tok;
1244            
1245             }
1246              
1247 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [comment]<<},
1248             Parse::RecDescent::_tracefirst($text),
1249             q{_alternation_1_of_production_1_of_rule_line},
1250             $tracelevel)
1251             if defined $::RD_TRACE;
1252              
1253              
1254              
1255 0         0 $_matched = 1;
1256 0         0 last;
1257             }
1258              
1259              
1260 21   66     103 while (!$_matched && !$commit)
1261             {
1262            
1263 11 50       32 Parse::RecDescent::_trace(q{Trying production: [blank]},
1264             Parse::RecDescent::_tracefirst($_[1]),
1265             q{_alternation_1_of_production_1_of_rule_line},
1266             $tracelevel)
1267             if defined $::RD_TRACE;
1268 11         28 my $thisprod = $thisrule->{"prods"}[12];
1269 11         14 $text = $_[1];
1270 11         18 my $_savetext;
1271 11         25 @item = (q{_alternation_1_of_production_1_of_rule_line});
1272 11         30 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_line});
1273 11         26 my $repcount = 0;
1274              
1275              
1276 11 50       28 Parse::RecDescent::_trace(q{Trying subrule: [blank]},
1277             Parse::RecDescent::_tracefirst($text),
1278             q{_alternation_1_of_production_1_of_rule_line},
1279             $tracelevel)
1280             if defined $::RD_TRACE;
1281 2     2   14 if (1) { no strict qw{refs};
  2         4  
  2         2618  
  11         11  
1282 11         35 $expectation->is(q{})->at($text);
1283 11 50   11   124 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::blank($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  11         31  
1284             {
1285            
1286 0 0       0 Parse::RecDescent::_trace(q{<>},
1287             Parse::RecDescent::_tracefirst($text),
1288             q{_alternation_1_of_production_1_of_rule_line},
1289             $tracelevel)
1290             if defined $::RD_TRACE;
1291 0         0 $expectation->failed();
1292 0         0 last;
1293             }
1294 11 50       45 Parse::RecDescent::_trace(q{>>Matched subrule: [blank]<< (return value: [}
1295             . $_tok . q{]},
1296              
1297             Parse::RecDescent::_tracefirst($text),
1298             q{_alternation_1_of_production_1_of_rule_line},
1299             $tracelevel)
1300             if defined $::RD_TRACE;
1301 11         24 $item{q{blank}} = $_tok;
1302 11         23 push @item, $_tok;
1303            
1304             }
1305              
1306 11 50       26 Parse::RecDescent::_trace(q{>>Matched production: [blank]<<},
1307             Parse::RecDescent::_tracefirst($text),
1308             q{_alternation_1_of_production_1_of_rule_line},
1309             $tracelevel)
1310             if defined $::RD_TRACE;
1311              
1312              
1313              
1314 11         14 $_matched = 1;
1315 11         16 last;
1316             }
1317              
1318              
1319 21 50 33     107 unless ( $_matched || defined($score) )
1320             {
1321            
1322              
1323 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
1324 0 0       0 Parse::RecDescent::_trace(q{<>},
1325             Parse::RecDescent::_tracefirst($_[1]),
1326             q{_alternation_1_of_production_1_of_rule_line},
1327             $tracelevel)
1328             if defined $::RD_TRACE;
1329 0         0 return undef;
1330             }
1331 21 50 33     122 if (!defined($return) && defined($score))
1332             {
1333 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1334             q{_alternation_1_of_production_1_of_rule_line},
1335             $tracelevel)
1336             if defined $::RD_TRACE;
1337 0         0 $return = $score_return;
1338             }
1339 21         36 splice @{$thisparser->{errors}}, $err_at;
  21         50  
1340 21 50       72 $return = $item[$#item] unless defined $return;
1341 21 50       53 if (defined $::RD_TRACE)
1342             {
1343 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1344             $return . q{])}, "",
1345             q{_alternation_1_of_production_1_of_rule_line},
1346             $tracelevel);
1347 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1348             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1349             Parse::RecDescent::_tracefirst($text),
1350             , q{_alternation_1_of_production_1_of_rule_line},
1351             $tracelevel)
1352             }
1353 21         37 $_[1] = $text;
1354 21         215 return $return;
1355             }
1356              
1357             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1358             sub Parse::RecDescent::Text::FormBuilder::Parser::other
1359             {
1360 24     24   448 my $thisparser = $_[0];
1361 2     2   22 use vars q{$tracelevel};
  2         5  
  2         5323  
1362 24   50     83 local $tracelevel = ($tracelevel||0)+1;
1363 24         47 $ERRORS = 0;
1364 24         77 my $thisrule = $thisparser->{"rules"}{"other"};
1365              
1366 24 50       68 Parse::RecDescent::_trace(q{Trying rule: [other]},
1367             Parse::RecDescent::_tracefirst($_[1]),
1368             q{other},
1369             $tracelevel)
1370             if defined $::RD_TRACE;
1371              
1372            
1373 24         35 my $err_at = @{$thisparser->{errors}};
  24         76  
1374              
1375 24         45 my $score;
1376             my $score_return;
1377 0         0 my $_tok;
1378 24         40 my $return = undef;
1379 24         38 my $_matched=0;
1380 24         34 my $commit=0;
1381 24         51 my @item = ();
1382 24         201 my %item = ();
1383 24         42 my $repeating = $_[2];
1384 24         112 my $_noactions = $_[3];
1385 24 50       72 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         73  
  24         57  
1386 24         42 my $_itempos = $_[5];
1387 24 50       83 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1388 24         48 my $text;
1389             my $lastsep;
1390 0         0 my $current_match;
1391 24         95 my $expectation = new Parse::RecDescent::Expectation(q{'+'});
1392 24         235 $expectation->at($_[1]);
1393            
1394 24         106 my $thisline;
1395 24         119 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1396              
1397            
1398              
1399 24   33     275 while (!$_matched && !$commit)
1400             {
1401            
1402 24 50       69 Parse::RecDescent::_trace(q{Trying production: ['+' 'other']},
1403             Parse::RecDescent::_tracefirst($_[1]),
1404             q{other},
1405             $tracelevel)
1406             if defined $::RD_TRACE;
1407 24         76 my $thisprod = $thisrule->{"prods"}[0];
1408 24         38 $text = $_[1];
1409 24         38 my $_savetext;
1410 24         53 @item = (q{other});
1411 24         70 %item = (__RULE__ => q{other});
1412 24         146 my $repcount = 0;
1413              
1414              
1415 24 50       75 Parse::RecDescent::_trace(q{Trying terminal: ['+']},
1416             Parse::RecDescent::_tracefirst($text),
1417             q{other},
1418             $tracelevel)
1419             if defined $::RD_TRACE;
1420 24         43 undef $lastsep;
1421 24         1199 $expectation->is(q{})->at($text);
1422            
1423              
1424 24 50 33     427 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\+/)
  24 50       261  
1425             {
1426 24 50       105 $text = $lastsep . $text if defined $lastsep;
1427            
1428 24         91 $expectation->failed();
1429 24 50       136 Parse::RecDescent::_trace(qq{<>},
1430             Parse::RecDescent::_tracefirst($text))
1431             if defined $::RD_TRACE;
1432 24         64 last;
1433             }
1434 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1435 0         0 substr($text,0,length($current_match),q{});
1436 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1437             . $current_match . q{])},
1438             Parse::RecDescent::_tracefirst($text))
1439             if defined $::RD_TRACE;
1440 0         0 push @item, $item{__STRING1__}=$current_match;
1441            
1442              
1443 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['other']},
1444             Parse::RecDescent::_tracefirst($text),
1445             q{other},
1446             $tracelevel)
1447             if defined $::RD_TRACE;
1448 0         0 undef $lastsep;
1449 0         0 $expectation->is(q{'other'})->at($text);
1450            
1451              
1452 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\Aother/)
  0 0       0  
1453             {
1454 0 0       0 $text = $lastsep . $text if defined $lastsep;
1455            
1456 0         0 $expectation->failed();
1457 0 0       0 Parse::RecDescent::_trace(qq{<>},
1458             Parse::RecDescent::_tracefirst($text))
1459             if defined $::RD_TRACE;
1460 0         0 last;
1461             }
1462 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1463 0         0 substr($text,0,length($current_match),q{});
1464 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1465             . $current_match . q{])},
1466             Parse::RecDescent::_tracefirst($text))
1467             if defined $::RD_TRACE;
1468 0         0 push @item, $item{__STRING2__}=$current_match;
1469            
1470              
1471 0 0       0 Parse::RecDescent::_trace(q{Trying action},
1472             Parse::RecDescent::_tracefirst($text),
1473             q{other},
1474             $tracelevel)
1475             if defined $::RD_TRACE;
1476            
1477              
1478 0 0       0 $_tok = ($_noactions) ? 0 : do { 1 };
  0         0  
1479 0 0       0 unless (defined $_tok)
1480             {
1481 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
1482             if defined $::RD_TRACE;
1483 0         0 last;
1484             }
1485 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1486             . $_tok . q{])},
1487             Parse::RecDescent::_tracefirst($text))
1488             if defined $::RD_TRACE;
1489 0         0 push @item, $_tok;
1490 0         0 $item{__ACTION1__}=$_tok;
1491            
1492              
1493 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['+' 'other']<<},
1494             Parse::RecDescent::_tracefirst($text),
1495             q{other},
1496             $tracelevel)
1497             if defined $::RD_TRACE;
1498              
1499              
1500              
1501 0         0 $_matched = 1;
1502 0         0 last;
1503             }
1504              
1505              
1506 24 50 33     155 unless ( $_matched || defined($score) )
1507             {
1508            
1509              
1510 24         50 $_[1] = $text; # NOT SURE THIS IS NEEDED
1511 24 50       76 Parse::RecDescent::_trace(q{<>},
1512             Parse::RecDescent::_tracefirst($_[1]),
1513             q{other},
1514             $tracelevel)
1515             if defined $::RD_TRACE;
1516 24         184 return undef;
1517             }
1518 0 0 0     0 if (!defined($return) && defined($score))
1519             {
1520 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1521             q{other},
1522             $tracelevel)
1523             if defined $::RD_TRACE;
1524 0         0 $return = $score_return;
1525             }
1526 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
1527 0 0       0 $return = $item[$#item] unless defined $return;
1528 0 0       0 if (defined $::RD_TRACE)
1529             {
1530 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1531             $return . q{])}, "",
1532             q{other},
1533             $tracelevel);
1534 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1535             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1536             Parse::RecDescent::_tracefirst($text),
1537             , q{other},
1538             $tracelevel)
1539             }
1540 0         0 $_[1] = $text;
1541 0         0 return $return;
1542             }
1543              
1544             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1545             sub Parse::RecDescent::Text::FormBuilder::Parser::list_var
1546             {
1547 24     24   61 my $thisparser = $_[0];
1548 2     2   16 use vars q{$tracelevel};
  2         4  
  2         2708  
1549 24   50     203 local $tracelevel = ($tracelevel||0)+1;
1550 24         47 $ERRORS = 0;
1551 24         90 my $thisrule = $thisparser->{"rules"}{"list_var"};
1552              
1553 24 50       224 Parse::RecDescent::_trace(q{Trying rule: [list_var]},
1554             Parse::RecDescent::_tracefirst($_[1]),
1555             q{list_var},
1556             $tracelevel)
1557             if defined $::RD_TRACE;
1558              
1559            
1560 24         73 my $err_at = @{$thisparser->{errors}};
  24         57  
1561              
1562 24         46 my $score;
1563             my $score_return;
1564 0         0 my $_tok;
1565 24         41 my $return = undef;
1566 24         48 my $_matched=0;
1567 24         36 my $commit=0;
1568 24         55 my @item = ();
1569 24         48 my %item = ();
1570 24         51 my $repeating = $_[2];
1571 24         42 my $_noactions = $_[3];
1572 24 50       79 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         49  
  24         2254  
1573 24         50 my $_itempos = $_[5];
1574 24 50       97 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1575 24         49 my $text;
1576             my $lastsep;
1577 0         0 my $current_match;
1578 24         128 my $expectation = new Parse::RecDescent::Expectation(q{/@[A-Z_]+/});
1579 24         332 $expectation->at($_[1]);
1580            
1581 24         117 my $thisline;
1582 24         131 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1583              
1584            
1585              
1586 24   33     431 while (!$_matched && !$commit)
1587             {
1588            
1589 24 50       67 Parse::RecDescent::_trace(q{Trying production: [/@[A-Z_]+/]},
1590             Parse::RecDescent::_tracefirst($_[1]),
1591             q{list_var},
1592             $tracelevel)
1593             if defined $::RD_TRACE;
1594 24         340 my $thisprod = $thisrule->{"prods"}[0];
1595 24         42 $text = $_[1];
1596 24         35 my $_savetext;
1597 24         58 @item = (q{list_var});
1598 24         86 %item = (__RULE__ => q{list_var});
1599 24         35 my $repcount = 0;
1600              
1601              
1602 24 50       65 Parse::RecDescent::_trace(q{Trying terminal: [/@[A-Z_]+/]}, Parse::RecDescent::_tracefirst($text),
1603             q{list_var},
1604             $tracelevel)
1605             if defined $::RD_TRACE;
1606 24         50 undef $lastsep;
1607 24         89 $expectation->is(q{})->at($text);
1608            
1609              
1610 24 50 33     341 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:@[A-Z_]+)/)
  24 50       283  
1611             {
1612 24 50       81 $text = $lastsep . $text if defined $lastsep;
1613 24         90 $expectation->failed();
1614 24 50       136 Parse::RecDescent::_trace(q{<>},
1615             Parse::RecDescent::_tracefirst($text))
1616             if defined $::RD_TRACE;
1617              
1618 24         62 last;
1619             }
1620 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1621 0         0 substr($text,0,length($current_match),q{});
1622 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1623             . $current_match . q{])},
1624             Parse::RecDescent::_tracefirst($text))
1625             if defined $::RD_TRACE;
1626 0         0 push @item, $item{__PATTERN1__}=$current_match;
1627            
1628              
1629 0 0       0 Parse::RecDescent::_trace(q{Trying action},
1630             Parse::RecDescent::_tracefirst($text),
1631             q{list_var},
1632             $tracelevel)
1633             if defined $::RD_TRACE;
1634            
1635              
1636 0 0       0 $_tok = ($_noactions) ? 0 : do { $list_var = $item[1] };
  0         0  
1637 0 0       0 unless (defined $_tok)
1638             {
1639 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
1640             if defined $::RD_TRACE;
1641 0         0 last;
1642             }
1643 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1644             . $_tok . q{])},
1645             Parse::RecDescent::_tracefirst($text))
1646             if defined $::RD_TRACE;
1647 0         0 push @item, $_tok;
1648 0         0 $item{__ACTION1__}=$_tok;
1649            
1650              
1651 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/@[A-Z_]+/]<<},
1652             Parse::RecDescent::_tracefirst($text),
1653             q{list_var},
1654             $tracelevel)
1655             if defined $::RD_TRACE;
1656              
1657              
1658              
1659 0         0 $_matched = 1;
1660 0         0 last;
1661             }
1662              
1663              
1664 24 50 33     127 unless ( $_matched || defined($score) )
1665             {
1666            
1667              
1668 24         151 $_[1] = $text; # NOT SURE THIS IS NEEDED
1669 24 50       68 Parse::RecDescent::_trace(q{<>},
1670             Parse::RecDescent::_tracefirst($_[1]),
1671             q{list_var},
1672             $tracelevel)
1673             if defined $::RD_TRACE;
1674 24         267 return undef;
1675             }
1676 0 0 0     0 if (!defined($return) && defined($score))
1677             {
1678 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1679             q{list_var},
1680             $tracelevel)
1681             if defined $::RD_TRACE;
1682 0         0 $return = $score_return;
1683             }
1684 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
1685 0 0       0 $return = $item[$#item] unless defined $return;
1686 0 0       0 if (defined $::RD_TRACE)
1687             {
1688 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1689             $return . q{])}, "",
1690             q{list_var},
1691             $tracelevel);
1692 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1693             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1694             Parse::RecDescent::_tracefirst($text),
1695             , q{list_var},
1696             $tracelevel)
1697             }
1698 0         0 $_[1] = $text;
1699 0         0 return $return;
1700             }
1701              
1702             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1703             sub Parse::RecDescent::Text::FormBuilder::Parser::bracket_block
1704             {
1705 34     34   68 my $thisparser = $_[0];
1706 2     2   14 use vars q{$tracelevel};
  2         4  
  2         4724  
1707 34   50     118 local $tracelevel = ($tracelevel||0)+1;
1708 34         58 $ERRORS = 0;
1709 34         97 my $thisrule = $thisparser->{"rules"}{"bracket_block"};
1710              
1711 34 50       90 Parse::RecDescent::_trace(q{Trying rule: [bracket_block]},
1712             Parse::RecDescent::_tracefirst($_[1]),
1713             q{bracket_block},
1714             $tracelevel)
1715             if defined $::RD_TRACE;
1716              
1717            
1718 34         47 my $err_at = @{$thisparser->{errors}};
  34         91  
1719              
1720 34         54 my $score;
1721             my $score_return;
1722 0         0 my $_tok;
1723 34         66 my $return = undef;
1724 34         55 my $_matched=0;
1725 34         49 my $commit=0;
1726 34         70 my @item = ();
1727 34         162 my %item = ();
1728 34         57 my $repeating = $_[2];
1729 34         59 my $_noactions = $_[3];
1730 34 50       98 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  34         54  
  34         1420  
1731 34         58 my $_itempos = $_[5];
1732 34 50       126 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1733 34         90 my $text;
1734             my $lastsep;
1735 0         0 my $current_match;
1736 34         143 my $expectation = new Parse::RecDescent::Expectation(q{'['});
1737 34         573 $expectation->at($_[1]);
1738            
1739 34         158 my $thisline;
1740 34         171 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1741              
1742            
1743              
1744 34   33     488 while (!$_matched && !$commit)
1745             {
1746 34 50       106 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
1747 34 50       94 Parse::RecDescent::_trace(q{Trying production: ['[' bracket_block_content ']']},
1748             Parse::RecDescent::_tracefirst($_[1]),
1749             q{bracket_block},
1750             $tracelevel)
1751             if defined $::RD_TRACE;
1752 34         104 my $thisprod = $thisrule->{"prods"}[0];
1753 34         54 $text = $_[1];
1754 34         59 my $_savetext;
1755 34         81 @item = (q{bracket_block});
1756 34         92 %item = (__RULE__ => q{bracket_block});
1757 34         56 my $repcount = 0;
1758              
1759              
1760 34 50       88 Parse::RecDescent::_trace(q{Trying terminal: ['[']},
1761             Parse::RecDescent::_tracefirst($text),
1762             q{bracket_block},
1763             $tracelevel)
1764             if defined $::RD_TRACE;
1765 34         54 undef $lastsep;
1766 34         122 $expectation->is(q{})->at($text);
1767            
1768              
1769 34 50 33     477 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\[/)
  34 50       363  
1770             {
1771 34 50       127 $text = $lastsep . $text if defined $lastsep;
1772            
1773 34         122 $expectation->failed();
1774 34 50       179 Parse::RecDescent::_trace(qq{<>},
1775             Parse::RecDescent::_tracefirst($text))
1776             if defined $::RD_TRACE;
1777 34         101 last;
1778             }
1779 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1780 0         0 substr($text,0,length($current_match),q{});
1781 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1782             . $current_match . q{])},
1783             Parse::RecDescent::_tracefirst($text))
1784             if defined $::RD_TRACE;
1785 0         0 push @item, $item{__STRING1__}=$current_match;
1786            
1787              
1788            
1789              
1790 0 0       0 Parse::RecDescent::_trace(q{Trying directive: []},
1791             Parse::RecDescent::_tracefirst($text),
1792             q{bracket_block},
1793             $tracelevel)
1794             if defined $::RD_TRACE;
1795 0         0 $_tok = do { my $oldskip = $skip; $skip=''; $oldskip };
  0         0  
  0         0  
  0         0  
1796 0 0       0 if (defined($_tok))
1797             {
1798 0 0       0 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
1799             . $_tok . q{])},
1800             Parse::RecDescent::_tracefirst($text))
1801             if defined $::RD_TRACE;
1802             }
1803             else
1804             {
1805 0 0       0 Parse::RecDescent::_trace(q{<>},
1806             Parse::RecDescent::_tracefirst($text))
1807             if defined $::RD_TRACE;
1808             }
1809            
1810 0 0       0 last unless defined $_tok;
1811 0         0 push @item, $item{__DIRECTIVE1__}=$_tok;
1812            
1813              
1814 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [bracket_block_content]},
1815             Parse::RecDescent::_tracefirst($text),
1816             q{bracket_block},
1817             $tracelevel)
1818             if defined $::RD_TRACE;
1819 0         0 $expectation->is(q{bracket_block_content})->at($text);
1820            
1821 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::bracket_block_content, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
1822             {
1823 0 0       0 Parse::RecDescent::_trace(q{<>},
1824             Parse::RecDescent::_tracefirst($text),
1825             q{bracket_block},
1826             $tracelevel)
1827             if defined $::RD_TRACE;
1828 0         0 last;
1829             }
1830 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bracket_block_content]<< (}
1831             . @$_tok . q{ times)},
1832              
1833             Parse::RecDescent::_tracefirst($text),
1834             q{bracket_block},
1835             $tracelevel)
1836             if defined $::RD_TRACE;
1837 0         0 $item{q{bracket_block_content(s)}} = $_tok;
1838 0         0 push @item, $_tok;
1839            
1840              
1841              
1842 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [']']},
1843             Parse::RecDescent::_tracefirst($text),
1844             q{bracket_block},
1845             $tracelevel)
1846             if defined $::RD_TRACE;
1847 0         0 undef $lastsep;
1848 0         0 $expectation->is(q{']'})->at($text);
1849            
1850              
1851 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\]/)
  0 0       0  
1852             {
1853 0 0       0 $text = $lastsep . $text if defined $lastsep;
1854            
1855 0         0 $expectation->failed();
1856 0 0       0 Parse::RecDescent::_trace(qq{<>},
1857             Parse::RecDescent::_tracefirst($text))
1858             if defined $::RD_TRACE;
1859 0         0 last;
1860             }
1861 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
1862 0         0 substr($text,0,length($current_match),q{});
1863 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1864             . $current_match . q{])},
1865             Parse::RecDescent::_tracefirst($text))
1866             if defined $::RD_TRACE;
1867 0         0 push @item, $item{__STRING2__}=$current_match;
1868            
1869              
1870 0 0       0 Parse::RecDescent::_trace(q{Trying action},
1871             Parse::RecDescent::_tracefirst($text),
1872             q{bracket_block},
1873             $tracelevel)
1874             if defined $::RD_TRACE;
1875            
1876              
1877 0 0       0 $_tok = ($_noactions) ? 0 : do { join('', @{ $item[3] }) };
  0         0  
  0         0  
1878 0 0       0 unless (defined $_tok)
1879             {
1880 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
1881             if defined $::RD_TRACE;
1882 0         0 last;
1883             }
1884 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1885             . $_tok . q{])},
1886             Parse::RecDescent::_tracefirst($text))
1887             if defined $::RD_TRACE;
1888 0         0 push @item, $_tok;
1889 0         0 $item{__ACTION1__}=$_tok;
1890            
1891              
1892 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['[' bracket_block_content ']']<<},
1893             Parse::RecDescent::_tracefirst($text),
1894             q{bracket_block},
1895             $tracelevel)
1896             if defined $::RD_TRACE;
1897              
1898              
1899              
1900 0         0 $_matched = 1;
1901 0         0 last;
1902             }
1903              
1904              
1905 34 50 33     499 unless ( $_matched || defined($score) )
1906             {
1907            
1908              
1909 34         218 $_[1] = $text; # NOT SURE THIS IS NEEDED
1910 34 50       77 Parse::RecDescent::_trace(q{<>},
1911             Parse::RecDescent::_tracefirst($_[1]),
1912             q{bracket_block},
1913             $tracelevel)
1914             if defined $::RD_TRACE;
1915 34         279 return undef;
1916             }
1917 0 0 0     0 if (!defined($return) && defined($score))
1918             {
1919 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1920             q{bracket_block},
1921             $tracelevel)
1922             if defined $::RD_TRACE;
1923 0         0 $return = $score_return;
1924             }
1925 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
1926 0 0       0 $return = $item[$#item] unless defined $return;
1927 0 0       0 if (defined $::RD_TRACE)
1928             {
1929 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1930             $return . q{])}, "",
1931             q{bracket_block},
1932             $tracelevel);
1933 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
1934             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1935             Parse::RecDescent::_tracefirst($text),
1936             , q{bracket_block},
1937             $tracelevel)
1938             }
1939 0         0 $_[1] = $text;
1940 0         0 return $return;
1941             }
1942              
1943             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
1944             sub Parse::RecDescent::Text::FormBuilder::Parser::dynamic_list
1945             {
1946 0     0   0 my $thisparser = $_[0];
1947 2     2   19 use vars q{$tracelevel};
  2         5  
  2         3357  
1948 0   0     0 local $tracelevel = ($tracelevel||0)+1;
1949 0         0 $ERRORS = 0;
1950 0         0 my $thisrule = $thisparser->{"rules"}{"dynamic_list"};
1951              
1952 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [dynamic_list]},
1953             Parse::RecDescent::_tracefirst($_[1]),
1954             q{dynamic_list},
1955             $tracelevel)
1956             if defined $::RD_TRACE;
1957              
1958            
1959 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
1960              
1961 0         0 my $score;
1962             my $score_return;
1963 0         0 my $_tok;
1964 0         0 my $return = undef;
1965 0         0 my $_matched=0;
1966 0         0 my $commit=0;
1967 0         0 my @item = ();
1968 0         0 my %item = ();
1969 0         0 my $repeating = $_[2];
1970 0         0 my $_noactions = $_[3];
1971 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
1972 0         0 my $_itempos = $_[5];
1973 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1974 0         0 my $text;
1975             my $lastsep;
1976 0         0 my $current_match;
1977 0         0 my $expectation = new Parse::RecDescent::Expectation(q{'&'});
1978 0         0 $expectation->at($_[1]);
1979            
1980 0         0 my $thisline;
1981 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1982              
1983            
1984              
1985 0   0     0 while (!$_matched && !$commit)
1986             {
1987            
1988 0 0       0 Parse::RecDescent::_trace(q{Trying production: ['&' ]},
1989             Parse::RecDescent::_tracefirst($_[1]),
1990             q{dynamic_list},
1991             $tracelevel)
1992             if defined $::RD_TRACE;
1993 0         0 my $thisprod = $thisrule->{"prods"}[0];
1994 0         0 $text = $_[1];
1995 0         0 my $_savetext;
1996 0         0 @item = (q{dynamic_list});
1997 0         0 %item = (__RULE__ => q{dynamic_list});
1998 0         0 my $repcount = 0;
1999              
2000              
2001 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['&']},
2002             Parse::RecDescent::_tracefirst($text),
2003             q{dynamic_list},
2004             $tracelevel)
2005             if defined $::RD_TRACE;
2006 0         0 undef $lastsep;
2007 0         0 $expectation->is(q{})->at($text);
2008            
2009              
2010 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\&/)
  0 0       0  
2011             {
2012 0 0       0 $text = $lastsep . $text if defined $lastsep;
2013            
2014 0         0 $expectation->failed();
2015 0 0       0 Parse::RecDescent::_trace(qq{<>},
2016             Parse::RecDescent::_tracefirst($text))
2017             if defined $::RD_TRACE;
2018 0         0 last;
2019             }
2020 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2021 0         0 substr($text,0,length($current_match),q{});
2022 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2023             . $current_match . q{])},
2024             Parse::RecDescent::_tracefirst($text))
2025             if defined $::RD_TRACE;
2026 0         0 push @item, $item{__STRING1__}=$current_match;
2027            
2028              
2029            
2030              
2031 0 0       0 Parse::RecDescent::_trace(q{Trying directive: []},
2032             Parse::RecDescent::_tracefirst($text),
2033             q{dynamic_list},
2034             $tracelevel)
2035             if defined $::RD_TRACE;
2036 0         0 $_tok = do { Text::Balanced::extract_codeblock($text,undef,$skip,'{}');
  0         0  
2037             };
2038 0 0       0 if (defined($_tok))
2039             {
2040 0 0       0 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
2041             . $_tok . q{])},
2042             Parse::RecDescent::_tracefirst($text))
2043             if defined $::RD_TRACE;
2044             }
2045             else
2046             {
2047 0 0       0 Parse::RecDescent::_trace(q{<>},
2048             Parse::RecDescent::_tracefirst($text))
2049             if defined $::RD_TRACE;
2050             }
2051            
2052 0 0       0 last unless defined $_tok;
2053 0         0 push @item, $item{__DIRECTIVE1__}=$_tok;
2054            
2055              
2056 0 0       0 Parse::RecDescent::_trace(q{Trying action},
2057             Parse::RecDescent::_tracefirst($text),
2058             q{dynamic_list},
2059             $tracelevel)
2060             if defined $::RD_TRACE;
2061            
2062              
2063 0 0       0 $_tok = ($_noactions) ? 0 : do { warn "[Text::FormBuilder] Dynamic lists have been removed from the formspec grammar"; };
  0         0  
2064 0 0       0 unless (defined $_tok)
2065             {
2066 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2067             if defined $::RD_TRACE;
2068 0         0 last;
2069             }
2070 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2071             . $_tok . q{])},
2072             Parse::RecDescent::_tracefirst($text))
2073             if defined $::RD_TRACE;
2074 0         0 push @item, $_tok;
2075 0         0 $item{__ACTION1__}=$_tok;
2076            
2077              
2078 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['&' ]<<},
2079             Parse::RecDescent::_tracefirst($text),
2080             q{dynamic_list},
2081             $tracelevel)
2082             if defined $::RD_TRACE;
2083              
2084              
2085              
2086 0         0 $_matched = 1;
2087 0         0 last;
2088             }
2089              
2090              
2091 0 0 0     0 unless ( $_matched || defined($score) )
2092             {
2093            
2094              
2095 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
2096 0 0       0 Parse::RecDescent::_trace(q{<>},
2097             Parse::RecDescent::_tracefirst($_[1]),
2098             q{dynamic_list},
2099             $tracelevel)
2100             if defined $::RD_TRACE;
2101 0         0 return undef;
2102             }
2103 0 0 0     0 if (!defined($return) && defined($score))
2104             {
2105 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2106             q{dynamic_list},
2107             $tracelevel)
2108             if defined $::RD_TRACE;
2109 0         0 $return = $score_return;
2110             }
2111 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
2112 0 0       0 $return = $item[$#item] unless defined $return;
2113 0 0       0 if (defined $::RD_TRACE)
2114             {
2115 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2116             $return . q{])}, "",
2117             q{dynamic_list},
2118             $tracelevel);
2119 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2120             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2121             Parse::RecDescent::_tracefirst($text),
2122             , q{dynamic_list},
2123             $tracelevel)
2124             }
2125 0         0 $_[1] = $text;
2126 0         0 return $return;
2127             }
2128              
2129             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2130             sub Parse::RecDescent::Text::FormBuilder::Parser::inner_bracket_block
2131             {
2132 0     0   0 my $thisparser = $_[0];
2133 2     2   27 use vars q{$tracelevel};
  2         7  
  2         4870  
2134 0   0     0 local $tracelevel = ($tracelevel||0)+1;
2135 0         0 $ERRORS = 0;
2136 0         0 my $thisrule = $thisparser->{"rules"}{"inner_bracket_block"};
2137              
2138 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [inner_bracket_block]},
2139             Parse::RecDescent::_tracefirst($_[1]),
2140             q{inner_bracket_block},
2141             $tracelevel)
2142             if defined $::RD_TRACE;
2143              
2144            
2145 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
2146              
2147 0         0 my $score;
2148             my $score_return;
2149 0         0 my $_tok;
2150 0         0 my $return = undef;
2151 0         0 my $_matched=0;
2152 0         0 my $commit=0;
2153 0         0 my @item = ();
2154 0         0 my %item = ();
2155 0         0 my $repeating = $_[2];
2156 0         0 my $_noactions = $_[3];
2157 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
2158 0         0 my $_itempos = $_[5];
2159 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2160 0         0 my $text;
2161             my $lastsep;
2162 0         0 my $current_match;
2163 0         0 my $expectation = new Parse::RecDescent::Expectation(q{'['});
2164 0         0 $expectation->at($_[1]);
2165            
2166 0         0 my $thisline;
2167 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2168              
2169            
2170              
2171 0   0     0 while (!$_matched && !$commit)
2172             {
2173 0 0       0 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
2174 0 0       0 Parse::RecDescent::_trace(q{Trying production: ['[' bracket_block_content ']']},
2175             Parse::RecDescent::_tracefirst($_[1]),
2176             q{inner_bracket_block},
2177             $tracelevel)
2178             if defined $::RD_TRACE;
2179 0         0 my $thisprod = $thisrule->{"prods"}[0];
2180 0         0 $text = $_[1];
2181 0         0 my $_savetext;
2182 0         0 @item = (q{inner_bracket_block});
2183 0         0 %item = (__RULE__ => q{inner_bracket_block});
2184 0         0 my $repcount = 0;
2185              
2186              
2187 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['[']},
2188             Parse::RecDescent::_tracefirst($text),
2189             q{inner_bracket_block},
2190             $tracelevel)
2191             if defined $::RD_TRACE;
2192 0         0 undef $lastsep;
2193 0         0 $expectation->is(q{})->at($text);
2194            
2195              
2196 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\[/)
  0 0       0  
2197             {
2198 0 0       0 $text = $lastsep . $text if defined $lastsep;
2199            
2200 0         0 $expectation->failed();
2201 0 0       0 Parse::RecDescent::_trace(qq{<>},
2202             Parse::RecDescent::_tracefirst($text))
2203             if defined $::RD_TRACE;
2204 0         0 last;
2205             }
2206 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2207 0         0 substr($text,0,length($current_match),q{});
2208 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2209             . $current_match . q{])},
2210             Parse::RecDescent::_tracefirst($text))
2211             if defined $::RD_TRACE;
2212 0         0 push @item, $item{__STRING1__}=$current_match;
2213            
2214              
2215            
2216              
2217 0 0       0 Parse::RecDescent::_trace(q{Trying directive: []},
2218             Parse::RecDescent::_tracefirst($text),
2219             q{inner_bracket_block},
2220             $tracelevel)
2221             if defined $::RD_TRACE;
2222 0         0 $_tok = do { my $oldskip = $skip; $skip=''; $oldskip };
  0         0  
  0         0  
  0         0  
2223 0 0       0 if (defined($_tok))
2224             {
2225 0 0       0 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
2226             . $_tok . q{])},
2227             Parse::RecDescent::_tracefirst($text))
2228             if defined $::RD_TRACE;
2229             }
2230             else
2231             {
2232 0 0       0 Parse::RecDescent::_trace(q{<>},
2233             Parse::RecDescent::_tracefirst($text))
2234             if defined $::RD_TRACE;
2235             }
2236            
2237 0 0       0 last unless defined $_tok;
2238 0         0 push @item, $item{__DIRECTIVE1__}=$_tok;
2239            
2240              
2241 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [bracket_block_content]},
2242             Parse::RecDescent::_tracefirst($text),
2243             q{inner_bracket_block},
2244             $tracelevel)
2245             if defined $::RD_TRACE;
2246 0         0 $expectation->is(q{bracket_block_content})->at($text);
2247            
2248 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::bracket_block_content, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
2249             {
2250 0 0       0 Parse::RecDescent::_trace(q{<>},
2251             Parse::RecDescent::_tracefirst($text),
2252             q{inner_bracket_block},
2253             $tracelevel)
2254             if defined $::RD_TRACE;
2255 0         0 last;
2256             }
2257 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bracket_block_content]<< (}
2258             . @$_tok . q{ times)},
2259              
2260             Parse::RecDescent::_tracefirst($text),
2261             q{inner_bracket_block},
2262             $tracelevel)
2263             if defined $::RD_TRACE;
2264 0         0 $item{q{bracket_block_content(s)}} = $_tok;
2265 0         0 push @item, $_tok;
2266            
2267              
2268              
2269 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [']']},
2270             Parse::RecDescent::_tracefirst($text),
2271             q{inner_bracket_block},
2272             $tracelevel)
2273             if defined $::RD_TRACE;
2274 0         0 undef $lastsep;
2275 0         0 $expectation->is(q{']'})->at($text);
2276            
2277              
2278 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\]/)
  0 0       0  
2279             {
2280 0 0       0 $text = $lastsep . $text if defined $lastsep;
2281            
2282 0         0 $expectation->failed();
2283 0 0       0 Parse::RecDescent::_trace(qq{<>},
2284             Parse::RecDescent::_tracefirst($text))
2285             if defined $::RD_TRACE;
2286 0         0 last;
2287             }
2288 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2289 0         0 substr($text,0,length($current_match),q{});
2290 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2291             . $current_match . q{])},
2292             Parse::RecDescent::_tracefirst($text))
2293             if defined $::RD_TRACE;
2294 0         0 push @item, $item{__STRING2__}=$current_match;
2295            
2296              
2297 0 0       0 Parse::RecDescent::_trace(q{Trying action},
2298             Parse::RecDescent::_tracefirst($text),
2299             q{inner_bracket_block},
2300             $tracelevel)
2301             if defined $::RD_TRACE;
2302            
2303              
2304 0 0       0 $_tok = ($_noactions) ? 0 : do { '[' . join('', @{ $item[3] }) . ']'; };
  0         0  
  0         0  
2305 0 0       0 unless (defined $_tok)
2306             {
2307 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2308             if defined $::RD_TRACE;
2309 0         0 last;
2310             }
2311 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2312             . $_tok . q{])},
2313             Parse::RecDescent::_tracefirst($text))
2314             if defined $::RD_TRACE;
2315 0         0 push @item, $_tok;
2316 0         0 $item{__ACTION1__}=$_tok;
2317            
2318              
2319 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['[' bracket_block_content ']']<<},
2320             Parse::RecDescent::_tracefirst($text),
2321             q{inner_bracket_block},
2322             $tracelevel)
2323             if defined $::RD_TRACE;
2324              
2325              
2326              
2327 0         0 $_matched = 1;
2328 0         0 last;
2329             }
2330              
2331              
2332 0 0 0     0 unless ( $_matched || defined($score) )
2333             {
2334            
2335              
2336 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
2337 0 0       0 Parse::RecDescent::_trace(q{<>},
2338             Parse::RecDescent::_tracefirst($_[1]),
2339             q{inner_bracket_block},
2340             $tracelevel)
2341             if defined $::RD_TRACE;
2342 0         0 return undef;
2343             }
2344 0 0 0     0 if (!defined($return) && defined($score))
2345             {
2346 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2347             q{inner_bracket_block},
2348             $tracelevel)
2349             if defined $::RD_TRACE;
2350 0         0 $return = $score_return;
2351             }
2352 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
2353 0 0       0 $return = $item[$#item] unless defined $return;
2354 0 0       0 if (defined $::RD_TRACE)
2355             {
2356 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2357             $return . q{])}, "",
2358             q{inner_bracket_block},
2359             $tracelevel);
2360 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2361             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2362             Parse::RecDescent::_tracefirst($text),
2363             , q{inner_bracket_block},
2364             $tracelevel)
2365             }
2366 0         0 $_[1] = $text;
2367 0         0 return $return;
2368             }
2369              
2370             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2371             sub Parse::RecDescent::Text::FormBuilder::Parser::author
2372             {
2373 21     21   41 my $thisparser = $_[0];
2374 2     2   20 use vars q{$tracelevel};
  2         6  
  2         3446  
2375 21   50     66 local $tracelevel = ($tracelevel||0)+1;
2376 21         36 $ERRORS = 0;
2377 21         59 my $thisrule = $thisparser->{"rules"}{"author"};
2378              
2379 21 50       58 Parse::RecDescent::_trace(q{Trying rule: [author]},
2380             Parse::RecDescent::_tracefirst($_[1]),
2381             q{author},
2382             $tracelevel)
2383             if defined $::RD_TRACE;
2384              
2385            
2386 21         25 my $err_at = @{$thisparser->{errors}};
  21         52  
2387              
2388 21         45 my $score;
2389             my $score_return;
2390 0         0 my $_tok;
2391 21         34 my $return = undef;
2392 21         30 my $_matched=0;
2393 21         34 my $commit=0;
2394 21         50 my @item = ();
2395 21         46 my %item = ();
2396 21         41 my $repeating = $_[2];
2397 21         29 my $_noactions = $_[3];
2398 21 50       61 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         25  
  21         57  
2399 21         40 my $_itempos = $_[5];
2400 21 50       85 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2401 21         45 my $text;
2402             my $lastsep;
2403 0         0 my $current_match;
2404 21         97 my $expectation = new Parse::RecDescent::Expectation(q{'!author'});
2405 21         181 $expectation->at($_[1]);
2406            
2407 21         95 my $thisline;
2408 21         165 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2409              
2410            
2411              
2412 21   33     267 while (!$_matched && !$commit)
2413             {
2414            
2415 21 50       59 Parse::RecDescent::_trace(q{Trying production: ['!author' /.*/]},
2416             Parse::RecDescent::_tracefirst($_[1]),
2417             q{author},
2418             $tracelevel)
2419             if defined $::RD_TRACE;
2420 21         59 my $thisprod = $thisrule->{"prods"}[0];
2421 21         33 $text = $_[1];
2422 21         36 my $_savetext;
2423 21         51 @item = (q{author});
2424 21         58 %item = (__RULE__ => q{author});
2425 21         32 my $repcount = 0;
2426              
2427              
2428 21 50       50 Parse::RecDescent::_trace(q{Trying terminal: ['!author']},
2429             Parse::RecDescent::_tracefirst($text),
2430             q{author},
2431             $tracelevel)
2432             if defined $::RD_TRACE;
2433 21         45 undef $lastsep;
2434 21         67 $expectation->is(q{})->at($text);
2435            
2436              
2437 21 50 33     267 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!author/)
  21 50       223  
2438             {
2439 21 50       78 $text = $lastsep . $text if defined $lastsep;
2440            
2441 21         82 $expectation->failed();
2442 21 50       107 Parse::RecDescent::_trace(qq{<>},
2443             Parse::RecDescent::_tracefirst($text))
2444             if defined $::RD_TRACE;
2445 21         49 last;
2446             }
2447 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2448 0         0 substr($text,0,length($current_match),q{});
2449 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2450             . $current_match . q{])},
2451             Parse::RecDescent::_tracefirst($text))
2452             if defined $::RD_TRACE;
2453 0         0 push @item, $item{__STRING1__}=$current_match;
2454            
2455              
2456 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
2457             q{author},
2458             $tracelevel)
2459             if defined $::RD_TRACE;
2460 0         0 undef $lastsep;
2461 0         0 $expectation->is(q{/.*/})->at($text);
2462            
2463              
2464 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*)/)
  0 0       0  
2465             {
2466 0 0       0 $text = $lastsep . $text if defined $lastsep;
2467 0         0 $expectation->failed();
2468 0 0       0 Parse::RecDescent::_trace(q{<>},
2469             Parse::RecDescent::_tracefirst($text))
2470             if defined $::RD_TRACE;
2471              
2472 0         0 last;
2473             }
2474 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2475 0         0 substr($text,0,length($current_match),q{});
2476 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2477             . $current_match . q{])},
2478             Parse::RecDescent::_tracefirst($text))
2479             if defined $::RD_TRACE;
2480 0         0 push @item, $item{__PATTERN1__}=$current_match;
2481            
2482              
2483 0 0       0 Parse::RecDescent::_trace(q{Trying action},
2484             Parse::RecDescent::_tracefirst($text),
2485             q{author},
2486             $tracelevel)
2487             if defined $::RD_TRACE;
2488            
2489              
2490 0 0       0 $_tok = ($_noactions) ? 0 : do {
2491 0 0       0 warn "[Text::FormBuilder] Author redefined at input text line $thisline\n" if defined $formspec{author};
2492 0         0 $formspec{author} = $item[2];
2493             };
2494 0 0       0 unless (defined $_tok)
2495             {
2496 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2497             if defined $::RD_TRACE;
2498 0         0 last;
2499             }
2500 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2501             . $_tok . q{])},
2502             Parse::RecDescent::_tracefirst($text))
2503             if defined $::RD_TRACE;
2504 0         0 push @item, $_tok;
2505 0         0 $item{__ACTION1__}=$_tok;
2506            
2507              
2508 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!author' /.*/]<<},
2509             Parse::RecDescent::_tracefirst($text),
2510             q{author},
2511             $tracelevel)
2512             if defined $::RD_TRACE;
2513              
2514              
2515              
2516 0         0 $_matched = 1;
2517 0         0 last;
2518             }
2519              
2520              
2521 21 50 33     122 unless ( $_matched || defined($score) )
2522             {
2523            
2524              
2525 21         35 $_[1] = $text; # NOT SURE THIS IS NEEDED
2526 21 50       51 Parse::RecDescent::_trace(q{<>},
2527             Parse::RecDescent::_tracefirst($_[1]),
2528             q{author},
2529             $tracelevel)
2530             if defined $::RD_TRACE;
2531 21         403 return undef;
2532             }
2533 0 0 0     0 if (!defined($return) && defined($score))
2534             {
2535 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2536             q{author},
2537             $tracelevel)
2538             if defined $::RD_TRACE;
2539 0         0 $return = $score_return;
2540             }
2541 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
2542 0 0       0 $return = $item[$#item] unless defined $return;
2543 0 0       0 if (defined $::RD_TRACE)
2544             {
2545 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2546             $return . q{])}, "",
2547             q{author},
2548             $tracelevel);
2549 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2550             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2551             Parse::RecDescent::_tracefirst($text),
2552             , q{author},
2553             $tracelevel)
2554             }
2555 0         0 $_[1] = $text;
2556 0         0 return $return;
2557             }
2558              
2559             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2560             sub Parse::RecDescent::Text::FormBuilder::Parser::group_def
2561             {
2562 21     21   38 my $thisparser = $_[0];
2563 2     2   17 use vars q{$tracelevel};
  2         5  
  2         1816  
2564 21   50     66 local $tracelevel = ($tracelevel||0)+1;
2565 21         40 $ERRORS = 0;
2566 21         75 my $thisrule = $thisparser->{"rules"}{"group_def"};
2567              
2568 21 50       50 Parse::RecDescent::_trace(q{Trying rule: [group_def]},
2569             Parse::RecDescent::_tracefirst($_[1]),
2570             q{group_def},
2571             $tracelevel)
2572             if defined $::RD_TRACE;
2573              
2574            
2575 21         31 my $err_at = @{$thisparser->{errors}};
  21         58  
2576              
2577 21         42 my $score;
2578             my $score_return;
2579 0         0 my $_tok;
2580 21         41 my $return = undef;
2581 21         31 my $_matched=0;
2582 21         36 my $commit=0;
2583 21         42 my @item = ();
2584 21         53 my %item = ();
2585 21         30 my $repeating = $_[2];
2586 21         26 my $_noactions = $_[3];
2587 21 50       53 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         34  
  21         48  
2588 21         45 my $_itempos = $_[5];
2589 21 50       85 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2590 21         35 my $text;
2591             my $lastsep;
2592 0         0 my $current_match;
2593 21         93 my $expectation = new Parse::RecDescent::Expectation(q{'!group'});
2594 21         172 $expectation->at($_[1]);
2595            
2596 21         95 my $thisline;
2597 21         93 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2598              
2599            
2600              
2601 21   33     239 while (!$_matched && !$commit)
2602             {
2603            
2604 21 50       71 Parse::RecDescent::_trace(q{Trying production: ['!group' var_name '\{' field_line '\}']},
2605             Parse::RecDescent::_tracefirst($_[1]),
2606             q{group_def},
2607             $tracelevel)
2608             if defined $::RD_TRACE;
2609 21         66 my $thisprod = $thisrule->{"prods"}[0];
2610 21         46 $text = $_[1];
2611 21         35 my $_savetext;
2612 21         59 @item = (q{group_def});
2613 21         59 %item = (__RULE__ => q{group_def});
2614 21         38 my $repcount = 0;
2615              
2616              
2617 21 50       52 Parse::RecDescent::_trace(q{Trying terminal: ['!group']},
2618             Parse::RecDescent::_tracefirst($text),
2619             q{group_def},
2620             $tracelevel)
2621             if defined $::RD_TRACE;
2622 21         37 undef $lastsep;
2623 21         80 $expectation->is(q{})->at($text);
2624            
2625              
2626 21 100 33     240 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!group/)
  21 50       217  
2627             {
2628 21 50       72 $text = $lastsep . $text if defined $lastsep;
2629            
2630 21         71 $expectation->failed();
2631 21 50       106 Parse::RecDescent::_trace(qq{<>},
2632             Parse::RecDescent::_tracefirst($text))
2633             if defined $::RD_TRACE;
2634 21         47 last;
2635             }
2636 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2637 0         0 substr($text,0,length($current_match),q{});
2638 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2639             . $current_match . q{])},
2640             Parse::RecDescent::_tracefirst($text))
2641             if defined $::RD_TRACE;
2642 0         0 push @item, $item{__STRING1__}=$current_match;
2643            
2644              
2645 0 0       0 Parse::RecDescent::_trace(q{Trying action},
2646             Parse::RecDescent::_tracefirst($text),
2647             q{group_def},
2648             $tracelevel)
2649             if defined $::RD_TRACE;
2650            
2651              
2652 0 0       0 $_tok = ($_noactions) ? 0 : do { $context = 'group' };
  0         0  
2653 0 0       0 unless (defined $_tok)
2654             {
2655 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2656             if defined $::RD_TRACE;
2657 0         0 last;
2658             }
2659 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2660             . $_tok . q{])},
2661             Parse::RecDescent::_tracefirst($text))
2662             if defined $::RD_TRACE;
2663 0         0 push @item, $_tok;
2664 0         0 $item{__ACTION1__}=$_tok;
2665            
2666              
2667 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [var_name]},
2668             Parse::RecDescent::_tracefirst($text),
2669             q{group_def},
2670             $tracelevel)
2671             if defined $::RD_TRACE;
2672 2     2   14 if (1) { no strict qw{refs};
  2         4  
  2         4346  
  0         0  
2673 0         0 $expectation->is(q{var_name})->at($text);
2674 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::var_name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
2675             {
2676            
2677 0 0       0 Parse::RecDescent::_trace(q{<>},
2678             Parse::RecDescent::_tracefirst($text),
2679             q{group_def},
2680             $tracelevel)
2681             if defined $::RD_TRACE;
2682 0         0 $expectation->failed();
2683 0         0 last;
2684             }
2685 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [var_name]<< (return value: [}
2686             . $_tok . q{]},
2687              
2688             Parse::RecDescent::_tracefirst($text),
2689             q{group_def},
2690             $tracelevel)
2691             if defined $::RD_TRACE;
2692 0         0 $item{q{var_name}} = $_tok;
2693 0         0 push @item, $_tok;
2694            
2695             }
2696              
2697 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\{']},
2698             Parse::RecDescent::_tracefirst($text),
2699             q{group_def},
2700             $tracelevel)
2701             if defined $::RD_TRACE;
2702 0         0 undef $lastsep;
2703 0         0 $expectation->is(q{'\{'})->at($text);
2704            
2705              
2706 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\{/)
  0 0       0  
2707             {
2708 0 0       0 $text = $lastsep . $text if defined $lastsep;
2709            
2710 0         0 $expectation->failed();
2711 0 0       0 Parse::RecDescent::_trace(qq{<>},
2712             Parse::RecDescent::_tracefirst($text))
2713             if defined $::RD_TRACE;
2714 0         0 last;
2715             }
2716 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2717 0         0 substr($text,0,length($current_match),q{});
2718 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2719             . $current_match . q{])},
2720             Parse::RecDescent::_tracefirst($text))
2721             if defined $::RD_TRACE;
2722 0         0 push @item, $item{__STRING2__}=$current_match;
2723            
2724              
2725 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [field_line]},
2726             Parse::RecDescent::_tracefirst($text),
2727             q{group_def},
2728             $tracelevel)
2729             if defined $::RD_TRACE;
2730 0         0 $expectation->is(q{field_line})->at($text);
2731            
2732 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::field_line, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
2733             {
2734 0 0       0 Parse::RecDescent::_trace(q{<>},
2735             Parse::RecDescent::_tracefirst($text),
2736             q{group_def},
2737             $tracelevel)
2738             if defined $::RD_TRACE;
2739 0         0 last;
2740             }
2741 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [field_line]<< (}
2742             . @$_tok . q{ times)},
2743              
2744             Parse::RecDescent::_tracefirst($text),
2745             q{group_def},
2746             $tracelevel)
2747             if defined $::RD_TRACE;
2748 0         0 $item{q{field_line(s)}} = $_tok;
2749 0         0 push @item, $_tok;
2750            
2751              
2752              
2753 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\}']},
2754             Parse::RecDescent::_tracefirst($text),
2755             q{group_def},
2756             $tracelevel)
2757             if defined $::RD_TRACE;
2758 0         0 undef $lastsep;
2759 0         0 $expectation->is(q{'\}'})->at($text);
2760            
2761              
2762 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\}/)
  0 0       0  
2763             {
2764 0 0       0 $text = $lastsep . $text if defined $lastsep;
2765            
2766 0         0 $expectation->failed();
2767 0 0       0 Parse::RecDescent::_trace(qq{<>},
2768             Parse::RecDescent::_tracefirst($text))
2769             if defined $::RD_TRACE;
2770 0         0 last;
2771             }
2772 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
2773 0         0 substr($text,0,length($current_match),q{});
2774 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2775             . $current_match . q{])},
2776             Parse::RecDescent::_tracefirst($text))
2777             if defined $::RD_TRACE;
2778 0         0 push @item, $item{__STRING3__}=$current_match;
2779            
2780              
2781 0 0       0 Parse::RecDescent::_trace(q{Trying action},
2782             Parse::RecDescent::_tracefirst($text),
2783             q{group_def},
2784             $tracelevel)
2785             if defined $::RD_TRACE;
2786            
2787              
2788 0 0       0 $_tok = ($_noactions) ? 0 : do { $context = 'line' };
  0         0  
2789 0 0       0 unless (defined $_tok)
2790             {
2791 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2792             if defined $::RD_TRACE;
2793 0         0 last;
2794             }
2795 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2796             . $_tok . q{])},
2797             Parse::RecDescent::_tracefirst($text))
2798             if defined $::RD_TRACE;
2799 0         0 push @item, $_tok;
2800 0         0 $item{__ACTION2__}=$_tok;
2801            
2802              
2803 0 0       0 Parse::RecDescent::_trace(q{Trying action},
2804             Parse::RecDescent::_tracefirst($text),
2805             q{group_def},
2806             $tracelevel)
2807             if defined $::RD_TRACE;
2808            
2809              
2810 0 0       0 $_tok = ($_noactions) ? 0 : do {
2811             #warn "$item{var_name} group; context $context\n"
2812 0         0 $groups{$item{var_name}} = [ @group ];
2813 0         0 @group = ();
2814             };
2815 0 0       0 unless (defined $_tok)
2816             {
2817 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2818             if defined $::RD_TRACE;
2819 0         0 last;
2820             }
2821 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2822             . $_tok . q{])},
2823             Parse::RecDescent::_tracefirst($text))
2824             if defined $::RD_TRACE;
2825 0         0 push @item, $_tok;
2826 0         0 $item{__ACTION3__}=$_tok;
2827            
2828              
2829 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!group' var_name '\{' field_line '\}']<<},
2830             Parse::RecDescent::_tracefirst($text),
2831             q{group_def},
2832             $tracelevel)
2833             if defined $::RD_TRACE;
2834              
2835              
2836              
2837 0         0 $_matched = 1;
2838 0         0 last;
2839             }
2840              
2841              
2842 21 50 33     111 unless ( $_matched || defined($score) )
2843             {
2844            
2845              
2846 21         38 $_[1] = $text; # NOT SURE THIS IS NEEDED
2847 21 50       55 Parse::RecDescent::_trace(q{<>},
2848             Parse::RecDescent::_tracefirst($_[1]),
2849             q{group_def},
2850             $tracelevel)
2851             if defined $::RD_TRACE;
2852 21         168 return undef;
2853             }
2854 0 0 0     0 if (!defined($return) && defined($score))
2855             {
2856 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2857             q{group_def},
2858             $tracelevel)
2859             if defined $::RD_TRACE;
2860 0         0 $return = $score_return;
2861             }
2862 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
2863 0 0       0 $return = $item[$#item] unless defined $return;
2864 0 0       0 if (defined $::RD_TRACE)
2865             {
2866 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2867             $return . q{])}, "",
2868             q{group_def},
2869             $tracelevel);
2870 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
2871             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2872             Parse::RecDescent::_tracefirst($text),
2873             , q{group_def},
2874             $tracelevel)
2875             }
2876 0         0 $_[1] = $text;
2877 0         0 return $return;
2878             }
2879              
2880             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
2881             sub Parse::RecDescent::Text::FormBuilder::Parser::form_spec
2882             {
2883 7     7   551 my $thisparser = $_[0];
2884 2     2   18 use vars q{$tracelevel};
  2         4  
  2         21560  
2885 7   50     59 local $tracelevel = ($tracelevel||0)+1;
2886 7         16 $ERRORS = 0;
2887 7         22 my $thisrule = $thisparser->{"rules"}{"form_spec"};
2888              
2889 7 50       29 Parse::RecDescent::_trace(q{Trying rule: [form_spec]},
2890             Parse::RecDescent::_tracefirst($_[1]),
2891             q{form_spec},
2892             $tracelevel)
2893             if defined $::RD_TRACE;
2894              
2895            
2896 7         13 my $err_at = @{$thisparser->{errors}};
  7         17  
2897              
2898 7         12 my $score;
2899             my $score_return;
2900 0         0 my $_tok;
2901 7         15 my $return = undef;
2902 7         13 my $_matched=0;
2903 7         13 my $commit=0;
2904 7         21 my @item = ();
2905 7         17 my %item = ();
2906 7         14 my $repeating = $_[2];
2907 7         51 my $_noactions = $_[3];
2908 7 50       23 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  7         14  
  7         26  
2909 7         35 my $_itempos = $_[5];
2910 7 50       28 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2911 7         16 my $text;
2912             my $lastsep;
2913 0         0 my $current_match;
2914 7         58 my $expectation = new Parse::RecDescent::Expectation(q{});
2915 7         92 $expectation->at($_[1]);
2916            
2917 7         45 my $thisline;
2918 7         63 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2919              
2920            
2921              
2922 7   33     158 while (!$_matched && !$commit)
2923             {
2924            
2925 7 50       23 Parse::RecDescent::_trace(q{Trying production: [list_def, or description_def, or group_def, or note, or fb_params, or unknown_block_directive, or line]},
2926             Parse::RecDescent::_tracefirst($_[1]),
2927             q{form_spec},
2928             $tracelevel)
2929             if defined $::RD_TRACE;
2930 7         30 my $thisprod = $thisrule->{"prods"}[0];
2931 7         17 $text = $_[1];
2932 7         12 my $_savetext;
2933 7         18 @item = (q{form_spec});
2934 7         25 %item = (__RULE__ => q{form_spec});
2935 7         18 my $repcount = 0;
2936              
2937              
2938 7 50       22 Parse::RecDescent::_trace(q{Trying action},
2939             Parse::RecDescent::_tracefirst($text),
2940             q{form_spec},
2941             $tracelevel)
2942             if defined $::RD_TRACE;
2943            
2944              
2945 7 50       20 $_tok = ($_noactions) ? 0 : do {
2946             # clear out old data, so we don't end up with old data in new objects
2947 7         19 @lines = ();
2948 7         12 @sections = ();
2949 7         22 %formspec = ();
2950             };
2951 7 50       22 unless (defined $_tok)
2952             {
2953 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
2954             if defined $::RD_TRACE;
2955 0         0 last;
2956             }
2957 7 50       24 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2958             . $_tok . q{])},
2959             Parse::RecDescent::_tracefirst($text))
2960             if defined $::RD_TRACE;
2961 7         19 push @item, $_tok;
2962 7         19 $item{__ACTION1__}=$_tok;
2963            
2964              
2965 7 50       20 Parse::RecDescent::_trace(q{Trying repeated subrule: [list_def, or description_def, or group_def, or note, or fb_params, or unknown_block_directive, or line]},
2966             Parse::RecDescent::_tracefirst($text),
2967             q{form_spec},
2968             $tracelevel)
2969             if defined $::RD_TRACE;
2970 7         38 $expectation->is(q{list_def, or description_def, or group_def, or note, or fb_params, or unknown_block_directive, or line})->at($text);
2971            
2972 7 50   21   110 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_form_spec, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  21         64  
2973             {
2974 0 0       0 Parse::RecDescent::_trace(q{<>},
2975             Parse::RecDescent::_tracefirst($text),
2976             q{form_spec},
2977             $tracelevel)
2978             if defined $::RD_TRACE;
2979 0         0 last;
2980             }
2981 7 50       173 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [_alternation_1_of_production_1_of_rule_form_spec]<< (}
2982             . @$_tok . q{ times)},
2983              
2984             Parse::RecDescent::_tracefirst($text),
2985             q{form_spec},
2986             $tracelevel)
2987             if defined $::RD_TRACE;
2988 7         23 $item{q{_alternation_1_of_production_1_of_rule_form_spec(s)}} = $_tok;
2989 7         18 push @item, $_tok;
2990            
2991              
2992              
2993 7 50       18 Parse::RecDescent::_trace(q{Trying action},
2994             Parse::RecDescent::_tracefirst($text),
2995             q{form_spec},
2996             $tracelevel)
2997             if defined $::RD_TRACE;
2998            
2999              
3000 7 50       17 $_tok = ($_noactions) ? 0 : do {
3001             # grab the last section, if there is any
3002 7 100       24 if (@lines) {
3003 3         27 push @sections,
3004             {
3005             id => $section_id,
3006             head => $section_head,
3007             lines => [ @lines ],
3008             };
3009             }
3010            
3011             # make copies instead of taking references, again so we
3012             # don't end up with connections between objects
3013             $return = {
3014 7 0       139 fb_params => $formspec{fb_params},
    50          
3015             title => $formspec{title},
3016             author => $formspec{author},
3017             description => $formspec{description},
3018             lists => { %lists },
3019             patterns => { %patterns },
3020             subs => { %subs },
3021             groups => { %groups },
3022             sections => [ @sections ],
3023             ( @submit ? (submit => @submit == 1 ? $submit[0] : [ @submit ]) : () ),
3024             reset => $formspec{reset},
3025             }
3026             };
3027 7 50       27 unless (defined $_tok)
3028             {
3029 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
3030             if defined $::RD_TRACE;
3031 0         0 last;
3032             }
3033 7 50       21 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3034             . $_tok . q{])},
3035             Parse::RecDescent::_tracefirst($text))
3036             if defined $::RD_TRACE;
3037 7         16 push @item, $_tok;
3038 7         18 $item{__ACTION2__}=$_tok;
3039            
3040              
3041 7 50       19 Parse::RecDescent::_trace(q{>>Matched production: [list_def, or description_def, or group_def, or note, or fb_params, or unknown_block_directive, or line]<<},
3042             Parse::RecDescent::_tracefirst($text),
3043             q{form_spec},
3044             $tracelevel)
3045             if defined $::RD_TRACE;
3046              
3047              
3048              
3049 7         9 $_matched = 1;
3050 7         16 last;
3051             }
3052              
3053              
3054 7 50 33     19 unless ( $_matched || defined($score) )
3055             {
3056            
3057              
3058 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
3059 0 0       0 Parse::RecDescent::_trace(q{<>},
3060             Parse::RecDescent::_tracefirst($_[1]),
3061             q{form_spec},
3062             $tracelevel)
3063             if defined $::RD_TRACE;
3064 0         0 return undef;
3065             }
3066 7 50 33     22 if (!defined($return) && defined($score))
3067             {
3068 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3069             q{form_spec},
3070             $tracelevel)
3071             if defined $::RD_TRACE;
3072 0         0 $return = $score_return;
3073             }
3074 7         12 splice @{$thisparser->{errors}}, $err_at;
  7         20  
3075 7 50       16 $return = $item[$#item] unless defined $return;
3076 7 50       18 if (defined $::RD_TRACE)
3077             {
3078 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3079             $return . q{])}, "",
3080             q{form_spec},
3081             $tracelevel);
3082 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3083             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3084             Parse::RecDescent::_tracefirst($text),
3085             , q{form_spec},
3086             $tracelevel)
3087             }
3088 7         18 $_[1] = $text;
3089 7         84 return $return;
3090             }
3091              
3092             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3093             sub Parse::RecDescent::Text::FormBuilder::Parser::identifier
3094             {
3095 56     56   106 my $thisparser = $_[0];
3096 2     2   26 use vars q{$tracelevel};
  2         5  
  2         2768  
3097 56   50     222 local $tracelevel = ($tracelevel||0)+1;
3098 56         76 $ERRORS = 0;
3099 56         150 my $thisrule = $thisparser->{"rules"}{"identifier"};
3100              
3101 56 50       126 Parse::RecDescent::_trace(q{Trying rule: [identifier]},
3102             Parse::RecDescent::_tracefirst($_[1]),
3103             q{identifier},
3104             $tracelevel)
3105             if defined $::RD_TRACE;
3106              
3107            
3108 56         89 my $err_at = @{$thisparser->{errors}};
  56         109  
3109              
3110 56         101 my $score;
3111             my $score_return;
3112 0         0 my $_tok;
3113 56         77 my $return = undef;
3114 56         83 my $_matched=0;
3115 56         75 my $commit=0;
3116 56         97 my @item = ();
3117 56         259 my %item = ();
3118 56         87 my $repeating = $_[2];
3119 56         90 my $_noactions = $_[3];
3120 56 50       162 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  56         89  
  56         130  
3121 56         89 my $_itempos = $_[5];
3122 56 50       161 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3123 56         85 my $text;
3124             my $lastsep;
3125 0         0 my $current_match;
3126 56         205 my $expectation = new Parse::RecDescent::Expectation(q{/\\w+/});
3127 56         536 $expectation->at($_[1]);
3128            
3129 56         246 my $thisline;
3130 56         236 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3131              
3132            
3133              
3134 56   33     588 while (!$_matched && !$commit)
3135             {
3136            
3137 56 50       141 Parse::RecDescent::_trace(q{Trying production: [/\\w+/]},
3138             Parse::RecDescent::_tracefirst($_[1]),
3139             q{identifier},
3140             $tracelevel)
3141             if defined $::RD_TRACE;
3142 56         147 my $thisprod = $thisrule->{"prods"}[0];
3143 56         151 $text = $_[1];
3144 56         74 my $_savetext;
3145 56         117 @item = (q{identifier});
3146 56         133 %item = (__RULE__ => q{identifier});
3147 56         87 my $repcount = 0;
3148              
3149              
3150 56 50       125 Parse::RecDescent::_trace(q{Trying terminal: [/\\w+/]}, Parse::RecDescent::_tracefirst($text),
3151             q{identifier},
3152             $tracelevel)
3153             if defined $::RD_TRACE;
3154 56         105 undef $lastsep;
3155 56         181 $expectation->is(q{})->at($text);
3156            
3157              
3158 56 50 66     801 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\w+)/)
  56 100       673  
3159             {
3160 22 50       117 $text = $lastsep . $text if defined $lastsep;
3161 22         127 $expectation->failed();
3162 22 50       92 Parse::RecDescent::_trace(q{<>},
3163             Parse::RecDescent::_tracefirst($text))
3164             if defined $::RD_TRACE;
3165              
3166 22         49 last;
3167             }
3168 34         280 $current_match = substr($text, $-[0], $+[0] - $-[0]);
3169 34         144 substr($text,0,length($current_match),q{});
3170 34 50       98 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3171             . $current_match . q{])},
3172             Parse::RecDescent::_tracefirst($text))
3173             if defined $::RD_TRACE;
3174 34         118 push @item, $item{__PATTERN1__}=$current_match;
3175            
3176              
3177 34 50       95 Parse::RecDescent::_trace(q{>>Matched production: [/\\w+/]<<},
3178             Parse::RecDescent::_tracefirst($text),
3179             q{identifier},
3180             $tracelevel)
3181             if defined $::RD_TRACE;
3182              
3183              
3184              
3185 34         47 $_matched = 1;
3186 34         83 last;
3187             }
3188              
3189              
3190 56 100 66     257 unless ( $_matched || defined($score) )
3191             {
3192            
3193              
3194 22         33 $_[1] = $text; # NOT SURE THIS IS NEEDED
3195 22 50       41 Parse::RecDescent::_trace(q{<>},
3196             Parse::RecDescent::_tracefirst($_[1]),
3197             q{identifier},
3198             $tracelevel)
3199             if defined $::RD_TRACE;
3200 22         170 return undef;
3201             }
3202 34 50 33     217 if (!defined($return) && defined($score))
3203             {
3204 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3205             q{identifier},
3206             $tracelevel)
3207             if defined $::RD_TRACE;
3208 0         0 $return = $score_return;
3209             }
3210 34         58 splice @{$thisparser->{errors}}, $err_at;
  34         132  
3211 34 50       123 $return = $item[$#item] unless defined $return;
3212 34 50       89 if (defined $::RD_TRACE)
3213             {
3214 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3215             $return . q{])}, "",
3216             q{identifier},
3217             $tracelevel);
3218 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3219             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3220             Parse::RecDescent::_tracefirst($text),
3221             , q{identifier},
3222             $tracelevel)
3223             }
3224 34         64 $_[1] = $text;
3225 34         340 return $return;
3226             }
3227              
3228             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3229             sub Parse::RecDescent::Text::FormBuilder::Parser::option
3230             {
3231 0     0   0 my $thisparser = $_[0];
3232 2     2   16 use vars q{$tracelevel};
  2         6  
  2         1012  
3233 0   0     0 local $tracelevel = ($tracelevel||0)+1;
3234 0         0 $ERRORS = 0;
3235 0         0 my $thisrule = $thisparser->{"rules"}{"option"};
3236              
3237 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [option]},
3238             Parse::RecDescent::_tracefirst($_[1]),
3239             q{option},
3240             $tracelevel)
3241             if defined $::RD_TRACE;
3242              
3243            
3244 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
3245              
3246 0         0 my $score;
3247             my $score_return;
3248 0         0 my $_tok;
3249 0         0 my $return = undef;
3250 0         0 my $_matched=0;
3251 0         0 my $commit=0;
3252 0         0 my @item = ();
3253 0         0 my %item = ();
3254 0         0 my $repeating = $_[2];
3255 0         0 my $_noactions = $_[3];
3256 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
3257 0         0 my $_itempos = $_[5];
3258 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3259 0         0 my $text;
3260             my $lastsep;
3261 0         0 my $current_match;
3262 0         0 my $expectation = new Parse::RecDescent::Expectation(q{string});
3263 0         0 $expectation->at($_[1]);
3264            
3265 0         0 my $thisline;
3266 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3267              
3268            
3269              
3270 0   0     0 while (!$_matched && !$commit)
3271             {
3272            
3273 0 0       0 Parse::RecDescent::_trace(q{Trying production: [string display_text]},
3274             Parse::RecDescent::_tracefirst($_[1]),
3275             q{option},
3276             $tracelevel)
3277             if defined $::RD_TRACE;
3278 0         0 my $thisprod = $thisrule->{"prods"}[0];
3279 0         0 $text = $_[1];
3280 0         0 my $_savetext;
3281 0         0 @item = (q{option});
3282 0         0 %item = (__RULE__ => q{option});
3283 0         0 my $repcount = 0;
3284              
3285              
3286 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [string]},
3287             Parse::RecDescent::_tracefirst($text),
3288             q{option},
3289             $tracelevel)
3290             if defined $::RD_TRACE;
3291 2     2   13 if (1) { no strict qw{refs};
  2         32  
  2         2217  
  0         0  
3292 0         0 $expectation->is(q{})->at($text);
3293 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
3294             {
3295            
3296 0 0       0 Parse::RecDescent::_trace(q{<>},
3297             Parse::RecDescent::_tracefirst($text),
3298             q{option},
3299             $tracelevel)
3300             if defined $::RD_TRACE;
3301 0         0 $expectation->failed();
3302 0         0 last;
3303             }
3304 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [string]<< (return value: [}
3305             . $_tok . q{]},
3306              
3307             Parse::RecDescent::_tracefirst($text),
3308             q{option},
3309             $tracelevel)
3310             if defined $::RD_TRACE;
3311 0         0 $item{q{string}} = $_tok;
3312 0         0 push @item, $_tok;
3313            
3314             }
3315              
3316 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [display_text]},
3317             Parse::RecDescent::_tracefirst($text),
3318             q{option},
3319             $tracelevel)
3320             if defined $::RD_TRACE;
3321 0         0 $expectation->is(q{display_text})->at($text);
3322            
3323 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::display_text, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
3324             {
3325 0 0       0 Parse::RecDescent::_trace(q{<>},
3326             Parse::RecDescent::_tracefirst($text),
3327             q{option},
3328             $tracelevel)
3329             if defined $::RD_TRACE;
3330 0         0 last;
3331             }
3332 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [display_text]<< (}
3333             . @$_tok . q{ times)},
3334              
3335             Parse::RecDescent::_tracefirst($text),
3336             q{option},
3337             $tracelevel)
3338             if defined $::RD_TRACE;
3339 0         0 $item{q{display_text(?)}} = $_tok;
3340 0         0 push @item, $_tok;
3341            
3342              
3343              
3344 0 0       0 Parse::RecDescent::_trace(q{Trying action},
3345             Parse::RecDescent::_tracefirst($text),
3346             q{option},
3347             $tracelevel)
3348             if defined $::RD_TRACE;
3349            
3350              
3351 0 0       0 $_tok = ($_noactions) ? 0 : do { push @options, { $item[1] => $item{'display_text(?)'}[0] } };
  0         0  
3352 0 0       0 unless (defined $_tok)
3353             {
3354 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
3355             if defined $::RD_TRACE;
3356 0         0 last;
3357             }
3358 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3359             . $_tok . q{])},
3360             Parse::RecDescent::_tracefirst($text))
3361             if defined $::RD_TRACE;
3362 0         0 push @item, $_tok;
3363 0         0 $item{__ACTION1__}=$_tok;
3364            
3365              
3366 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [string display_text]<<},
3367             Parse::RecDescent::_tracefirst($text),
3368             q{option},
3369             $tracelevel)
3370             if defined $::RD_TRACE;
3371              
3372              
3373              
3374 0         0 $_matched = 1;
3375 0         0 last;
3376             }
3377              
3378              
3379 0 0 0     0 unless ( $_matched || defined($score) )
3380             {
3381            
3382              
3383 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
3384 0 0       0 Parse::RecDescent::_trace(q{<>},
3385             Parse::RecDescent::_tracefirst($_[1]),
3386             q{option},
3387             $tracelevel)
3388             if defined $::RD_TRACE;
3389 0         0 return undef;
3390             }
3391 0 0 0     0 if (!defined($return) && defined($score))
3392             {
3393 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3394             q{option},
3395             $tracelevel)
3396             if defined $::RD_TRACE;
3397 0         0 $return = $score_return;
3398             }
3399 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
3400 0 0       0 $return = $item[$#item] unless defined $return;
3401 0 0       0 if (defined $::RD_TRACE)
3402             {
3403 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3404             $return . q{])}, "",
3405             q{option},
3406             $tracelevel);
3407 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3408             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3409             Parse::RecDescent::_tracefirst($text),
3410             , q{option},
3411             $tracelevel)
3412             }
3413 0         0 $_[1] = $text;
3414 0         0 return $return;
3415             }
3416              
3417             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3418             sub Parse::RecDescent::Text::FormBuilder::Parser::group_name
3419             {
3420 0     0   0 my $thisparser = $_[0];
3421 2     2   15 use vars q{$tracelevel};
  2         2  
  2         2409  
3422 0   0     0 local $tracelevel = ($tracelevel||0)+1;
3423 0         0 $ERRORS = 0;
3424 0         0 my $thisrule = $thisparser->{"rules"}{"group_name"};
3425              
3426 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [group_name]},
3427             Parse::RecDescent::_tracefirst($_[1]),
3428             q{group_name},
3429             $tracelevel)
3430             if defined $::RD_TRACE;
3431              
3432            
3433 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
3434              
3435 0         0 my $score;
3436             my $score_return;
3437 0         0 my $_tok;
3438 0         0 my $return = undef;
3439 0         0 my $_matched=0;
3440 0         0 my $commit=0;
3441 0         0 my @item = ();
3442 0         0 my %item = ();
3443 0         0 my $repeating = $_[2];
3444 0         0 my $_noactions = $_[3];
3445 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
3446 0         0 my $_itempos = $_[5];
3447 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3448 0         0 my $text;
3449             my $lastsep;
3450 0         0 my $current_match;
3451 0         0 my $expectation = new Parse::RecDescent::Expectation(q{/%[A-Z_]+/});
3452 0         0 $expectation->at($_[1]);
3453            
3454 0         0 my $thisline;
3455 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3456              
3457            
3458              
3459 0   0     0 while (!$_matched && !$commit)
3460             {
3461            
3462 0 0       0 Parse::RecDescent::_trace(q{Trying production: [/%[A-Z_]+/]},
3463             Parse::RecDescent::_tracefirst($_[1]),
3464             q{group_name},
3465             $tracelevel)
3466             if defined $::RD_TRACE;
3467 0         0 my $thisprod = $thisrule->{"prods"}[0];
3468 0         0 $text = $_[1];
3469 0         0 my $_savetext;
3470 0         0 @item = (q{group_name});
3471 0         0 %item = (__RULE__ => q{group_name});
3472 0         0 my $repcount = 0;
3473              
3474              
3475 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/%[A-Z_]+/]}, Parse::RecDescent::_tracefirst($text),
3476             q{group_name},
3477             $tracelevel)
3478             if defined $::RD_TRACE;
3479 0         0 undef $lastsep;
3480 0         0 $expectation->is(q{})->at($text);
3481            
3482              
3483 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:%[A-Z_]+)/)
  0 0       0  
3484             {
3485 0 0       0 $text = $lastsep . $text if defined $lastsep;
3486 0         0 $expectation->failed();
3487 0 0       0 Parse::RecDescent::_trace(q{<>},
3488             Parse::RecDescent::_tracefirst($text))
3489             if defined $::RD_TRACE;
3490              
3491 0         0 last;
3492             }
3493 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
3494 0         0 substr($text,0,length($current_match),q{});
3495 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3496             . $current_match . q{])},
3497             Parse::RecDescent::_tracefirst($text))
3498             if defined $::RD_TRACE;
3499 0         0 push @item, $item{__PATTERN1__}=$current_match;
3500            
3501              
3502 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/%[A-Z_]+/]<<},
3503             Parse::RecDescent::_tracefirst($text),
3504             q{group_name},
3505             $tracelevel)
3506             if defined $::RD_TRACE;
3507              
3508              
3509              
3510 0         0 $_matched = 1;
3511 0         0 last;
3512             }
3513              
3514              
3515 0 0 0     0 unless ( $_matched || defined($score) )
3516             {
3517            
3518              
3519 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
3520 0 0       0 Parse::RecDescent::_trace(q{<>},
3521             Parse::RecDescent::_tracefirst($_[1]),
3522             q{group_name},
3523             $tracelevel)
3524             if defined $::RD_TRACE;
3525 0         0 return undef;
3526             }
3527 0 0 0     0 if (!defined($return) && defined($score))
3528             {
3529 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3530             q{group_name},
3531             $tracelevel)
3532             if defined $::RD_TRACE;
3533 0         0 $return = $score_return;
3534             }
3535 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
3536 0 0       0 $return = $item[$#item] unless defined $return;
3537 0 0       0 if (defined $::RD_TRACE)
3538             {
3539 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3540             $return . q{])}, "",
3541             q{group_name},
3542             $tracelevel);
3543 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3544             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3545             Parse::RecDescent::_tracefirst($text),
3546             , q{group_name},
3547             $tracelevel)
3548             }
3549 0         0 $_[1] = $text;
3550 0         0 return $return;
3551             }
3552              
3553             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3554             sub Parse::RecDescent::Text::FormBuilder::Parser::list_def
3555             {
3556 21     21   45 my $thisparser = $_[0];
3557 2     2   14 use vars q{$tracelevel};
  2         3  
  2         2022  
3558 21   50     73 local $tracelevel = ($tracelevel||0)+1;
3559 21         38 $ERRORS = 0;
3560 21         69 my $thisrule = $thisparser->{"rules"}{"list_def"};
3561              
3562 21 50       62 Parse::RecDescent::_trace(q{Trying rule: [list_def]},
3563             Parse::RecDescent::_tracefirst($_[1]),
3564             q{list_def},
3565             $tracelevel)
3566             if defined $::RD_TRACE;
3567              
3568            
3569 21         36 my $err_at = @{$thisparser->{errors}};
  21         59  
3570              
3571 21         45 my $score;
3572             my $score_return;
3573 0         0 my $_tok;
3574 21         42 my $return = undef;
3575 21         32 my $_matched=0;
3576 21         38 my $commit=0;
3577 21         40 my @item = ();
3578 21         47 my %item = ();
3579 21         40 my $repeating = $_[2];
3580 21         39 my $_noactions = $_[3];
3581 21 50       71 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         33  
  21         57  
3582 21         40 my $_itempos = $_[5];
3583 21 50       69 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3584 21         43 my $text;
3585             my $lastsep;
3586 0         0 my $current_match;
3587 21         93 my $expectation = new Parse::RecDescent::Expectation(q{'!list'});
3588 21         194 $expectation->at($_[1]);
3589            
3590 21         91 my $thisline;
3591 21         99 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3592              
3593            
3594              
3595 21   33     246 while (!$_matched && !$commit)
3596             {
3597            
3598 21 50       68 Parse::RecDescent::_trace(q{Trying production: ['!list' var_name static_list, or dynamic_list]},
3599             Parse::RecDescent::_tracefirst($_[1]),
3600             q{list_def},
3601             $tracelevel)
3602             if defined $::RD_TRACE;
3603 21         68 my $thisprod = $thisrule->{"prods"}[0];
3604 21         40 $text = $_[1];
3605 21         38 my $_savetext;
3606 21         57 @item = (q{list_def});
3607 21         60 %item = (__RULE__ => q{list_def});
3608 21         40 my $repcount = 0;
3609              
3610              
3611 21 50       58 Parse::RecDescent::_trace(q{Trying terminal: ['!list']},
3612             Parse::RecDescent::_tracefirst($text),
3613             q{list_def},
3614             $tracelevel)
3615             if defined $::RD_TRACE;
3616 21         43 undef $lastsep;
3617 21         73 $expectation->is(q{})->at($text);
3618            
3619              
3620 21 100 33     331 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!list/)
  21 50       256  
3621             {
3622 21 50       77 $text = $lastsep . $text if defined $lastsep;
3623            
3624 21         84 $expectation->failed();
3625 21 50       107 Parse::RecDescent::_trace(qq{<>},
3626             Parse::RecDescent::_tracefirst($text))
3627             if defined $::RD_TRACE;
3628 21         64 last;
3629             }
3630 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
3631 0         0 substr($text,0,length($current_match),q{});
3632 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3633             . $current_match . q{])},
3634             Parse::RecDescent::_tracefirst($text))
3635             if defined $::RD_TRACE;
3636 0         0 push @item, $item{__STRING1__}=$current_match;
3637            
3638              
3639 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [var_name]},
3640             Parse::RecDescent::_tracefirst($text),
3641             q{list_def},
3642             $tracelevel)
3643             if defined $::RD_TRACE;
3644 2     2   128 if (1) { no strict qw{refs};
  2         5  
  2         1013  
  0         0  
3645 0         0 $expectation->is(q{var_name})->at($text);
3646 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::var_name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
3647             {
3648            
3649 0 0       0 Parse::RecDescent::_trace(q{<>},
3650             Parse::RecDescent::_tracefirst($text),
3651             q{list_def},
3652             $tracelevel)
3653             if defined $::RD_TRACE;
3654 0         0 $expectation->failed();
3655 0         0 last;
3656             }
3657 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [var_name]<< (return value: [}
3658             . $_tok . q{]},
3659              
3660             Parse::RecDescent::_tracefirst($text),
3661             q{list_def},
3662             $tracelevel)
3663             if defined $::RD_TRACE;
3664 0         0 $item{q{var_name}} = $_tok;
3665 0         0 push @item, $_tok;
3666            
3667             }
3668              
3669 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_list_def]},
3670             Parse::RecDescent::_tracefirst($text),
3671             q{list_def},
3672             $tracelevel)
3673             if defined $::RD_TRACE;
3674 2     2   17 if (1) { no strict qw{refs};
  2         3  
  2         1854  
  0         0  
3675 0         0 $expectation->is(q{static_list, or dynamic_list})->at($text);
3676 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_list_def($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
3677             {
3678            
3679 0 0       0 Parse::RecDescent::_trace(q{<>},
3680             Parse::RecDescent::_tracefirst($text),
3681             q{list_def},
3682             $tracelevel)
3683             if defined $::RD_TRACE;
3684 0         0 $expectation->failed();
3685 0         0 last;
3686             }
3687 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_list_def]<< (return value: [}
3688             . $_tok . q{]},
3689              
3690             Parse::RecDescent::_tracefirst($text),
3691             q{list_def},
3692             $tracelevel)
3693             if defined $::RD_TRACE;
3694 0         0 $item{q{_alternation_1_of_production_1_of_rule_list_def}} = $_tok;
3695 0         0 push @item, $_tok;
3696            
3697             }
3698              
3699 0 0       0 Parse::RecDescent::_trace(q{Trying action},
3700             Parse::RecDescent::_tracefirst($text),
3701             q{list_def},
3702             $tracelevel)
3703             if defined $::RD_TRACE;
3704            
3705              
3706 0 0       0 $_tok = ($_noactions) ? 0 : do { $lists{$item{var_name}} = [ @options ]; @options = () };
  0         0  
  0         0  
3707 0 0       0 unless (defined $_tok)
3708             {
3709 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
3710             if defined $::RD_TRACE;
3711 0         0 last;
3712             }
3713 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3714             . $_tok . q{])},
3715             Parse::RecDescent::_tracefirst($text))
3716             if defined $::RD_TRACE;
3717 0         0 push @item, $_tok;
3718 0         0 $item{__ACTION1__}=$_tok;
3719            
3720              
3721 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!list' var_name static_list, or dynamic_list]<<},
3722             Parse::RecDescent::_tracefirst($text),
3723             q{list_def},
3724             $tracelevel)
3725             if defined $::RD_TRACE;
3726              
3727              
3728              
3729 0         0 $_matched = 1;
3730 0         0 last;
3731             }
3732              
3733              
3734 21 50 33     130 unless ( $_matched || defined($score) )
3735             {
3736            
3737              
3738 21         43 $_[1] = $text; # NOT SURE THIS IS NEEDED
3739 21 50       50 Parse::RecDescent::_trace(q{<>},
3740             Parse::RecDescent::_tracefirst($_[1]),
3741             q{list_def},
3742             $tracelevel)
3743             if defined $::RD_TRACE;
3744 21         184 return undef;
3745             }
3746 0 0 0     0 if (!defined($return) && defined($score))
3747             {
3748 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3749             q{list_def},
3750             $tracelevel)
3751             if defined $::RD_TRACE;
3752 0         0 $return = $score_return;
3753             }
3754 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
3755 0 0       0 $return = $item[$#item] unless defined $return;
3756 0 0       0 if (defined $::RD_TRACE)
3757             {
3758 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3759             $return . q{])}, "",
3760             q{list_def},
3761             $tracelevel);
3762 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3763             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3764             Parse::RecDescent::_tracefirst($text),
3765             , q{list_def},
3766             $tracelevel)
3767             }
3768 0         0 $_[1] = $text;
3769 0         0 return $return;
3770             }
3771              
3772             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3773             sub Parse::RecDescent::Text::FormBuilder::Parser::multi
3774             {
3775 24     24   350 my $thisparser = $_[0];
3776 2     2   29 use vars q{$tracelevel};
  2         4  
  2         3105  
3777 24   50     93 local $tracelevel = ($tracelevel||0)+1;
3778 24         41 $ERRORS = 0;
3779 24         72 my $thisrule = $thisparser->{"rules"}{"multi"};
3780              
3781 24 50       67 Parse::RecDescent::_trace(q{Trying rule: [multi]},
3782             Parse::RecDescent::_tracefirst($_[1]),
3783             q{multi},
3784             $tracelevel)
3785             if defined $::RD_TRACE;
3786              
3787            
3788 24         39 my $err_at = @{$thisparser->{errors}};
  24         64  
3789              
3790 24         54 my $score;
3791             my $score_return;
3792 0         0 my $_tok;
3793 24         127 my $return = undef;
3794 24         32 my $_matched=0;
3795 24         32 my $commit=0;
3796 24         54 my @item = ();
3797 24         50 my %item = ();
3798 24         40 my $repeating = $_[2];
3799 24         40 my $_noactions = $_[3];
3800 24 50       107 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         46  
  24         93  
3801 24         45 my $_itempos = $_[5];
3802 24 50       78 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3803 24         50 my $text;
3804             my $lastsep;
3805 0         0 my $current_match;
3806 24         101 my $expectation = new Parse::RecDescent::Expectation(q{'*'});
3807 24         377 $expectation->at($_[1]);
3808            
3809 24         111 my $thisline;
3810 24         116 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3811              
3812            
3813              
3814 24   33     696 while (!$_matched && !$commit)
3815             {
3816            
3817 24 50       65 Parse::RecDescent::_trace(q{Trying production: ['*']},
3818             Parse::RecDescent::_tracefirst($_[1]),
3819             q{multi},
3820             $tracelevel)
3821             if defined $::RD_TRACE;
3822 24         88 my $thisprod = $thisrule->{"prods"}[0];
3823 24         148 $text = $_[1];
3824 24         37 my $_savetext;
3825 24         59 @item = (q{multi});
3826 24         63 %item = (__RULE__ => q{multi});
3827 24         38 my $repcount = 0;
3828              
3829              
3830 24 50       66 Parse::RecDescent::_trace(q{Trying terminal: ['*']},
3831             Parse::RecDescent::_tracefirst($text),
3832             q{multi},
3833             $tracelevel)
3834             if defined $::RD_TRACE;
3835 24         54 undef $lastsep;
3836 24         87 $expectation->is(q{})->at($text);
3837            
3838              
3839 24 50 33     331 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\*/)
  24 50       270  
3840             {
3841 24 50       79 $text = $lastsep . $text if defined $lastsep;
3842            
3843 24         91 $expectation->failed();
3844 24 50       120 Parse::RecDescent::_trace(qq{<>},
3845             Parse::RecDescent::_tracefirst($text))
3846             if defined $::RD_TRACE;
3847 24         62 last;
3848             }
3849 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
3850 0         0 substr($text,0,length($current_match),q{});
3851 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3852             . $current_match . q{])},
3853             Parse::RecDescent::_tracefirst($text))
3854             if defined $::RD_TRACE;
3855 0         0 push @item, $item{__STRING1__}=$current_match;
3856            
3857              
3858 0 0       0 Parse::RecDescent::_trace(q{Trying action},
3859             Parse::RecDescent::_tracefirst($text),
3860             q{multi},
3861             $tracelevel)
3862             if defined $::RD_TRACE;
3863            
3864              
3865 0 0       0 $_tok = ($_noactions) ? 0 : do { 1 };
  0         0  
3866 0 0       0 unless (defined $_tok)
3867             {
3868 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
3869             if defined $::RD_TRACE;
3870 0         0 last;
3871             }
3872 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3873             . $_tok . q{])},
3874             Parse::RecDescent::_tracefirst($text))
3875             if defined $::RD_TRACE;
3876 0         0 push @item, $_tok;
3877 0         0 $item{__ACTION1__}=$_tok;
3878            
3879              
3880 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['*']<<},
3881             Parse::RecDescent::_tracefirst($text),
3882             q{multi},
3883             $tracelevel)
3884             if defined $::RD_TRACE;
3885              
3886              
3887              
3888 0         0 $_matched = 1;
3889 0         0 last;
3890             }
3891              
3892              
3893 24 50 33     137 unless ( $_matched || defined($score) )
3894             {
3895            
3896              
3897 24         53 $_[1] = $text; # NOT SURE THIS IS NEEDED
3898 24 50       61 Parse::RecDescent::_trace(q{<>},
3899             Parse::RecDescent::_tracefirst($_[1]),
3900             q{multi},
3901             $tracelevel)
3902             if defined $::RD_TRACE;
3903 24         169 return undef;
3904             }
3905 0 0 0     0 if (!defined($return) && defined($score))
3906             {
3907 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3908             q{multi},
3909             $tracelevel)
3910             if defined $::RD_TRACE;
3911 0         0 $return = $score_return;
3912             }
3913 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
3914 0 0       0 $return = $item[$#item] unless defined $return;
3915 0 0       0 if (defined $::RD_TRACE)
3916             {
3917 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3918             $return . q{])}, "",
3919             q{multi},
3920             $tracelevel);
3921 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
3922             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3923             Parse::RecDescent::_tracefirst($text),
3924             , q{multi},
3925             $tracelevel)
3926             }
3927 0         0 $_[1] = $text;
3928 0         0 return $return;
3929             }
3930              
3931             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
3932             sub Parse::RecDescent::Text::FormBuilder::Parser::fb_params
3933             {
3934 21     21   54 my $thisparser = $_[0];
3935 2     2   17 use vars q{$tracelevel};
  2         4  
  2         1793  
3936 21   50     75 local $tracelevel = ($tracelevel||0)+1;
3937 21         32 $ERRORS = 0;
3938 21         56 my $thisrule = $thisparser->{"rules"}{"fb_params"};
3939              
3940 21 50       57 Parse::RecDescent::_trace(q{Trying rule: [fb_params]},
3941             Parse::RecDescent::_tracefirst($_[1]),
3942             q{fb_params},
3943             $tracelevel)
3944             if defined $::RD_TRACE;
3945              
3946            
3947 21         30 my $err_at = @{$thisparser->{errors}};
  21         47  
3948              
3949 21         36 my $score;
3950             my $score_return;
3951 0         0 my $_tok;
3952 21         27 my $return = undef;
3953 21         40 my $_matched=0;
3954 21         26 my $commit=0;
3955 21         45 my @item = ();
3956 21         37 my %item = ();
3957 21         39 my $repeating = $_[2];
3958 21         34 my $_noactions = $_[3];
3959 21 50       53 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         34  
  21         59  
3960 21         41 my $_itempos = $_[5];
3961 21 50       63 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3962 21         40 my $text;
3963             my $lastsep;
3964 0         0 my $current_match;
3965 21         82 my $expectation = new Parse::RecDescent::Expectation(q{'!fb'});
3966 21         180 $expectation->at($_[1]);
3967            
3968 21         85 my $thisline;
3969 21         96 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3970              
3971            
3972              
3973 21   33     245 while (!$_matched && !$commit)
3974             {
3975            
3976 21 50       65 Parse::RecDescent::_trace(q{Trying production: ['!fb' block]},
3977             Parse::RecDescent::_tracefirst($_[1]),
3978             q{fb_params},
3979             $tracelevel)
3980             if defined $::RD_TRACE;
3981 21         64 my $thisprod = $thisrule->{"prods"}[0];
3982 21         43 $text = $_[1];
3983 21         31 my $_savetext;
3984 21         49 @item = (q{fb_params});
3985 21         55 %item = (__RULE__ => q{fb_params});
3986 21         33 my $repcount = 0;
3987              
3988              
3989 21 50       53 Parse::RecDescent::_trace(q{Trying terminal: ['!fb']},
3990             Parse::RecDescent::_tracefirst($text),
3991             q{fb_params},
3992             $tracelevel)
3993             if defined $::RD_TRACE;
3994 21         34 undef $lastsep;
3995 21         69 $expectation->is(q{})->at($text);
3996            
3997              
3998 21 100 33     253 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!fb/)
  21 50       222  
3999             {
4000 21 50       82 $text = $lastsep . $text if defined $lastsep;
4001            
4002 21         83 $expectation->failed();
4003 21 50       96 Parse::RecDescent::_trace(qq{<>},
4004             Parse::RecDescent::_tracefirst($text))
4005             if defined $::RD_TRACE;
4006 21         54 last;
4007             }
4008 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
4009 0         0 substr($text,0,length($current_match),q{});
4010 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4011             . $current_match . q{])},
4012             Parse::RecDescent::_tracefirst($text))
4013             if defined $::RD_TRACE;
4014 0         0 push @item, $item{__STRING1__}=$current_match;
4015            
4016              
4017 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [block]},
4018             Parse::RecDescent::_tracefirst($text),
4019             q{fb_params},
4020             $tracelevel)
4021             if defined $::RD_TRACE;
4022 2     2   17 if (1) { no strict qw{refs};
  2         6  
  2         1874  
  0         0  
4023 0         0 $expectation->is(q{block})->at($text);
4024 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
4025             {
4026            
4027 0 0       0 Parse::RecDescent::_trace(q{<>},
4028             Parse::RecDescent::_tracefirst($text),
4029             q{fb_params},
4030             $tracelevel)
4031             if defined $::RD_TRACE;
4032 0         0 $expectation->failed();
4033 0         0 last;
4034             }
4035 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [block]<< (return value: [}
4036             . $_tok . q{]},
4037              
4038             Parse::RecDescent::_tracefirst($text),
4039             q{fb_params},
4040             $tracelevel)
4041             if defined $::RD_TRACE;
4042 0         0 $item{q{block}} = $_tok;
4043 0         0 push @item, $_tok;
4044            
4045             }
4046              
4047 0 0       0 Parse::RecDescent::_trace(q{Trying action},
4048             Parse::RecDescent::_tracefirst($text),
4049             q{fb_params},
4050             $tracelevel)
4051             if defined $::RD_TRACE;
4052            
4053              
4054 0 0       0 $_tok = ($_noactions) ? 0 : do { $formspec{fb_params} .= $item{block}; };
  0         0  
4055 0 0       0 unless (defined $_tok)
4056             {
4057 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4058             if defined $::RD_TRACE;
4059 0         0 last;
4060             }
4061 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4062             . $_tok . q{])},
4063             Parse::RecDescent::_tracefirst($text))
4064             if defined $::RD_TRACE;
4065 0         0 push @item, $_tok;
4066 0         0 $item{__ACTION1__}=$_tok;
4067            
4068              
4069 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!fb' block]<<},
4070             Parse::RecDescent::_tracefirst($text),
4071             q{fb_params},
4072             $tracelevel)
4073             if defined $::RD_TRACE;
4074              
4075              
4076              
4077 0         0 $_matched = 1;
4078 0         0 last;
4079             }
4080              
4081              
4082 21 50 33     118 unless ( $_matched || defined($score) )
4083             {
4084            
4085              
4086 21         52 $_[1] = $text; # NOT SURE THIS IS NEEDED
4087 21 50       55 Parse::RecDescent::_trace(q{<>},
4088             Parse::RecDescent::_tracefirst($_[1]),
4089             q{fb_params},
4090             $tracelevel)
4091             if defined $::RD_TRACE;
4092 21         175 return undef;
4093             }
4094 0 0 0     0 if (!defined($return) && defined($score))
4095             {
4096 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4097             q{fb_params},
4098             $tracelevel)
4099             if defined $::RD_TRACE;
4100 0         0 $return = $score_return;
4101             }
4102 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
4103 0 0       0 $return = $item[$#item] unless defined $return;
4104 0 0       0 if (defined $::RD_TRACE)
4105             {
4106 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4107             $return . q{])}, "",
4108             q{fb_params},
4109             $tracelevel);
4110 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4111             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4112             Parse::RecDescent::_tracefirst($text),
4113             , q{fb_params},
4114             $tracelevel)
4115             }
4116 0         0 $_[1] = $text;
4117 0         0 return $return;
4118             }
4119              
4120             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4121             sub Parse::RecDescent::Text::FormBuilder::Parser::pattern
4122             {
4123 0     0   0 my $thisparser = $_[0];
4124 2     2   14 use vars q{$tracelevel};
  2         5  
  2         2676  
4125 0   0     0 local $tracelevel = ($tracelevel||0)+1;
4126 0         0 $ERRORS = 0;
4127 0         0 my $thisrule = $thisparser->{"rules"}{"pattern"};
4128              
4129 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [pattern]},
4130             Parse::RecDescent::_tracefirst($_[1]),
4131             q{pattern},
4132             $tracelevel)
4133             if defined $::RD_TRACE;
4134              
4135            
4136 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
4137              
4138 0         0 my $score;
4139             my $score_return;
4140 0         0 my $_tok;
4141 0         0 my $return = undef;
4142 0         0 my $_matched=0;
4143 0         0 my $commit=0;
4144 0         0 my @item = ();
4145 0         0 my %item = ();
4146 0         0 my $repeating = $_[2];
4147 0         0 my $_noactions = $_[3];
4148 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
4149 0         0 my $_itempos = $_[5];
4150 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4151 0         0 my $text;
4152             my $lastsep;
4153 0         0 my $current_match;
4154 0         0 my $expectation = new Parse::RecDescent::Expectation(q{/.*/});
4155 0         0 $expectation->at($_[1]);
4156            
4157 0         0 my $thisline;
4158 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4159              
4160            
4161              
4162 0   0     0 while (!$_matched && !$commit)
4163             {
4164            
4165 0 0       0 Parse::RecDescent::_trace(q{Trying production: [/.*/]},
4166             Parse::RecDescent::_tracefirst($_[1]),
4167             q{pattern},
4168             $tracelevel)
4169             if defined $::RD_TRACE;
4170 0         0 my $thisprod = $thisrule->{"prods"}[0];
4171 0         0 $text = $_[1];
4172 0         0 my $_savetext;
4173 0         0 @item = (q{pattern});
4174 0         0 %item = (__RULE__ => q{pattern});
4175 0         0 my $repcount = 0;
4176              
4177              
4178 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
4179             q{pattern},
4180             $tracelevel)
4181             if defined $::RD_TRACE;
4182 0         0 undef $lastsep;
4183 0         0 $expectation->is(q{})->at($text);
4184            
4185              
4186 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*)/)
  0 0       0  
4187             {
4188 0 0       0 $text = $lastsep . $text if defined $lastsep;
4189 0         0 $expectation->failed();
4190 0 0       0 Parse::RecDescent::_trace(q{<>},
4191             Parse::RecDescent::_tracefirst($text))
4192             if defined $::RD_TRACE;
4193              
4194 0         0 last;
4195             }
4196 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
4197 0         0 substr($text,0,length($current_match),q{});
4198 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4199             . $current_match . q{])},
4200             Parse::RecDescent::_tracefirst($text))
4201             if defined $::RD_TRACE;
4202 0         0 push @item, $item{__PATTERN1__}=$current_match;
4203            
4204              
4205 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/.*/]<<},
4206             Parse::RecDescent::_tracefirst($text),
4207             q{pattern},
4208             $tracelevel)
4209             if defined $::RD_TRACE;
4210              
4211              
4212              
4213 0         0 $_matched = 1;
4214 0         0 last;
4215             }
4216              
4217              
4218 0 0 0     0 unless ( $_matched || defined($score) )
4219             {
4220            
4221              
4222 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
4223 0 0       0 Parse::RecDescent::_trace(q{<>},
4224             Parse::RecDescent::_tracefirst($_[1]),
4225             q{pattern},
4226             $tracelevel)
4227             if defined $::RD_TRACE;
4228 0         0 return undef;
4229             }
4230 0 0 0     0 if (!defined($return) && defined($score))
4231             {
4232 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4233             q{pattern},
4234             $tracelevel)
4235             if defined $::RD_TRACE;
4236 0         0 $return = $score_return;
4237             }
4238 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
4239 0 0       0 $return = $item[$#item] unless defined $return;
4240 0 0       0 if (defined $::RD_TRACE)
4241             {
4242 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4243             $return . q{])}, "",
4244             q{pattern},
4245             $tracelevel);
4246 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4247             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4248             Parse::RecDescent::_tracefirst($text),
4249             , q{pattern},
4250             $tracelevel)
4251             }
4252 0         0 $_[1] = $text;
4253 0         0 return $return;
4254             }
4255              
4256             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4257             sub Parse::RecDescent::Text::FormBuilder::Parser::required_pattern
4258             {
4259 0     0   0 my $thisparser = $_[0];
4260 2     2   17 use vars q{$tracelevel};
  2         5  
  2         1208  
4261 0   0     0 local $tracelevel = ($tracelevel||0)+1;
4262 0         0 $ERRORS = 0;
4263 0         0 my $thisrule = $thisparser->{"rules"}{"required_pattern"};
4264              
4265 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [required_pattern]},
4266             Parse::RecDescent::_tracefirst($_[1]),
4267             q{required_pattern},
4268             $tracelevel)
4269             if defined $::RD_TRACE;
4270              
4271            
4272 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
4273              
4274 0         0 my $score;
4275             my $score_return;
4276 0         0 my $_tok;
4277 0         0 my $return = undef;
4278 0         0 my $_matched=0;
4279 0         0 my $commit=0;
4280 0         0 my @item = ();
4281 0         0 my %item = ();
4282 0         0 my $repeating = $_[2];
4283 0         0 my $_noactions = $_[3];
4284 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
4285 0         0 my $_itempos = $_[5];
4286 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4287 0         0 my $text;
4288             my $lastsep;
4289 0         0 my $current_match;
4290 0         0 my $expectation = new Parse::RecDescent::Expectation(q{var_name});
4291 0         0 $expectation->at($_[1]);
4292            
4293 0         0 my $thisline;
4294 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4295              
4296            
4297              
4298 0   0     0 while (!$_matched && !$commit)
4299             {
4300            
4301 0 0       0 Parse::RecDescent::_trace(q{Trying production: [var_name]},
4302             Parse::RecDescent::_tracefirst($_[1]),
4303             q{required_pattern},
4304             $tracelevel)
4305             if defined $::RD_TRACE;
4306 0         0 my $thisprod = $thisrule->{"prods"}[0];
4307 0         0 $text = $_[1];
4308 0         0 my $_savetext;
4309 0         0 @item = (q{required_pattern});
4310 0         0 %item = (__RULE__ => q{required_pattern});
4311 0         0 my $repcount = 0;
4312              
4313              
4314 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [var_name]},
4315             Parse::RecDescent::_tracefirst($text),
4316             q{required_pattern},
4317             $tracelevel)
4318             if defined $::RD_TRACE;
4319 2     2   13 if (1) { no strict qw{refs};
  2         4  
  2         1495  
  0         0  
4320 0         0 $expectation->is(q{})->at($text);
4321 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::var_name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
4322             {
4323            
4324 0 0       0 Parse::RecDescent::_trace(q{<>},
4325             Parse::RecDescent::_tracefirst($text),
4326             q{required_pattern},
4327             $tracelevel)
4328             if defined $::RD_TRACE;
4329 0         0 $expectation->failed();
4330 0         0 last;
4331             }
4332 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [var_name]<< (return value: [}
4333             . $_tok . q{]},
4334              
4335             Parse::RecDescent::_tracefirst($text),
4336             q{required_pattern},
4337             $tracelevel)
4338             if defined $::RD_TRACE;
4339 0         0 $item{q{var_name}} = $_tok;
4340 0         0 push @item, $_tok;
4341            
4342             }
4343              
4344 0 0       0 Parse::RecDescent::_trace(q{Trying action},
4345             Parse::RecDescent::_tracefirst($text),
4346             q{required_pattern},
4347             $tracelevel)
4348             if defined $::RD_TRACE;
4349            
4350              
4351 0 0       0 $_tok = ($_noactions) ? 0 : do { $required = 1; $item[1] };
  0         0  
  0         0  
4352 0 0       0 unless (defined $_tok)
4353             {
4354 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4355             if defined $::RD_TRACE;
4356 0         0 last;
4357             }
4358 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4359             . $_tok . q{])},
4360             Parse::RecDescent::_tracefirst($text))
4361             if defined $::RD_TRACE;
4362 0         0 push @item, $_tok;
4363 0         0 $item{__ACTION1__}=$_tok;
4364            
4365              
4366 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [var_name]<<},
4367             Parse::RecDescent::_tracefirst($text),
4368             q{required_pattern},
4369             $tracelevel)
4370             if defined $::RD_TRACE;
4371              
4372              
4373              
4374 0         0 $_matched = 1;
4375 0         0 last;
4376             }
4377              
4378              
4379 0 0 0     0 unless ( $_matched || defined($score) )
4380             {
4381            
4382              
4383 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
4384 0 0       0 Parse::RecDescent::_trace(q{<>},
4385             Parse::RecDescent::_tracefirst($_[1]),
4386             q{required_pattern},
4387             $tracelevel)
4388             if defined $::RD_TRACE;
4389 0         0 return undef;
4390             }
4391 0 0 0     0 if (!defined($return) && defined($score))
4392             {
4393 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4394             q{required_pattern},
4395             $tracelevel)
4396             if defined $::RD_TRACE;
4397 0         0 $return = $score_return;
4398             }
4399 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
4400 0 0       0 $return = $item[$#item] unless defined $return;
4401 0 0       0 if (defined $::RD_TRACE)
4402             {
4403 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4404             $return . q{])}, "",
4405             q{required_pattern},
4406             $tracelevel);
4407 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4408             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4409             Parse::RecDescent::_tracefirst($text),
4410             , q{required_pattern},
4411             $tracelevel)
4412             }
4413 0         0 $_[1] = $text;
4414 0         0 return $return;
4415             }
4416              
4417             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4418             sub Parse::RecDescent::Text::FormBuilder::Parser::field_group
4419             {
4420 21     21   45 my $thisparser = $_[0];
4421 2     2   15 use vars q{$tracelevel};
  2         3  
  2         1139  
4422 21   50     68 local $tracelevel = ($tracelevel||0)+1;
4423 21         46 $ERRORS = 0;
4424 21         56 my $thisrule = $thisparser->{"rules"}{"field_group"};
4425              
4426 21 50       56 Parse::RecDescent::_trace(q{Trying rule: [field_group]},
4427             Parse::RecDescent::_tracefirst($_[1]),
4428             q{field_group},
4429             $tracelevel)
4430             if defined $::RD_TRACE;
4431              
4432            
4433 21         26 my $err_at = @{$thisparser->{errors}};
  21         57  
4434              
4435 21         35 my $score;
4436             my $score_return;
4437 0         0 my $_tok;
4438 21         23 my $return = undef;
4439 21         38 my $_matched=0;
4440 21         28 my $commit=0;
4441 21         38 my @item = ();
4442 21         37 my %item = ();
4443 21         32 my $repeating = $_[2];
4444 21         34 my $_noactions = $_[3];
4445 21 50       53 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         42  
  21         54  
4446 21         35 my $_itempos = $_[5];
4447 21 50       68 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4448 21         36 my $text;
4449             my $lastsep;
4450 0         0 my $current_match;
4451 21         90 my $expectation = new Parse::RecDescent::Expectation(q{name});
4452 21         184 $expectation->at($_[1]);
4453            
4454 21         88 my $thisline;
4455 21         98 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4456              
4457            
4458              
4459 21   33     244 while (!$_matched && !$commit)
4460             {
4461            
4462 21 50       52 Parse::RecDescent::_trace(q{Trying production: [name label hint group_type comment]},
4463             Parse::RecDescent::_tracefirst($_[1]),
4464             q{field_group},
4465             $tracelevel)
4466             if defined $::RD_TRACE;
4467 21         63 my $thisprod = $thisrule->{"prods"}[0];
4468 21         34 $text = $_[1];
4469 21         28 my $_savetext;
4470 21         46 @item = (q{field_group});
4471 21         51 %item = (__RULE__ => q{field_group});
4472 21         35 my $repcount = 0;
4473              
4474              
4475 21 50       59 Parse::RecDescent::_trace(q{Trying subrule: [name]},
4476             Parse::RecDescent::_tracefirst($text),
4477             q{field_group},
4478             $tracelevel)
4479             if defined $::RD_TRACE;
4480 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         1849  
  21         26  
4481 21         81 $expectation->is(q{})->at($text);
4482 21 100   21   261 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         49  
4483             {
4484            
4485 11 50       29 Parse::RecDescent::_trace(q{<>},
4486             Parse::RecDescent::_tracefirst($text),
4487             q{field_group},
4488             $tracelevel)
4489             if defined $::RD_TRACE;
4490 11         36 $expectation->failed();
4491 11         41 last;
4492             }
4493 10 50       44 Parse::RecDescent::_trace(q{>>Matched subrule: [name]<< (return value: [}
4494             . $_tok . q{]},
4495              
4496             Parse::RecDescent::_tracefirst($text),
4497             q{field_group},
4498             $tracelevel)
4499             if defined $::RD_TRACE;
4500 10         28 $item{q{name}} = $_tok;
4501 10         21 push @item, $_tok;
4502            
4503             }
4504              
4505 10 50       34 Parse::RecDescent::_trace(q{Trying repeated subrule: [label]},
4506             Parse::RecDescent::_tracefirst($text),
4507             q{field_group},
4508             $tracelevel)
4509             if defined $::RD_TRACE;
4510 10         44 $expectation->is(q{label})->at($text);
4511            
4512 10 50   10   161 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::label, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  10         58  
4513             {
4514 0 0       0 Parse::RecDescent::_trace(q{<>},
4515             Parse::RecDescent::_tracefirst($text),
4516             q{field_group},
4517             $tracelevel)
4518             if defined $::RD_TRACE;
4519 0         0 last;
4520             }
4521 10 50       167 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [label]<< (}
4522             . @$_tok . q{ times)},
4523              
4524             Parse::RecDescent::_tracefirst($text),
4525             q{field_group},
4526             $tracelevel)
4527             if defined $::RD_TRACE;
4528 10         26 $item{q{label(?)}} = $_tok;
4529 10         23 push @item, $_tok;
4530            
4531              
4532              
4533 10 50       26 Parse::RecDescent::_trace(q{Trying repeated subrule: [hint]},
4534             Parse::RecDescent::_tracefirst($text),
4535             q{field_group},
4536             $tracelevel)
4537             if defined $::RD_TRACE;
4538 10         40 $expectation->is(q{hint})->at($text);
4539            
4540 10 50   10   120 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::hint, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  10         21  
4541             {
4542 0 0       0 Parse::RecDescent::_trace(q{<>},
4543             Parse::RecDescent::_tracefirst($text),
4544             q{field_group},
4545             $tracelevel)
4546             if defined $::RD_TRACE;
4547 0         0 last;
4548             }
4549 10 50       128 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [hint]<< (}
4550             . @$_tok . q{ times)},
4551              
4552             Parse::RecDescent::_tracefirst($text),
4553             q{field_group},
4554             $tracelevel)
4555             if defined $::RD_TRACE;
4556 10         30 $item{q{hint(?)}} = $_tok;
4557 10         18 push @item, $_tok;
4558            
4559              
4560              
4561 10 50       29 Parse::RecDescent::_trace(q{Trying subrule: [group_type]},
4562             Parse::RecDescent::_tracefirst($text),
4563             q{field_group},
4564             $tracelevel)
4565             if defined $::RD_TRACE;
4566 2     2   15 if (1) { no strict qw{refs};
  2         5  
  2         2754  
  10         15  
4567 10         35 $expectation->is(q{group_type})->at($text);
4568 10 50   10   126 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::group_type($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  10         28  
4569             {
4570            
4571 10 50       23 Parse::RecDescent::_trace(q{<>},
4572             Parse::RecDescent::_tracefirst($text),
4573             q{field_group},
4574             $tracelevel)
4575             if defined $::RD_TRACE;
4576 10         30 $expectation->failed();
4577 10         120 last;
4578             }
4579 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [group_type]<< (return value: [}
4580             . $_tok . q{]},
4581              
4582             Parse::RecDescent::_tracefirst($text),
4583             q{field_group},
4584             $tracelevel)
4585             if defined $::RD_TRACE;
4586 0         0 $item{q{group_type}} = $_tok;
4587 0         0 push @item, $_tok;
4588            
4589             }
4590              
4591 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [comment]},
4592             Parse::RecDescent::_tracefirst($text),
4593             q{field_group},
4594             $tracelevel)
4595             if defined $::RD_TRACE;
4596 0         0 $expectation->is(q{comment})->at($text);
4597            
4598 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::comment, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
4599             {
4600 0 0       0 Parse::RecDescent::_trace(q{<>},
4601             Parse::RecDescent::_tracefirst($text),
4602             q{field_group},
4603             $tracelevel)
4604             if defined $::RD_TRACE;
4605 0         0 last;
4606             }
4607 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [comment]<< (}
4608             . @$_tok . q{ times)},
4609              
4610             Parse::RecDescent::_tracefirst($text),
4611             q{field_group},
4612             $tracelevel)
4613             if defined $::RD_TRACE;
4614 0         0 $item{q{comment(?)}} = $_tok;
4615 0         0 push @item, $_tok;
4616            
4617              
4618              
4619 0 0       0 Parse::RecDescent::_trace(q{Trying action},
4620             Parse::RecDescent::_tracefirst($text),
4621             q{field_group},
4622             $tracelevel)
4623             if defined $::RD_TRACE;
4624            
4625              
4626 0 0       0 $_tok = ($_noactions) ? 0 : do {
4627             #warn "[$thisline] comment = $item{'hint(?)'}[0]\n" if $item{'hint(?)'}[0];
4628             #warn "[$thisline] field $item{name} is $item{group_type}\n";
4629 0         0 push @lines, [ 'group', {
4630             name => $item{name},
4631             label => $item{'label(?)'}[0],
4632             comment => $item{'hint(?)'}[0],
4633             group => $item{group_type},
4634             } ];
4635             };
4636 0 0       0 unless (defined $_tok)
4637             {
4638 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4639             if defined $::RD_TRACE;
4640 0         0 last;
4641             }
4642 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4643             . $_tok . q{])},
4644             Parse::RecDescent::_tracefirst($text))
4645             if defined $::RD_TRACE;
4646 0         0 push @item, $_tok;
4647 0         0 $item{__ACTION1__}=$_tok;
4648            
4649              
4650 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [name label hint group_type comment]<<},
4651             Parse::RecDescent::_tracefirst($text),
4652             q{field_group},
4653             $tracelevel)
4654             if defined $::RD_TRACE;
4655              
4656              
4657              
4658 0         0 $_matched = 1;
4659 0         0 last;
4660             }
4661              
4662              
4663 21 50 33     159 unless ( $_matched || defined($score) )
4664             {
4665            
4666              
4667 21         38 $_[1] = $text; # NOT SURE THIS IS NEEDED
4668 21 50       45 Parse::RecDescent::_trace(q{<>},
4669             Parse::RecDescent::_tracefirst($_[1]),
4670             q{field_group},
4671             $tracelevel)
4672             if defined $::RD_TRACE;
4673 21         149 return undef;
4674             }
4675 0 0 0     0 if (!defined($return) && defined($score))
4676             {
4677 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4678             q{field_group},
4679             $tracelevel)
4680             if defined $::RD_TRACE;
4681 0         0 $return = $score_return;
4682             }
4683 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
4684 0 0       0 $return = $item[$#item] unless defined $return;
4685 0 0       0 if (defined $::RD_TRACE)
4686             {
4687 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4688             $return . q{])}, "",
4689             q{field_group},
4690             $tracelevel);
4691 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4692             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4693             Parse::RecDescent::_tracefirst($text),
4694             , q{field_group},
4695             $tracelevel)
4696             }
4697 0         0 $_[1] = $text;
4698 0         0 return $return;
4699             }
4700              
4701             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4702             sub Parse::RecDescent::Text::FormBuilder::Parser::unknown_block_directive
4703             {
4704 21     21   37 my $thisparser = $_[0];
4705 2     2   21 use vars q{$tracelevel};
  2         6  
  2         4894  
4706 21   50     63 local $tracelevel = ($tracelevel||0)+1;
4707 21         45 $ERRORS = 0;
4708 21         60 my $thisrule = $thisparser->{"rules"}{"unknown_block_directive"};
4709              
4710 21 50       51 Parse::RecDescent::_trace(q{Trying rule: [unknown_block_directive]},
4711             Parse::RecDescent::_tracefirst($_[1]),
4712             q{unknown_block_directive},
4713             $tracelevel)
4714             if defined $::RD_TRACE;
4715              
4716            
4717 21         29 my $err_at = @{$thisparser->{errors}};
  21         57  
4718              
4719 21         38 my $score;
4720             my $score_return;
4721 0         0 my $_tok;
4722 21         32 my $return = undef;
4723 21         53 my $_matched=0;
4724 21         28 my $commit=0;
4725 21         43 my @item = ();
4726 21         46 my %item = ();
4727 21         28 my $repeating = $_[2];
4728 21         40 my $_noactions = $_[3];
4729 21 50       53 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         39  
  21         51  
4730 21         35 my $_itempos = $_[5];
4731 21 50       75 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4732 21         42 my $text;
4733             my $lastsep;
4734 0         0 my $current_match;
4735 21         87 my $expectation = new Parse::RecDescent::Expectation(q{/\\!\\S*/});
4736 21         188 $expectation->at($_[1]);
4737            
4738 21         93 my $thisline;
4739 21         90 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4740              
4741            
4742              
4743 21   33     245 while (!$_matched && !$commit)
4744             {
4745            
4746 21 50       56 Parse::RecDescent::_trace(q{Trying production: [/\\!\\S*/ var_name block]},
4747             Parse::RecDescent::_tracefirst($_[1]),
4748             q{unknown_block_directive},
4749             $tracelevel)
4750             if defined $::RD_TRACE;
4751 21         58 my $thisprod = $thisrule->{"prods"}[0];
4752 21         46 $text = $_[1];
4753 21         32 my $_savetext;
4754 21         56 @item = (q{unknown_block_directive});
4755 21         56 %item = (__RULE__ => q{unknown_block_directive});
4756 21         40 my $repcount = 0;
4757              
4758              
4759 21 50       53 Parse::RecDescent::_trace(q{Trying terminal: [/\\!\\S*/]}, Parse::RecDescent::_tracefirst($text),
4760             q{unknown_block_directive},
4761             $tracelevel)
4762             if defined $::RD_TRACE;
4763 21         36 undef $lastsep;
4764 21         90 $expectation->is(q{})->at($text);
4765            
4766              
4767 21 100 33     277 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\!\S*)/)
  21 50       274  
4768             {
4769 21 50       74 $text = $lastsep . $text if defined $lastsep;
4770 21         83 $expectation->failed();
4771 21 50       100 Parse::RecDescent::_trace(q{<>},
4772             Parse::RecDescent::_tracefirst($text))
4773             if defined $::RD_TRACE;
4774              
4775 21         47 last;
4776             }
4777 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
4778 0         0 substr($text,0,length($current_match),q{});
4779 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4780             . $current_match . q{])},
4781             Parse::RecDescent::_tracefirst($text))
4782             if defined $::RD_TRACE;
4783 0         0 push @item, $item{__PATTERN1__}=$current_match;
4784            
4785              
4786 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [var_name]},
4787             Parse::RecDescent::_tracefirst($text),
4788             q{unknown_block_directive},
4789             $tracelevel)
4790             if defined $::RD_TRACE;
4791 0         0 $expectation->is(q{var_name})->at($text);
4792            
4793 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::var_name, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
4794             {
4795 0 0       0 Parse::RecDescent::_trace(q{<>},
4796             Parse::RecDescent::_tracefirst($text),
4797             q{unknown_block_directive},
4798             $tracelevel)
4799             if defined $::RD_TRACE;
4800 0         0 last;
4801             }
4802 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [var_name]<< (}
4803             . @$_tok . q{ times)},
4804              
4805             Parse::RecDescent::_tracefirst($text),
4806             q{unknown_block_directive},
4807             $tracelevel)
4808             if defined $::RD_TRACE;
4809 0         0 $item{q{var_name(?)}} = $_tok;
4810 0         0 push @item, $_tok;
4811            
4812              
4813              
4814 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [block]},
4815             Parse::RecDescent::_tracefirst($text),
4816             q{unknown_block_directive},
4817             $tracelevel)
4818             if defined $::RD_TRACE;
4819 2     2   19 if (1) { no strict qw{refs};
  2         4  
  2         2103  
  0         0  
4820 0         0 $expectation->is(q{block})->at($text);
4821 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
4822             {
4823            
4824 0 0       0 Parse::RecDescent::_trace(q{<>},
4825             Parse::RecDescent::_tracefirst($text),
4826             q{unknown_block_directive},
4827             $tracelevel)
4828             if defined $::RD_TRACE;
4829 0         0 $expectation->failed();
4830 0         0 last;
4831             }
4832 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [block]<< (return value: [}
4833             . $_tok . q{]},
4834              
4835             Parse::RecDescent::_tracefirst($text),
4836             q{unknown_block_directive},
4837             $tracelevel)
4838             if defined $::RD_TRACE;
4839 0         0 $item{q{block}} = $_tok;
4840 0         0 push @item, $_tok;
4841            
4842             }
4843              
4844 0 0       0 Parse::RecDescent::_trace(q{Trying action},
4845             Parse::RecDescent::_tracefirst($text),
4846             q{unknown_block_directive},
4847             $tracelevel)
4848             if defined $::RD_TRACE;
4849            
4850              
4851 0 0       0 $_tok = ($_noactions) ? 0 : do { warn "[Text::Formbuilder] Skipping unknown block directive '$item[1]' at input text line $thisline\n"; };
  0         0  
4852 0 0       0 unless (defined $_tok)
4853             {
4854 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
4855             if defined $::RD_TRACE;
4856 0         0 last;
4857             }
4858 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4859             . $_tok . q{])},
4860             Parse::RecDescent::_tracefirst($text))
4861             if defined $::RD_TRACE;
4862 0         0 push @item, $_tok;
4863 0         0 $item{__ACTION1__}=$_tok;
4864            
4865              
4866 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/\\!\\S*/ var_name block]<<},
4867             Parse::RecDescent::_tracefirst($text),
4868             q{unknown_block_directive},
4869             $tracelevel)
4870             if defined $::RD_TRACE;
4871              
4872              
4873              
4874 0         0 $_matched = 1;
4875 0         0 last;
4876             }
4877              
4878              
4879 21 50 33     124 unless ( $_matched || defined($score) )
4880             {
4881            
4882              
4883 21         33 $_[1] = $text; # NOT SURE THIS IS NEEDED
4884 21 50       66 Parse::RecDescent::_trace(q{<>},
4885             Parse::RecDescent::_tracefirst($_[1]),
4886             q{unknown_block_directive},
4887             $tracelevel)
4888             if defined $::RD_TRACE;
4889 21         158 return undef;
4890             }
4891 0 0 0     0 if (!defined($return) && defined($score))
4892             {
4893 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4894             q{unknown_block_directive},
4895             $tracelevel)
4896             if defined $::RD_TRACE;
4897 0         0 $return = $score_return;
4898             }
4899 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
4900 0 0       0 $return = $item[$#item] unless defined $return;
4901 0 0       0 if (defined $::RD_TRACE)
4902             {
4903 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4904             $return . q{])}, "",
4905             q{unknown_block_directive},
4906             $tracelevel);
4907 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
4908             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4909             Parse::RecDescent::_tracefirst($text),
4910             , q{unknown_block_directive},
4911             $tracelevel)
4912             }
4913 0         0 $_[1] = $text;
4914 0         0 return $return;
4915             }
4916              
4917             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
4918             sub Parse::RecDescent::Text::FormBuilder::Parser::label
4919             {
4920 34     34   492 my $thisparser = $_[0];
4921 2     2   13 use vars q{$tracelevel};
  2         6  
  2         1740  
4922 34   50     118 local $tracelevel = ($tracelevel||0)+1;
4923 34         62 $ERRORS = 0;
4924 34         106 my $thisrule = $thisparser->{"rules"}{"label"};
4925              
4926 34 50       100 Parse::RecDescent::_trace(q{Trying rule: [label]},
4927             Parse::RecDescent::_tracefirst($_[1]),
4928             q{label},
4929             $tracelevel)
4930             if defined $::RD_TRACE;
4931              
4932            
4933 34         45 my $err_at = @{$thisparser->{errors}};
  34         97  
4934              
4935 34         58 my $score;
4936             my $score_return;
4937 0         0 my $_tok;
4938 34         51 my $return = undef;
4939 34         54 my $_matched=0;
4940 34         41 my $commit=0;
4941 34         67 my @item = ();
4942 34         63 my %item = ();
4943 34         59 my $repeating = $_[2];
4944 34         50 my $_noactions = $_[3];
4945 34 50       97 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  34         45  
  34         199  
4946 34         68 my $_itempos = $_[5];
4947 34 50       491 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4948 34         61 my $text;
4949             my $lastsep;
4950 0         0 my $current_match;
4951 34         144 my $expectation = new Parse::RecDescent::Expectation(q{'|'});
4952 34         293 $expectation->at($_[1]);
4953            
4954 34         159 my $thisline;
4955 34         164 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4956              
4957            
4958              
4959 34   33     499 while (!$_matched && !$commit)
4960             {
4961            
4962 34 50       101 Parse::RecDescent::_trace(q{Trying production: ['|' string]},
4963             Parse::RecDescent::_tracefirst($_[1]),
4964             q{label},
4965             $tracelevel)
4966             if defined $::RD_TRACE;
4967 34         106 my $thisprod = $thisrule->{"prods"}[0];
4968 34         75 $text = $_[1];
4969 34         49 my $_savetext;
4970 34         83 @item = (q{label});
4971 34         142 %item = (__RULE__ => q{label});
4972 34         66 my $repcount = 0;
4973              
4974              
4975 34 50       96 Parse::RecDescent::_trace(q{Trying terminal: ['|']},
4976             Parse::RecDescent::_tracefirst($text),
4977             q{label},
4978             $tracelevel)
4979             if defined $::RD_TRACE;
4980 34         64 undef $lastsep;
4981 34         117 $expectation->is(q{})->at($text);
4982            
4983              
4984 34 50 66     516 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\|/)
  34 100       432  
4985             {
4986 30 50       111 $text = $lastsep . $text if defined $lastsep;
4987            
4988 30         108 $expectation->failed();
4989 30 50       158 Parse::RecDescent::_trace(qq{<>},
4990             Parse::RecDescent::_tracefirst($text))
4991             if defined $::RD_TRACE;
4992 30         66 last;
4993             }
4994 4         26 $current_match = substr($text, $-[0], $+[0] - $-[0]);
4995 4         16 substr($text,0,length($current_match),q{});
4996 4 50       11 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4997             . $current_match . q{])},
4998             Parse::RecDescent::_tracefirst($text))
4999             if defined $::RD_TRACE;
5000 4         15 push @item, $item{__STRING1__}=$current_match;
5001            
5002              
5003 4 50       11 Parse::RecDescent::_trace(q{Trying subrule: [string]},
5004             Parse::RecDescent::_tracefirst($text),
5005             q{label},
5006             $tracelevel)
5007             if defined $::RD_TRACE;
5008 2     2   18 if (1) { no strict qw{refs};
  2         4  
  2         1706  
  4         8  
5009 4         22 $expectation->is(q{string})->at($text);
5010 4 50   4   59 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  4         9  
5011             {
5012            
5013 0 0       0 Parse::RecDescent::_trace(q{<>},
5014             Parse::RecDescent::_tracefirst($text),
5015             q{label},
5016             $tracelevel)
5017             if defined $::RD_TRACE;
5018 0         0 $expectation->failed();
5019 0         0 last;
5020             }
5021 4 50       22 Parse::RecDescent::_trace(q{>>Matched subrule: [string]<< (return value: [}
5022             . $_tok . q{]},
5023              
5024             Parse::RecDescent::_tracefirst($text),
5025             q{label},
5026             $tracelevel)
5027             if defined $::RD_TRACE;
5028 4         12 $item{q{string}} = $_tok;
5029 4         8 push @item, $_tok;
5030            
5031             }
5032              
5033 4 50       21 Parse::RecDescent::_trace(q{Trying action},
5034             Parse::RecDescent::_tracefirst($text),
5035             q{label},
5036             $tracelevel)
5037             if defined $::RD_TRACE;
5038            
5039              
5040 4 50       11 $_tok = ($_noactions) ? 0 : do { $item[2] };
  4         8  
5041 4 50       13 unless (defined $_tok)
5042             {
5043 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
5044             if defined $::RD_TRACE;
5045 0         0 last;
5046             }
5047 4 50       11 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5048             . $_tok . q{])},
5049             Parse::RecDescent::_tracefirst($text))
5050             if defined $::RD_TRACE;
5051 4         11 push @item, $_tok;
5052 4         12 $item{__ACTION1__}=$_tok;
5053            
5054              
5055 4 50       9 Parse::RecDescent::_trace(q{>>Matched production: ['|' string]<<},
5056             Parse::RecDescent::_tracefirst($text),
5057             q{label},
5058             $tracelevel)
5059             if defined $::RD_TRACE;
5060              
5061              
5062              
5063 4         6 $_matched = 1;
5064 4         9 last;
5065             }
5066              
5067              
5068 34 100 66     260 unless ( $_matched || defined($score) )
5069             {
5070            
5071              
5072 30         59 $_[1] = $text; # NOT SURE THIS IS NEEDED
5073 30 50       96 Parse::RecDescent::_trace(q{<>},
5074             Parse::RecDescent::_tracefirst($_[1]),
5075             q{label},
5076             $tracelevel)
5077             if defined $::RD_TRACE;
5078 30         214 return undef;
5079             }
5080 4 50 33     24 if (!defined($return) && defined($score))
5081             {
5082 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5083             q{label},
5084             $tracelevel)
5085             if defined $::RD_TRACE;
5086 0         0 $return = $score_return;
5087             }
5088 4         5 splice @{$thisparser->{errors}}, $err_at;
  4         11  
5089 4 50       14 $return = $item[$#item] unless defined $return;
5090 4 50       11 if (defined $::RD_TRACE)
5091             {
5092 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5093             $return . q{])}, "",
5094             q{label},
5095             $tracelevel);
5096 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5097             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5098             Parse::RecDescent::_tracefirst($text),
5099             , q{label},
5100             $tracelevel)
5101             }
5102 4         11 $_[1] = $text;
5103 4         72 return $return;
5104             }
5105              
5106             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5107             sub Parse::RecDescent::Text::FormBuilder::Parser::line
5108             {
5109 21     21   43 my $thisparser = $_[0];
5110 2     2   13 use vars q{$tracelevel};
  2         5  
  2         8141  
5111 21   50     70 local $tracelevel = ($tracelevel||0)+1;
5112 21         36 $ERRORS = 0;
5113 21         62 my $thisrule = $thisparser->{"rules"}{"line"};
5114              
5115 21 50       127 Parse::RecDescent::_trace(q{Trying rule: [line]},
5116             Parse::RecDescent::_tracefirst($_[1]),
5117             q{line},
5118             $tracelevel)
5119             if defined $::RD_TRACE;
5120              
5121            
5122 21         25 my $err_at = @{$thisparser->{errors}};
  21         44  
5123              
5124 21         28 my $score;
5125             my $score_return;
5126 0         0 my $_tok;
5127 21         44 my $return = undef;
5128 21         42 my $_matched=0;
5129 21         27 my $commit=0;
5130 21         38 my @item = ();
5131 21         40 my %item = ();
5132 21         31 my $repeating = $_[2];
5133 21         39 my $_noactions = $_[3];
5134 21 50       57 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         29  
  21         53  
5135 21         35 my $_itempos = $_[5];
5136 21 50       63 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5137 21         37 my $text;
5138             my $lastsep;
5139 0         0 my $current_match;
5140 21         85 my $expectation = new Parse::RecDescent::Expectation(q{});
5141 21         174 $expectation->at($_[1]);
5142            
5143 21         91 my $thisline;
5144 21         90 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5145              
5146            
5147              
5148 21   33     225 while (!$_matched && !$commit)
5149             {
5150 21 50       70 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
5151 21 50       55 Parse::RecDescent::_trace(q{Trying production: [ title, or author, or pattern_def, or section_head, or heading, or submit, or reset, or group_field, or field_group, or unknown_directive, or field, or comment, or blank /\\n+/]},
5152             Parse::RecDescent::_tracefirst($_[1]),
5153             q{line},
5154             $tracelevel)
5155             if defined $::RD_TRACE;
5156 21         61 my $thisprod = $thisrule->{"prods"}[0];
5157 21         30 $text = $_[1];
5158 21         43 my $_savetext;
5159 21         45 @item = (q{line});
5160 21         58 %item = (__RULE__ => q{line});
5161 21         31 my $repcount = 0;
5162              
5163              
5164            
5165              
5166 21 50       45 Parse::RecDescent::_trace(q{Trying directive: []},
5167             Parse::RecDescent::_tracefirst($text),
5168             q{line},
5169             $tracelevel)
5170             if defined $::RD_TRACE;
5171 21         31 $_tok = do { my $oldskip = $skip; $skip='[ \t]*'; $oldskip };
  21         29  
  21         32  
  21         51  
5172 21 50       53 if (defined($_tok))
5173             {
5174 21 50       45 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
5175             . $_tok . q{])},
5176             Parse::RecDescent::_tracefirst($text))
5177             if defined $::RD_TRACE;
5178             }
5179             else
5180             {
5181 0 0       0 Parse::RecDescent::_trace(q{<>},
5182             Parse::RecDescent::_tracefirst($text))
5183             if defined $::RD_TRACE;
5184             }
5185            
5186 21 50       65 last unless defined $_tok;
5187 21         59 push @item, $item{__DIRECTIVE1__}=$_tok;
5188            
5189              
5190 21 50       58 Parse::RecDescent::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_line]},
5191             Parse::RecDescent::_tracefirst($text),
5192             q{line},
5193             $tracelevel)
5194             if defined $::RD_TRACE;
5195 2     2   202 if (1) { no strict qw{refs};
  2         6  
  2         6653  
  21         24  
5196 21         73 $expectation->is(q{title, or author, or pattern_def, or section_head, or heading, or submit, or reset, or group_field, or field_group, or unknown_directive, or field, or comment, or blank})->at($text);
5197 21 50   21   271 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_line($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         55  
5198             {
5199            
5200 0 0       0 Parse::RecDescent::_trace(q{<>},
5201             Parse::RecDescent::_tracefirst($text),
5202             q{line},
5203             $tracelevel)
5204             if defined $::RD_TRACE;
5205 0         0 $expectation->failed();
5206 0         0 last;
5207             }
5208 21 50       103 Parse::RecDescent::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_line]<< (return value: [}
5209             . $_tok . q{]},
5210              
5211             Parse::RecDescent::_tracefirst($text),
5212             q{line},
5213             $tracelevel)
5214             if defined $::RD_TRACE;
5215 21         65 $item{q{_alternation_1_of_production_1_of_rule_line}} = $_tok;
5216 21         50 push @item, $_tok;
5217            
5218             }
5219              
5220 21 50       46 Parse::RecDescent::_trace(q{Trying terminal: [/\\n+/]}, Parse::RecDescent::_tracefirst($text),
5221             q{line},
5222             $tracelevel)
5223             if defined $::RD_TRACE;
5224 21         48 undef $lastsep;
5225 21         83 $expectation->is(q{/\\n+/})->at($text);
5226            
5227              
5228 21 50 66     304 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\n+)/)
  21 100       245  
5229             {
5230 7 50       297 $text = $lastsep . $text if defined $lastsep;
5231 7         31 $expectation->failed();
5232 7 50       105 Parse::RecDescent::_trace(q{<>},
5233             Parse::RecDescent::_tracefirst($text))
5234             if defined $::RD_TRACE;
5235              
5236 7         27 last;
5237             }
5238 14         111 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5239 14         61 substr($text,0,length($current_match),q{});
5240 14 50       40 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5241             . $current_match . q{])},
5242             Parse::RecDescent::_tracefirst($text))
5243             if defined $::RD_TRACE;
5244 14         50 push @item, $item{__PATTERN1__}=$current_match;
5245            
5246              
5247 14 50       38 Parse::RecDescent::_trace(q{>>Matched production: [ title, or author, or pattern_def, or section_head, or heading, or submit, or reset, or group_field, or field_group, or unknown_directive, or field, or comment, or blank /\\n+/]<<},
5248             Parse::RecDescent::_tracefirst($text),
5249             q{line},
5250             $tracelevel)
5251             if defined $::RD_TRACE;
5252              
5253              
5254              
5255 14         31 $_matched = 1;
5256 14         41 last;
5257             }
5258              
5259              
5260 21 100 66     88 unless ( $_matched || defined($score) )
5261             {
5262            
5263              
5264 7         18 $_[1] = $text; # NOT SURE THIS IS NEEDED
5265 7 50       19 Parse::RecDescent::_trace(q{<>},
5266             Parse::RecDescent::_tracefirst($_[1]),
5267             q{line},
5268             $tracelevel)
5269             if defined $::RD_TRACE;
5270 7         68 return undef;
5271             }
5272 14 50 33     81 if (!defined($return) && defined($score))
5273             {
5274 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5275             q{line},
5276             $tracelevel)
5277             if defined $::RD_TRACE;
5278 0         0 $return = $score_return;
5279             }
5280 14         25 splice @{$thisparser->{errors}}, $err_at;
  14         42  
5281 14 50       42 $return = $item[$#item] unless defined $return;
5282 14 50       40 if (defined $::RD_TRACE)
5283             {
5284 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5285             $return . q{])}, "",
5286             q{line},
5287             $tracelevel);
5288 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5289             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5290             Parse::RecDescent::_tracefirst($text),
5291             , q{line},
5292             $tracelevel)
5293             }
5294 14         33 $_[1] = $text;
5295 14         157 return $return;
5296             }
5297              
5298             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5299             sub Parse::RecDescent::Text::FormBuilder::Parser::bang
5300             {
5301 2     2   35 my $thisparser = $_[0];
5302 2     2   26 use vars q{$tracelevel};
  2         5  
  2         2682  
5303 2   50     10 local $tracelevel = ($tracelevel||0)+1;
5304 2         4 $ERRORS = 0;
5305 2         7 my $thisrule = $thisparser->{"rules"}{"bang"};
5306              
5307 2 50       10 Parse::RecDescent::_trace(q{Trying rule: [bang]},
5308             Parse::RecDescent::_tracefirst($_[1]),
5309             q{bang},
5310             $tracelevel)
5311             if defined $::RD_TRACE;
5312              
5313            
5314 2         2 my $err_at = @{$thisparser->{errors}};
  2         7  
5315              
5316 2         5 my $score;
5317             my $score_return;
5318 0         0 my $_tok;
5319 2         4 my $return = undef;
5320 2         4 my $_matched=0;
5321 2         5 my $commit=0;
5322 2         4 my @item = ();
5323 2         6 my %item = ();
5324 2         3 my $repeating = $_[2];
5325 2         4 my $_noactions = $_[3];
5326 2 50       8 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  2         19  
  2         6  
5327 2         5 my $_itempos = $_[5];
5328 2 50       9 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5329 2         5 my $text;
5330             my $lastsep;
5331 0         0 my $current_match;
5332 2         8 my $expectation = new Parse::RecDescent::Expectation(q{'!'});
5333 2         33 $expectation->at($_[1]);
5334            
5335 2         10 my $thisline;
5336 2         13 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5337              
5338            
5339              
5340 2   33     25 while (!$_matched && !$commit)
5341             {
5342            
5343 2 50       7 Parse::RecDescent::_trace(q{Trying production: ['!']},
5344             Parse::RecDescent::_tracefirst($_[1]),
5345             q{bang},
5346             $tracelevel)
5347             if defined $::RD_TRACE;
5348 2         7 my $thisprod = $thisrule->{"prods"}[0];
5349 2         3 $text = $_[1];
5350 2         3 my $_savetext;
5351 2         7 @item = (q{bang});
5352 2         7 %item = (__RULE__ => q{bang});
5353 2         5 my $repcount = 0;
5354              
5355              
5356 2 50       7 Parse::RecDescent::_trace(q{Trying terminal: ['!']},
5357             Parse::RecDescent::_tracefirst($text),
5358             q{bang},
5359             $tracelevel)
5360             if defined $::RD_TRACE;
5361 2         4 undef $lastsep;
5362 2         9 $expectation->is(q{})->at($text);
5363            
5364              
5365 2 50 66     37 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!/)
  2 100       31  
5366             {
5367 1 50       6 $text = $lastsep . $text if defined $lastsep;
5368            
5369 1         5 $expectation->failed();
5370 1 50       8 Parse::RecDescent::_trace(qq{<>},
5371             Parse::RecDescent::_tracefirst($text))
5372             if defined $::RD_TRACE;
5373 1         22 last;
5374             }
5375 1         8 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5376 1         4 substr($text,0,length($current_match),q{});
5377 1 50       6 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5378             . $current_match . q{])},
5379             Parse::RecDescent::_tracefirst($text))
5380             if defined $::RD_TRACE;
5381 1         3 push @item, $item{__STRING1__}=$current_match;
5382            
5383              
5384 1 50       5 Parse::RecDescent::_trace(q{>>Matched production: ['!']<<},
5385             Parse::RecDescent::_tracefirst($text),
5386             q{bang},
5387             $tracelevel)
5388             if defined $::RD_TRACE;
5389              
5390              
5391              
5392 1         2 $_matched = 1;
5393 1         4 last;
5394             }
5395              
5396              
5397 2 100 66     15 unless ( $_matched || defined($score) )
5398             {
5399            
5400              
5401 1         3 $_[1] = $text; # NOT SURE THIS IS NEEDED
5402 1 50       6 Parse::RecDescent::_trace(q{<>},
5403             Parse::RecDescent::_tracefirst($_[1]),
5404             q{bang},
5405             $tracelevel)
5406             if defined $::RD_TRACE;
5407 1         9 return undef;
5408             }
5409 1 50 33     452 if (!defined($return) && defined($score))
5410             {
5411 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5412             q{bang},
5413             $tracelevel)
5414             if defined $::RD_TRACE;
5415 0         0 $return = $score_return;
5416             }
5417 1         5 splice @{$thisparser->{errors}}, $err_at;
  1         4  
5418 1 50       5 $return = $item[$#item] unless defined $return;
5419 1 50       4 if (defined $::RD_TRACE)
5420             {
5421 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5422             $return . q{])}, "",
5423             q{bang},
5424             $tracelevel);
5425 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5426             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5427             Parse::RecDescent::_tracefirst($text),
5428             , q{bang},
5429             $tracelevel)
5430             }
5431 1         3 $_[1] = $text;
5432 1         11 return $return;
5433             }
5434              
5435             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5436             sub Parse::RecDescent::Text::FormBuilder::Parser::comment
5437             {
5438 35     35   367 my $thisparser = $_[0];
5439 2     2   16 use vars q{$tracelevel};
  2         4  
  2         3463  
5440 35   50     120 local $tracelevel = ($tracelevel||0)+1;
5441 35         65 $ERRORS = 0;
5442 35         107 my $thisrule = $thisparser->{"rules"}{"comment"};
5443              
5444 35 50       114 Parse::RecDescent::_trace(q{Trying rule: [comment]},
5445             Parse::RecDescent::_tracefirst($_[1]),
5446             q{comment},
5447             $tracelevel)
5448             if defined $::RD_TRACE;
5449              
5450            
5451 35         48 my $err_at = @{$thisparser->{errors}};
  35         80  
5452              
5453 35         62 my $score;
5454             my $score_return;
5455 0         0 my $_tok;
5456 35         54 my $return = undef;
5457 35         53 my $_matched=0;
5458 35         53 my $commit=0;
5459 35         75 my @item = ();
5460 35         70 my %item = ();
5461 35         54 my $repeating = $_[2];
5462 35         64 my $_noactions = $_[3];
5463 35 50       186 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  35         65  
  35         88  
5464 35         81 my $_itempos = $_[5];
5465 35 50       117 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5466 35         61 my $text;
5467             my $lastsep;
5468 0         0 my $current_match;
5469 35         142 my $expectation = new Parse::RecDescent::Expectation(q{'#'});
5470 35         478 $expectation->at($_[1]);
5471            
5472 35         163 my $thisline;
5473 35         368 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5474              
5475            
5476              
5477 35   33     391 while (!$_matched && !$commit)
5478             {
5479            
5480 35 50       103 Parse::RecDescent::_trace(q{Trying production: ['#' /.*/]},
5481             Parse::RecDescent::_tracefirst($_[1]),
5482             q{comment},
5483             $tracelevel)
5484             if defined $::RD_TRACE;
5485 35         121 my $thisprod = $thisrule->{"prods"}[0];
5486 35         59 $text = $_[1];
5487 35         60 my $_savetext;
5488 35         92 @item = (q{comment});
5489 35         99 %item = (__RULE__ => q{comment});
5490 35         56 my $repcount = 0;
5491              
5492              
5493 35 50       82 Parse::RecDescent::_trace(q{Trying terminal: ['#']},
5494             Parse::RecDescent::_tracefirst($text),
5495             q{comment},
5496             $tracelevel)
5497             if defined $::RD_TRACE;
5498 35         55 undef $lastsep;
5499 35         132 $expectation->is(q{})->at($text);
5500            
5501              
5502 35 50 33     470 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\#/)
  35 50       346  
5503             {
5504 35 50       124 $text = $lastsep . $text if defined $lastsep;
5505            
5506 35         146 $expectation->failed();
5507 35 50       184 Parse::RecDescent::_trace(qq{<>},
5508             Parse::RecDescent::_tracefirst($text))
5509             if defined $::RD_TRACE;
5510 35         758 last;
5511             }
5512 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5513 0         0 substr($text,0,length($current_match),q{});
5514 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5515             . $current_match . q{])},
5516             Parse::RecDescent::_tracefirst($text))
5517             if defined $::RD_TRACE;
5518 0         0 push @item, $item{__STRING1__}=$current_match;
5519            
5520              
5521 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
5522             q{comment},
5523             $tracelevel)
5524             if defined $::RD_TRACE;
5525 0         0 undef $lastsep;
5526 0         0 $expectation->is(q{/.*/})->at($text);
5527            
5528              
5529 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*)/)
  0 0       0  
5530             {
5531 0 0       0 $text = $lastsep . $text if defined $lastsep;
5532 0         0 $expectation->failed();
5533 0 0       0 Parse::RecDescent::_trace(q{<>},
5534             Parse::RecDescent::_tracefirst($text))
5535             if defined $::RD_TRACE;
5536              
5537 0         0 last;
5538             }
5539 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5540 0         0 substr($text,0,length($current_match),q{});
5541 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5542             . $current_match . q{])},
5543             Parse::RecDescent::_tracefirst($text))
5544             if defined $::RD_TRACE;
5545 0         0 push @item, $item{__PATTERN1__}=$current_match;
5546            
5547              
5548 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['#' /.*/]<<},
5549             Parse::RecDescent::_tracefirst($text),
5550             q{comment},
5551             $tracelevel)
5552             if defined $::RD_TRACE;
5553              
5554              
5555              
5556 0         0 $_matched = 1;
5557 0         0 last;
5558             }
5559              
5560              
5561 35 50 33     7724 unless ( $_matched || defined($score) )
5562             {
5563            
5564              
5565 35         73 $_[1] = $text; # NOT SURE THIS IS NEEDED
5566 35 50       92 Parse::RecDescent::_trace(q{<>},
5567             Parse::RecDescent::_tracefirst($_[1]),
5568             q{comment},
5569             $tracelevel)
5570             if defined $::RD_TRACE;
5571 35         271 return undef;
5572             }
5573 0 0 0     0 if (!defined($return) && defined($score))
5574             {
5575 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5576             q{comment},
5577             $tracelevel)
5578             if defined $::RD_TRACE;
5579 0         0 $return = $score_return;
5580             }
5581 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
5582 0 0       0 $return = $item[$#item] unless defined $return;
5583 0 0       0 if (defined $::RD_TRACE)
5584             {
5585 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5586             $return . q{])}, "",
5587             q{comment},
5588             $tracelevel);
5589 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5590             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5591             Parse::RecDescent::_tracefirst($text),
5592             , q{comment},
5593             $tracelevel)
5594             }
5595 0         0 $_[1] = $text;
5596 0         0 return $return;
5597             }
5598              
5599             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5600             sub Parse::RecDescent::Text::FormBuilder::Parser::block_content
5601             {
5602 0     0   0 my $thisparser = $_[0];
5603 2     2   17 use vars q{$tracelevel};
  2         4  
  2         2342  
5604 0   0     0 local $tracelevel = ($tracelevel||0)+1;
5605 0         0 $ERRORS = 0;
5606 0         0 my $thisrule = $thisparser->{"rules"}{"block_content"};
5607              
5608 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [block_content]},
5609             Parse::RecDescent::_tracefirst($_[1]),
5610             q{block_content},
5611             $tracelevel)
5612             if defined $::RD_TRACE;
5613              
5614            
5615 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
5616              
5617 0         0 my $score;
5618             my $score_return;
5619 0         0 my $_tok;
5620 0         0 my $return = undef;
5621 0         0 my $_matched=0;
5622 0         0 my $commit=0;
5623 0         0 my @item = ();
5624 0         0 my %item = ();
5625 0         0 my $repeating = $_[2];
5626 0         0 my $_noactions = $_[3];
5627 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
5628 0         0 my $_itempos = $_[5];
5629 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5630 0         0 my $text;
5631             my $lastsep;
5632 0         0 my $current_match;
5633 0         0 my $expectation = new Parse::RecDescent::Expectation(q{/[^\\\{\\\}]+?/, or inner_block});
5634 0         0 $expectation->at($_[1]);
5635            
5636 0         0 my $thisline;
5637 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5638              
5639            
5640              
5641 0   0     0 while (!$_matched && !$commit)
5642             {
5643            
5644 0 0       0 Parse::RecDescent::_trace(q{Trying production: [/[^\\\{\\\}]+?/]},
5645             Parse::RecDescent::_tracefirst($_[1]),
5646             q{block_content},
5647             $tracelevel)
5648             if defined $::RD_TRACE;
5649 0         0 my $thisprod = $thisrule->{"prods"}[0];
5650 0         0 $text = $_[1];
5651 0         0 my $_savetext;
5652 0         0 @item = (q{block_content});
5653 0         0 %item = (__RULE__ => q{block_content});
5654 0         0 my $repcount = 0;
5655              
5656              
5657 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/[^\\\{\\\}]+?/]}, Parse::RecDescent::_tracefirst($text),
5658             q{block_content},
5659             $tracelevel)
5660             if defined $::RD_TRACE;
5661 0         0 undef $lastsep;
5662 0         0 $expectation->is(q{})->at($text);
5663            
5664              
5665 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[^\{\}]+?)/)
  0 0       0  
5666             {
5667 0 0       0 $text = $lastsep . $text if defined $lastsep;
5668 0         0 $expectation->failed();
5669 0 0       0 Parse::RecDescent::_trace(q{<>},
5670             Parse::RecDescent::_tracefirst($text))
5671             if defined $::RD_TRACE;
5672              
5673 0         0 last;
5674             }
5675 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5676 0         0 substr($text,0,length($current_match),q{});
5677 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5678             . $current_match . q{])},
5679             Parse::RecDescent::_tracefirst($text))
5680             if defined $::RD_TRACE;
5681 0         0 push @item, $item{__PATTERN1__}=$current_match;
5682            
5683              
5684 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/[^\\\{\\\}]+?/]<<},
5685             Parse::RecDescent::_tracefirst($text),
5686             q{block_content},
5687             $tracelevel)
5688             if defined $::RD_TRACE;
5689              
5690              
5691              
5692 0         0 $_matched = 1;
5693 0         0 last;
5694             }
5695              
5696              
5697 0   0     0 while (!$_matched && !$commit)
5698             {
5699            
5700 0 0       0 Parse::RecDescent::_trace(q{Trying production: [inner_block]},
5701             Parse::RecDescent::_tracefirst($_[1]),
5702             q{block_content},
5703             $tracelevel)
5704             if defined $::RD_TRACE;
5705 0         0 my $thisprod = $thisrule->{"prods"}[1];
5706 0         0 $text = $_[1];
5707 0         0 my $_savetext;
5708 0         0 @item = (q{block_content});
5709 0         0 %item = (__RULE__ => q{block_content});
5710 0         0 my $repcount = 0;
5711              
5712              
5713 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [inner_block]},
5714             Parse::RecDescent::_tracefirst($text),
5715             q{block_content},
5716             $tracelevel)
5717             if defined $::RD_TRACE;
5718 2     2   16 if (1) { no strict qw{refs};
  2         5  
  2         1498  
  0         0  
5719 0         0 $expectation->is(q{})->at($text);
5720 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::inner_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
5721             {
5722            
5723 0 0       0 Parse::RecDescent::_trace(q{<>},
5724             Parse::RecDescent::_tracefirst($text),
5725             q{block_content},
5726             $tracelevel)
5727             if defined $::RD_TRACE;
5728 0         0 $expectation->failed();
5729 0         0 last;
5730             }
5731 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [inner_block]<< (return value: [}
5732             . $_tok . q{]},
5733              
5734             Parse::RecDescent::_tracefirst($text),
5735             q{block_content},
5736             $tracelevel)
5737             if defined $::RD_TRACE;
5738 0         0 $item{q{inner_block}} = $_tok;
5739 0         0 push @item, $_tok;
5740            
5741             }
5742              
5743 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [inner_block]<<},
5744             Parse::RecDescent::_tracefirst($text),
5745             q{block_content},
5746             $tracelevel)
5747             if defined $::RD_TRACE;
5748              
5749              
5750              
5751 0         0 $_matched = 1;
5752 0         0 last;
5753             }
5754              
5755              
5756 0 0 0     0 unless ( $_matched || defined($score) )
5757             {
5758            
5759              
5760 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
5761 0 0       0 Parse::RecDescent::_trace(q{<>},
5762             Parse::RecDescent::_tracefirst($_[1]),
5763             q{block_content},
5764             $tracelevel)
5765             if defined $::RD_TRACE;
5766 0         0 return undef;
5767             }
5768 0 0 0     0 if (!defined($return) && defined($score))
5769             {
5770 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5771             q{block_content},
5772             $tracelevel)
5773             if defined $::RD_TRACE;
5774 0         0 $return = $score_return;
5775             }
5776 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
5777 0 0       0 $return = $item[$#item] unless defined $return;
5778 0 0       0 if (defined $::RD_TRACE)
5779             {
5780 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5781             $return . q{])}, "",
5782             q{block_content},
5783             $tracelevel);
5784 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5785             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5786             Parse::RecDescent::_tracefirst($text),
5787             , q{block_content},
5788             $tracelevel)
5789             }
5790 0         0 $_[1] = $text;
5791 0         0 return $return;
5792             }
5793              
5794             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5795             sub Parse::RecDescent::Text::FormBuilder::Parser::heading
5796             {
5797 21     21   43 my $thisparser = $_[0];
5798 2     2   12 use vars q{$tracelevel};
  2         5  
  2         3406  
5799 21   50     79 local $tracelevel = ($tracelevel||0)+1;
5800 21         37 $ERRORS = 0;
5801 21         64 my $thisrule = $thisparser->{"rules"}{"heading"};
5802              
5803 21 50       51 Parse::RecDescent::_trace(q{Trying rule: [heading]},
5804             Parse::RecDescent::_tracefirst($_[1]),
5805             q{heading},
5806             $tracelevel)
5807             if defined $::RD_TRACE;
5808              
5809            
5810 21         25 my $err_at = @{$thisparser->{errors}};
  21         51  
5811              
5812 21         30 my $score;
5813             my $score_return;
5814 0         0 my $_tok;
5815 21         36 my $return = undef;
5816 21         33 my $_matched=0;
5817 21         44 my $commit=0;
5818 21         40 my @item = ();
5819 21         38 my %item = ();
5820 21         33 my $repeating = $_[2];
5821 21         55 my $_noactions = $_[3];
5822 21 50       53 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         28  
  21         48  
5823 21         32 my $_itempos = $_[5];
5824 21 50       65 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
5825 21         47 my $text;
5826             my $lastsep;
5827 0         0 my $current_match;
5828 21         87 my $expectation = new Parse::RecDescent::Expectation(q{'!head'});
5829 21         171 $expectation->at($_[1]);
5830            
5831 21         96 my $thisline;
5832 21         91 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
5833              
5834            
5835              
5836 21   33     210 while (!$_matched && !$commit)
5837             {
5838            
5839 21 50       57 Parse::RecDescent::_trace(q{Trying production: ['!head' /.*/]},
5840             Parse::RecDescent::_tracefirst($_[1]),
5841             q{heading},
5842             $tracelevel)
5843             if defined $::RD_TRACE;
5844 21         71 my $thisprod = $thisrule->{"prods"}[0];
5845 21         33 $text = $_[1];
5846 21         28 my $_savetext;
5847 21         52 @item = (q{heading});
5848 21         53 %item = (__RULE__ => q{heading});
5849 21         35 my $repcount = 0;
5850              
5851              
5852 21 50       52 Parse::RecDescent::_trace(q{Trying terminal: ['!head']},
5853             Parse::RecDescent::_tracefirst($text),
5854             q{heading},
5855             $tracelevel)
5856             if defined $::RD_TRACE;
5857 21         34 undef $lastsep;
5858 21         82 $expectation->is(q{})->at($text);
5859            
5860              
5861 21 50 33     259 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!head/)
  21 50       206  
5862             {
5863 21 50       71 $text = $lastsep . $text if defined $lastsep;
5864            
5865 21         79 $expectation->failed();
5866 21 50       98 Parse::RecDescent::_trace(qq{<>},
5867             Parse::RecDescent::_tracefirst($text))
5868             if defined $::RD_TRACE;
5869 21         62 last;
5870             }
5871 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5872 0         0 substr($text,0,length($current_match),q{});
5873 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5874             . $current_match . q{])},
5875             Parse::RecDescent::_tracefirst($text))
5876             if defined $::RD_TRACE;
5877 0         0 push @item, $item{__STRING1__}=$current_match;
5878            
5879              
5880 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
5881             q{heading},
5882             $tracelevel)
5883             if defined $::RD_TRACE;
5884 0         0 undef $lastsep;
5885 0         0 $expectation->is(q{/.*/})->at($text);
5886            
5887              
5888 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*)/)
  0 0       0  
5889             {
5890 0 0       0 $text = $lastsep . $text if defined $lastsep;
5891 0         0 $expectation->failed();
5892 0 0       0 Parse::RecDescent::_trace(q{<>},
5893             Parse::RecDescent::_tracefirst($text))
5894             if defined $::RD_TRACE;
5895              
5896 0         0 last;
5897             }
5898 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
5899 0         0 substr($text,0,length($current_match),q{});
5900 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
5901             . $current_match . q{])},
5902             Parse::RecDescent::_tracefirst($text))
5903             if defined $::RD_TRACE;
5904 0         0 push @item, $item{__PATTERN1__}=$current_match;
5905            
5906              
5907 0 0       0 Parse::RecDescent::_trace(q{Trying action},
5908             Parse::RecDescent::_tracefirst($text),
5909             q{heading},
5910             $tracelevel)
5911             if defined $::RD_TRACE;
5912            
5913              
5914 0 0       0 $_tok = ($_noactions) ? 0 : do { push @lines, [ 'head', $item[2] ] };
  0         0  
5915 0 0       0 unless (defined $_tok)
5916             {
5917 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
5918             if defined $::RD_TRACE;
5919 0         0 last;
5920             }
5921 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
5922             . $_tok . q{])},
5923             Parse::RecDescent::_tracefirst($text))
5924             if defined $::RD_TRACE;
5925 0         0 push @item, $_tok;
5926 0         0 $item{__ACTION1__}=$_tok;
5927            
5928              
5929 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!head' /.*/]<<},
5930             Parse::RecDescent::_tracefirst($text),
5931             q{heading},
5932             $tracelevel)
5933             if defined $::RD_TRACE;
5934              
5935              
5936              
5937 0         0 $_matched = 1;
5938 0         0 last;
5939             }
5940              
5941              
5942 21 50 33     113 unless ( $_matched || defined($score) )
5943             {
5944            
5945              
5946 21         40 $_[1] = $text; # NOT SURE THIS IS NEEDED
5947 21 50       50 Parse::RecDescent::_trace(q{<>},
5948             Parse::RecDescent::_tracefirst($_[1]),
5949             q{heading},
5950             $tracelevel)
5951             if defined $::RD_TRACE;
5952 21         151 return undef;
5953             }
5954 0 0 0     0 if (!defined($return) && defined($score))
5955             {
5956 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
5957             q{heading},
5958             $tracelevel)
5959             if defined $::RD_TRACE;
5960 0         0 $return = $score_return;
5961             }
5962 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
5963 0 0       0 $return = $item[$#item] unless defined $return;
5964 0 0       0 if (defined $::RD_TRACE)
5965             {
5966 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
5967             $return . q{])}, "",
5968             q{heading},
5969             $tracelevel);
5970 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
5971             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
5972             Parse::RecDescent::_tracefirst($text),
5973             , q{heading},
5974             $tracelevel)
5975             }
5976 0         0 $_[1] = $text;
5977 0         0 return $return;
5978             }
5979              
5980             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
5981             sub Parse::RecDescent::Text::FormBuilder::Parser::quoted_string
5982             {
5983 2     2   6 my $thisparser = $_[0];
5984 2     2   16 use vars q{$tracelevel};
  2         6  
  2         6383  
5985 2   50     184 local $tracelevel = ($tracelevel||0)+1;
5986 2         126 $ERRORS = 0;
5987 2         8 my $thisrule = $thisparser->{"rules"}{"quoted_string"};
5988              
5989 2 50       8 Parse::RecDescent::_trace(q{Trying rule: [quoted_string]},
5990             Parse::RecDescent::_tracefirst($_[1]),
5991             q{quoted_string},
5992             $tracelevel)
5993             if defined $::RD_TRACE;
5994              
5995            
5996 2         4 my $err_at = @{$thisparser->{errors}};
  2         7  
5997              
5998 2         3 my $score;
5999             my $score_return;
6000 0         0 my $_tok;
6001 2         5 my $return = undef;
6002 2         2 my $_matched=0;
6003 2         4 my $commit=0;
6004 2         4 my @item = ();
6005 2         4 my %item = ();
6006 2         4 my $repeating = $_[2];
6007 2         4 my $_noactions = $_[3];
6008 2 50       10 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  2         4  
  2         5  
6009 2         19 my $_itempos = $_[5];
6010 2 50       10 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6011 2         5 my $text;
6012             my $lastsep;
6013 0         0 my $current_match;
6014 2         11 my $expectation = new Parse::RecDescent::Expectation(q{'''});
6015 2         23 $expectation->at($_[1]);
6016            
6017 2         10 my $thisline;
6018 2         13 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6019              
6020            
6021              
6022 2   33     28 while (!$_matched && !$commit)
6023             {
6024 2 50       7 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
6025 2 50       7 Parse::RecDescent::_trace(q{Trying production: [''' /(\\\\'|[^'])*/ ''']},
6026             Parse::RecDescent::_tracefirst($_[1]),
6027             q{quoted_string},
6028             $tracelevel)
6029             if defined $::RD_TRACE;
6030 2         16 my $thisprod = $thisrule->{"prods"}[0];
6031 2         8 $text = $_[1];
6032 2         7 my $_savetext;
6033 2         12 @item = (q{quoted_string});
6034 2         5 %item = (__RULE__ => q{quoted_string});
6035 2         4 my $repcount = 0;
6036              
6037              
6038 2 50       6 Parse::RecDescent::_trace(q{Trying terminal: [''']},
6039             Parse::RecDescent::_tracefirst($text),
6040             q{quoted_string},
6041             $tracelevel)
6042             if defined $::RD_TRACE;
6043 2         2 undef $lastsep;
6044 2         8 $expectation->is(q{})->at($text);
6045            
6046              
6047 2 50 33     42 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and
  2 50 33     18  
  2   33     3  
  2         25  
6048             substr($text,0,length($_tok)) eq $_tok and
6049 2         6 do { substr($text,0,length($_tok)) = ""; 1; }
  2         8  
6050             )
6051             {
6052 0 0       0 $text = $lastsep . $text if defined $lastsep;
6053            
6054 0         0 $expectation->failed();
6055 0 0       0 Parse::RecDescent::_trace(q{<>},
6056             Parse::RecDescent::_tracefirst($text))
6057             if defined $::RD_TRACE;
6058 0         0 last;
6059             }
6060 2 50       8 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6061             . $_tok . q{])},
6062             Parse::RecDescent::_tracefirst($text))
6063             if defined $::RD_TRACE;
6064 2         5 push @item, $item{__STRING1__}=$_tok;
6065            
6066              
6067            
6068              
6069 2 50       6 Parse::RecDescent::_trace(q{Trying directive: []},
6070             Parse::RecDescent::_tracefirst($text),
6071             q{quoted_string},
6072             $tracelevel)
6073             if defined $::RD_TRACE;
6074 2         4 $_tok = do { my $oldskip = $skip; $skip=''; $oldskip };
  2         3  
  2         6  
  2         5  
6075 2 50       6 if (defined($_tok))
6076             {
6077 2 50       7 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
6078             . $_tok . q{])},
6079             Parse::RecDescent::_tracefirst($text))
6080             if defined $::RD_TRACE;
6081             }
6082             else
6083             {
6084 0 0       0 Parse::RecDescent::_trace(q{<>},
6085             Parse::RecDescent::_tracefirst($text))
6086             if defined $::RD_TRACE;
6087             }
6088            
6089 2 50       5 last unless defined $_tok;
6090 2         7 push @item, $item{__DIRECTIVE1__}=$_tok;
6091            
6092              
6093 2 50       7 Parse::RecDescent::_trace(q{Trying terminal: [/(\\\\'|[^'])*/]}, Parse::RecDescent::_tracefirst($text),
6094             q{quoted_string},
6095             $tracelevel)
6096             if defined $::RD_TRACE;
6097 2         4 undef $lastsep;
6098 2         8 $expectation->is(q{/(\\\\'|[^'])*/})->at($text);
6099            
6100              
6101 2 50 33     31 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:(\\'|[^'])*)/)
  2 50       43  
6102             {
6103 0 0       0 $text = $lastsep . $text if defined $lastsep;
6104 0         0 $expectation->failed();
6105 0 0       0 Parse::RecDescent::_trace(q{<>},
6106             Parse::RecDescent::_tracefirst($text))
6107             if defined $::RD_TRACE;
6108              
6109 0         0 last;
6110             }
6111 2         14 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6112 2         8 substr($text,0,length($current_match),q{});
6113 2 50       8 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6114             . $current_match . q{])},
6115             Parse::RecDescent::_tracefirst($text))
6116             if defined $::RD_TRACE;
6117 2         7 push @item, $item{__PATTERN1__}=$current_match;
6118            
6119              
6120 2 50       12 Parse::RecDescent::_trace(q{Trying terminal: [''']},
6121             Parse::RecDescent::_tracefirst($text),
6122             q{quoted_string},
6123             $tracelevel)
6124             if defined $::RD_TRACE;
6125 2         4 undef $lastsep;
6126 2         9 $expectation->is(q{'''})->at($text);
6127            
6128              
6129 2 50 33     138 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and
  2 50 33     19  
  2   33     3  
  2         18  
6130             substr($text,0,length($_tok)) eq $_tok and
6131 2         6 do { substr($text,0,length($_tok)) = ""; 1; }
  2         6  
6132             )
6133             {
6134 0 0       0 $text = $lastsep . $text if defined $lastsep;
6135            
6136 0         0 $expectation->failed();
6137 0 0       0 Parse::RecDescent::_trace(q{<>},
6138             Parse::RecDescent::_tracefirst($text))
6139             if defined $::RD_TRACE;
6140 0         0 last;
6141             }
6142 2 50       9 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6143             . $_tok . q{])},
6144             Parse::RecDescent::_tracefirst($text))
6145             if defined $::RD_TRACE;
6146 2         7 push @item, $item{__STRING2__}=$_tok;
6147            
6148              
6149 2 50       7 Parse::RecDescent::_trace(q{Trying action},
6150             Parse::RecDescent::_tracefirst($text),
6151             q{quoted_string},
6152             $tracelevel)
6153             if defined $::RD_TRACE;
6154            
6155              
6156 2 50       5 $_tok = ($_noactions) ? 0 : do { $item[3] =~ s/\\'/'/g; $item[3] };
  2         9  
  2         4  
6157 2 50       6 unless (defined $_tok)
6158             {
6159 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
6160             if defined $::RD_TRACE;
6161 0         0 last;
6162             }
6163 2 50       6 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6164             . $_tok . q{])},
6165             Parse::RecDescent::_tracefirst($text))
6166             if defined $::RD_TRACE;
6167 2         5 push @item, $_tok;
6168 2         7 $item{__ACTION1__}=$_tok;
6169            
6170              
6171 2 50       6 Parse::RecDescent::_trace(q{>>Matched production: [''' /(\\\\'|[^'])*/ ''']<<},
6172             Parse::RecDescent::_tracefirst($text),
6173             q{quoted_string},
6174             $tracelevel)
6175             if defined $::RD_TRACE;
6176              
6177              
6178              
6179 2         3 $_matched = 1;
6180 2         8 last;
6181             }
6182              
6183              
6184 2 50 33     10 unless ( $_matched || defined($score) )
6185             {
6186            
6187              
6188 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
6189 0 0       0 Parse::RecDescent::_trace(q{<>},
6190             Parse::RecDescent::_tracefirst($_[1]),
6191             q{quoted_string},
6192             $tracelevel)
6193             if defined $::RD_TRACE;
6194 0         0 return undef;
6195             }
6196 2 50 33     97 if (!defined($return) && defined($score))
6197             {
6198 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6199             q{quoted_string},
6200             $tracelevel)
6201             if defined $::RD_TRACE;
6202 0         0 $return = $score_return;
6203             }
6204 2         5 splice @{$thisparser->{errors}}, $err_at;
  2         8  
6205 2 50       9 $return = $item[$#item] unless defined $return;
6206 2 50       7 if (defined $::RD_TRACE)
6207             {
6208 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6209             $return . q{])}, "",
6210             q{quoted_string},
6211             $tracelevel);
6212 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6213             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6214             Parse::RecDescent::_tracefirst($text),
6215             , q{quoted_string},
6216             $tracelevel)
6217             }
6218 2         12 $_[1] = $text;
6219 2         21 return $return;
6220             }
6221              
6222             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6223             sub Parse::RecDescent::Text::FormBuilder::Parser::optional_pattern
6224             {
6225 0     0   0 my $thisparser = $_[0];
6226 2     2   20 use vars q{$tracelevel};
  2         6  
  2         1140  
6227 0   0     0 local $tracelevel = ($tracelevel||0)+1;
6228 0         0 $ERRORS = 0;
6229 0         0 my $thisrule = $thisparser->{"rules"}{"optional_pattern"};
6230              
6231 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [optional_pattern]},
6232             Parse::RecDescent::_tracefirst($_[1]),
6233             q{optional_pattern},
6234             $tracelevel)
6235             if defined $::RD_TRACE;
6236              
6237            
6238 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
6239              
6240 0         0 my $score;
6241             my $score_return;
6242 0         0 my $_tok;
6243 0         0 my $return = undef;
6244 0         0 my $_matched=0;
6245 0         0 my $commit=0;
6246 0         0 my @item = ();
6247 0         0 my %item = ();
6248 0         0 my $repeating = $_[2];
6249 0         0 my $_noactions = $_[3];
6250 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
6251 0         0 my $_itempos = $_[5];
6252 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6253 0         0 my $text;
6254             my $lastsep;
6255 0         0 my $current_match;
6256 0         0 my $expectation = new Parse::RecDescent::Expectation(q{var_name});
6257 0         0 $expectation->at($_[1]);
6258            
6259 0         0 my $thisline;
6260 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6261              
6262            
6263              
6264 0   0     0 while (!$_matched && !$commit)
6265             {
6266            
6267 0 0       0 Parse::RecDescent::_trace(q{Trying production: [var_name '?']},
6268             Parse::RecDescent::_tracefirst($_[1]),
6269             q{optional_pattern},
6270             $tracelevel)
6271             if defined $::RD_TRACE;
6272 0         0 my $thisprod = $thisrule->{"prods"}[0];
6273 0         0 $text = $_[1];
6274 0         0 my $_savetext;
6275 0         0 @item = (q{optional_pattern});
6276 0         0 %item = (__RULE__ => q{optional_pattern});
6277 0         0 my $repcount = 0;
6278              
6279              
6280 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [var_name]},
6281             Parse::RecDescent::_tracefirst($text),
6282             q{optional_pattern},
6283             $tracelevel)
6284             if defined $::RD_TRACE;
6285 2     2   14 if (1) { no strict qw{refs};
  2         13  
  2         3346  
  0         0  
6286 0         0 $expectation->is(q{})->at($text);
6287 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::var_name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
6288             {
6289            
6290 0 0       0 Parse::RecDescent::_trace(q{<>},
6291             Parse::RecDescent::_tracefirst($text),
6292             q{optional_pattern},
6293             $tracelevel)
6294             if defined $::RD_TRACE;
6295 0         0 $expectation->failed();
6296 0         0 last;
6297             }
6298 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [var_name]<< (return value: [}
6299             . $_tok . q{]},
6300              
6301             Parse::RecDescent::_tracefirst($text),
6302             q{optional_pattern},
6303             $tracelevel)
6304             if defined $::RD_TRACE;
6305 0         0 $item{q{var_name}} = $_tok;
6306 0         0 push @item, $_tok;
6307            
6308             }
6309              
6310 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['?']},
6311             Parse::RecDescent::_tracefirst($text),
6312             q{optional_pattern},
6313             $tracelevel)
6314             if defined $::RD_TRACE;
6315 0         0 undef $lastsep;
6316 0         0 $expectation->is(q{'?'})->at($text);
6317            
6318              
6319 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\?/)
  0 0       0  
6320             {
6321 0 0       0 $text = $lastsep . $text if defined $lastsep;
6322            
6323 0         0 $expectation->failed();
6324 0 0       0 Parse::RecDescent::_trace(qq{<>},
6325             Parse::RecDescent::_tracefirst($text))
6326             if defined $::RD_TRACE;
6327 0         0 last;
6328             }
6329 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6330 0         0 substr($text,0,length($current_match),q{});
6331 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6332             . $current_match . q{])},
6333             Parse::RecDescent::_tracefirst($text))
6334             if defined $::RD_TRACE;
6335 0         0 push @item, $item{__STRING1__}=$current_match;
6336            
6337              
6338 0 0       0 Parse::RecDescent::_trace(q{Trying action},
6339             Parse::RecDescent::_tracefirst($text),
6340             q{optional_pattern},
6341             $tracelevel)
6342             if defined $::RD_TRACE;
6343            
6344              
6345 0 0       0 $_tok = ($_noactions) ? 0 : do { $required = 0; $item[1] };
  0         0  
  0         0  
6346 0 0       0 unless (defined $_tok)
6347             {
6348 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
6349             if defined $::RD_TRACE;
6350 0         0 last;
6351             }
6352 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6353             . $_tok . q{])},
6354             Parse::RecDescent::_tracefirst($text))
6355             if defined $::RD_TRACE;
6356 0         0 push @item, $_tok;
6357 0         0 $item{__ACTION1__}=$_tok;
6358            
6359              
6360 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [var_name '?']<<},
6361             Parse::RecDescent::_tracefirst($text),
6362             q{optional_pattern},
6363             $tracelevel)
6364             if defined $::RD_TRACE;
6365              
6366              
6367              
6368 0         0 $_matched = 1;
6369 0         0 last;
6370             }
6371              
6372              
6373 0 0 0     0 unless ( $_matched || defined($score) )
6374             {
6375            
6376              
6377 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
6378 0 0       0 Parse::RecDescent::_trace(q{<>},
6379             Parse::RecDescent::_tracefirst($_[1]),
6380             q{optional_pattern},
6381             $tracelevel)
6382             if defined $::RD_TRACE;
6383 0         0 return undef;
6384             }
6385 0 0 0     0 if (!defined($return) && defined($score))
6386             {
6387 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6388             q{optional_pattern},
6389             $tracelevel)
6390             if defined $::RD_TRACE;
6391 0         0 $return = $score_return;
6392             }
6393 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
6394 0 0       0 $return = $item[$#item] unless defined $return;
6395 0 0       0 if (defined $::RD_TRACE)
6396             {
6397 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6398             $return . q{])}, "",
6399             q{optional_pattern},
6400             $tracelevel);
6401 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6402             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6403             Parse::RecDescent::_tracefirst($text),
6404             , q{optional_pattern},
6405             $tracelevel)
6406             }
6407 0         0 $_[1] = $text;
6408 0         0 return $return;
6409             }
6410              
6411             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6412             sub Parse::RecDescent::Text::FormBuilder::Parser::inner_block
6413             {
6414 0     0   0 my $thisparser = $_[0];
6415 2     2   66 use vars q{$tracelevel};
  2         5  
  2         4230  
6416 0   0     0 local $tracelevel = ($tracelevel||0)+1;
6417 0         0 $ERRORS = 0;
6418 0         0 my $thisrule = $thisparser->{"rules"}{"inner_block"};
6419              
6420 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [inner_block]},
6421             Parse::RecDescent::_tracefirst($_[1]),
6422             q{inner_block},
6423             $tracelevel)
6424             if defined $::RD_TRACE;
6425              
6426            
6427 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
6428              
6429 0         0 my $score;
6430             my $score_return;
6431 0         0 my $_tok;
6432 0         0 my $return = undef;
6433 0         0 my $_matched=0;
6434 0         0 my $commit=0;
6435 0         0 my @item = ();
6436 0         0 my %item = ();
6437 0         0 my $repeating = $_[2];
6438 0         0 my $_noactions = $_[3];
6439 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
6440 0         0 my $_itempos = $_[5];
6441 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6442 0         0 my $text;
6443             my $lastsep;
6444 0         0 my $current_match;
6445 0         0 my $expectation = new Parse::RecDescent::Expectation(q{'\{'});
6446 0         0 $expectation->at($_[1]);
6447            
6448 0         0 my $thisline;
6449 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6450              
6451            
6452              
6453 0   0     0 while (!$_matched && !$commit)
6454             {
6455 0 0       0 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
6456 0 0       0 Parse::RecDescent::_trace(q{Trying production: ['\{' block_content '\}']},
6457             Parse::RecDescent::_tracefirst($_[1]),
6458             q{inner_block},
6459             $tracelevel)
6460             if defined $::RD_TRACE;
6461 0         0 my $thisprod = $thisrule->{"prods"}[0];
6462 0         0 $text = $_[1];
6463 0         0 my $_savetext;
6464 0         0 @item = (q{inner_block});
6465 0         0 %item = (__RULE__ => q{inner_block});
6466 0         0 my $repcount = 0;
6467              
6468              
6469 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\{']},
6470             Parse::RecDescent::_tracefirst($text),
6471             q{inner_block},
6472             $tracelevel)
6473             if defined $::RD_TRACE;
6474 0         0 undef $lastsep;
6475 0         0 $expectation->is(q{})->at($text);
6476            
6477              
6478 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\{/)
  0 0       0  
6479             {
6480 0 0       0 $text = $lastsep . $text if defined $lastsep;
6481            
6482 0         0 $expectation->failed();
6483 0 0       0 Parse::RecDescent::_trace(qq{<>},
6484             Parse::RecDescent::_tracefirst($text))
6485             if defined $::RD_TRACE;
6486 0         0 last;
6487             }
6488 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6489 0         0 substr($text,0,length($current_match),q{});
6490 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6491             . $current_match . q{])},
6492             Parse::RecDescent::_tracefirst($text))
6493             if defined $::RD_TRACE;
6494 0         0 push @item, $item{__STRING1__}=$current_match;
6495            
6496              
6497            
6498              
6499 0 0       0 Parse::RecDescent::_trace(q{Trying directive: []},
6500             Parse::RecDescent::_tracefirst($text),
6501             q{inner_block},
6502             $tracelevel)
6503             if defined $::RD_TRACE;
6504 0         0 $_tok = do { my $oldskip = $skip; $skip=''; $oldskip };
  0         0  
  0         0  
  0         0  
6505 0 0       0 if (defined($_tok))
6506             {
6507 0 0       0 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
6508             . $_tok . q{])},
6509             Parse::RecDescent::_tracefirst($text))
6510             if defined $::RD_TRACE;
6511             }
6512             else
6513             {
6514 0 0       0 Parse::RecDescent::_trace(q{<>},
6515             Parse::RecDescent::_tracefirst($text))
6516             if defined $::RD_TRACE;
6517             }
6518            
6519 0 0       0 last unless defined $_tok;
6520 0         0 push @item, $item{__DIRECTIVE1__}=$_tok;
6521            
6522              
6523 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [block_content]},
6524             Parse::RecDescent::_tracefirst($text),
6525             q{inner_block},
6526             $tracelevel)
6527             if defined $::RD_TRACE;
6528 0         0 $expectation->is(q{block_content})->at($text);
6529            
6530 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::block_content, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
6531             {
6532 0 0       0 Parse::RecDescent::_trace(q{<>},
6533             Parse::RecDescent::_tracefirst($text),
6534             q{inner_block},
6535             $tracelevel)
6536             if defined $::RD_TRACE;
6537 0         0 last;
6538             }
6539 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [block_content]<< (}
6540             . @$_tok . q{ times)},
6541              
6542             Parse::RecDescent::_tracefirst($text),
6543             q{inner_block},
6544             $tracelevel)
6545             if defined $::RD_TRACE;
6546 0         0 $item{q{block_content(s)}} = $_tok;
6547 0         0 push @item, $_tok;
6548            
6549              
6550              
6551 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\}']},
6552             Parse::RecDescent::_tracefirst($text),
6553             q{inner_block},
6554             $tracelevel)
6555             if defined $::RD_TRACE;
6556 0         0 undef $lastsep;
6557 0         0 $expectation->is(q{'\}'})->at($text);
6558            
6559              
6560 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\}/)
  0 0       0  
6561             {
6562 0 0       0 $text = $lastsep . $text if defined $lastsep;
6563            
6564 0         0 $expectation->failed();
6565 0 0       0 Parse::RecDescent::_trace(qq{<>},
6566             Parse::RecDescent::_tracefirst($text))
6567             if defined $::RD_TRACE;
6568 0         0 last;
6569             }
6570 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6571 0         0 substr($text,0,length($current_match),q{});
6572 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6573             . $current_match . q{])},
6574             Parse::RecDescent::_tracefirst($text))
6575             if defined $::RD_TRACE;
6576 0         0 push @item, $item{__STRING2__}=$current_match;
6577            
6578              
6579 0 0       0 Parse::RecDescent::_trace(q{Trying action},
6580             Parse::RecDescent::_tracefirst($text),
6581             q{inner_block},
6582             $tracelevel)
6583             if defined $::RD_TRACE;
6584            
6585              
6586 0 0       0 $_tok = ($_noactions) ? 0 : do { '{' . join('', @{ $item[3] }) . '}' };
  0         0  
  0         0  
6587 0 0       0 unless (defined $_tok)
6588             {
6589 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
6590             if defined $::RD_TRACE;
6591 0         0 last;
6592             }
6593 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6594             . $_tok . q{])},
6595             Parse::RecDescent::_tracefirst($text))
6596             if defined $::RD_TRACE;
6597 0         0 push @item, $_tok;
6598 0         0 $item{__ACTION1__}=$_tok;
6599            
6600              
6601 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['\{' block_content '\}']<<},
6602             Parse::RecDescent::_tracefirst($text),
6603             q{inner_block},
6604             $tracelevel)
6605             if defined $::RD_TRACE;
6606              
6607              
6608              
6609 0         0 $_matched = 1;
6610 0         0 last;
6611             }
6612              
6613              
6614 0 0 0     0 unless ( $_matched || defined($score) )
6615             {
6616            
6617              
6618 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
6619 0 0       0 Parse::RecDescent::_trace(q{<>},
6620             Parse::RecDescent::_tracefirst($_[1]),
6621             q{inner_block},
6622             $tracelevel)
6623             if defined $::RD_TRACE;
6624 0         0 return undef;
6625             }
6626 0 0 0     0 if (!defined($return) && defined($score))
6627             {
6628 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6629             q{inner_block},
6630             $tracelevel)
6631             if defined $::RD_TRACE;
6632 0         0 $return = $score_return;
6633             }
6634 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
6635 0 0       0 $return = $item[$#item] unless defined $return;
6636 0 0       0 if (defined $::RD_TRACE)
6637             {
6638 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6639             $return . q{])}, "",
6640             q{inner_block},
6641             $tracelevel);
6642 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6643             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6644             Parse::RecDescent::_tracefirst($text),
6645             , q{inner_block},
6646             $tracelevel)
6647             }
6648 0         0 $_[1] = $text;
6649 0         0 return $return;
6650             }
6651              
6652             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6653             sub Parse::RecDescent::Text::FormBuilder::Parser::simple_multiword
6654             {
6655 4     4   10 my $thisparser = $_[0];
6656 2     2   17 use vars q{$tracelevel};
  2         5  
  2         7062  
6657 4   50     15 local $tracelevel = ($tracelevel||0)+1;
6658 4         9 $ERRORS = 0;
6659 4         164 my $thisrule = $thisparser->{"rules"}{"simple_multiword"};
6660              
6661 4 50       10 Parse::RecDescent::_trace(q{Trying rule: [simple_multiword]},
6662             Parse::RecDescent::_tracefirst($_[1]),
6663             q{simple_multiword},
6664             $tracelevel)
6665             if defined $::RD_TRACE;
6666              
6667            
6668 4         7 my $err_at = @{$thisparser->{errors}};
  4         9  
6669              
6670 4         8 my $score;
6671             my $score_return;
6672 0         0 my $_tok;
6673 4         9 my $return = undef;
6674 4         4 my $_matched=0;
6675 4         7 my $commit=0;
6676 4         8 my @item = ();
6677 4         8 my %item = ();
6678 4         8 my $repeating = $_[2];
6679 4         8 my $_noactions = $_[3];
6680 4 50       19 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  4         5  
  4         10  
6681 4         10 my $_itempos = $_[5];
6682 4 50       83 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6683 4         11 my $text;
6684             my $lastsep;
6685 0         0 my $current_match;
6686 4         18 my $expectation = new Parse::RecDescent::Expectation(q{/\\w/});
6687 4         43 $expectation->at($_[1]);
6688            
6689 4         18 my $thisline;
6690 4         20 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6691              
6692            
6693              
6694 4   33     117 while (!$_matched && !$commit)
6695             {
6696 4 50       20 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
6697 4 50       10 Parse::RecDescent::_trace(q{Trying production: [/\\w/ /[\\w\\t ]*/]},
6698             Parse::RecDescent::_tracefirst($_[1]),
6699             q{simple_multiword},
6700             $tracelevel)
6701             if defined $::RD_TRACE;
6702 4         12 my $thisprod = $thisrule->{"prods"}[0];
6703 4         92 $text = $_[1];
6704 4         7 my $_savetext;
6705 4         13 @item = (q{simple_multiword});
6706 4         11 %item = (__RULE__ => q{simple_multiword});
6707 4         7 my $repcount = 0;
6708              
6709              
6710 4 50       12 Parse::RecDescent::_trace(q{Trying terminal: [/\\w/]}, Parse::RecDescent::_tracefirst($text),
6711             q{simple_multiword},
6712             $tracelevel)
6713             if defined $::RD_TRACE;
6714 4         7 undef $lastsep;
6715 4         14 $expectation->is(q{})->at($text);
6716            
6717              
6718 4 50 66     118 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\w)/)
  4 100       51  
6719             {
6720 2 50       11 $text = $lastsep . $text if defined $lastsep;
6721 2         10 $expectation->failed();
6722 2 50       13 Parse::RecDescent::_trace(q{<>},
6723             Parse::RecDescent::_tracefirst($text))
6724             if defined $::RD_TRACE;
6725              
6726 2         7 last;
6727             }
6728 2         13 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6729 2         6 substr($text,0,length($current_match),q{});
6730 2 50       7 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6731             . $current_match . q{])},
6732             Parse::RecDescent::_tracefirst($text))
6733             if defined $::RD_TRACE;
6734 2         9 push @item, $item{__PATTERN1__}=$current_match;
6735            
6736              
6737            
6738              
6739 2 50       6 Parse::RecDescent::_trace(q{Trying directive: []},
6740             Parse::RecDescent::_tracefirst($text),
6741             q{simple_multiword},
6742             $tracelevel)
6743             if defined $::RD_TRACE;
6744 2         3 $_tok = do { my $oldskip = $skip; $skip=''; $oldskip };
  2         5  
  2         5  
  2         16  
6745 2 50       6 if (defined($_tok))
6746             {
6747 2 50       5 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
6748             . $_tok . q{])},
6749             Parse::RecDescent::_tracefirst($text))
6750             if defined $::RD_TRACE;
6751             }
6752             else
6753             {
6754 0 0       0 Parse::RecDescent::_trace(q{<>},
6755             Parse::RecDescent::_tracefirst($text))
6756             if defined $::RD_TRACE;
6757             }
6758            
6759 2 50       6 last unless defined $_tok;
6760 2         6 push @item, $item{__DIRECTIVE1__}=$_tok;
6761            
6762              
6763 2 50       5 Parse::RecDescent::_trace(q{Trying terminal: [/[\\w\\t ]*/]}, Parse::RecDescent::_tracefirst($text),
6764             q{simple_multiword},
6765             $tracelevel)
6766             if defined $::RD_TRACE;
6767 2         611 undef $lastsep;
6768 2         10 $expectation->is(q{/[\\w\\t ]*/})->at($text);
6769            
6770              
6771 2 50 33     32 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[\w\t ]*)/)
  2 50       75  
6772             {
6773 0 0       0 $text = $lastsep . $text if defined $lastsep;
6774 0         0 $expectation->failed();
6775 0 0       0 Parse::RecDescent::_trace(q{<>},
6776             Parse::RecDescent::_tracefirst($text))
6777             if defined $::RD_TRACE;
6778              
6779 0         0 last;
6780             }
6781 2         13 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6782 2         14 substr($text,0,length($current_match),q{});
6783 2 50       8 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6784             . $current_match . q{])},
6785             Parse::RecDescent::_tracefirst($text))
6786             if defined $::RD_TRACE;
6787 2         6 push @item, $item{__PATTERN2__}=$current_match;
6788            
6789              
6790 2 50       6 Parse::RecDescent::_trace(q{Trying action},
6791             Parse::RecDescent::_tracefirst($text),
6792             q{simple_multiword},
6793             $tracelevel)
6794             if defined $::RD_TRACE;
6795            
6796              
6797 2 50       7 $_tok = ($_noactions) ? 0 : do { $item[1] . $item[3] };
  2         5  
6798 2 50       6 unless (defined $_tok)
6799             {
6800 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
6801             if defined $::RD_TRACE;
6802 0         0 last;
6803             }
6804 2 50       4 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
6805             . $_tok . q{])},
6806             Parse::RecDescent::_tracefirst($text))
6807             if defined $::RD_TRACE;
6808 2         5 push @item, $_tok;
6809 2         5 $item{__ACTION1__}=$_tok;
6810            
6811              
6812 2 50       5 Parse::RecDescent::_trace(q{>>Matched production: [/\\w/ /[\\w\\t ]*/]<<},
6813             Parse::RecDescent::_tracefirst($text),
6814             q{simple_multiword},
6815             $tracelevel)
6816             if defined $::RD_TRACE;
6817              
6818              
6819              
6820 2         3 $_matched = 1;
6821 2         7 last;
6822             }
6823              
6824              
6825 4 100 66     40 unless ( $_matched || defined($score) )
6826             {
6827            
6828              
6829 2         4 $_[1] = $text; # NOT SURE THIS IS NEEDED
6830 2 50       10 Parse::RecDescent::_trace(q{<>},
6831             Parse::RecDescent::_tracefirst($_[1]),
6832             q{simple_multiword},
6833             $tracelevel)
6834             if defined $::RD_TRACE;
6835 2         21 return undef;
6836             }
6837 2 50 33     23 if (!defined($return) && defined($score))
6838             {
6839 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
6840             q{simple_multiword},
6841             $tracelevel)
6842             if defined $::RD_TRACE;
6843 0         0 $return = $score_return;
6844             }
6845 2         3 splice @{$thisparser->{errors}}, $err_at;
  2         8  
6846 2 50       9 $return = $item[$#item] unless defined $return;
6847 2 50       7 if (defined $::RD_TRACE)
6848             {
6849 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
6850             $return . q{])}, "",
6851             q{simple_multiword},
6852             $tracelevel);
6853 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
6854             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
6855             Parse::RecDescent::_tracefirst($text),
6856             , q{simple_multiword},
6857             $tracelevel)
6858             }
6859 2         6 $_[1] = $text;
6860 2         21 return $return;
6861             }
6862              
6863             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
6864             sub Parse::RecDescent::Text::FormBuilder::Parser::group_type
6865             {
6866 10     10   27 my $thisparser = $_[0];
6867 2     2   30 use vars q{$tracelevel};
  2         4  
  2         1306  
6868 10   50     31 local $tracelevel = ($tracelevel||0)+1;
6869 10         17 $ERRORS = 0;
6870 10         35 my $thisrule = $thisparser->{"rules"}{"group_type"};
6871              
6872 10 50       31 Parse::RecDescent::_trace(q{Trying rule: [group_type]},
6873             Parse::RecDescent::_tracefirst($_[1]),
6874             q{group_type},
6875             $tracelevel)
6876             if defined $::RD_TRACE;
6877              
6878            
6879 10         17 my $err_at = @{$thisparser->{errors}};
  10         23  
6880              
6881 10         19 my $score;
6882             my $score_return;
6883 0         0 my $_tok;
6884 10         12 my $return = undef;
6885 10         17 my $_matched=0;
6886 10         22 my $commit=0;
6887 10         24 my @item = ();
6888 10         20 my %item = ();
6889 10         17 my $repeating = $_[2];
6890 10         15 my $_noactions = $_[3];
6891 10 50       27 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  10         10  
  10         23  
6892 10         20 my $_itempos = $_[5];
6893 10 50       33 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
6894 10         17 my $text;
6895             my $lastsep;
6896 0         0 my $current_match;
6897 10         45 my $expectation = new Parse::RecDescent::Expectation(q{':'});
6898 10         85 $expectation->at($_[1]);
6899            
6900 10         40 my $thisline;
6901 10         50 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
6902              
6903            
6904              
6905 10   33     105 while (!$_matched && !$commit)
6906             {
6907            
6908 10 50       29 Parse::RecDescent::_trace(q{Trying production: [':' var_name]},
6909             Parse::RecDescent::_tracefirst($_[1]),
6910             q{group_type},
6911             $tracelevel)
6912             if defined $::RD_TRACE;
6913 10         34 my $thisprod = $thisrule->{"prods"}[0];
6914 10         19 $text = $_[1];
6915 10         20 my $_savetext;
6916 10         27 @item = (q{group_type});
6917 10         28 %item = (__RULE__ => q{group_type});
6918 10         16 my $repcount = 0;
6919              
6920              
6921 10 50       24 Parse::RecDescent::_trace(q{Trying terminal: [':']},
6922             Parse::RecDescent::_tracefirst($text),
6923             q{group_type},
6924             $tracelevel)
6925             if defined $::RD_TRACE;
6926 10         19 undef $lastsep;
6927 10         34 $expectation->is(q{})->at($text);
6928            
6929              
6930 10 50 33     126 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\:/)
  10 50       107  
6931             {
6932 10 50       36 $text = $lastsep . $text if defined $lastsep;
6933            
6934 10         37 $expectation->failed();
6935 10 50       49 Parse::RecDescent::_trace(qq{<>},
6936             Parse::RecDescent::_tracefirst($text))
6937             if defined $::RD_TRACE;
6938 10         24 last;
6939             }
6940 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
6941 0         0 substr($text,0,length($current_match),q{});
6942 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
6943             . $current_match . q{])},
6944             Parse::RecDescent::_tracefirst($text))
6945             if defined $::RD_TRACE;
6946 0         0 push @item, $item{__STRING1__}=$current_match;
6947            
6948              
6949 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [var_name]},
6950             Parse::RecDescent::_tracefirst($text),
6951             q{group_type},
6952             $tracelevel)
6953             if defined $::RD_TRACE;
6954 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         1546  
  0         0  
6955 0         0 $expectation->is(q{var_name})->at($text);
6956 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::var_name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
6957             {
6958            
6959 0 0       0 Parse::RecDescent::_trace(q{<>},
6960             Parse::RecDescent::_tracefirst($text),
6961             q{group_type},
6962             $tracelevel)
6963             if defined $::RD_TRACE;
6964 0         0 $expectation->failed();
6965 0         0 last;
6966             }
6967 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [var_name]<< (return value: [}
6968             . $_tok . q{]},
6969              
6970             Parse::RecDescent::_tracefirst($text),
6971             q{group_type},
6972             $tracelevel)
6973             if defined $::RD_TRACE;
6974 0         0 $item{q{var_name}} = $_tok;
6975 0         0 push @item, $_tok;
6976            
6977             }
6978              
6979 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [':' var_name]<<},
6980             Parse::RecDescent::_tracefirst($text),
6981             q{group_type},
6982             $tracelevel)
6983             if defined $::RD_TRACE;
6984              
6985              
6986              
6987 0         0 $_matched = 1;
6988 0         0 last;
6989             }
6990              
6991              
6992 10 50 33     66 unless ( $_matched || defined($score) )
6993             {
6994            
6995              
6996 10         26 $_[1] = $text; # NOT SURE THIS IS NEEDED
6997 10 50       34 Parse::RecDescent::_trace(q{<>},
6998             Parse::RecDescent::_tracefirst($_[1]),
6999             q{group_type},
7000             $tracelevel)
7001             if defined $::RD_TRACE;
7002 10         77 return undef;
7003             }
7004 0 0 0     0 if (!defined($return) && defined($score))
7005             {
7006 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7007             q{group_type},
7008             $tracelevel)
7009             if defined $::RD_TRACE;
7010 0         0 $return = $score_return;
7011             }
7012 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
7013 0 0       0 $return = $item[$#item] unless defined $return;
7014 0 0       0 if (defined $::RD_TRACE)
7015             {
7016 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7017             $return . q{])}, "",
7018             q{group_type},
7019             $tracelevel);
7020 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7021             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7022             Parse::RecDescent::_tracefirst($text),
7023             , q{group_type},
7024             $tracelevel)
7025             }
7026 0         0 $_[1] = $text;
7027 0         0 return $return;
7028             }
7029              
7030             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7031             sub Parse::RecDescent::Text::FormBuilder::Parser::string
7032             {
7033 4     4   10 my $thisparser = $_[0];
7034 2     2   20 use vars q{$tracelevel};
  2         5  
  2         1223  
7035 4   50     14 local $tracelevel = ($tracelevel||0)+1;
7036 4         7 $ERRORS = 0;
7037 4         14 my $thisrule = $thisparser->{"rules"}{"string"};
7038              
7039 4 50       12 Parse::RecDescent::_trace(q{Trying rule: [string]},
7040             Parse::RecDescent::_tracefirst($_[1]),
7041             q{string},
7042             $tracelevel)
7043             if defined $::RD_TRACE;
7044              
7045            
7046 4         7 my $err_at = @{$thisparser->{errors}};
  4         8  
7047              
7048 4         8 my $score;
7049             my $score_return;
7050 0         0 my $_tok;
7051 4         4 my $return = undef;
7052 4         7 my $_matched=0;
7053 4         8 my $commit=0;
7054 4         8 my @item = ();
7055 4         7 my %item = ();
7056 4         6 my $repeating = $_[2];
7057 4         6 my $_noactions = $_[3];
7058 4 50       11 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  4         6  
  4         10  
7059 4         7 my $_itempos = $_[5];
7060 4 50       13 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7061 4         9 my $text;
7062             my $lastsep;
7063 0         0 my $current_match;
7064 4         14 my $expectation = new Parse::RecDescent::Expectation(q{simple_multiword, or quoted_string});
7065 4         41 $expectation->at($_[1]);
7066            
7067 4         18 my $thisline;
7068 4         31 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7069              
7070            
7071              
7072 4   33     46 while (!$_matched && !$commit)
7073             {
7074            
7075 4 50       12 Parse::RecDescent::_trace(q{Trying production: [simple_multiword]},
7076             Parse::RecDescent::_tracefirst($_[1]),
7077             q{string},
7078             $tracelevel)
7079             if defined $::RD_TRACE;
7080 4         12 my $thisprod = $thisrule->{"prods"}[0];
7081 4         8 $text = $_[1];
7082 4         13 my $_savetext;
7083 4         11 @item = (q{string});
7084 4         109 %item = (__RULE__ => q{string});
7085 4         9 my $repcount = 0;
7086              
7087              
7088 4 50       12 Parse::RecDescent::_trace(q{Trying subrule: [simple_multiword]},
7089             Parse::RecDescent::_tracefirst($text),
7090             q{string},
7091             $tracelevel)
7092             if defined $::RD_TRACE;
7093 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         1042  
  4         7  
7094 4         16 $expectation->is(q{})->at($text);
7095 4 100   4   56 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::simple_multiword($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  4         11  
7096             {
7097            
7098 2 50       19 Parse::RecDescent::_trace(q{<>},
7099             Parse::RecDescent::_tracefirst($text),
7100             q{string},
7101             $tracelevel)
7102             if defined $::RD_TRACE;
7103 2         8 $expectation->failed();
7104 2         10 last;
7105             }
7106 2 50       13 Parse::RecDescent::_trace(q{>>Matched subrule: [simple_multiword]<< (return value: [}
7107             . $_tok . q{]},
7108              
7109             Parse::RecDescent::_tracefirst($text),
7110             q{string},
7111             $tracelevel)
7112             if defined $::RD_TRACE;
7113 2         4 $item{q{simple_multiword}} = $_tok;
7114 2         5 push @item, $_tok;
7115            
7116             }
7117              
7118 2 50       5 Parse::RecDescent::_trace(q{>>Matched production: [simple_multiword]<<},
7119             Parse::RecDescent::_tracefirst($text),
7120             q{string},
7121             $tracelevel)
7122             if defined $::RD_TRACE;
7123              
7124              
7125              
7126 2         3 $_matched = 1;
7127 2         4 last;
7128             }
7129              
7130              
7131 4   66     25 while (!$_matched && !$commit)
7132             {
7133            
7134 2 50       8 Parse::RecDescent::_trace(q{Trying production: [quoted_string]},
7135             Parse::RecDescent::_tracefirst($_[1]),
7136             q{string},
7137             $tracelevel)
7138             if defined $::RD_TRACE;
7139 2         7 my $thisprod = $thisrule->{"prods"}[1];
7140 2         4 $text = $_[1];
7141 2         3 my $_savetext;
7142 2         7 @item = (q{string});
7143 2         7 %item = (__RULE__ => q{string});
7144 2         4 my $repcount = 0;
7145              
7146              
7147 2 50       16 Parse::RecDescent::_trace(q{Trying subrule: [quoted_string]},
7148             Parse::RecDescent::_tracefirst($text),
7149             q{string},
7150             $tracelevel)
7151             if defined $::RD_TRACE;
7152 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         3926  
  2         4  
7153 2         7 $expectation->is(q{})->at($text);
7154 2 50   2   32 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::quoted_string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  2         6  
7155             {
7156            
7157 0 0       0 Parse::RecDescent::_trace(q{<>},
7158             Parse::RecDescent::_tracefirst($text),
7159             q{string},
7160             $tracelevel)
7161             if defined $::RD_TRACE;
7162 0         0 $expectation->failed();
7163 0         0 last;
7164             }
7165 2 50       12 Parse::RecDescent::_trace(q{>>Matched subrule: [quoted_string]<< (return value: [}
7166             . $_tok . q{]},
7167              
7168             Parse::RecDescent::_tracefirst($text),
7169             q{string},
7170             $tracelevel)
7171             if defined $::RD_TRACE;
7172 2         6 $item{q{quoted_string}} = $_tok;
7173 2         3 push @item, $_tok;
7174            
7175             }
7176              
7177 2 50       6 Parse::RecDescent::_trace(q{>>Matched production: [quoted_string]<<},
7178             Parse::RecDescent::_tracefirst($text),
7179             q{string},
7180             $tracelevel)
7181             if defined $::RD_TRACE;
7182              
7183              
7184              
7185 2         3 $_matched = 1;
7186 2         5 last;
7187             }
7188              
7189              
7190 4 50 33     98 unless ( $_matched || defined($score) )
7191             {
7192            
7193              
7194 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
7195 0 0       0 Parse::RecDescent::_trace(q{<>},
7196             Parse::RecDescent::_tracefirst($_[1]),
7197             q{string},
7198             $tracelevel)
7199             if defined $::RD_TRACE;
7200 0         0 return undef;
7201             }
7202 4 50 33     31 if (!defined($return) && defined($score))
7203             {
7204 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7205             q{string},
7206             $tracelevel)
7207             if defined $::RD_TRACE;
7208 0         0 $return = $score_return;
7209             }
7210 4         8 splice @{$thisparser->{errors}}, $err_at;
  4         11  
7211 4 50       13 $return = $item[$#item] unless defined $return;
7212 4 50       12 if (defined $::RD_TRACE)
7213             {
7214 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7215             $return . q{])}, "",
7216             q{string},
7217             $tracelevel);
7218 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7219             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7220             Parse::RecDescent::_tracefirst($text),
7221             , q{string},
7222             $tracelevel)
7223             }
7224 4         9 $_[1] = $text;
7225 4         33 return $return;
7226             }
7227              
7228             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7229             sub Parse::RecDescent::Text::FormBuilder::Parser::reset
7230             {
7231 21     21   56 my $thisparser = $_[0];
7232 2     2   21 use vars q{$tracelevel};
  2         4  
  2         1674  
7233 21   50     80 local $tracelevel = ($tracelevel||0)+1;
7234 21         32 $ERRORS = 0;
7235 21         58 my $thisrule = $thisparser->{"rules"}{"reset"};
7236              
7237 21 50       58 Parse::RecDescent::_trace(q{Trying rule: [reset]},
7238             Parse::RecDescent::_tracefirst($_[1]),
7239             q{reset},
7240             $tracelevel)
7241             if defined $::RD_TRACE;
7242              
7243            
7244 21         27 my $err_at = @{$thisparser->{errors}};
  21         43  
7245              
7246 21         33 my $score;
7247             my $score_return;
7248 0         0 my $_tok;
7249 21         30 my $return = undef;
7250 21         32 my $_matched=0;
7251 21         27 my $commit=0;
7252 21         39 my @item = ();
7253 21         38 my %item = ();
7254 21         27 my $repeating = $_[2];
7255 21         26 my $_noactions = $_[3];
7256 21 50       51 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         31  
  21         46  
7257 21         39 my $_itempos = $_[5];
7258 21 50       63 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7259 21         44 my $text;
7260             my $lastsep;
7261 0         0 my $current_match;
7262 21         86 my $expectation = new Parse::RecDescent::Expectation(q{'!reset'});
7263 21         169 $expectation->at($_[1]);
7264            
7265 21         90 my $thisline;
7266 21         96 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7267              
7268            
7269              
7270 21   33     266 while (!$_matched && !$commit)
7271             {
7272            
7273 21 50       68 Parse::RecDescent::_trace(q{Trying production: ['!reset' string]},
7274             Parse::RecDescent::_tracefirst($_[1]),
7275             q{reset},
7276             $tracelevel)
7277             if defined $::RD_TRACE;
7278 21         65 my $thisprod = $thisrule->{"prods"}[0];
7279 21         43 $text = $_[1];
7280 21         38 my $_savetext;
7281 21         50 @item = (q{reset});
7282 21         64 %item = (__RULE__ => q{reset});
7283 21         35 my $repcount = 0;
7284              
7285              
7286 21 50       63 Parse::RecDescent::_trace(q{Trying terminal: ['!reset']},
7287             Parse::RecDescent::_tracefirst($text),
7288             q{reset},
7289             $tracelevel)
7290             if defined $::RD_TRACE;
7291 21         41 undef $lastsep;
7292 21         71 $expectation->is(q{})->at($text);
7293            
7294              
7295 21 50 33     244 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!reset/)
  21 50       200  
7296             {
7297 21 50       72 $text = $lastsep . $text if defined $lastsep;
7298            
7299 21         74 $expectation->failed();
7300 21 50       96 Parse::RecDescent::_trace(qq{<>},
7301             Parse::RecDescent::_tracefirst($text))
7302             if defined $::RD_TRACE;
7303 21         49 last;
7304             }
7305 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7306 0         0 substr($text,0,length($current_match),q{});
7307 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7308             . $current_match . q{])},
7309             Parse::RecDescent::_tracefirst($text))
7310             if defined $::RD_TRACE;
7311 0         0 push @item, $item{__STRING1__}=$current_match;
7312            
7313              
7314 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [string]},
7315             Parse::RecDescent::_tracefirst($text),
7316             q{reset},
7317             $tracelevel)
7318             if defined $::RD_TRACE;
7319 2     2   54 if (1) { no strict qw{refs};
  2         4  
  2         1844  
  0         0  
7320 0         0 $expectation->is(q{string})->at($text);
7321 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
7322             {
7323            
7324 0 0       0 Parse::RecDescent::_trace(q{<>},
7325             Parse::RecDescent::_tracefirst($text),
7326             q{reset},
7327             $tracelevel)
7328             if defined $::RD_TRACE;
7329 0         0 $expectation->failed();
7330 0         0 last;
7331             }
7332 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [string]<< (return value: [}
7333             . $_tok . q{]},
7334              
7335             Parse::RecDescent::_tracefirst($text),
7336             q{reset},
7337             $tracelevel)
7338             if defined $::RD_TRACE;
7339 0         0 $item{q{string}} = $_tok;
7340 0         0 push @item, $_tok;
7341            
7342             }
7343              
7344 0 0       0 Parse::RecDescent::_trace(q{Trying action},
7345             Parse::RecDescent::_tracefirst($text),
7346             q{reset},
7347             $tracelevel)
7348             if defined $::RD_TRACE;
7349            
7350              
7351 0 0       0 $_tok = ($_noactions) ? 0 : do {
7352 0 0       0 warn "[Text::FormBuilder] Reset button redefined at input text line $thisline\n" if defined $formspec{reset};
7353 0         0 $formspec{reset} = $item{string};
7354             };
7355 0 0       0 unless (defined $_tok)
7356             {
7357 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
7358             if defined $::RD_TRACE;
7359 0         0 last;
7360             }
7361 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
7362             . $_tok . q{])},
7363             Parse::RecDescent::_tracefirst($text))
7364             if defined $::RD_TRACE;
7365 0         0 push @item, $_tok;
7366 0         0 $item{__ACTION1__}=$_tok;
7367            
7368              
7369 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!reset' string]<<},
7370             Parse::RecDescent::_tracefirst($text),
7371             q{reset},
7372             $tracelevel)
7373             if defined $::RD_TRACE;
7374              
7375              
7376              
7377 0         0 $_matched = 1;
7378 0         0 last;
7379             }
7380              
7381              
7382 21 50 33     131 unless ( $_matched || defined($score) )
7383             {
7384            
7385              
7386 21         46 $_[1] = $text; # NOT SURE THIS IS NEEDED
7387 21 50       48 Parse::RecDescent::_trace(q{<>},
7388             Parse::RecDescent::_tracefirst($_[1]),
7389             q{reset},
7390             $tracelevel)
7391             if defined $::RD_TRACE;
7392 21         154 return undef;
7393             }
7394 0 0 0     0 if (!defined($return) && defined($score))
7395             {
7396 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7397             q{reset},
7398             $tracelevel)
7399             if defined $::RD_TRACE;
7400 0         0 $return = $score_return;
7401             }
7402 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
7403 0 0       0 $return = $item[$#item] unless defined $return;
7404 0 0       0 if (defined $::RD_TRACE)
7405             {
7406 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7407             $return . q{])}, "",
7408             q{reset},
7409             $tracelevel);
7410 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7411             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7412             Parse::RecDescent::_tracefirst($text),
7413             , q{reset},
7414             $tracelevel)
7415             }
7416 0         0 $_[1] = $text;
7417 0         0 return $return;
7418             }
7419              
7420             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7421             sub Parse::RecDescent::Text::FormBuilder::Parser::var_name
7422             {
7423 0     0   0 my $thisparser = $_[0];
7424 2     2   12 use vars q{$tracelevel};
  2         10  
  2         2576  
7425 0   0     0 local $tracelevel = ($tracelevel||0)+1;
7426 0         0 $ERRORS = 0;
7427 0         0 my $thisrule = $thisparser->{"rules"}{"var_name"};
7428              
7429 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [var_name]},
7430             Parse::RecDescent::_tracefirst($_[1]),
7431             q{var_name},
7432             $tracelevel)
7433             if defined $::RD_TRACE;
7434              
7435            
7436 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
7437              
7438 0         0 my $score;
7439             my $score_return;
7440 0         0 my $_tok;
7441 0         0 my $return = undef;
7442 0         0 my $_matched=0;
7443 0         0 my $commit=0;
7444 0         0 my @item = ();
7445 0         0 my %item = ();
7446 0         0 my $repeating = $_[2];
7447 0         0 my $_noactions = $_[3];
7448 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
7449 0         0 my $_itempos = $_[5];
7450 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7451 0         0 my $text;
7452             my $lastsep;
7453 0         0 my $current_match;
7454 0         0 my $expectation = new Parse::RecDescent::Expectation(q{/[A-Z_]+/});
7455 0         0 $expectation->at($_[1]);
7456            
7457 0         0 my $thisline;
7458 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7459              
7460            
7461              
7462 0   0     0 while (!$_matched && !$commit)
7463             {
7464            
7465 0 0       0 Parse::RecDescent::_trace(q{Trying production: [/[A-Z_]+/]},
7466             Parse::RecDescent::_tracefirst($_[1]),
7467             q{var_name},
7468             $tracelevel)
7469             if defined $::RD_TRACE;
7470 0         0 my $thisprod = $thisrule->{"prods"}[0];
7471 0         0 $text = $_[1];
7472 0         0 my $_savetext;
7473 0         0 @item = (q{var_name});
7474 0         0 %item = (__RULE__ => q{var_name});
7475 0         0 my $repcount = 0;
7476              
7477              
7478 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/[A-Z_]+/]}, Parse::RecDescent::_tracefirst($text),
7479             q{var_name},
7480             $tracelevel)
7481             if defined $::RD_TRACE;
7482 0         0 undef $lastsep;
7483 0         0 $expectation->is(q{})->at($text);
7484            
7485              
7486 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[A-Z_]+)/)
  0 0       0  
7487             {
7488 0 0       0 $text = $lastsep . $text if defined $lastsep;
7489 0         0 $expectation->failed();
7490 0 0       0 Parse::RecDescent::_trace(q{<>},
7491             Parse::RecDescent::_tracefirst($text))
7492             if defined $::RD_TRACE;
7493              
7494 0         0 last;
7495             }
7496 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7497 0         0 substr($text,0,length($current_match),q{});
7498 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7499             . $current_match . q{])},
7500             Parse::RecDescent::_tracefirst($text))
7501             if defined $::RD_TRACE;
7502 0         0 push @item, $item{__PATTERN1__}=$current_match;
7503            
7504              
7505 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/[A-Z_]+/]<<},
7506             Parse::RecDescent::_tracefirst($text),
7507             q{var_name},
7508             $tracelevel)
7509             if defined $::RD_TRACE;
7510              
7511              
7512              
7513 0         0 $_matched = 1;
7514 0         0 last;
7515             }
7516              
7517              
7518 0 0 0     0 unless ( $_matched || defined($score) )
7519             {
7520            
7521              
7522 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
7523 0 0       0 Parse::RecDescent::_trace(q{<>},
7524             Parse::RecDescent::_tracefirst($_[1]),
7525             q{var_name},
7526             $tracelevel)
7527             if defined $::RD_TRACE;
7528 0         0 return undef;
7529             }
7530 0 0 0     0 if (!defined($return) && defined($score))
7531             {
7532 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7533             q{var_name},
7534             $tracelevel)
7535             if defined $::RD_TRACE;
7536 0         0 $return = $score_return;
7537             }
7538 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
7539 0 0       0 $return = $item[$#item] unless defined $return;
7540 0 0       0 if (defined $::RD_TRACE)
7541             {
7542 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7543             $return . q{])}, "",
7544             q{var_name},
7545             $tracelevel);
7546 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7547             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7548             Parse::RecDescent::_tracefirst($text),
7549             , q{var_name},
7550             $tracelevel)
7551             }
7552 0         0 $_[1] = $text;
7553 0         0 return $return;
7554             }
7555              
7556             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7557             sub Parse::RecDescent::Text::FormBuilder::Parser::type
7558             {
7559 24     24   355 my $thisparser = $_[0];
7560 2     2   15 use vars q{$tracelevel};
  2         3  
  2         1638  
7561 24   50     95 local $tracelevel = ($tracelevel||0)+1;
7562 24         44 $ERRORS = 0;
7563 24         127 my $thisrule = $thisparser->{"rules"}{"type"};
7564              
7565 24 50       78 Parse::RecDescent::_trace(q{Trying rule: [type]},
7566             Parse::RecDescent::_tracefirst($_[1]),
7567             q{type},
7568             $tracelevel)
7569             if defined $::RD_TRACE;
7570              
7571            
7572 24         31 my $err_at = @{$thisparser->{errors}};
  24         77  
7573              
7574 24         39 my $score;
7575             my $score_return;
7576 0         0 my $_tok;
7577 24         43 my $return = undef;
7578 24         41 my $_matched=0;
7579 24         50 my $commit=0;
7580 24         50 my @item = ();
7581 24         49 my %item = ();
7582 24         45 my $repeating = $_[2];
7583 24         45 my $_noactions = $_[3];
7584 24 50       61 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         35  
  24         71  
7585 24         135 my $_itempos = $_[5];
7586 24 50       78 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7587 24         40 my $text;
7588             my $lastsep;
7589 0         0 my $current_match;
7590 24         99 my $expectation = new Parse::RecDescent::Expectation(q{':'});
7591 24         221 $expectation->at($_[1]);
7592            
7593 24         114 my $thisline;
7594 24         857 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7595              
7596            
7597              
7598 24   33     287 while (!$_matched && !$commit)
7599             {
7600            
7601 24 50       78 Parse::RecDescent::_trace(q{Trying production: [':' builtin_field]},
7602             Parse::RecDescent::_tracefirst($_[1]),
7603             q{type},
7604             $tracelevel)
7605             if defined $::RD_TRACE;
7606 24         79 my $thisprod = $thisrule->{"prods"}[0];
7607 24         39 $text = $_[1];
7608 24         40 my $_savetext;
7609 24         53 @item = (q{type});
7610 24         177 %item = (__RULE__ => q{type});
7611 24         46 my $repcount = 0;
7612              
7613              
7614 24 50       63 Parse::RecDescent::_trace(q{Trying terminal: [':']},
7615             Parse::RecDescent::_tracefirst($text),
7616             q{type},
7617             $tracelevel)
7618             if defined $::RD_TRACE;
7619 24         60 undef $lastsep;
7620 24         185 $expectation->is(q{})->at($text);
7621            
7622              
7623 24 50 66     341 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\:/)
  24 100       534  
7624             {
7625 15 50       48 $text = $lastsep . $text if defined $lastsep;
7626            
7627 15         56 $expectation->failed();
7628 15 50       77 Parse::RecDescent::_trace(qq{<>},
7629             Parse::RecDescent::_tracefirst($text))
7630             if defined $::RD_TRACE;
7631 15         35 last;
7632             }
7633 9         63 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7634 9         32 substr($text,0,length($current_match),q{});
7635 9 50       26 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7636             . $current_match . q{])},
7637             Parse::RecDescent::_tracefirst($text))
7638             if defined $::RD_TRACE;
7639 9         29 push @item, $item{__STRING1__}=$current_match;
7640            
7641              
7642 9 50       24 Parse::RecDescent::_trace(q{Trying subrule: [builtin_field]},
7643             Parse::RecDescent::_tracefirst($text),
7644             q{type},
7645             $tracelevel)
7646             if defined $::RD_TRACE;
7647 2     2   66 if (1) { no strict qw{refs};
  2         4  
  2         1404  
  9         30  
7648 9         35 $expectation->is(q{builtin_field})->at($text);
7649 9 50   9   242 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::builtin_field($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  9         25  
7650             {
7651            
7652 0 0       0 Parse::RecDescent::_trace(q{<>},
7653             Parse::RecDescent::_tracefirst($text),
7654             q{type},
7655             $tracelevel)
7656             if defined $::RD_TRACE;
7657 0         0 $expectation->failed();
7658 0         0 last;
7659             }
7660 9 50       41 Parse::RecDescent::_trace(q{>>Matched subrule: [builtin_field]<< (return value: [}
7661             . $_tok . q{]},
7662              
7663             Parse::RecDescent::_tracefirst($text),
7664             q{type},
7665             $tracelevel)
7666             if defined $::RD_TRACE;
7667 9         29 $item{q{builtin_field}} = $_tok;
7668 9         19 push @item, $_tok;
7669            
7670             }
7671              
7672 9 50       289 Parse::RecDescent::_trace(q{>>Matched production: [':' builtin_field]<<},
7673             Parse::RecDescent::_tracefirst($text),
7674             q{type},
7675             $tracelevel)
7676             if defined $::RD_TRACE;
7677              
7678              
7679              
7680 9         12 $_matched = 1;
7681 9         21 last;
7682             }
7683              
7684              
7685 24 100 66     218 unless ( $_matched || defined($score) )
7686             {
7687            
7688              
7689 15         44 $_[1] = $text; # NOT SURE THIS IS NEEDED
7690 15 50       47 Parse::RecDescent::_trace(q{<>},
7691             Parse::RecDescent::_tracefirst($_[1]),
7692             q{type},
7693             $tracelevel)
7694             if defined $::RD_TRACE;
7695 15         113 return undef;
7696             }
7697 9 50 33     52 if (!defined($return) && defined($score))
7698             {
7699 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7700             q{type},
7701             $tracelevel)
7702             if defined $::RD_TRACE;
7703 0         0 $return = $score_return;
7704             }
7705 9         17 splice @{$thisparser->{errors}}, $err_at;
  9         23  
7706 9 50       33 $return = $item[$#item] unless defined $return;
7707 9 50       25 if (defined $::RD_TRACE)
7708             {
7709 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7710             $return . q{])}, "",
7711             q{type},
7712             $tracelevel);
7713 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7714             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7715             Parse::RecDescent::_tracefirst($text),
7716             , q{type},
7717             $tracelevel)
7718             }
7719 9         22 $_[1] = $text;
7720 9         74 return $return;
7721             }
7722              
7723             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7724             sub Parse::RecDescent::Text::FormBuilder::Parser::note
7725             {
7726 21     21   41 my $thisparser = $_[0];
7727 2     2   11 use vars q{$tracelevel};
  2         5  
  2         1616  
7728 21   50     86 local $tracelevel = ($tracelevel||0)+1;
7729 21         41 $ERRORS = 0;
7730 21         56 my $thisrule = $thisparser->{"rules"}{"note"};
7731              
7732 21 50       71 Parse::RecDescent::_trace(q{Trying rule: [note]},
7733             Parse::RecDescent::_tracefirst($_[1]),
7734             q{note},
7735             $tracelevel)
7736             if defined $::RD_TRACE;
7737              
7738            
7739 21         35 my $err_at = @{$thisparser->{errors}};
  21         44  
7740              
7741 21         42 my $score;
7742             my $score_return;
7743 0         0 my $_tok;
7744 21         34 my $return = undef;
7745 21         29 my $_matched=0;
7746 21         39 my $commit=0;
7747 21         42 my @item = ();
7748 21         49 my %item = ();
7749 21         31 my $repeating = $_[2];
7750 21         31 my $_noactions = $_[3];
7751 21 50       59 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         30  
  21         48  
7752 21         46 my $_itempos = $_[5];
7753 21 50       68 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7754 21         37 my $text;
7755             my $lastsep;
7756 0         0 my $current_match;
7757 21         94 my $expectation = new Parse::RecDescent::Expectation(q{'!note'});
7758 21         207 $expectation->at($_[1]);
7759            
7760 21         85 my $thisline;
7761 21         99 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7762              
7763            
7764              
7765 21   33     398 while (!$_matched && !$commit)
7766             {
7767            
7768 21 50       60 Parse::RecDescent::_trace(q{Trying production: ['!note' block]},
7769             Parse::RecDescent::_tracefirst($_[1]),
7770             q{note},
7771             $tracelevel)
7772             if defined $::RD_TRACE;
7773 21         62 my $thisprod = $thisrule->{"prods"}[0];
7774 21         43 $text = $_[1];
7775 21         34 my $_savetext;
7776 21         57 @item = (q{note});
7777 21         58 %item = (__RULE__ => q{note});
7778 21         36 my $repcount = 0;
7779              
7780              
7781 21 50       50 Parse::RecDescent::_trace(q{Trying terminal: ['!note']},
7782             Parse::RecDescent::_tracefirst($text),
7783             q{note},
7784             $tracelevel)
7785             if defined $::RD_TRACE;
7786 21         31 undef $lastsep;
7787 21         69 $expectation->is(q{})->at($text);
7788            
7789              
7790 21 100 33     312 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!note/)
  21 50       245  
7791             {
7792 21 50       73 $text = $lastsep . $text if defined $lastsep;
7793            
7794 21         72 $expectation->failed();
7795 21 50       269 Parse::RecDescent::_trace(qq{<>},
7796             Parse::RecDescent::_tracefirst($text))
7797             if defined $::RD_TRACE;
7798 21         52 last;
7799             }
7800 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
7801 0         0 substr($text,0,length($current_match),q{});
7802 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
7803             . $current_match . q{])},
7804             Parse::RecDescent::_tracefirst($text))
7805             if defined $::RD_TRACE;
7806 0         0 push @item, $item{__STRING1__}=$current_match;
7807            
7808              
7809 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [block]},
7810             Parse::RecDescent::_tracefirst($text),
7811             q{note},
7812             $tracelevel)
7813             if defined $::RD_TRACE;
7814 2     2   16 if (1) { no strict qw{refs};
  2         6  
  2         2102  
  0         0  
7815 0         0 $expectation->is(q{block})->at($text);
7816 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
7817             {
7818            
7819 0 0       0 Parse::RecDescent::_trace(q{<>},
7820             Parse::RecDescent::_tracefirst($text),
7821             q{note},
7822             $tracelevel)
7823             if defined $::RD_TRACE;
7824 0         0 $expectation->failed();
7825 0         0 last;
7826             }
7827 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [block]<< (return value: [}
7828             . $_tok . q{]},
7829              
7830             Parse::RecDescent::_tracefirst($text),
7831             q{note},
7832             $tracelevel)
7833             if defined $::RD_TRACE;
7834 0         0 $item{q{block}} = $_tok;
7835 0         0 push @item, $_tok;
7836            
7837             }
7838              
7839 0 0       0 Parse::RecDescent::_trace(q{Trying action},
7840             Parse::RecDescent::_tracefirst($text),
7841             q{note},
7842             $tracelevel)
7843             if defined $::RD_TRACE;
7844            
7845              
7846 0 0       0 $_tok = ($_noactions) ? 0 : do { push @lines, [ 'note', $item{block} ]; };
  0         0  
7847 0 0       0 unless (defined $_tok)
7848             {
7849 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
7850             if defined $::RD_TRACE;
7851 0         0 last;
7852             }
7853 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
7854             . $_tok . q{])},
7855             Parse::RecDescent::_tracefirst($text))
7856             if defined $::RD_TRACE;
7857 0         0 push @item, $_tok;
7858 0         0 $item{__ACTION1__}=$_tok;
7859            
7860              
7861 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!note' block]<<},
7862             Parse::RecDescent::_tracefirst($text),
7863             q{note},
7864             $tracelevel)
7865             if defined $::RD_TRACE;
7866              
7867              
7868              
7869 0         0 $_matched = 1;
7870 0         0 last;
7871             }
7872              
7873              
7874 21 50 33     147 unless ( $_matched || defined($score) )
7875             {
7876            
7877              
7878 21         49 $_[1] = $text; # NOT SURE THIS IS NEEDED
7879 21 50       57 Parse::RecDescent::_trace(q{<>},
7880             Parse::RecDescent::_tracefirst($_[1]),
7881             q{note},
7882             $tracelevel)
7883             if defined $::RD_TRACE;
7884 21         175 return undef;
7885             }
7886 0 0 0     0 if (!defined($return) && defined($score))
7887             {
7888 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
7889             q{note},
7890             $tracelevel)
7891             if defined $::RD_TRACE;
7892 0         0 $return = $score_return;
7893             }
7894 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
7895 0 0       0 $return = $item[$#item] unless defined $return;
7896 0 0       0 if (defined $::RD_TRACE)
7897             {
7898 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
7899             $return . q{])}, "",
7900             q{note},
7901             $tracelevel);
7902 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
7903             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
7904             Parse::RecDescent::_tracefirst($text),
7905             , q{note},
7906             $tracelevel)
7907             }
7908 0         0 $_[1] = $text;
7909 0         0 return $return;
7910             }
7911              
7912             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
7913             sub Parse::RecDescent::Text::FormBuilder::Parser::option_list
7914             {
7915 24     24   578 my $thisparser = $_[0];
7916 2     2   23 use vars q{$tracelevel};
  2         5  
  2         2694  
7917 24   50     108 local $tracelevel = ($tracelevel||0)+1;
7918 24         43 $ERRORS = 0;
7919 24         1281 my $thisrule = $thisparser->{"rules"}{"option_list"};
7920              
7921 24 50       76 Parse::RecDescent::_trace(q{Trying rule: [option_list]},
7922             Parse::RecDescent::_tracefirst($_[1]),
7923             q{option_list},
7924             $tracelevel)
7925             if defined $::RD_TRACE;
7926              
7927            
7928 24         48 my $err_at = @{$thisparser->{errors}};
  24         172  
7929              
7930 24         45 my $score;
7931             my $score_return;
7932 0         0 my $_tok;
7933 24         43 my $return = undef;
7934 24         63 my $_matched=0;
7935 24         40 my $commit=0;
7936 24         139 my @item = ();
7937 24         54 my %item = ();
7938 24         39 my $repeating = $_[2];
7939 24         49 my $_noactions = $_[3];
7940 24 50       69 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         34  
  24         60  
7941 24         46 my $_itempos = $_[5];
7942 24 50       111 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
7943 24         48 my $text;
7944             my $lastsep;
7945 0         0 my $current_match;
7946 24         112 my $expectation = new Parse::RecDescent::Expectation(q{options, or list_var});
7947 24         361 $expectation->at($_[1]);
7948            
7949 24         116 my $thisline;
7950 24         123 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
7951              
7952            
7953              
7954 24   33     276 while (!$_matched && !$commit)
7955             {
7956            
7957 24 50       66 Parse::RecDescent::_trace(q{Trying production: [options]},
7958             Parse::RecDescent::_tracefirst($_[1]),
7959             q{option_list},
7960             $tracelevel)
7961             if defined $::RD_TRACE;
7962 24         81 my $thisprod = $thisrule->{"prods"}[0];
7963 24         44 $text = $_[1];
7964 24         38 my $_savetext;
7965 24         62 @item = (q{option_list});
7966 24         63 %item = (__RULE__ => q{option_list});
7967 24         44 my $repcount = 0;
7968              
7969              
7970 24 50       83 Parse::RecDescent::_trace(q{Trying subrule: [options]},
7971             Parse::RecDescent::_tracefirst($text),
7972             q{option_list},
7973             $tracelevel)
7974             if defined $::RD_TRACE;
7975 2     2   120 if (1) { no strict qw{refs};
  2         6  
  2         1116  
  24         35  
7976 24         91 $expectation->is(q{})->at($text);
7977 24 50   24   321 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::options($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         68  
7978             {
7979            
7980 24 50       73 Parse::RecDescent::_trace(q{<>},
7981             Parse::RecDescent::_tracefirst($text),
7982             q{option_list},
7983             $tracelevel)
7984             if defined $::RD_TRACE;
7985 24         84 $expectation->failed();
7986 24         116 last;
7987             }
7988 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [options]<< (return value: [}
7989             . $_tok . q{]},
7990              
7991             Parse::RecDescent::_tracefirst($text),
7992             q{option_list},
7993             $tracelevel)
7994             if defined $::RD_TRACE;
7995 0         0 $item{q{options}} = $_tok;
7996 0         0 push @item, $_tok;
7997            
7998             }
7999              
8000 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [options]<<},
8001             Parse::RecDescent::_tracefirst($text),
8002             q{option_list},
8003             $tracelevel)
8004             if defined $::RD_TRACE;
8005              
8006              
8007              
8008 0         0 $_matched = 1;
8009 0         0 last;
8010             }
8011              
8012              
8013 24   33     177 while (!$_matched && !$commit)
8014             {
8015            
8016 24 50       81 Parse::RecDescent::_trace(q{Trying production: [list_var]},
8017             Parse::RecDescent::_tracefirst($_[1]),
8018             q{option_list},
8019             $tracelevel)
8020             if defined $::RD_TRACE;
8021 24         122 my $thisprod = $thisrule->{"prods"}[1];
8022 24         44 $text = $_[1];
8023 24         39 my $_savetext;
8024 24         82 @item = (q{option_list});
8025 24         91 %item = (__RULE__ => q{option_list});
8026 24         38 my $repcount = 0;
8027              
8028              
8029 24 50       73 Parse::RecDescent::_trace(q{Trying subrule: [list_var]},
8030             Parse::RecDescent::_tracefirst($text),
8031             q{option_list},
8032             $tracelevel)
8033             if defined $::RD_TRACE;
8034 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         1549  
  24         37  
8035 24         94 $expectation->is(q{})->at($text);
8036 24 50   24   454 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::list_var($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  24         112  
8037             {
8038            
8039 24 50       1306 Parse::RecDescent::_trace(q{<>},
8040             Parse::RecDescent::_tracefirst($text),
8041             q{option_list},
8042             $tracelevel)
8043             if defined $::RD_TRACE;
8044 24         98 $expectation->failed();
8045 24         112 last;
8046             }
8047 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [list_var]<< (return value: [}
8048             . $_tok . q{]},
8049              
8050             Parse::RecDescent::_tracefirst($text),
8051             q{option_list},
8052             $tracelevel)
8053             if defined $::RD_TRACE;
8054 0         0 $item{q{list_var}} = $_tok;
8055 0         0 push @item, $_tok;
8056            
8057             }
8058              
8059 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [list_var]<<},
8060             Parse::RecDescent::_tracefirst($text),
8061             q{option_list},
8062             $tracelevel)
8063             if defined $::RD_TRACE;
8064              
8065              
8066              
8067 0         0 $_matched = 1;
8068 0         0 last;
8069             }
8070              
8071              
8072 24 50 33     210 unless ( $_matched || defined($score) )
8073             {
8074            
8075              
8076 24         103 $_[1] = $text; # NOT SURE THIS IS NEEDED
8077 24 50       62 Parse::RecDescent::_trace(q{<>},
8078             Parse::RecDescent::_tracefirst($_[1]),
8079             q{option_list},
8080             $tracelevel)
8081             if defined $::RD_TRACE;
8082 24         533 return undef;
8083             }
8084 0 0 0     0 if (!defined($return) && defined($score))
8085             {
8086 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
8087             q{option_list},
8088             $tracelevel)
8089             if defined $::RD_TRACE;
8090 0         0 $return = $score_return;
8091             }
8092 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
8093 0 0       0 $return = $item[$#item] unless defined $return;
8094 0 0       0 if (defined $::RD_TRACE)
8095             {
8096 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
8097             $return . q{])}, "",
8098             q{option_list},
8099             $tracelevel);
8100 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
8101             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
8102             Parse::RecDescent::_tracefirst($text),
8103             , q{option_list},
8104             $tracelevel)
8105             }
8106 0         0 $_[1] = $text;
8107 0         0 return $return;
8108             }
8109              
8110             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
8111             sub Parse::RecDescent::Text::FormBuilder::Parser::limit
8112             {
8113 0     0   0 my $thisparser = $_[0];
8114 2     2   13 use vars q{$tracelevel};
  2         3  
  2         3035  
8115 0   0     0 local $tracelevel = ($tracelevel||0)+1;
8116 0         0 $ERRORS = 0;
8117 0         0 my $thisrule = $thisparser->{"rules"}{"limit"};
8118              
8119 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [limit]},
8120             Parse::RecDescent::_tracefirst($_[1]),
8121             q{limit},
8122             $tracelevel)
8123             if defined $::RD_TRACE;
8124              
8125            
8126 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
8127              
8128 0         0 my $score;
8129             my $score_return;
8130 0         0 my $_tok;
8131 0         0 my $return = undef;
8132 0         0 my $_matched=0;
8133 0         0 my $commit=0;
8134 0         0 my @item = ();
8135 0         0 my %item = ();
8136 0         0 my $repeating = $_[2];
8137 0         0 my $_noactions = $_[3];
8138 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
8139 0         0 my $_itempos = $_[5];
8140 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8141 0         0 my $text;
8142             my $lastsep;
8143 0         0 my $current_match;
8144 0         0 my $expectation = new Parse::RecDescent::Expectation(q{/\\d+/});
8145 0         0 $expectation->at($_[1]);
8146            
8147 0         0 my $thisline;
8148 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8149              
8150            
8151              
8152 0   0     0 while (!$_matched && !$commit)
8153             {
8154            
8155 0 0       0 Parse::RecDescent::_trace(q{Trying production: [/\\d+/]},
8156             Parse::RecDescent::_tracefirst($_[1]),
8157             q{limit},
8158             $tracelevel)
8159             if defined $::RD_TRACE;
8160 0         0 my $thisprod = $thisrule->{"prods"}[0];
8161 0         0 $text = $_[1];
8162 0         0 my $_savetext;
8163 0         0 @item = (q{limit});
8164 0         0 %item = (__RULE__ => q{limit});
8165 0         0 my $repcount = 0;
8166              
8167              
8168 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/\\d+/]}, Parse::RecDescent::_tracefirst($text),
8169             q{limit},
8170             $tracelevel)
8171             if defined $::RD_TRACE;
8172 0         0 undef $lastsep;
8173 0         0 $expectation->is(q{})->at($text);
8174            
8175              
8176 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\d+)/)
  0 0       0  
8177             {
8178 0 0       0 $text = $lastsep . $text if defined $lastsep;
8179 0         0 $expectation->failed();
8180 0 0       0 Parse::RecDescent::_trace(q{<>},
8181             Parse::RecDescent::_tracefirst($text))
8182             if defined $::RD_TRACE;
8183              
8184 0         0 last;
8185             }
8186 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8187 0         0 substr($text,0,length($current_match),q{});
8188 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8189             . $current_match . q{])},
8190             Parse::RecDescent::_tracefirst($text))
8191             if defined $::RD_TRACE;
8192 0         0 push @item, $item{__PATTERN1__}=$current_match;
8193            
8194              
8195 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/\\d+/]<<},
8196             Parse::RecDescent::_tracefirst($text),
8197             q{limit},
8198             $tracelevel)
8199             if defined $::RD_TRACE;
8200              
8201              
8202              
8203 0         0 $_matched = 1;
8204 0         0 last;
8205             }
8206              
8207              
8208 0 0 0     0 unless ( $_matched || defined($score) )
8209             {
8210            
8211              
8212 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
8213 0 0       0 Parse::RecDescent::_trace(q{<>},
8214             Parse::RecDescent::_tracefirst($_[1]),
8215             q{limit},
8216             $tracelevel)
8217             if defined $::RD_TRACE;
8218 0         0 return undef;
8219             }
8220 0 0 0     0 if (!defined($return) && defined($score))
8221             {
8222 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
8223             q{limit},
8224             $tracelevel)
8225             if defined $::RD_TRACE;
8226 0         0 $return = $score_return;
8227             }
8228 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
8229 0 0       0 $return = $item[$#item] unless defined $return;
8230 0 0       0 if (defined $::RD_TRACE)
8231             {
8232 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
8233             $return . q{])}, "",
8234             q{limit},
8235             $tracelevel);
8236 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
8237             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
8238             Parse::RecDescent::_tracefirst($text),
8239             , q{limit},
8240             $tracelevel)
8241             }
8242 0         0 $_[1] = $text;
8243 0         0 return $return;
8244             }
8245              
8246             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
8247             sub Parse::RecDescent::Text::FormBuilder::Parser::static_list
8248             {
8249 0     0   0 my $thisparser = $_[0];
8250 2     2   15 use vars q{$tracelevel};
  2         5  
  2         3556  
8251 0   0     0 local $tracelevel = ($tracelevel||0)+1;
8252 0         0 $ERRORS = 0;
8253 0         0 my $thisrule = $thisparser->{"rules"}{"static_list"};
8254              
8255 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [static_list]},
8256             Parse::RecDescent::_tracefirst($_[1]),
8257             q{static_list},
8258             $tracelevel)
8259             if defined $::RD_TRACE;
8260              
8261            
8262 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
8263              
8264 0         0 my $score;
8265             my $score_return;
8266 0         0 my $_tok;
8267 0         0 my $return = undef;
8268 0         0 my $_matched=0;
8269 0         0 my $commit=0;
8270 0         0 my @item = ();
8271 0         0 my %item = ();
8272 0         0 my $repeating = $_[2];
8273 0         0 my $_noactions = $_[3];
8274 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
8275 0         0 my $_itempos = $_[5];
8276 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8277 0         0 my $text;
8278             my $lastsep;
8279 0         0 my $current_match;
8280 0         0 my $expectation = new Parse::RecDescent::Expectation(q{'\{'});
8281 0         0 $expectation->at($_[1]);
8282            
8283 0         0 my $thisline;
8284 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8285              
8286            
8287              
8288 0   0     0 while (!$_matched && !$commit)
8289             {
8290            
8291 0 0       0 Parse::RecDescent::_trace(q{Trying production: ['\{' /\\s*/ /,?/ /\\s*/ '\}']},
8292             Parse::RecDescent::_tracefirst($_[1]),
8293             q{static_list},
8294             $tracelevel)
8295             if defined $::RD_TRACE;
8296 0         0 my $thisprod = $thisrule->{"prods"}[0];
8297 0         0 $text = $_[1];
8298 0         0 my $_savetext;
8299 0         0 @item = (q{static_list});
8300 0         0 %item = (__RULE__ => q{static_list});
8301 0         0 my $repcount = 0;
8302              
8303              
8304 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\{']},
8305             Parse::RecDescent::_tracefirst($text),
8306             q{static_list},
8307             $tracelevel)
8308             if defined $::RD_TRACE;
8309 0         0 undef $lastsep;
8310 0         0 $expectation->is(q{})->at($text);
8311            
8312              
8313 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\{/)
  0 0       0  
8314             {
8315 0 0       0 $text = $lastsep . $text if defined $lastsep;
8316            
8317 0         0 $expectation->failed();
8318 0 0       0 Parse::RecDescent::_trace(qq{<>},
8319             Parse::RecDescent::_tracefirst($text))
8320             if defined $::RD_TRACE;
8321 0         0 last;
8322             }
8323 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8324 0         0 substr($text,0,length($current_match),q{});
8325 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8326             . $current_match . q{])},
8327             Parse::RecDescent::_tracefirst($text))
8328             if defined $::RD_TRACE;
8329 0         0 push @item, $item{__STRING1__}=$current_match;
8330            
8331              
8332 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/\\s*/]}, Parse::RecDescent::_tracefirst($text),
8333             q{static_list},
8334             $tracelevel)
8335             if defined $::RD_TRACE;
8336 0         0 undef $lastsep;
8337 0         0 $expectation->is(q{/\\s*/})->at($text);
8338            
8339              
8340 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\s*)/)
  0 0       0  
8341             {
8342 0 0       0 $text = $lastsep . $text if defined $lastsep;
8343 0         0 $expectation->failed();
8344 0 0       0 Parse::RecDescent::_trace(q{<>},
8345             Parse::RecDescent::_tracefirst($text))
8346             if defined $::RD_TRACE;
8347              
8348 0         0 last;
8349             }
8350 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8351 0         0 substr($text,0,length($current_match),q{});
8352 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8353             . $current_match . q{])},
8354             Parse::RecDescent::_tracefirst($text))
8355             if defined $::RD_TRACE;
8356 0         0 push @item, $item{__PATTERN1__}=$current_match;
8357            
8358              
8359 0 0       0 Parse::RecDescent::_trace(q{Trying operator: []},
8360             Parse::RecDescent::_tracefirst($text),
8361             q{static_list},
8362             $tracelevel)
8363             if defined $::RD_TRACE;
8364 0         0 $expectation->is(q{})->at($text);
8365              
8366 0         0 $_tok = undef;
8367 0         0 OPLOOP: while (1)
8368             {
8369 0         0 $repcount = 0;
8370 0         0 my @item;
8371             my %item;
8372              
8373             # MATCH LEFTARG
8374            
8375 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [option]},
8376             Parse::RecDescent::_tracefirst($text),
8377             q{static_list},
8378             $tracelevel)
8379             if defined $::RD_TRACE;
8380 2     2   18 if (1) { no strict qw{refs};
  2         7  
  2         3565  
  0         0  
8381 0         0 $expectation->is(q{option})->at($text);
8382 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
8383             {
8384            
8385 0 0       0 Parse::RecDescent::_trace(q{<>},
8386             Parse::RecDescent::_tracefirst($text),
8387             q{static_list},
8388             $tracelevel)
8389             if defined $::RD_TRACE;
8390 0         0 $expectation->failed();
8391 0         0 last;
8392             }
8393 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
8394             . $_tok . q{]},
8395              
8396             Parse::RecDescent::_tracefirst($text),
8397             q{static_list},
8398             $tracelevel)
8399             if defined $::RD_TRACE;
8400 0         0 $item{q{option}} = $_tok;
8401 0         0 push @item, $_tok;
8402            
8403             }
8404              
8405              
8406              
8407 0         0 $repcount++;
8408              
8409 0         0 my $savetext = $text;
8410 0         0 my $backtrack;
8411              
8412             # MATCH (OP RIGHTARG)(s)
8413 0         0 while ($repcount < 100000000)
8414             {
8415 0         0 $backtrack = 0;
8416            
8417 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/\\s*,\\s*/]}, Parse::RecDescent::_tracefirst($text),
8418             q{static_list},
8419             $tracelevel)
8420             if defined $::RD_TRACE;
8421 0         0 undef $lastsep;
8422 0         0 $expectation->is(q{/\\s*,\\s*/})->at($text);
8423            
8424              
8425 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\s*,\s*)/)
  0 0       0  
8426             {
8427 0 0       0 $text = $lastsep . $text if defined $lastsep;
8428 0         0 $expectation->failed();
8429 0 0       0 Parse::RecDescent::_trace(q{<>},
8430             Parse::RecDescent::_tracefirst($text))
8431             if defined $::RD_TRACE;
8432              
8433 0         0 last;
8434             }
8435 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8436 0         0 substr($text,0,length($current_match),q{});
8437 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8438             . $current_match . q{])},
8439             Parse::RecDescent::_tracefirst($text))
8440             if defined $::RD_TRACE;
8441 0         0 push @item, $item{__PATTERN2__}=$current_match;
8442            
8443              
8444 0         0 pop @item;
8445 0 0       0 if (defined $1) {push @item, $item{'option(s)'}=$1; $backtrack=1;}
  0         0  
  0         0  
8446            
8447 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [option]},
8448             Parse::RecDescent::_tracefirst($text),
8449             q{static_list},
8450             $tracelevel)
8451             if defined $::RD_TRACE;
8452 2     2   18 if (1) { no strict qw{refs};
  2         7  
  2         5799  
  0         0  
8453 0         0 $expectation->is(q{option})->at($text);
8454 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
8455             {
8456            
8457 0 0       0 Parse::RecDescent::_trace(q{<>},
8458             Parse::RecDescent::_tracefirst($text),
8459             q{static_list},
8460             $tracelevel)
8461             if defined $::RD_TRACE;
8462 0         0 $expectation->failed();
8463 0         0 last;
8464             }
8465 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
8466             . $_tok . q{]},
8467              
8468             Parse::RecDescent::_tracefirst($text),
8469             q{static_list},
8470             $tracelevel)
8471             if defined $::RD_TRACE;
8472 0         0 $item{q{option}} = $_tok;
8473 0         0 push @item, $_tok;
8474            
8475             }
8476              
8477 0         0 $savetext = $text;
8478 0         0 $repcount++;
8479             }
8480 0         0 $text = $savetext;
8481 0 0       0 pop @item if $backtrack;
8482              
8483 0 0       0 unless (@item) { undef $_tok; last }
  0         0  
  0         0  
8484 0         0 $_tok = [ @item ];
8485              
8486 0         0 last;
8487             } # end of OPLOOP
8488              
8489 0 0       0 unless ($repcount>=1)
8490             {
8491 0 0       0 Parse::RecDescent::_trace(q{<]>>},
8492             Parse::RecDescent::_tracefirst($text),
8493             q{static_list},
8494             $tracelevel)
8495             if defined $::RD_TRACE;
8496 0         0 $expectation->failed();
8497 0         0 last;
8498             }
8499 0 0       0 Parse::RecDescent::_trace(q{>>Matched operator: []<< (return value: [}
8500 0 0       0 . qq{@{$_tok||[]}} . q{]},
8501             Parse::RecDescent::_tracefirst($text),
8502             q{static_list},
8503             $tracelevel)
8504             if defined $::RD_TRACE;
8505              
8506 0   0     0 push @item, $item{'option(s)'}=$_tok||[];
8507              
8508 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/,?/]}, Parse::RecDescent::_tracefirst($text),
8509             q{static_list},
8510             $tracelevel)
8511             if defined $::RD_TRACE;
8512 0         0 undef $lastsep;
8513 0         0 $expectation->is(q{/,?/})->at($text);
8514            
8515              
8516 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:,?)/)
  0 0       0  
8517             {
8518 0 0       0 $text = $lastsep . $text if defined $lastsep;
8519 0         0 $expectation->failed();
8520 0 0       0 Parse::RecDescent::_trace(q{<>},
8521             Parse::RecDescent::_tracefirst($text))
8522             if defined $::RD_TRACE;
8523              
8524 0         0 last;
8525             }
8526 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8527 0         0 substr($text,0,length($current_match),q{});
8528 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8529             . $current_match . q{])},
8530             Parse::RecDescent::_tracefirst($text))
8531             if defined $::RD_TRACE;
8532 0         0 push @item, $item{__PATTERN3__}=$current_match;
8533            
8534              
8535 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/\\s*/]}, Parse::RecDescent::_tracefirst($text),
8536             q{static_list},
8537             $tracelevel)
8538             if defined $::RD_TRACE;
8539 0         0 undef $lastsep;
8540 0         0 $expectation->is(q{/\\s*/})->at($text);
8541            
8542              
8543 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\s*)/)
  0 0       0  
8544             {
8545 0 0       0 $text = $lastsep . $text if defined $lastsep;
8546 0         0 $expectation->failed();
8547 0 0       0 Parse::RecDescent::_trace(q{<>},
8548             Parse::RecDescent::_tracefirst($text))
8549             if defined $::RD_TRACE;
8550              
8551 0         0 last;
8552             }
8553 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8554 0         0 substr($text,0,length($current_match),q{});
8555 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8556             . $current_match . q{])},
8557             Parse::RecDescent::_tracefirst($text))
8558             if defined $::RD_TRACE;
8559 0         0 push @item, $item{__PATTERN4__}=$current_match;
8560            
8561              
8562 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\}']},
8563             Parse::RecDescent::_tracefirst($text),
8564             q{static_list},
8565             $tracelevel)
8566             if defined $::RD_TRACE;
8567 0         0 undef $lastsep;
8568 0         0 $expectation->is(q{'\}'})->at($text);
8569            
8570              
8571 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\}/)
  0 0       0  
8572             {
8573 0 0       0 $text = $lastsep . $text if defined $lastsep;
8574            
8575 0         0 $expectation->failed();
8576 0 0       0 Parse::RecDescent::_trace(qq{<>},
8577             Parse::RecDescent::_tracefirst($text))
8578             if defined $::RD_TRACE;
8579 0         0 last;
8580             }
8581 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
8582 0         0 substr($text,0,length($current_match),q{});
8583 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
8584             . $current_match . q{])},
8585             Parse::RecDescent::_tracefirst($text))
8586             if defined $::RD_TRACE;
8587 0         0 push @item, $item{__STRING2__}=$current_match;
8588            
8589              
8590 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['\{' /\\s*/ /,?/ /\\s*/ '\}']<<},
8591             Parse::RecDescent::_tracefirst($text),
8592             q{static_list},
8593             $tracelevel)
8594             if defined $::RD_TRACE;
8595              
8596              
8597              
8598 0         0 $_matched = 1;
8599 0         0 last;
8600             }
8601              
8602              
8603 0 0 0     0 unless ( $_matched || defined($score) )
8604             {
8605            
8606              
8607 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
8608 0 0       0 Parse::RecDescent::_trace(q{<>},
8609             Parse::RecDescent::_tracefirst($_[1]),
8610             q{static_list},
8611             $tracelevel)
8612             if defined $::RD_TRACE;
8613 0         0 return undef;
8614             }
8615 0 0 0     0 if (!defined($return) && defined($score))
8616             {
8617 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
8618             q{static_list},
8619             $tracelevel)
8620             if defined $::RD_TRACE;
8621 0         0 $return = $score_return;
8622             }
8623 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
8624 0 0       0 $return = $item[$#item] unless defined $return;
8625 0 0       0 if (defined $::RD_TRACE)
8626             {
8627 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
8628             $return . q{])}, "",
8629             q{static_list},
8630             $tracelevel);
8631 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
8632             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
8633             Parse::RecDescent::_tracefirst($text),
8634             , q{static_list},
8635             $tracelevel)
8636             }
8637 0         0 $_[1] = $text;
8638 0         0 return $return;
8639             }
8640              
8641             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
8642             sub Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_form_spec
8643             {
8644 21     21   392 my $thisparser = $_[0];
8645 2     2   24 use vars q{$tracelevel};
  2         4  
  2         991  
8646 21   50     83 local $tracelevel = ($tracelevel||0)+1;
8647 21         40 $ERRORS = 0;
8648 21         69 my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_form_spec"};
8649              
8650 21 50       64 Parse::RecDescent::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_form_spec]},
8651             Parse::RecDescent::_tracefirst($_[1]),
8652             q{_alternation_1_of_production_1_of_rule_form_spec},
8653             $tracelevel)
8654             if defined $::RD_TRACE;
8655              
8656            
8657 21         35 my $err_at = @{$thisparser->{errors}};
  21         42  
8658              
8659 21         50 my $score;
8660             my $score_return;
8661 0         0 my $_tok;
8662 21         36 my $return = undef;
8663 21         32 my $_matched=0;
8664 21         44 my $commit=0;
8665 21         56 my @item = ();
8666 21         38 my %item = ();
8667 21         53 my $repeating = $_[2];
8668 21         34 my $_noactions = $_[3];
8669 21 50       62 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         36  
  21         52  
8670 21         50 my $_itempos = $_[5];
8671 21 50       80 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
8672 21         46 my $text;
8673             my $lastsep;
8674 0         0 my $current_match;
8675 21         91 my $expectation = new Parse::RecDescent::Expectation(q{list_def, or description_def, or group_def, or note, or fb_params, or unknown_block_directive, or line});
8676 21         196 $expectation->at($_[1]);
8677            
8678 21         92 my $thisline;
8679 21         100 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
8680              
8681            
8682              
8683 21   33     250 while (!$_matched && !$commit)
8684             {
8685            
8686 21 50       63 Parse::RecDescent::_trace(q{Trying production: [list_def]},
8687             Parse::RecDescent::_tracefirst($_[1]),
8688             q{_alternation_1_of_production_1_of_rule_form_spec},
8689             $tracelevel)
8690             if defined $::RD_TRACE;
8691 21         73 my $thisprod = $thisrule->{"prods"}[0];
8692 21         44 $text = $_[1];
8693 21         35 my $_savetext;
8694 21         56 @item = (q{_alternation_1_of_production_1_of_rule_form_spec});
8695 21         58 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_form_spec});
8696 21         41 my $repcount = 0;
8697              
8698              
8699 21 50       71 Parse::RecDescent::_trace(q{Trying subrule: [list_def]},
8700             Parse::RecDescent::_tracefirst($text),
8701             q{_alternation_1_of_production_1_of_rule_form_spec},
8702             $tracelevel)
8703             if defined $::RD_TRACE;
8704 2     2   14 if (1) { no strict qw{refs};
  2         11  
  2         849  
  21         77  
8705 21         86 $expectation->is(q{})->at($text);
8706 21 50   21   272 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::list_def($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         52  
8707             {
8708            
8709 21 50       66 Parse::RecDescent::_trace(q{<>},
8710             Parse::RecDescent::_tracefirst($text),
8711             q{_alternation_1_of_production_1_of_rule_form_spec},
8712             $tracelevel)
8713             if defined $::RD_TRACE;
8714 21         58 $expectation->failed();
8715 21         88 last;
8716             }
8717 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [list_def]<< (return value: [}
8718             . $_tok . q{]},
8719              
8720             Parse::RecDescent::_tracefirst($text),
8721             q{_alternation_1_of_production_1_of_rule_form_spec},
8722             $tracelevel)
8723             if defined $::RD_TRACE;
8724 0         0 $item{q{list_def}} = $_tok;
8725 0         0 push @item, $_tok;
8726            
8727             }
8728              
8729 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [list_def]<<},
8730             Parse::RecDescent::_tracefirst($text),
8731             q{_alternation_1_of_production_1_of_rule_form_spec},
8732             $tracelevel)
8733             if defined $::RD_TRACE;
8734              
8735              
8736              
8737 0         0 $_matched = 1;
8738 0         0 last;
8739             }
8740              
8741              
8742 21   33     163 while (!$_matched && !$commit)
8743             {
8744            
8745 21 50       61 Parse::RecDescent::_trace(q{Trying production: [description_def]},
8746             Parse::RecDescent::_tracefirst($_[1]),
8747             q{_alternation_1_of_production_1_of_rule_form_spec},
8748             $tracelevel)
8749             if defined $::RD_TRACE;
8750 21         56 my $thisprod = $thisrule->{"prods"}[1];
8751 21         31 $text = $_[1];
8752 21         34 my $_savetext;
8753 21         54 @item = (q{_alternation_1_of_production_1_of_rule_form_spec});
8754 21         77 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_form_spec});
8755 21         53 my $repcount = 0;
8756              
8757              
8758 21 50       58 Parse::RecDescent::_trace(q{Trying subrule: [description_def]},
8759             Parse::RecDescent::_tracefirst($text),
8760             q{_alternation_1_of_production_1_of_rule_form_spec},
8761             $tracelevel)
8762             if defined $::RD_TRACE;
8763 2     2   13 if (1) { no strict qw{refs};
  2         3  
  2         801  
  21         37  
8764 21         72 $expectation->is(q{})->at($text);
8765 21 50   21   277 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::description_def($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         55  
8766             {
8767            
8768 21 50       70 Parse::RecDescent::_trace(q{<>},
8769             Parse::RecDescent::_tracefirst($text),
8770             q{_alternation_1_of_production_1_of_rule_form_spec},
8771             $tracelevel)
8772             if defined $::RD_TRACE;
8773 21         78 $expectation->failed();
8774 21         91 last;
8775             }
8776 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [description_def]<< (return value: [}
8777             . $_tok . q{]},
8778              
8779             Parse::RecDescent::_tracefirst($text),
8780             q{_alternation_1_of_production_1_of_rule_form_spec},
8781             $tracelevel)
8782             if defined $::RD_TRACE;
8783 0         0 $item{q{description_def}} = $_tok;
8784 0         0 push @item, $_tok;
8785            
8786             }
8787              
8788 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [description_def]<<},
8789             Parse::RecDescent::_tracefirst($text),
8790             q{_alternation_1_of_production_1_of_rule_form_spec},
8791             $tracelevel)
8792             if defined $::RD_TRACE;
8793              
8794              
8795              
8796 0         0 $_matched = 1;
8797 0         0 last;
8798             }
8799              
8800              
8801 21   33     143 while (!$_matched && !$commit)
8802             {
8803            
8804 21 50       58 Parse::RecDescent::_trace(q{Trying production: [group_def]},
8805             Parse::RecDescent::_tracefirst($_[1]),
8806             q{_alternation_1_of_production_1_of_rule_form_spec},
8807             $tracelevel)
8808             if defined $::RD_TRACE;
8809 21         56 my $thisprod = $thisrule->{"prods"}[2];
8810 21         41 $text = $_[1];
8811 21         27 my $_savetext;
8812 21         55 @item = (q{_alternation_1_of_production_1_of_rule_form_spec});
8813 21         58 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_form_spec});
8814 21         37 my $repcount = 0;
8815              
8816              
8817 21 50       60 Parse::RecDescent::_trace(q{Trying subrule: [group_def]},
8818             Parse::RecDescent::_tracefirst($text),
8819             q{_alternation_1_of_production_1_of_rule_form_spec},
8820             $tracelevel)
8821             if defined $::RD_TRACE;
8822 2     2   14 if (1) { no strict qw{refs};
  2         3  
  2         1001  
  21         30  
8823 21         82 $expectation->is(q{})->at($text);
8824 21 50   21   258 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::group_def($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         63  
8825             {
8826            
8827 21 50       47 Parse::RecDescent::_trace(q{<>},
8828             Parse::RecDescent::_tracefirst($text),
8829             q{_alternation_1_of_production_1_of_rule_form_spec},
8830             $tracelevel)
8831             if defined $::RD_TRACE;
8832 21         69 $expectation->failed();
8833 21         81 last;
8834             }
8835 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [group_def]<< (return value: [}
8836             . $_tok . q{]},
8837              
8838             Parse::RecDescent::_tracefirst($text),
8839             q{_alternation_1_of_production_1_of_rule_form_spec},
8840             $tracelevel)
8841             if defined $::RD_TRACE;
8842 0         0 $item{q{group_def}} = $_tok;
8843 0         0 push @item, $_tok;
8844            
8845             }
8846              
8847 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [group_def]<<},
8848             Parse::RecDescent::_tracefirst($text),
8849             q{_alternation_1_of_production_1_of_rule_form_spec},
8850             $tracelevel)
8851             if defined $::RD_TRACE;
8852              
8853              
8854              
8855 0         0 $_matched = 1;
8856 0         0 last;
8857             }
8858              
8859              
8860 21   33     141 while (!$_matched && !$commit)
8861             {
8862            
8863 21 50       53 Parse::RecDescent::_trace(q{Trying production: [note]},
8864             Parse::RecDescent::_tracefirst($_[1]),
8865             q{_alternation_1_of_production_1_of_rule_form_spec},
8866             $tracelevel)
8867             if defined $::RD_TRACE;
8868 21         58 my $thisprod = $thisrule->{"prods"}[3];
8869 21         32 $text = $_[1];
8870 21         35 my $_savetext;
8871 21         91 @item = (q{_alternation_1_of_production_1_of_rule_form_spec});
8872 21         58 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_form_spec});
8873 21         35 my $repcount = 0;
8874              
8875              
8876 21 50       59 Parse::RecDescent::_trace(q{Trying subrule: [note]},
8877             Parse::RecDescent::_tracefirst($text),
8878             q{_alternation_1_of_production_1_of_rule_form_spec},
8879             $tracelevel)
8880             if defined $::RD_TRACE;
8881 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         807  
  21         37  
8882 21         65 $expectation->is(q{})->at($text);
8883 21 50   21   263 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::note($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         54  
8884             {
8885            
8886 21 50       47 Parse::RecDescent::_trace(q{<>},
8887             Parse::RecDescent::_tracefirst($text),
8888             q{_alternation_1_of_production_1_of_rule_form_spec},
8889             $tracelevel)
8890             if defined $::RD_TRACE;
8891 21         70 $expectation->failed();
8892 21         85 last;
8893             }
8894 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [note]<< (return value: [}
8895             . $_tok . q{]},
8896              
8897             Parse::RecDescent::_tracefirst($text),
8898             q{_alternation_1_of_production_1_of_rule_form_spec},
8899             $tracelevel)
8900             if defined $::RD_TRACE;
8901 0         0 $item{q{note}} = $_tok;
8902 0         0 push @item, $_tok;
8903            
8904             }
8905              
8906 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [note]<<},
8907             Parse::RecDescent::_tracefirst($text),
8908             q{_alternation_1_of_production_1_of_rule_form_spec},
8909             $tracelevel)
8910             if defined $::RD_TRACE;
8911              
8912              
8913              
8914 0         0 $_matched = 1;
8915 0         0 last;
8916             }
8917              
8918              
8919 21   33     126 while (!$_matched && !$commit)
8920             {
8921            
8922 21 50       60 Parse::RecDescent::_trace(q{Trying production: [fb_params]},
8923             Parse::RecDescent::_tracefirst($_[1]),
8924             q{_alternation_1_of_production_1_of_rule_form_spec},
8925             $tracelevel)
8926             if defined $::RD_TRACE;
8927 21         58 my $thisprod = $thisrule->{"prods"}[4];
8928 21         41 $text = $_[1];
8929 21         34 my $_savetext;
8930 21         57 @item = (q{_alternation_1_of_production_1_of_rule_form_spec});
8931 21         71 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_form_spec});
8932 21         32 my $repcount = 0;
8933              
8934              
8935 21 50       54 Parse::RecDescent::_trace(q{Trying subrule: [fb_params]},
8936             Parse::RecDescent::_tracefirst($text),
8937             q{_alternation_1_of_production_1_of_rule_form_spec},
8938             $tracelevel)
8939             if defined $::RD_TRACE;
8940 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         1002  
  21         39  
8941 21         81 $expectation->is(q{})->at($text);
8942 21 50   21   258 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::fb_params($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         57  
8943             {
8944            
8945 21 50       52 Parse::RecDescent::_trace(q{<>},
8946             Parse::RecDescent::_tracefirst($text),
8947             q{_alternation_1_of_production_1_of_rule_form_spec},
8948             $tracelevel)
8949             if defined $::RD_TRACE;
8950 21         73 $expectation->failed();
8951 21         94 last;
8952             }
8953 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [fb_params]<< (return value: [}
8954             . $_tok . q{]},
8955              
8956             Parse::RecDescent::_tracefirst($text),
8957             q{_alternation_1_of_production_1_of_rule_form_spec},
8958             $tracelevel)
8959             if defined $::RD_TRACE;
8960 0         0 $item{q{fb_params}} = $_tok;
8961 0         0 push @item, $_tok;
8962            
8963             }
8964              
8965 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [fb_params]<<},
8966             Parse::RecDescent::_tracefirst($text),
8967             q{_alternation_1_of_production_1_of_rule_form_spec},
8968             $tracelevel)
8969             if defined $::RD_TRACE;
8970              
8971              
8972              
8973 0         0 $_matched = 1;
8974 0         0 last;
8975             }
8976              
8977              
8978 21   33     142 while (!$_matched && !$commit)
8979             {
8980            
8981 21 50       59 Parse::RecDescent::_trace(q{Trying production: [unknown_block_directive]},
8982             Parse::RecDescent::_tracefirst($_[1]),
8983             q{_alternation_1_of_production_1_of_rule_form_spec},
8984             $tracelevel)
8985             if defined $::RD_TRACE;
8986 21         55 my $thisprod = $thisrule->{"prods"}[5];
8987 21         33 $text = $_[1];
8988 21         32 my $_savetext;
8989 21         64 @item = (q{_alternation_1_of_production_1_of_rule_form_spec});
8990 21         49 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_form_spec});
8991 21         63 my $repcount = 0;
8992              
8993              
8994 21 50       54 Parse::RecDescent::_trace(q{Trying subrule: [unknown_block_directive]},
8995             Parse::RecDescent::_tracefirst($text),
8996             q{_alternation_1_of_production_1_of_rule_form_spec},
8997             $tracelevel)
8998             if defined $::RD_TRACE;
8999 2     2   13 if (1) { no strict qw{refs};
  2         4  
  2         979  
  21         30  
9000 21         65 $expectation->is(q{})->at($text);
9001 21 50   21   267 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::unknown_block_directive($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         63  
9002             {
9003            
9004 21 50       51 Parse::RecDescent::_trace(q{<>},
9005             Parse::RecDescent::_tracefirst($text),
9006             q{_alternation_1_of_production_1_of_rule_form_spec},
9007             $tracelevel)
9008             if defined $::RD_TRACE;
9009 21         68 $expectation->failed();
9010 21         77 last;
9011             }
9012 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [unknown_block_directive]<< (return value: [}
9013             . $_tok . q{]},
9014              
9015             Parse::RecDescent::_tracefirst($text),
9016             q{_alternation_1_of_production_1_of_rule_form_spec},
9017             $tracelevel)
9018             if defined $::RD_TRACE;
9019 0         0 $item{q{unknown_block_directive}} = $_tok;
9020 0         0 push @item, $_tok;
9021            
9022             }
9023              
9024 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [unknown_block_directive]<<},
9025             Parse::RecDescent::_tracefirst($text),
9026             q{_alternation_1_of_production_1_of_rule_form_spec},
9027             $tracelevel)
9028             if defined $::RD_TRACE;
9029              
9030              
9031              
9032 0         0 $_matched = 1;
9033 0         0 last;
9034             }
9035              
9036              
9037 21   33     132 while (!$_matched && !$commit)
9038             {
9039            
9040 21 50       63 Parse::RecDescent::_trace(q{Trying production: [line]},
9041             Parse::RecDescent::_tracefirst($_[1]),
9042             q{_alternation_1_of_production_1_of_rule_form_spec},
9043             $tracelevel)
9044             if defined $::RD_TRACE;
9045 21         55 my $thisprod = $thisrule->{"prods"}[6];
9046 21         215 $text = $_[1];
9047 21         40 my $_savetext;
9048 21         58 @item = (q{_alternation_1_of_production_1_of_rule_form_spec});
9049 21         53 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_form_spec});
9050 21         55 my $repcount = 0;
9051              
9052              
9053 21 50       56 Parse::RecDescent::_trace(q{Trying subrule: [line]},
9054             Parse::RecDescent::_tracefirst($text),
9055             q{_alternation_1_of_production_1_of_rule_form_spec},
9056             $tracelevel)
9057             if defined $::RD_TRACE;
9058 2     2   14 if (1) { no strict qw{refs};
  2         5  
  2         1616  
  21         25  
9059 21         70 $expectation->is(q{})->at($text);
9060 21 100   21   248 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::line($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  21         54  
9061             {
9062            
9063 7 50       20 Parse::RecDescent::_trace(q{<>},
9064             Parse::RecDescent::_tracefirst($text),
9065             q{_alternation_1_of_production_1_of_rule_form_spec},
9066             $tracelevel)
9067             if defined $::RD_TRACE;
9068 7         28 $expectation->failed();
9069 7         30 last;
9070             }
9071 14 50       81 Parse::RecDescent::_trace(q{>>Matched subrule: [line]<< (return value: [}
9072             . $_tok . q{]},
9073              
9074             Parse::RecDescent::_tracefirst($text),
9075             q{_alternation_1_of_production_1_of_rule_form_spec},
9076             $tracelevel)
9077             if defined $::RD_TRACE;
9078 14         45 $item{q{line}} = $_tok;
9079 14         41 push @item, $_tok;
9080            
9081             }
9082              
9083 14 50       37 Parse::RecDescent::_trace(q{>>Matched production: [line]<<},
9084             Parse::RecDescent::_tracefirst($text),
9085             q{_alternation_1_of_production_1_of_rule_form_spec},
9086             $tracelevel)
9087             if defined $::RD_TRACE;
9088              
9089              
9090              
9091 14         23 $_matched = 1;
9092 14         33 last;
9093             }
9094              
9095              
9096 21 100 66     102 unless ( $_matched || defined($score) )
9097             {
9098            
9099              
9100 7         15 $_[1] = $text; # NOT SURE THIS IS NEEDED
9101 7 50       21 Parse::RecDescent::_trace(q{<>},
9102             Parse::RecDescent::_tracefirst($_[1]),
9103             q{_alternation_1_of_production_1_of_rule_form_spec},
9104             $tracelevel)
9105             if defined $::RD_TRACE;
9106 7         66 return undef;
9107             }
9108 14 50 33     75 if (!defined($return) && defined($score))
9109             {
9110 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9111             q{_alternation_1_of_production_1_of_rule_form_spec},
9112             $tracelevel)
9113             if defined $::RD_TRACE;
9114 0         0 $return = $score_return;
9115             }
9116 14         25 splice @{$thisparser->{errors}}, $err_at;
  14         33  
9117 14 50       47 $return = $item[$#item] unless defined $return;
9118 14 50       41 if (defined $::RD_TRACE)
9119             {
9120 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9121             $return . q{])}, "",
9122             q{_alternation_1_of_production_1_of_rule_form_spec},
9123             $tracelevel);
9124 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9125             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9126             Parse::RecDescent::_tracefirst($text),
9127             , q{_alternation_1_of_production_1_of_rule_form_spec},
9128             $tracelevel)
9129             }
9130 14         31 $_[1] = $text;
9131 14         147 return $return;
9132             }
9133              
9134             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9135             sub Parse::RecDescent::Text::FormBuilder::Parser::value
9136             {
9137 0     0   0 my $thisparser = $_[0];
9138 2     2   14 use vars q{$tracelevel};
  2         4  
  2         923  
9139 0   0     0 local $tracelevel = ($tracelevel||0)+1;
9140 0         0 $ERRORS = 0;
9141 0         0 my $thisrule = $thisparser->{"rules"}{"value"};
9142              
9143 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [value]},
9144             Parse::RecDescent::_tracefirst($_[1]),
9145             q{value},
9146             $tracelevel)
9147             if defined $::RD_TRACE;
9148              
9149            
9150 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
9151              
9152 0         0 my $score;
9153             my $score_return;
9154 0         0 my $_tok;
9155 0         0 my $return = undef;
9156 0         0 my $_matched=0;
9157 0         0 my $commit=0;
9158 0         0 my @item = ();
9159 0         0 my %item = ();
9160 0         0 my $repeating = $_[2];
9161 0         0 my $_noactions = $_[3];
9162 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
9163 0         0 my $_itempos = $_[5];
9164 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9165 0         0 my $text;
9166             my $lastsep;
9167 0         0 my $current_match;
9168 0         0 my $expectation = new Parse::RecDescent::Expectation(q{identifier});
9169 0         0 $expectation->at($_[1]);
9170            
9171 0         0 my $thisline;
9172 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9173              
9174            
9175              
9176 0   0     0 while (!$_matched && !$commit)
9177             {
9178            
9179 0 0       0 Parse::RecDescent::_trace(q{Trying production: [identifier]},
9180             Parse::RecDescent::_tracefirst($_[1]),
9181             q{value},
9182             $tracelevel)
9183             if defined $::RD_TRACE;
9184 0         0 my $thisprod = $thisrule->{"prods"}[0];
9185 0         0 $text = $_[1];
9186 0         0 my $_savetext;
9187 0         0 @item = (q{value});
9188 0         0 %item = (__RULE__ => q{value});
9189 0         0 my $repcount = 0;
9190              
9191              
9192 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
9193             Parse::RecDescent::_tracefirst($text),
9194             q{value},
9195             $tracelevel)
9196             if defined $::RD_TRACE;
9197 2     2   13 if (1) { no strict qw{refs};
  2         4  
  2         1246  
  0         0  
9198 0         0 $expectation->is(q{})->at($text);
9199 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
9200             {
9201            
9202 0 0       0 Parse::RecDescent::_trace(q{<>},
9203             Parse::RecDescent::_tracefirst($text),
9204             q{value},
9205             $tracelevel)
9206             if defined $::RD_TRACE;
9207 0         0 $expectation->failed();
9208 0         0 last;
9209             }
9210 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
9211             . $_tok . q{]},
9212              
9213             Parse::RecDescent::_tracefirst($text),
9214             q{value},
9215             $tracelevel)
9216             if defined $::RD_TRACE;
9217 0         0 $item{q{identifier}} = $_tok;
9218 0         0 push @item, $_tok;
9219            
9220             }
9221              
9222 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [identifier]<<},
9223             Parse::RecDescent::_tracefirst($text),
9224             q{value},
9225             $tracelevel)
9226             if defined $::RD_TRACE;
9227              
9228              
9229              
9230 0         0 $_matched = 1;
9231 0         0 last;
9232             }
9233              
9234              
9235 0 0 0     0 unless ( $_matched || defined($score) )
9236             {
9237            
9238              
9239 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
9240 0 0       0 Parse::RecDescent::_trace(q{<>},
9241             Parse::RecDescent::_tracefirst($_[1]),
9242             q{value},
9243             $tracelevel)
9244             if defined $::RD_TRACE;
9245 0         0 return undef;
9246             }
9247 0 0 0     0 if (!defined($return) && defined($score))
9248             {
9249 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9250             q{value},
9251             $tracelevel)
9252             if defined $::RD_TRACE;
9253 0         0 $return = $score_return;
9254             }
9255 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
9256 0 0       0 $return = $item[$#item] unless defined $return;
9257 0 0       0 if (defined $::RD_TRACE)
9258             {
9259 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9260             $return . q{])}, "",
9261             q{value},
9262             $tracelevel);
9263 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9264             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9265             Parse::RecDescent::_tracefirst($text),
9266             , q{value},
9267             $tracelevel)
9268             }
9269 0         0 $_[1] = $text;
9270 0         0 return $return;
9271             }
9272              
9273             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9274             sub Parse::RecDescent::Text::FormBuilder::Parser::submit
9275             {
9276 21     21   51 my $thisparser = $_[0];
9277 2     2   16 use vars q{$tracelevel};
  2         4  
  2         2202  
9278 21   50     69 local $tracelevel = ($tracelevel||0)+1;
9279 21         37 $ERRORS = 0;
9280 21         57 my $thisrule = $thisparser->{"rules"}{"submit"};
9281              
9282 21 50       56 Parse::RecDescent::_trace(q{Trying rule: [submit]},
9283             Parse::RecDescent::_tracefirst($_[1]),
9284             q{submit},
9285             $tracelevel)
9286             if defined $::RD_TRACE;
9287              
9288            
9289 21         28 my $err_at = @{$thisparser->{errors}};
  21         69  
9290              
9291 21         43 my $score;
9292             my $score_return;
9293 0         0 my $_tok;
9294 21         27 my $return = undef;
9295 21         32 my $_matched=0;
9296 21         26 my $commit=0;
9297 21         41 my @item = ();
9298 21         44 my %item = ();
9299 21         32 my $repeating = $_[2];
9300 21         43 my $_noactions = $_[3];
9301 21 50       60 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         36  
  21         46  
9302 21         40 my $_itempos = $_[5];
9303 21 50       70 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9304 21         32 my $text;
9305             my $lastsep;
9306 0         0 my $current_match;
9307 21         87 my $expectation = new Parse::RecDescent::Expectation(q{'!submit'});
9308 21         189 $expectation->at($_[1]);
9309            
9310 21         92 my $thisline;
9311 21         90 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9312              
9313            
9314              
9315 21   33     264 while (!$_matched && !$commit)
9316             {
9317            
9318 21 50       67 Parse::RecDescent::_trace(q{Trying production: ['!submit' ]},
9319             Parse::RecDescent::_tracefirst($_[1]),
9320             q{submit},
9321             $tracelevel)
9322             if defined $::RD_TRACE;
9323 21         66 my $thisprod = $thisrule->{"prods"}[0];
9324 21         36 $text = $_[1];
9325 21         30 my $_savetext;
9326 21         54 @item = (q{submit});
9327 21         57 %item = (__RULE__ => q{submit});
9328 21         32 my $repcount = 0;
9329              
9330              
9331 21 50       53 Parse::RecDescent::_trace(q{Trying terminal: ['!submit']},
9332             Parse::RecDescent::_tracefirst($text),
9333             q{submit},
9334             $tracelevel)
9335             if defined $::RD_TRACE;
9336 21         37 undef $lastsep;
9337 21         67 $expectation->is(q{})->at($text);
9338            
9339              
9340 21 50 33     248 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!submit/)
  21 50       209  
9341             {
9342 21 50       74 $text = $lastsep . $text if defined $lastsep;
9343            
9344 21         77 $expectation->failed();
9345 21 50       103 Parse::RecDescent::_trace(qq{<>},
9346             Parse::RecDescent::_tracefirst($text))
9347             if defined $::RD_TRACE;
9348 21         53 last;
9349             }
9350 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
9351 0         0 substr($text,0,length($current_match),q{});
9352 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
9353             . $current_match . q{])},
9354             Parse::RecDescent::_tracefirst($text))
9355             if defined $::RD_TRACE;
9356 0         0 push @item, $item{__STRING1__}=$current_match;
9357            
9358              
9359 0 0       0 Parse::RecDescent::_trace(q{Trying operator: []},
9360             Parse::RecDescent::_tracefirst($text),
9361             q{submit},
9362             $tracelevel)
9363             if defined $::RD_TRACE;
9364 0         0 $expectation->is(q{})->at($text);
9365              
9366 0         0 $_tok = undef;
9367 0         0 OPLOOP: while (1)
9368             {
9369 0         0 $repcount = 0;
9370 0         0 my @item;
9371             my %item;
9372              
9373             # MATCH LEFTARG
9374            
9375 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [string]},
9376             Parse::RecDescent::_tracefirst($text),
9377             q{submit},
9378             $tracelevel)
9379             if defined $::RD_TRACE;
9380 2     2   15 if (1) { no strict qw{refs};
  2         10  
  2         1203  
  0         0  
9381 0         0 $expectation->is(q{string})->at($text);
9382 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
9383             {
9384            
9385 0 0       0 Parse::RecDescent::_trace(q{<>},
9386             Parse::RecDescent::_tracefirst($text),
9387             q{submit},
9388             $tracelevel)
9389             if defined $::RD_TRACE;
9390 0         0 $expectation->failed();
9391 0         0 last;
9392             }
9393 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [string]<< (return value: [}
9394             . $_tok . q{]},
9395              
9396             Parse::RecDescent::_tracefirst($text),
9397             q{submit},
9398             $tracelevel)
9399             if defined $::RD_TRACE;
9400 0         0 $item{q{string}} = $_tok;
9401 0         0 push @item, $_tok;
9402            
9403             }
9404              
9405              
9406              
9407 0         0 $repcount++;
9408              
9409 0         0 my $savetext = $text;
9410 0         0 my $backtrack;
9411              
9412             # MATCH (OP RIGHTARG)(s)
9413 0         0 while ($repcount < 100000000)
9414             {
9415 0         0 $backtrack = 0;
9416            
9417 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/\\s*,\\s*/]}, Parse::RecDescent::_tracefirst($text),
9418             q{submit},
9419             $tracelevel)
9420             if defined $::RD_TRACE;
9421 0         0 undef $lastsep;
9422 0         0 $expectation->is(q{/\\s*,\\s*/})->at($text);
9423            
9424              
9425 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\s*,\s*)/)
  0 0       0  
9426             {
9427 0 0       0 $text = $lastsep . $text if defined $lastsep;
9428 0         0 $expectation->failed();
9429 0 0       0 Parse::RecDescent::_trace(q{<>},
9430             Parse::RecDescent::_tracefirst($text))
9431             if defined $::RD_TRACE;
9432              
9433 0         0 last;
9434             }
9435 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
9436 0         0 substr($text,0,length($current_match),q{});
9437 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
9438             . $current_match . q{])},
9439             Parse::RecDescent::_tracefirst($text))
9440             if defined $::RD_TRACE;
9441 0         0 push @item, $item{__PATTERN1__}=$current_match;
9442            
9443              
9444 0         0 pop @item;
9445 0 0       0 if (defined $1) {push @item, $item{'string(s)'}=$1; $backtrack=1;}
  0         0  
  0         0  
9446            
9447 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [string]},
9448             Parse::RecDescent::_tracefirst($text),
9449             q{submit},
9450             $tracelevel)
9451             if defined $::RD_TRACE;
9452 2     2   45 if (1) { no strict qw{refs};
  2         5  
  2         2164  
  0         0  
9453 0         0 $expectation->is(q{string})->at($text);
9454 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
9455             {
9456            
9457 0 0       0 Parse::RecDescent::_trace(q{<>},
9458             Parse::RecDescent::_tracefirst($text),
9459             q{submit},
9460             $tracelevel)
9461             if defined $::RD_TRACE;
9462 0         0 $expectation->failed();
9463 0         0 last;
9464             }
9465 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [string]<< (return value: [}
9466             . $_tok . q{]},
9467              
9468             Parse::RecDescent::_tracefirst($text),
9469             q{submit},
9470             $tracelevel)
9471             if defined $::RD_TRACE;
9472 0         0 $item{q{string}} = $_tok;
9473 0         0 push @item, $_tok;
9474            
9475             }
9476              
9477 0         0 $savetext = $text;
9478 0         0 $repcount++;
9479             }
9480 0         0 $text = $savetext;
9481 0 0       0 pop @item if $backtrack;
9482              
9483 0 0       0 unless (@item) { undef $_tok; last }
  0         0  
  0         0  
9484 0         0 $_tok = [ @item ];
9485              
9486 0         0 last;
9487             } # end of OPLOOP
9488              
9489 0 0       0 unless ($repcount>=1)
9490             {
9491 0 0       0 Parse::RecDescent::_trace(q{<]>>},
9492             Parse::RecDescent::_tracefirst($text),
9493             q{submit},
9494             $tracelevel)
9495             if defined $::RD_TRACE;
9496 0         0 $expectation->failed();
9497 0         0 last;
9498             }
9499 0 0       0 Parse::RecDescent::_trace(q{>>Matched operator: []<< (return value: [}
9500 0 0       0 . qq{@{$_tok||[]}} . q{]},
9501             Parse::RecDescent::_tracefirst($text),
9502             q{submit},
9503             $tracelevel)
9504             if defined $::RD_TRACE;
9505              
9506 0   0     0 push @item, $item{'string(s)'}=$_tok||[];
9507              
9508 0 0       0 Parse::RecDescent::_trace(q{Trying action},
9509             Parse::RecDescent::_tracefirst($text),
9510             q{submit},
9511             $tracelevel)
9512             if defined $::RD_TRACE;
9513            
9514              
9515 0 0       0 $_tok = ($_noactions) ? 0 : do {
9516             #warn scalar(@{ $item[2] }) . ' submit button(s)';
9517 0         0 push @submit, @{ $item[2] };
  0         0  
9518             };
9519 0 0       0 unless (defined $_tok)
9520             {
9521 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
9522             if defined $::RD_TRACE;
9523 0         0 last;
9524             }
9525 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
9526             . $_tok . q{])},
9527             Parse::RecDescent::_tracefirst($text))
9528             if defined $::RD_TRACE;
9529 0         0 push @item, $_tok;
9530 0         0 $item{__ACTION1__}=$_tok;
9531            
9532              
9533 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!submit' ]<<},
9534             Parse::RecDescent::_tracefirst($text),
9535             q{submit},
9536             $tracelevel)
9537             if defined $::RD_TRACE;
9538              
9539              
9540              
9541 0         0 $_matched = 1;
9542 0         0 last;
9543             }
9544              
9545              
9546 21 50 33     117 unless ( $_matched || defined($score) )
9547             {
9548            
9549              
9550 21         41 $_[1] = $text; # NOT SURE THIS IS NEEDED
9551 21 50       58 Parse::RecDescent::_trace(q{<>},
9552             Parse::RecDescent::_tracefirst($_[1]),
9553             q{submit},
9554             $tracelevel)
9555             if defined $::RD_TRACE;
9556 21         156 return undef;
9557             }
9558 0 0 0     0 if (!defined($return) && defined($score))
9559             {
9560 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9561             q{submit},
9562             $tracelevel)
9563             if defined $::RD_TRACE;
9564 0         0 $return = $score_return;
9565             }
9566 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
9567 0 0       0 $return = $item[$#item] unless defined $return;
9568 0 0       0 if (defined $::RD_TRACE)
9569             {
9570 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9571             $return . q{])}, "",
9572             q{submit},
9573             $tracelevel);
9574 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9575             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9576             Parse::RecDescent::_tracefirst($text),
9577             , q{submit},
9578             $tracelevel)
9579             }
9580 0         0 $_[1] = $text;
9581 0         0 return $return;
9582             }
9583              
9584             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9585             sub Parse::RecDescent::Text::FormBuilder::Parser::bracket_block_content
9586             {
9587 0     0   0 my $thisparser = $_[0];
9588 2     2   17 use vars q{$tracelevel};
  2         4  
  2         2511  
9589 0   0     0 local $tracelevel = ($tracelevel||0)+1;
9590 0         0 $ERRORS = 0;
9591 0         0 my $thisrule = $thisparser->{"rules"}{"bracket_block_content"};
9592              
9593 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [bracket_block_content]},
9594             Parse::RecDescent::_tracefirst($_[1]),
9595             q{bracket_block_content},
9596             $tracelevel)
9597             if defined $::RD_TRACE;
9598              
9599            
9600 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
9601              
9602 0         0 my $score;
9603             my $score_return;
9604 0         0 my $_tok;
9605 0         0 my $return = undef;
9606 0         0 my $_matched=0;
9607 0         0 my $commit=0;
9608 0         0 my @item = ();
9609 0         0 my %item = ();
9610 0         0 my $repeating = $_[2];
9611 0         0 my $_noactions = $_[3];
9612 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
9613 0         0 my $_itempos = $_[5];
9614 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9615 0         0 my $text;
9616             my $lastsep;
9617 0         0 my $current_match;
9618 0         0 my $expectation = new Parse::RecDescent::Expectation(q{/[^\\[\\]]+?/, or inner_bracket_block});
9619 0         0 $expectation->at($_[1]);
9620            
9621 0         0 my $thisline;
9622 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9623              
9624            
9625              
9626 0   0     0 while (!$_matched && !$commit)
9627             {
9628            
9629 0 0       0 Parse::RecDescent::_trace(q{Trying production: [/[^\\[\\]]+?/]},
9630             Parse::RecDescent::_tracefirst($_[1]),
9631             q{bracket_block_content},
9632             $tracelevel)
9633             if defined $::RD_TRACE;
9634 0         0 my $thisprod = $thisrule->{"prods"}[0];
9635 0         0 $text = $_[1];
9636 0         0 my $_savetext;
9637 0         0 @item = (q{bracket_block_content});
9638 0         0 %item = (__RULE__ => q{bracket_block_content});
9639 0         0 my $repcount = 0;
9640              
9641              
9642 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/[^\\[\\]]+?/]}, Parse::RecDescent::_tracefirst($text),
9643             q{bracket_block_content},
9644             $tracelevel)
9645             if defined $::RD_TRACE;
9646 0         0 undef $lastsep;
9647 0         0 $expectation->is(q{})->at($text);
9648            
9649              
9650 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[^\[\]]+?)/)
  0 0       0  
9651             {
9652 0 0       0 $text = $lastsep . $text if defined $lastsep;
9653 0         0 $expectation->failed();
9654 0 0       0 Parse::RecDescent::_trace(q{<>},
9655             Parse::RecDescent::_tracefirst($text))
9656             if defined $::RD_TRACE;
9657              
9658 0         0 last;
9659             }
9660 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
9661 0         0 substr($text,0,length($current_match),q{});
9662 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
9663             . $current_match . q{])},
9664             Parse::RecDescent::_tracefirst($text))
9665             if defined $::RD_TRACE;
9666 0         0 push @item, $item{__PATTERN1__}=$current_match;
9667            
9668              
9669 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/[^\\[\\]]+?/]<<},
9670             Parse::RecDescent::_tracefirst($text),
9671             q{bracket_block_content},
9672             $tracelevel)
9673             if defined $::RD_TRACE;
9674              
9675              
9676              
9677 0         0 $_matched = 1;
9678 0         0 last;
9679             }
9680              
9681              
9682 0   0     0 while (!$_matched && !$commit)
9683             {
9684            
9685 0 0       0 Parse::RecDescent::_trace(q{Trying production: [inner_bracket_block]},
9686             Parse::RecDescent::_tracefirst($_[1]),
9687             q{bracket_block_content},
9688             $tracelevel)
9689             if defined $::RD_TRACE;
9690 0         0 my $thisprod = $thisrule->{"prods"}[1];
9691 0         0 $text = $_[1];
9692 0         0 my $_savetext;
9693 0         0 @item = (q{bracket_block_content});
9694 0         0 %item = (__RULE__ => q{bracket_block_content});
9695 0         0 my $repcount = 0;
9696              
9697              
9698 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [inner_bracket_block]},
9699             Parse::RecDescent::_tracefirst($text),
9700             q{bracket_block_content},
9701             $tracelevel)
9702             if defined $::RD_TRACE;
9703 2     2   16 if (1) { no strict qw{refs};
  2         3  
  2         1454  
  0         0  
9704 0         0 $expectation->is(q{})->at($text);
9705 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::inner_bracket_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
9706             {
9707            
9708 0 0       0 Parse::RecDescent::_trace(q{<>},
9709             Parse::RecDescent::_tracefirst($text),
9710             q{bracket_block_content},
9711             $tracelevel)
9712             if defined $::RD_TRACE;
9713 0         0 $expectation->failed();
9714 0         0 last;
9715             }
9716 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [inner_bracket_block]<< (return value: [}
9717             . $_tok . q{]},
9718              
9719             Parse::RecDescent::_tracefirst($text),
9720             q{bracket_block_content},
9721             $tracelevel)
9722             if defined $::RD_TRACE;
9723 0         0 $item{q{inner_bracket_block}} = $_tok;
9724 0         0 push @item, $_tok;
9725            
9726             }
9727              
9728 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [inner_bracket_block]<<},
9729             Parse::RecDescent::_tracefirst($text),
9730             q{bracket_block_content},
9731             $tracelevel)
9732             if defined $::RD_TRACE;
9733              
9734              
9735              
9736 0         0 $_matched = 1;
9737 0         0 last;
9738             }
9739              
9740              
9741 0 0 0     0 unless ( $_matched || defined($score) )
9742             {
9743            
9744              
9745 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
9746 0 0       0 Parse::RecDescent::_trace(q{<>},
9747             Parse::RecDescent::_tracefirst($_[1]),
9748             q{bracket_block_content},
9749             $tracelevel)
9750             if defined $::RD_TRACE;
9751 0         0 return undef;
9752             }
9753 0 0 0     0 if (!defined($return) && defined($score))
9754             {
9755 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9756             q{bracket_block_content},
9757             $tracelevel)
9758             if defined $::RD_TRACE;
9759 0         0 $return = $score_return;
9760             }
9761 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
9762 0 0       0 $return = $item[$#item] unless defined $return;
9763 0 0       0 if (defined $::RD_TRACE)
9764             {
9765 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9766             $return . q{])}, "",
9767             q{bracket_block_content},
9768             $tracelevel);
9769 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9770             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9771             Parse::RecDescent::_tracefirst($text),
9772             , q{bracket_block_content},
9773             $tracelevel)
9774             }
9775 0         0 $_[1] = $text;
9776 0         0 return $return;
9777             }
9778              
9779             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9780             sub Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_list_def
9781             {
9782 0     0   0 my $thisparser = $_[0];
9783 2     2   68 use vars q{$tracelevel};
  2         4  
  2         1005  
9784 0   0     0 local $tracelevel = ($tracelevel||0)+1;
9785 0         0 $ERRORS = 0;
9786 0         0 my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_list_def"};
9787              
9788 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_list_def]},
9789             Parse::RecDescent::_tracefirst($_[1]),
9790             q{_alternation_1_of_production_1_of_rule_list_def},
9791             $tracelevel)
9792             if defined $::RD_TRACE;
9793              
9794            
9795 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
9796              
9797 0         0 my $score;
9798             my $score_return;
9799 0         0 my $_tok;
9800 0         0 my $return = undef;
9801 0         0 my $_matched=0;
9802 0         0 my $commit=0;
9803 0         0 my @item = ();
9804 0         0 my %item = ();
9805 0         0 my $repeating = $_[2];
9806 0         0 my $_noactions = $_[3];
9807 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
9808 0         0 my $_itempos = $_[5];
9809 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
9810 0         0 my $text;
9811             my $lastsep;
9812 0         0 my $current_match;
9813 0         0 my $expectation = new Parse::RecDescent::Expectation(q{static_list, or dynamic_list});
9814 0         0 $expectation->at($_[1]);
9815            
9816 0         0 my $thisline;
9817 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
9818              
9819            
9820              
9821 0   0     0 while (!$_matched && !$commit)
9822             {
9823            
9824 0 0       0 Parse::RecDescent::_trace(q{Trying production: [static_list]},
9825             Parse::RecDescent::_tracefirst($_[1]),
9826             q{_alternation_1_of_production_1_of_rule_list_def},
9827             $tracelevel)
9828             if defined $::RD_TRACE;
9829 0         0 my $thisprod = $thisrule->{"prods"}[0];
9830 0         0 $text = $_[1];
9831 0         0 my $_savetext;
9832 0         0 @item = (q{_alternation_1_of_production_1_of_rule_list_def});
9833 0         0 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_list_def});
9834 0         0 my $repcount = 0;
9835              
9836              
9837 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [static_list]},
9838             Parse::RecDescent::_tracefirst($text),
9839             q{_alternation_1_of_production_1_of_rule_list_def},
9840             $tracelevel)
9841             if defined $::RD_TRACE;
9842 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         758  
  0         0  
9843 0         0 $expectation->is(q{})->at($text);
9844 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::static_list($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
9845             {
9846            
9847 0 0       0 Parse::RecDescent::_trace(q{<>},
9848             Parse::RecDescent::_tracefirst($text),
9849             q{_alternation_1_of_production_1_of_rule_list_def},
9850             $tracelevel)
9851             if defined $::RD_TRACE;
9852 0         0 $expectation->failed();
9853 0         0 last;
9854             }
9855 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [static_list]<< (return value: [}
9856             . $_tok . q{]},
9857              
9858             Parse::RecDescent::_tracefirst($text),
9859             q{_alternation_1_of_production_1_of_rule_list_def},
9860             $tracelevel)
9861             if defined $::RD_TRACE;
9862 0         0 $item{q{static_list}} = $_tok;
9863 0         0 push @item, $_tok;
9864            
9865             }
9866              
9867 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [static_list]<<},
9868             Parse::RecDescent::_tracefirst($text),
9869             q{_alternation_1_of_production_1_of_rule_list_def},
9870             $tracelevel)
9871             if defined $::RD_TRACE;
9872              
9873              
9874              
9875 0         0 $_matched = 1;
9876 0         0 last;
9877             }
9878              
9879              
9880 0   0     0 while (!$_matched && !$commit)
9881             {
9882            
9883 0 0       0 Parse::RecDescent::_trace(q{Trying production: [dynamic_list]},
9884             Parse::RecDescent::_tracefirst($_[1]),
9885             q{_alternation_1_of_production_1_of_rule_list_def},
9886             $tracelevel)
9887             if defined $::RD_TRACE;
9888 0         0 my $thisprod = $thisrule->{"prods"}[1];
9889 0         0 $text = $_[1];
9890 0         0 my $_savetext;
9891 0         0 @item = (q{_alternation_1_of_production_1_of_rule_list_def});
9892 0         0 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_list_def});
9893 0         0 my $repcount = 0;
9894              
9895              
9896 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [dynamic_list]},
9897             Parse::RecDescent::_tracefirst($text),
9898             q{_alternation_1_of_production_1_of_rule_list_def},
9899             $tracelevel)
9900             if defined $::RD_TRACE;
9901 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         1289  
  0         0  
9902 0         0 $expectation->is(q{})->at($text);
9903 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::dynamic_list($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
9904             {
9905            
9906 0 0       0 Parse::RecDescent::_trace(q{<>},
9907             Parse::RecDescent::_tracefirst($text),
9908             q{_alternation_1_of_production_1_of_rule_list_def},
9909             $tracelevel)
9910             if defined $::RD_TRACE;
9911 0         0 $expectation->failed();
9912 0         0 last;
9913             }
9914 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [dynamic_list]<< (return value: [}
9915             . $_tok . q{]},
9916              
9917             Parse::RecDescent::_tracefirst($text),
9918             q{_alternation_1_of_production_1_of_rule_list_def},
9919             $tracelevel)
9920             if defined $::RD_TRACE;
9921 0         0 $item{q{dynamic_list}} = $_tok;
9922 0         0 push @item, $_tok;
9923            
9924             }
9925              
9926 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [dynamic_list]<<},
9927             Parse::RecDescent::_tracefirst($text),
9928             q{_alternation_1_of_production_1_of_rule_list_def},
9929             $tracelevel)
9930             if defined $::RD_TRACE;
9931              
9932              
9933              
9934 0         0 $_matched = 1;
9935 0         0 last;
9936             }
9937              
9938              
9939 0 0 0     0 unless ( $_matched || defined($score) )
9940             {
9941            
9942              
9943 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
9944 0 0       0 Parse::RecDescent::_trace(q{<>},
9945             Parse::RecDescent::_tracefirst($_[1]),
9946             q{_alternation_1_of_production_1_of_rule_list_def},
9947             $tracelevel)
9948             if defined $::RD_TRACE;
9949 0         0 return undef;
9950             }
9951 0 0 0     0 if (!defined($return) && defined($score))
9952             {
9953 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
9954             q{_alternation_1_of_production_1_of_rule_list_def},
9955             $tracelevel)
9956             if defined $::RD_TRACE;
9957 0         0 $return = $score_return;
9958             }
9959 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
9960 0 0       0 $return = $item[$#item] unless defined $return;
9961 0 0       0 if (defined $::RD_TRACE)
9962             {
9963 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
9964             $return . q{])}, "",
9965             q{_alternation_1_of_production_1_of_rule_list_def},
9966             $tracelevel);
9967 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
9968             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
9969             Parse::RecDescent::_tracefirst($text),
9970             , q{_alternation_1_of_production_1_of_rule_list_def},
9971             $tracelevel)
9972             }
9973 0         0 $_[1] = $text;
9974 0         0 return $return;
9975             }
9976              
9977             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
9978             sub Parse::RecDescent::Text::FormBuilder::Parser::row_col
9979             {
9980 3     3   7 my $thisparser = $_[0];
9981 2     2   14 use vars q{$tracelevel};
  2         5  
  2         3933  
9982 3   50     11 local $tracelevel = ($tracelevel||0)+1;
9983 3         7 $ERRORS = 0;
9984 3         9 my $thisrule = $thisparser->{"rules"}{"row_col"};
9985              
9986 3 50       9 Parse::RecDescent::_trace(q{Trying rule: [row_col]},
9987             Parse::RecDescent::_tracefirst($_[1]),
9988             q{row_col},
9989             $tracelevel)
9990             if defined $::RD_TRACE;
9991              
9992            
9993 3         6 my $err_at = @{$thisparser->{errors}};
  3         8  
9994              
9995 3         7 my $score;
9996             my $score_return;
9997 0         0 my $_tok;
9998 3         5 my $return = undef;
9999 3         6 my $_matched=0;
10000 3         6 my $commit=0;
10001 3         8 my @item = ();
10002 3         6 my %item = ();
10003 3         6 my $repeating = $_[2];
10004 3         7 my $_noactions = $_[3];
10005 3 50       12 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  3         9  
  3         97  
10006 3         7 my $_itempos = $_[5];
10007 3 50       15 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10008 3         6 my $text;
10009             my $lastsep;
10010 0         0 my $current_match;
10011 3         15 my $expectation = new Parse::RecDescent::Expectation(q{/\\d+/});
10012 3         38 $expectation->at($_[1]);
10013            
10014 3         14 my $thisline;
10015 3         19 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10016              
10017            
10018              
10019 3   33     46 while (!$_matched && !$commit)
10020             {
10021            
10022 3 50       48 Parse::RecDescent::_trace(q{Trying production: [/\\d+/ /,\\s*/ /\\d+/]},
10023             Parse::RecDescent::_tracefirst($_[1]),
10024             q{row_col},
10025             $tracelevel)
10026             if defined $::RD_TRACE;
10027 3         11 my $thisprod = $thisrule->{"prods"}[0];
10028 3         14 $text = $_[1];
10029 3         5 my $_savetext;
10030 3         21 @item = (q{row_col});
10031 3         9 %item = (__RULE__ => q{row_col});
10032 3         5 my $repcount = 0;
10033              
10034              
10035 3 50       13 Parse::RecDescent::_trace(q{Trying terminal: [/\\d+/]}, Parse::RecDescent::_tracefirst($text),
10036             q{row_col},
10037             $tracelevel)
10038             if defined $::RD_TRACE;
10039 3         5 undef $lastsep;
10040 3         13 $expectation->is(q{})->at($text);
10041            
10042              
10043 3 50 33     58 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\d+)/)
  3 50       40  
10044             {
10045 0 0       0 $text = $lastsep . $text if defined $lastsep;
10046 0         0 $expectation->failed();
10047 0 0       0 Parse::RecDescent::_trace(q{<>},
10048             Parse::RecDescent::_tracefirst($text))
10049             if defined $::RD_TRACE;
10050              
10051 0         0 last;
10052             }
10053 3         19 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10054 3         12 substr($text,0,length($current_match),q{});
10055 3 50       9 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10056             . $current_match . q{])},
10057             Parse::RecDescent::_tracefirst($text))
10058             if defined $::RD_TRACE;
10059 3         10 push @item, $item{__PATTERN1__}=$current_match;
10060            
10061              
10062 3 50       10 Parse::RecDescent::_trace(q{Trying terminal: [/,\\s*/]}, Parse::RecDescent::_tracefirst($text),
10063             q{row_col},
10064             $tracelevel)
10065             if defined $::RD_TRACE;
10066 3         5 undef $lastsep;
10067 3         12 $expectation->is(q{/,\\s*/})->at($text);
10068            
10069              
10070 3 50 66     48 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:,\s*)/)
  3 100       47  
10071             {
10072 2 50       8 $text = $lastsep . $text if defined $lastsep;
10073 2         10 $expectation->failed();
10074 2 50       32 Parse::RecDescent::_trace(q{<>},
10075             Parse::RecDescent::_tracefirst($text))
10076             if defined $::RD_TRACE;
10077              
10078 2         6 last;
10079             }
10080 1         5 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10081 1         4 substr($text,0,length($current_match),q{});
10082 1 50       4 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10083             . $current_match . q{])},
10084             Parse::RecDescent::_tracefirst($text))
10085             if defined $::RD_TRACE;
10086 1         4 push @item, $item{__PATTERN2__}=$current_match;
10087            
10088              
10089 1 50       4 Parse::RecDescent::_trace(q{Trying terminal: [/\\d+/]}, Parse::RecDescent::_tracefirst($text),
10090             q{row_col},
10091             $tracelevel)
10092             if defined $::RD_TRACE;
10093 1         2 undef $lastsep;
10094 1         5 $expectation->is(q{/\\d+/})->at($text);
10095            
10096              
10097 1 50 33     36 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\d+)/)
  1 50       15  
10098             {
10099 0 0       0 $text = $lastsep . $text if defined $lastsep;
10100 0         0 $expectation->failed();
10101 0 0       0 Parse::RecDescent::_trace(q{<>},
10102             Parse::RecDescent::_tracefirst($text))
10103             if defined $::RD_TRACE;
10104              
10105 0         0 last;
10106             }
10107 1         7 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10108 1         5 substr($text,0,length($current_match),q{});
10109 1 50       5 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10110             . $current_match . q{])},
10111             Parse::RecDescent::_tracefirst($text))
10112             if defined $::RD_TRACE;
10113 1         5 push @item, $item{__PATTERN3__}=$current_match;
10114            
10115              
10116 1 50       4 Parse::RecDescent::_trace(q{Trying action},
10117             Parse::RecDescent::_tracefirst($text),
10118             q{row_col},
10119             $tracelevel)
10120             if defined $::RD_TRACE;
10121            
10122              
10123 1 50       4 $_tok = ($_noactions) ? 0 : do { $rows = $item[1]; $cols = $item[3] };
  1         3  
  1         2  
10124 1 50       4 unless (defined $_tok)
10125             {
10126 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
10127             if defined $::RD_TRACE;
10128 0         0 last;
10129             }
10130 1 50       4 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10131             . $_tok . q{])},
10132             Parse::RecDescent::_tracefirst($text))
10133             if defined $::RD_TRACE;
10134 1         3 push @item, $_tok;
10135 1         2 $item{__ACTION1__}=$_tok;
10136            
10137              
10138 1 50       4 Parse::RecDescent::_trace(q{>>Matched production: [/\\d+/ /,\\s*/ /\\d+/]<<},
10139             Parse::RecDescent::_tracefirst($text),
10140             q{row_col},
10141             $tracelevel)
10142             if defined $::RD_TRACE;
10143              
10144              
10145              
10146 1         2 $_matched = 1;
10147 1         3 last;
10148             }
10149              
10150              
10151 3 100 66     22 unless ( $_matched || defined($score) )
10152             {
10153            
10154              
10155 2         6 $_[1] = $text; # NOT SURE THIS IS NEEDED
10156 2 50       7 Parse::RecDescent::_trace(q{<>},
10157             Parse::RecDescent::_tracefirst($_[1]),
10158             q{row_col},
10159             $tracelevel)
10160             if defined $::RD_TRACE;
10161 2         22 return undef;
10162             }
10163 1 50 33     8 if (!defined($return) && defined($score))
10164             {
10165 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10166             q{row_col},
10167             $tracelevel)
10168             if defined $::RD_TRACE;
10169 0         0 $return = $score_return;
10170             }
10171 1         2 splice @{$thisparser->{errors}}, $err_at;
  1         3  
10172 1 50       6 $return = $item[$#item] unless defined $return;
10173 1 50       7 if (defined $::RD_TRACE)
10174             {
10175 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10176             $return . q{])}, "",
10177             q{row_col},
10178             $tracelevel);
10179 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10180             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10181             Parse::RecDescent::_tracefirst($text),
10182             , q{row_col},
10183             $tracelevel)
10184             }
10185 1         3 $_[1] = $text;
10186 1         11 return $return;
10187             }
10188              
10189             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10190             sub Parse::RecDescent::Text::FormBuilder::Parser::group_field
10191             {
10192 21     21   75 my $thisparser = $_[0];
10193 2     2   18 use vars q{$tracelevel};
  2         4  
  2         1507  
10194 21   50     68 local $tracelevel = ($tracelevel||0)+1;
10195 21         35 $ERRORS = 0;
10196 21         57 my $thisrule = $thisparser->{"rules"}{"group_field"};
10197              
10198 21 50       72 Parse::RecDescent::_trace(q{Trying rule: [group_field]},
10199             Parse::RecDescent::_tracefirst($_[1]),
10200             q{group_field},
10201             $tracelevel)
10202             if defined $::RD_TRACE;
10203              
10204            
10205 21         24 my $err_at = @{$thisparser->{errors}};
  21         44  
10206              
10207 21         40 my $score;
10208             my $score_return;
10209 0         0 my $_tok;
10210 21         30 my $return = undef;
10211 21         27 my $_matched=0;
10212 21         27 my $commit=0;
10213 21         48 my @item = ();
10214 21         36 my %item = ();
10215 21         39 my $repeating = $_[2];
10216 21         46 my $_noactions = $_[3];
10217 21 50       51 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         26  
  21         44  
10218 21         33 my $_itempos = $_[5];
10219 21 50       58 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10220 21         35 my $text;
10221             my $lastsep;
10222 0         0 my $current_match;
10223 21         79 my $expectation = new Parse::RecDescent::Expectation(q{'!field'});
10224 21         171 $expectation->at($_[1]);
10225            
10226 21         83 my $thisline;
10227 21         94 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10228              
10229            
10230              
10231 21   33     224 while (!$_matched && !$commit)
10232             {
10233            
10234 21 50       74 Parse::RecDescent::_trace(q{Trying production: ['!field' group_name name label]},
10235             Parse::RecDescent::_tracefirst($_[1]),
10236             q{group_field},
10237             $tracelevel)
10238             if defined $::RD_TRACE;
10239 21         57 my $thisprod = $thisrule->{"prods"}[0];
10240 21         40 $text = $_[1];
10241 21         29 my $_savetext;
10242 21         51 @item = (q{group_field});
10243 21         60 %item = (__RULE__ => q{group_field});
10244 21         28 my $repcount = 0;
10245              
10246              
10247 21 50       56 Parse::RecDescent::_trace(q{Trying terminal: ['!field']},
10248             Parse::RecDescent::_tracefirst($text),
10249             q{group_field},
10250             $tracelevel)
10251             if defined $::RD_TRACE;
10252 21         38 undef $lastsep;
10253 21         68 $expectation->is(q{})->at($text);
10254            
10255              
10256 21 50 33     320 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!field/)
  21 50       242  
10257             {
10258 21 50       70 $text = $lastsep . $text if defined $lastsep;
10259            
10260 21         74 $expectation->failed();
10261 21 50       103 Parse::RecDescent::_trace(qq{<>},
10262             Parse::RecDescent::_tracefirst($text))
10263             if defined $::RD_TRACE;
10264 21         49 last;
10265             }
10266 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10267 0         0 substr($text,0,length($current_match),q{});
10268 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10269             . $current_match . q{])},
10270             Parse::RecDescent::_tracefirst($text))
10271             if defined $::RD_TRACE;
10272 0         0 push @item, $item{__STRING1__}=$current_match;
10273            
10274              
10275 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [group_name]},
10276             Parse::RecDescent::_tracefirst($text),
10277             q{group_field},
10278             $tracelevel)
10279             if defined $::RD_TRACE;
10280 2     2   15 if (1) { no strict qw{refs};
  2         5  
  2         698  
  0         0  
10281 0         0 $expectation->is(q{group_name})->at($text);
10282 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::group_name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
10283             {
10284            
10285 0 0       0 Parse::RecDescent::_trace(q{<>},
10286             Parse::RecDescent::_tracefirst($text),
10287             q{group_field},
10288             $tracelevel)
10289             if defined $::RD_TRACE;
10290 0         0 $expectation->failed();
10291 0         0 last;
10292             }
10293 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [group_name]<< (return value: [}
10294             . $_tok . q{]},
10295              
10296             Parse::RecDescent::_tracefirst($text),
10297             q{group_field},
10298             $tracelevel)
10299             if defined $::RD_TRACE;
10300 0         0 $item{q{group_name}} = $_tok;
10301 0         0 push @item, $_tok;
10302            
10303             }
10304              
10305 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [name]},
10306             Parse::RecDescent::_tracefirst($text),
10307             q{group_field},
10308             $tracelevel)
10309             if defined $::RD_TRACE;
10310 2     2   32 if (1) { no strict qw{refs};
  2         5  
  2         2342  
  0         0  
10311 0         0 $expectation->is(q{name})->at($text);
10312 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
10313             {
10314            
10315 0 0       0 Parse::RecDescent::_trace(q{<>},
10316             Parse::RecDescent::_tracefirst($text),
10317             q{group_field},
10318             $tracelevel)
10319             if defined $::RD_TRACE;
10320 0         0 $expectation->failed();
10321 0         0 last;
10322             }
10323 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [name]<< (return value: [}
10324             . $_tok . q{]},
10325              
10326             Parse::RecDescent::_tracefirst($text),
10327             q{group_field},
10328             $tracelevel)
10329             if defined $::RD_TRACE;
10330 0         0 $item{q{name}} = $_tok;
10331 0         0 push @item, $_tok;
10332            
10333             }
10334              
10335 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [label]},
10336             Parse::RecDescent::_tracefirst($text),
10337             q{group_field},
10338             $tracelevel)
10339             if defined $::RD_TRACE;
10340 0         0 $expectation->is(q{label})->at($text);
10341            
10342 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::label, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
10343             {
10344 0 0       0 Parse::RecDescent::_trace(q{<>},
10345             Parse::RecDescent::_tracefirst($text),
10346             q{group_field},
10347             $tracelevel)
10348             if defined $::RD_TRACE;
10349 0         0 last;
10350             }
10351 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [label]<< (}
10352             . @$_tok . q{ times)},
10353              
10354             Parse::RecDescent::_tracefirst($text),
10355             q{group_field},
10356             $tracelevel)
10357             if defined $::RD_TRACE;
10358 0         0 $item{q{label(?)}} = $_tok;
10359 0         0 push @item, $_tok;
10360            
10361              
10362              
10363 0 0       0 Parse::RecDescent::_trace(q{Trying action},
10364             Parse::RecDescent::_tracefirst($text),
10365             q{group_field},
10366             $tracelevel)
10367             if defined $::RD_TRACE;
10368            
10369              
10370 0 0       0 $_tok = ($_noactions) ? 0 : do {
10371 0         0 warn "WARNING line $thisline: The '!field' directive has been DEPRECATED. Use the 'name:GROUP' style instead.\n";
10372 0         0 push @lines, [ 'group', { name => $item{name}, label => $item{'label(?)'}[0], group => $item{group_name} } ];
10373             };
10374 0 0       0 unless (defined $_tok)
10375             {
10376 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
10377             if defined $::RD_TRACE;
10378 0         0 last;
10379             }
10380 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10381             . $_tok . q{])},
10382             Parse::RecDescent::_tracefirst($text))
10383             if defined $::RD_TRACE;
10384 0         0 push @item, $_tok;
10385 0         0 $item{__ACTION1__}=$_tok;
10386            
10387              
10388 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!field' group_name name label]<<},
10389             Parse::RecDescent::_tracefirst($text),
10390             q{group_field},
10391             $tracelevel)
10392             if defined $::RD_TRACE;
10393              
10394              
10395              
10396 0         0 $_matched = 1;
10397 0         0 last;
10398             }
10399              
10400              
10401 21 50 33     108 unless ( $_matched || defined($score) )
10402             {
10403            
10404              
10405 21         36 $_[1] = $text; # NOT SURE THIS IS NEEDED
10406 21 50       56 Parse::RecDescent::_trace(q{<>},
10407             Parse::RecDescent::_tracefirst($_[1]),
10408             q{group_field},
10409             $tracelevel)
10410             if defined $::RD_TRACE;
10411 21         164 return undef;
10412             }
10413 0 0 0     0 if (!defined($return) && defined($score))
10414             {
10415 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10416             q{group_field},
10417             $tracelevel)
10418             if defined $::RD_TRACE;
10419 0         0 $return = $score_return;
10420             }
10421 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
10422 0 0       0 $return = $item[$#item] unless defined $return;
10423 0 0       0 if (defined $::RD_TRACE)
10424             {
10425 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10426             $return . q{])}, "",
10427             q{group_field},
10428             $tracelevel);
10429 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10430             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10431             Parse::RecDescent::_tracefirst($text),
10432             , q{group_field},
10433             $tracelevel)
10434             }
10435 0         0 $_[1] = $text;
10436 0         0 return $return;
10437             }
10438              
10439             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10440             sub Parse::RecDescent::Text::FormBuilder::Parser::display_text
10441             {
10442 0     0   0 my $thisparser = $_[0];
10443 2     2   14 use vars q{$tracelevel};
  2         4  
  2         767  
10444 0   0     0 local $tracelevel = ($tracelevel||0)+1;
10445 0         0 $ERRORS = 0;
10446 0         0 my $thisrule = $thisparser->{"rules"}{"display_text"};
10447              
10448 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [display_text]},
10449             Parse::RecDescent::_tracefirst($_[1]),
10450             q{display_text},
10451             $tracelevel)
10452             if defined $::RD_TRACE;
10453              
10454            
10455 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
10456              
10457 0         0 my $score;
10458             my $score_return;
10459 0         0 my $_tok;
10460 0         0 my $return = undef;
10461 0         0 my $_matched=0;
10462 0         0 my $commit=0;
10463 0         0 my @item = ();
10464 0         0 my %item = ();
10465 0         0 my $repeating = $_[2];
10466 0         0 my $_noactions = $_[3];
10467 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
10468 0         0 my $_itempos = $_[5];
10469 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10470 0         0 my $text;
10471             my $lastsep;
10472 0         0 my $current_match;
10473 0         0 my $expectation = new Parse::RecDescent::Expectation(q{bracket_block});
10474 0         0 $expectation->at($_[1]);
10475            
10476 0         0 my $thisline;
10477 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10478              
10479            
10480              
10481 0   0     0 while (!$_matched && !$commit)
10482             {
10483            
10484 0 0       0 Parse::RecDescent::_trace(q{Trying production: [bracket_block]},
10485             Parse::RecDescent::_tracefirst($_[1]),
10486             q{display_text},
10487             $tracelevel)
10488             if defined $::RD_TRACE;
10489 0         0 my $thisprod = $thisrule->{"prods"}[0];
10490 0         0 $text = $_[1];
10491 0         0 my $_savetext;
10492 0         0 @item = (q{display_text});
10493 0         0 %item = (__RULE__ => q{display_text});
10494 0         0 my $repcount = 0;
10495              
10496              
10497 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [bracket_block]},
10498             Parse::RecDescent::_tracefirst($text),
10499             q{display_text},
10500             $tracelevel)
10501             if defined $::RD_TRACE;
10502 2     2   13 if (1) { no strict qw{refs};
  2         4  
  2         1126  
  0         0  
10503 0         0 $expectation->is(q{})->at($text);
10504 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::bracket_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
10505             {
10506            
10507 0 0       0 Parse::RecDescent::_trace(q{<>},
10508             Parse::RecDescent::_tracefirst($text),
10509             q{display_text},
10510             $tracelevel)
10511             if defined $::RD_TRACE;
10512 0         0 $expectation->failed();
10513 0         0 last;
10514             }
10515 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [bracket_block]<< (return value: [}
10516             . $_tok . q{]},
10517              
10518             Parse::RecDescent::_tracefirst($text),
10519             q{display_text},
10520             $tracelevel)
10521             if defined $::RD_TRACE;
10522 0         0 $item{q{bracket_block}} = $_tok;
10523 0         0 push @item, $_tok;
10524            
10525             }
10526              
10527 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [bracket_block]<<},
10528             Parse::RecDescent::_tracefirst($text),
10529             q{display_text},
10530             $tracelevel)
10531             if defined $::RD_TRACE;
10532              
10533              
10534              
10535 0         0 $_matched = 1;
10536 0         0 last;
10537             }
10538              
10539              
10540 0 0 0     0 unless ( $_matched || defined($score) )
10541             {
10542            
10543              
10544 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
10545 0 0       0 Parse::RecDescent::_trace(q{<>},
10546             Parse::RecDescent::_tracefirst($_[1]),
10547             q{display_text},
10548             $tracelevel)
10549             if defined $::RD_TRACE;
10550 0         0 return undef;
10551             }
10552 0 0 0     0 if (!defined($return) && defined($score))
10553             {
10554 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10555             q{display_text},
10556             $tracelevel)
10557             if defined $::RD_TRACE;
10558 0         0 $return = $score_return;
10559             }
10560 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
10561 0 0       0 $return = $item[$#item] unless defined $return;
10562 0 0       0 if (defined $::RD_TRACE)
10563             {
10564 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10565             $return . q{])}, "",
10566             q{display_text},
10567             $tracelevel);
10568 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10569             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10570             Parse::RecDescent::_tracefirst($text),
10571             , q{display_text},
10572             $tracelevel)
10573             }
10574 0         0 $_[1] = $text;
10575 0         0 return $return;
10576             }
10577              
10578             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10579             sub Parse::RecDescent::Text::FormBuilder::Parser::section_head
10580             {
10581 21     21   93 my $thisparser = $_[0];
10582 2     2   15 use vars q{$tracelevel};
  2         4  
  2         1444  
10583 21   50     71 local $tracelevel = ($tracelevel||0)+1;
10584 21         39 $ERRORS = 0;
10585 21         60 my $thisrule = $thisparser->{"rules"}{"section_head"};
10586              
10587 21 50       94 Parse::RecDescent::_trace(q{Trying rule: [section_head]},
10588             Parse::RecDescent::_tracefirst($_[1]),
10589             q{section_head},
10590             $tracelevel)
10591             if defined $::RD_TRACE;
10592              
10593            
10594 21         31 my $err_at = @{$thisparser->{errors}};
  21         61  
10595              
10596 21         32 my $score;
10597             my $score_return;
10598 0         0 my $_tok;
10599 21         42 my $return = undef;
10600 21         31 my $_matched=0;
10601 21         33 my $commit=0;
10602 21         45 my @item = ();
10603 21         50 my %item = ();
10604 21         39 my $repeating = $_[2];
10605 21         33 my $_noactions = $_[3];
10606 21 50       64 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         37  
  21         52  
10607 21         39 my $_itempos = $_[5];
10608 21 50       71 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10609 21         31 my $text;
10610             my $lastsep;
10611 0         0 my $current_match;
10612 21         102 my $expectation = new Parse::RecDescent::Expectation(q{'!section'});
10613 21         194 $expectation->at($_[1]);
10614            
10615 21         95 my $thisline;
10616 21         95 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10617              
10618            
10619              
10620 21   33     223 while (!$_matched && !$commit)
10621             {
10622            
10623 21 50       58 Parse::RecDescent::_trace(q{Trying production: ['!section' identifier /.*/]},
10624             Parse::RecDescent::_tracefirst($_[1]),
10625             q{section_head},
10626             $tracelevel)
10627             if defined $::RD_TRACE;
10628 21         63 my $thisprod = $thisrule->{"prods"}[0];
10629 21         41 $text = $_[1];
10630 21         32 my $_savetext;
10631 21         49 @item = (q{section_head});
10632 21         64 %item = (__RULE__ => q{section_head});
10633 21         33 my $repcount = 0;
10634              
10635              
10636 21 50       56 Parse::RecDescent::_trace(q{Trying terminal: ['!section']},
10637             Parse::RecDescent::_tracefirst($text),
10638             q{section_head},
10639             $tracelevel)
10640             if defined $::RD_TRACE;
10641 21         33 undef $lastsep;
10642 21         83 $expectation->is(q{})->at($text);
10643            
10644              
10645 21 50 33     260 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!section/)
  21 50       213  
10646             {
10647 21 50       83 $text = $lastsep . $text if defined $lastsep;
10648            
10649 21         116 $expectation->failed();
10650 21 50       103 Parse::RecDescent::_trace(qq{<>},
10651             Parse::RecDescent::_tracefirst($text))
10652             if defined $::RD_TRACE;
10653 21         47 last;
10654             }
10655 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10656 0         0 substr($text,0,length($current_match),q{});
10657 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10658             . $current_match . q{])},
10659             Parse::RecDescent::_tracefirst($text))
10660             if defined $::RD_TRACE;
10661 0         0 push @item, $item{__STRING1__}=$current_match;
10662            
10663              
10664 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
10665             Parse::RecDescent::_tracefirst($text),
10666             q{section_head},
10667             $tracelevel)
10668             if defined $::RD_TRACE;
10669 2     2   14 if (1) { no strict qw{refs};
  2         16  
  2         2052  
  0         0  
10670 0         0 $expectation->is(q{identifier})->at($text);
10671 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
10672             {
10673            
10674 0 0       0 Parse::RecDescent::_trace(q{<>},
10675             Parse::RecDescent::_tracefirst($text),
10676             q{section_head},
10677             $tracelevel)
10678             if defined $::RD_TRACE;
10679 0         0 $expectation->failed();
10680 0         0 last;
10681             }
10682 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
10683             . $_tok . q{]},
10684              
10685             Parse::RecDescent::_tracefirst($text),
10686             q{section_head},
10687             $tracelevel)
10688             if defined $::RD_TRACE;
10689 0         0 $item{q{identifier}} = $_tok;
10690 0         0 push @item, $_tok;
10691            
10692             }
10693              
10694 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
10695             q{section_head},
10696             $tracelevel)
10697             if defined $::RD_TRACE;
10698 0         0 undef $lastsep;
10699 0         0 $expectation->is(q{/.*/})->at($text);
10700            
10701              
10702 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*)/)
  0 0       0  
10703             {
10704 0 0       0 $text = $lastsep . $text if defined $lastsep;
10705 0         0 $expectation->failed();
10706 0 0       0 Parse::RecDescent::_trace(q{<>},
10707             Parse::RecDescent::_tracefirst($text))
10708             if defined $::RD_TRACE;
10709              
10710 0         0 last;
10711             }
10712 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
10713 0         0 substr($text,0,length($current_match),q{});
10714 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
10715             . $current_match . q{])},
10716             Parse::RecDescent::_tracefirst($text))
10717             if defined $::RD_TRACE;
10718 0         0 push @item, $item{__PATTERN1__}=$current_match;
10719            
10720              
10721 0 0       0 Parse::RecDescent::_trace(q{Trying action},
10722             Parse::RecDescent::_tracefirst($text),
10723             q{section_head},
10724             $tracelevel)
10725             if defined $::RD_TRACE;
10726            
10727              
10728 0 0       0 $_tok = ($_noactions) ? 0 : do {
10729             #warn "starting section $item{identifier}\n";
10730             #warn " with heading $item[3]\n" if $item[3];
10731            
10732 0 0       0 if (@lines) {
10733 0         0 push @sections,
10734             {
10735             id => $section_id,
10736             head => $section_head,
10737             lines => [ @lines ],
10738             };
10739             }
10740            
10741 0         0 $section_id = $item{identifier};
10742 0         0 $section_head = $item[3];
10743 0         0 @lines = ();
10744             };
10745 0 0       0 unless (defined $_tok)
10746             {
10747 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
10748             if defined $::RD_TRACE;
10749 0         0 last;
10750             }
10751 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
10752             . $_tok . q{])},
10753             Parse::RecDescent::_tracefirst($text))
10754             if defined $::RD_TRACE;
10755 0         0 push @item, $_tok;
10756 0         0 $item{__ACTION1__}=$_tok;
10757            
10758              
10759 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!section' identifier /.*/]<<},
10760             Parse::RecDescent::_tracefirst($text),
10761             q{section_head},
10762             $tracelevel)
10763             if defined $::RD_TRACE;
10764              
10765              
10766              
10767 0         0 $_matched = 1;
10768 0         0 last;
10769             }
10770              
10771              
10772 21 50 33     108 unless ( $_matched || defined($score) )
10773             {
10774            
10775              
10776 21         42 $_[1] = $text; # NOT SURE THIS IS NEEDED
10777 21 50       46 Parse::RecDescent::_trace(q{<>},
10778             Parse::RecDescent::_tracefirst($_[1]),
10779             q{section_head},
10780             $tracelevel)
10781             if defined $::RD_TRACE;
10782 21         156 return undef;
10783             }
10784 0 0 0     0 if (!defined($return) && defined($score))
10785             {
10786 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
10787             q{section_head},
10788             $tracelevel)
10789             if defined $::RD_TRACE;
10790 0         0 $return = $score_return;
10791             }
10792 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
10793 0 0       0 $return = $item[$#item] unless defined $return;
10794 0 0       0 if (defined $::RD_TRACE)
10795             {
10796 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
10797             $return . q{])}, "",
10798             q{section_head},
10799             $tracelevel);
10800 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
10801             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
10802             Parse::RecDescent::_tracefirst($text),
10803             , q{section_head},
10804             $tracelevel)
10805             }
10806 0         0 $_[1] = $text;
10807 0         0 return $return;
10808             }
10809              
10810             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
10811             sub Parse::RecDescent::Text::FormBuilder::Parser::field
10812             {
10813 35     35   26703 my $thisparser = $_[0];
10814 2     2   14 use vars q{$tracelevel};
  2         5  
  2         1136  
10815 35   100     177 local $tracelevel = ($tracelevel||0)+1;
10816 35         72 $ERRORS = 0;
10817 35         112 my $thisrule = $thisparser->{"rules"}{"field"};
10818              
10819 35 50       98 Parse::RecDescent::_trace(q{Trying rule: [field]},
10820             Parse::RecDescent::_tracefirst($_[1]),
10821             q{field},
10822             $tracelevel)
10823             if defined $::RD_TRACE;
10824              
10825            
10826 35         48 my $err_at = @{$thisparser->{errors}};
  35         76  
10827              
10828 35         60 my $score;
10829             my $score_return;
10830 0         0 my $_tok;
10831 35         64 my $return = undef;
10832 35         57 my $_matched=0;
10833 35         65 my $commit=0;
10834 35         80 my @item = ();
10835 35         179 my %item = ();
10836 35         172 my $repeating = $_[2];
10837 35         72 my $_noactions = $_[3];
10838 35 50       110 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  35         60  
  35         102  
10839 35         127 my $_itempos = $_[5];
10840 35 50       143 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
10841 35         71 my $text;
10842             my $lastsep;
10843 0         0 my $current_match;
10844 35         164 my $expectation = new Parse::RecDescent::Expectation(q{name});
10845 35         364 $expectation->at($_[1]);
10846            
10847 35         167 my $thisline;
10848 35         192 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
10849              
10850            
10851              
10852 35   33     413 while (!$_matched && !$commit)
10853             {
10854            
10855 35 50       100 Parse::RecDescent::_trace(q{Trying production: [name field_size growable label hint type multi other default option_list validate comment]},
10856             Parse::RecDescent::_tracefirst($_[1]),
10857             q{field},
10858             $tracelevel)
10859             if defined $::RD_TRACE;
10860 35         371 my $thisprod = $thisrule->{"prods"}[0];
10861 35         75 $text = $_[1];
10862 35         62 my $_savetext;
10863 35         79 @item = (q{field});
10864 35         110 %item = (__RULE__ => q{field});
10865 35         58 my $repcount = 0;
10866              
10867              
10868 35 50       94 Parse::RecDescent::_trace(q{Trying subrule: [name]},
10869             Parse::RecDescent::_tracefirst($text),
10870             q{field},
10871             $tracelevel)
10872             if defined $::RD_TRACE;
10873 2     2   13 if (1) { no strict qw{refs};
  2         4  
  2         9112  
  35         149  
10874 35         128 $expectation->is(q{})->at($text);
10875 35 100   35   850 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  35         111  
10876             {
10877            
10878 11 50       27 Parse::RecDescent::_trace(q{<>},
10879             Parse::RecDescent::_tracefirst($text),
10880             q{field},
10881             $tracelevel)
10882             if defined $::RD_TRACE;
10883 11         35 $expectation->failed();
10884 11         39 last;
10885             }
10886 24 50       116 Parse::RecDescent::_trace(q{>>Matched subrule: [name]<< (return value: [}
10887             . $_tok . q{]},
10888              
10889             Parse::RecDescent::_tracefirst($text),
10890             q{field},
10891             $tracelevel)
10892             if defined $::RD_TRACE;
10893 24         70 $item{q{name}} = $_tok;
10894 24         131 push @item, $_tok;
10895            
10896             }
10897              
10898 24 50       73 Parse::RecDescent::_trace(q{Trying repeated subrule: [field_size]},
10899             Parse::RecDescent::_tracefirst($text),
10900             q{field},
10901             $tracelevel)
10902             if defined $::RD_TRACE;
10903 24         95 $expectation->is(q{field_size})->at($text);
10904            
10905 24 50   24   343 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::field_size, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         2037  
10906             {
10907 0 0       0 Parse::RecDescent::_trace(q{<>},
10908             Parse::RecDescent::_tracefirst($text),
10909             q{field},
10910             $tracelevel)
10911             if defined $::RD_TRACE;
10912 0         0 last;
10913             }
10914 24 50       426 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [field_size]<< (}
10915             . @$_tok . q{ times)},
10916              
10917             Parse::RecDescent::_tracefirst($text),
10918             q{field},
10919             $tracelevel)
10920             if defined $::RD_TRACE;
10921 24         87 $item{q{field_size(?)}} = $_tok;
10922 24         51 push @item, $_tok;
10923            
10924              
10925              
10926 24 50       62 Parse::RecDescent::_trace(q{Trying repeated subrule: [growable]},
10927             Parse::RecDescent::_tracefirst($text),
10928             q{field},
10929             $tracelevel)
10930             if defined $::RD_TRACE;
10931 24         329 $expectation->is(q{growable})->at($text);
10932            
10933 24 50   24   332 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::growable, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         62  
10934             {
10935 0 0       0 Parse::RecDescent::_trace(q{<>},
10936             Parse::RecDescent::_tracefirst($text),
10937             q{field},
10938             $tracelevel)
10939             if defined $::RD_TRACE;
10940 0         0 last;
10941             }
10942 24 50       1659 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [growable]<< (}
10943             . @$_tok . q{ times)},
10944              
10945             Parse::RecDescent::_tracefirst($text),
10946             q{field},
10947             $tracelevel)
10948             if defined $::RD_TRACE;
10949 24         65 $item{q{growable(?)}} = $_tok;
10950 24         40 push @item, $_tok;
10951            
10952              
10953              
10954 24 50       64 Parse::RecDescent::_trace(q{Trying repeated subrule: [label]},
10955             Parse::RecDescent::_tracefirst($text),
10956             q{field},
10957             $tracelevel)
10958             if defined $::RD_TRACE;
10959 24         128 $expectation->is(q{label})->at($text);
10960            
10961 24 50   24   323 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::label, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         68  
10962             {
10963 0 0       0 Parse::RecDescent::_trace(q{<>},
10964             Parse::RecDescent::_tracefirst($text),
10965             q{field},
10966             $tracelevel)
10967             if defined $::RD_TRACE;
10968 0         0 last;
10969             }
10970 24 50       412 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [label]<< (}
10971             . @$_tok . q{ times)},
10972              
10973             Parse::RecDescent::_tracefirst($text),
10974             q{field},
10975             $tracelevel)
10976             if defined $::RD_TRACE;
10977 24         64 $item{q{label(?)}} = $_tok;
10978 24         51 push @item, $_tok;
10979            
10980              
10981              
10982 24 50       73 Parse::RecDescent::_trace(q{Trying repeated subrule: [hint]},
10983             Parse::RecDescent::_tracefirst($text),
10984             q{field},
10985             $tracelevel)
10986             if defined $::RD_TRACE;
10987 24         94 $expectation->is(q{hint})->at($text);
10988            
10989 24 50   24   326 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::hint, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         63  
10990             {
10991 0 0       0 Parse::RecDescent::_trace(q{<>},
10992             Parse::RecDescent::_tracefirst($text),
10993             q{field},
10994             $tracelevel)
10995             if defined $::RD_TRACE;
10996 0         0 last;
10997             }
10998 24 50       523 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [hint]<< (}
10999             . @$_tok . q{ times)},
11000              
11001             Parse::RecDescent::_tracefirst($text),
11002             q{field},
11003             $tracelevel)
11004             if defined $::RD_TRACE;
11005 24         71 $item{q{hint(?)}} = $_tok;
11006 24         56 push @item, $_tok;
11007            
11008              
11009              
11010 24 50       70 Parse::RecDescent::_trace(q{Trying repeated subrule: [type]},
11011             Parse::RecDescent::_tracefirst($text),
11012             q{field},
11013             $tracelevel)
11014             if defined $::RD_TRACE;
11015 24         96 $expectation->is(q{type})->at($text);
11016            
11017 24 50   24   443 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::type, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         70  
11018             {
11019 0 0       0 Parse::RecDescent::_trace(q{<>},
11020             Parse::RecDescent::_tracefirst($text),
11021             q{field},
11022             $tracelevel)
11023             if defined $::RD_TRACE;
11024 0         0 last;
11025             }
11026 24 50       2449 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [type]<< (}
11027             . @$_tok . q{ times)},
11028              
11029             Parse::RecDescent::_tracefirst($text),
11030             q{field},
11031             $tracelevel)
11032             if defined $::RD_TRACE;
11033 24         75 $item{q{type(?)}} = $_tok;
11034 24         49 push @item, $_tok;
11035            
11036              
11037              
11038 24 50       64 Parse::RecDescent::_trace(q{Trying repeated subrule: [multi]},
11039             Parse::RecDescent::_tracefirst($text),
11040             q{field},
11041             $tracelevel)
11042             if defined $::RD_TRACE;
11043 24         91 $expectation->is(q{multi})->at($text);
11044            
11045 24 50   24   341 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::multi, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         63  
11046             {
11047 0 0       0 Parse::RecDescent::_trace(q{<>},
11048             Parse::RecDescent::_tracefirst($text),
11049             q{field},
11050             $tracelevel)
11051             if defined $::RD_TRACE;
11052 0         0 last;
11053             }
11054 24 50       488 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [multi]<< (}
11055             . @$_tok . q{ times)},
11056              
11057             Parse::RecDescent::_tracefirst($text),
11058             q{field},
11059             $tracelevel)
11060             if defined $::RD_TRACE;
11061 24         73 $item{q{multi(?)}} = $_tok;
11062 24         48 push @item, $_tok;
11063            
11064              
11065              
11066 24 50       62 Parse::RecDescent::_trace(q{Trying repeated subrule: [other]},
11067             Parse::RecDescent::_tracefirst($text),
11068             q{field},
11069             $tracelevel)
11070             if defined $::RD_TRACE;
11071 24         92 $expectation->is(q{other})->at($text);
11072            
11073 24 50   24   313 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::other, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         64  
11074             {
11075 0 0       0 Parse::RecDescent::_trace(q{<>},
11076             Parse::RecDescent::_tracefirst($text),
11077             q{field},
11078             $tracelevel)
11079             if defined $::RD_TRACE;
11080 0         0 last;
11081             }
11082 24 50       487 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [other]<< (}
11083             . @$_tok . q{ times)},
11084              
11085             Parse::RecDescent::_tracefirst($text),
11086             q{field},
11087             $tracelevel)
11088             if defined $::RD_TRACE;
11089 24         75 $item{q{other(?)}} = $_tok;
11090 24         45 push @item, $_tok;
11091            
11092              
11093              
11094 24 50       69 Parse::RecDescent::_trace(q{Trying repeated subrule: [default]},
11095             Parse::RecDescent::_tracefirst($text),
11096             q{field},
11097             $tracelevel)
11098             if defined $::RD_TRACE;
11099 24         86 $expectation->is(q{default})->at($text);
11100            
11101 24 50   24   313 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::default, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         80  
11102             {
11103 0 0       0 Parse::RecDescent::_trace(q{<>},
11104             Parse::RecDescent::_tracefirst($text),
11105             q{field},
11106             $tracelevel)
11107             if defined $::RD_TRACE;
11108 0         0 last;
11109             }
11110 24 50       347 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [default]<< (}
11111             . @$_tok . q{ times)},
11112              
11113             Parse::RecDescent::_tracefirst($text),
11114             q{field},
11115             $tracelevel)
11116             if defined $::RD_TRACE;
11117 24         66 $item{q{default(?)}} = $_tok;
11118 24         53 push @item, $_tok;
11119            
11120              
11121              
11122 24 50       59 Parse::RecDescent::_trace(q{Trying repeated subrule: [option_list]},
11123             Parse::RecDescent::_tracefirst($text),
11124             q{field},
11125             $tracelevel)
11126             if defined $::RD_TRACE;
11127 24         85 $expectation->is(q{option_list})->at($text);
11128            
11129 24 50   24   417 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::option_list, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         67  
11130             {
11131 0 0       0 Parse::RecDescent::_trace(q{<>},
11132             Parse::RecDescent::_tracefirst($text),
11133             q{field},
11134             $tracelevel)
11135             if defined $::RD_TRACE;
11136 0         0 last;
11137             }
11138 24 50       385 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [option_list]<< (}
11139             . @$_tok . q{ times)},
11140              
11141             Parse::RecDescent::_tracefirst($text),
11142             q{field},
11143             $tracelevel)
11144             if defined $::RD_TRACE;
11145 24         72 $item{q{option_list(?)}} = $_tok;
11146 24         252 push @item, $_tok;
11147            
11148              
11149              
11150 24 50       70 Parse::RecDescent::_trace(q{Trying repeated subrule: [validate]},
11151             Parse::RecDescent::_tracefirst($text),
11152             q{field},
11153             $tracelevel)
11154             if defined $::RD_TRACE;
11155 24         89 $expectation->is(q{validate})->at($text);
11156            
11157 24 50   24   383 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::validate, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         67  
11158             {
11159 0 0       0 Parse::RecDescent::_trace(q{<>},
11160             Parse::RecDescent::_tracefirst($text),
11161             q{field},
11162             $tracelevel)
11163             if defined $::RD_TRACE;
11164 0         0 last;
11165             }
11166 24 50       342 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [validate]<< (}
11167             . @$_tok . q{ times)},
11168              
11169             Parse::RecDescent::_tracefirst($text),
11170             q{field},
11171             $tracelevel)
11172             if defined $::RD_TRACE;
11173 24         73 $item{q{validate(?)}} = $_tok;
11174 24         42 push @item, $_tok;
11175            
11176              
11177              
11178 24 50       61 Parse::RecDescent::_trace(q{Trying repeated subrule: [comment]},
11179             Parse::RecDescent::_tracefirst($text),
11180             q{field},
11181             $tracelevel)
11182             if defined $::RD_TRACE;
11183 24         79 $expectation->is(q{comment})->at($text);
11184            
11185 24 50   24   334 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::comment, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  24         66  
11186             {
11187 0 0       0 Parse::RecDescent::_trace(q{<>},
11188             Parse::RecDescent::_tracefirst($text),
11189             q{field},
11190             $tracelevel)
11191             if defined $::RD_TRACE;
11192 0         0 last;
11193             }
11194 24 50       373 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [comment]<< (}
11195             . @$_tok . q{ times)},
11196              
11197             Parse::RecDescent::_tracefirst($text),
11198             q{field},
11199             $tracelevel)
11200             if defined $::RD_TRACE;
11201 24         69 $item{q{comment(?)}} = $_tok;
11202 24         45 push @item, $_tok;
11203            
11204              
11205              
11206 24 50       63 Parse::RecDescent::_trace(q{Trying action},
11207             Parse::RecDescent::_tracefirst($text),
11208             q{field},
11209             $tracelevel)
11210             if defined $::RD_TRACE;
11211            
11212              
11213 24 50       86 $_tok = ($_noactions) ? 0 : do {
11214 24         483 my $field = {
11215             name => $item{name},
11216             growable => $item{'growable(?)'}[0],
11217             label => $item{'label(?)'}[0],
11218             comment => $item{'hint(?)'}[0],
11219             multiple => $item{'multi(?)'}[0],
11220             type => $item{'type(?)'}[0],
11221             other => $item{'other(?)'}[0],
11222             value => $item{'default(?)'}[0],
11223             list => $list_var,
11224             validate => $item{'validate(?)'}[0],
11225             required => $required,
11226             };
11227            
11228 24 50       92 $$field{options} = [ @options ] if @options;
11229            
11230 24 100       67 $$field{rows} = $rows if defined $rows;
11231 24 100       233 $$field{cols} = $cols if defined $cols;
11232 24 100       72 $$field{size} = $size if defined $size;
11233 24 100       107 $$field{maxlength} = $maxlength if defined $maxlength;
11234            
11235             #warn "[$thisline] field $item{name}; context $context\n";
11236 24 50       79 if ($context eq 'group') {
11237 0         0 push @group, $field;
11238             } else {
11239 24         94 push @lines, [ 'field', $field ];
11240             }
11241            
11242 24         37 $type = undef;
11243 24         43 $required = undef;
11244 24         35 $multiple = undef;
11245 24         41 $list_var = undef;
11246 24         3176 $size = undef;
11247 24         47 $rows = undef;
11248 24         37 $cols = undef;
11249 24         35 $maxlength = undef;
11250 24         40 @options = ();
11251            
11252             #warn "$$field{name}: $field";
11253            
11254 24         53 $field;
11255             };
11256 24 50       77 unless (defined $_tok)
11257             {
11258 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
11259             if defined $::RD_TRACE;
11260 0         0 last;
11261             }
11262 24 50       64 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
11263             . $_tok . q{])},
11264             Parse::RecDescent::_tracefirst($text))
11265             if defined $::RD_TRACE;
11266 24         50 push @item, $_tok;
11267 24         57 $item{__ACTION1__}=$_tok;
11268            
11269              
11270 24 50       60 Parse::RecDescent::_trace(q{>>Matched production: [name field_size growable label hint type multi other default option_list validate comment]<<},
11271             Parse::RecDescent::_tracefirst($text),
11272             q{field},
11273             $tracelevel)
11274             if defined $::RD_TRACE;
11275              
11276              
11277              
11278 24         735 $_matched = 1;
11279 24         58 last;
11280             }
11281              
11282              
11283 35 100 66     168 unless ( $_matched || defined($score) )
11284             {
11285            
11286              
11287 11         16 $_[1] = $text; # NOT SURE THIS IS NEEDED
11288 11 50       26 Parse::RecDescent::_trace(q{<>},
11289             Parse::RecDescent::_tracefirst($_[1]),
11290             q{field},
11291             $tracelevel)
11292             if defined $::RD_TRACE;
11293 11         77 return undef;
11294             }
11295 24 50 33     172 if (!defined($return) && defined($score))
11296             {
11297 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11298             q{field},
11299             $tracelevel)
11300             if defined $::RD_TRACE;
11301 0         0 $return = $score_return;
11302             }
11303 24         41 splice @{$thisparser->{errors}}, $err_at;
  24         79  
11304 24 50       93 $return = $item[$#item] unless defined $return;
11305 24 50       763 if (defined $::RD_TRACE)
11306             {
11307 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11308             $return . q{])}, "",
11309             q{field},
11310             $tracelevel);
11311 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11312             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11313             Parse::RecDescent::_tracefirst($text),
11314             , q{field},
11315             $tracelevel)
11316             }
11317 24         59 $_[1] = $text;
11318 24         371 return $return;
11319             }
11320              
11321             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11322             sub Parse::RecDescent::Text::FormBuilder::Parser::title
11323             {
11324 21     21   34 my $thisparser = $_[0];
11325 2     2   28 use vars q{$tracelevel};
  2         3  
  2         2997  
11326 21   50     73 local $tracelevel = ($tracelevel||0)+1;
11327 21         37 $ERRORS = 0;
11328 21         61 my $thisrule = $thisparser->{"rules"}{"title"};
11329              
11330 21 50       61 Parse::RecDescent::_trace(q{Trying rule: [title]},
11331             Parse::RecDescent::_tracefirst($_[1]),
11332             q{title},
11333             $tracelevel)
11334             if defined $::RD_TRACE;
11335              
11336            
11337 21         31 my $err_at = @{$thisparser->{errors}};
  21         49  
11338              
11339 21         47 my $score;
11340             my $score_return;
11341 0         0 my $_tok;
11342 21         24 my $return = undef;
11343 21         31 my $_matched=0;
11344 21         33 my $commit=0;
11345 21         38 my @item = ();
11346 21         47 my %item = ();
11347 21         30 my $repeating = $_[2];
11348 21         42 my $_noactions = $_[3];
11349 21 50       55 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         27  
  21         47  
11350 21         35 my $_itempos = $_[5];
11351 21 50       72 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11352 21         38 my $text;
11353             my $lastsep;
11354 0         0 my $current_match;
11355 21         84 my $expectation = new Parse::RecDescent::Expectation(q{'!title'});
11356 21         184 $expectation->at($_[1]);
11357            
11358 21         92 my $thisline;
11359 21         99 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11360              
11361            
11362              
11363 21   33     244 while (!$_matched && !$commit)
11364             {
11365            
11366 21 50       55 Parse::RecDescent::_trace(q{Trying production: ['!title' /.*/]},
11367             Parse::RecDescent::_tracefirst($_[1]),
11368             q{title},
11369             $tracelevel)
11370             if defined $::RD_TRACE;
11371 21         62 my $thisprod = $thisrule->{"prods"}[0];
11372 21         47 $text = $_[1];
11373 21         36 my $_savetext;
11374 21         47 @item = (q{title});
11375 21         55 %item = (__RULE__ => q{title});
11376 21         34 my $repcount = 0;
11377              
11378              
11379 21 50       66 Parse::RecDescent::_trace(q{Trying terminal: ['!title']},
11380             Parse::RecDescent::_tracefirst($text),
11381             q{title},
11382             $tracelevel)
11383             if defined $::RD_TRACE;
11384 21         38 undef $lastsep;
11385 21         76 $expectation->is(q{})->at($text);
11386            
11387              
11388 21 50 33     285 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!title/)
  21 50       204  
11389             {
11390 21 50       93 $text = $lastsep . $text if defined $lastsep;
11391            
11392 21         75 $expectation->failed();
11393 21 50       157 Parse::RecDescent::_trace(qq{<>},
11394             Parse::RecDescent::_tracefirst($text))
11395             if defined $::RD_TRACE;
11396 21         50 last;
11397             }
11398 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
11399 0         0 substr($text,0,length($current_match),q{});
11400 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
11401             . $current_match . q{])},
11402             Parse::RecDescent::_tracefirst($text))
11403             if defined $::RD_TRACE;
11404 0         0 push @item, $item{__STRING1__}=$current_match;
11405            
11406              
11407 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
11408             q{title},
11409             $tracelevel)
11410             if defined $::RD_TRACE;
11411 0         0 undef $lastsep;
11412 0         0 $expectation->is(q{/.*/})->at($text);
11413            
11414              
11415 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*)/)
  0 0       0  
11416             {
11417 0 0       0 $text = $lastsep . $text if defined $lastsep;
11418 0         0 $expectation->failed();
11419 0 0       0 Parse::RecDescent::_trace(q{<>},
11420             Parse::RecDescent::_tracefirst($text))
11421             if defined $::RD_TRACE;
11422              
11423 0         0 last;
11424             }
11425 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
11426 0         0 substr($text,0,length($current_match),q{});
11427 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
11428             . $current_match . q{])},
11429             Parse::RecDescent::_tracefirst($text))
11430             if defined $::RD_TRACE;
11431 0         0 push @item, $item{__PATTERN1__}=$current_match;
11432            
11433              
11434 0 0       0 Parse::RecDescent::_trace(q{Trying action},
11435             Parse::RecDescent::_tracefirst($text),
11436             q{title},
11437             $tracelevel)
11438             if defined $::RD_TRACE;
11439            
11440              
11441 0 0       0 $_tok = ($_noactions) ? 0 : do {
11442 0 0       0 warn "[Text::FormBuilder] Title redefined at input text line $thisline\n" if defined $formspec{title};
11443 0         0 $formspec{title} = $item[2];
11444             };
11445 0 0       0 unless (defined $_tok)
11446             {
11447 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
11448             if defined $::RD_TRACE;
11449 0         0 last;
11450             }
11451 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
11452             . $_tok . q{])},
11453             Parse::RecDescent::_tracefirst($text))
11454             if defined $::RD_TRACE;
11455 0         0 push @item, $_tok;
11456 0         0 $item{__ACTION1__}=$_tok;
11457            
11458              
11459 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!title' /.*/]<<},
11460             Parse::RecDescent::_tracefirst($text),
11461             q{title},
11462             $tracelevel)
11463             if defined $::RD_TRACE;
11464              
11465              
11466              
11467 0         0 $_matched = 1;
11468 0         0 last;
11469             }
11470              
11471              
11472 21 50 33     109 unless ( $_matched || defined($score) )
11473             {
11474            
11475              
11476 21         39 $_[1] = $text; # NOT SURE THIS IS NEEDED
11477 21 50       40 Parse::RecDescent::_trace(q{<>},
11478             Parse::RecDescent::_tracefirst($_[1]),
11479             q{title},
11480             $tracelevel)
11481             if defined $::RD_TRACE;
11482 21         161 return undef;
11483             }
11484 0 0 0     0 if (!defined($return) && defined($score))
11485             {
11486 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11487             q{title},
11488             $tracelevel)
11489             if defined $::RD_TRACE;
11490 0         0 $return = $score_return;
11491             }
11492 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
11493 0 0       0 $return = $item[$#item] unless defined $return;
11494 0 0       0 if (defined $::RD_TRACE)
11495             {
11496 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11497             $return . q{])}, "",
11498             q{title},
11499             $tracelevel);
11500 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11501             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11502             Parse::RecDescent::_tracefirst($text),
11503             , q{title},
11504             $tracelevel)
11505             }
11506 0         0 $_[1] = $text;
11507 0         0 return $return;
11508             }
11509              
11510             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11511             sub Parse::RecDescent::Text::FormBuilder::Parser::blank
11512             {
11513 11     11   18 my $thisparser = $_[0];
11514 2     2   17 use vars q{$tracelevel};
  2         6  
  2         7221  
11515 11   50     42 local $tracelevel = ($tracelevel||0)+1;
11516 11         20 $ERRORS = 0;
11517 11         32 my $thisrule = $thisparser->{"rules"}{"blank"};
11518              
11519 11 50       27 Parse::RecDescent::_trace(q{Trying rule: [blank]},
11520             Parse::RecDescent::_tracefirst($_[1]),
11521             q{blank},
11522             $tracelevel)
11523             if defined $::RD_TRACE;
11524              
11525            
11526 11         14 my $err_at = @{$thisparser->{errors}};
  11         23  
11527              
11528 11         19 my $score;
11529             my $score_return;
11530 0         0 my $_tok;
11531 11         14 my $return = undef;
11532 11         19 my $_matched=0;
11533 11         15 my $commit=0;
11534 11         19 my @item = ();
11535 11         21 my %item = ();
11536 11         18 my $repeating = $_[2];
11537 11         14 my $_noactions = $_[3];
11538 11 50       31 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  11         15  
  11         27  
11539 11         17 my $_itempos = $_[5];
11540 11 50       29 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11541 11         22 my $text;
11542             my $lastsep;
11543 0         0 my $current_match;
11544 11         45 my $expectation = new Parse::RecDescent::Expectation(q{});
11545 11         95 $expectation->at($_[1]);
11546            
11547 11         43 my $thisline;
11548 11         53 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11549              
11550            
11551              
11552 11   33     122 while (!$_matched && !$commit)
11553             {
11554            
11555 11 50       28 Parse::RecDescent::_trace(q{Trying production: []},
11556             Parse::RecDescent::_tracefirst($_[1]),
11557             q{blank},
11558             $tracelevel)
11559             if defined $::RD_TRACE;
11560 11         32 my $thisprod = $thisrule->{"prods"}[0];
11561 11         21 $text = $_[1];
11562 11         14 my $_savetext;
11563 11         25 @item = (q{blank});
11564 11         35 %item = (__RULE__ => q{blank});
11565 11         19 my $repcount = 0;
11566              
11567              
11568 11 50       24 Parse::RecDescent::_trace(q{>>Matched production: []<<},
11569             Parse::RecDescent::_tracefirst($text),
11570             q{blank},
11571             $tracelevel)
11572             if defined $::RD_TRACE;
11573              
11574              
11575              
11576 11         12 $_matched = 1;
11577 11         20 last;
11578             }
11579              
11580              
11581 11 50 33     31 unless ( $_matched || defined($score) )
11582             {
11583            
11584              
11585 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
11586 0 0       0 Parse::RecDescent::_trace(q{<>},
11587             Parse::RecDescent::_tracefirst($_[1]),
11588             q{blank},
11589             $tracelevel)
11590             if defined $::RD_TRACE;
11591 0         0 return undef;
11592             }
11593 11 50 33     57 if (!defined($return) && defined($score))
11594             {
11595 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11596             q{blank},
11597             $tracelevel)
11598             if defined $::RD_TRACE;
11599 0         0 $return = $score_return;
11600             }
11601 11         12 splice @{$thisparser->{errors}}, $err_at;
  11         32  
11602 11 50       32 $return = $item[$#item] unless defined $return;
11603 11 50       39 if (defined $::RD_TRACE)
11604             {
11605 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11606             $return . q{])}, "",
11607             q{blank},
11608             $tracelevel);
11609 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11610             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11611             Parse::RecDescent::_tracefirst($text),
11612             , q{blank},
11613             $tracelevel)
11614             }
11615 11         18 $_[1] = $text;
11616 11         80 return $return;
11617             }
11618              
11619             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11620             sub Parse::RecDescent::Text::FormBuilder::Parser::unknown_directive
11621             {
11622 21     21   51 my $thisparser = $_[0];
11623 2     2   14 use vars q{$tracelevel};
  2         5  
  2         2858  
11624 21   50     75 local $tracelevel = ($tracelevel||0)+1;
11625 21         29 $ERRORS = 0;
11626 21         63 my $thisrule = $thisparser->{"rules"}{"unknown_directive"};
11627              
11628 21 50       46 Parse::RecDescent::_trace(q{Trying rule: [unknown_directive]},
11629             Parse::RecDescent::_tracefirst($_[1]),
11630             q{unknown_directive},
11631             $tracelevel)
11632             if defined $::RD_TRACE;
11633              
11634            
11635 21         36 my $err_at = @{$thisparser->{errors}};
  21         49  
11636              
11637 21         37 my $score;
11638             my $score_return;
11639 0         0 my $_tok;
11640 21         31 my $return = undef;
11641 21         31 my $_matched=0;
11642 21         34 my $commit=0;
11643 21         30 my @item = ();
11644 21         41 my %item = ();
11645 21         31 my $repeating = $_[2];
11646 21         38 my $_noactions = $_[3];
11647 21 50       61 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         37  
  21         48  
11648 21         39 my $_itempos = $_[5];
11649 21 50       71 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11650 21         43 my $text;
11651             my $lastsep;
11652 0         0 my $current_match;
11653 21         91 my $expectation = new Parse::RecDescent::Expectation(q{/\\!\\S*/});
11654 21         186 $expectation->at($_[1]);
11655            
11656 21         98 my $thisline;
11657 21         96 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11658              
11659            
11660              
11661 21   33     233 while (!$_matched && !$commit)
11662             {
11663            
11664 21 50       52 Parse::RecDescent::_trace(q{Trying production: [/\\!\\S*/ /.*/]},
11665             Parse::RecDescent::_tracefirst($_[1]),
11666             q{unknown_directive},
11667             $tracelevel)
11668             if defined $::RD_TRACE;
11669 21         59 my $thisprod = $thisrule->{"prods"}[0];
11670 21         36 $text = $_[1];
11671 21         26 my $_savetext;
11672 21         40 @item = (q{unknown_directive});
11673 21         61 %item = (__RULE__ => q{unknown_directive});
11674 21         31 my $repcount = 0;
11675              
11676              
11677 21 50       53 Parse::RecDescent::_trace(q{Trying terminal: [/\\!\\S*/]}, Parse::RecDescent::_tracefirst($text),
11678             q{unknown_directive},
11679             $tracelevel)
11680             if defined $::RD_TRACE;
11681 21         28 undef $lastsep;
11682 21         62 $expectation->is(q{})->at($text);
11683            
11684              
11685 21 50 33     254 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\!\S*)/)
  21 50       212  
11686             {
11687 21 50       69 $text = $lastsep . $text if defined $lastsep;
11688 21         75 $expectation->failed();
11689 21 50       107 Parse::RecDescent::_trace(q{<>},
11690             Parse::RecDescent::_tracefirst($text))
11691             if defined $::RD_TRACE;
11692              
11693 21         47 last;
11694             }
11695 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
11696 0         0 substr($text,0,length($current_match),q{});
11697 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
11698             . $current_match . q{])},
11699             Parse::RecDescent::_tracefirst($text))
11700             if defined $::RD_TRACE;
11701 0         0 push @item, $item{__PATTERN1__}=$current_match;
11702            
11703              
11704 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
11705             q{unknown_directive},
11706             $tracelevel)
11707             if defined $::RD_TRACE;
11708 0         0 undef $lastsep;
11709 0         0 $expectation->is(q{/.*/})->at($text);
11710            
11711              
11712 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*)/)
  0 0       0  
11713             {
11714 0 0       0 $text = $lastsep . $text if defined $lastsep;
11715 0         0 $expectation->failed();
11716 0 0       0 Parse::RecDescent::_trace(q{<>},
11717             Parse::RecDescent::_tracefirst($text))
11718             if defined $::RD_TRACE;
11719              
11720 0         0 last;
11721             }
11722 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
11723 0         0 substr($text,0,length($current_match),q{});
11724 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
11725             . $current_match . q{])},
11726             Parse::RecDescent::_tracefirst($text))
11727             if defined $::RD_TRACE;
11728 0         0 push @item, $item{__PATTERN2__}=$current_match;
11729            
11730              
11731 0 0       0 Parse::RecDescent::_trace(q{Trying action},
11732             Parse::RecDescent::_tracefirst($text),
11733             q{unknown_directive},
11734             $tracelevel)
11735             if defined $::RD_TRACE;
11736            
11737              
11738 0 0       0 $_tok = ($_noactions) ? 0 : do { warn "[Text::Formbuilder] Skipping unknown directive '$item[1]' at input text line $thisline\n"; };
  0         0  
11739 0 0       0 unless (defined $_tok)
11740             {
11741 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
11742             if defined $::RD_TRACE;
11743 0         0 last;
11744             }
11745 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
11746             . $_tok . q{])},
11747             Parse::RecDescent::_tracefirst($text))
11748             if defined $::RD_TRACE;
11749 0         0 push @item, $_tok;
11750 0         0 $item{__ACTION1__}=$_tok;
11751            
11752              
11753 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [/\\!\\S*/ /.*/]<<},
11754             Parse::RecDescent::_tracefirst($text),
11755             q{unknown_directive},
11756             $tracelevel)
11757             if defined $::RD_TRACE;
11758              
11759              
11760              
11761 0         0 $_matched = 1;
11762 0         0 last;
11763             }
11764              
11765              
11766 21 50 33     120 unless ( $_matched || defined($score) )
11767             {
11768            
11769              
11770 21         39 $_[1] = $text; # NOT SURE THIS IS NEEDED
11771 21 50       59 Parse::RecDescent::_trace(q{<>},
11772             Parse::RecDescent::_tracefirst($_[1]),
11773             q{unknown_directive},
11774             $tracelevel)
11775             if defined $::RD_TRACE;
11776 21         154 return undef;
11777             }
11778 0 0 0     0 if (!defined($return) && defined($score))
11779             {
11780 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11781             q{unknown_directive},
11782             $tracelevel)
11783             if defined $::RD_TRACE;
11784 0         0 $return = $score_return;
11785             }
11786 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
11787 0 0       0 $return = $item[$#item] unless defined $return;
11788 0 0       0 if (defined $::RD_TRACE)
11789             {
11790 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11791             $return . q{])}, "",
11792             q{unknown_directive},
11793             $tracelevel);
11794 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11795             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11796             Parse::RecDescent::_tracefirst($text),
11797             , q{unknown_directive},
11798             $tracelevel)
11799             }
11800 0         0 $_[1] = $text;
11801 0         0 return $return;
11802             }
11803              
11804             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11805             sub Parse::RecDescent::Text::FormBuilder::Parser::default
11806             {
11807 24     24   344 my $thisparser = $_[0];
11808 2     2   14 use vars q{$tracelevel};
  2         5  
  2         1468  
11809 24   50     100 local $tracelevel = ($tracelevel||0)+1;
11810 24         49 $ERRORS = 0;
11811 24         83 my $thisrule = $thisparser->{"rules"}{"default"};
11812              
11813 24 50       70 Parse::RecDescent::_trace(q{Trying rule: [default]},
11814             Parse::RecDescent::_tracefirst($_[1]),
11815             q{default},
11816             $tracelevel)
11817             if defined $::RD_TRACE;
11818              
11819            
11820 24         32 my $err_at = @{$thisparser->{errors}};
  24         55  
11821              
11822 24         81 my $score;
11823             my $score_return;
11824 0         0 my $_tok;
11825 24         39 my $return = undef;
11826 24         40 my $_matched=0;
11827 24         50 my $commit=0;
11828 24         145 my @item = ();
11829 24         61 my %item = ();
11830 24         13972 my $repeating = $_[2];
11831 24         47 my $_noactions = $_[3];
11832 24 50       81 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         123  
  24         67  
11833 24         46 my $_itempos = $_[5];
11834 24 50       94 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
11835 24         41 my $text;
11836             my $lastsep;
11837 0         0 my $current_match;
11838 24         111 my $expectation = new Parse::RecDescent::Expectation(q{'='});
11839 24         238 $expectation->at($_[1]);
11840            
11841 24         118 my $thisline;
11842 24         135 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
11843              
11844            
11845              
11846 24   33     861 while (!$_matched && !$commit)
11847             {
11848            
11849 24 50       78 Parse::RecDescent::_trace(q{Trying production: ['=' string]},
11850             Parse::RecDescent::_tracefirst($_[1]),
11851             q{default},
11852             $tracelevel)
11853             if defined $::RD_TRACE;
11854 24         82 my $thisprod = $thisrule->{"prods"}[0];
11855 24         40 $text = $_[1];
11856 24         43 my $_savetext;
11857 24         72 @item = (q{default});
11858 24         64 %item = (__RULE__ => q{default});
11859 24         44 my $repcount = 0;
11860              
11861              
11862 24 50       73 Parse::RecDescent::_trace(q{Trying terminal: ['=']},
11863             Parse::RecDescent::_tracefirst($text),
11864             q{default},
11865             $tracelevel)
11866             if defined $::RD_TRACE;
11867 24         844 undef $lastsep;
11868 24         88 $expectation->is(q{})->at($text);
11869            
11870              
11871 24 50 33     371 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\=/)
  24 50       260  
11872             {
11873 24 50       131 $text = $lastsep . $text if defined $lastsep;
11874            
11875 24         94 $expectation->failed();
11876 24 50       136 Parse::RecDescent::_trace(qq{<>},
11877             Parse::RecDescent::_tracefirst($text))
11878             if defined $::RD_TRACE;
11879 24         59 last;
11880             }
11881 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
11882 0         0 substr($text,0,length($current_match),q{});
11883 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
11884             . $current_match . q{])},
11885             Parse::RecDescent::_tracefirst($text))
11886             if defined $::RD_TRACE;
11887 0         0 push @item, $item{__STRING1__}=$current_match;
11888            
11889              
11890 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [string]},
11891             Parse::RecDescent::_tracefirst($text),
11892             q{default},
11893             $tracelevel)
11894             if defined $::RD_TRACE;
11895 2     2   17 if (1) { no strict qw{refs};
  2         7  
  2         1558  
  0         0  
11896 0         0 $expectation->is(q{string})->at($text);
11897 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
11898             {
11899            
11900 0 0       0 Parse::RecDescent::_trace(q{<>},
11901             Parse::RecDescent::_tracefirst($text),
11902             q{default},
11903             $tracelevel)
11904             if defined $::RD_TRACE;
11905 0         0 $expectation->failed();
11906 0         0 last;
11907             }
11908 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [string]<< (return value: [}
11909             . $_tok . q{]},
11910              
11911             Parse::RecDescent::_tracefirst($text),
11912             q{default},
11913             $tracelevel)
11914             if defined $::RD_TRACE;
11915 0         0 $item{q{string}} = $_tok;
11916 0         0 push @item, $_tok;
11917            
11918             }
11919              
11920 0 0       0 Parse::RecDescent::_trace(q{Trying action},
11921             Parse::RecDescent::_tracefirst($text),
11922             q{default},
11923             $tracelevel)
11924             if defined $::RD_TRACE;
11925            
11926              
11927 0 0       0 $_tok = ($_noactions) ? 0 : do { $item[2] };
  0         0  
11928 0 0       0 unless (defined $_tok)
11929             {
11930 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
11931             if defined $::RD_TRACE;
11932 0         0 last;
11933             }
11934 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
11935             . $_tok . q{])},
11936             Parse::RecDescent::_tracefirst($text))
11937             if defined $::RD_TRACE;
11938 0         0 push @item, $_tok;
11939 0         0 $item{__ACTION1__}=$_tok;
11940            
11941              
11942 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['=' string]<<},
11943             Parse::RecDescent::_tracefirst($text),
11944             q{default},
11945             $tracelevel)
11946             if defined $::RD_TRACE;
11947              
11948              
11949              
11950 0         0 $_matched = 1;
11951 0         0 last;
11952             }
11953              
11954              
11955 24 50 33     291 unless ( $_matched || defined($score) )
11956             {
11957            
11958              
11959 24         56 $_[1] = $text; # NOT SURE THIS IS NEEDED
11960 24 50       69 Parse::RecDescent::_trace(q{<>},
11961             Parse::RecDescent::_tracefirst($_[1]),
11962             q{default},
11963             $tracelevel)
11964             if defined $::RD_TRACE;
11965 24         223 return undef;
11966             }
11967 0 0 0     0 if (!defined($return) && defined($score))
11968             {
11969 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
11970             q{default},
11971             $tracelevel)
11972             if defined $::RD_TRACE;
11973 0         0 $return = $score_return;
11974             }
11975 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
11976 0 0       0 $return = $item[$#item] unless defined $return;
11977 0 0       0 if (defined $::RD_TRACE)
11978             {
11979 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
11980             $return . q{])}, "",
11981             q{default},
11982             $tracelevel);
11983 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
11984             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
11985             Parse::RecDescent::_tracefirst($text),
11986             , q{default},
11987             $tracelevel)
11988             }
11989 0         0 $_[1] = $text;
11990 0         0 return $return;
11991             }
11992              
11993             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
11994             sub Parse::RecDescent::Text::FormBuilder::Parser::field_line
11995             {
11996 0     0   0 my $thisparser = $_[0];
11997 2     2   13 use vars q{$tracelevel};
  2         11  
  2         1156  
11998 0   0     0 local $tracelevel = ($tracelevel||0)+1;
11999 0         0 $ERRORS = 0;
12000 0         0 my $thisrule = $thisparser->{"rules"}{"field_line"};
12001              
12002 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [field_line]},
12003             Parse::RecDescent::_tracefirst($_[1]),
12004             q{field_line},
12005             $tracelevel)
12006             if defined $::RD_TRACE;
12007              
12008            
12009 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
12010              
12011 0         0 my $score;
12012             my $score_return;
12013 0         0 my $_tok;
12014 0         0 my $return = undef;
12015 0         0 my $_matched=0;
12016 0         0 my $commit=0;
12017 0         0 my @item = ();
12018 0         0 my %item = ();
12019 0         0 my $repeating = $_[2];
12020 0         0 my $_noactions = $_[3];
12021 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
12022 0         0 my $_itempos = $_[5];
12023 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12024 0         0 my $text;
12025             my $lastsep;
12026 0         0 my $current_match;
12027 0         0 my $expectation = new Parse::RecDescent::Expectation(q{});
12028 0         0 $expectation->at($_[1]);
12029            
12030 0         0 my $thisline;
12031 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12032              
12033            
12034              
12035 0   0     0 while (!$_matched && !$commit)
12036             {
12037 0 0       0 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
12038 0 0       0 Parse::RecDescent::_trace(q{Trying production: [ field, or comment, or blank '\\n']},
12039             Parse::RecDescent::_tracefirst($_[1]),
12040             q{field_line},
12041             $tracelevel)
12042             if defined $::RD_TRACE;
12043 0         0 my $thisprod = $thisrule->{"prods"}[0];
12044 0         0 $text = $_[1];
12045 0         0 my $_savetext;
12046 0         0 @item = (q{field_line});
12047 0         0 %item = (__RULE__ => q{field_line});
12048 0         0 my $repcount = 0;
12049              
12050              
12051            
12052              
12053 0 0       0 Parse::RecDescent::_trace(q{Trying directive: []},
12054             Parse::RecDescent::_tracefirst($text),
12055             q{field_line},
12056             $tracelevel)
12057             if defined $::RD_TRACE;
12058 0         0 $_tok = do { my $oldskip = $skip; $skip='[ \t]*'; $oldskip };
  0         0  
  0         0  
  0         0  
12059 0 0       0 if (defined($_tok))
12060             {
12061 0 0       0 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
12062             . $_tok . q{])},
12063             Parse::RecDescent::_tracefirst($text))
12064             if defined $::RD_TRACE;
12065             }
12066             else
12067             {
12068 0 0       0 Parse::RecDescent::_trace(q{<>},
12069             Parse::RecDescent::_tracefirst($text))
12070             if defined $::RD_TRACE;
12071             }
12072            
12073 0 0       0 last unless defined $_tok;
12074 0         0 push @item, $item{__DIRECTIVE1__}=$_tok;
12075            
12076              
12077 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_field_line]},
12078             Parse::RecDescent::_tracefirst($text),
12079             q{field_line},
12080             $tracelevel)
12081             if defined $::RD_TRACE;
12082 2     2   12 if (1) { no strict qw{refs};
  2         5  
  2         1671  
  0         0  
12083 0         0 $expectation->is(q{field, or comment, or blank})->at($text);
12084 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_field_line($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
12085             {
12086            
12087 0 0       0 Parse::RecDescent::_trace(q{<>},
12088             Parse::RecDescent::_tracefirst($text),
12089             q{field_line},
12090             $tracelevel)
12091             if defined $::RD_TRACE;
12092 0         0 $expectation->failed();
12093 0         0 last;
12094             }
12095 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_field_line]<< (return value: [}
12096             . $_tok . q{]},
12097              
12098             Parse::RecDescent::_tracefirst($text),
12099             q{field_line},
12100             $tracelevel)
12101             if defined $::RD_TRACE;
12102 0         0 $item{q{_alternation_1_of_production_1_of_rule_field_line}} = $_tok;
12103 0         0 push @item, $_tok;
12104            
12105             }
12106              
12107 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\\n']},
12108             Parse::RecDescent::_tracefirst($text),
12109             q{field_line},
12110             $tracelevel)
12111             if defined $::RD_TRACE;
12112 0         0 undef $lastsep;
12113 0         0 $expectation->is(q{'\\n'})->at($text);
12114            
12115              
12116 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "\n"; 1 } and
  0 0 0     0  
  0   0     0  
  0         0  
12117             substr($text,0,length($_tok)) eq $_tok and
12118 0         0 do { substr($text,0,length($_tok)) = ""; 1; }
  0         0  
12119             )
12120             {
12121 0 0       0 $text = $lastsep . $text if defined $lastsep;
12122            
12123 0         0 $expectation->failed();
12124 0 0       0 Parse::RecDescent::_trace(q{<>},
12125             Parse::RecDescent::_tracefirst($text))
12126             if defined $::RD_TRACE;
12127 0         0 last;
12128             }
12129 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12130             . $_tok . q{])},
12131             Parse::RecDescent::_tracefirst($text))
12132             if defined $::RD_TRACE;
12133 0         0 push @item, $item{__STRING1__}=$_tok;
12134            
12135              
12136 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [ field, or comment, or blank '\\n']<<},
12137             Parse::RecDescent::_tracefirst($text),
12138             q{field_line},
12139             $tracelevel)
12140             if defined $::RD_TRACE;
12141              
12142              
12143              
12144 0         0 $_matched = 1;
12145 0         0 last;
12146             }
12147              
12148              
12149 0 0 0     0 unless ( $_matched || defined($score) )
12150             {
12151            
12152              
12153 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
12154 0 0       0 Parse::RecDescent::_trace(q{<>},
12155             Parse::RecDescent::_tracefirst($_[1]),
12156             q{field_line},
12157             $tracelevel)
12158             if defined $::RD_TRACE;
12159 0         0 return undef;
12160             }
12161 0 0 0     0 if (!defined($return) && defined($score))
12162             {
12163 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12164             q{field_line},
12165             $tracelevel)
12166             if defined $::RD_TRACE;
12167 0         0 $return = $score_return;
12168             }
12169 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
12170 0 0       0 $return = $item[$#item] unless defined $return;
12171 0 0       0 if (defined $::RD_TRACE)
12172             {
12173 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12174             $return . q{])}, "",
12175             q{field_line},
12176             $tracelevel);
12177 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12178             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12179             Parse::RecDescent::_tracefirst($text),
12180             , q{field_line},
12181             $tracelevel)
12182             }
12183 0         0 $_[1] = $text;
12184 0         0 return $return;
12185             }
12186              
12187             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12188             sub Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_field_size
12189             {
12190 3     3   5 my $thisparser = $_[0];
12191 2     2   16 use vars q{$tracelevel};
  2         5  
  2         1087  
12192 3   50     12 local $tracelevel = ($tracelevel||0)+1;
12193 3         8 $ERRORS = 0;
12194 3         10 my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_field_size"};
12195              
12196 3 50       22 Parse::RecDescent::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_field_size]},
12197             Parse::RecDescent::_tracefirst($_[1]),
12198             q{_alternation_1_of_production_1_of_rule_field_size},
12199             $tracelevel)
12200             if defined $::RD_TRACE;
12201              
12202            
12203 3         19 my $err_at = @{$thisparser->{errors}};
  3         61  
12204              
12205 3         7 my $score;
12206             my $score_return;
12207 0         0 my $_tok;
12208 3         8 my $return = undef;
12209 3         8 my $_matched=0;
12210 3         5 my $commit=0;
12211 3         8 my @item = ();
12212 3         9 my %item = ();
12213 3         4 my $repeating = $_[2];
12214 3         4 my $_noactions = $_[3];
12215 3 50       9 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  3         5  
  3         8  
12216 3         8 my $_itempos = $_[5];
12217 3 50       13 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12218 3         5 my $text;
12219             my $lastsep;
12220 0         0 my $current_match;
12221 3         13 my $expectation = new Parse::RecDescent::Expectation(q{row_col, or size});
12222 3         29 $expectation->at($_[1]);
12223            
12224 3         16 my $thisline;
12225 3         14 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12226              
12227            
12228              
12229 3   33     43 while (!$_matched && !$commit)
12230             {
12231            
12232 3 50       11 Parse::RecDescent::_trace(q{Trying production: [row_col]},
12233             Parse::RecDescent::_tracefirst($_[1]),
12234             q{_alternation_1_of_production_1_of_rule_field_size},
12235             $tracelevel)
12236             if defined $::RD_TRACE;
12237 3         10 my $thisprod = $thisrule->{"prods"}[0];
12238 3         6 $text = $_[1];
12239 3         4 my $_savetext;
12240 3         9 @item = (q{_alternation_1_of_production_1_of_rule_field_size});
12241 3         10 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_field_size});
12242 3         5 my $repcount = 0;
12243              
12244              
12245 3 50       11 Parse::RecDescent::_trace(q{Trying subrule: [row_col]},
12246             Parse::RecDescent::_tracefirst($text),
12247             q{_alternation_1_of_production_1_of_rule_field_size},
12248             $tracelevel)
12249             if defined $::RD_TRACE;
12250 2     2   14 if (1) { no strict qw{refs};
  2         4  
  2         928  
  3         12  
12251 3         13 $expectation->is(q{})->at($text);
12252 3 100   3   41 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::row_col($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  3         22  
12253             {
12254            
12255 2 50       7 Parse::RecDescent::_trace(q{<>},
12256             Parse::RecDescent::_tracefirst($text),
12257             q{_alternation_1_of_production_1_of_rule_field_size},
12258             $tracelevel)
12259             if defined $::RD_TRACE;
12260 2         6 $expectation->failed();
12261 2         10 last;
12262             }
12263 1 50       6 Parse::RecDescent::_trace(q{>>Matched subrule: [row_col]<< (return value: [}
12264             . $_tok . q{]},
12265              
12266             Parse::RecDescent::_tracefirst($text),
12267             q{_alternation_1_of_production_1_of_rule_field_size},
12268             $tracelevel)
12269             if defined $::RD_TRACE;
12270 1         3 $item{q{row_col}} = $_tok;
12271 1         3 push @item, $_tok;
12272            
12273             }
12274              
12275 1 50       4 Parse::RecDescent::_trace(q{>>Matched production: [row_col]<<},
12276             Parse::RecDescent::_tracefirst($text),
12277             q{_alternation_1_of_production_1_of_rule_field_size},
12278             $tracelevel)
12279             if defined $::RD_TRACE;
12280              
12281              
12282              
12283 1         2 $_matched = 1;
12284 1         2 last;
12285             }
12286              
12287              
12288 3   66     32 while (!$_matched && !$commit)
12289             {
12290            
12291 2 50       9 Parse::RecDescent::_trace(q{Trying production: [size]},
12292             Parse::RecDescent::_tracefirst($_[1]),
12293             q{_alternation_1_of_production_1_of_rule_field_size},
12294             $tracelevel)
12295             if defined $::RD_TRACE;
12296 2         8 my $thisprod = $thisrule->{"prods"}[1];
12297 2         5 $text = $_[1];
12298 2         4 my $_savetext;
12299 2         8 @item = (q{_alternation_1_of_production_1_of_rule_field_size});
12300 2         6 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_field_size});
12301 2         5 my $repcount = 0;
12302              
12303              
12304 2 50       92 Parse::RecDescent::_trace(q{Trying subrule: [size]},
12305             Parse::RecDescent::_tracefirst($text),
12306             q{_alternation_1_of_production_1_of_rule_field_size},
12307             $tracelevel)
12308             if defined $::RD_TRACE;
12309 2     2   24 if (1) { no strict qw{refs};
  2         4  
  2         1833  
  2         3  
12310 2         10 $expectation->is(q{})->at($text);
12311 2 50   2   30 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::size($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  2         7  
12312             {
12313            
12314 0 0       0 Parse::RecDescent::_trace(q{<>},
12315             Parse::RecDescent::_tracefirst($text),
12316             q{_alternation_1_of_production_1_of_rule_field_size},
12317             $tracelevel)
12318             if defined $::RD_TRACE;
12319 0         0 $expectation->failed();
12320 0         0 last;
12321             }
12322 2 50       11 Parse::RecDescent::_trace(q{>>Matched subrule: [size]<< (return value: [}
12323             . $_tok . q{]},
12324              
12325             Parse::RecDescent::_tracefirst($text),
12326             q{_alternation_1_of_production_1_of_rule_field_size},
12327             $tracelevel)
12328             if defined $::RD_TRACE;
12329 2         7 $item{q{size}} = $_tok;
12330 2         5 push @item, $_tok;
12331            
12332             }
12333              
12334 2 50       8 Parse::RecDescent::_trace(q{>>Matched production: [size]<<},
12335             Parse::RecDescent::_tracefirst($text),
12336             q{_alternation_1_of_production_1_of_rule_field_size},
12337             $tracelevel)
12338             if defined $::RD_TRACE;
12339              
12340              
12341              
12342 2         4 $_matched = 1;
12343 2         4 last;
12344             }
12345              
12346              
12347 3 50 33     13 unless ( $_matched || defined($score) )
12348             {
12349            
12350              
12351 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
12352 0 0       0 Parse::RecDescent::_trace(q{<>},
12353             Parse::RecDescent::_tracefirst($_[1]),
12354             q{_alternation_1_of_production_1_of_rule_field_size},
12355             $tracelevel)
12356             if defined $::RD_TRACE;
12357 0         0 return undef;
12358             }
12359 3 50 33     21 if (!defined($return) && defined($score))
12360             {
12361 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12362             q{_alternation_1_of_production_1_of_rule_field_size},
12363             $tracelevel)
12364             if defined $::RD_TRACE;
12365 0         0 $return = $score_return;
12366             }
12367 3         5 splice @{$thisparser->{errors}}, $err_at;
  3         10  
12368 3 50       11 $return = $item[$#item] unless defined $return;
12369 3 50       11 if (defined $::RD_TRACE)
12370             {
12371 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12372             $return . q{])}, "",
12373             q{_alternation_1_of_production_1_of_rule_field_size},
12374             $tracelevel);
12375 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12376             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12377             Parse::RecDescent::_tracefirst($text),
12378             , q{_alternation_1_of_production_1_of_rule_field_size},
12379             $tracelevel)
12380             }
12381 3         6 $_[1] = $text;
12382 3         27 return $return;
12383             }
12384              
12385             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12386             sub Parse::RecDescent::Text::FormBuilder::Parser::size
12387             {
12388 2     2   6 my $thisparser = $_[0];
12389 2     2   15 use vars q{$tracelevel};
  2         5  
  2         3843  
12390 2   50     8 local $tracelevel = ($tracelevel||0)+1;
12391 2         4 $ERRORS = 0;
12392 2         8 my $thisrule = $thisparser->{"rules"}{"size"};
12393              
12394 2 50       8 Parse::RecDescent::_trace(q{Trying rule: [size]},
12395             Parse::RecDescent::_tracefirst($_[1]),
12396             q{size},
12397             $tracelevel)
12398             if defined $::RD_TRACE;
12399              
12400            
12401 2         3 my $err_at = @{$thisparser->{errors}};
  2         13  
12402              
12403 2         5 my $score;
12404             my $score_return;
12405 0         0 my $_tok;
12406 2         4 my $return = undef;
12407 2         4 my $_matched=0;
12408 2         4 my $commit=0;
12409 2         5 my @item = ();
12410 2         4 my %item = ();
12411 2         3 my $repeating = $_[2];
12412 2         5 my $_noactions = $_[3];
12413 2 50       7 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  2         3  
  2         6  
12414 2         3 my $_itempos = $_[5];
12415 2 50       10 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12416 2         5 my $text;
12417             my $lastsep;
12418 0         0 my $current_match;
12419 2         12 my $expectation = new Parse::RecDescent::Expectation(q{/\\d+/});
12420 2         23 $expectation->at($_[1]);
12421            
12422 2         13 my $thisline;
12423 2         13 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12424              
12425            
12426              
12427 2   33     37 while (!$_matched && !$commit)
12428             {
12429            
12430 2 50       8 Parse::RecDescent::_trace(q{Trying production: [/\\d+/ bang]},
12431             Parse::RecDescent::_tracefirst($_[1]),
12432             q{size},
12433             $tracelevel)
12434             if defined $::RD_TRACE;
12435 2         8 my $thisprod = $thisrule->{"prods"}[0];
12436 2         5 $text = $_[1];
12437 2         5 my $_savetext;
12438 2         6 @item = (q{size});
12439 2         7 %item = (__RULE__ => q{size});
12440 2         5 my $repcount = 0;
12441              
12442              
12443 2 50       14 Parse::RecDescent::_trace(q{Trying terminal: [/\\d+/]}, Parse::RecDescent::_tracefirst($text),
12444             q{size},
12445             $tracelevel)
12446             if defined $::RD_TRACE;
12447 2         5 undef $lastsep;
12448 2         9 $expectation->is(q{})->at($text);
12449            
12450              
12451 2 50 33     46 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\d+)/)
  2 50       29  
12452             {
12453 0 0       0 $text = $lastsep . $text if defined $lastsep;
12454 0         0 $expectation->failed();
12455 0 0       0 Parse::RecDescent::_trace(q{<>},
12456             Parse::RecDescent::_tracefirst($text))
12457             if defined $::RD_TRACE;
12458              
12459 0         0 last;
12460             }
12461 2         15 $current_match = substr($text, $-[0], $+[0] - $-[0]);
12462 2         9 substr($text,0,length($current_match),q{});
12463 2 50       8 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12464             . $current_match . q{])},
12465             Parse::RecDescent::_tracefirst($text))
12466             if defined $::RD_TRACE;
12467 2         8 push @item, $item{__PATTERN1__}=$current_match;
12468            
12469              
12470 2 50       8 Parse::RecDescent::_trace(q{Trying repeated subrule: [bang]},
12471             Parse::RecDescent::_tracefirst($text),
12472             q{size},
12473             $tracelevel)
12474             if defined $::RD_TRACE;
12475 2         8 $expectation->is(q{bang})->at($text);
12476            
12477 2 50   2   41 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::bang, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  2         6  
12478             {
12479 0 0       0 Parse::RecDescent::_trace(q{<>},
12480             Parse::RecDescent::_tracefirst($text),
12481             q{size},
12482             $tracelevel)
12483             if defined $::RD_TRACE;
12484 0         0 last;
12485             }
12486 2 50       49 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bang]<< (}
12487             . @$_tok . q{ times)},
12488              
12489             Parse::RecDescent::_tracefirst($text),
12490             q{size},
12491             $tracelevel)
12492             if defined $::RD_TRACE;
12493 2         7 $item{q{bang(?)}} = $_tok;
12494 2         5 push @item, $_tok;
12495            
12496              
12497              
12498 2 50       8 Parse::RecDescent::_trace(q{Trying action},
12499             Parse::RecDescent::_tracefirst($text),
12500             q{size},
12501             $tracelevel)
12502             if defined $::RD_TRACE;
12503            
12504              
12505 2 100       14 $_tok = ($_noactions) ? 0 : do { $maxlength = $item[1] if $item[2][0]; $size = $item[1] };
  2 50       10  
  2         7  
12506 2 50       17 unless (defined $_tok)
12507             {
12508 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
12509             if defined $::RD_TRACE;
12510 0         0 last;
12511             }
12512 2 50       6 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12513             . $_tok . q{])},
12514             Parse::RecDescent::_tracefirst($text))
12515             if defined $::RD_TRACE;
12516 2         5 push @item, $_tok;
12517 2         8 $item{__ACTION1__}=$_tok;
12518            
12519              
12520 2 50       6 Parse::RecDescent::_trace(q{>>Matched production: [/\\d+/ bang]<<},
12521             Parse::RecDescent::_tracefirst($text),
12522             q{size},
12523             $tracelevel)
12524             if defined $::RD_TRACE;
12525              
12526              
12527              
12528 2         3 $_matched = 1;
12529 2         6 last;
12530             }
12531              
12532              
12533 2 50 33     8 unless ( $_matched || defined($score) )
12534             {
12535            
12536              
12537 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
12538 0 0       0 Parse::RecDescent::_trace(q{<>},
12539             Parse::RecDescent::_tracefirst($_[1]),
12540             q{size},
12541             $tracelevel)
12542             if defined $::RD_TRACE;
12543 0         0 return undef;
12544             }
12545 2 50 33     14 if (!defined($return) && defined($score))
12546             {
12547 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12548             q{size},
12549             $tracelevel)
12550             if defined $::RD_TRACE;
12551 0         0 $return = $score_return;
12552             }
12553 2         4 splice @{$thisparser->{errors}}, $err_at;
  2         7  
12554 2 50       9 $return = $item[$#item] unless defined $return;
12555 2 50       7 if (defined $::RD_TRACE)
12556             {
12557 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12558             $return . q{])}, "",
12559             q{size},
12560             $tracelevel);
12561 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12562             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12563             Parse::RecDescent::_tracefirst($text),
12564             , q{size},
12565             $tracelevel)
12566             }
12567 2         5 $_[1] = $text;
12568 2         27 return $return;
12569             }
12570              
12571             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12572             sub Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_validate
12573             {
12574 0     0   0 my $thisparser = $_[0];
12575 2     2   19 use vars q{$tracelevel};
  2         5  
  2         909  
12576 0   0     0 local $tracelevel = ($tracelevel||0)+1;
12577 0         0 $ERRORS = 0;
12578 0         0 my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_validate"};
12579              
12580 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_validate]},
12581             Parse::RecDescent::_tracefirst($_[1]),
12582             q{_alternation_1_of_production_1_of_rule_validate},
12583             $tracelevel)
12584             if defined $::RD_TRACE;
12585              
12586            
12587 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
12588              
12589 0         0 my $score;
12590             my $score_return;
12591 0         0 my $_tok;
12592 0         0 my $return = undef;
12593 0         0 my $_matched=0;
12594 0         0 my $commit=0;
12595 0         0 my @item = ();
12596 0         0 my %item = ();
12597 0         0 my $repeating = $_[2];
12598 0         0 my $_noactions = $_[3];
12599 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
12600 0         0 my $_itempos = $_[5];
12601 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12602 0         0 my $text;
12603             my $lastsep;
12604 0         0 my $current_match;
12605 0         0 my $expectation = new Parse::RecDescent::Expectation(q{optional_pattern, or required_pattern});
12606 0         0 $expectation->at($_[1]);
12607            
12608 0         0 my $thisline;
12609 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12610              
12611            
12612              
12613 0   0     0 while (!$_matched && !$commit)
12614             {
12615            
12616 0 0       0 Parse::RecDescent::_trace(q{Trying production: [optional_pattern]},
12617             Parse::RecDescent::_tracefirst($_[1]),
12618             q{_alternation_1_of_production_1_of_rule_validate},
12619             $tracelevel)
12620             if defined $::RD_TRACE;
12621 0         0 my $thisprod = $thisrule->{"prods"}[0];
12622 0         0 $text = $_[1];
12623 0         0 my $_savetext;
12624 0         0 @item = (q{_alternation_1_of_production_1_of_rule_validate});
12625 0         0 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_validate});
12626 0         0 my $repcount = 0;
12627              
12628              
12629 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [optional_pattern]},
12630             Parse::RecDescent::_tracefirst($text),
12631             q{_alternation_1_of_production_1_of_rule_validate},
12632             $tracelevel)
12633             if defined $::RD_TRACE;
12634 2     2   13 if (1) { no strict qw{refs};
  2         3  
  2         729  
  0         0  
12635 0         0 $expectation->is(q{})->at($text);
12636 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::optional_pattern($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
12637             {
12638            
12639 0 0       0 Parse::RecDescent::_trace(q{<>},
12640             Parse::RecDescent::_tracefirst($text),
12641             q{_alternation_1_of_production_1_of_rule_validate},
12642             $tracelevel)
12643             if defined $::RD_TRACE;
12644 0         0 $expectation->failed();
12645 0         0 last;
12646             }
12647 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [optional_pattern]<< (return value: [}
12648             . $_tok . q{]},
12649              
12650             Parse::RecDescent::_tracefirst($text),
12651             q{_alternation_1_of_production_1_of_rule_validate},
12652             $tracelevel)
12653             if defined $::RD_TRACE;
12654 0         0 $item{q{optional_pattern}} = $_tok;
12655 0         0 push @item, $_tok;
12656            
12657             }
12658              
12659 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [optional_pattern]<<},
12660             Parse::RecDescent::_tracefirst($text),
12661             q{_alternation_1_of_production_1_of_rule_validate},
12662             $tracelevel)
12663             if defined $::RD_TRACE;
12664              
12665              
12666              
12667 0         0 $_matched = 1;
12668 0         0 last;
12669             }
12670              
12671              
12672 0   0     0 while (!$_matched && !$commit)
12673             {
12674            
12675 0 0       0 Parse::RecDescent::_trace(q{Trying production: [required_pattern]},
12676             Parse::RecDescent::_tracefirst($_[1]),
12677             q{_alternation_1_of_production_1_of_rule_validate},
12678             $tracelevel)
12679             if defined $::RD_TRACE;
12680 0         0 my $thisprod = $thisrule->{"prods"}[1];
12681 0         0 $text = $_[1];
12682 0         0 my $_savetext;
12683 0         0 @item = (q{_alternation_1_of_production_1_of_rule_validate});
12684 0         0 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_validate});
12685 0         0 my $repcount = 0;
12686              
12687              
12688 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [required_pattern]},
12689             Parse::RecDescent::_tracefirst($text),
12690             q{_alternation_1_of_production_1_of_rule_validate},
12691             $tracelevel)
12692             if defined $::RD_TRACE;
12693 2     2   11 if (1) { no strict qw{refs};
  2         6  
  2         1273  
  0         0  
12694 0         0 $expectation->is(q{})->at($text);
12695 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::required_pattern($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
12696             {
12697            
12698 0 0       0 Parse::RecDescent::_trace(q{<>},
12699             Parse::RecDescent::_tracefirst($text),
12700             q{_alternation_1_of_production_1_of_rule_validate},
12701             $tracelevel)
12702             if defined $::RD_TRACE;
12703 0         0 $expectation->failed();
12704 0         0 last;
12705             }
12706 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [required_pattern]<< (return value: [}
12707             . $_tok . q{]},
12708              
12709             Parse::RecDescent::_tracefirst($text),
12710             q{_alternation_1_of_production_1_of_rule_validate},
12711             $tracelevel)
12712             if defined $::RD_TRACE;
12713 0         0 $item{q{required_pattern}} = $_tok;
12714 0         0 push @item, $_tok;
12715            
12716             }
12717              
12718 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [required_pattern]<<},
12719             Parse::RecDescent::_tracefirst($text),
12720             q{_alternation_1_of_production_1_of_rule_validate},
12721             $tracelevel)
12722             if defined $::RD_TRACE;
12723              
12724              
12725              
12726 0         0 $_matched = 1;
12727 0         0 last;
12728             }
12729              
12730              
12731 0 0 0     0 unless ( $_matched || defined($score) )
12732             {
12733            
12734              
12735 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
12736 0 0       0 Parse::RecDescent::_trace(q{<>},
12737             Parse::RecDescent::_tracefirst($_[1]),
12738             q{_alternation_1_of_production_1_of_rule_validate},
12739             $tracelevel)
12740             if defined $::RD_TRACE;
12741 0         0 return undef;
12742             }
12743 0 0 0     0 if (!defined($return) && defined($score))
12744             {
12745 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12746             q{_alternation_1_of_production_1_of_rule_validate},
12747             $tracelevel)
12748             if defined $::RD_TRACE;
12749 0         0 $return = $score_return;
12750             }
12751 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
12752 0 0       0 $return = $item[$#item] unless defined $return;
12753 0 0       0 if (defined $::RD_TRACE)
12754             {
12755 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12756             $return . q{])}, "",
12757             q{_alternation_1_of_production_1_of_rule_validate},
12758             $tracelevel);
12759 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
12760             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
12761             Parse::RecDescent::_tracefirst($text),
12762             , q{_alternation_1_of_production_1_of_rule_validate},
12763             $tracelevel)
12764             }
12765 0         0 $_[1] = $text;
12766 0         0 return $return;
12767             }
12768              
12769             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
12770             sub Parse::RecDescent::Text::FormBuilder::Parser::block
12771             {
12772 0     0   0 my $thisparser = $_[0];
12773 2     2   13 use vars q{$tracelevel};
  2         16  
  2         3856  
12774 0   0     0 local $tracelevel = ($tracelevel||0)+1;
12775 0         0 $ERRORS = 0;
12776 0         0 my $thisrule = $thisparser->{"rules"}{"block"};
12777              
12778 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [block]},
12779             Parse::RecDescent::_tracefirst($_[1]),
12780             q{block},
12781             $tracelevel)
12782             if defined $::RD_TRACE;
12783              
12784            
12785 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
12786              
12787 0         0 my $score;
12788             my $score_return;
12789 0         0 my $_tok;
12790 0         0 my $return = undef;
12791 0         0 my $_matched=0;
12792 0         0 my $commit=0;
12793 0         0 my @item = ();
12794 0         0 my %item = ();
12795 0         0 my $repeating = $_[2];
12796 0         0 my $_noactions = $_[3];
12797 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
12798 0         0 my $_itempos = $_[5];
12799 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
12800 0         0 my $text;
12801             my $lastsep;
12802 0         0 my $current_match;
12803 0         0 my $expectation = new Parse::RecDescent::Expectation(q{'\{'});
12804 0         0 $expectation->at($_[1]);
12805            
12806 0         0 my $thisline;
12807 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
12808              
12809            
12810              
12811 0   0     0 while (!$_matched && !$commit)
12812             {
12813 0 0       0 local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
12814 0 0       0 Parse::RecDescent::_trace(q{Trying production: ['\{' block_content '\}']},
12815             Parse::RecDescent::_tracefirst($_[1]),
12816             q{block},
12817             $tracelevel)
12818             if defined $::RD_TRACE;
12819 0         0 my $thisprod = $thisrule->{"prods"}[0];
12820 0         0 $text = $_[1];
12821 0         0 my $_savetext;
12822 0         0 @item = (q{block});
12823 0         0 %item = (__RULE__ => q{block});
12824 0         0 my $repcount = 0;
12825              
12826              
12827 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\{']},
12828             Parse::RecDescent::_tracefirst($text),
12829             q{block},
12830             $tracelevel)
12831             if defined $::RD_TRACE;
12832 0         0 undef $lastsep;
12833 0         0 $expectation->is(q{})->at($text);
12834            
12835              
12836 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\{/)
  0 0       0  
12837             {
12838 0 0       0 $text = $lastsep . $text if defined $lastsep;
12839            
12840 0         0 $expectation->failed();
12841 0 0       0 Parse::RecDescent::_trace(qq{<>},
12842             Parse::RecDescent::_tracefirst($text))
12843             if defined $::RD_TRACE;
12844 0         0 last;
12845             }
12846 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
12847 0         0 substr($text,0,length($current_match),q{});
12848 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12849             . $current_match . q{])},
12850             Parse::RecDescent::_tracefirst($text))
12851             if defined $::RD_TRACE;
12852 0         0 push @item, $item{__STRING1__}=$current_match;
12853            
12854              
12855            
12856              
12857 0 0       0 Parse::RecDescent::_trace(q{Trying directive: []},
12858             Parse::RecDescent::_tracefirst($text),
12859             q{block},
12860             $tracelevel)
12861             if defined $::RD_TRACE;
12862 0         0 $_tok = do { my $oldskip = $skip; $skip=''; $oldskip };
  0         0  
  0         0  
  0         0  
12863 0 0       0 if (defined($_tok))
12864             {
12865 0 0       0 Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
12866             . $_tok . q{])},
12867             Parse::RecDescent::_tracefirst($text))
12868             if defined $::RD_TRACE;
12869             }
12870             else
12871             {
12872 0 0       0 Parse::RecDescent::_trace(q{<>},
12873             Parse::RecDescent::_tracefirst($text))
12874             if defined $::RD_TRACE;
12875             }
12876            
12877 0 0       0 last unless defined $_tok;
12878 0         0 push @item, $item{__DIRECTIVE1__}=$_tok;
12879            
12880              
12881 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [block_content]},
12882             Parse::RecDescent::_tracefirst($text),
12883             q{block},
12884             $tracelevel)
12885             if defined $::RD_TRACE;
12886 0         0 $expectation->is(q{block_content})->at($text);
12887            
12888 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::block_content, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
12889             {
12890 0 0       0 Parse::RecDescent::_trace(q{<>},
12891             Parse::RecDescent::_tracefirst($text),
12892             q{block},
12893             $tracelevel)
12894             if defined $::RD_TRACE;
12895 0         0 last;
12896             }
12897 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [block_content]<< (}
12898             . @$_tok . q{ times)},
12899              
12900             Parse::RecDescent::_tracefirst($text),
12901             q{block},
12902             $tracelevel)
12903             if defined $::RD_TRACE;
12904 0         0 $item{q{block_content(s)}} = $_tok;
12905 0         0 push @item, $_tok;
12906            
12907              
12908              
12909 0 0       0 Parse::RecDescent::_trace(q{Trying terminal: ['\}']},
12910             Parse::RecDescent::_tracefirst($text),
12911             q{block},
12912             $tracelevel)
12913             if defined $::RD_TRACE;
12914 0         0 undef $lastsep;
12915 0         0 $expectation->is(q{'\}'})->at($text);
12916            
12917              
12918 0 0 0     0 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\}/)
  0 0       0  
12919             {
12920 0 0       0 $text = $lastsep . $text if defined $lastsep;
12921            
12922 0         0 $expectation->failed();
12923 0 0       0 Parse::RecDescent::_trace(qq{<>},
12924             Parse::RecDescent::_tracefirst($text))
12925             if defined $::RD_TRACE;
12926 0         0 last;
12927             }
12928 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
12929 0         0 substr($text,0,length($current_match),q{});
12930 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
12931             . $current_match . q{])},
12932             Parse::RecDescent::_tracefirst($text))
12933             if defined $::RD_TRACE;
12934 0         0 push @item, $item{__STRING2__}=$current_match;
12935            
12936              
12937 0 0       0 Parse::RecDescent::_trace(q{Trying action},
12938             Parse::RecDescent::_tracefirst($text),
12939             q{block},
12940             $tracelevel)
12941             if defined $::RD_TRACE;
12942            
12943              
12944 0 0       0 $_tok = ($_noactions) ? 0 : do { join('', @{ $item[3] }) };
  0         0  
  0         0  
12945 0 0       0 unless (defined $_tok)
12946             {
12947 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
12948             if defined $::RD_TRACE;
12949 0         0 last;
12950             }
12951 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
12952             . $_tok . q{])},
12953             Parse::RecDescent::_tracefirst($text))
12954             if defined $::RD_TRACE;
12955 0         0 push @item, $_tok;
12956 0         0 $item{__ACTION1__}=$_tok;
12957            
12958              
12959 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['\{' block_content '\}']<<},
12960             Parse::RecDescent::_tracefirst($text),
12961             q{block},
12962             $tracelevel)
12963             if defined $::RD_TRACE;
12964              
12965              
12966              
12967 0         0 $_matched = 1;
12968 0         0 last;
12969             }
12970              
12971              
12972 0 0 0     0 unless ( $_matched || defined($score) )
12973             {
12974            
12975              
12976 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
12977 0 0       0 Parse::RecDescent::_trace(q{<>},
12978             Parse::RecDescent::_tracefirst($_[1]),
12979             q{block},
12980             $tracelevel)
12981             if defined $::RD_TRACE;
12982 0         0 return undef;
12983             }
12984 0 0 0     0 if (!defined($return) && defined($score))
12985             {
12986 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
12987             q{block},
12988             $tracelevel)
12989             if defined $::RD_TRACE;
12990 0         0 $return = $score_return;
12991             }
12992 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
12993 0 0       0 $return = $item[$#item] unless defined $return;
12994 0 0       0 if (defined $::RD_TRACE)
12995             {
12996 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
12997             $return . q{])}, "",
12998             q{block},
12999             $tracelevel);
13000 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13001             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13002             Parse::RecDescent::_tracefirst($text),
13003             , q{block},
13004             $tracelevel)
13005             }
13006 0         0 $_[1] = $text;
13007 0         0 return $return;
13008             }
13009              
13010             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
13011             sub Parse::RecDescent::Text::FormBuilder::Parser::builtin_field
13012             {
13013 9     9   23 my $thisparser = $_[0];
13014 2     2   17 use vars q{$tracelevel};
  2         4  
  2         1756  
13015 9   50     34 local $tracelevel = ($tracelevel||0)+1;
13016 9         17 $ERRORS = 0;
13017 9         28 my $thisrule = $thisparser->{"rules"}{"builtin_field"};
13018              
13019 9 50       26 Parse::RecDescent::_trace(q{Trying rule: [builtin_field]},
13020             Parse::RecDescent::_tracefirst($_[1]),
13021             q{builtin_field},
13022             $tracelevel)
13023             if defined $::RD_TRACE;
13024              
13025            
13026 9         12 my $err_at = @{$thisparser->{errors}};
  9         19  
13027              
13028 9         18 my $score;
13029             my $score_return;
13030 0         0 my $_tok;
13031 9         12 my $return = undef;
13032 9         14 my $_matched=0;
13033 9         15 my $commit=0;
13034 9         18 my @item = ();
13035 9         22 my %item = ();
13036 9         15 my $repeating = $_[2];
13037 9         16 my $_noactions = $_[3];
13038 9 50       25 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  9         12  
  9         20  
13039 9         18 my $_itempos = $_[5];
13040 9 50       38 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13041 9         12 my $text;
13042             my $lastsep;
13043 0         0 my $current_match;
13044 9         42 my $expectation = new Parse::RecDescent::Expectation(q{/textarea|text|password|file|checkbox|radio|select|hidden|static/});
13045 9         81 $expectation->at($_[1]);
13046            
13047 9         43 my $thisline;
13048 9         53 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13049              
13050            
13051              
13052 9   33     176 while (!$_matched && !$commit)
13053             {
13054            
13055 9 50       24 Parse::RecDescent::_trace(q{Trying production: [/textarea|text|password|file|checkbox|radio|select|hidden|static/]},
13056             Parse::RecDescent::_tracefirst($_[1]),
13057             q{builtin_field},
13058             $tracelevel)
13059             if defined $::RD_TRACE;
13060 9         23 my $thisprod = $thisrule->{"prods"}[0];
13061 9         19 $text = $_[1];
13062 9         14 my $_savetext;
13063 9         108 @item = (q{builtin_field});
13064 9         21 %item = (__RULE__ => q{builtin_field});
13065 9         18 my $repcount = 0;
13066              
13067              
13068 9 50       29 Parse::RecDescent::_trace(q{Trying terminal: [/textarea|text|password|file|checkbox|radio|select|hidden|static/]}, Parse::RecDescent::_tracefirst($text),
13069             q{builtin_field},
13070             $tracelevel)
13071             if defined $::RD_TRACE;
13072 9         66 undef $lastsep;
13073 9         32 $expectation->is(q{})->at($text);
13074            
13075              
13076 9 50 33     244 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:textarea|text|password|file|checkbox|radio|select|hidden|static)/)
  9 50       139  
13077             {
13078 0 0       0 $text = $lastsep . $text if defined $lastsep;
13079 0         0 $expectation->failed();
13080 0 0       0 Parse::RecDescent::_trace(q{<>},
13081             Parse::RecDescent::_tracefirst($text))
13082             if defined $::RD_TRACE;
13083              
13084 0         0 last;
13085             }
13086 9         611 $current_match = substr($text, $-[0], $+[0] - $-[0]);
13087 9         34 substr($text,0,length($current_match),q{});
13088 9 50       28 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
13089             . $current_match . q{])},
13090             Parse::RecDescent::_tracefirst($text))
13091             if defined $::RD_TRACE;
13092 9         120 push @item, $item{__PATTERN1__}=$current_match;
13093            
13094              
13095 9 50       28 Parse::RecDescent::_trace(q{>>Matched production: [/textarea|text|password|file|checkbox|radio|select|hidden|static/]<<},
13096             Parse::RecDescent::_tracefirst($text),
13097             q{builtin_field},
13098             $tracelevel)
13099             if defined $::RD_TRACE;
13100              
13101              
13102              
13103 9         13 $_matched = 1;
13104 9         21 last;
13105             }
13106              
13107              
13108 9 50 33     45 unless ( $_matched || defined($score) )
13109             {
13110            
13111              
13112 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
13113 0 0       0 Parse::RecDescent::_trace(q{<>},
13114             Parse::RecDescent::_tracefirst($_[1]),
13115             q{builtin_field},
13116             $tracelevel)
13117             if defined $::RD_TRACE;
13118 0         0 return undef;
13119             }
13120 9 50 33     63 if (!defined($return) && defined($score))
13121             {
13122 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
13123             q{builtin_field},
13124             $tracelevel)
13125             if defined $::RD_TRACE;
13126 0         0 $return = $score_return;
13127             }
13128 9         15 splice @{$thisparser->{errors}}, $err_at;
  9         25  
13129 9 50       35 $return = $item[$#item] unless defined $return;
13130 9 50       24 if (defined $::RD_TRACE)
13131             {
13132 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
13133             $return . q{])}, "",
13134             q{builtin_field},
13135             $tracelevel);
13136 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13137             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13138             Parse::RecDescent::_tracefirst($text),
13139             , q{builtin_field},
13140             $tracelevel)
13141             }
13142 9         22 $_[1] = $text;
13143 9         85 return $return;
13144             }
13145              
13146             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
13147             sub Parse::RecDescent::Text::FormBuilder::Parser::hint
13148             {
13149 34     34   534 my $thisparser = $_[0];
13150 2     2   14 use vars q{$tracelevel};
  2         3  
  2         764  
13151 34   50     279 local $tracelevel = ($tracelevel||0)+1;
13152 34         59 $ERRORS = 0;
13153 34         92 my $thisrule = $thisparser->{"rules"}{"hint"};
13154              
13155 34 50       112 Parse::RecDescent::_trace(q{Trying rule: [hint]},
13156             Parse::RecDescent::_tracefirst($_[1]),
13157             q{hint},
13158             $tracelevel)
13159             if defined $::RD_TRACE;
13160              
13161            
13162 34         53 my $err_at = @{$thisparser->{errors}};
  34         87  
13163              
13164 34         60 my $score;
13165             my $score_return;
13166 0         0 my $_tok;
13167 34         49 my $return = undef;
13168 34         50 my $_matched=0;
13169 34         50 my $commit=0;
13170 34         65 my @item = ();
13171 34         138 my %item = ();
13172 34         51 my $repeating = $_[2];
13173 34         56 my $_noactions = $_[3];
13174 34 50       90 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  34         50  
  34         88  
13175 34         62 my $_itempos = $_[5];
13176 34 50       116 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13177 34         49 my $text;
13178             my $lastsep;
13179 0         0 my $current_match;
13180 34         136 my $expectation = new Parse::RecDescent::Expectation(q{bracket_block});
13181 34         348 $expectation->at($_[1]);
13182            
13183 34         150 my $thisline;
13184 34         182 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13185              
13186            
13187              
13188 34   33     381 while (!$_matched && !$commit)
13189             {
13190            
13191 34 50       88 Parse::RecDescent::_trace(q{Trying production: [bracket_block]},
13192             Parse::RecDescent::_tracefirst($_[1]),
13193             q{hint},
13194             $tracelevel)
13195             if defined $::RD_TRACE;
13196 34         98 my $thisprod = $thisrule->{"prods"}[0];
13197 34         86 $text = $_[1];
13198 34         49 my $_savetext;
13199 34         76 @item = (q{hint});
13200 34         87 %item = (__RULE__ => q{hint});
13201 34         56 my $repcount = 0;
13202              
13203              
13204 34 50       82 Parse::RecDescent::_trace(q{Trying subrule: [bracket_block]},
13205             Parse::RecDescent::_tracefirst($text),
13206             q{hint},
13207             $tracelevel)
13208             if defined $::RD_TRACE;
13209 2     2   12 if (1) { no strict qw{refs};
  2         5  
  2         1763  
  34         49  
13210 34         123 $expectation->is(q{})->at($text);
13211 34 50   34   430 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::bracket_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  34         93  
13212             {
13213            
13214 34 50       124 Parse::RecDescent::_trace(q{<>},
13215             Parse::RecDescent::_tracefirst($text),
13216             q{hint},
13217             $tracelevel)
13218             if defined $::RD_TRACE;
13219 34         118 $expectation->failed();
13220 34         136 last;
13221             }
13222 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [bracket_block]<< (return value: [}
13223             . $_tok . q{]},
13224              
13225             Parse::RecDescent::_tracefirst($text),
13226             q{hint},
13227             $tracelevel)
13228             if defined $::RD_TRACE;
13229 0         0 $item{q{bracket_block}} = $_tok;
13230 0         0 push @item, $_tok;
13231            
13232             }
13233              
13234 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [bracket_block]<<},
13235             Parse::RecDescent::_tracefirst($text),
13236             q{hint},
13237             $tracelevel)
13238             if defined $::RD_TRACE;
13239              
13240              
13241              
13242 0         0 $_matched = 1;
13243 0         0 last;
13244             }
13245              
13246              
13247 34 50 33     259 unless ( $_matched || defined($score) )
13248             {
13249            
13250              
13251 34         60 $_[1] = $text; # NOT SURE THIS IS NEEDED
13252 34 50       86 Parse::RecDescent::_trace(q{<>},
13253             Parse::RecDescent::_tracefirst($_[1]),
13254             q{hint},
13255             $tracelevel)
13256             if defined $::RD_TRACE;
13257 34         239 return undef;
13258             }
13259 0 0 0     0 if (!defined($return) && defined($score))
13260             {
13261 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
13262             q{hint},
13263             $tracelevel)
13264             if defined $::RD_TRACE;
13265 0         0 $return = $score_return;
13266             }
13267 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
13268 0 0       0 $return = $item[$#item] unless defined $return;
13269 0 0       0 if (defined $::RD_TRACE)
13270             {
13271 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
13272             $return . q{])}, "",
13273             q{hint},
13274             $tracelevel);
13275 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13276             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13277             Parse::RecDescent::_tracefirst($text),
13278             , q{hint},
13279             $tracelevel)
13280             }
13281 0         0 $_[1] = $text;
13282 0         0 return $return;
13283             }
13284              
13285             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
13286             sub Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_field_line
13287             {
13288 0     0   0 my $thisparser = $_[0];
13289 2     2   13 use vars q{$tracelevel};
  2         6  
  2         897  
13290 0   0     0 local $tracelevel = ($tracelevel||0)+1;
13291 0         0 $ERRORS = 0;
13292 0         0 my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_field_line"};
13293              
13294 0 0       0 Parse::RecDescent::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_field_line]},
13295             Parse::RecDescent::_tracefirst($_[1]),
13296             q{_alternation_1_of_production_1_of_rule_field_line},
13297             $tracelevel)
13298             if defined $::RD_TRACE;
13299              
13300            
13301 0         0 my $err_at = @{$thisparser->{errors}};
  0         0  
13302              
13303 0         0 my $score;
13304             my $score_return;
13305 0         0 my $_tok;
13306 0         0 my $return = undef;
13307 0         0 my $_matched=0;
13308 0         0 my $commit=0;
13309 0         0 my @item = ();
13310 0         0 my %item = ();
13311 0         0 my $repeating = $_[2];
13312 0         0 my $_noactions = $_[3];
13313 0 0       0 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0         0  
  0         0  
13314 0         0 my $_itempos = $_[5];
13315 0 0       0 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13316 0         0 my $text;
13317             my $lastsep;
13318 0         0 my $current_match;
13319 0         0 my $expectation = new Parse::RecDescent::Expectation(q{field, or comment, or blank});
13320 0         0 $expectation->at($_[1]);
13321            
13322 0         0 my $thisline;
13323 0         0 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13324              
13325            
13326              
13327 0   0     0 while (!$_matched && !$commit)
13328             {
13329            
13330 0 0       0 Parse::RecDescent::_trace(q{Trying production: [field]},
13331             Parse::RecDescent::_tracefirst($_[1]),
13332             q{_alternation_1_of_production_1_of_rule_field_line},
13333             $tracelevel)
13334             if defined $::RD_TRACE;
13335 0         0 my $thisprod = $thisrule->{"prods"}[0];
13336 0         0 $text = $_[1];
13337 0         0 my $_savetext;
13338 0         0 @item = (q{_alternation_1_of_production_1_of_rule_field_line});
13339 0         0 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_field_line});
13340 0         0 my $repcount = 0;
13341              
13342              
13343 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [field]},
13344             Parse::RecDescent::_tracefirst($text),
13345             q{_alternation_1_of_production_1_of_rule_field_line},
13346             $tracelevel)
13347             if defined $::RD_TRACE;
13348 2     2   20 if (1) { no strict qw{refs};
  2         4  
  2         752  
  0         0  
13349 0         0 $expectation->is(q{})->at($text);
13350 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::field($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
13351             {
13352            
13353 0 0       0 Parse::RecDescent::_trace(q{<>},
13354             Parse::RecDescent::_tracefirst($text),
13355             q{_alternation_1_of_production_1_of_rule_field_line},
13356             $tracelevel)
13357             if defined $::RD_TRACE;
13358 0         0 $expectation->failed();
13359 0         0 last;
13360             }
13361 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [field]<< (return value: [}
13362             . $_tok . q{]},
13363              
13364             Parse::RecDescent::_tracefirst($text),
13365             q{_alternation_1_of_production_1_of_rule_field_line},
13366             $tracelevel)
13367             if defined $::RD_TRACE;
13368 0         0 $item{q{field}} = $_tok;
13369 0         0 push @item, $_tok;
13370            
13371             }
13372              
13373 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [field]<<},
13374             Parse::RecDescent::_tracefirst($text),
13375             q{_alternation_1_of_production_1_of_rule_field_line},
13376             $tracelevel)
13377             if defined $::RD_TRACE;
13378              
13379              
13380              
13381 0         0 $_matched = 1;
13382 0         0 last;
13383             }
13384              
13385              
13386 0   0     0 while (!$_matched && !$commit)
13387             {
13388            
13389 0 0       0 Parse::RecDescent::_trace(q{Trying production: [comment]},
13390             Parse::RecDescent::_tracefirst($_[1]),
13391             q{_alternation_1_of_production_1_of_rule_field_line},
13392             $tracelevel)
13393             if defined $::RD_TRACE;
13394 0         0 my $thisprod = $thisrule->{"prods"}[1];
13395 0         0 $text = $_[1];
13396 0         0 my $_savetext;
13397 0         0 @item = (q{_alternation_1_of_production_1_of_rule_field_line});
13398 0         0 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_field_line});
13399 0         0 my $repcount = 0;
13400              
13401              
13402 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [comment]},
13403             Parse::RecDescent::_tracefirst($text),
13404             q{_alternation_1_of_production_1_of_rule_field_line},
13405             $tracelevel)
13406             if defined $::RD_TRACE;
13407 2     2   11 if (1) { no strict qw{refs};
  2         10  
  2         765  
  0         0  
13408 0         0 $expectation->is(q{})->at($text);
13409 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::comment($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
13410             {
13411            
13412 0 0       0 Parse::RecDescent::_trace(q{<>},
13413             Parse::RecDescent::_tracefirst($text),
13414             q{_alternation_1_of_production_1_of_rule_field_line},
13415             $tracelevel)
13416             if defined $::RD_TRACE;
13417 0         0 $expectation->failed();
13418 0         0 last;
13419             }
13420 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [comment]<< (return value: [}
13421             . $_tok . q{]},
13422              
13423             Parse::RecDescent::_tracefirst($text),
13424             q{_alternation_1_of_production_1_of_rule_field_line},
13425             $tracelevel)
13426             if defined $::RD_TRACE;
13427 0         0 $item{q{comment}} = $_tok;
13428 0         0 push @item, $_tok;
13429            
13430             }
13431              
13432 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [comment]<<},
13433             Parse::RecDescent::_tracefirst($text),
13434             q{_alternation_1_of_production_1_of_rule_field_line},
13435             $tracelevel)
13436             if defined $::RD_TRACE;
13437              
13438              
13439              
13440 0         0 $_matched = 1;
13441 0         0 last;
13442             }
13443              
13444              
13445 0   0     0 while (!$_matched && !$commit)
13446             {
13447            
13448 0 0       0 Parse::RecDescent::_trace(q{Trying production: [blank]},
13449             Parse::RecDescent::_tracefirst($_[1]),
13450             q{_alternation_1_of_production_1_of_rule_field_line},
13451             $tracelevel)
13452             if defined $::RD_TRACE;
13453 0         0 my $thisprod = $thisrule->{"prods"}[2];
13454 0         0 $text = $_[1];
13455 0         0 my $_savetext;
13456 0         0 @item = (q{_alternation_1_of_production_1_of_rule_field_line});
13457 0         0 %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_field_line});
13458 0         0 my $repcount = 0;
13459              
13460              
13461 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [blank]},
13462             Parse::RecDescent::_tracefirst($text),
13463             q{_alternation_1_of_production_1_of_rule_field_line},
13464             $tracelevel)
13465             if defined $::RD_TRACE;
13466 2     2   12 if (1) { no strict qw{refs};
  2         3  
  2         1220  
  0         0  
13467 0         0 $expectation->is(q{})->at($text);
13468 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::blank($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
13469             {
13470            
13471 0 0       0 Parse::RecDescent::_trace(q{<>},
13472             Parse::RecDescent::_tracefirst($text),
13473             q{_alternation_1_of_production_1_of_rule_field_line},
13474             $tracelevel)
13475             if defined $::RD_TRACE;
13476 0         0 $expectation->failed();
13477 0         0 last;
13478             }
13479 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [blank]<< (return value: [}
13480             . $_tok . q{]},
13481              
13482             Parse::RecDescent::_tracefirst($text),
13483             q{_alternation_1_of_production_1_of_rule_field_line},
13484             $tracelevel)
13485             if defined $::RD_TRACE;
13486 0         0 $item{q{blank}} = $_tok;
13487 0         0 push @item, $_tok;
13488            
13489             }
13490              
13491 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: [blank]<<},
13492             Parse::RecDescent::_tracefirst($text),
13493             q{_alternation_1_of_production_1_of_rule_field_line},
13494             $tracelevel)
13495             if defined $::RD_TRACE;
13496              
13497              
13498              
13499 0         0 $_matched = 1;
13500 0         0 last;
13501             }
13502              
13503              
13504 0 0 0     0 unless ( $_matched || defined($score) )
13505             {
13506            
13507              
13508 0         0 $_[1] = $text; # NOT SURE THIS IS NEEDED
13509 0 0       0 Parse::RecDescent::_trace(q{<>},
13510             Parse::RecDescent::_tracefirst($_[1]),
13511             q{_alternation_1_of_production_1_of_rule_field_line},
13512             $tracelevel)
13513             if defined $::RD_TRACE;
13514 0         0 return undef;
13515             }
13516 0 0 0     0 if (!defined($return) && defined($score))
13517             {
13518 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
13519             q{_alternation_1_of_production_1_of_rule_field_line},
13520             $tracelevel)
13521             if defined $::RD_TRACE;
13522 0         0 $return = $score_return;
13523             }
13524 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
13525 0 0       0 $return = $item[$#item] unless defined $return;
13526 0 0       0 if (defined $::RD_TRACE)
13527             {
13528 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
13529             $return . q{])}, "",
13530             q{_alternation_1_of_production_1_of_rule_field_line},
13531             $tracelevel);
13532 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13533             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13534             Parse::RecDescent::_tracefirst($text),
13535             , q{_alternation_1_of_production_1_of_rule_field_line},
13536             $tracelevel)
13537             }
13538 0         0 $_[1] = $text;
13539 0         0 return $return;
13540             }
13541              
13542             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
13543             sub Parse::RecDescent::Text::FormBuilder::Parser::validate
13544             {
13545 24     24   372 my $thisparser = $_[0];
13546 2     2   14 use vars q{$tracelevel};
  2         3  
  2         1414  
13547 24   50     98 local $tracelevel = ($tracelevel||0)+1;
13548 24         84 $ERRORS = 0;
13549 24         152 my $thisrule = $thisparser->{"rules"}{"validate"};
13550              
13551 24 50       75 Parse::RecDescent::_trace(q{Trying rule: [validate]},
13552             Parse::RecDescent::_tracefirst($_[1]),
13553             q{validate},
13554             $tracelevel)
13555             if defined $::RD_TRACE;
13556              
13557            
13558 24         37 my $err_at = @{$thisparser->{errors}};
  24         66  
13559              
13560 24         46 my $score;
13561             my $score_return;
13562 0         0 my $_tok;
13563 24         46 my $return = undef;
13564 24         38 my $_matched=0;
13565 24         43 my $commit=0;
13566 24         67 my @item = ();
13567 24         50 my %item = ();
13568 24         38 my $repeating = $_[2];
13569 24         46 my $_noactions = $_[3];
13570 24 50       71 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         40  
  24         71  
13571 24         45 my $_itempos = $_[5];
13572 24 50       82 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13573 24         42 my $text;
13574             my $lastsep;
13575 0         0 my $current_match;
13576 24         96 my $expectation = new Parse::RecDescent::Expectation(q{'//'});
13577 24         289 $expectation->at($_[1]);
13578            
13579 24         125 my $thisline;
13580 24         129 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13581              
13582            
13583              
13584 24   33     871 while (!$_matched && !$commit)
13585             {
13586            
13587 24 50       67 Parse::RecDescent::_trace(q{Trying production: ['//' optional_pattern, or required_pattern]},
13588             Parse::RecDescent::_tracefirst($_[1]),
13589             q{validate},
13590             $tracelevel)
13591             if defined $::RD_TRACE;
13592 24         81 my $thisprod = $thisrule->{"prods"}[0];
13593 24         41 $text = $_[1];
13594 24         141 my $_savetext;
13595 24         65 @item = (q{validate});
13596 24         67 %item = (__RULE__ => q{validate});
13597 24         41 my $repcount = 0;
13598              
13599              
13600 24 50       65 Parse::RecDescent::_trace(q{Trying terminal: ['//']},
13601             Parse::RecDescent::_tracefirst($text),
13602             q{validate},
13603             $tracelevel)
13604             if defined $::RD_TRACE;
13605 24         45 undef $lastsep;
13606 24         81 $expectation->is(q{})->at($text);
13607            
13608              
13609 24 50 33     504 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\/\//)
  24 50       354  
13610             {
13611 24 50       97 $text = $lastsep . $text if defined $lastsep;
13612            
13613 24         91 $expectation->failed();
13614 24 50       135 Parse::RecDescent::_trace(qq{<>},
13615             Parse::RecDescent::_tracefirst($text))
13616             if defined $::RD_TRACE;
13617 24         56 last;
13618             }
13619 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
13620 0         0 substr($text,0,length($current_match),q{});
13621 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
13622             . $current_match . q{])},
13623             Parse::RecDescent::_tracefirst($text))
13624             if defined $::RD_TRACE;
13625 0         0 push @item, $item{__STRING1__}=$current_match;
13626            
13627              
13628 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_validate]},
13629             Parse::RecDescent::_tracefirst($text),
13630             q{validate},
13631             $tracelevel)
13632             if defined $::RD_TRACE;
13633 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         1232  
  0         0  
13634 0         0 $expectation->is(q{optional_pattern, or required_pattern})->at($text);
13635 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_validate($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
13636             {
13637            
13638 0 0       0 Parse::RecDescent::_trace(q{<>},
13639             Parse::RecDescent::_tracefirst($text),
13640             q{validate},
13641             $tracelevel)
13642             if defined $::RD_TRACE;
13643 0         0 $expectation->failed();
13644 0         0 last;
13645             }
13646 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_validate]<< (return value: [}
13647             . $_tok . q{]},
13648              
13649             Parse::RecDescent::_tracefirst($text),
13650             q{validate},
13651             $tracelevel)
13652             if defined $::RD_TRACE;
13653 0         0 $item{q{_alternation_1_of_production_1_of_rule_validate}} = $_tok;
13654 0         0 push @item, $_tok;
13655            
13656             }
13657              
13658 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['//' optional_pattern, or required_pattern]<<},
13659             Parse::RecDescent::_tracefirst($text),
13660             q{validate},
13661             $tracelevel)
13662             if defined $::RD_TRACE;
13663              
13664              
13665              
13666 0         0 $_matched = 1;
13667 0         0 last;
13668             }
13669              
13670              
13671 24 50 33     234 unless ( $_matched || defined($score) )
13672             {
13673            
13674              
13675 24         72 $_[1] = $text; # NOT SURE THIS IS NEEDED
13676 24 50       68 Parse::RecDescent::_trace(q{<>},
13677             Parse::RecDescent::_tracefirst($_[1]),
13678             q{validate},
13679             $tracelevel)
13680             if defined $::RD_TRACE;
13681 24         179 return undef;
13682             }
13683 0 0 0     0 if (!defined($return) && defined($score))
13684             {
13685 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
13686             q{validate},
13687             $tracelevel)
13688             if defined $::RD_TRACE;
13689 0         0 $return = $score_return;
13690             }
13691 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
13692 0 0       0 $return = $item[$#item] unless defined $return;
13693 0 0       0 if (defined $::RD_TRACE)
13694             {
13695 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
13696             $return . q{])}, "",
13697             q{validate},
13698             $tracelevel);
13699 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13700             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13701             Parse::RecDescent::_tracefirst($text),
13702             , q{validate},
13703             $tracelevel)
13704             }
13705 0         0 $_[1] = $text;
13706 0         0 return $return;
13707             }
13708              
13709             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
13710             sub Parse::RecDescent::Text::FormBuilder::Parser::description_def
13711             {
13712 21     21   51 my $thisparser = $_[0];
13713 2     2   11 use vars q{$tracelevel};
  2         5  
  2         1381  
13714 21   50     71 local $tracelevel = ($tracelevel||0)+1;
13715 21         35 $ERRORS = 0;
13716 21         57 my $thisrule = $thisparser->{"rules"}{"description_def"};
13717              
13718 21 50       61 Parse::RecDescent::_trace(q{Trying rule: [description_def]},
13719             Parse::RecDescent::_tracefirst($_[1]),
13720             q{description_def},
13721             $tracelevel)
13722             if defined $::RD_TRACE;
13723              
13724            
13725 21         33 my $err_at = @{$thisparser->{errors}};
  21         72  
13726              
13727 21         36 my $score;
13728             my $score_return;
13729 0         0 my $_tok;
13730 21         61 my $return = undef;
13731 21         47 my $_matched=0;
13732 21         33 my $commit=0;
13733 21         43 my @item = ();
13734 21         39 my %item = ();
13735 21         33 my $repeating = $_[2];
13736 21         35 my $_noactions = $_[3];
13737 21 50       64 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         28  
  21         70  
13738 21         34 my $_itempos = $_[5];
13739 21 50       70 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13740 21         33 my $text;
13741             my $lastsep;
13742 0         0 my $current_match;
13743 21         87 my $expectation = new Parse::RecDescent::Expectation(q{'!description'});
13744 21         183 $expectation->at($_[1]);
13745            
13746 21         94 my $thisline;
13747 21         103 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13748              
13749            
13750              
13751 21   33     246 while (!$_matched && !$commit)
13752             {
13753            
13754 21 50       60 Parse::RecDescent::_trace(q{Trying production: ['!description' block]},
13755             Parse::RecDescent::_tracefirst($_[1]),
13756             q{description_def},
13757             $tracelevel)
13758             if defined $::RD_TRACE;
13759 21         63 my $thisprod = $thisrule->{"prods"}[0];
13760 21         48 $text = $_[1];
13761 21         27 my $_savetext;
13762 21         48 @item = (q{description_def});
13763 21         57 %item = (__RULE__ => q{description_def});
13764 21         36 my $repcount = 0;
13765              
13766              
13767 21 50       69 Parse::RecDescent::_trace(q{Trying terminal: ['!description']},
13768             Parse::RecDescent::_tracefirst($text),
13769             q{description_def},
13770             $tracelevel)
13771             if defined $::RD_TRACE;
13772 21         36 undef $lastsep;
13773 21         73 $expectation->is(q{})->at($text);
13774            
13775              
13776 21 100 33     250 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!description/)
  21 50       215  
13777             {
13778 21 50       71 $text = $lastsep . $text if defined $lastsep;
13779            
13780 21         86 $expectation->failed();
13781 21 50       113 Parse::RecDescent::_trace(qq{<>},
13782             Parse::RecDescent::_tracefirst($text))
13783             if defined $::RD_TRACE;
13784 21         47 last;
13785             }
13786 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
13787 0         0 substr($text,0,length($current_match),q{});
13788 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
13789             . $current_match . q{])},
13790             Parse::RecDescent::_tracefirst($text))
13791             if defined $::RD_TRACE;
13792 0         0 push @item, $item{__STRING1__}=$current_match;
13793            
13794              
13795 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [block]},
13796             Parse::RecDescent::_tracefirst($text),
13797             q{description_def},
13798             $tracelevel)
13799             if defined $::RD_TRACE;
13800 2     2   13 if (1) { no strict qw{refs};
  2         6  
  2         1508  
  0         0  
13801 0         0 $expectation->is(q{block})->at($text);
13802 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
13803             {
13804            
13805 0 0       0 Parse::RecDescent::_trace(q{<>},
13806             Parse::RecDescent::_tracefirst($text),
13807             q{description_def},
13808             $tracelevel)
13809             if defined $::RD_TRACE;
13810 0         0 $expectation->failed();
13811 0         0 last;
13812             }
13813 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [block]<< (return value: [}
13814             . $_tok . q{]},
13815              
13816             Parse::RecDescent::_tracefirst($text),
13817             q{description_def},
13818             $tracelevel)
13819             if defined $::RD_TRACE;
13820 0         0 $item{q{block}} = $_tok;
13821 0         0 push @item, $_tok;
13822            
13823             }
13824              
13825 0 0       0 Parse::RecDescent::_trace(q{Trying action},
13826             Parse::RecDescent::_tracefirst($text),
13827             q{description_def},
13828             $tracelevel)
13829             if defined $::RD_TRACE;
13830            
13831              
13832 0 0       0 $_tok = ($_noactions) ? 0 : do {
13833 0 0       0 warn "[Text::FormBuilder] Description redefined at input text line $thisline\n" if defined $formspec{description};
13834 0         0 $formspec{description} = $item{block};
13835             };
13836 0 0       0 unless (defined $_tok)
13837             {
13838 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
13839             if defined $::RD_TRACE;
13840 0         0 last;
13841             }
13842 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
13843             . $_tok . q{])},
13844             Parse::RecDescent::_tracefirst($text))
13845             if defined $::RD_TRACE;
13846 0         0 push @item, $_tok;
13847 0         0 $item{__ACTION1__}=$_tok;
13848            
13849              
13850 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!description' block]<<},
13851             Parse::RecDescent::_tracefirst($text),
13852             q{description_def},
13853             $tracelevel)
13854             if defined $::RD_TRACE;
13855              
13856              
13857              
13858 0         0 $_matched = 1;
13859 0         0 last;
13860             }
13861              
13862              
13863 21 50 33     138 unless ( $_matched || defined($score) )
13864             {
13865            
13866              
13867 21         46 $_[1] = $text; # NOT SURE THIS IS NEEDED
13868 21 50       52 Parse::RecDescent::_trace(q{<>},
13869             Parse::RecDescent::_tracefirst($_[1]),
13870             q{description_def},
13871             $tracelevel)
13872             if defined $::RD_TRACE;
13873 21         172 return undef;
13874             }
13875 0 0 0     0 if (!defined($return) && defined($score))
13876             {
13877 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
13878             q{description_def},
13879             $tracelevel)
13880             if defined $::RD_TRACE;
13881 0         0 $return = $score_return;
13882             }
13883 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
13884 0 0       0 $return = $item[$#item] unless defined $return;
13885 0 0       0 if (defined $::RD_TRACE)
13886             {
13887 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
13888             $return . q{])}, "",
13889             q{description_def},
13890             $tracelevel);
13891 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
13892             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
13893             Parse::RecDescent::_tracefirst($text),
13894             , q{description_def},
13895             $tracelevel)
13896             }
13897 0         0 $_[1] = $text;
13898 0         0 return $return;
13899             }
13900              
13901             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
13902             sub Parse::RecDescent::Text::FormBuilder::Parser::growable
13903             {
13904 24     24   451 my $thisparser = $_[0];
13905 2     2   12 use vars q{$tracelevel};
  2         3  
  2         2471  
13906 24   50     100 local $tracelevel = ($tracelevel||0)+1;
13907 24         86 $ERRORS = 0;
13908 24         75 my $thisrule = $thisparser->{"rules"}{"growable"};
13909              
13910 24 50       72 Parse::RecDescent::_trace(q{Trying rule: [growable]},
13911             Parse::RecDescent::_tracefirst($_[1]),
13912             q{growable},
13913             $tracelevel)
13914             if defined $::RD_TRACE;
13915              
13916            
13917 24         36 my $err_at = @{$thisparser->{errors}};
  24         55  
13918              
13919 24         49 my $score;
13920             my $score_return;
13921 0         0 my $_tok;
13922 24         82 my $return = undef;
13923 24         108 my $_matched=0;
13924 24         41 my $commit=0;
13925 24         58 my @item = ();
13926 24         44 my %item = ();
13927 24         41 my $repeating = $_[2];
13928 24         42 my $_noactions = $_[3];
13929 24 50       72 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         33  
  24         62  
13930 24         44 my $_itempos = $_[5];
13931 24 50       89 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
13932 24         46 my $text;
13933             my $lastsep;
13934 0         0 my $current_match;
13935 24         115 my $expectation = new Parse::RecDescent::Expectation(q{'*'});
13936 24         228 $expectation->at($_[1]);
13937            
13938 24         106 my $thisline;
13939 24         229 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
13940              
13941            
13942              
13943 24   33     267 while (!$_matched && !$commit)
13944             {
13945            
13946 24 50       70 Parse::RecDescent::_trace(q{Trying production: ['*' limit]},
13947             Parse::RecDescent::_tracefirst($_[1]),
13948             q{growable},
13949             $tracelevel)
13950             if defined $::RD_TRACE;
13951 24         70 my $thisprod = $thisrule->{"prods"}[0];
13952 24         60 $text = $_[1];
13953 24         42 my $_savetext;
13954 24         55 @item = (q{growable});
13955 24         75 %item = (__RULE__ => q{growable});
13956 24         35 my $repcount = 0;
13957              
13958              
13959 24 50       164 Parse::RecDescent::_trace(q{Trying terminal: ['*']},
13960             Parse::RecDescent::_tracefirst($text),
13961             q{growable},
13962             $tracelevel)
13963             if defined $::RD_TRACE;
13964 24         41 undef $lastsep;
13965 24         255 $expectation->is(q{})->at($text);
13966            
13967              
13968 24 50 33     355 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\*/)
  24 50       256  
13969             {
13970 24 50       99 $text = $lastsep . $text if defined $lastsep;
13971            
13972 24         368 $expectation->failed();
13973 24 50       136 Parse::RecDescent::_trace(qq{<>},
13974             Parse::RecDescent::_tracefirst($text))
13975             if defined $::RD_TRACE;
13976 24         51 last;
13977             }
13978 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
13979 0         0 substr($text,0,length($current_match),q{});
13980 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
13981             . $current_match . q{])},
13982             Parse::RecDescent::_tracefirst($text))
13983             if defined $::RD_TRACE;
13984 0         0 push @item, $item{__STRING1__}=$current_match;
13985            
13986              
13987 0 0       0 Parse::RecDescent::_trace(q{Trying repeated subrule: [limit]},
13988             Parse::RecDescent::_tracefirst($text),
13989             q{growable},
13990             $tracelevel)
13991             if defined $::RD_TRACE;
13992 0         0 $expectation->is(q{limit})->at($text);
13993            
13994 0 0   0   0 unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::limit, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
  0         0  
13995             {
13996 0 0       0 Parse::RecDescent::_trace(q{<>},
13997             Parse::RecDescent::_tracefirst($text),
13998             q{growable},
13999             $tracelevel)
14000             if defined $::RD_TRACE;
14001 0         0 last;
14002             }
14003 0 0       0 Parse::RecDescent::_trace(q{>>Matched repeated subrule: [limit]<< (}
14004             . @$_tok . q{ times)},
14005              
14006             Parse::RecDescent::_tracefirst($text),
14007             q{growable},
14008             $tracelevel)
14009             if defined $::RD_TRACE;
14010 0         0 $item{q{limit(?)}} = $_tok;
14011 0         0 push @item, $_tok;
14012            
14013              
14014              
14015 0 0       0 Parse::RecDescent::_trace(q{Trying action},
14016             Parse::RecDescent::_tracefirst($text),
14017             q{growable},
14018             $tracelevel)
14019             if defined $::RD_TRACE;
14020            
14021              
14022 0 0       0 $_tok = ($_noactions) ? 0 : do { $item{'limit(?)'}[0] || 1 };
  0 0       0  
14023 0 0       0 unless (defined $_tok)
14024             {
14025 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
14026             if defined $::RD_TRACE;
14027 0         0 last;
14028             }
14029 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
14030             . $_tok . q{])},
14031             Parse::RecDescent::_tracefirst($text))
14032             if defined $::RD_TRACE;
14033 0         0 push @item, $_tok;
14034 0         0 $item{__ACTION1__}=$_tok;
14035            
14036              
14037 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['*' limit]<<},
14038             Parse::RecDescent::_tracefirst($text),
14039             q{growable},
14040             $tracelevel)
14041             if defined $::RD_TRACE;
14042              
14043              
14044              
14045 0         0 $_matched = 1;
14046 0         0 last;
14047             }
14048              
14049              
14050 24 50 33     147 unless ( $_matched || defined($score) )
14051             {
14052            
14053              
14054 24         68 $_[1] = $text; # NOT SURE THIS IS NEEDED
14055 24 50       59 Parse::RecDescent::_trace(q{<>},
14056             Parse::RecDescent::_tracefirst($_[1]),
14057             q{growable},
14058             $tracelevel)
14059             if defined $::RD_TRACE;
14060 24         176 return undef;
14061             }
14062 0 0 0     0 if (!defined($return) && defined($score))
14063             {
14064 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
14065             q{growable},
14066             $tracelevel)
14067             if defined $::RD_TRACE;
14068 0         0 $return = $score_return;
14069             }
14070 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
14071 0 0       0 $return = $item[$#item] unless defined $return;
14072 0 0       0 if (defined $::RD_TRACE)
14073             {
14074 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
14075             $return . q{])}, "",
14076             q{growable},
14077             $tracelevel);
14078 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
14079             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
14080             Parse::RecDescent::_tracefirst($text),
14081             , q{growable},
14082             $tracelevel)
14083             }
14084 0         0 $_[1] = $text;
14085 0         0 return $return;
14086             }
14087              
14088             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
14089             sub Parse::RecDescent::Text::FormBuilder::Parser::field_size
14090             {
14091 24     24   682 my $thisparser = $_[0];
14092 2     2   13 use vars q{$tracelevel};
  2         5  
  2         1708  
14093 24   50     92 local $tracelevel = ($tracelevel||0)+1;
14094 24         44 $ERRORS = 0;
14095 24         72 my $thisrule = $thisparser->{"rules"}{"field_size"};
14096              
14097 24 50       89 Parse::RecDescent::_trace(q{Trying rule: [field_size]},
14098             Parse::RecDescent::_tracefirst($_[1]),
14099             q{field_size},
14100             $tracelevel)
14101             if defined $::RD_TRACE;
14102              
14103            
14104 24         36 my $err_at = @{$thisparser->{errors}};
  24         73  
14105              
14106 24         43 my $score;
14107             my $score_return;
14108 0         0 my $_tok;
14109 24         43 my $return = undef;
14110 24         40 my $_matched=0;
14111 24         44 my $commit=0;
14112 24         52 my @item = ();
14113 24         60 my %item = ();
14114 24         42 my $repeating = $_[2];
14115 24         37 my $_noactions = $_[3];
14116 24 50       88 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  24         45  
  24         53  
14117 24         43 my $_itempos = $_[5];
14118 24 50       211 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
14119 24         45 my $text;
14120             my $lastsep;
14121 0         0 my $current_match;
14122 24         105 my $expectation = new Parse::RecDescent::Expectation(q{'['});
14123 24         317 $expectation->at($_[1]);
14124            
14125 24         109 my $thisline;
14126 24         287 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
14127              
14128            
14129              
14130 24   33     389 while (!$_matched && !$commit)
14131             {
14132            
14133 24 50       75 Parse::RecDescent::_trace(q{Trying production: ['[' row_col, or size ']']},
14134             Parse::RecDescent::_tracefirst($_[1]),
14135             q{field_size},
14136             $tracelevel)
14137             if defined $::RD_TRACE;
14138 24         76 my $thisprod = $thisrule->{"prods"}[0];
14139 24         52 $text = $_[1];
14140 24         38 my $_savetext;
14141 24         59 @item = (q{field_size});
14142 24         74 %item = (__RULE__ => q{field_size});
14143 24         42 my $repcount = 0;
14144              
14145              
14146 24 50       69 Parse::RecDescent::_trace(q{Trying terminal: ['[']},
14147             Parse::RecDescent::_tracefirst($text),
14148             q{field_size},
14149             $tracelevel)
14150             if defined $::RD_TRACE;
14151 24         54 undef $lastsep;
14152 24         98 $expectation->is(q{})->at($text);
14153            
14154              
14155 24 50 66     572 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\[/)
  24 100       268  
14156             {
14157 21 50       74 $text = $lastsep . $text if defined $lastsep;
14158            
14159 21         114 $expectation->failed();
14160 21 50       215 Parse::RecDescent::_trace(qq{<>},
14161             Parse::RecDescent::_tracefirst($text))
14162             if defined $::RD_TRACE;
14163 21         55 last;
14164             }
14165 3         19 $current_match = substr($text, $-[0], $+[0] - $-[0]);
14166 3         12 substr($text,0,length($current_match),q{});
14167 3 50       11 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
14168             . $current_match . q{])},
14169             Parse::RecDescent::_tracefirst($text))
14170             if defined $::RD_TRACE;
14171 3         11 push @item, $item{__STRING1__}=$current_match;
14172            
14173              
14174 3 50       10 Parse::RecDescent::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_field_size]},
14175             Parse::RecDescent::_tracefirst($text),
14176             q{field_size},
14177             $tracelevel)
14178             if defined $::RD_TRACE;
14179 2     2   13 if (1) { no strict qw{refs};
  2         5  
  2         12395  
  3         6  
14180 3         12 $expectation->is(q{row_col, or size})->at($text);
14181 3 50   3   45 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_field_size($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  3         8  
14182             {
14183            
14184 0 0       0 Parse::RecDescent::_trace(q{<>},
14185             Parse::RecDescent::_tracefirst($text),
14186             q{field_size},
14187             $tracelevel)
14188             if defined $::RD_TRACE;
14189 0         0 $expectation->failed();
14190 0         0 last;
14191             }
14192 3 50       15 Parse::RecDescent::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_field_size]<< (return value: [}
14193             . $_tok . q{]},
14194              
14195             Parse::RecDescent::_tracefirst($text),
14196             q{field_size},
14197             $tracelevel)
14198             if defined $::RD_TRACE;
14199 3         8 $item{q{_alternation_1_of_production_1_of_rule_field_size}} = $_tok;
14200 3         8 push @item, $_tok;
14201            
14202             }
14203              
14204 3 50       11 Parse::RecDescent::_trace(q{Trying terminal: [']']},
14205             Parse::RecDescent::_tracefirst($text),
14206             q{field_size},
14207             $tracelevel)
14208             if defined $::RD_TRACE;
14209 3         5 undef $lastsep;
14210 3         11 $expectation->is(q{']'})->at($text);
14211            
14212              
14213 3 50 33     48 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\]/)
  3 50       53  
14214             {
14215 0 0       0 $text = $lastsep . $text if defined $lastsep;
14216            
14217 0         0 $expectation->failed();
14218 0 0       0 Parse::RecDescent::_trace(qq{<>},
14219             Parse::RecDescent::_tracefirst($text))
14220             if defined $::RD_TRACE;
14221 0         0 last;
14222             }
14223 3         19 $current_match = substr($text, $-[0], $+[0] - $-[0]);
14224 3         12 substr($text,0,length($current_match),q{});
14225 3 50       101 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
14226             . $current_match . q{])},
14227             Parse::RecDescent::_tracefirst($text))
14228             if defined $::RD_TRACE;
14229 3         11 push @item, $item{__STRING2__}=$current_match;
14230            
14231              
14232 3 50       9 Parse::RecDescent::_trace(q{>>Matched production: ['[' row_col, or size ']']<<},
14233             Parse::RecDescent::_tracefirst($text),
14234             q{field_size},
14235             $tracelevel)
14236             if defined $::RD_TRACE;
14237              
14238              
14239              
14240 3         6 $_matched = 1;
14241 3         7 last;
14242             }
14243              
14244              
14245 24 100 66     143 unless ( $_matched || defined($score) )
14246             {
14247            
14248              
14249 21         43 $_[1] = $text; # NOT SURE THIS IS NEEDED
14250 21 50       60 Parse::RecDescent::_trace(q{<>},
14251             Parse::RecDescent::_tracefirst($_[1]),
14252             q{field_size},
14253             $tracelevel)
14254             if defined $::RD_TRACE;
14255 21         151 return undef;
14256             }
14257 3 50 33     20 if (!defined($return) && defined($score))
14258             {
14259 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
14260             q{field_size},
14261             $tracelevel)
14262             if defined $::RD_TRACE;
14263 0         0 $return = $score_return;
14264             }
14265 3         4 splice @{$thisparser->{errors}}, $err_at;
  3         9  
14266 3 50       68 $return = $item[$#item] unless defined $return;
14267 3 50       11 if (defined $::RD_TRACE)
14268             {
14269 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
14270             $return . q{])}, "",
14271             q{field_size},
14272             $tracelevel);
14273 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
14274             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
14275             Parse::RecDescent::_tracefirst($text),
14276             , q{field_size},
14277             $tracelevel)
14278             }
14279 3         6 $_[1] = $text;
14280 3         27 return $return;
14281             }
14282              
14283             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
14284             sub Parse::RecDescent::Text::FormBuilder::Parser::pattern_def
14285             {
14286 21     21   40 my $thisparser = $_[0];
14287 2     2   25 use vars q{$tracelevel};
  2         8  
  2         1339  
14288 21   50     86 local $tracelevel = ($tracelevel||0)+1;
14289 21         36 $ERRORS = 0;
14290 21         56 my $thisrule = $thisparser->{"rules"}{"pattern_def"};
14291              
14292 21 50       51 Parse::RecDescent::_trace(q{Trying rule: [pattern_def]},
14293             Parse::RecDescent::_tracefirst($_[1]),
14294             q{pattern_def},
14295             $tracelevel)
14296             if defined $::RD_TRACE;
14297              
14298            
14299 21         36 my $err_at = @{$thisparser->{errors}};
  21         51  
14300              
14301 21         41 my $score;
14302             my $score_return;
14303 0         0 my $_tok;
14304 21         38 my $return = undef;
14305 21         30 my $_matched=0;
14306 21         30 my $commit=0;
14307 21         43 my @item = ();
14308 21         42 my %item = ();
14309 21         30 my $repeating = $_[2];
14310 21         37 my $_noactions = $_[3];
14311 21 50       60 my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  21         31  
  21         77  
14312 21         36 my $_itempos = $_[5];
14313 21 50       76 my %arg = ($#arg & 01) ? @arg : (@arg, undef);
14314 21         34 my $text;
14315             my $lastsep;
14316 0         0 my $current_match;
14317 21         98 my $expectation = new Parse::RecDescent::Expectation(q{'!pattern'});
14318 21         188 $expectation->at($_[1]);
14319            
14320 21         94 my $thisline;
14321 21         91 tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
14322              
14323            
14324              
14325 21   33     234 while (!$_matched && !$commit)
14326             {
14327            
14328 21 50       54 Parse::RecDescent::_trace(q{Trying production: ['!pattern' var_name pattern]},
14329             Parse::RecDescent::_tracefirst($_[1]),
14330             q{pattern_def},
14331             $tracelevel)
14332             if defined $::RD_TRACE;
14333 21         54 my $thisprod = $thisrule->{"prods"}[0];
14334 21         40 $text = $_[1];
14335 21         33 my $_savetext;
14336 21         46 @item = (q{pattern_def});
14337 21         62 %item = (__RULE__ => q{pattern_def});
14338 21         28 my $repcount = 0;
14339              
14340              
14341 21 50       50 Parse::RecDescent::_trace(q{Trying terminal: ['!pattern']},
14342             Parse::RecDescent::_tracefirst($text),
14343             q{pattern_def},
14344             $tracelevel)
14345             if defined $::RD_TRACE;
14346 21         33 undef $lastsep;
14347 21         71 $expectation->is(q{})->at($text);
14348            
14349              
14350 21 50 33     282 unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\!pattern/)
  21 50       214  
14351             {
14352 21 50       74 $text = $lastsep . $text if defined $lastsep;
14353            
14354 21         78 $expectation->failed();
14355 21 50       102 Parse::RecDescent::_trace(qq{<>},
14356             Parse::RecDescent::_tracefirst($text))
14357             if defined $::RD_TRACE;
14358 21         47 last;
14359             }
14360 0         0 $current_match = substr($text, $-[0], $+[0] - $-[0]);
14361 0         0 substr($text,0,length($current_match),q{});
14362 0 0       0 Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
14363             . $current_match . q{])},
14364             Parse::RecDescent::_tracefirst($text))
14365             if defined $::RD_TRACE;
14366 0         0 push @item, $item{__STRING1__}=$current_match;
14367            
14368              
14369 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [var_name]},
14370             Parse::RecDescent::_tracefirst($text),
14371             q{pattern_def},
14372             $tracelevel)
14373             if defined $::RD_TRACE;
14374 2     2   12 if (1) { no strict qw{refs};
  2         5  
  2         491  
  0         0  
14375 0         0 $expectation->is(q{var_name})->at($text);
14376 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::var_name($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
14377             {
14378            
14379 0 0       0 Parse::RecDescent::_trace(q{<>},
14380             Parse::RecDescent::_tracefirst($text),
14381             q{pattern_def},
14382             $tracelevel)
14383             if defined $::RD_TRACE;
14384 0         0 $expectation->failed();
14385 0         0 last;
14386             }
14387 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [var_name]<< (return value: [}
14388             . $_tok . q{]},
14389              
14390             Parse::RecDescent::_tracefirst($text),
14391             q{pattern_def},
14392             $tracelevel)
14393             if defined $::RD_TRACE;
14394 0         0 $item{q{var_name}} = $_tok;
14395 0         0 push @item, $_tok;
14396            
14397             }
14398              
14399 0 0       0 Parse::RecDescent::_trace(q{Trying subrule: [pattern]},
14400             Parse::RecDescent::_tracefirst($text),
14401             q{pattern_def},
14402             $tracelevel)
14403             if defined $::RD_TRACE;
14404 2     2   12 if (1) { no strict qw{refs};
  2         4  
  2         143996  
  0         0  
14405 0         0 $expectation->is(q{pattern})->at($text);
14406 0 0   0   0 unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::pattern($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
  0         0  
14407             {
14408            
14409 0 0       0 Parse::RecDescent::_trace(q{<>},
14410             Parse::RecDescent::_tracefirst($text),
14411             q{pattern_def},
14412             $tracelevel)
14413             if defined $::RD_TRACE;
14414 0         0 $expectation->failed();
14415 0         0 last;
14416             }
14417 0 0       0 Parse::RecDescent::_trace(q{>>Matched subrule: [pattern]<< (return value: [}
14418             . $_tok . q{]},
14419              
14420             Parse::RecDescent::_tracefirst($text),
14421             q{pattern_def},
14422             $tracelevel)
14423             if defined $::RD_TRACE;
14424 0         0 $item{q{pattern}} = $_tok;
14425 0         0 push @item, $_tok;
14426            
14427             }
14428              
14429 0 0       0 Parse::RecDescent::_trace(q{Trying action},
14430             Parse::RecDescent::_tracefirst($text),
14431             q{pattern_def},
14432             $tracelevel)
14433             if defined $::RD_TRACE;
14434            
14435              
14436 0 0       0 $_tok = ($_noactions) ? 0 : do { $patterns{$item{var_name}} = $item{pattern} };
  0         0  
14437 0 0       0 unless (defined $_tok)
14438             {
14439 0 0       0 Parse::RecDescent::_trace(q{<> (return value: [undef])})
14440             if defined $::RD_TRACE;
14441 0         0 last;
14442             }
14443 0 0       0 Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
14444             . $_tok . q{])},
14445             Parse::RecDescent::_tracefirst($text))
14446             if defined $::RD_TRACE;
14447 0         0 push @item, $_tok;
14448 0         0 $item{__ACTION1__}=$_tok;
14449            
14450              
14451 0 0       0 Parse::RecDescent::_trace(q{>>Matched production: ['!pattern' var_name pattern]<<},
14452             Parse::RecDescent::_tracefirst($text),
14453             q{pattern_def},
14454             $tracelevel)
14455             if defined $::RD_TRACE;
14456              
14457              
14458              
14459 0         0 $_matched = 1;
14460 0         0 last;
14461             }
14462              
14463              
14464 21 50 33     134 unless ( $_matched || defined($score) )
14465             {
14466            
14467              
14468 21         51 $_[1] = $text; # NOT SURE THIS IS NEEDED
14469 21 50       70 Parse::RecDescent::_trace(q{<>},
14470             Parse::RecDescent::_tracefirst($_[1]),
14471             q{pattern_def},
14472             $tracelevel)
14473             if defined $::RD_TRACE;
14474 21         168 return undef;
14475             }
14476 0 0 0     0 if (!defined($return) && defined($score))
14477             {
14478 0 0       0 Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
14479             q{pattern_def},
14480             $tracelevel)
14481             if defined $::RD_TRACE;
14482 0         0 $return = $score_return;
14483             }
14484 0         0 splice @{$thisparser->{errors}}, $err_at;
  0         0  
14485 0 0       0 $return = $item[$#item] unless defined $return;
14486 0 0       0 if (defined $::RD_TRACE)
14487             {
14488 0         0 Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
14489             $return . q{])}, "",
14490             q{pattern_def},
14491             $tracelevel);
14492 0         0 Parse::RecDescent::_trace(q{(consumed: [} .
14493             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
14494             Parse::RecDescent::_tracefirst($text),
14495             , q{pattern_def},
14496             $tracelevel)
14497             }
14498 0         0 $_[1] = $text;
14499 0         0 return $return;
14500             }
14501             }
14502 6     6 0 12316 package Text::FormBuilder::Parser; sub new { my $self = bless( {
14503             'namespace' => 'Parse::RecDescent::Text::FormBuilder::Parser',
14504             'rules' => {
14505             'options' => bless( {
14506             'changed' => 0,
14507             'calls' => [
14508             'option'
14509             ],
14510             'prods' => [
14511             bless( {
14512             'dircount' => 1,
14513             'error' => undef,
14514             'uncommit' => undef,
14515             'op' => [],
14516             'items' => [
14517             bless( {
14518             'line' => 286,
14519             'lookahead' => 0,
14520             'description' => '\'\\{\'',
14521             'hashname' => '__STRING1__',
14522             'pattern' => '{'
14523             }, 'Parse::RecDescent::Literal' ),
14524             bless( {
14525             'type' => 'leftop',
14526             'rightarg' => bless( {
14527             'subrule' => 'option',
14528             'argcode' => undef,
14529             'lookahead' => 0,
14530             'implicit' => undef,
14531             'line' => 286,
14532             'matchrule' => 0
14533             }, 'Parse::RecDescent::Subrule' ),
14534             'op' => bless( {
14535             'ldelim' => '/',
14536             'pattern' => '\\s*,\\s*',
14537             'hashname' => '__PATTERN1__',
14538             'lookahead' => 0,
14539             'mod' => '',
14540             'line' => 286,
14541             'rdelim' => '/',
14542             'description' => '/\\\\s*,\\\\s*/'
14543             }, 'Parse::RecDescent::Token' ),
14544             'hashname' => '__DIRECTIVE1__',
14545             'expected' => '',
14546             'leftarg' => bless( {
14547             'implicit' => undef,
14548             'line' => 286,
14549             'subrule' => 'option',
14550             'argcode' => undef,
14551             'lookahead' => 0,
14552             'matchrule' => 0
14553             }, 'Parse::RecDescent::Subrule' ),
14554             'max' => 100000000,
14555             'min' => 1,
14556             'name' => '\'option(s)\''
14557             }, 'Parse::RecDescent::Operator' ),
14558             bless( {
14559             'hashname' => '__STRING2__',
14560             'pattern' => '}',
14561             'line' => 286,
14562             'lookahead' => 0,
14563             'description' => '\'\\}\''
14564             }, 'Parse::RecDescent::Literal' )
14565             ],
14566             'patcount' => 1,
14567             'strcount' => 2,
14568             'number' => 0,
14569             'line' => undef,
14570             'actcount' => 0
14571             }, 'Parse::RecDescent::Production' )
14572             ],
14573             'vars' => '',
14574             'name' => 'options',
14575             'opcount' => 0,
14576             'impcount' => 0,
14577             'line' => 286
14578             }, 'Parse::RecDescent::Rule' ),
14579             'name' => bless( {
14580             'changed' => 0,
14581             'vars' => '',
14582             'prods' => [
14583             bless( {
14584             'actcount' => 0,
14585             'line' => undef,
14586             'strcount' => 0,
14587             'number' => 0,
14588             'patcount' => 0,
14589             'items' => [
14590             bless( {
14591             'implicit' => undef,
14592             'line' => 242,
14593             'argcode' => undef,
14594             'subrule' => 'identifier',
14595             'lookahead' => 0,
14596             'matchrule' => 0
14597             }, 'Parse::RecDescent::Subrule' )
14598             ],
14599             'uncommit' => undef,
14600             'error' => undef,
14601             'dircount' => 0
14602             }, 'Parse::RecDescent::Production' )
14603             ],
14604             'calls' => [
14605             'identifier'
14606             ],
14607             'name' => 'name',
14608             'impcount' => 0,
14609             'opcount' => 0,
14610             'line' => 242
14611             }, 'Parse::RecDescent::Rule' ),
14612             '_alternation_1_of_production_1_of_rule_line' => bless( {
14613             'calls' => [
14614             'title',
14615             'author',
14616             'pattern_def',
14617             'section_head',
14618             'heading',
14619             'submit',
14620             'reset',
14621             'group_field',
14622             'field_group',
14623             'unknown_directive',
14624             'field',
14625             'comment',
14626             'blank'
14627             ],
14628             'vars' => '',
14629             'prods' => [
14630             bless( {
14631             'dircount' => 0,
14632             'error' => undef,
14633             'uncommit' => undef,
14634             'patcount' => 0,
14635             'strcount' => 0,
14636             'number' => 0,
14637             'items' => [
14638             bless( {
14639             'lookahead' => 0,
14640             'argcode' => undef,
14641             'subrule' => 'title',
14642             'line' => 315,
14643             'implicit' => undef,
14644             'matchrule' => 0
14645             }, 'Parse::RecDescent::Subrule' )
14646             ],
14647             'actcount' => 0,
14648             'line' => undef
14649             }, 'Parse::RecDescent::Production' ),
14650             bless( {
14651             'patcount' => 0,
14652             'number' => 1,
14653             'strcount' => 0,
14654             'items' => [
14655             bless( {
14656             'matchrule' => 0,
14657             'implicit' => undef,
14658             'line' => 315,
14659             'argcode' => undef,
14660             'subrule' => 'author',
14661             'lookahead' => 0
14662             }, 'Parse::RecDescent::Subrule' )
14663             ],
14664             'actcount' => 0,
14665             'line' => 315,
14666             'dircount' => 0,
14667             'error' => undef,
14668             'uncommit' => undef
14669             }, 'Parse::RecDescent::Production' ),
14670             bless( {
14671             'dircount' => 0,
14672             'error' => undef,
14673             'uncommit' => undef,
14674             'items' => [
14675             bless( {
14676             'matchrule' => 0,
14677             'lookahead' => 0,
14678             'subrule' => 'pattern_def',
14679             'argcode' => undef,
14680             'line' => 315,
14681             'implicit' => undef
14682             }, 'Parse::RecDescent::Subrule' )
14683             ],
14684             'patcount' => 0,
14685             'number' => 2,
14686             'strcount' => 0,
14687             'line' => 315,
14688             'actcount' => 0
14689             }, 'Parse::RecDescent::Production' ),
14690             bless( {
14691             'actcount' => 0,
14692             'line' => 315,
14693             'number' => 3,
14694             'strcount' => 0,
14695             'patcount' => 0,
14696             'items' => [
14697             bless( {
14698             'implicit' => undef,
14699             'line' => 315,
14700             'argcode' => undef,
14701             'subrule' => 'section_head',
14702             'lookahead' => 0,
14703             'matchrule' => 0
14704             }, 'Parse::RecDescent::Subrule' )
14705             ],
14706             'uncommit' => undef,
14707             'error' => undef,
14708             'dircount' => 0
14709             }, 'Parse::RecDescent::Production' ),
14710             bless( {
14711             'line' => 315,
14712             'actcount' => 0,
14713             'items' => [
14714             bless( {
14715             'subrule' => 'heading',
14716             'argcode' => undef,
14717             'lookahead' => 0,
14718             'implicit' => undef,
14719             'line' => 315,
14720             'matchrule' => 0
14721             }, 'Parse::RecDescent::Subrule' )
14722             ],
14723             'strcount' => 0,
14724             'number' => 4,
14725             'patcount' => 0,
14726             'error' => undef,
14727             'uncommit' => undef,
14728             'dircount' => 0
14729             }, 'Parse::RecDescent::Production' ),
14730             bless( {
14731             'dircount' => 0,
14732             'error' => undef,
14733             'uncommit' => undef,
14734             'items' => [
14735             bless( {
14736             'line' => 315,
14737             'implicit' => undef,
14738             'lookahead' => 0,
14739             'argcode' => undef,
14740             'subrule' => 'submit',
14741             'matchrule' => 0
14742             }, 'Parse::RecDescent::Subrule' )
14743             ],
14744             'patcount' => 0,
14745             'strcount' => 0,
14746             'number' => 5,
14747             'line' => 315,
14748             'actcount' => 0
14749             }, 'Parse::RecDescent::Production' ),
14750             bless( {
14751             'dircount' => 0,
14752             'uncommit' => undef,
14753             'error' => undef,
14754             'patcount' => 0,
14755             'strcount' => 0,
14756             'number' => 6,
14757             'items' => [
14758             bless( {
14759             'matchrule' => 0,
14760             'line' => 315,
14761             'implicit' => undef,
14762             'lookahead' => 0,
14763             'subrule' => 'reset',
14764             'argcode' => undef
14765             }, 'Parse::RecDescent::Subrule' )
14766             ],
14767             'actcount' => 0,
14768             'line' => 315
14769             }, 'Parse::RecDescent::Production' ),
14770             bless( {
14771             'items' => [
14772             bless( {
14773             'matchrule' => 0,
14774             'line' => 315,
14775             'implicit' => undef,
14776             'lookahead' => 0,
14777             'subrule' => 'group_field',
14778             'argcode' => undef
14779             }, 'Parse::RecDescent::Subrule' )
14780             ],
14781             'patcount' => 0,
14782             'strcount' => 0,
14783             'number' => 7,
14784             'line' => 315,
14785             'actcount' => 0,
14786             'dircount' => 0,
14787             'uncommit' => undef,
14788             'error' => undef
14789             }, 'Parse::RecDescent::Production' ),
14790             bless( {
14791             'dircount' => 0,
14792             'uncommit' => undef,
14793             'error' => undef,
14794             'items' => [
14795             bless( {
14796             'matchrule' => 0,
14797             'line' => 315,
14798             'implicit' => undef,
14799             'lookahead' => 0,
14800             'subrule' => 'field_group',
14801             'argcode' => undef
14802             }, 'Parse::RecDescent::Subrule' )
14803             ],
14804             'strcount' => 0,
14805             'number' => 8,
14806             'patcount' => 0,
14807             'line' => 315,
14808             'actcount' => 0
14809             }, 'Parse::RecDescent::Production' ),
14810             bless( {
14811             'actcount' => 0,
14812             'line' => 315,
14813             'strcount' => 0,
14814             'number' => 9,
14815             'patcount' => 0,
14816             'items' => [
14817             bless( {
14818             'line' => 315,
14819             'implicit' => undef,
14820             'lookahead' => 0,
14821             'argcode' => undef,
14822             'subrule' => 'unknown_directive',
14823             'matchrule' => 0
14824             }, 'Parse::RecDescent::Subrule' )
14825             ],
14826             'uncommit' => undef,
14827             'error' => undef,
14828             'dircount' => 0
14829             }, 'Parse::RecDescent::Production' ),
14830             bless( {
14831             'uncommit' => undef,
14832             'error' => undef,
14833             'dircount' => 0,
14834             'actcount' => 0,
14835             'line' => 315,
14836             'strcount' => 0,
14837             'number' => 10,
14838             'patcount' => 0,
14839             'items' => [
14840             bless( {
14841             'matchrule' => 0,
14842             'implicit' => undef,
14843             'line' => 315,
14844             'subrule' => 'field',
14845             'argcode' => undef,
14846             'lookahead' => 0
14847             }, 'Parse::RecDescent::Subrule' )
14848             ]
14849             }, 'Parse::RecDescent::Production' ),
14850             bless( {
14851             'items' => [
14852             bless( {
14853             'matchrule' => 0,
14854             'implicit' => undef,
14855             'line' => 315,
14856             'argcode' => undef,
14857             'subrule' => 'comment',
14858             'lookahead' => 0
14859             }, 'Parse::RecDescent::Subrule' )
14860             ],
14861             'patcount' => 0,
14862             'number' => 11,
14863             'strcount' => 0,
14864             'line' => 315,
14865             'actcount' => 0,
14866             'dircount' => 0,
14867             'error' => undef,
14868             'uncommit' => undef
14869             }, 'Parse::RecDescent::Production' ),
14870             bless( {
14871             'line' => 315,
14872             'actcount' => 0,
14873             'items' => [
14874             bless( {
14875             'implicit' => undef,
14876             'line' => 315,
14877             'argcode' => undef,
14878             'subrule' => 'blank',
14879             'lookahead' => 0,
14880             'matchrule' => 0
14881             }, 'Parse::RecDescent::Subrule' )
14882             ],
14883             'patcount' => 0,
14884             'number' => 12,
14885             'strcount' => 0,
14886             'uncommit' => undef,
14887             'error' => undef,
14888             'dircount' => 0
14889             }, 'Parse::RecDescent::Production' )
14890             ],
14891             'changed' => 0,
14892             'impcount' => 0,
14893             'opcount' => 0,
14894             'line' => 315,
14895             'name' => '_alternation_1_of_production_1_of_rule_line'
14896             }, 'Parse::RecDescent::Rule' ),
14897             'other' => bless( {
14898             'changed' => 0,
14899             'calls' => [],
14900             'prods' => [
14901             bless( {
14902             'dircount' => 0,
14903             'error' => undef,
14904             'uncommit' => undef,
14905             'items' => [
14906             bless( {
14907             'hashname' => '__STRING1__',
14908             'pattern' => '+',
14909             'line' => 270,
14910             'description' => '\'+\'',
14911             'lookahead' => 0
14912             }, 'Parse::RecDescent::Literal' ),
14913             bless( {
14914             'lookahead' => 0,
14915             'description' => '\'other\'',
14916             'line' => 270,
14917             'pattern' => 'other',
14918             'hashname' => '__STRING2__'
14919             }, 'Parse::RecDescent::Literal' ),
14920             bless( {
14921             'hashname' => '__ACTION1__',
14922             'code' => '{ 1 }',
14923             'line' => 270,
14924             'lookahead' => 0
14925             }, 'Parse::RecDescent::Action' )
14926             ],
14927             'patcount' => 0,
14928             'strcount' => 2,
14929             'number' => 0,
14930             'line' => undef,
14931             'actcount' => 1
14932             }, 'Parse::RecDescent::Production' )
14933             ],
14934             'vars' => '',
14935             'name' => 'other',
14936             'opcount' => 0,
14937             'impcount' => 0,
14938             'line' => 270
14939             }, 'Parse::RecDescent::Rule' ),
14940             'list_var' => bless( {
14941             'changed' => 0,
14942             'calls' => [],
14943             'vars' => '',
14944             'prods' => [
14945             bless( {
14946             'line' => undef,
14947             'actcount' => 1,
14948             'items' => [
14949             bless( {
14950             'line' => 288,
14951             'lookahead' => 0,
14952             'mod' => '',
14953             'hashname' => '__PATTERN1__',
14954             'pattern' => '@[A-Z_]+',
14955             'ldelim' => '/',
14956             'description' => '/@[A-Z_]+/',
14957             'rdelim' => '/'
14958             }, 'Parse::RecDescent::Token' ),
14959             bless( {
14960             'lookahead' => 0,
14961             'line' => 288,
14962             'code' => '{ $list_var = $item[1] }',
14963             'hashname' => '__ACTION1__'
14964             }, 'Parse::RecDescent::Action' )
14965             ],
14966             'number' => 0,
14967             'strcount' => 0,
14968             'patcount' => 1,
14969             'uncommit' => undef,
14970             'error' => undef,
14971             'dircount' => 0
14972             }, 'Parse::RecDescent::Production' )
14973             ],
14974             'name' => 'list_var',
14975             'opcount' => 0,
14976             'line' => 288,
14977             'impcount' => 0
14978             }, 'Parse::RecDescent::Rule' ),
14979             'bracket_block' => bless( {
14980             'opcount' => 0,
14981             'impcount' => 0,
14982             'line' => 109,
14983             'name' => 'bracket_block',
14984             'vars' => '',
14985             'prods' => [
14986             bless( {
14987             'actcount' => 1,
14988             'line' => undef,
14989             'number' => 0,
14990             'strcount' => 2,
14991             'patcount' => 0,
14992             'items' => [
14993             bless( {
14994             'hashname' => '__STRING1__',
14995             'pattern' => '[',
14996             'line' => 110,
14997             'description' => '\'[\'',
14998             'lookahead' => 0
14999             }, 'Parse::RecDescent::Literal' ),
15000             bless( {
15001             'lookahead' => 0,
15002             'line' => 110,
15003             'code' => 'my $oldskip = $skip; $skip=\'\'; $oldskip',
15004             'name' => '',
15005             'hashname' => '__DIRECTIVE1__'
15006             }, 'Parse::RecDescent::Directive' ),
15007             bless( {
15008             'argcode' => undef,
15009             'repspec' => 's',
15010             'subrule' => 'bracket_block_content',
15011             'lookahead' => 0,
15012             'line' => 110,
15013             'max' => 100000000,
15014             'min' => 1,
15015             'expected' => undef,
15016             'matchrule' => 0
15017             }, 'Parse::RecDescent::Repetition' ),
15018             bless( {
15019             'hashname' => '__STRING2__',
15020             'pattern' => ']',
15021             'line' => 110,
15022             'lookahead' => 0,
15023             'description' => '\']\''
15024             }, 'Parse::RecDescent::Literal' ),
15025             bless( {
15026             'line' => 110,
15027             'lookahead' => 0,
15028             'hashname' => '__ACTION1__',
15029             'code' => '{ join(\'\', @{ $item[3] }) }'
15030             }, 'Parse::RecDescent::Action' )
15031             ],
15032             'error' => undef,
15033             'uncommit' => undef,
15034             'dircount' => 1
15035             }, 'Parse::RecDescent::Production' )
15036             ],
15037             'calls' => [
15038             'bracket_block_content'
15039             ],
15040             'changed' => 0
15041             }, 'Parse::RecDescent::Rule' ),
15042             'dynamic_list' => bless( {
15043             'changed' => 0,
15044             'prods' => [
15045             bless( {
15046             'error' => undef,
15047             'uncommit' => undef,
15048             'dircount' => 1,
15049             'actcount' => 1,
15050             'line' => undef,
15051             'patcount' => 0,
15052             'number' => 0,
15053             'strcount' => 1,
15054             'items' => [
15055             bless( {
15056             'line' => 79,
15057             'lookahead' => 0,
15058             'description' => '\'&\'',
15059             'hashname' => '__STRING1__',
15060             'pattern' => '&'
15061             }, 'Parse::RecDescent::Literal' ),
15062             bless( {
15063             'lookahead' => 0,
15064             'line' => 79,
15065             'name' => '',
15066             'code' => 'Text::Balanced::extract_codeblock($text,undef,$skip,\'{}\');
15067             ',
15068             'hashname' => '__DIRECTIVE1__'
15069             }, 'Parse::RecDescent::Directive' ),
15070             bless( {
15071             'code' => '{ warn "[Text::FormBuilder] Dynamic lists have been removed from the formspec grammar"; }',
15072             'hashname' => '__ACTION1__',
15073             'lookahead' => 0,
15074             'line' => 80
15075             }, 'Parse::RecDescent::Action' )
15076             ]
15077             }, 'Parse::RecDescent::Production' )
15078             ],
15079             'vars' => '',
15080             'calls' => [],
15081             'name' => 'dynamic_list',
15082             'opcount' => 0,
15083             'impcount' => 0,
15084             'line' => 79
15085             }, 'Parse::RecDescent::Rule' ),
15086             'inner_bracket_block' => bless( {
15087             'opcount' => 0,
15088             'impcount' => 0,
15089             'line' => 111,
15090             'name' => 'inner_bracket_block',
15091             'prods' => [
15092             bless( {
15093             'dircount' => 1,
15094             'error' => undef,
15095             'uncommit' => undef,
15096             'number' => 0,
15097             'strcount' => 2,
15098             'patcount' => 0,
15099             'items' => [
15100             bless( {
15101             'pattern' => '[',
15102             'hashname' => '__STRING1__',
15103             'description' => '\'[\'',
15104             'lookahead' => 0,
15105             'line' => 111
15106             }, 'Parse::RecDescent::Literal' ),
15107             bless( {
15108             'lookahead' => 0,
15109             'line' => 111,
15110             'code' => 'my $oldskip = $skip; $skip=\'\'; $oldskip',
15111             'name' => '',
15112             'hashname' => '__DIRECTIVE1__'
15113             }, 'Parse::RecDescent::Directive' ),
15114             bless( {
15115             'argcode' => undef,
15116             'repspec' => 's',
15117             'line' => 111,
15118             'subrule' => 'bracket_block_content',
15119             'lookahead' => 0,
15120             'max' => 100000000,
15121             'min' => 1,
15122             'expected' => undef,
15123             'matchrule' => 0
15124             }, 'Parse::RecDescent::Repetition' ),
15125             bless( {
15126             'description' => '\']\'',
15127             'lookahead' => 0,
15128             'line' => 111,
15129             'pattern' => ']',
15130             'hashname' => '__STRING2__'
15131             }, 'Parse::RecDescent::Literal' ),
15132             bless( {
15133             'line' => 111,
15134             'lookahead' => 0,
15135             'hashname' => '__ACTION1__',
15136             'code' => '{ \'[\' . join(\'\', @{ $item[3] }) . \']\'; }'
15137             }, 'Parse::RecDescent::Action' )
15138             ],
15139             'actcount' => 1,
15140             'line' => undef
15141             }, 'Parse::RecDescent::Production' )
15142             ],
15143             'vars' => '',
15144             'calls' => [
15145             'bracket_block_content'
15146             ],
15147             'changed' => 0
15148             }, 'Parse::RecDescent::Rule' ),
15149             'author' => bless( {
15150             'prods' => [
15151             bless( {
15152             'dircount' => 0,
15153             'error' => undef,
15154             'uncommit' => undef,
15155             'patcount' => 1,
15156             'strcount' => 1,
15157             'number' => 0,
15158             'items' => [
15159             bless( {
15160             'line' => 126,
15161             'lookahead' => 0,
15162             'description' => '\'!author\'',
15163             'hashname' => '__STRING1__',
15164             'pattern' => '!author'
15165             }, 'Parse::RecDescent::Literal' ),
15166             bless( {
15167             'mod' => '',
15168             'lookahead' => 0,
15169             'line' => 126,
15170             'pattern' => '.*',
15171             'ldelim' => '/',
15172             'hashname' => '__PATTERN1__',
15173             'description' => '/.*/',
15174             'rdelim' => '/'
15175             }, 'Parse::RecDescent::Token' ),
15176             bless( {
15177             'lookahead' => 0,
15178             'line' => 127,
15179             'code' => '{
15180             warn "[Text::FormBuilder] Author redefined at input text line $thisline\\n" if defined $formspec{author};
15181             $formspec{author} = $item[2];
15182             }',
15183             'hashname' => '__ACTION1__'
15184             }, 'Parse::RecDescent::Action' )
15185             ],
15186             'actcount' => 1,
15187             'line' => undef
15188             }, 'Parse::RecDescent::Production' )
15189             ],
15190             'vars' => '',
15191             'calls' => [],
15192             'changed' => 0,
15193             'impcount' => 0,
15194             'opcount' => 0,
15195             'line' => 126,
15196             'name' => 'author'
15197             }, 'Parse::RecDescent::Rule' ),
15198             'group_def' => bless( {
15199             'opcount' => 0,
15200             'impcount' => 0,
15201             'line' => 88,
15202             'name' => 'group_def',
15203             'calls' => [
15204             'var_name',
15205             'field_line'
15206             ],
15207             'vars' => '',
15208             'prods' => [
15209             bless( {
15210             'dircount' => 0,
15211             'error' => undef,
15212             'uncommit' => undef,
15213             'items' => [
15214             bless( {
15215             'pattern' => '!group',
15216             'hashname' => '__STRING1__',
15217             'description' => '\'!group\'',
15218             'lookahead' => 0,
15219             'line' => 88
15220             }, 'Parse::RecDescent::Literal' ),
15221             bless( {
15222             'lookahead' => 0,
15223             'line' => 88,
15224             'code' => '{ $context = \'group\' }',
15225             'hashname' => '__ACTION1__'
15226             }, 'Parse::RecDescent::Action' ),
15227             bless( {
15228             'line' => 88,
15229             'implicit' => undef,
15230             'lookahead' => 0,
15231             'argcode' => undef,
15232             'subrule' => 'var_name',
15233             'matchrule' => 0
15234             }, 'Parse::RecDescent::Subrule' ),
15235             bless( {
15236             'description' => '\'\\{\'',
15237             'lookahead' => 0,
15238             'line' => 88,
15239             'pattern' => '{',
15240             'hashname' => '__STRING2__'
15241             }, 'Parse::RecDescent::Literal' ),
15242             bless( {
15243             'repspec' => 's',
15244             'argcode' => undef,
15245             'line' => 88,
15246             'lookahead' => 0,
15247             'subrule' => 'field_line',
15248             'matchrule' => 0,
15249             'expected' => undef,
15250             'max' => 100000000,
15251             'min' => 1
15252             }, 'Parse::RecDescent::Repetition' ),
15253             bless( {
15254             'pattern' => '}',
15255             'hashname' => '__STRING3__',
15256             'lookahead' => 0,
15257             'description' => '\'\\}\'',
15258             'line' => 88
15259             }, 'Parse::RecDescent::Literal' ),
15260             bless( {
15261             'lookahead' => 0,
15262             'line' => 88,
15263             'code' => '{ $context = \'line\' }',
15264             'hashname' => '__ACTION2__'
15265             }, 'Parse::RecDescent::Action' ),
15266             bless( {
15267             'lookahead' => 0,
15268             'line' => 89,
15269             'code' => '{
15270             #warn "$item{var_name} group; context $context\\n"
15271             $groups{$item{var_name}} = [ @group ];
15272             @group = ();
15273             }',
15274             'hashname' => '__ACTION3__'
15275             }, 'Parse::RecDescent::Action' )
15276             ],
15277             'strcount' => 3,
15278             'number' => 0,
15279             'patcount' => 0,
15280             'line' => undef,
15281             'actcount' => 3
15282             }, 'Parse::RecDescent::Production' )
15283             ],
15284             'changed' => 0
15285             }, 'Parse::RecDescent::Rule' ),
15286             'form_spec' => bless( {
15287             'calls' => [
15288             '_alternation_1_of_production_1_of_rule_form_spec'
15289             ],
15290             'vars' => '',
15291             'prods' => [
15292             bless( {
15293             'actcount' => 2,
15294             'line' => undef,
15295             'patcount' => 0,
15296             'number' => 0,
15297             'strcount' => 0,
15298             'items' => [
15299             bless( {
15300             'hashname' => '__ACTION1__',
15301             'code' => '{
15302             # clear out old data, so we don\'t end up with old data in new objects
15303             @lines = ();
15304             @sections = ();
15305             %formspec = ();
15306             }',
15307             'line' => 39,
15308             'lookahead' => 0
15309             }, 'Parse::RecDescent::Action' ),
15310             bless( {
15311             'line' => 45,
15312             'lookahead' => 0,
15313             'subrule' => '_alternation_1_of_production_1_of_rule_form_spec',
15314             'expected' => 'list_def, or description_def, or group_def, or note, or fb_params, or unknown_block_directive, or line',
15315             'matchrule' => 0,
15316             'max' => 100000000,
15317             'min' => 1,
15318             'repspec' => 's',
15319             'argcode' => undef
15320             }, 'Parse::RecDescent::Repetition' ),
15321             bless( {
15322             'line' => 46,
15323             'lookahead' => 0,
15324             'hashname' => '__ACTION2__',
15325             'code' => '{
15326             # grab the last section, if there is any
15327             if (@lines) {
15328             push @sections,
15329             {
15330             id => $section_id,
15331             head => $section_head,
15332             lines => [ @lines ],
15333             };
15334             }
15335            
15336             # make copies instead of taking references, again so we
15337             # don\'t end up with connections between objects
15338             $return = {
15339             fb_params => $formspec{fb_params},
15340             title => $formspec{title},
15341             author => $formspec{author},
15342             description => $formspec{description},
15343             lists => { %lists },
15344             patterns => { %patterns },
15345             subs => { %subs },
15346             groups => { %groups },
15347             sections => [ @sections ],
15348             ( @submit ? (submit => @submit == 1 ? $submit[0] : [ @submit ]) : () ),
15349             reset => $formspec{reset},
15350             }
15351             }'
15352             }, 'Parse::RecDescent::Action' )
15353             ],
15354             'error' => undef,
15355             'uncommit' => undef,
15356             'dircount' => 0
15357             }, 'Parse::RecDescent::Production' )
15358             ],
15359             'changed' => 0,
15360             'opcount' => 0,
15361             'impcount' => 1,
15362             'line' => 38,
15363             'name' => 'form_spec'
15364             }, 'Parse::RecDescent::Rule' ),
15365             'identifier' => bless( {
15366             'name' => 'identifier',
15367             'opcount' => 0,
15368             'impcount' => 0,
15369             'line' => 307,
15370             'changed' => 0,
15371             'prods' => [
15372             bless( {
15373             'error' => undef,
15374             'uncommit' => undef,
15375             'dircount' => 0,
15376             'actcount' => 0,
15377             'line' => undef,
15378             'patcount' => 1,
15379             'strcount' => 0,
15380             'number' => 0,
15381             'items' => [
15382             bless( {
15383             'rdelim' => '/',
15384             'description' => '/\\\\w+/',
15385             'pattern' => '\\w+',
15386             'ldelim' => '/',
15387             'hashname' => '__PATTERN1__',
15388             'lookahead' => 0,
15389             'mod' => '',
15390             'line' => 307
15391             }, 'Parse::RecDescent::Token' )
15392             ]
15393             }, 'Parse::RecDescent::Production' )
15394             ],
15395             'vars' => '',
15396             'calls' => []
15397             }, 'Parse::RecDescent::Rule' ),
15398             'option' => bless( {
15399             'changed' => 0,
15400             'vars' => '',
15401             'prods' => [
15402             bless( {
15403             'dircount' => 0,
15404             'error' => undef,
15405             'uncommit' => undef,
15406             'items' => [
15407             bless( {
15408             'matchrule' => 0,
15409             'lookahead' => 0,
15410             'argcode' => undef,
15411             'subrule' => 'string',
15412             'line' => 290,
15413             'implicit' => undef
15414             }, 'Parse::RecDescent::Subrule' ),
15415             bless( {
15416             'line' => 290,
15417             'lookahead' => 0,
15418             'subrule' => 'display_text',
15419             'expected' => undef,
15420             'matchrule' => 0,
15421             'max' => 1,
15422             'min' => 0,
15423             'repspec' => '?',
15424             'argcode' => undef
15425             }, 'Parse::RecDescent::Repetition' ),
15426             bless( {
15427             'code' => '{ push @options, { $item[1] => $item{\'display_text(?)\'}[0] } }',
15428             'hashname' => '__ACTION1__',
15429             'lookahead' => 0,
15430             'line' => 291
15431             }, 'Parse::RecDescent::Action' )
15432             ],
15433             'patcount' => 0,
15434             'strcount' => 0,
15435             'number' => 0,
15436             'line' => undef,
15437             'actcount' => 1
15438             }, 'Parse::RecDescent::Production' )
15439             ],
15440             'calls' => [
15441             'string',
15442             'display_text'
15443             ],
15444             'name' => 'option',
15445             'opcount' => 0,
15446             'impcount' => 0,
15447             'line' => 290
15448             }, 'Parse::RecDescent::Rule' ),
15449             'group_name' => bless( {
15450             'opcount' => 0,
15451             'impcount' => 0,
15452             'line' => 176,
15453             'name' => 'group_name',
15454             'prods' => [
15455             bless( {
15456             'strcount' => 0,
15457             'number' => 0,
15458             'patcount' => 1,
15459             'items' => [
15460             bless( {
15461             'lookahead' => 0,
15462             'mod' => '',
15463             'line' => 176,
15464             'pattern' => '%[A-Z_]+',
15465             'ldelim' => '/',
15466             'hashname' => '__PATTERN1__',
15467             'description' => '/%[A-Z_]+/',
15468             'rdelim' => '/'
15469             }, 'Parse::RecDescent::Token' )
15470             ],
15471             'actcount' => 0,
15472             'line' => undef,
15473             'dircount' => 0,
15474             'uncommit' => undef,
15475             'error' => undef
15476             }, 'Parse::RecDescent::Production' )
15477             ],
15478             'vars' => '',
15479             'calls' => [],
15480             'changed' => 0
15481             }, 'Parse::RecDescent::Rule' ),
15482             'list_def' => bless( {
15483             'changed' => 0,
15484             'calls' => [
15485             'var_name',
15486             '_alternation_1_of_production_1_of_rule_list_def'
15487             ],
15488             'vars' => '',
15489             'prods' => [
15490             bless( {
15491             'items' => [
15492             bless( {
15493             'line' => 74,
15494             'lookahead' => 0,
15495             'description' => '\'!list\'',
15496             'hashname' => '__STRING1__',
15497             'pattern' => '!list'
15498             }, 'Parse::RecDescent::Literal' ),
15499             bless( {
15500             'matchrule' => 0,
15501             'implicit' => undef,
15502             'line' => 74,
15503             'argcode' => undef,
15504             'subrule' => 'var_name',
15505             'lookahead' => 0
15506             }, 'Parse::RecDescent::Subrule' ),
15507             bless( {
15508             'matchrule' => 0,
15509             'lookahead' => 0,
15510             'argcode' => undef,
15511             'subrule' => '_alternation_1_of_production_1_of_rule_list_def',
15512             'line' => 74,
15513             'implicit' => 'static_list, or dynamic_list'
15514             }, 'Parse::RecDescent::Subrule' ),
15515             bless( {
15516             'line' => 75,
15517             'lookahead' => 0,
15518             'hashname' => '__ACTION1__',
15519             'code' => '{ $lists{$item{var_name}} = [ @options ]; @options = () }'
15520             }, 'Parse::RecDescent::Action' )
15521             ],
15522             'patcount' => 0,
15523             'number' => 0,
15524             'strcount' => 1,
15525             'line' => undef,
15526             'actcount' => 1,
15527             'dircount' => 0,
15528             'uncommit' => undef,
15529             'error' => undef
15530             }, 'Parse::RecDescent::Production' )
15531             ],
15532             'name' => 'list_def',
15533             'impcount' => 1,
15534             'opcount' => 0,
15535             'line' => 74
15536             }, 'Parse::RecDescent::Rule' ),
15537             'multi' => bless( {
15538             'opcount' => 0,
15539             'impcount' => 0,
15540             'line' => 268,
15541             'name' => 'multi',
15542             'vars' => '',
15543             'prods' => [
15544             bless( {
15545             'patcount' => 0,
15546             'number' => 0,
15547             'strcount' => 1,
15548             'items' => [
15549             bless( {
15550             'lookahead' => 0,
15551             'description' => '\'*\'',
15552             'line' => 268,
15553             'pattern' => '*',
15554             'hashname' => '__STRING1__'
15555             }, 'Parse::RecDescent::Literal' ),
15556             bless( {
15557             'code' => '{ 1 }',
15558             'hashname' => '__ACTION1__',
15559             'lookahead' => 0,
15560             'line' => 268
15561             }, 'Parse::RecDescent::Action' )
15562             ],
15563             'actcount' => 1,
15564             'line' => undef,
15565             'dircount' => 0,
15566             'uncommit' => undef,
15567             'error' => undef
15568             }, 'Parse::RecDescent::Production' )
15569             ],
15570             'calls' => [],
15571             'changed' => 0
15572             }, 'Parse::RecDescent::Rule' ),
15573             'fb_params' => bless( {
15574             'name' => 'fb_params',
15575             'opcount' => 0,
15576             'line' => 178,
15577             'impcount' => 0,
15578             'changed' => 0,
15579             'calls' => [
15580             'block'
15581             ],
15582             'vars' => '',
15583             'prods' => [
15584             bless( {
15585             'uncommit' => undef,
15586             'error' => undef,
15587             'dircount' => 0,
15588             'actcount' => 1,
15589             'line' => undef,
15590             'number' => 0,
15591             'strcount' => 1,
15592             'patcount' => 0,
15593             'items' => [
15594             bless( {
15595             'pattern' => '!fb',
15596             'hashname' => '__STRING1__',
15597             'lookahead' => 0,
15598             'description' => '\'!fb\'',
15599             'line' => 179
15600             }, 'Parse::RecDescent::Literal' ),
15601             bless( {
15602             'matchrule' => 0,
15603             'implicit' => undef,
15604             'line' => 179,
15605             'subrule' => 'block',
15606             'argcode' => undef,
15607             'lookahead' => 0
15608             }, 'Parse::RecDescent::Subrule' ),
15609             bless( {
15610             'hashname' => '__ACTION1__',
15611             'code' => '{ $formspec{fb_params} .= $item{block}; }',
15612             'line' => 180,
15613             'lookahead' => 0
15614             }, 'Parse::RecDescent::Action' )
15615             ]
15616             }, 'Parse::RecDescent::Production' )
15617             ]
15618             }, 'Parse::RecDescent::Rule' ),
15619             'pattern' => bless( {
15620             'changed' => 0,
15621             'calls' => [],
15622             'vars' => '',
15623             'prods' => [
15624             bless( {
15625             'line' => undef,
15626             'actcount' => 0,
15627             'items' => [
15628             bless( {
15629             'description' => '/.*/',
15630             'rdelim' => '/',
15631             'line' => 135,
15632             'lookahead' => 0,
15633             'mod' => '',
15634             'hashname' => '__PATTERN1__',
15635             'ldelim' => '/',
15636             'pattern' => '.*'
15637             }, 'Parse::RecDescent::Token' )
15638             ],
15639             'number' => 0,
15640             'strcount' => 0,
15641             'patcount' => 1,
15642             'uncommit' => undef,
15643             'error' => undef,
15644             'dircount' => 0
15645             }, 'Parse::RecDescent::Production' )
15646             ],
15647             'name' => 'pattern',
15648             'impcount' => 0,
15649             'opcount' => 0,
15650             'line' => 135
15651             }, 'Parse::RecDescent::Rule' ),
15652             'required_pattern' => bless( {
15653             'name' => 'required_pattern',
15654             'opcount' => 0,
15655             'line' => 302,
15656             'impcount' => 0,
15657             'changed' => 0,
15658             'vars' => '',
15659             'prods' => [
15660             bless( {
15661             'dircount' => 0,
15662             'error' => undef,
15663             'uncommit' => undef,
15664             'patcount' => 0,
15665             'strcount' => 0,
15666             'number' => 0,
15667             'items' => [
15668             bless( {
15669             'matchrule' => 0,
15670             'lookahead' => 0,
15671             'argcode' => undef,
15672             'subrule' => 'var_name',
15673             'line' => 302,
15674             'implicit' => undef
15675             }, 'Parse::RecDescent::Subrule' ),
15676             bless( {
15677             'line' => 302,
15678             'lookahead' => 0,
15679             'hashname' => '__ACTION1__',
15680             'code' => '{ $required = 1; $item[1] }'
15681             }, 'Parse::RecDescent::Action' )
15682             ],
15683             'actcount' => 1,
15684             'line' => undef
15685             }, 'Parse::RecDescent::Production' )
15686             ],
15687             'calls' => [
15688             'var_name'
15689             ]
15690             }, 'Parse::RecDescent::Rule' ),
15691             'field_group' => bless( {
15692             'impcount' => 0,
15693             'opcount' => 0,
15694             'line' => 182,
15695             'name' => 'field_group',
15696             'calls' => [
15697             'name',
15698             'label',
15699             'hint',
15700             'group_type',
15701             'comment'
15702             ],
15703             'prods' => [
15704             bless( {
15705             'patcount' => 0,
15706             'number' => 0,
15707             'strcount' => 0,
15708             'items' => [
15709             bless( {
15710             'matchrule' => 0,
15711             'line' => 182,
15712             'implicit' => undef,
15713             'lookahead' => 0,
15714             'subrule' => 'name',
15715             'argcode' => undef
15716             }, 'Parse::RecDescent::Subrule' ),
15717             bless( {
15718             'argcode' => undef,
15719             'repspec' => '?',
15720             'max' => 1,
15721             'min' => 0,
15722             'matchrule' => 0,
15723             'expected' => undef,
15724             'line' => 182,
15725             'subrule' => 'label',
15726             'lookahead' => 0
15727             }, 'Parse::RecDescent::Repetition' ),
15728             bless( {
15729             'matchrule' => 0,
15730             'expected' => undef,
15731             'min' => 0,
15732             'max' => 1,
15733             'line' => 182,
15734             'lookahead' => 0,
15735             'subrule' => 'hint',
15736             'repspec' => '?',
15737             'argcode' => undef
15738             }, 'Parse::RecDescent::Repetition' ),
15739             bless( {
15740             'lookahead' => 0,
15741             'argcode' => undef,
15742             'subrule' => 'group_type',
15743             'line' => 182,
15744             'implicit' => undef,
15745             'matchrule' => 0
15746             }, 'Parse::RecDescent::Subrule' ),
15747             bless( {
15748             'min' => 0,
15749             'max' => 1,
15750             'matchrule' => 0,
15751             'expected' => undef,
15752             'line' => 182,
15753             'subrule' => 'comment',
15754             'lookahead' => 0,
15755             'argcode' => undef,
15756             'repspec' => '?'
15757             }, 'Parse::RecDescent::Repetition' ),
15758             bless( {
15759             'line' => 183,
15760             'lookahead' => 0,
15761             'hashname' => '__ACTION1__',
15762             'code' => '{
15763             #warn "[$thisline] comment = $item{\'hint(?)\'}[0]\\n" if $item{\'hint(?)\'}[0];
15764             #warn "[$thisline] field $item{name} is $item{group_type}\\n";
15765             push @lines, [ \'group\', {
15766             name => $item{name},
15767             label => $item{\'label(?)\'}[0],
15768             comment => $item{\'hint(?)\'}[0],
15769             group => $item{group_type},
15770             } ];
15771             }'
15772             }, 'Parse::RecDescent::Action' )
15773             ],
15774             'actcount' => 1,
15775             'line' => undef,
15776             'dircount' => 0,
15777             'uncommit' => undef,
15778             'error' => undef
15779             }, 'Parse::RecDescent::Production' )
15780             ],
15781             'vars' => '',
15782             'changed' => 0
15783             }, 'Parse::RecDescent::Rule' ),
15784             'unknown_block_directive' => bless( {
15785             'changed' => 0,
15786             'prods' => [
15787             bless( {
15788             'dircount' => 0,
15789             'uncommit' => undef,
15790             'error' => undef,
15791             'items' => [
15792             bless( {
15793             'rdelim' => '/',
15794             'description' => '/\\\\!\\\\S*/',
15795             'ldelim' => '/',
15796             'pattern' => '\\!\\S*',
15797             'hashname' => '__PATTERN1__',
15798             'lookahead' => 0,
15799             'mod' => '',
15800             'line' => 313
15801             }, 'Parse::RecDescent::Token' ),
15802             bless( {
15803             'line' => 313,
15804             'subrule' => 'var_name',
15805             'lookahead' => 0,
15806             'max' => 1,
15807             'min' => 0,
15808             'matchrule' => 0,
15809             'expected' => undef,
15810             'argcode' => undef,
15811             'repspec' => '?'
15812             }, 'Parse::RecDescent::Repetition' ),
15813             bless( {
15814             'matchrule' => 0,
15815             'line' => 313,
15816             'implicit' => undef,
15817             'lookahead' => 0,
15818             'argcode' => undef,
15819             'subrule' => 'block'
15820             }, 'Parse::RecDescent::Subrule' ),
15821             bless( {
15822             'code' => '{ warn "[Text::Formbuilder] Skipping unknown block directive \'$item[1]\' at input text line $thisline\\n"; }',
15823             'hashname' => '__ACTION1__',
15824             'lookahead' => 0,
15825             'line' => 314
15826             }, 'Parse::RecDescent::Action' )
15827             ],
15828             'patcount' => 1,
15829             'number' => 0,
15830             'strcount' => 0,
15831             'line' => undef,
15832             'actcount' => 1
15833             }, 'Parse::RecDescent::Production' )
15834             ],
15835             'vars' => '',
15836             'calls' => [
15837             'var_name',
15838             'block'
15839             ],
15840             'name' => 'unknown_block_directive',
15841             'opcount' => 0,
15842             'impcount' => 0,
15843             'line' => 313
15844             }, 'Parse::RecDescent::Rule' ),
15845             'label' => bless( {
15846             'calls' => [
15847             'string'
15848             ],
15849             'vars' => '',
15850             'prods' => [
15851             bless( {
15852             'dircount' => 0,
15853             'error' => undef,
15854             'uncommit' => undef,
15855             'items' => [
15856             bless( {
15857             'pattern' => '|',
15858             'hashname' => '__STRING1__',
15859             'lookahead' => 0,
15860             'description' => '\'|\'',
15861             'line' => 260
15862             }, 'Parse::RecDescent::Literal' ),
15863             bless( {
15864             'implicit' => undef,
15865             'line' => 260,
15866             'subrule' => 'string',
15867             'argcode' => undef,
15868             'lookahead' => 0,
15869             'matchrule' => 0
15870             }, 'Parse::RecDescent::Subrule' ),
15871             bless( {
15872             'code' => '{ $item[2] }',
15873             'hashname' => '__ACTION1__',
15874             'lookahead' => 0,
15875             'line' => 260
15876             }, 'Parse::RecDescent::Action' )
15877             ],
15878             'patcount' => 0,
15879             'strcount' => 1,
15880             'number' => 0,
15881             'line' => undef,
15882             'actcount' => 1
15883             }, 'Parse::RecDescent::Production' )
15884             ],
15885             'changed' => 0,
15886             'impcount' => 0,
15887             'opcount' => 0,
15888             'line' => 260,
15889             'name' => 'label'
15890             }, 'Parse::RecDescent::Rule' ),
15891             'line' => bless( {
15892             'name' => 'line',
15893             'opcount' => 0,
15894             'impcount' => 1,
15895             'line' => 118,
15896             'changed' => 0,
15897             'calls' => [
15898             '_alternation_1_of_production_1_of_rule_line'
15899             ],
15900             'vars' => '',
15901             'prods' => [
15902             bless( {
15903             'items' => [
15904             bless( {
15905             'lookahead' => 0,
15906             'line' => 118,
15907             'name' => '',
15908             'code' => 'my $oldskip = $skip; $skip=\'[ \\t]*\'; $oldskip',
15909             'hashname' => '__DIRECTIVE1__'
15910             }, 'Parse::RecDescent::Directive' ),
15911             bless( {
15912             'argcode' => undef,
15913             'subrule' => '_alternation_1_of_production_1_of_rule_line',
15914             'lookahead' => 0,
15915             'implicit' => 'title, or author, or pattern_def, or section_head, or heading, or submit, or reset, or group_field, or field_group, or unknown_directive, or field, or comment, or blank',
15916             'line' => 118,
15917             'matchrule' => 0
15918             }, 'Parse::RecDescent::Subrule' ),
15919             bless( {
15920             'hashname' => '__PATTERN1__',
15921             'ldelim' => '/',
15922             'pattern' => '\\n+',
15923             'line' => 118,
15924             'mod' => '',
15925             'lookahead' => 0,
15926             'rdelim' => '/',
15927             'description' => '/\\\\n+/'
15928             }, 'Parse::RecDescent::Token' )
15929             ],
15930             'number' => 0,
15931             'strcount' => 0,
15932             'patcount' => 1,
15933             'line' => undef,
15934             'actcount' => 0,
15935             'dircount' => 1,
15936             'error' => undef,
15937             'uncommit' => undef
15938             }, 'Parse::RecDescent::Production' )
15939             ]
15940             }, 'Parse::RecDescent::Rule' ),
15941             'bang' => bless( {
15942             'changed' => 0,
15943             'vars' => '',
15944             'prods' => [
15945             bless( {
15946             'items' => [
15947             bless( {
15948             'line' => 251,
15949             'description' => '\'!\'',
15950             'lookahead' => 0,
15951             'hashname' => '__STRING1__',
15952             'pattern' => '!'
15953             }, 'Parse::RecDescent::Literal' )
15954             ],
15955             'patcount' => 0,
15956             'strcount' => 1,
15957             'number' => 0,
15958             'line' => undef,
15959             'actcount' => 0,
15960             'dircount' => 0,
15961             'error' => undef,
15962             'uncommit' => undef
15963             }, 'Parse::RecDescent::Production' )
15964             ],
15965             'calls' => [],
15966             'name' => 'bang',
15967             'opcount' => 0,
15968             'impcount' => 0,
15969             'line' => 251
15970             }, 'Parse::RecDescent::Rule' ),
15971             'comment' => bless( {
15972             'name' => 'comment',
15973             'line' => 304,
15974             'opcount' => 0,
15975             'impcount' => 0,
15976             'changed' => 0,
15977             'vars' => '',
15978             'prods' => [
15979             bless( {
15980             'error' => undef,
15981             'uncommit' => undef,
15982             'dircount' => 0,
15983             'line' => undef,
15984             'actcount' => 0,
15985             'items' => [
15986             bless( {
15987             'hashname' => '__STRING1__',
15988             'pattern' => '#',
15989             'line' => 304,
15990             'lookahead' => 0,
15991             'description' => '\'#\''
15992             }, 'Parse::RecDescent::Literal' ),
15993             bless( {
15994             'pattern' => '.*',
15995             'ldelim' => '/',
15996             'hashname' => '__PATTERN1__',
15997             'lookahead' => 0,
15998             'mod' => '',
15999             'line' => 304,
16000             'rdelim' => '/',
16001             'description' => '/.*/'
16002             }, 'Parse::RecDescent::Token' )
16003             ],
16004             'patcount' => 1,
16005             'number' => 0,
16006             'strcount' => 1
16007             }, 'Parse::RecDescent::Production' )
16008             ],
16009             'calls' => []
16010             }, 'Parse::RecDescent::Rule' ),
16011             'block_content' => bless( {
16012             'name' => 'block_content',
16013             'impcount' => 0,
16014             'opcount' => 0,
16015             'line' => 104,
16016             'changed' => 0,
16017             'calls' => [
16018             'inner_block'
16019             ],
16020             'prods' => [
16021             bless( {
16022             'patcount' => 1,
16023             'number' => 0,
16024             'strcount' => 0,
16025             'items' => [
16026             bless( {
16027             'pattern' => '[^\\{\\}]+?',
16028             'ldelim' => '/',
16029             'hashname' => '__PATTERN1__',
16030             'lookahead' => 0,
16031             'mod' => '',
16032             'line' => 104,
16033             'rdelim' => '/',
16034             'description' => '/[^\\\\\\{\\\\\\}]+?/'
16035             }, 'Parse::RecDescent::Token' )
16036             ],
16037             'actcount' => 0,
16038             'line' => undef,
16039             'dircount' => 0,
16040             'error' => undef,
16041             'uncommit' => undef
16042             }, 'Parse::RecDescent::Production' ),
16043             bless( {
16044             'dircount' => 0,
16045             'uncommit' => undef,
16046             'error' => undef,
16047             'number' => 1,
16048             'strcount' => 0,
16049             'patcount' => 0,
16050             'items' => [
16051             bless( {
16052             'matchrule' => 0,
16053             'subrule' => 'inner_block',
16054             'argcode' => undef,
16055             'lookahead' => 0,
16056             'implicit' => undef,
16057             'line' => 104
16058             }, 'Parse::RecDescent::Subrule' )
16059             ],
16060             'actcount' => 0,
16061             'line' => 104
16062             }, 'Parse::RecDescent::Production' )
16063             ],
16064             'vars' => ''
16065             }, 'Parse::RecDescent::Rule' ),
16066             'heading' => bless( {
16067             'name' => 'heading',
16068             'opcount' => 0,
16069             'impcount' => 0,
16070             'line' => 156,
16071             'changed' => 0,
16072             'calls' => [],
16073             'vars' => '',
16074             'prods' => [
16075             bless( {
16076             'items' => [
16077             bless( {
16078             'pattern' => '!head',
16079             'hashname' => '__STRING1__',
16080             'lookahead' => 0,
16081             'description' => '\'!head\'',
16082             'line' => 156
16083             }, 'Parse::RecDescent::Literal' ),
16084             bless( {
16085             'description' => '/.*/',
16086             'rdelim' => '/',
16087             'lookahead' => 0,
16088             'mod' => '',
16089             'line' => 156,
16090             'pattern' => '.*',
16091             'ldelim' => '/',
16092             'hashname' => '__PATTERN1__'
16093             }, 'Parse::RecDescent::Token' ),
16094             bless( {
16095             'lookahead' => 0,
16096             'line' => 156,
16097             'code' => '{ push @lines, [ \'head\', $item[2] ] }',
16098             'hashname' => '__ACTION1__'
16099             }, 'Parse::RecDescent::Action' )
16100             ],
16101             'strcount' => 1,
16102             'number' => 0,
16103             'patcount' => 1,
16104             'line' => undef,
16105             'actcount' => 1,
16106             'dircount' => 0,
16107             'uncommit' => undef,
16108             'error' => undef
16109             }, 'Parse::RecDescent::Production' )
16110             ]
16111             }, 'Parse::RecDescent::Rule' ),
16112             'quoted_string' => bless( {
16113             'name' => 'quoted_string',
16114             'opcount' => 0,
16115             'impcount' => 0,
16116             'line' => 280,
16117             'changed' => 0,
16118             'vars' => '',
16119             'prods' => [
16120             bless( {
16121             'dircount' => 1,
16122             'uncommit' => undef,
16123             'error' => undef,
16124             'items' => [
16125             bless( {
16126             'hashname' => '__STRING1__',
16127             'pattern' => '\'',
16128             'line' => 281,
16129             'description' => '\'\'\'',
16130             'lookahead' => 0
16131             }, 'Parse::RecDescent::InterpLit' ),
16132             bless( {
16133             'line' => 281,
16134             'lookahead' => 0,
16135             'hashname' => '__DIRECTIVE1__',
16136             'code' => 'my $oldskip = $skip; $skip=\'\'; $oldskip',
16137             'name' => ''
16138             }, 'Parse::RecDescent::Directive' ),
16139             bless( {
16140             'line' => 281,
16141             'mod' => '',
16142             'lookahead' => 0,
16143             'hashname' => '__PATTERN1__',
16144             'pattern' => '(\\\\\'|[^\'])*',
16145             'ldelim' => '/',
16146             'description' => '/(\\\\\\\\\'|[^\'])*/',
16147             'rdelim' => '/'
16148             }, 'Parse::RecDescent::Token' ),
16149             bless( {
16150             'pattern' => '\'',
16151             'hashname' => '__STRING2__',
16152             'lookahead' => 0,
16153             'description' => '\'\'\'',
16154             'line' => 281
16155             }, 'Parse::RecDescent::InterpLit' ),
16156             bless( {
16157             'line' => 282,
16158             'lookahead' => 0,
16159             'hashname' => '__ACTION1__',
16160             'code' => '{ $item[3] =~ s/\\\\\'/\'/g; $item[3] }'
16161             }, 'Parse::RecDescent::Action' )
16162             ],
16163             'number' => 0,
16164             'strcount' => 2,
16165             'patcount' => 1,
16166             'line' => undef,
16167             'actcount' => 1
16168             }, 'Parse::RecDescent::Production' )
16169             ],
16170             'calls' => []
16171             }, 'Parse::RecDescent::Rule' ),
16172             'optional_pattern' => bless( {
16173             'impcount' => 0,
16174             'opcount' => 0,
16175             'line' => 300,
16176             'name' => 'optional_pattern',
16177             'prods' => [
16178             bless( {
16179             'error' => undef,
16180             'uncommit' => undef,
16181             'dircount' => 0,
16182             'actcount' => 1,
16183             'line' => undef,
16184             'patcount' => 0,
16185             'strcount' => 1,
16186             'number' => 0,
16187             'items' => [
16188             bless( {
16189             'matchrule' => 0,
16190             'implicit' => undef,
16191             'line' => 300,
16192             'subrule' => 'var_name',
16193             'argcode' => undef,
16194             'lookahead' => 0
16195             }, 'Parse::RecDescent::Subrule' ),
16196             bless( {
16197             'hashname' => '__STRING1__',
16198             'pattern' => '?',
16199             'line' => 300,
16200             'lookahead' => 0,
16201             'description' => '\'?\''
16202             }, 'Parse::RecDescent::Literal' ),
16203             bless( {
16204             'code' => '{ $required = 0; $item[1] }',
16205             'hashname' => '__ACTION1__',
16206             'lookahead' => 0,
16207             'line' => 300
16208             }, 'Parse::RecDescent::Action' )
16209             ]
16210             }, 'Parse::RecDescent::Production' )
16211             ],
16212             'vars' => '',
16213             'calls' => [
16214             'var_name'
16215             ],
16216             'changed' => 0
16217             }, 'Parse::RecDescent::Rule' ),
16218             'inner_block' => bless( {
16219             'vars' => '',
16220             'prods' => [
16221             bless( {
16222             'actcount' => 1,
16223             'line' => undef,
16224             'patcount' => 0,
16225             'strcount' => 2,
16226             'number' => 0,
16227             'items' => [
16228             bless( {
16229             'line' => 103,
16230             'lookahead' => 0,
16231             'description' => '\'\\{\'',
16232             'hashname' => '__STRING1__',
16233             'pattern' => '{'
16234             }, 'Parse::RecDescent::Literal' ),
16235             bless( {
16236             'hashname' => '__DIRECTIVE1__',
16237             'name' => '',
16238             'code' => 'my $oldskip = $skip; $skip=\'\'; $oldskip',
16239             'line' => 103,
16240             'lookahead' => 0
16241             }, 'Parse::RecDescent::Directive' ),
16242             bless( {
16243             'line' => 103,
16244             'lookahead' => 0,
16245             'subrule' => 'block_content',
16246             'expected' => undef,
16247             'matchrule' => 0,
16248             'min' => 1,
16249             'max' => 100000000,
16250             'repspec' => 's',
16251             'argcode' => undef
16252             }, 'Parse::RecDescent::Repetition' ),
16253             bless( {
16254             'pattern' => '}',
16255             'hashname' => '__STRING2__',
16256             'description' => '\'\\}\'',
16257             'lookahead' => 0,
16258             'line' => 103
16259             }, 'Parse::RecDescent::Literal' ),
16260             bless( {
16261             'code' => '{ \'{\' . join(\'\', @{ $item[3] }) . \'}\' }',
16262             'hashname' => '__ACTION1__',
16263             'lookahead' => 0,
16264             'line' => 103
16265             }, 'Parse::RecDescent::Action' )
16266             ],
16267             'error' => undef,
16268             'uncommit' => undef,
16269             'dircount' => 1
16270             }, 'Parse::RecDescent::Production' )
16271             ],
16272             'calls' => [
16273             'block_content'
16274             ],
16275             'changed' => 0,
16276             'line' => 103,
16277             'opcount' => 0,
16278             'impcount' => 0,
16279             'name' => 'inner_block'
16280             }, 'Parse::RecDescent::Rule' ),
16281             'simple_multiword' => bless( {
16282             'changed' => 0,
16283             'prods' => [
16284             bless( {
16285             'line' => undef,
16286             'actcount' => 1,
16287             'items' => [
16288             bless( {
16289             'rdelim' => '/',
16290             'description' => '/\\\\w/',
16291             'hashname' => '__PATTERN1__',
16292             'pattern' => '\\w',
16293             'ldelim' => '/',
16294             'line' => 277,
16295             'lookahead' => 0,
16296             'mod' => ''
16297             }, 'Parse::RecDescent::Token' ),
16298             bless( {
16299             'code' => 'my $oldskip = $skip; $skip=\'\'; $oldskip',
16300             'name' => '',
16301             'hashname' => '__DIRECTIVE1__',
16302             'lookahead' => 0,
16303             'line' => 277
16304             }, 'Parse::RecDescent::Directive' ),
16305             bless( {
16306             'description' => '/[\\\\w\\\\t ]*/',
16307             'rdelim' => '/',
16308             'lookahead' => 0,
16309             'mod' => '',
16310             'line' => 277,
16311             'ldelim' => '/',
16312             'pattern' => '[\\w\\t ]*',
16313             'hashname' => '__PATTERN2__'
16314             }, 'Parse::RecDescent::Token' ),
16315             bless( {
16316             'line' => 277,
16317             'lookahead' => 0,
16318             'hashname' => '__ACTION1__',
16319             'code' => '{ $item[1] . $item[3] }'
16320             }, 'Parse::RecDescent::Action' )
16321             ],
16322             'patcount' => 2,
16323             'number' => 0,
16324             'strcount' => 0,
16325             'error' => undef,
16326             'uncommit' => undef,
16327             'dircount' => 1
16328             }, 'Parse::RecDescent::Production' )
16329             ],
16330             'vars' => '',
16331             'calls' => [],
16332             'name' => 'simple_multiword',
16333             'impcount' => 0,
16334             'opcount' => 0,
16335             'line' => 276
16336             }, 'Parse::RecDescent::Rule' ),
16337             'group_type' => bless( {
16338             'changed' => 0,
16339             'calls' => [
16340             'var_name'
16341             ],
16342             'vars' => '',
16343             'prods' => [
16344             bless( {
16345             'patcount' => 0,
16346             'number' => 0,
16347             'strcount' => 1,
16348             'items' => [
16349             bless( {
16350             'hashname' => '__STRING1__',
16351             'pattern' => ':',
16352             'line' => 194,
16353             'lookahead' => 0,
16354             'description' => '\':\''
16355             }, 'Parse::RecDescent::Literal' ),
16356             bless( {
16357             'lookahead' => 0,
16358             'argcode' => undef,
16359             'subrule' => 'var_name',
16360             'line' => 194,
16361             'implicit' => undef,
16362             'matchrule' => 0
16363             }, 'Parse::RecDescent::Subrule' )
16364             ],
16365             'actcount' => 0,
16366             'line' => undef,
16367             'dircount' => 0,
16368             'error' => undef,
16369             'uncommit' => undef
16370             }, 'Parse::RecDescent::Production' )
16371             ],
16372             'name' => 'group_type',
16373             'impcount' => 0,
16374             'opcount' => 0,
16375             'line' => 194
16376             }, 'Parse::RecDescent::Rule' ),
16377             'string' => bless( {
16378             'impcount' => 0,
16379             'opcount' => 0,
16380             'line' => 274,
16381             'name' => 'string',
16382             'prods' => [
16383             bless( {
16384             'uncommit' => undef,
16385             'error' => undef,
16386             'dircount' => 0,
16387             'line' => undef,
16388             'actcount' => 0,
16389             'items' => [
16390             bless( {
16391             'implicit' => undef,
16392             'line' => 274,
16393             'subrule' => 'simple_multiword',
16394             'argcode' => undef,
16395             'lookahead' => 0,
16396             'matchrule' => 0
16397             }, 'Parse::RecDescent::Subrule' )
16398             ],
16399             'number' => 0,
16400             'strcount' => 0,
16401             'patcount' => 0
16402             }, 'Parse::RecDescent::Production' ),
16403             bless( {
16404             'uncommit' => undef,
16405             'error' => undef,
16406             'dircount' => 0,
16407             'actcount' => 0,
16408             'line' => 274,
16409             'patcount' => 0,
16410             'number' => 1,
16411             'strcount' => 0,
16412             'items' => [
16413             bless( {
16414             'implicit' => undef,
16415             'line' => 274,
16416             'subrule' => 'quoted_string',
16417             'argcode' => undef,
16418             'lookahead' => 0,
16419             'matchrule' => 0
16420             }, 'Parse::RecDescent::Subrule' )
16421             ]
16422             }, 'Parse::RecDescent::Production' )
16423             ],
16424             'vars' => '',
16425             'calls' => [
16426             'simple_multiword',
16427             'quoted_string'
16428             ],
16429             'changed' => 0
16430             }, 'Parse::RecDescent::Rule' ),
16431             'reset' => bless( {
16432             'calls' => [
16433             'string'
16434             ],
16435             'vars' => '',
16436             'prods' => [
16437             bless( {
16438             'uncommit' => undef,
16439             'error' => undef,
16440             'dircount' => 0,
16441             'actcount' => 1,
16442             'line' => undef,
16443             'number' => 0,
16444             'strcount' => 1,
16445             'patcount' => 0,
16446             'items' => [
16447             bless( {
16448             'pattern' => '!reset',
16449             'hashname' => '__STRING1__',
16450             'lookahead' => 0,
16451             'description' => '\'!reset\'',
16452             'line' => 164
16453             }, 'Parse::RecDescent::Literal' ),
16454             bless( {
16455             'implicit' => undef,
16456             'line' => 164,
16457             'subrule' => 'string',
16458             'argcode' => undef,
16459             'lookahead' => 0,
16460             'matchrule' => 0
16461             }, 'Parse::RecDescent::Subrule' ),
16462             bless( {
16463             'hashname' => '__ACTION1__',
16464             'code' => '{
16465             warn "[Text::FormBuilder] Reset button redefined at input text line $thisline\\n" if defined $formspec{reset};
16466             $formspec{reset} = $item{string};
16467             }',
16468             'line' => 165,
16469             'lookahead' => 0
16470             }, 'Parse::RecDescent::Action' )
16471             ]
16472             }, 'Parse::RecDescent::Production' )
16473             ],
16474             'changed' => 0,
16475             'opcount' => 0,
16476             'line' => 164,
16477             'impcount' => 0,
16478             'name' => 'reset'
16479             }, 'Parse::RecDescent::Rule' ),
16480             'var_name' => bless( {
16481             'name' => 'var_name',
16482             'impcount' => 0,
16483             'opcount' => 0,
16484             'line' => 244,
16485             'changed' => 0,
16486             'vars' => '',
16487             'prods' => [
16488             bless( {
16489             'error' => undef,
16490             'uncommit' => undef,
16491             'dircount' => 0,
16492             'line' => undef,
16493             'actcount' => 0,
16494             'items' => [
16495             bless( {
16496             'description' => '/[A-Z_]+/',
16497             'rdelim' => '/',
16498             'lookahead' => 0,
16499             'mod' => '',
16500             'line' => 244,
16501             'ldelim' => '/',
16502             'pattern' => '[A-Z_]+',
16503             'hashname' => '__PATTERN1__'
16504             }, 'Parse::RecDescent::Token' )
16505             ],
16506             'number' => 0,
16507             'strcount' => 0,
16508             'patcount' => 1
16509             }, 'Parse::RecDescent::Production' )
16510             ],
16511             'calls' => []
16512             }, 'Parse::RecDescent::Rule' ),
16513             'type' => bless( {
16514             'impcount' => 0,
16515             'opcount' => 0,
16516             'line' => 264,
16517             'name' => 'type',
16518             'calls' => [
16519             'builtin_field'
16520             ],
16521             'prods' => [
16522             bless( {
16523             'dircount' => 0,
16524             'error' => undef,
16525             'uncommit' => undef,
16526             'number' => 0,
16527             'strcount' => 1,
16528             'patcount' => 0,
16529             'items' => [
16530             bless( {
16531             'hashname' => '__STRING1__',
16532             'pattern' => ':',
16533             'line' => 264,
16534             'description' => '\':\'',
16535             'lookahead' => 0
16536             }, 'Parse::RecDescent::Literal' ),
16537             bless( {
16538             'implicit' => undef,
16539             'line' => 264,
16540             'argcode' => undef,
16541             'subrule' => 'builtin_field',
16542             'lookahead' => 0,
16543             'matchrule' => 0
16544             }, 'Parse::RecDescent::Subrule' )
16545             ],
16546             'actcount' => 0,
16547             'line' => undef
16548             }, 'Parse::RecDescent::Production' )
16549             ],
16550             'vars' => '',
16551             'changed' => 0
16552             }, 'Parse::RecDescent::Rule' ),
16553             'note' => bless( {
16554             'name' => 'note',
16555             'opcount' => 0,
16556             'line' => 95,
16557             'impcount' => 0,
16558             'changed' => 0,
16559             'calls' => [
16560             'block'
16561             ],
16562             'vars' => '',
16563             'prods' => [
16564             bless( {
16565             'patcount' => 0,
16566             'strcount' => 1,
16567             'number' => 0,
16568             'items' => [
16569             bless( {
16570             'description' => '\'!note\'',
16571             'lookahead' => 0,
16572             'line' => 95,
16573             'pattern' => '!note',
16574             'hashname' => '__STRING1__'
16575             }, 'Parse::RecDescent::Literal' ),
16576             bless( {
16577             'subrule' => 'block',
16578             'argcode' => undef,
16579             'lookahead' => 0,
16580             'implicit' => undef,
16581             'line' => 95,
16582             'matchrule' => 0
16583             }, 'Parse::RecDescent::Subrule' ),
16584             bless( {
16585             'hashname' => '__ACTION1__',
16586             'code' => '{ push @lines, [ \'note\', $item{block} ]; }',
16587             'line' => 95,
16588             'lookahead' => 0
16589             }, 'Parse::RecDescent::Action' )
16590             ],
16591             'actcount' => 1,
16592             'line' => undef,
16593             'dircount' => 0,
16594             'error' => undef,
16595             'uncommit' => undef
16596             }, 'Parse::RecDescent::Production' )
16597             ]
16598             }, 'Parse::RecDescent::Rule' ),
16599             'option_list' => bless( {
16600             'prods' => [
16601             bless( {
16602             'uncommit' => undef,
16603             'error' => undef,
16604             'dircount' => 0,
16605             'actcount' => 0,
16606             'line' => undef,
16607             'patcount' => 0,
16608             'number' => 0,
16609             'strcount' => 0,
16610             'items' => [
16611             bless( {
16612             'matchrule' => 0,
16613             'implicit' => undef,
16614             'line' => 284,
16615             'argcode' => undef,
16616             'subrule' => 'options',
16617             'lookahead' => 0
16618             }, 'Parse::RecDescent::Subrule' )
16619             ]
16620             }, 'Parse::RecDescent::Production' ),
16621             bless( {
16622             'number' => 1,
16623             'strcount' => 0,
16624             'patcount' => 0,
16625             'items' => [
16626             bless( {
16627             'line' => 284,
16628             'implicit' => undef,
16629             'lookahead' => 0,
16630             'argcode' => undef,
16631             'subrule' => 'list_var',
16632             'matchrule' => 0
16633             }, 'Parse::RecDescent::Subrule' )
16634             ],
16635             'actcount' => 0,
16636             'line' => 284,
16637             'dircount' => 0,
16638             'uncommit' => undef,
16639             'error' => undef
16640             }, 'Parse::RecDescent::Production' )
16641             ],
16642             'vars' => '',
16643             'calls' => [
16644             'options',
16645             'list_var'
16646             ],
16647             'changed' => 0,
16648             'opcount' => 0,
16649             'impcount' => 0,
16650             'line' => 284,
16651             'name' => 'option_list'
16652             }, 'Parse::RecDescent::Rule' ),
16653             'limit' => bless( {
16654             'prods' => [
16655             bless( {
16656             'error' => undef,
16657             'uncommit' => undef,
16658             'dircount' => 0,
16659             'actcount' => 0,
16660             'line' => undef,
16661             'patcount' => 1,
16662             'strcount' => 0,
16663             'number' => 0,
16664             'items' => [
16665             bless( {
16666             'pattern' => '\\d+',
16667             'ldelim' => '/',
16668             'hashname' => '__PATTERN1__',
16669             'lookahead' => 0,
16670             'mod' => '',
16671             'line' => 258,
16672             'rdelim' => '/',
16673             'description' => '/\\\\d+/'
16674             }, 'Parse::RecDescent::Token' )
16675             ]
16676             }, 'Parse::RecDescent::Production' )
16677             ],
16678             'vars' => '',
16679             'calls' => [],
16680             'changed' => 0,
16681             'impcount' => 0,
16682             'opcount' => 0,
16683             'line' => 258,
16684             'name' => 'limit'
16685             }, 'Parse::RecDescent::Rule' ),
16686             'static_list' => bless( {
16687             'impcount' => 0,
16688             'opcount' => 0,
16689             'line' => 77,
16690             'name' => 'static_list',
16691             'vars' => '',
16692             'prods' => [
16693             bless( {
16694             'actcount' => 0,
16695             'line' => undef,
16696             'strcount' => 2,
16697             'number' => 0,
16698             'patcount' => 4,
16699             'items' => [
16700             bless( {
16701             'hashname' => '__STRING1__',
16702             'pattern' => '{',
16703             'line' => 77,
16704             'lookahead' => 0,
16705             'description' => '\'\\{\''
16706             }, 'Parse::RecDescent::Literal' ),
16707             bless( {
16708             'pattern' => '\\s*',
16709             'ldelim' => '/',
16710             'hashname' => '__PATTERN1__',
16711             'mod' => '',
16712             'lookahead' => 0,
16713             'line' => 77,
16714             'rdelim' => '/',
16715             'description' => '/\\\\s*/'
16716             }, 'Parse::RecDescent::Token' ),
16717             bless( {
16718             'name' => '\'option(s)\'',
16719             'max' => 100000000,
16720             'min' => 1,
16721             'leftarg' => bless( {
16722             'matchrule' => 0,
16723             'argcode' => undef,
16724             'subrule' => 'option',
16725             'lookahead' => 0,
16726             'implicit' => undef,
16727             'line' => 77
16728             }, 'Parse::RecDescent::Subrule' ),
16729             'hashname' => '__DIRECTIVE1__',
16730             'expected' => '',
16731             'op' => bless( {
16732             'line' => 77,
16733             'lookahead' => 0,
16734             'mod' => '',
16735             'hashname' => '__PATTERN2__',
16736             'ldelim' => '/',
16737             'pattern' => '\\s*,\\s*',
16738             'description' => '/\\\\s*,\\\\s*/',
16739             'rdelim' => '/'
16740             }, 'Parse::RecDescent::Token' ),
16741             'rightarg' => bless( {
16742             'matchrule' => 0,
16743             'line' => 77,
16744             'implicit' => undef,
16745             'lookahead' => 0,
16746             'subrule' => 'option',
16747             'argcode' => undef
16748             }, 'Parse::RecDescent::Subrule' ),
16749             'type' => 'leftop'
16750             }, 'Parse::RecDescent::Operator' ),
16751             bless( {
16752             'line' => 77,
16753             'lookahead' => 0,
16754             'mod' => '',
16755             'hashname' => '__PATTERN3__',
16756             'pattern' => ',?',
16757             'ldelim' => '/',
16758             'description' => '/,?/',
16759             'rdelim' => '/'
16760             }, 'Parse::RecDescent::Token' ),
16761             bless( {
16762             'description' => '/\\\\s*/',
16763             'rdelim' => '/',
16764             'line' => 77,
16765             'mod' => '',
16766             'lookahead' => 0,
16767             'hashname' => '__PATTERN4__',
16768             'ldelim' => '/',
16769             'pattern' => '\\s*'
16770             }, 'Parse::RecDescent::Token' ),
16771             bless( {
16772             'hashname' => '__STRING2__',
16773             'pattern' => '}',
16774             'line' => 77,
16775             'lookahead' => 0,
16776             'description' => '\'\\}\''
16777             }, 'Parse::RecDescent::Literal' )
16778             ],
16779             'op' => [],
16780             'uncommit' => undef,
16781             'error' => undef,
16782             'dircount' => 1
16783             }, 'Parse::RecDescent::Production' )
16784             ],
16785             'calls' => [
16786             'option'
16787             ],
16788             'changed' => 0
16789             }, 'Parse::RecDescent::Rule' ),
16790             '_alternation_1_of_production_1_of_rule_form_spec' => bless( {
16791             'vars' => '',
16792             'prods' => [
16793             bless( {
16794             'error' => undef,
16795             'uncommit' => undef,
16796             'dircount' => 0,
16797             'line' => undef,
16798             'actcount' => 0,
16799             'items' => [
16800             bless( {
16801             'line' => 315,
16802             'implicit' => undef,
16803             'lookahead' => 0,
16804             'subrule' => 'list_def',
16805             'argcode' => undef,
16806             'matchrule' => 0
16807             }, 'Parse::RecDescent::Subrule' )
16808             ],
16809             'strcount' => 0,
16810             'number' => 0,
16811             'patcount' => 0
16812             }, 'Parse::RecDescent::Production' ),
16813             bless( {
16814             'uncommit' => undef,
16815             'error' => undef,
16816             'dircount' => 0,
16817             'actcount' => 0,
16818             'line' => 315,
16819             'number' => 1,
16820             'strcount' => 0,
16821             'patcount' => 0,
16822             'items' => [
16823             bless( {
16824             'matchrule' => 0,
16825             'lookahead' => 0,
16826             'argcode' => undef,
16827             'subrule' => 'description_def',
16828             'line' => 315,
16829             'implicit' => undef
16830             }, 'Parse::RecDescent::Subrule' )
16831             ]
16832             }, 'Parse::RecDescent::Production' ),
16833             bless( {
16834             'number' => 2,
16835             'strcount' => 0,
16836             'patcount' => 0,
16837             'items' => [
16838             bless( {
16839             'matchrule' => 0,
16840             'lookahead' => 0,
16841             'subrule' => 'group_def',
16842             'argcode' => undef,
16843             'line' => 315,
16844             'implicit' => undef
16845             }, 'Parse::RecDescent::Subrule' )
16846             ],
16847             'actcount' => 0,
16848             'line' => 315,
16849             'dircount' => 0,
16850             'error' => undef,
16851             'uncommit' => undef
16852             }, 'Parse::RecDescent::Production' ),
16853             bless( {
16854             'uncommit' => undef,
16855             'error' => undef,
16856             'dircount' => 0,
16857             'actcount' => 0,
16858             'line' => 315,
16859             'patcount' => 0,
16860             'strcount' => 0,
16861             'number' => 3,
16862             'items' => [
16863             bless( {
16864             'matchrule' => 0,
16865             'line' => 315,
16866             'implicit' => undef,
16867             'lookahead' => 0,
16868             'subrule' => 'note',
16869             'argcode' => undef
16870             }, 'Parse::RecDescent::Subrule' )
16871             ]
16872             }, 'Parse::RecDescent::Production' ),
16873             bless( {
16874             'patcount' => 0,
16875             'strcount' => 0,
16876             'number' => 4,
16877             'items' => [
16878             bless( {
16879             'implicit' => undef,
16880             'line' => 315,
16881             'argcode' => undef,
16882             'subrule' => 'fb_params',
16883             'lookahead' => 0,
16884             'matchrule' => 0
16885             }, 'Parse::RecDescent::Subrule' )
16886             ],
16887             'actcount' => 0,
16888             'line' => 315,
16889             'dircount' => 0,
16890             'uncommit' => undef,
16891             'error' => undef
16892             }, 'Parse::RecDescent::Production' ),
16893             bless( {
16894             'error' => undef,
16895             'uncommit' => undef,
16896             'dircount' => 0,
16897             'actcount' => 0,
16898             'line' => 315,
16899             'strcount' => 0,
16900             'number' => 5,
16901             'patcount' => 0,
16902             'items' => [
16903             bless( {
16904             'line' => 315,
16905             'implicit' => undef,
16906             'lookahead' => 0,
16907             'argcode' => undef,
16908             'subrule' => 'unknown_block_directive',
16909             'matchrule' => 0
16910             }, 'Parse::RecDescent::Subrule' )
16911             ]
16912             }, 'Parse::RecDescent::Production' ),
16913             bless( {
16914             'strcount' => 0,
16915             'number' => 6,
16916             'patcount' => 0,
16917             'items' => [
16918             bless( {
16919             'matchrule' => 0,
16920             'line' => 315,
16921             'implicit' => undef,
16922             'lookahead' => 0,
16923             'argcode' => undef,
16924             'subrule' => 'line'
16925             }, 'Parse::RecDescent::Subrule' )
16926             ],
16927             'actcount' => 0,
16928             'line' => 315,
16929             'dircount' => 0,
16930             'uncommit' => undef,
16931             'error' => undef
16932             }, 'Parse::RecDescent::Production' )
16933             ],
16934             'calls' => [
16935             'list_def',
16936             'description_def',
16937             'group_def',
16938             'note',
16939             'fb_params',
16940             'unknown_block_directive',
16941             'line'
16942             ],
16943             'changed' => 0,
16944             'opcount' => 0,
16945             'impcount' => 0,
16946             'line' => 315,
16947             'name' => '_alternation_1_of_production_1_of_rule_form_spec'
16948             }, 'Parse::RecDescent::Rule' ),
16949             'value' => bless( {
16950             'changed' => 0,
16951             'vars' => '',
16952             'prods' => [
16953             bless( {
16954             'dircount' => 0,
16955             'error' => undef,
16956             'uncommit' => undef,
16957             'number' => 0,
16958             'strcount' => 0,
16959             'patcount' => 0,
16960             'items' => [
16961             bless( {
16962             'lookahead' => 0,
16963             'subrule' => 'identifier',
16964             'argcode' => undef,
16965             'line' => 293,
16966             'implicit' => undef,
16967             'matchrule' => 0
16968             }, 'Parse::RecDescent::Subrule' )
16969             ],
16970             'actcount' => 0,
16971             'line' => undef
16972             }, 'Parse::RecDescent::Production' )
16973             ],
16974             'calls' => [
16975             'identifier'
16976             ],
16977             'name' => 'value',
16978             'opcount' => 0,
16979             'line' => 293,
16980             'impcount' => 0
16981             }, 'Parse::RecDescent::Rule' ),
16982             'submit' => bless( {
16983             'changed' => 0,
16984             'calls' => [
16985             'string'
16986             ],
16987             'prods' => [
16988             bless( {
16989             'op' => [],
16990             'uncommit' => undef,
16991             'error' => undef,
16992             'dircount' => 1,
16993             'actcount' => 1,
16994             'line' => undef,
16995             'patcount' => 1,
16996             'number' => 0,
16997             'strcount' => 1,
16998             'items' => [
16999             bless( {
17000             'line' => 158,
17001             'description' => '\'!submit\'',
17002             'lookahead' => 0,
17003             'hashname' => '__STRING1__',
17004             'pattern' => '!submit'
17005             }, 'Parse::RecDescent::Literal' ),
17006             bless( {
17007             'hashname' => '__DIRECTIVE1__',
17008             'expected' => '',
17009             'leftarg' => bless( {
17010             'matchrule' => 0,
17011             'implicit' => undef,
17012             'line' => 158,
17013             'argcode' => undef,
17014             'subrule' => 'string',
17015             'lookahead' => 0
17016             }, 'Parse::RecDescent::Subrule' ),
17017             'min' => 1,
17018             'max' => 100000000,
17019             'name' => '\'string(s)\'',
17020             'rightarg' => bless( {
17021             'implicit' => undef,
17022             'line' => 158,
17023             'argcode' => undef,
17024             'subrule' => 'string',
17025             'lookahead' => 0,
17026             'matchrule' => 0
17027             }, 'Parse::RecDescent::Subrule' ),
17028             'op' => bless( {
17029             'pattern' => '\\s*,\\s*',
17030             'ldelim' => '/',
17031             'hashname' => '__PATTERN1__',
17032             'lookahead' => 0,
17033             'mod' => '',
17034             'line' => 158,
17035             'rdelim' => '/',
17036             'description' => '/\\\\s*,\\\\s*/'
17037             }, 'Parse::RecDescent::Token' ),
17038             'type' => 'leftop'
17039             }, 'Parse::RecDescent::Operator' ),
17040             bless( {
17041             'hashname' => '__ACTION1__',
17042             'code' => '{
17043             #warn scalar(@{ $item[2] }) . \' submit button(s)\';
17044             push @submit, @{ $item[2] };
17045             }',
17046             'line' => 159,
17047             'lookahead' => 0
17048             }, 'Parse::RecDescent::Action' )
17049             ]
17050             }, 'Parse::RecDescent::Production' )
17051             ],
17052             'vars' => '',
17053             'name' => 'submit',
17054             'impcount' => 0,
17055             'opcount' => 0,
17056             'line' => 158
17057             }, 'Parse::RecDescent::Rule' ),
17058             'bracket_block_content' => bless( {
17059             'impcount' => 0,
17060             'opcount' => 0,
17061             'line' => 112,
17062             'name' => 'bracket_block_content',
17063             'vars' => '',
17064             'prods' => [
17065             bless( {
17066             'patcount' => 1,
17067             'number' => 0,
17068             'strcount' => 0,
17069             'items' => [
17070             bless( {
17071             'hashname' => '__PATTERN1__',
17072             'pattern' => '[^\\[\\]]+?',
17073             'ldelim' => '/',
17074             'line' => 112,
17075             'lookahead' => 0,
17076             'mod' => '',
17077             'rdelim' => '/',
17078             'description' => '/[^\\\\[\\\\]]+?/'
17079             }, 'Parse::RecDescent::Token' )
17080             ],
17081             'actcount' => 0,
17082             'line' => undef,
17083             'dircount' => 0,
17084             'uncommit' => undef,
17085             'error' => undef
17086             }, 'Parse::RecDescent::Production' ),
17087             bless( {
17088             'error' => undef,
17089             'uncommit' => undef,
17090             'dircount' => 0,
17091             'actcount' => 0,
17092             'line' => 112,
17093             'patcount' => 0,
17094             'number' => 1,
17095             'strcount' => 0,
17096             'items' => [
17097             bless( {
17098             'argcode' => undef,
17099             'subrule' => 'inner_bracket_block',
17100             'lookahead' => 0,
17101             'implicit' => undef,
17102             'line' => 112,
17103             'matchrule' => 0
17104             }, 'Parse::RecDescent::Subrule' )
17105             ]
17106             }, 'Parse::RecDescent::Production' )
17107             ],
17108             'calls' => [
17109             'inner_bracket_block'
17110             ],
17111             'changed' => 0
17112             }, 'Parse::RecDescent::Rule' ),
17113             '_alternation_1_of_production_1_of_rule_list_def' => bless( {
17114             'name' => '_alternation_1_of_production_1_of_rule_list_def',
17115             'opcount' => 0,
17116             'impcount' => 0,
17117             'line' => 315,
17118             'changed' => 0,
17119             'prods' => [
17120             bless( {
17121             'dircount' => 0,
17122             'uncommit' => undef,
17123             'error' => undef,
17124             'patcount' => 0,
17125             'number' => 0,
17126             'strcount' => 0,
17127             'items' => [
17128             bless( {
17129             'line' => 315,
17130             'implicit' => undef,
17131             'lookahead' => 0,
17132             'argcode' => undef,
17133             'subrule' => 'static_list',
17134             'matchrule' => 0
17135             }, 'Parse::RecDescent::Subrule' )
17136             ],
17137             'actcount' => 0,
17138             'line' => undef
17139             }, 'Parse::RecDescent::Production' ),
17140             bless( {
17141             'error' => undef,
17142             'uncommit' => undef,
17143             'dircount' => 0,
17144             'line' => 315,
17145             'actcount' => 0,
17146             'items' => [
17147             bless( {
17148             'matchrule' => 0,
17149             'lookahead' => 0,
17150             'subrule' => 'dynamic_list',
17151             'argcode' => undef,
17152             'line' => 315,
17153             'implicit' => undef
17154             }, 'Parse::RecDescent::Subrule' )
17155             ],
17156             'strcount' => 0,
17157             'number' => 1,
17158             'patcount' => 0
17159             }, 'Parse::RecDescent::Production' )
17160             ],
17161             'vars' => '',
17162             'calls' => [
17163             'static_list',
17164             'dynamic_list'
17165             ]
17166             }, 'Parse::RecDescent::Rule' ),
17167             'row_col' => bless( {
17168             'name' => 'row_col',
17169             'opcount' => 0,
17170             'line' => 253,
17171             'impcount' => 0,
17172             'changed' => 0,
17173             'calls' => [],
17174             'prods' => [
17175             bless( {
17176             'actcount' => 1,
17177             'line' => undef,
17178             'number' => 0,
17179             'strcount' => 0,
17180             'patcount' => 3,
17181             'items' => [
17182             bless( {
17183             'description' => '/\\\\d+/',
17184             'rdelim' => '/',
17185             'line' => 253,
17186             'lookahead' => 0,
17187             'mod' => '',
17188             'hashname' => '__PATTERN1__',
17189             'pattern' => '\\d+',
17190             'ldelim' => '/'
17191             }, 'Parse::RecDescent::Token' ),
17192             bless( {
17193             'pattern' => ',\\s*',
17194             'ldelim' => '/',
17195             'hashname' => '__PATTERN2__',
17196             'lookahead' => 0,
17197             'mod' => '',
17198             'line' => 253,
17199             'rdelim' => '/',
17200             'description' => '/,\\\\s*/'
17201             }, 'Parse::RecDescent::Token' ),
17202             bless( {
17203             'hashname' => '__PATTERN3__',
17204             'pattern' => '\\d+',
17205             'ldelim' => '/',
17206             'line' => 253,
17207             'mod' => '',
17208             'lookahead' => 0,
17209             'rdelim' => '/',
17210             'description' => '/\\\\d+/'
17211             }, 'Parse::RecDescent::Token' ),
17212             bless( {
17213             'lookahead' => 0,
17214             'line' => 254,
17215             'code' => '{ $rows = $item[1]; $cols = $item[3] }',
17216             'hashname' => '__ACTION1__'
17217             }, 'Parse::RecDescent::Action' )
17218             ],
17219             'uncommit' => undef,
17220             'error' => undef,
17221             'dircount' => 0
17222             }, 'Parse::RecDescent::Production' )
17223             ],
17224             'vars' => ''
17225             }, 'Parse::RecDescent::Rule' ),
17226             'group_field' => bless( {
17227             'impcount' => 0,
17228             'opcount' => 0,
17229             'line' => 170,
17230             'name' => 'group_field',
17231             'calls' => [
17232             'group_name',
17233             'name',
17234             'label'
17235             ],
17236             'vars' => '',
17237             'prods' => [
17238             bless( {
17239             'number' => 0,
17240             'strcount' => 1,
17241             'patcount' => 0,
17242             'items' => [
17243             bless( {
17244             'lookahead' => 0,
17245             'description' => '\'!field\'',
17246             'line' => 170,
17247             'pattern' => '!field',
17248             'hashname' => '__STRING1__'
17249             }, 'Parse::RecDescent::Literal' ),
17250             bless( {
17251             'matchrule' => 0,
17252             'argcode' => undef,
17253             'subrule' => 'group_name',
17254             'lookahead' => 0,
17255             'implicit' => undef,
17256             'line' => 170
17257             }, 'Parse::RecDescent::Subrule' ),
17258             bless( {
17259             'matchrule' => 0,
17260             'implicit' => undef,
17261             'line' => 170,
17262             'subrule' => 'name',
17263             'argcode' => undef,
17264             'lookahead' => 0
17265             }, 'Parse::RecDescent::Subrule' ),
17266             bless( {
17267             'argcode' => undef,
17268             'repspec' => '?',
17269             'max' => 1,
17270             'min' => 0,
17271             'expected' => undef,
17272             'matchrule' => 0,
17273             'subrule' => 'label',
17274             'lookahead' => 0,
17275             'line' => 170
17276             }, 'Parse::RecDescent::Repetition' ),
17277             bless( {
17278             'line' => 171,
17279             'lookahead' => 0,
17280             'hashname' => '__ACTION1__',
17281             'code' => '{
17282             warn "WARNING line $thisline: The \'!field\' directive has been DEPRECATED. Use the \'name:GROUP\' style instead.\\n";
17283             push @lines, [ \'group\', { name => $item{name}, label => $item{\'label(?)\'}[0], group => $item{group_name} } ];
17284             }'
17285             }, 'Parse::RecDescent::Action' )
17286             ],
17287             'actcount' => 1,
17288             'line' => undef,
17289             'dircount' => 0,
17290             'error' => undef,
17291             'uncommit' => undef
17292             }, 'Parse::RecDescent::Production' )
17293             ],
17294             'changed' => 0
17295             }, 'Parse::RecDescent::Rule' ),
17296             'display_text' => bless( {
17297             'name' => 'display_text',
17298             'opcount' => 0,
17299             'impcount' => 0,
17300             'line' => 295,
17301             'changed' => 0,
17302             'prods' => [
17303             bless( {
17304             'line' => undef,
17305             'actcount' => 0,
17306             'items' => [
17307             bless( {
17308             'matchrule' => 0,
17309             'line' => 295,
17310             'implicit' => undef,
17311             'lookahead' => 0,
17312             'subrule' => 'bracket_block',
17313             'argcode' => undef
17314             }, 'Parse::RecDescent::Subrule' )
17315             ],
17316             'patcount' => 0,
17317             'strcount' => 0,
17318             'number' => 0,
17319             'error' => undef,
17320             'uncommit' => undef,
17321             'dircount' => 0
17322             }, 'Parse::RecDescent::Production' )
17323             ],
17324             'vars' => '',
17325             'calls' => [
17326             'bracket_block'
17327             ]
17328             }, 'Parse::RecDescent::Rule' ),
17329             'section_head' => bless( {
17330             'changed' => 0,
17331             'calls' => [
17332             'identifier'
17333             ],
17334             'vars' => '',
17335             'prods' => [
17336             bless( {
17337             'dircount' => 0,
17338             'error' => undef,
17339             'uncommit' => undef,
17340             'items' => [
17341             bless( {
17342             'hashname' => '__STRING1__',
17343             'pattern' => '!section',
17344             'line' => 137,
17345             'lookahead' => 0,
17346             'description' => '\'!section\''
17347             }, 'Parse::RecDescent::Literal' ),
17348             bless( {
17349             'line' => 137,
17350             'implicit' => undef,
17351             'lookahead' => 0,
17352             'argcode' => undef,
17353             'subrule' => 'identifier',
17354             'matchrule' => 0
17355             }, 'Parse::RecDescent::Subrule' ),
17356             bless( {
17357             'description' => '/.*/',
17358             'rdelim' => '/',
17359             'line' => 137,
17360             'lookahead' => 0,
17361             'mod' => '',
17362             'hashname' => '__PATTERN1__',
17363             'pattern' => '.*',
17364             'ldelim' => '/'
17365             }, 'Parse::RecDescent::Token' ),
17366             bless( {
17367             'code' => '{
17368             #warn "starting section $item{identifier}\\n";
17369             #warn " with heading $item[3]\\n" if $item[3];
17370            
17371             if (@lines) {
17372             push @sections,
17373             {
17374             id => $section_id,
17375             head => $section_head,
17376             lines => [ @lines ],
17377             };
17378             }
17379            
17380             $section_id = $item{identifier};
17381             $section_head = $item[3];
17382             @lines = ();
17383             }',
17384             'hashname' => '__ACTION1__',
17385             'lookahead' => 0,
17386             'line' => 138
17387             }, 'Parse::RecDescent::Action' )
17388             ],
17389             'number' => 0,
17390             'strcount' => 1,
17391             'patcount' => 1,
17392             'line' => undef,
17393             'actcount' => 1
17394             }, 'Parse::RecDescent::Production' )
17395             ],
17396             'name' => 'section_head',
17397             'opcount' => 0,
17398             'impcount' => 0,
17399             'line' => 137
17400             }, 'Parse::RecDescent::Rule' ),
17401             'field' => bless( {
17402             'line' => 196,
17403             'opcount' => 0,
17404             'impcount' => 0,
17405             'name' => 'field',
17406             'vars' => '',
17407             'prods' => [
17408             bless( {
17409             'patcount' => 0,
17410             'number' => 0,
17411             'strcount' => 0,
17412             'items' => [
17413             bless( {
17414             'subrule' => 'name',
17415             'argcode' => undef,
17416             'lookahead' => 0,
17417             'implicit' => undef,
17418             'line' => 197,
17419             'matchrule' => 0
17420             }, 'Parse::RecDescent::Subrule' ),
17421             bless( {
17422             'matchrule' => 0,
17423             'expected' => undef,
17424             'max' => 1,
17425             'min' => 0,
17426             'line' => 197,
17427             'lookahead' => 0,
17428             'subrule' => 'field_size',
17429             'repspec' => '?',
17430             'argcode' => undef
17431             }, 'Parse::RecDescent::Repetition' ),
17432             bless( {
17433             'matchrule' => 0,
17434             'expected' => undef,
17435             'min' => 0,
17436             'max' => 1,
17437             'lookahead' => 0,
17438             'subrule' => 'growable',
17439             'line' => 197,
17440             'repspec' => '?',
17441             'argcode' => undef
17442             }, 'Parse::RecDescent::Repetition' ),
17443             bless( {
17444             'argcode' => undef,
17445             'repspec' => '?',
17446             'subrule' => 'label',
17447             'lookahead' => 0,
17448             'line' => 197,
17449             'min' => 0,
17450             'max' => 1,
17451             'matchrule' => 0,
17452             'expected' => undef
17453             }, 'Parse::RecDescent::Repetition' ),
17454             bless( {
17455             'lookahead' => 0,
17456             'subrule' => 'hint',
17457             'line' => 197,
17458             'expected' => undef,
17459             'matchrule' => 0,
17460             'max' => 1,
17461             'min' => 0,
17462             'repspec' => '?',
17463             'argcode' => undef
17464             }, 'Parse::RecDescent::Repetition' ),
17465             bless( {
17466             'min' => 0,
17467             'max' => 1,
17468             'expected' => undef,
17469             'matchrule' => 0,
17470             'line' => 197,
17471             'subrule' => 'type',
17472             'lookahead' => 0,
17473             'argcode' => undef,
17474             'repspec' => '?'
17475             }, 'Parse::RecDescent::Repetition' ),
17476             bless( {
17477             'repspec' => '?',
17478             'argcode' => undef,
17479             'expected' => undef,
17480             'matchrule' => 0,
17481             'min' => 0,
17482             'max' => 1,
17483             'lookahead' => 0,
17484             'subrule' => 'multi',
17485             'line' => 197
17486             }, 'Parse::RecDescent::Repetition' ),
17487             bless( {
17488             'repspec' => '?',
17489             'argcode' => undef,
17490             'matchrule' => 0,
17491             'expected' => undef,
17492             'min' => 0,
17493             'max' => 1,
17494             'lookahead' => 0,
17495             'subrule' => 'other',
17496             'line' => 197
17497             }, 'Parse::RecDescent::Repetition' ),
17498             bless( {
17499             'line' => 197,
17500             'lookahead' => 0,
17501             'subrule' => 'default',
17502             'matchrule' => 0,
17503             'expected' => undef,
17504             'max' => 1,
17505             'min' => 0,
17506             'repspec' => '?',
17507             'argcode' => undef
17508             }, 'Parse::RecDescent::Repetition' ),
17509             bless( {
17510             'argcode' => undef,
17511             'repspec' => '?',
17512             'min' => 0,
17513             'max' => 1,
17514             'matchrule' => 0,
17515             'expected' => undef,
17516             'subrule' => 'option_list',
17517             'lookahead' => 0,
17518             'line' => 197
17519             }, 'Parse::RecDescent::Repetition' ),
17520             bless( {
17521             'repspec' => '?',
17522             'argcode' => undef,
17523             'line' => 197,
17524             'lookahead' => 0,
17525             'subrule' => 'validate',
17526             'matchrule' => 0,
17527             'expected' => undef,
17528             'max' => 1,
17529             'min' => 0
17530             }, 'Parse::RecDescent::Repetition' ),
17531             bless( {
17532             'repspec' => '?',
17533             'argcode' => undef,
17534             'matchrule' => 0,
17535             'expected' => undef,
17536             'max' => 1,
17537             'min' => 0,
17538             'line' => 197,
17539             'lookahead' => 0,
17540             'subrule' => 'comment'
17541             }, 'Parse::RecDescent::Repetition' ),
17542             bless( {
17543             'hashname' => '__ACTION1__',
17544             'code' => '{
17545             my $field = {
17546             name => $item{name},
17547             growable => $item{\'growable(?)\'}[0],
17548             label => $item{\'label(?)\'}[0],
17549             comment => $item{\'hint(?)\'}[0],
17550             multiple => $item{\'multi(?)\'}[0],
17551             type => $item{\'type(?)\'}[0],
17552             other => $item{\'other(?)\'}[0],
17553             value => $item{\'default(?)\'}[0],
17554             list => $list_var,
17555             validate => $item{\'validate(?)\'}[0],
17556             required => $required,
17557             };
17558            
17559             $$field{options} = [ @options ] if @options;
17560            
17561             $$field{rows} = $rows if defined $rows;
17562             $$field{cols} = $cols if defined $cols;
17563             $$field{size} = $size if defined $size;
17564             $$field{maxlength} = $maxlength if defined $maxlength;
17565            
17566             #warn "[$thisline] field $item{name}; context $context\\n";
17567             if ($context eq \'group\') {
17568             push @group, $field;
17569             } else {
17570             push @lines, [ \'field\', $field ];
17571             }
17572            
17573             $type = undef;
17574             $required = undef;
17575             $multiple = undef;
17576             $list_var = undef;
17577             $size = undef;
17578             $rows = undef;
17579             $cols = undef;
17580             $maxlength = undef;
17581             @options = ();
17582            
17583             #warn "$$field{name}: $field";
17584            
17585             $field;
17586             }',
17587             'line' => 198,
17588             'lookahead' => 0
17589             }, 'Parse::RecDescent::Action' )
17590             ],
17591             'actcount' => 1,
17592             'line' => undef,
17593             'dircount' => 0,
17594             'error' => undef,
17595             'uncommit' => undef
17596             }, 'Parse::RecDescent::Production' )
17597             ],
17598             'calls' => [
17599             'name',
17600             'field_size',
17601             'growable',
17602             'label',
17603             'hint',
17604             'type',
17605             'multi',
17606             'other',
17607             'default',
17608             'option_list',
17609             'validate',
17610             'comment'
17611             ],
17612             'changed' => 0
17613             }, 'Parse::RecDescent::Rule' ),
17614             'title' => bless( {
17615             'changed' => 0,
17616             'calls' => [],
17617             'vars' => '',
17618             'prods' => [
17619             bless( {
17620             'dircount' => 0,
17621             'error' => undef,
17622             'uncommit' => undef,
17623             'patcount' => 1,
17624             'strcount' => 1,
17625             'number' => 0,
17626             'items' => [
17627             bless( {
17628             'description' => '\'!title\'',
17629             'lookahead' => 0,
17630             'line' => 120,
17631             'pattern' => '!title',
17632             'hashname' => '__STRING1__'
17633             }, 'Parse::RecDescent::Literal' ),
17634             bless( {
17635             'rdelim' => '/',
17636             'description' => '/.*/',
17637             'hashname' => '__PATTERN1__',
17638             'pattern' => '.*',
17639             'ldelim' => '/',
17640             'line' => 120,
17641             'mod' => '',
17642             'lookahead' => 0
17643             }, 'Parse::RecDescent::Token' ),
17644             bless( {
17645             'lookahead' => 0,
17646             'line' => 121,
17647             'code' => '{
17648             warn "[Text::FormBuilder] Title redefined at input text line $thisline\\n" if defined $formspec{title};
17649             $formspec{title} = $item[2];
17650             }',
17651             'hashname' => '__ACTION1__'
17652             }, 'Parse::RecDescent::Action' )
17653             ],
17654             'actcount' => 1,
17655             'line' => undef
17656             }, 'Parse::RecDescent::Production' )
17657             ],
17658             'name' => 'title',
17659             'opcount' => 0,
17660             'impcount' => 0,
17661             'line' => 120
17662             }, 'Parse::RecDescent::Rule' ),
17663             'blank' => bless( {
17664             'opcount' => 0,
17665             'line' => 305,
17666             'impcount' => 0,
17667             'name' => 'blank',
17668             'prods' => [
17669             bless( {
17670             'error' => undef,
17671             'uncommit' => undef,
17672             'dircount' => 0,
17673             'actcount' => 0,
17674             'line' => undef,
17675             'patcount' => 0,
17676             'number' => 0,
17677             'strcount' => 0,
17678             'items' => []
17679             }, 'Parse::RecDescent::Production' )
17680             ],
17681             'vars' => '',
17682             'calls' => [],
17683             'changed' => 0
17684             }, 'Parse::RecDescent::Rule' ),
17685             'unknown_directive' => bless( {
17686             'changed' => 0,
17687             'calls' => [],
17688             'vars' => '',
17689             'prods' => [
17690             bless( {
17691             'uncommit' => undef,
17692             'error' => undef,
17693             'dircount' => 0,
17694             'line' => undef,
17695             'actcount' => 1,
17696             'items' => [
17697             bless( {
17698             'rdelim' => '/',
17699             'description' => '/\\\\!\\\\S*/',
17700             'hashname' => '__PATTERN1__',
17701             'pattern' => '\\!\\S*',
17702             'ldelim' => '/',
17703             'line' => 310,
17704             'lookahead' => 0,
17705             'mod' => ''
17706             }, 'Parse::RecDescent::Token' ),
17707             bless( {
17708             'pattern' => '.*',
17709             'ldelim' => '/',
17710             'hashname' => '__PATTERN2__',
17711             'mod' => '',
17712             'lookahead' => 0,
17713             'line' => 310,
17714             'rdelim' => '/',
17715             'description' => '/.*/'
17716             }, 'Parse::RecDescent::Token' ),
17717             bless( {
17718             'lookahead' => 0,
17719             'line' => 311,
17720             'code' => '{ warn "[Text::Formbuilder] Skipping unknown directive \'$item[1]\' at input text line $thisline\\n"; }',
17721             'hashname' => '__ACTION1__'
17722             }, 'Parse::RecDescent::Action' )
17723             ],
17724             'strcount' => 0,
17725             'number' => 0,
17726             'patcount' => 2
17727             }, 'Parse::RecDescent::Production' )
17728             ],
17729             'name' => 'unknown_directive',
17730             'opcount' => 0,
17731             'impcount' => 0,
17732             'line' => 309
17733             }, 'Parse::RecDescent::Rule' ),
17734             'default' => bless( {
17735             'line' => 272,
17736             'opcount' => 0,
17737             'impcount' => 0,
17738             'name' => 'default',
17739             'calls' => [
17740             'string'
17741             ],
17742             'prods' => [
17743             bless( {
17744             'patcount' => 0,
17745             'strcount' => 1,
17746             'number' => 0,
17747             'items' => [
17748             bless( {
17749             'hashname' => '__STRING1__',
17750             'pattern' => '=',
17751             'line' => 272,
17752             'description' => '\'=\'',
17753             'lookahead' => 0
17754             }, 'Parse::RecDescent::Literal' ),
17755             bless( {
17756             'matchrule' => 0,
17757             'lookahead' => 0,
17758             'argcode' => undef,
17759             'subrule' => 'string',
17760             'line' => 272,
17761             'implicit' => undef
17762             }, 'Parse::RecDescent::Subrule' ),
17763             bless( {
17764             'line' => 272,
17765             'lookahead' => 0,
17766             'hashname' => '__ACTION1__',
17767             'code' => '{ $item[2] }'
17768             }, 'Parse::RecDescent::Action' )
17769             ],
17770             'actcount' => 1,
17771             'line' => undef,
17772             'dircount' => 0,
17773             'uncommit' => undef,
17774             'error' => undef
17775             }, 'Parse::RecDescent::Production' )
17776             ],
17777             'vars' => '',
17778             'changed' => 0
17779             }, 'Parse::RecDescent::Rule' ),
17780             'field_line' => bless( {
17781             'calls' => [
17782             '_alternation_1_of_production_1_of_rule_field_line'
17783             ],
17784             'vars' => '',
17785             'prods' => [
17786             bless( {
17787             'line' => undef,
17788             'actcount' => 0,
17789             'items' => [
17790             bless( {
17791             'line' => 116,
17792             'lookahead' => 0,
17793             'hashname' => '__DIRECTIVE1__',
17794             'code' => 'my $oldskip = $skip; $skip=\'[ \\t]*\'; $oldskip',
17795             'name' => ''
17796             }, 'Parse::RecDescent::Directive' ),
17797             bless( {
17798             'matchrule' => 0,
17799             'line' => 116,
17800             'implicit' => 'field, or comment, or blank',
17801             'lookahead' => 0,
17802             'subrule' => '_alternation_1_of_production_1_of_rule_field_line',
17803             'argcode' => undef
17804             }, 'Parse::RecDescent::Subrule' ),
17805             bless( {
17806             'pattern' => '\\n',
17807             'hashname' => '__STRING1__',
17808             'lookahead' => 0,
17809             'description' => '\'\\\\n\'',
17810             'line' => 116
17811             }, 'Parse::RecDescent::InterpLit' )
17812             ],
17813             'strcount' => 1,
17814             'number' => 0,
17815             'patcount' => 0,
17816             'error' => undef,
17817             'uncommit' => undef,
17818             'dircount' => 1
17819             }, 'Parse::RecDescent::Production' )
17820             ],
17821             'changed' => 0,
17822             'opcount' => 0,
17823             'line' => 115,
17824             'impcount' => 1,
17825             'name' => 'field_line'
17826             }, 'Parse::RecDescent::Rule' ),
17827             '_alternation_1_of_production_1_of_rule_field_size' => bless( {
17828             'name' => '_alternation_1_of_production_1_of_rule_field_size',
17829             'line' => 315,
17830             'opcount' => 0,
17831             'impcount' => 0,
17832             'changed' => 0,
17833             'vars' => '',
17834             'prods' => [
17835             bless( {
17836             'items' => [
17837             bless( {
17838             'matchrule' => 0,
17839             'line' => 315,
17840             'implicit' => undef,
17841             'lookahead' => 0,
17842             'subrule' => 'row_col',
17843             'argcode' => undef
17844             }, 'Parse::RecDescent::Subrule' )
17845             ],
17846             'strcount' => 0,
17847             'number' => 0,
17848             'patcount' => 0,
17849             'line' => undef,
17850             'actcount' => 0,
17851             'dircount' => 0,
17852             'uncommit' => undef,
17853             'error' => undef
17854             }, 'Parse::RecDescent::Production' ),
17855             bless( {
17856             'actcount' => 0,
17857             'line' => 315,
17858             'number' => 1,
17859             'strcount' => 0,
17860             'patcount' => 0,
17861             'items' => [
17862             bless( {
17863             'matchrule' => 0,
17864             'subrule' => 'size',
17865             'argcode' => undef,
17866             'lookahead' => 0,
17867             'implicit' => undef,
17868             'line' => 315
17869             }, 'Parse::RecDescent::Subrule' )
17870             ],
17871             'uncommit' => undef,
17872             'error' => undef,
17873             'dircount' => 0
17874             }, 'Parse::RecDescent::Production' )
17875             ],
17876             'calls' => [
17877             'row_col',
17878             'size'
17879             ]
17880             }, 'Parse::RecDescent::Rule' ),
17881             'size' => bless( {
17882             'vars' => '',
17883             'prods' => [
17884             bless( {
17885             'line' => undef,
17886             'actcount' => 1,
17887             'items' => [
17888             bless( {
17889             'lookahead' => 0,
17890             'mod' => '',
17891             'line' => 248,
17892             'pattern' => '\\d+',
17893             'ldelim' => '/',
17894             'hashname' => '__PATTERN1__',
17895             'description' => '/\\\\d+/',
17896             'rdelim' => '/'
17897             }, 'Parse::RecDescent::Token' ),
17898             bless( {
17899             'line' => 248,
17900             'subrule' => 'bang',
17901             'lookahead' => 0,
17902             'max' => 1,
17903             'min' => 0,
17904             'expected' => undef,
17905             'matchrule' => 0,
17906             'argcode' => undef,
17907             'repspec' => '?'
17908             }, 'Parse::RecDescent::Repetition' ),
17909             bless( {
17910             'hashname' => '__ACTION1__',
17911             'code' => '{ $maxlength = $item[1] if $item[2][0]; $size = $item[1] }',
17912             'line' => 249,
17913             'lookahead' => 0
17914             }, 'Parse::RecDescent::Action' )
17915             ],
17916             'patcount' => 1,
17917             'strcount' => 0,
17918             'number' => 0,
17919             'uncommit' => undef,
17920             'error' => undef,
17921             'dircount' => 0
17922             }, 'Parse::RecDescent::Production' )
17923             ],
17924             'calls' => [
17925             'bang'
17926             ],
17927             'changed' => 0,
17928             'line' => 248,
17929             'opcount' => 0,
17930             'impcount' => 0,
17931             'name' => 'size'
17932             }, 'Parse::RecDescent::Rule' ),
17933             '_alternation_1_of_production_1_of_rule_validate' => bless( {
17934             'name' => '_alternation_1_of_production_1_of_rule_validate',
17935             'opcount' => 0,
17936             'impcount' => 0,
17937             'line' => 315,
17938             'changed' => 0,
17939             'vars' => '',
17940             'prods' => [
17941             bless( {
17942             'dircount' => 0,
17943             'error' => undef,
17944             'uncommit' => undef,
17945             'items' => [
17946             bless( {
17947             'matchrule' => 0,
17948             'line' => 315,
17949             'implicit' => undef,
17950             'lookahead' => 0,
17951             'subrule' => 'optional_pattern',
17952             'argcode' => undef
17953             }, 'Parse::RecDescent::Subrule' )
17954             ],
17955             'strcount' => 0,
17956             'number' => 0,
17957             'patcount' => 0,
17958             'line' => undef,
17959             'actcount' => 0
17960             }, 'Parse::RecDescent::Production' ),
17961             bless( {
17962             'dircount' => 0,
17963             'error' => undef,
17964             'uncommit' => undef,
17965             'items' => [
17966             bless( {
17967             'matchrule' => 0,
17968             'argcode' => undef,
17969             'subrule' => 'required_pattern',
17970             'lookahead' => 0,
17971             'implicit' => undef,
17972             'line' => 315
17973             }, 'Parse::RecDescent::Subrule' )
17974             ],
17975             'patcount' => 0,
17976             'strcount' => 0,
17977             'number' => 1,
17978             'line' => 315,
17979             'actcount' => 0
17980             }, 'Parse::RecDescent::Production' )
17981             ],
17982             'calls' => [
17983             'optional_pattern',
17984             'required_pattern'
17985             ]
17986             }, 'Parse::RecDescent::Rule' ),
17987             'block' => bless( {
17988             'changed' => 0,
17989             'calls' => [
17990             'block_content'
17991             ],
17992             'prods' => [
17993             bless( {
17994             'error' => undef,
17995             'uncommit' => undef,
17996             'dircount' => 1,
17997             'line' => undef,
17998             'actcount' => 1,
17999             'items' => [
18000             bless( {
18001             'line' => 102,
18002             'description' => '\'\\{\'',
18003             'lookahead' => 0,
18004             'hashname' => '__STRING1__',
18005             'pattern' => '{'
18006             }, 'Parse::RecDescent::Literal' ),
18007             bless( {
18008             'name' => '',
18009             'code' => 'my $oldskip = $skip; $skip=\'\'; $oldskip',
18010             'hashname' => '__DIRECTIVE1__',
18011             'lookahead' => 0,
18012             'line' => 102
18013             }, 'Parse::RecDescent::Directive' ),
18014             bless( {
18015             'matchrule' => 0,
18016             'expected' => undef,
18017             'max' => 100000000,
18018             'min' => 1,
18019             'line' => 102,
18020             'lookahead' => 0,
18021             'subrule' => 'block_content',
18022             'repspec' => 's',
18023             'argcode' => undef
18024             }, 'Parse::RecDescent::Repetition' ),
18025             bless( {
18026             'line' => 102,
18027             'description' => '\'\\}\'',
18028             'lookahead' => 0,
18029             'hashname' => '__STRING2__',
18030             'pattern' => '}'
18031             }, 'Parse::RecDescent::Literal' ),
18032             bless( {
18033             'code' => '{ join(\'\', @{ $item[3] }) }',
18034             'hashname' => '__ACTION1__',
18035             'lookahead' => 0,
18036             'line' => 102
18037             }, 'Parse::RecDescent::Action' )
18038             ],
18039             'patcount' => 0,
18040             'strcount' => 2,
18041             'number' => 0
18042             }, 'Parse::RecDescent::Production' )
18043             ],
18044             'vars' => '',
18045             'name' => 'block',
18046             'opcount' => 0,
18047             'impcount' => 0,
18048             'line' => 101
18049             }, 'Parse::RecDescent::Rule' ),
18050             'builtin_field' => bless( {
18051             'changed' => 0,
18052             'calls' => [],
18053             'vars' => '',
18054             'prods' => [
18055             bless( {
18056             'dircount' => 0,
18057             'uncommit' => undef,
18058             'error' => undef,
18059             'strcount' => 0,
18060             'number' => 0,
18061             'patcount' => 1,
18062             'items' => [
18063             bless( {
18064             'pattern' => 'textarea|text|password|file|checkbox|radio|select|hidden|static',
18065             'ldelim' => '/',
18066             'hashname' => '__PATTERN1__',
18067             'mod' => '',
18068             'lookahead' => 0,
18069             'line' => 266,
18070             'rdelim' => '/',
18071             'description' => '/textarea|text|password|file|checkbox|radio|select|hidden|static/'
18072             }, 'Parse::RecDescent::Token' )
18073             ],
18074             'actcount' => 0,
18075             'line' => undef
18076             }, 'Parse::RecDescent::Production' )
18077             ],
18078             'name' => 'builtin_field',
18079             'opcount' => 0,
18080             'impcount' => 0,
18081             'line' => 266
18082             }, 'Parse::RecDescent::Rule' ),
18083             'hint' => bless( {
18084             'opcount' => 0,
18085             'impcount' => 0,
18086             'line' => 262,
18087             'name' => 'hint',
18088             'vars' => '',
18089             'prods' => [
18090             bless( {
18091             'dircount' => 0,
18092             'uncommit' => undef,
18093             'error' => undef,
18094             'patcount' => 0,
18095             'number' => 0,
18096             'strcount' => 0,
18097             'items' => [
18098             bless( {
18099             'matchrule' => 0,
18100             'lookahead' => 0,
18101             'argcode' => undef,
18102             'subrule' => 'bracket_block',
18103             'line' => 262,
18104             'implicit' => undef
18105             }, 'Parse::RecDescent::Subrule' )
18106             ],
18107             'actcount' => 0,
18108             'line' => undef
18109             }, 'Parse::RecDescent::Production' )
18110             ],
18111             'calls' => [
18112             'bracket_block'
18113             ],
18114             'changed' => 0
18115             }, 'Parse::RecDescent::Rule' ),
18116             '_alternation_1_of_production_1_of_rule_field_line' => bless( {
18117             'calls' => [
18118             'field',
18119             'comment',
18120             'blank'
18121             ],
18122             'vars' => '',
18123             'prods' => [
18124             bless( {
18125             'dircount' => 0,
18126             'error' => undef,
18127             'uncommit' => undef,
18128             'strcount' => 0,
18129             'number' => 0,
18130             'patcount' => 0,
18131             'items' => [
18132             bless( {
18133             'matchrule' => 0,
18134             'line' => 315,
18135             'implicit' => undef,
18136             'lookahead' => 0,
18137             'argcode' => undef,
18138             'subrule' => 'field'
18139             }, 'Parse::RecDescent::Subrule' )
18140             ],
18141             'actcount' => 0,
18142             'line' => undef
18143             }, 'Parse::RecDescent::Production' ),
18144             bless( {
18145             'dircount' => 0,
18146             'error' => undef,
18147             'uncommit' => undef,
18148             'items' => [
18149             bless( {
18150             'matchrule' => 0,
18151             'implicit' => undef,
18152             'line' => 315,
18153             'argcode' => undef,
18154             'subrule' => 'comment',
18155             'lookahead' => 0
18156             }, 'Parse::RecDescent::Subrule' )
18157             ],
18158             'number' => 1,
18159             'strcount' => 0,
18160             'patcount' => 0,
18161             'line' => 315,
18162             'actcount' => 0
18163             }, 'Parse::RecDescent::Production' ),
18164             bless( {
18165             'dircount' => 0,
18166             'uncommit' => undef,
18167             'error' => undef,
18168             'items' => [
18169             bless( {
18170             'matchrule' => 0,
18171             'lookahead' => 0,
18172             'subrule' => 'blank',
18173             'argcode' => undef,
18174             'line' => 315,
18175             'implicit' => undef
18176             }, 'Parse::RecDescent::Subrule' )
18177             ],
18178             'patcount' => 0,
18179             'strcount' => 0,
18180             'number' => 2,
18181             'line' => 315,
18182             'actcount' => 0
18183             }, 'Parse::RecDescent::Production' )
18184             ],
18185             'changed' => 0,
18186             'line' => 315,
18187             'opcount' => 0,
18188             'impcount' => 0,
18189             'name' => '_alternation_1_of_production_1_of_rule_field_line'
18190             }, 'Parse::RecDescent::Rule' ),
18191             'validate' => bless( {
18192             'changed' => 0,
18193             'calls' => [
18194             '_alternation_1_of_production_1_of_rule_validate'
18195             ],
18196             'prods' => [
18197             bless( {
18198             'items' => [
18199             bless( {
18200             'description' => '\'//\'',
18201             'lookahead' => 0,
18202             'line' => 298,
18203             'pattern' => '//',
18204             'hashname' => '__STRING1__'
18205             }, 'Parse::RecDescent::Literal' ),
18206             bless( {
18207             'matchrule' => 0,
18208             'implicit' => 'optional_pattern, or required_pattern',
18209             'line' => 298,
18210             'argcode' => undef,
18211             'subrule' => '_alternation_1_of_production_1_of_rule_validate',
18212             'lookahead' => 0
18213             }, 'Parse::RecDescent::Subrule' )
18214             ],
18215             'strcount' => 1,
18216             'number' => 0,
18217             'patcount' => 0,
18218             'line' => undef,
18219             'actcount' => 0,
18220             'dircount' => 0,
18221             'error' => undef,
18222             'uncommit' => undef
18223             }, 'Parse::RecDescent::Production' )
18224             ],
18225             'vars' => '',
18226             'name' => 'validate',
18227             'opcount' => 0,
18228             'impcount' => 1,
18229             'line' => 298
18230             }, 'Parse::RecDescent::Rule' ),
18231             'description_def' => bless( {
18232             'prods' => [
18233             bless( {
18234             'dircount' => 0,
18235             'uncommit' => undef,
18236             'error' => undef,
18237             'items' => [
18238             bless( {
18239             'pattern' => '!description',
18240             'hashname' => '__STRING1__',
18241             'lookahead' => 0,
18242             'description' => '\'!description\'',
18243             'line' => 82
18244             }, 'Parse::RecDescent::Literal' ),
18245             bless( {
18246             'matchrule' => 0,
18247             'lookahead' => 0,
18248             'argcode' => undef,
18249             'subrule' => 'block',
18250             'line' => 82,
18251             'implicit' => undef
18252             }, 'Parse::RecDescent::Subrule' ),
18253             bless( {
18254             'code' => '{
18255             warn "[Text::FormBuilder] Description redefined at input text line $thisline\\n" if defined $formspec{description};
18256             $formspec{description} = $item{block};
18257             }',
18258             'hashname' => '__ACTION1__',
18259             'lookahead' => 0,
18260             'line' => 83
18261             }, 'Parse::RecDescent::Action' )
18262             ],
18263             'number' => 0,
18264             'strcount' => 1,
18265             'patcount' => 0,
18266             'line' => undef,
18267             'actcount' => 1
18268             }, 'Parse::RecDescent::Production' )
18269             ],
18270             'vars' => '',
18271             'calls' => [
18272             'block'
18273             ],
18274             'changed' => 0,
18275             'opcount' => 0,
18276             'impcount' => 0,
18277             'line' => 82,
18278             'name' => 'description_def'
18279             }, 'Parse::RecDescent::Rule' ),
18280             'growable' => bless( {
18281             'opcount' => 0,
18282             'impcount' => 0,
18283             'line' => 256,
18284             'name' => 'growable',
18285             'calls' => [
18286             'limit'
18287             ],
18288             'prods' => [
18289             bless( {
18290             'dircount' => 0,
18291             'error' => undef,
18292             'uncommit' => undef,
18293             'patcount' => 0,
18294             'number' => 0,
18295             'strcount' => 1,
18296             'items' => [
18297             bless( {
18298             'lookahead' => 0,
18299             'description' => '\'*\'',
18300             'line' => 256,
18301             'pattern' => '*',
18302             'hashname' => '__STRING1__'
18303             }, 'Parse::RecDescent::Literal' ),
18304             bless( {
18305             'argcode' => undef,
18306             'repspec' => '?',
18307             'subrule' => 'limit',
18308             'lookahead' => 0,
18309             'line' => 256,
18310             'min' => 0,
18311             'max' => 1,
18312             'expected' => undef,
18313             'matchrule' => 0
18314             }, 'Parse::RecDescent::Repetition' ),
18315             bless( {
18316             'hashname' => '__ACTION1__',
18317             'code' => '{ $item{\'limit(?)\'}[0] || 1 }',
18318             'line' => 256,
18319             'lookahead' => 0
18320             }, 'Parse::RecDescent::Action' )
18321             ],
18322             'actcount' => 1,
18323             'line' => undef
18324             }, 'Parse::RecDescent::Production' )
18325             ],
18326             'vars' => '',
18327             'changed' => 0
18328             }, 'Parse::RecDescent::Rule' ),
18329             'field_size' => bless( {
18330             'changed' => 0,
18331             'calls' => [
18332             '_alternation_1_of_production_1_of_rule_field_size'
18333             ],
18334             'vars' => '',
18335             'prods' => [
18336             bless( {
18337             'items' => [
18338             bless( {
18339             'line' => 246,
18340             'description' => '\'[\'',
18341             'lookahead' => 0,
18342             'hashname' => '__STRING1__',
18343             'pattern' => '['
18344             }, 'Parse::RecDescent::Literal' ),
18345             bless( {
18346             'matchrule' => 0,
18347             'implicit' => 'row_col, or size',
18348             'line' => 246,
18349             'subrule' => '_alternation_1_of_production_1_of_rule_field_size',
18350             'argcode' => undef,
18351             'lookahead' => 0
18352             }, 'Parse::RecDescent::Subrule' ),
18353             bless( {
18354             'hashname' => '__STRING2__',
18355             'pattern' => ']',
18356             'line' => 246,
18357             'description' => '\']\'',
18358             'lookahead' => 0
18359             }, 'Parse::RecDescent::Literal' )
18360             ],
18361             'patcount' => 0,
18362             'number' => 0,
18363             'strcount' => 2,
18364             'line' => undef,
18365             'actcount' => 0,
18366             'dircount' => 0,
18367             'uncommit' => undef,
18368             'error' => undef
18369             }, 'Parse::RecDescent::Production' )
18370             ],
18371             'name' => 'field_size',
18372             'opcount' => 0,
18373             'impcount' => 1,
18374             'line' => 246
18375             }, 'Parse::RecDescent::Rule' ),
18376             'pattern_def' => bless( {
18377             'opcount' => 0,
18378             'line' => 132,
18379             'impcount' => 0,
18380             'name' => 'pattern_def',
18381             'prods' => [
18382             bless( {
18383             'error' => undef,
18384             'uncommit' => undef,
18385             'dircount' => 0,
18386             'actcount' => 1,
18387             'line' => undef,
18388             'patcount' => 0,
18389             'strcount' => 1,
18390             'number' => 0,
18391             'items' => [
18392             bless( {
18393             'pattern' => '!pattern',
18394             'hashname' => '__STRING1__',
18395             'description' => '\'!pattern\'',
18396             'lookahead' => 0,
18397             'line' => 132
18398             }, 'Parse::RecDescent::Literal' ),
18399             bless( {
18400             'implicit' => undef,
18401             'line' => 132,
18402             'subrule' => 'var_name',
18403             'argcode' => undef,
18404             'lookahead' => 0,
18405             'matchrule' => 0
18406             }, 'Parse::RecDescent::Subrule' ),
18407             bless( {
18408             'matchrule' => 0,
18409             'line' => 132,
18410             'implicit' => undef,
18411             'lookahead' => 0,
18412             'argcode' => undef,
18413             'subrule' => 'pattern'
18414             }, 'Parse::RecDescent::Subrule' ),
18415             bless( {
18416             'lookahead' => 0,
18417             'line' => 133,
18418             'code' => '{ $patterns{$item{var_name}} = $item{pattern} }',
18419             'hashname' => '__ACTION1__'
18420             }, 'Parse::RecDescent::Action' )
18421             ]
18422             }, 'Parse::RecDescent::Production' )
18423             ],
18424             'vars' => '',
18425             'calls' => [
18426             'var_name',
18427             'pattern'
18428             ],
18429             'changed' => 0
18430             }, 'Parse::RecDescent::Rule' )
18431             },
18432             '_AUTOACTION' => undef,
18433             '_AUTOTREE' => undef,
18434             '_check' => {
18435             'prevline' => '',
18436             'thiscolumn' => '',
18437             'thisoffset' => '',
18438             'itempos' => '',
18439             'prevoffset' => '',
18440             'prevcolumn' => ''
18441             },
18442             'startcode' => '',
18443             'localvars' => ''
18444             }, 'Parse::RecDescent' );
18445             }