Index: trunk/lib/Text/FormBuilder/Parser.pm
===================================================================
--- trunk/lib/Text/FormBuilder/Parser.pm	(revision 9)
+++ trunk/lib/Text/FormBuilder/Parser.pm	(revision 10)
@@ -569,5 +569,5 @@
 	{
 		
-		Parse::RecDescent::_trace(q{Trying production: ['!list' list_name '\{' <leftop: option /,\\s*/ option> /,?/ '\}']},
+		Parse::RecDescent::_trace(q{Trying production: ['!list' list_name static_list, or dynamic_list]},
 					  Parse::RecDescent::_tracefirst($_[1]),
 					  q{list_def},
@@ -637,55 +637,15 @@
 		}
 
-		Parse::RecDescent::_trace(q{Trying terminal: ['\{']},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{list_def},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$lastsep = "";
-		$expectation->is(q{'\{'})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\{//)
-		{
-			
-			$expectation->failed();
-			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
-						. $& . q{])},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-		push @item, $item{__STRING2__}=$&;
-		
-
-		Parse::RecDescent::_trace(q{Trying operator: [<leftop: option /,\\s*/ option>]},
+		Parse::RecDescent::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_list_def]},
 				  Parse::RecDescent::_tracefirst($text),
 				  q{list_def},
 				  $tracelevel)
 					if defined $::RD_TRACE;
-		$expectation->is(q{<leftop: option /,\\s*/ option>})->at($text);
-
-		$_tok = undef;
-		OPLOOP: while (1)
-		{
-		  $repcount = 0;
-		  my  @item;
-		  
-		  # MATCH LEFTARG
-		  
-		Parse::RecDescent::_trace(q{Trying subrule: [option]},
-				  Parse::RecDescent::_tracefirst($text),
-				  q{list_def},
-				  $tracelevel)
-					if defined $::RD_TRACE;
 		if (1) { no strict qw{refs};
-		$expectation->is(q{option})->at($text);
-		unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
+		$expectation->is(q{static_list, or dynamic_list})->at($text);
+		unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_list_def($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
 		{
 			
-			Parse::RecDescent::_trace(q{<<Didn't match subrule: [option]>>},
+			Parse::RecDescent::_trace(q{<<Didn't match subrule: [_alternation_1_of_production_1_of_rule_list_def]>>},
 						  Parse::RecDescent::_tracefirst($text),
 						  q{list_def},
@@ -695,5 +655,5 @@
 			last;
 		}
-		Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
+		Parse::RecDescent::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_list_def]<< (return value: [}
 					. $_tok . q{]},
 					  
@@ -702,158 +662,8 @@
 					  $tracelevel)
 						if defined $::RD_TRACE;
-		$item{q{option}} = $_tok;
+		$item{q{_alternation_1_of_production_1_of_rule_list_def}} = $_tok;
 		push @item, $_tok;
 		
 		}
-
-
-		  $repcount++;
-
-		  my $savetext = $text;
-		  my $backtrack;
-
-		  # MATCH (OP RIGHTARG)(s)
-		  while ($repcount < 100000000)
-		  {
-			$backtrack = 0;
-			
-		Parse::RecDescent::_trace(q{Trying terminal: [/,\\s*/]}, Parse::RecDescent::_tracefirst($text),
-					  q{list_def},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$lastsep = "";
-		$expectation->is(q{/,\\s*/})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:,\s*)//)
-		{
-			
-			$expectation->failed();
-			Parse::RecDescent::_trace(q{<<Didn't match terminal>>},
-						  Parse::RecDescent::_tracefirst($text))
-					if defined $::RD_TRACE;
-
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
-						. $& . q{])},
-						  Parse::RecDescent::_tracefirst($text))
-					if defined $::RD_TRACE;
-		push @item, $item{__PATTERN1__}=$&;
-		
-
-			pop @item;
-			if (defined $1) {push @item, $item{'option(s)'}=$1; $backtrack=1;}
-			
-		Parse::RecDescent::_trace(q{Trying subrule: [option]},
-				  Parse::RecDescent::_tracefirst($text),
-				  q{list_def},
-				  $tracelevel)
-					if defined $::RD_TRACE;
-		if (1) { no strict qw{refs};
-		$expectation->is(q{option})->at($text);
-		unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
-		{
-			
-			Parse::RecDescent::_trace(q{<<Didn't match subrule: [option]>>},
-						  Parse::RecDescent::_tracefirst($text),
-						  q{list_def},
-						  $tracelevel)
-							if defined $::RD_TRACE;
-			$expectation->failed();
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
-					. $_tok . q{]},
-					  
-					  Parse::RecDescent::_tracefirst($text),
-					  q{list_def},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$item{q{option}} = $_tok;
-		push @item, $_tok;
-		
-		}
-
-			$savetext = $text;
-			$repcount++;
-		  }
-		  $text = $savetext;
-		  pop @item if $backtrack;
-
-		  unless (@item) { undef $_tok; last }
-		  $_tok = [ @item ];
-		  last;
-		} 
-
-		unless ($repcount>=1)
-		{
-			Parse::RecDescent::_trace(q{<<Didn't match operator: [<leftop: option /,\\s*/ option>]>>},
-						  Parse::RecDescent::_tracefirst($text),
-						  q{list_def},
-						  $tracelevel)
-							if defined $::RD_TRACE;
-			$expectation->failed();
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched operator: [<leftop: option /,\\s*/ option>]<< (return value: [}
-					  . qq{@{$_tok||[]}} . q{]},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{list_def},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-
-		push @item, $item{'option(s)'}=$_tok||[];
-
-
-		Parse::RecDescent::_trace(q{Trying terminal: [/,?/]}, Parse::RecDescent::_tracefirst($text),
-					  q{list_def},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$lastsep = "";
-		$expectation->is(q{/,?/})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:,?)//)
-		{
-			
-			$expectation->failed();
-			Parse::RecDescent::_trace(q{<<Didn't match terminal>>},
-						  Parse::RecDescent::_tracefirst($text))
-					if defined $::RD_TRACE;
-
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
-						. $& . q{])},
-						  Parse::RecDescent::_tracefirst($text))
-					if defined $::RD_TRACE;
-		push @item, $item{__PATTERN2__}=$&;
-		
-
-		Parse::RecDescent::_trace(q{Trying terminal: ['\}']},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{list_def},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$lastsep = "";
-		$expectation->is(q{'\}'})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\}//)
-		{
-			
-			$expectation->failed();
-			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
-						. $& . q{])},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-		push @item, $item{__STRING3__}=$&;
-		
 
 		Parse::RecDescent::_trace(q{Trying action},
@@ -880,5 +690,5 @@
 
 
-		Parse::RecDescent::_trace(q{>>Matched production: ['!list' list_name '\{' <leftop: option /,\\s*/ option> /,?/ '\}']<<},
+		Parse::RecDescent::_trace(q{>>Matched production: ['!list' list_name static_list, or dynamic_list]<<},
 					  Parse::RecDescent::_tracefirst($text),
 					  q{list_def},
@@ -4626,5 +4436,5 @@
 
 # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
-sub Parse::RecDescent::Text::FormBuilder::Parser::form_spec
+sub Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_list_def
 {
 	my $thisparser = $_[0];
@@ -4632,9 +4442,9 @@
 	local $tracelevel = ($tracelevel||0)+1;
 	$ERRORS = 0;
-	my $thisrule = $thisparser->{"rules"}{"form_spec"};
-	
-	Parse::RecDescent::_trace(q{Trying rule: [form_spec]},
+	my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_list_def"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_list_def]},
 				  Parse::RecDescent::_tracefirst($_[1]),
-				  q{form_spec},
+				  q{_alternation_1_of_production_1_of_rule_list_def},
 				  $tracelevel)
 					if defined $::RD_TRACE;
@@ -4668,7 +4478,7 @@
 	{
 		
-		Parse::RecDescent::_trace(q{Trying production: [list_def, or line]},
+		Parse::RecDescent::_trace(q{Trying production: [static_list]},
 					  Parse::RecDescent::_tracefirst($_[1]),
-					  q{form_spec},
+					  q{_alternation_1_of_production_1_of_rule_list_def},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -4676,71 +4486,100 @@
 		$text = $_[1];
 		my $_savetext;
-		@item = (q{form_spec});
-		%item = (__RULE__ => q{form_spec});
+		@item = (q{_alternation_1_of_production_1_of_rule_list_def});
+		%item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_list_def});
 		my $repcount = 0;
 
 
-		Parse::RecDescent::_trace(q{Trying repeated subrule: [list_def, or line]},
+		Parse::RecDescent::_trace(q{Trying subrule: [static_list]},
 				  Parse::RecDescent::_tracefirst($text),
-				  q{form_spec},
+				  q{_alternation_1_of_production_1_of_rule_list_def},
 				  $tracelevel)
 					if defined $::RD_TRACE;
+		if (1) { no strict qw{refs};
 		$expectation->is(q{})->at($text);
-		
-		unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_form_spec, 1, 100000000, $_noactions,$expectation,undef))) 
-		{
-			Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [list_def, or line]>>},
+		unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::static_list($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
+		{
+			
+			Parse::RecDescent::_trace(q{<<Didn't match subrule: [static_list]>>},
 						  Parse::RecDescent::_tracefirst($text),
-						  q{form_spec},
+						  q{_alternation_1_of_production_1_of_rule_list_def},
 						  $tracelevel)
 							if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched repeated subrule: [_alternation_1_of_production_1_of_rule_form_spec]<< (}
-					. @$_tok . q{ times)},
+			$expectation->failed();
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched subrule: [static_list]<< (return value: [}
+					. $_tok . q{]},
 					  
 					  Parse::RecDescent::_tracefirst($text),
-					  q{form_spec},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$item{q{_alternation_1_of_production_1_of_rule_form_spec(s)}} = $_tok;
+					  q{_alternation_1_of_production_1_of_rule_list_def},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$item{q{static_list}} = $_tok;
 		push @item, $_tok;
 		
-
-
-		Parse::RecDescent::_trace(q{Trying action},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{form_spec},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		
-
-		$_tok = ($_noactions) ? 0 : do {
-	$return = {
-	    title    => $title,
-	    author   => $author,
-	    lists    => \%lists, 
-	    patterns => \%patterns, 
-	    fields   => \@fields,
-	}
-    };
-		unless (defined $_tok)
-		{
-			Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])})
-					if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
-					  . $_tok . q{])},
-					  Parse::RecDescent::_tracefirst($text))
-						if defined $::RD_TRACE;
+		}
+
+
+		Parse::RecDescent::_trace(q{>>Matched production: [static_list]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{_alternation_1_of_production_1_of_rule_list_def},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$_matched = 1;
+		last;
+	}
+
+
+	while (!$_matched && !$commit)
+	{
+		
+		Parse::RecDescent::_trace(q{Trying production: [dynamic_list]},
+					  Parse::RecDescent::_tracefirst($_[1]),
+					  q{_alternation_1_of_production_1_of_rule_list_def},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		my $thisprod = $thisrule->{"prods"}[1];
+		$text = $_[1];
+		my $_savetext;
+		@item = (q{_alternation_1_of_production_1_of_rule_list_def});
+		%item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_list_def});
+		my $repcount = 0;
+
+
+		Parse::RecDescent::_trace(q{Trying subrule: [dynamic_list]},
+				  Parse::RecDescent::_tracefirst($text),
+				  q{_alternation_1_of_production_1_of_rule_list_def},
+				  $tracelevel)
+					if defined $::RD_TRACE;
+		if (1) { no strict qw{refs};
+		$expectation->is(q{})->at($text);
+		unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::dynamic_list($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
+		{
+			
+			Parse::RecDescent::_trace(q{<<Didn't match subrule: [dynamic_list]>>},
+						  Parse::RecDescent::_tracefirst($text),
+						  q{_alternation_1_of_production_1_of_rule_list_def},
+						  $tracelevel)
+							if defined $::RD_TRACE;
+			$expectation->failed();
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched subrule: [dynamic_list]<< (return value: [}
+					. $_tok . q{]},
+					  
+					  Parse::RecDescent::_tracefirst($text),
+					  q{_alternation_1_of_production_1_of_rule_list_def},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$item{q{dynamic_list}} = $_tok;
 		push @item, $_tok;
-		$item{__ACTION1__}=$_tok;
-		
-
-
-		Parse::RecDescent::_trace(q{>>Matched production: [list_def, or line]<<},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{form_spec},
+		
+		}
+
+
+		Parse::RecDescent::_trace(q{>>Matched production: [dynamic_list]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{_alternation_1_of_production_1_of_rule_list_def},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -4757,5 +4596,5 @@
 		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
 					 Parse::RecDescent::_tracefirst($_[1]),
-					 q{form_spec},
+					 q{_alternation_1_of_production_1_of_rule_list_def},
 					 $tracelevel)
 					if defined $::RD_TRACE;
@@ -4765,5 +4604,5 @@
 	{
 		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
-					  q{form_spec},
+					  q{_alternation_1_of_production_1_of_rule_list_def},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -4776,10 +4615,10 @@
 		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
 					  $return . q{])}, "",
-					  q{form_spec},
+					  q{_alternation_1_of_production_1_of_rule_list_def},
 					  $tracelevel);
 		Parse::RecDescent::_trace(q{(consumed: [} .
 					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
 					  Parse::RecDescent::_tracefirst($text),
-					  , q{form_spec},
+					  , q{_alternation_1_of_production_1_of_rule_list_def},
 					  $tracelevel)
 	}
@@ -4789,5 +4628,5 @@
 
 # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
-sub Parse::RecDescent::Text::FormBuilder::Parser::pattern
+sub Parse::RecDescent::Text::FormBuilder::Parser::form_spec
 {
 	my $thisparser = $_[0];
@@ -4795,9 +4634,9 @@
 	local $tracelevel = ($tracelevel||0)+1;
 	$ERRORS = 0;
-	my $thisrule = $thisparser->{"rules"}{"pattern"};
-	
-	Parse::RecDescent::_trace(q{Trying rule: [pattern]},
+	my $thisrule = $thisparser->{"rules"}{"form_spec"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [form_spec]},
 				  Parse::RecDescent::_tracefirst($_[1]),
-				  q{pattern},
+				  q{form_spec},
 				  $tracelevel)
 					if defined $::RD_TRACE;
@@ -4831,7 +4670,7 @@
 	{
 		
-		Parse::RecDescent::_trace(q{Trying production: [/.*/]},
+		Parse::RecDescent::_trace(q{Trying production: [list_def, or line]},
 					  Parse::RecDescent::_tracefirst($_[1]),
-					  q{pattern},
+					  q{form_spec},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -4839,38 +4678,71 @@
 		$text = $_[1];
 		my $_savetext;
-		@item = (q{pattern});
-		%item = (__RULE__ => q{pattern});
+		@item = (q{form_spec});
+		%item = (__RULE__ => q{form_spec});
 		my $repcount = 0;
 
 
-		Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
-					  q{pattern},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$lastsep = "";
+		Parse::RecDescent::_trace(q{Trying repeated subrule: [list_def, or line]},
+				  Parse::RecDescent::_tracefirst($text),
+				  q{form_spec},
+				  $tracelevel)
+					if defined $::RD_TRACE;
 		$expectation->is(q{})->at($text);
 		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:.*)//)
-		{
-			
-			$expectation->failed();
-			Parse::RecDescent::_trace(q{<<Didn't match terminal>>},
-						  Parse::RecDescent::_tracefirst($text))
-					if defined $::RD_TRACE;
-
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
-						. $& . q{])},
-						  Parse::RecDescent::_tracefirst($text))
-					if defined $::RD_TRACE;
-		push @item, $item{__PATTERN1__}=$&;
-		
-
-
-		Parse::RecDescent::_trace(q{>>Matched production: [/.*/]<<},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{pattern},
+		unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Text::FormBuilder::Parser::_alternation_1_of_production_1_of_rule_form_spec, 1, 100000000, $_noactions,$expectation,undef))) 
+		{
+			Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [list_def, or line]>>},
+						  Parse::RecDescent::_tracefirst($text),
+						  q{form_spec},
+						  $tracelevel)
+							if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched repeated subrule: [_alternation_1_of_production_1_of_rule_form_spec]<< (}
+					. @$_tok . q{ times)},
+					  
+					  Parse::RecDescent::_tracefirst($text),
+					  q{form_spec},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$item{q{_alternation_1_of_production_1_of_rule_form_spec(s)}} = $_tok;
+		push @item, $_tok;
+		
+
+
+		Parse::RecDescent::_trace(q{Trying action},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{form_spec},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		
+
+		$_tok = ($_noactions) ? 0 : do {
+	$return = {
+	    title    => $title,
+	    author   => $author,
+	    lists    => \%lists, 
+	    patterns => \%patterns, 
+	    fields   => \@fields,
+	}
+    };
+		unless (defined $_tok)
+		{
+			Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])})
+					if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
+					  . $_tok . q{])},
+					  Parse::RecDescent::_tracefirst($text))
+						if defined $::RD_TRACE;
+		push @item, $_tok;
+		$item{__ACTION1__}=$_tok;
+		
+
+
+		Parse::RecDescent::_trace(q{>>Matched production: [list_def, or line]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{form_spec},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -4887,5 +4759,5 @@
 		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
 					 Parse::RecDescent::_tracefirst($_[1]),
-					 q{pattern},
+					 q{form_spec},
 					 $tracelevel)
 					if defined $::RD_TRACE;
@@ -4895,5 +4767,5 @@
 	{
 		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
-					  q{pattern},
+					  q{form_spec},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -4906,10 +4778,10 @@
 		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
 					  $return . q{])}, "",
-					  q{pattern},
+					  q{form_spec},
 					  $tracelevel);
 		Parse::RecDescent::_trace(q{(consumed: [} .
 					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
 					  Parse::RecDescent::_tracefirst($text),
-					  , q{pattern},
+					  , q{form_spec},
 					  $tracelevel)
 	}
@@ -4919,5 +4791,5 @@
 
 # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
-sub Parse::RecDescent::Text::FormBuilder::Parser::comment
+sub Parse::RecDescent::Text::FormBuilder::Parser::pattern
 {
 	my $thisparser = $_[0];
@@ -4925,9 +4797,9 @@
 	local $tracelevel = ($tracelevel||0)+1;
 	$ERRORS = 0;
-	my $thisrule = $thisparser->{"rules"}{"comment"};
-	
-	Parse::RecDescent::_trace(q{Trying rule: [comment]},
+	my $thisrule = $thisparser->{"rules"}{"pattern"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [pattern]},
 				  Parse::RecDescent::_tracefirst($_[1]),
-				  q{comment},
+				  q{pattern},
 				  $tracelevel)
 					if defined $::RD_TRACE;
@@ -4961,7 +4833,7 @@
 	{
 		
-		Parse::RecDescent::_trace(q{Trying production: ['#' /.*/]},
+		Parse::RecDescent::_trace(q{Trying production: [/.*/]},
 					  Parse::RecDescent::_tracefirst($_[1]),
-					  q{comment},
+					  q{pattern},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -4969,40 +4841,15 @@
 		$text = $_[1];
 		my $_savetext;
-		@item = (q{comment});
-		%item = (__RULE__ => q{comment});
+		@item = (q{pattern});
+		%item = (__RULE__ => q{pattern});
 		my $repcount = 0;
 
 
-		Parse::RecDescent::_trace(q{Trying terminal: ['#']},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{comment},
+		Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
+					  q{pattern},
 					  $tracelevel)
 						if defined $::RD_TRACE;
 		$lastsep = "";
 		$expectation->is(q{})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\#//)
-		{
-			
-			$expectation->failed();
-			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
-						. $& . q{])},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-		push @item, $item{__STRING1__}=$&;
-		
-
-		Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
-					  q{comment},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$lastsep = "";
-		$expectation->is(q{/.*/})->at($text);
 		
 
@@ -5025,7 +4872,7 @@
 
 
-		Parse::RecDescent::_trace(q{>>Matched production: ['#' /.*/]<<},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{comment},
+		Parse::RecDescent::_trace(q{>>Matched production: [/.*/]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{pattern},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5042,5 +4889,5 @@
 		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
 					 Parse::RecDescent::_tracefirst($_[1]),
-					 q{comment},
+					 q{pattern},
 					 $tracelevel)
 					if defined $::RD_TRACE;
@@ -5050,5 +4897,5 @@
 	{
 		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
-					  q{comment},
+					  q{pattern},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5061,10 +4908,10 @@
 		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
 					  $return . q{])}, "",
-					  q{comment},
+					  q{pattern},
 					  $tracelevel);
 		Parse::RecDescent::_trace(q{(consumed: [} .
 					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
 					  Parse::RecDescent::_tracefirst($text),
-					  , q{comment},
+					  , q{pattern},
 					  $tracelevel)
 	}
@@ -5074,5 +4921,5 @@
 
 # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
-sub Parse::RecDescent::Text::FormBuilder::Parser::hint
+sub Parse::RecDescent::Text::FormBuilder::Parser::comment
 {
 	my $thisparser = $_[0];
@@ -5080,9 +4927,9 @@
 	local $tracelevel = ($tracelevel||0)+1;
 	$ERRORS = 0;
-	my $thisrule = $thisparser->{"rules"}{"hint"};
-	
-	Parse::RecDescent::_trace(q{Trying rule: [hint]},
+	my $thisrule = $thisparser->{"rules"}{"comment"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [comment]},
 				  Parse::RecDescent::_tracefirst($_[1]),
-				  q{hint},
+				  q{comment},
 				  $tracelevel)
 					if defined $::RD_TRACE;
@@ -5116,7 +4963,7 @@
 	{
 		
-		Parse::RecDescent::_trace(q{Trying production: ['[' /[^\\]]+/ ']']},
+		Parse::RecDescent::_trace(q{Trying production: ['#' /.*/]},
 					  Parse::RecDescent::_tracefirst($_[1]),
-					  q{hint},
+					  q{comment},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5124,12 +4971,12 @@
 		$text = $_[1];
 		my $_savetext;
-		@item = (q{hint});
-		%item = (__RULE__ => q{hint});
+		@item = (q{comment});
+		%item = (__RULE__ => q{comment});
 		my $repcount = 0;
 
 
-		Parse::RecDescent::_trace(q{Trying terminal: ['[']},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{hint},
+		Parse::RecDescent::_trace(q{Trying terminal: ['#']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{comment},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5138,5 +4985,5 @@
 		
 
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\[//)
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\#//)
 		{
 			
@@ -5154,13 +5001,13 @@
 		
 
-		Parse::RecDescent::_trace(q{Trying terminal: [/[^\\]]+/]}, Parse::RecDescent::_tracefirst($text),
-					  q{hint},
+		Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
+					  q{comment},
 					  $tracelevel)
 						if defined $::RD_TRACE;
 		$lastsep = "";
-		$expectation->is(q{/[^\\]]+/})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:[^\]]+)//)
+		$expectation->is(q{/.*/})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:.*)//)
 		{
 			
@@ -5179,55 +5026,8 @@
 		
 
-		Parse::RecDescent::_trace(q{Trying terminal: [']']},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{hint},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		$lastsep = "";
-		$expectation->is(q{']'})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\]//)
-		{
-			
-			$expectation->failed();
-			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
-						. $& . q{])},
-						  Parse::RecDescent::_tracefirst($text))
-							if defined $::RD_TRACE;
-		push @item, $item{__STRING2__}=$&;
-		
-
-		Parse::RecDescent::_trace(q{Trying action},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{hint},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		
-
-		$_tok = ($_noactions) ? 0 : do { $item[2] };
-		unless (defined $_tok)
-		{
-			Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])})
-					if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
-					  . $_tok . q{])},
-					  Parse::RecDescent::_tracefirst($text))
-						if defined $::RD_TRACE;
-		push @item, $_tok;
-		$item{__ACTION1__}=$_tok;
-		
-
-
-		Parse::RecDescent::_trace(q{>>Matched production: ['[' /[^\\]]+/ ']']<<},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{hint},
+
+		Parse::RecDescent::_trace(q{>>Matched production: ['#' /.*/]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{comment},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5244,5 +5044,5 @@
 		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
 					 Parse::RecDescent::_tracefirst($_[1]),
-					 q{hint},
+					 q{comment},
 					 $tracelevel)
 					if defined $::RD_TRACE;
@@ -5252,5 +5052,5 @@
 	{
 		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
-					  q{hint},
+					  q{comment},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5263,10 +5063,10 @@
 		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
 					  $return . q{])}, "",
-					  q{hint},
+					  q{comment},
 					  $tracelevel);
 		Parse::RecDescent::_trace(q{(consumed: [} .
 					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
 					  Parse::RecDescent::_tracefirst($text),
-					  , q{hint},
+					  , q{comment},
 					  $tracelevel)
 	}
@@ -5276,5 +5076,5 @@
 
 # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
-sub Parse::RecDescent::Text::FormBuilder::Parser::type
+sub Parse::RecDescent::Text::FormBuilder::Parser::hint
 {
 	my $thisparser = $_[0];
@@ -5282,9 +5082,9 @@
 	local $tracelevel = ($tracelevel||0)+1;
 	$ERRORS = 0;
-	my $thisrule = $thisparser->{"rules"}{"type"};
-	
-	Parse::RecDescent::_trace(q{Trying rule: [type]},
+	my $thisrule = $thisparser->{"rules"}{"hint"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [hint]},
 				  Parse::RecDescent::_tracefirst($_[1]),
-				  q{type},
+				  q{hint},
 				  $tracelevel)
 					if defined $::RD_TRACE;
@@ -5318,7 +5118,7 @@
 	{
 		
-		Parse::RecDescent::_trace(q{Trying production: [':' /textarea|text|password|file|checkbox|radio|select|hidden|static/]},
+		Parse::RecDescent::_trace(q{Trying production: ['[' /[^\\]]+/ ']']},
 					  Parse::RecDescent::_tracefirst($_[1]),
-					  q{type},
+					  q{hint},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5326,12 +5126,12 @@
 		$text = $_[1];
 		my $_savetext;
-		@item = (q{type});
-		%item = (__RULE__ => q{type});
+		@item = (q{hint});
+		%item = (__RULE__ => q{hint});
 		my $repcount = 0;
 
 
-		Parse::RecDescent::_trace(q{Trying terminal: [':']},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{type},
+		Parse::RecDescent::_trace(q{Trying terminal: ['[']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{hint},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5340,5 +5140,5 @@
 		
 
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\://)
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\[//)
 		{
 			
@@ -5356,13 +5156,13 @@
 		
 
-		Parse::RecDescent::_trace(q{Trying terminal: [/textarea|text|password|file|checkbox|radio|select|hidden|static/]}, Parse::RecDescent::_tracefirst($text),
-					  q{type},
+		Parse::RecDescent::_trace(q{Trying terminal: [/[^\\]]+/]}, Parse::RecDescent::_tracefirst($text),
+					  q{hint},
 					  $tracelevel)
 						if defined $::RD_TRACE;
 		$lastsep = "";
-		$expectation->is(q{/textarea|text|password|file|checkbox|radio|select|hidden|static/})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:textarea|text|password|file|checkbox|radio|select|hidden|static)//)
+		$expectation->is(q{/[^\\]]+/})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:[^\]]+)//)
 		{
 			
@@ -5381,8 +5181,55 @@
 		
 
-
-		Parse::RecDescent::_trace(q{>>Matched production: [':' /textarea|text|password|file|checkbox|radio|select|hidden|static/]<<},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{type},
+		Parse::RecDescent::_trace(q{Trying terminal: [']']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{hint},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{']'})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\]//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+		push @item, $item{__STRING2__}=$&;
+		
+
+		Parse::RecDescent::_trace(q{Trying action},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{hint},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		
+
+		$_tok = ($_noactions) ? 0 : do { $item[2] };
+		unless (defined $_tok)
+		{
+			Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])})
+					if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
+					  . $_tok . q{])},
+					  Parse::RecDescent::_tracefirst($text))
+						if defined $::RD_TRACE;
+		push @item, $_tok;
+		$item{__ACTION1__}=$_tok;
+		
+
+
+		Parse::RecDescent::_trace(q{>>Matched production: ['[' /[^\\]]+/ ']']<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{hint},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5399,5 +5246,5 @@
 		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
 					 Parse::RecDescent::_tracefirst($_[1]),
-					 q{type},
+					 q{hint},
 					 $tracelevel)
 					if defined $::RD_TRACE;
@@ -5407,5 +5254,5 @@
 	{
 		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
-					  q{type},
+					  q{hint},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5418,10 +5265,10 @@
 		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
 					  $return . q{])}, "",
-					  q{type},
+					  q{hint},
 					  $tracelevel);
 		Parse::RecDescent::_trace(q{(consumed: [} .
 					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
 					  Parse::RecDescent::_tracefirst($text),
-					  , q{type},
+					  , q{hint},
 					  $tracelevel)
 	}
@@ -5431,5 +5278,5 @@
 
 # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
-sub Parse::RecDescent::Text::FormBuilder::Parser::title
+sub Parse::RecDescent::Text::FormBuilder::Parser::type
 {
 	my $thisparser = $_[0];
@@ -5437,9 +5284,9 @@
 	local $tracelevel = ($tracelevel||0)+1;
 	$ERRORS = 0;
-	my $thisrule = $thisparser->{"rules"}{"title"};
-	
-	Parse::RecDescent::_trace(q{Trying rule: [title]},
+	my $thisrule = $thisparser->{"rules"}{"type"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [type]},
 				  Parse::RecDescent::_tracefirst($_[1]),
-				  q{title},
+				  q{type},
 				  $tracelevel)
 					if defined $::RD_TRACE;
@@ -5473,7 +5320,7 @@
 	{
 		
-		Parse::RecDescent::_trace(q{Trying production: ['!title' /.*/]},
+		Parse::RecDescent::_trace(q{Trying production: [':' /textarea|text|password|file|checkbox|radio|select|hidden|static/]},
 					  Parse::RecDescent::_tracefirst($_[1]),
-					  q{title},
+					  q{type},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5481,12 +5328,12 @@
 		$text = $_[1];
 		my $_savetext;
-		@item = (q{title});
-		%item = (__RULE__ => q{title});
+		@item = (q{type});
+		%item = (__RULE__ => q{type});
 		my $repcount = 0;
 
 
-		Parse::RecDescent::_trace(q{Trying terminal: ['!title']},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{title},
+		Parse::RecDescent::_trace(q{Trying terminal: [':']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{type},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5495,5 +5342,5 @@
 		
 
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\!title//)
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\://)
 		{
 			
@@ -5511,13 +5358,13 @@
 		
 
-		Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
-					  q{title},
+		Parse::RecDescent::_trace(q{Trying terminal: [/textarea|text|password|file|checkbox|radio|select|hidden|static/]}, Parse::RecDescent::_tracefirst($text),
+					  q{type},
 					  $tracelevel)
 						if defined $::RD_TRACE;
 		$lastsep = "";
-		$expectation->is(q{/.*/})->at($text);
-		
-
-		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:.*)//)
+		$expectation->is(q{/textarea|text|password|file|checkbox|radio|select|hidden|static/})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:textarea|text|password|file|checkbox|radio|select|hidden|static)//)
 		{
 			
@@ -5536,31 +5383,8 @@
 		
 
-		Parse::RecDescent::_trace(q{Trying action},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{title},
-					  $tracelevel)
-						if defined $::RD_TRACE;
-		
-
-		$_tok = ($_noactions) ? 0 : do { warn "[Text::Formbuilder] Title redefined at input text line $thisline\n" if defined $title;
-    $title = $item[2] };
-		unless (defined $_tok)
-		{
-			Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])})
-					if defined $::RD_TRACE;
-			last;
-		}
-		Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
-					  . $_tok . q{])},
-					  Parse::RecDescent::_tracefirst($text))
-						if defined $::RD_TRACE;
-		push @item, $_tok;
-		$item{__ACTION1__}=$_tok;
-		
-
-
-		Parse::RecDescent::_trace(q{>>Matched production: ['!title' /.*/]<<},
-					  Parse::RecDescent::_tracefirst($text),
-					  q{title},
+
+		Parse::RecDescent::_trace(q{>>Matched production: [':' /textarea|text|password|file|checkbox|radio|select|hidden|static/]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{type},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5577,5 +5401,5 @@
 		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
 					 Parse::RecDescent::_tracefirst($_[1]),
-					 q{title},
+					 q{type},
 					 $tracelevel)
 					if defined $::RD_TRACE;
@@ -5585,5 +5409,5 @@
 	{
 		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
-					  q{title},
+					  q{type},
 					  $tracelevel)
 						if defined $::RD_TRACE;
@@ -5596,10 +5420,10 @@
 		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
 					  $return . q{])}, "",
-					  q{title},
+					  q{type},
 					  $tracelevel);
 		Parse::RecDescent::_trace(q{(consumed: [} .
 					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
 					  Parse::RecDescent::_tracefirst($text),
-					  , q{title},
+					  , q{type},
 					  $tracelevel)
 	}
@@ -5764,5 +5588,5 @@
 
 # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
-sub Parse::RecDescent::Text::FormBuilder::Parser::pattern_def
+sub Parse::RecDescent::Text::FormBuilder::Parser::title
 {
 	my $thisparser = $_[0];
@@ -5770,9 +5594,9 @@
 	local $tracelevel = ($tracelevel||0)+1;
 	$ERRORS = 0;
-	my $thisrule = $thisparser->{"rules"}{"pattern_def"};
-	
-	Parse::RecDescent::_trace(q{Trying rule: [pattern_def]},
+	my $thisrule = $thisparser->{"rules"}{"title"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [title]},
 				  Parse::RecDescent::_tracefirst($_[1]),
-				  q{pattern_def},
+				  q{title},
 				  $tracelevel)
 					if defined $::RD_TRACE;
@@ -5806,4 +5630,182 @@
 	{
 		
+		Parse::RecDescent::_trace(q{Trying production: ['!title' /.*/]},
+					  Parse::RecDescent::_tracefirst($_[1]),
+					  q{title},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		my $thisprod = $thisrule->{"prods"}[0];
+		$text = $_[1];
+		my $_savetext;
+		@item = (q{title});
+		%item = (__RULE__ => q{title});
+		my $repcount = 0;
+
+
+		Parse::RecDescent::_trace(q{Trying terminal: ['!title']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{title},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\!title//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+		push @item, $item{__STRING1__}=$&;
+		
+
+		Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text),
+					  q{title},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{/.*/})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:.*)//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(q{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+					if defined $::RD_TRACE;
+
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+					if defined $::RD_TRACE;
+		push @item, $item{__PATTERN1__}=$&;
+		
+
+		Parse::RecDescent::_trace(q{Trying action},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{title},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		
+
+		$_tok = ($_noactions) ? 0 : do { warn "[Text::Formbuilder] Title redefined at input text line $thisline\n" if defined $title;
+    $title = $item[2] };
+		unless (defined $_tok)
+		{
+			Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])})
+					if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
+					  . $_tok . q{])},
+					  Parse::RecDescent::_tracefirst($text))
+						if defined $::RD_TRACE;
+		push @item, $_tok;
+		$item{__ACTION1__}=$_tok;
+		
+
+
+		Parse::RecDescent::_trace(q{>>Matched production: ['!title' /.*/]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{title},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$_matched = 1;
+		last;
+	}
+
+
+        unless ( $_matched || defined($return) || defined($score) )
+	{
+		
+
+		$_[1] = $text;	# NOT SURE THIS IS NEEDED
+		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
+					 Parse::RecDescent::_tracefirst($_[1]),
+					 q{title},
+					 $tracelevel)
+					if defined $::RD_TRACE;
+		return undef;
+	}
+	if (!defined($return) && defined($score))
+	{
+		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
+					  q{title},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$return = $score_return;
+	}
+	splice @{$thisparser->{errors}}, $err_at;
+	$return = $item[$#item] unless defined $return;
+	if (defined $::RD_TRACE)
+	{
+		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
+					  $return . q{])}, "",
+					  q{title},
+					  $tracelevel);
+		Parse::RecDescent::_trace(q{(consumed: [} .
+					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
+					  Parse::RecDescent::_tracefirst($text),
+					  , q{title},
+					  $tracelevel)
+	}
+	$_[1] = $text;
+	return $return;
+}
+
+# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
+sub Parse::RecDescent::Text::FormBuilder::Parser::pattern_def
+{
+	my $thisparser = $_[0];
+	use vars q{$tracelevel};
+	local $tracelevel = ($tracelevel||0)+1;
+	$ERRORS = 0;
+	my $thisrule = $thisparser->{"rules"}{"pattern_def"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [pattern_def]},
+				  Parse::RecDescent::_tracefirst($_[1]),
+				  q{pattern_def},
+				  $tracelevel)
+					if defined $::RD_TRACE;
+
+	
+	my $err_at = @{$thisparser->{errors}};
+
+	my $score;
+	my $score_return;
+	my $_tok;
+	my $return = undef;
+	my $_matched=0;
+	my $commit=0;
+	my @item = ();
+	my %item = ();
+	my $repeating =  defined($_[2]) && $_[2];
+	my $_noactions = defined($_[3]) && $_[3];
+ 	my @arg =        defined $_[4] ? @{ &{$_[4]} } : ();
+	my %arg =        ($#arg & 01) ? @arg : (@arg, undef);
+	my $text;
+	my $lastsep="";
+	my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
+	$expectation->at($_[1]);
+	
+	my $thisline;
+	tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
+
+	
+
+	while (!$_matched && !$commit)
+	{
+		
 		Parse::RecDescent::_trace(q{Trying production: ['!pattern' pattern_name pattern]},
 					  Parse::RecDescent::_tracefirst($_[1]),
@@ -5969,4 +5971,515 @@
 					  Parse::RecDescent::_tracefirst($text),
 					  , q{pattern_def},
+					  $tracelevel)
+	}
+	$_[1] = $text;
+	return $return;
+}
+
+# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
+sub Parse::RecDescent::Text::FormBuilder::Parser::dynamic_list
+{
+	my $thisparser = $_[0];
+	use vars q{$tracelevel};
+	local $tracelevel = ($tracelevel||0)+1;
+	$ERRORS = 0;
+	my $thisrule = $thisparser->{"rules"}{"dynamic_list"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [dynamic_list]},
+				  Parse::RecDescent::_tracefirst($_[1]),
+				  q{dynamic_list},
+				  $tracelevel)
+					if defined $::RD_TRACE;
+
+	
+	my $err_at = @{$thisparser->{errors}};
+
+	my $score;
+	my $score_return;
+	my $_tok;
+	my $return = undef;
+	my $_matched=0;
+	my $commit=0;
+	my @item = ();
+	my %item = ();
+	my $repeating =  defined($_[2]) && $_[2];
+	my $_noactions = defined($_[3]) && $_[3];
+ 	my @arg =        defined $_[4] ? @{ &{$_[4]} } : ();
+	my %arg =        ($#arg & 01) ? @arg : (@arg, undef);
+	my $text;
+	my $lastsep="";
+	my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
+	$expectation->at($_[1]);
+	
+	my $thisline;
+	tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
+
+	
+
+	while (!$_matched && !$commit)
+	{
+		local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;
+		Parse::RecDescent::_trace(q{Trying production: ['&' <perl_codeblock>]},
+					  Parse::RecDescent::_tracefirst($_[1]),
+					  q{dynamic_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		my $thisprod = $thisrule->{"prods"}[0];
+		$text = $_[1];
+		my $_savetext;
+		@item = (q{dynamic_list});
+		%item = (__RULE__ => q{dynamic_list});
+		my $repcount = 0;
+
+
+		Parse::RecDescent::_trace(q{Trying terminal: ['&']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{dynamic_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\&//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+		push @item, $item{__STRING1__}=$&;
+		
+
+		
+
+		Parse::RecDescent::_trace(q{Trying directive: [<perl_codeblock>]},
+					Parse::RecDescent::_tracefirst($text),
+					  q{dynamic_list},
+					  $tracelevel)
+						if defined $::RD_TRACE; 
+		$_tok = do { Text::Balanced::extract_codeblock($text,undef,$skip,'{}');
+					 };
+		if (defined($_tok))
+		{
+			Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
+						. $_tok . q{])},
+						Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+		}
+		else
+		{
+			Parse::RecDescent::_trace(q{<<Didn't match directive>>},
+						Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+		}
+		
+		last unless defined $_tok;
+		push @item, $item{__DIRECTIVE1__}=$_tok;
+		
+
+		Parse::RecDescent::_trace(q{Trying action},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{dynamic_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		
+
+		$_tok = ($_noactions) ? 0 : do {
+	my @results = (eval $item[2]);
+	if (ref $results[0] eq 'HASH') {
+	    @options = @results;
+	} else {    
+	    @options = map { { $_ => $_ } } @results;
+	}
+    };
+		unless (defined $_tok)
+		{
+			Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])})
+					if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
+					  . $_tok . q{])},
+					  Parse::RecDescent::_tracefirst($text))
+						if defined $::RD_TRACE;
+		push @item, $_tok;
+		$item{__ACTION1__}=$_tok;
+		
+
+
+		Parse::RecDescent::_trace(q{>>Matched production: ['&' <perl_codeblock>]<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{dynamic_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$_matched = 1;
+		last;
+	}
+
+
+        unless ( $_matched || defined($return) || defined($score) )
+	{
+		
+
+		$_[1] = $text;	# NOT SURE THIS IS NEEDED
+		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
+					 Parse::RecDescent::_tracefirst($_[1]),
+					 q{dynamic_list},
+					 $tracelevel)
+					if defined $::RD_TRACE;
+		return undef;
+	}
+	if (!defined($return) && defined($score))
+	{
+		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
+					  q{dynamic_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$return = $score_return;
+	}
+	splice @{$thisparser->{errors}}, $err_at;
+	$return = $item[$#item] unless defined $return;
+	if (defined $::RD_TRACE)
+	{
+		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
+					  $return . q{])}, "",
+					  q{dynamic_list},
+					  $tracelevel);
+		Parse::RecDescent::_trace(q{(consumed: [} .
+					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
+					  Parse::RecDescent::_tracefirst($text),
+					  , q{dynamic_list},
+					  $tracelevel)
+	}
+	$_[1] = $text;
+	return $return;
+}
+
+# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
+sub Parse::RecDescent::Text::FormBuilder::Parser::static_list
+{
+	my $thisparser = $_[0];
+	use vars q{$tracelevel};
+	local $tracelevel = ($tracelevel||0)+1;
+	$ERRORS = 0;
+	my $thisrule = $thisparser->{"rules"}{"static_list"};
+	
+	Parse::RecDescent::_trace(q{Trying rule: [static_list]},
+				  Parse::RecDescent::_tracefirst($_[1]),
+				  q{static_list},
+				  $tracelevel)
+					if defined $::RD_TRACE;
+
+	
+	my $err_at = @{$thisparser->{errors}};
+
+	my $score;
+	my $score_return;
+	my $_tok;
+	my $return = undef;
+	my $_matched=0;
+	my $commit=0;
+	my @item = ();
+	my %item = ();
+	my $repeating =  defined($_[2]) && $_[2];
+	my $_noactions = defined($_[3]) && $_[3];
+ 	my @arg =        defined $_[4] ? @{ &{$_[4]} } : ();
+	my %arg =        ($#arg & 01) ? @arg : (@arg, undef);
+	my $text;
+	my $lastsep="";
+	my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
+	$expectation->at($_[1]);
+	
+	my $thisline;
+	tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
+
+	
+
+	while (!$_matched && !$commit)
+	{
+		
+		Parse::RecDescent::_trace(q{Trying production: ['\{' <leftop: option /,\\s*/ option> /,?/ '\}']},
+					  Parse::RecDescent::_tracefirst($_[1]),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		my $thisprod = $thisrule->{"prods"}[0];
+		$text = $_[1];
+		my $_savetext;
+		@item = (q{static_list});
+		%item = (__RULE__ => q{static_list});
+		my $repcount = 0;
+
+
+		Parse::RecDescent::_trace(q{Trying terminal: ['\{']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\{//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+		push @item, $item{__STRING1__}=$&;
+		
+
+		Parse::RecDescent::_trace(q{Trying operator: [<leftop: option /,\\s*/ option>]},
+				  Parse::RecDescent::_tracefirst($text),
+				  q{static_list},
+				  $tracelevel)
+					if defined $::RD_TRACE;
+		$expectation->is(q{<leftop: option /,\\s*/ option>})->at($text);
+
+		$_tok = undef;
+		OPLOOP: while (1)
+		{
+		  $repcount = 0;
+		  my  @item;
+		  
+		  # MATCH LEFTARG
+		  
+		Parse::RecDescent::_trace(q{Trying subrule: [option]},
+				  Parse::RecDescent::_tracefirst($text),
+				  q{static_list},
+				  $tracelevel)
+					if defined $::RD_TRACE;
+		if (1) { no strict qw{refs};
+		$expectation->is(q{option})->at($text);
+		unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
+		{
+			
+			Parse::RecDescent::_trace(q{<<Didn't match subrule: [option]>>},
+						  Parse::RecDescent::_tracefirst($text),
+						  q{static_list},
+						  $tracelevel)
+							if defined $::RD_TRACE;
+			$expectation->failed();
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
+					. $_tok . q{]},
+					  
+					  Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$item{q{option}} = $_tok;
+		push @item, $_tok;
+		
+		}
+
+
+		  $repcount++;
+
+		  my $savetext = $text;
+		  my $backtrack;
+
+		  # MATCH (OP RIGHTARG)(s)
+		  while ($repcount < 100000000)
+		  {
+			$backtrack = 0;
+			
+		Parse::RecDescent::_trace(q{Trying terminal: [/,\\s*/]}, Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{/,\\s*/})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:,\s*)//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(q{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+					if defined $::RD_TRACE;
+
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+					if defined $::RD_TRACE;
+		push @item, $item{__PATTERN1__}=$&;
+		
+
+			pop @item;
+			if (defined $1) {push @item, $item{'option(s)'}=$1; $backtrack=1;}
+			
+		Parse::RecDescent::_trace(q{Trying subrule: [option]},
+				  Parse::RecDescent::_tracefirst($text),
+				  q{static_list},
+				  $tracelevel)
+					if defined $::RD_TRACE;
+		if (1) { no strict qw{refs};
+		$expectation->is(q{option})->at($text);
+		unless (defined ($_tok = Parse::RecDescent::Text::FormBuilder::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
+		{
+			
+			Parse::RecDescent::_trace(q{<<Didn't match subrule: [option]>>},
+						  Parse::RecDescent::_tracefirst($text),
+						  q{static_list},
+						  $tracelevel)
+							if defined $::RD_TRACE;
+			$expectation->failed();
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched subrule: [option]<< (return value: [}
+					. $_tok . q{]},
+					  
+					  Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$item{q{option}} = $_tok;
+		push @item, $_tok;
+		
+		}
+
+			$savetext = $text;
+			$repcount++;
+		  }
+		  $text = $savetext;
+		  pop @item if $backtrack;
+
+		  unless (@item) { undef $_tok; last }
+		  $_tok = [ @item ];
+		  last;
+		} 
+
+		unless ($repcount>=1)
+		{
+			Parse::RecDescent::_trace(q{<<Didn't match operator: [<leftop: option /,\\s*/ option>]>>},
+						  Parse::RecDescent::_tracefirst($text),
+						  q{static_list},
+						  $tracelevel)
+							if defined $::RD_TRACE;
+			$expectation->failed();
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched operator: [<leftop: option /,\\s*/ option>]<< (return value: [}
+					  . qq{@{$_tok||[]}} . q{]},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+
+		push @item, $item{'option(s)'}=$_tok||[];
+
+
+		Parse::RecDescent::_trace(q{Trying terminal: [/,?/]}, Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{/,?/})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A(?:,?)//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(q{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+					if defined $::RD_TRACE;
+
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+					if defined $::RD_TRACE;
+		push @item, $item{__PATTERN2__}=$&;
+		
+
+		Parse::RecDescent::_trace(q{Trying terminal: ['\}']},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$lastsep = "";
+		$expectation->is(q{'\}'})->at($text);
+		
+
+		unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ s/\A\}//)
+		{
+			
+			$expectation->failed();
+			Parse::RecDescent::_trace(qq{<<Didn't match terminal>>},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+			last;
+		}
+		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
+						. $& . q{])},
+						  Parse::RecDescent::_tracefirst($text))
+							if defined $::RD_TRACE;
+		push @item, $item{__STRING2__}=$&;
+		
+
+
+		Parse::RecDescent::_trace(q{>>Matched production: ['\{' <leftop: option /,\\s*/ option> /,?/ '\}']<<},
+					  Parse::RecDescent::_tracefirst($text),
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$_matched = 1;
+		last;
+	}
+
+
+        unless ( $_matched || defined($return) || defined($score) )
+	{
+		
+
+		$_[1] = $text;	# NOT SURE THIS IS NEEDED
+		Parse::RecDescent::_trace(q{<<Didn't match rule>>},
+					 Parse::RecDescent::_tracefirst($_[1]),
+					 q{static_list},
+					 $tracelevel)
+					if defined $::RD_TRACE;
+		return undef;
+	}
+	if (!defined($return) && defined($score))
+	{
+		Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
+					  q{static_list},
+					  $tracelevel)
+						if defined $::RD_TRACE;
+		$return = $score_return;
+	}
+	splice @{$thisparser->{errors}}, $err_at;
+	$return = $item[$#item] unless defined $return;
+	if (defined $::RD_TRACE)
+	{
+		Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
+					  $return . q{])}, "",
+					  q{static_list},
+					  $tracelevel);
+		Parse::RecDescent::_trace(q{(consumed: [} .
+					  Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, 
+					  Parse::RecDescent::_tracefirst($text),
+					  , q{static_list},
 					  $tracelevel)
 	}
@@ -6011,5 +6524,5 @@
                                                                                                 'lookahead' => 0,
                                                                                                 'rdelim' => '/',
-                                                                                                'line' => 70,
+                                                                                                'line' => 82,
                                                                                                 'mod' => '',
                                                                                                 'ldelim' => '/'
@@ -6021,5 +6534,5 @@
                                                                                                 'lookahead' => 0,
                                                                                                 'rdelim' => '/',
-                                                                                                'line' => 70,
+                                                                                                'line' => 82,
                                                                                                 'mod' => '',
                                                                                                 'ldelim' => '/'
@@ -6031,5 +6544,5 @@
                                                                                                 'lookahead' => 0,
                                                                                                 'rdelim' => '/',
-                                                                                                'line' => 70,
+                                                                                                'line' => 82,
                                                                                                 'mod' => '',
                                                                                                 'ldelim' => '/'
@@ -6038,5 +6551,5 @@
                                                                                                 'hashname' => '__ACTION1__',
                                                                                                 'lookahead' => 0,
-                                                                                                'line' => 71,
+                                                                                                'line' => 83,
                                                                                                 'code' => '{ $rows = $item[1]; $cols = $item[3] }'
                                                                                               }, 'Parse::RecDescent::Action' )
@@ -6047,5 +6560,5 @@
                                                     'name' => 'row_col',
                                                     'vars' => '',
-                                                    'line' => 70
+                                                    'line' => 82
                                                   }, 'Parse::RecDescent::Rule' ),
                               'options' => bless( {
@@ -6072,5 +6585,5 @@
                                                                                                 'description' => '\'\\{\'',
                                                                                                 'lookahead' => 0,
-                                                                                                'line' => 83
+                                                                                                'line' => 95
                                                                                               }, 'Parse::RecDescent::Literal' ),
                                                                                        bless( {
@@ -6085,5 +6598,5 @@
                                                                                                                       'argcode' => undef,
                                                                                                                       'lookahead' => 0,
-                                                                                                                      'line' => 83
+                                                                                                                      'line' => 95
                                                                                                                     }, 'Parse::RecDescent::Subrule' ),
                                                                                                 'rightarg' => bless( {
@@ -6093,5 +6606,5 @@
                                                                                                                        'argcode' => undef,
                                                                                                                        'lookahead' => 0,
-                                                                                                                       'line' => 83
+                                                                                                                       'line' => 95
                                                                                                                      }, 'Parse::RecDescent::Subrule' ),
                                                                                                 'hashname' => '__DIRECTIVE1__',
@@ -6103,5 +6616,5 @@
                                                                                                                  'lookahead' => 0,
                                                                                                                  'rdelim' => '/',
-                                                                                                                 'line' => 83,
+                                                                                                                 'line' => 95,
                                                                                                                  'mod' => '',
                                                                                                                  'ldelim' => '/'
@@ -6113,5 +6626,5 @@
                                                                                                 'description' => '\'\\}\'',
                                                                                                 'lookahead' => 0,
-                                                                                                'line' => 83
+                                                                                                'line' => 95
                                                                                               }, 'Parse::RecDescent::Literal' )
                                                                                      ],
@@ -6121,11 +6634,11 @@
                                                     'name' => 'options',
                                                     'vars' => '',
-                                                    'line' => 83
+                                                    'line' => 95
                                                   }, 'Parse::RecDescent::Rule' ),
                               'list_def' => bless( {
-                                                     'impcount' => 0,
+                                                     'impcount' => 1,
                                                      'calls' => [
                                                                   'list_name',
-                                                                  'option'
+                                                                  '_alternation_1_of_production_1_of_rule_list_def'
                                                                 ],
                                                      'changed' => 0,
@@ -6134,11 +6647,10 @@
                                                                   bless( {
                                                                            'number' => '0',
-                                                                           'strcount' => 3,
-                                                                           'dircount' => 1,
+                                                                           'strcount' => 1,
+                                                                           'dircount' => 0,
                                                                            'uncommit' => undef,
                                                                            'error' => undef,
-                                                                           'patcount' => 2,
+                                                                           'patcount' => 0,
                                                                            'actcount' => 1,
-                                                                           'op' => [],
                                                                            'items' => [
                                                                                         bless( {
@@ -6158,61 +6670,11 @@
                                                                                                }, 'Parse::RecDescent::Subrule' ),
                                                                                         bless( {
-                                                                                                 'pattern' => '{',
-                                                                                                 'hashname' => '__STRING2__',
-                                                                                                 'description' => '\'\\{\'',
+                                                                                                 'subrule' => '_alternation_1_of_production_1_of_rule_list_def',
+                                                                                                 'matchrule' => 0,
+                                                                                                 'implicit' => 'static_list, or dynamic_list',
+                                                                                                 'argcode' => undef,
                                                                                                  'lookahead' => 0,
                                                                                                  'line' => 14
-                                                                                               }, 'Parse::RecDescent::Literal' ),
-                                                                                        bless( {
-                                                                                                 'expected' => '<leftop: option /,\\\\s*/ option>',
-                                                                                                 'min' => 1,
-                                                                                                 'name' => '\'option(s)\'',
-                                                                                                 'max' => 100000000,
-                                                                                                 'leftarg' => bless( {
-                                                                                                                       'subrule' => 'option',
-                                                                                                                       'matchrule' => 0,
-                                                                                                                       'implicit' => undef,
-                                                                                                                       'argcode' => undef,
-                                                                                                                       'lookahead' => 0,
-                                                                                                                       'line' => 14
-                                                                                                                     }, 'Parse::RecDescent::Subrule' ),
-                                                                                                 'rightarg' => bless( {
-                                                                                                                        'subrule' => 'option',
-                                                                                                                        'matchrule' => 0,
-                                                                                                                        'implicit' => undef,
-                                                                                                                        'argcode' => undef,
-                                                                                                                        'lookahead' => 0,
-                                                                                                                        'line' => 14
-                                                                                                                      }, 'Parse::RecDescent::Subrule' ),
-                                                                                                 'hashname' => '__DIRECTIVE1__',
-                                                                                                 'type' => 'leftop',
-                                                                                                 'op' => bless( {
-                                                                                                                  'pattern' => ',\\s*',
-                                                                                                                  'hashname' => '__PATTERN1__',
-                                                                                                                  'description' => '/,\\\\s*/',
-                                                                                                                  'lookahead' => 0,
-                                                                                                                  'rdelim' => '/',
-                                                                                                                  'line' => 14,
-                                                                                                                  'mod' => '',
-                                                                                                                  'ldelim' => '/'
-                                                                                                                }, 'Parse::RecDescent::Token' )
-                                                                                               }, 'Parse::RecDescent::Operator' ),
-                                                                                        bless( {
-                                                                                                 'pattern' => ',?',
-                                                                                                 'hashname' => '__PATTERN2__',
-                                                                                                 'description' => '/,?/',
-                                                                                                 'lookahead' => 0,
-                                                                                                 'rdelim' => '/',
-                                                                                                 'line' => 14,
-                                                                                                 'mod' => '',
-                                                                                                 'ldelim' => '/'
-                                                                                               }, 'Parse::RecDescent::Token' ),
-                                                                                        bless( {
-                                                                                                 'pattern' => '}',
-                                                                                                 'hashname' => '__STRING3__',
-                                                                                                 'description' => '\'\\}\'',
-                                                                                                 'lookahead' => 0,
-                                                                                                 'line' => 14
-                                                                                               }, 'Parse::RecDescent::Literal' ),
+                                                                                               }, 'Parse::RecDescent::Subrule' ),
                                                                                         bless( {
                                                                                                  'hashname' => '__ACTION1__',
@@ -6251,5 +6713,5 @@
                                                                                                    'description' => '\'[\'',
                                                                                                    'lookahead' => 0,
-                                                                                                   'line' => 65
+                                                                                                   'line' => 77
                                                                                                  }, 'Parse::RecDescent::Literal' ),
                                                                                           bless( {
@@ -6259,5 +6721,5 @@
                                                                                                    'argcode' => undef,
                                                                                                    'lookahead' => 0,
-                                                                                                   'line' => 65
+                                                                                                   'line' => 77
                                                                                                  }, 'Parse::RecDescent::Subrule' ),
                                                                                           bless( {
@@ -6266,5 +6728,5 @@
                                                                                                    'description' => '\']\'',
                                                                                                    'lookahead' => 0,
-                                                                                                   'line' => 65
+                                                                                                   'line' => 77
                                                                                                  }, 'Parse::RecDescent::Literal' )
                                                                                         ],
@@ -6274,5 +6736,5 @@
                                                        'name' => 'field_size',
                                                        'vars' => '',
-                                                       'line' => 65
+                                                       'line' => 77
                                                      }, 'Parse::RecDescent::Rule' ),
                               'author' => bless( {
@@ -6296,5 +6758,5 @@
                                                                                                'description' => '\'!author\'',
                                                                                                'lookahead' => 0,
-                                                                                               'line' => 25
+                                                                                               'line' => 37
                                                                                              }, 'Parse::RecDescent::Literal' ),
                                                                                       bless( {
@@ -6304,5 +6766,5 @@
                                                                                                'lookahead' => 0,
                                                                                                'rdelim' => '/',
-                                                                                               'line' => 25,
+                                                                                               'line' => 37,
                                                                                                'mod' => '',
                                                                                                'ldelim' => '/'
@@ -6311,5 +6773,5 @@
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'lookahead' => 0,
-                                                                                               'line' => 26,
+                                                                                               'line' => 38,
                                                                                                'code' => '{ $author = $item[2] }'
                                                                                              }, 'Parse::RecDescent::Action' )
@@ -6320,5 +6782,5 @@
                                                    'name' => 'author',
                                                    'vars' => '',
-                                                   'line' => 25
+                                                   'line' => 37
                                                  }, 'Parse::RecDescent::Rule' ),
                               'list_name' => bless( {
@@ -6343,5 +6805,5 @@
                                                                                                   'lookahead' => 0,
                                                                                                   'rdelim' => '/',
-                                                                                                  'line' => 17,
+                                                                                                  'line' => 29,
                                                                                                   'mod' => '',
                                                                                                   'ldelim' => '/'
@@ -6353,5 +6815,5 @@
                                                       'name' => 'list_name',
                                                       'vars' => '',
-                                                      'line' => 17
+                                                      'line' => 29
                                                     }, 'Parse::RecDescent::Rule' ),
                               'size' => bless( {
@@ -6376,5 +6838,5 @@
                                                                                              'lookahead' => 0,
                                                                                              'rdelim' => '/',
-                                                                                             'line' => 67,
+                                                                                             'line' => 79,
                                                                                              'mod' => '',
                                                                                              'ldelim' => '/'
@@ -6383,5 +6845,5 @@
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 68,
+                                                                                             'line' => 80,
                                                                                              'code' => '{ $size = $item[1] }'
                                                                                            }, 'Parse::RecDescent::Action' )
@@ -6392,5 +6854,5 @@
                                                  'name' => 'size',
                                                  'vars' => '',
-                                                 'line' => 67
+                                                 'line' => 79
                                                }, 'Parse::RecDescent::Rule' ),
                               'identifier' => bless( {
@@ -6415,5 +6877,5 @@
                                                                                                    'lookahead' => 0,
                                                                                                    'rdelim' => '/',
-                                                                                                   'line' => 99,
+                                                                                                   'line' => 111,
                                                                                                    'mod' => '',
                                                                                                    'ldelim' => '/'
@@ -6425,5 +6887,5 @@
                                                        'name' => 'identifier',
                                                        'vars' => '',
-                                                       'line' => 99
+                                                       'line' => 111
                                                      }, 'Parse::RecDescent::Rule' ),
                               'blank' => bless( {
@@ -6447,5 +6909,5 @@
                                                   'name' => 'blank',
                                                   'vars' => '',
-                                                  'line' => 97
+                                                  'line' => 109
                                                 }, 'Parse::RecDescent::Rule' ),
                               'option' => bless( {
@@ -6473,5 +6935,5 @@
                                                                                                'argcode' => undef,
                                                                                                'lookahead' => 0,
-                                                                                               'line' => 87
+                                                                                               'line' => 99
                                                                                              }, 'Parse::RecDescent::Subrule' ),
                                                                                       bless( {
@@ -6484,10 +6946,10 @@
                                                                                                'repspec' => '?',
                                                                                                'lookahead' => 0,
-                                                                                               'line' => 87
+                                                                                               'line' => 99
                                                                                              }, 'Parse::RecDescent::Repetition' ),
                                                                                       bless( {
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'lookahead' => 0,
-                                                                                               'line' => 88,
+                                                                                               'line' => 100,
                                                                                                'code' => '{ push @options, { $item{value} => $item{\'display_text(?)\'}[0] } }'
                                                                                              }, 'Parse::RecDescent::Action' )
@@ -6498,5 +6960,5 @@
                                                    'name' => 'option',
                                                    'vars' => '',
-                                                   'line' => 87
+                                                   'line' => 99
                                                  }, 'Parse::RecDescent::Rule' ),
                               'pattern_name' => bless( {
@@ -6521,5 +6983,5 @@
                                                                                                      'lookahead' => 0,
                                                                                                      'rdelim' => '/',
-                                                                                                     'line' => 31,
+                                                                                                     'line' => 43,
                                                                                                      'mod' => '',
                                                                                                      'ldelim' => '/'
@@ -6531,5 +6993,5 @@
                                                          'name' => 'pattern_name',
                                                          'vars' => '',
-                                                         'line' => 31
+                                                         'line' => 43
                                                        }, 'Parse::RecDescent::Rule' ),
                               'validate' => bless( {
@@ -6555,5 +7017,5 @@
                                                                                                  'description' => '\'//\'',
                                                                                                  'lookahead' => 0,
-                                                                                                 'line' => 94
+                                                                                                 'line' => 106
                                                                                                }, 'Parse::RecDescent::Literal' ),
                                                                                         bless( {
@@ -6563,5 +7025,5 @@
                                                                                                  'argcode' => undef,
                                                                                                  'lookahead' => 0,
-                                                                                                 'line' => 94
+                                                                                                 'line' => 106
                                                                                                }, 'Parse::RecDescent::Subrule' )
                                                                                       ],
@@ -6571,5 +7033,5 @@
                                                      'name' => 'validate',
                                                      'vars' => '',
-                                                     'line' => 94
+                                                     'line' => 106
                                                    }, 'Parse::RecDescent::Rule' ),
                               'list_var' => bless( {
@@ -6594,5 +7056,5 @@
                                                                                                  'lookahead' => 0,
                                                                                                  'rdelim' => '/',
-                                                                                                 'line' => 85,
+                                                                                                 'line' => 97,
                                                                                                  'mod' => '',
                                                                                                  'ldelim' => '/'
@@ -6601,5 +7063,5 @@
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'lookahead' => 0,
-                                                                                                 'line' => 85,
+                                                                                                 'line' => 97,
                                                                                                  'code' => '{ $list_var = $item[1] }'
                                                                                                }, 'Parse::RecDescent::Action' )
@@ -6610,5 +7072,5 @@
                                                      'name' => 'list_var',
                                                      'vars' => '',
-                                                     'line' => 85
+                                                     'line' => 97
                                                    }, 'Parse::RecDescent::Rule' ),
                               'field' => bless( {
@@ -6642,5 +7104,5 @@
                                                                                               'argcode' => undef,
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Subrule' ),
                                                                                      bless( {
@@ -6653,5 +7115,5 @@
                                                                                               'repspec' => '?',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Repetition' ),
                                                                                      bless( {
@@ -6664,5 +7126,5 @@
                                                                                               'repspec' => '?',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Repetition' ),
                                                                                      bless( {
@@ -6675,5 +7137,5 @@
                                                                                               'repspec' => '?',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Repetition' ),
                                                                                      bless( {
@@ -6686,5 +7148,5 @@
                                                                                               'repspec' => '?',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Repetition' ),
                                                                                      bless( {
@@ -6697,5 +7159,5 @@
                                                                                               'repspec' => '?',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Repetition' ),
                                                                                      bless( {
@@ -6708,5 +7170,5 @@
                                                                                               'repspec' => '?',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Repetition' ),
                                                                                      bless( {
@@ -6719,10 +7181,10 @@
                                                                                               'repspec' => '?',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 34
+                                                                                              'line' => 46
                                                                                             }, 'Parse::RecDescent::Repetition' ),
                                                                                      bless( {
                                                                                               'hashname' => '__ACTION1__',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 35,
+                                                                                              'line' => 47,
                                                                                               'code' => '{
 	my $field = {
@@ -6759,5 +7221,5 @@
                                                   'name' => 'field',
                                                   'vars' => '',
-                                                  'line' => 34
+                                                  'line' => 46
                                                 }, 'Parse::RecDescent::Rule' ),
                               '_alternation_1_of_production_1_of_rule_form_spec' => bless( {
@@ -6785,5 +7247,5 @@
                                                                                                                                          'argcode' => undef,
                                                                                                                                          'lookahead' => 0,
-                                                                                                                                         'line' => 100
+                                                                                                                                         'line' => 112
                                                                                                                                        }, 'Parse::RecDescent::Subrule' )
                                                                                                                               ],
@@ -6805,13 +7267,13 @@
                                                                                                                                          'argcode' => undef,
                                                                                                                                          'lookahead' => 0,
-                                                                                                                                         'line' => 100
+                                                                                                                                         'line' => 112
                                                                                                                                        }, 'Parse::RecDescent::Subrule' )
                                                                                                                               ],
-                                                                                                                   'line' => 100
+                                                                                                                   'line' => 112
                                                                                                                  }, 'Parse::RecDescent::Production' )
                                                                                                         ],
                                                                                              'name' => '_alternation_1_of_production_1_of_rule_form_spec',
                                                                                              'vars' => '',
-                                                                                             'line' => 100
+                                                                                             'line' => 112
                                                                                            }, 'Parse::RecDescent::Rule' ),
                               'line' => bless( {
@@ -6836,5 +7298,5 @@
                                                                                              'name' => '<skip:\'[ \\t]*\'>',
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 19,
+                                                                                             'line' => 31,
                                                                                              'code' => 'my $oldskip = $skip; $skip=\'[ \\t]*\'; $oldskip'
                                                                                            }, 'Parse::RecDescent::Directive' ),
@@ -6845,5 +7307,5 @@
                                                                                              'argcode' => undef,
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 19
+                                                                                             'line' => 31
                                                                                            }, 'Parse::RecDescent::Subrule' ),
                                                                                     bless( {
@@ -6852,5 +7314,5 @@
                                                                                              'description' => '\'\\\\n\'',
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 19
+                                                                                             'line' => 31
                                                                                            }, 'Parse::RecDescent::InterpLit' )
                                                                                   ],
@@ -6860,5 +7322,5 @@
                                                  'name' => 'line',
                                                  'vars' => '',
-                                                 'line' => 19
+                                                 'line' => 31
                                                }, 'Parse::RecDescent::Rule' ),
                               'option_list' => bless( {
@@ -6886,5 +7348,5 @@
                                                                                                     'argcode' => undef,
                                                                                                     'lookahead' => 0,
-                                                                                                    'line' => 81
+                                                                                                    'line' => 93
                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                          ],
@@ -6906,13 +7368,13 @@
                                                                                                     'argcode' => undef,
                                                                                                     'lookahead' => 0,
-                                                                                                    'line' => 81
+                                                                                                    'line' => 93
                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                          ],
-                                                                              'line' => 81
+                                                                              'line' => 93
                                                                             }, 'Parse::RecDescent::Production' )
                                                                    ],
                                                         'name' => 'option_list',
                                                         'vars' => '',
-                                                        'line' => 81
+                                                        'line' => 93
                                                       }, 'Parse::RecDescent::Rule' ),
                               '_alternation_1_of_production_1_of_rule_line' => bless( {
@@ -6944,5 +7406,5 @@
                                                                                                                                     'argcode' => undef,
                                                                                                                                     'lookahead' => 0,
-                                                                                                                                    'line' => 100
+                                                                                                                                    'line' => 112
                                                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                                                          ],
@@ -6964,8 +7426,8 @@
                                                                                                                                     'argcode' => undef,
                                                                                                                                     'lookahead' => 0,
-                                                                                                                                    'line' => 100
+                                                                                                                                    'line' => 112
                                                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                                                          ],
-                                                                                                              'line' => 100
+                                                                                                              'line' => 112
                                                                                                             }, 'Parse::RecDescent::Production' ),
                                                                                                      bless( {
@@ -6984,8 +7446,8 @@
                                                                                                                                     'argcode' => undef,
                                                                                                                                     'lookahead' => 0,
-                                                                                                                                    'line' => 100
+                                                                                                                                    'line' => 112
                                                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                                                          ],
-                                                                                                              'line' => 100
+                                                                                                              'line' => 112
                                                                                                             }, 'Parse::RecDescent::Production' ),
                                                                                                      bless( {
@@ -7004,8 +7466,8 @@
                                                                                                                                     'argcode' => undef,
                                                                                                                                     'lookahead' => 0,
-                                                                                                                                    'line' => 100
+                                                                                                                                    'line' => 112
                                                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                                                          ],
-                                                                                                              'line' => 100
+                                                                                                              'line' => 112
                                                                                                             }, 'Parse::RecDescent::Production' ),
                                                                                                      bless( {
@@ -7024,8 +7486,8 @@
                                                                                                                                     'argcode' => undef,
                                                                                                                                     'lookahead' => 0,
-                                                                                                                                    'line' => 100
+                                                                                                                                    'line' => 112
                                                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                                                          ],
-                                                                                                              'line' => 100
+                                                                                                              'line' => 112
                                                                                                             }, 'Parse::RecDescent::Production' ),
                                                                                                      bless( {
@@ -7044,13 +7506,13 @@
                                                                                                                                     'argcode' => undef,
                                                                                                                                     'lookahead' => 0,
-                                                                                                                                    'line' => 100
+                                                                                                                                    'line' => 112
                                                                                                                                   }, 'Parse::RecDescent::Subrule' )
                                                                                                                          ],
-                                                                                                              'line' => 100
+                                                                                                              'line' => 112
                                                                                                             }, 'Parse::RecDescent::Production' )
                                                                                                    ],
                                                                                         'name' => '_alternation_1_of_production_1_of_rule_line',
                                                                                         'vars' => '',
-                                                                                        'line' => 100
+                                                                                        'line' => 112
                                                                                       }, 'Parse::RecDescent::Rule' ),
                               'value' => bless( {
@@ -7077,5 +7539,5 @@
                                                                                               'argcode' => undef,
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 90
+                                                                                              'line' => 102
                                                                                             }, 'Parse::RecDescent::Subrule' )
                                                                                    ],
@@ -7085,5 +7547,5 @@
                                                   'name' => 'value',
                                                   'vars' => '',
-                                                  'line' => 90
+                                                  'line' => 102
                                                 }, 'Parse::RecDescent::Rule' ),
                               '_alternation_1_of_production_1_of_rule_field_size' => bless( {
@@ -7111,5 +7573,5 @@
                                                                                                                                           'argcode' => undef,
                                                                                                                                           'lookahead' => 0,
-                                                                                                                                          'line' => 100
+                                                                                                                                          'line' => 112
                                                                                                                                         }, 'Parse::RecDescent::Subrule' )
                                                                                                                                ],
@@ -7131,13 +7593,13 @@
                                                                                                                                           'argcode' => undef,
                                                                                                                                           'lookahead' => 0,
-                                                                                                                                          'line' => 100
+                                                                                                                                          'line' => 112
                                                                                                                                         }, 'Parse::RecDescent::Subrule' )
                                                                                                                                ],
-                                                                                                                    'line' => 100
+                                                                                                                    'line' => 112
                                                                                                                   }, 'Parse::RecDescent::Production' )
                                                                                                          ],
                                                                                               'name' => '_alternation_1_of_production_1_of_rule_field_size',
                                                                                               'vars' => '',
-                                                                                              'line' => 100
+                                                                                              'line' => 112
                                                                                             }, 'Parse::RecDescent::Rule' ),
                               'name' => bless( {
@@ -7164,5 +7626,5 @@
                                                                                              'argcode' => undef,
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 63
+                                                                                             'line' => 75
                                                                                            }, 'Parse::RecDescent::Subrule' )
                                                                                   ],
@@ -7172,5 +7634,5 @@
                                                  'name' => 'name',
                                                  'vars' => '',
-                                                 'line' => 63
+                                                 'line' => 75
                                                }, 'Parse::RecDescent::Rule' ),
                               'display_text' => bless( {
@@ -7194,5 +7656,5 @@
                                                                                                      'description' => '\'[\'',
                                                                                                      'lookahead' => 0,
-                                                                                                     'line' => 92
+                                                                                                     'line' => 104
                                                                                                    }, 'Parse::RecDescent::Literal' ),
                                                                                             bless( {
@@ -7202,5 +7664,5 @@
                                                                                                      'lookahead' => 0,
                                                                                                      'rdelim' => '/',
-                                                                                                     'line' => 92,
+                                                                                                     'line' => 104,
                                                                                                      'mod' => 'i',
                                                                                                      'ldelim' => '/'
@@ -7211,10 +7673,10 @@
                                                                                                      'description' => '\']\'',
                                                                                                      'lookahead' => 0,
-                                                                                                     'line' => 92
+                                                                                                     'line' => 104
                                                                                                    }, 'Parse::RecDescent::Literal' ),
                                                                                             bless( {
                                                                                                      'hashname' => '__ACTION1__',
                                                                                                      'lookahead' => 0,
-                                                                                                     'line' => 92,
+                                                                                                     'line' => 104,
                                                                                                      'code' => '{ $item[2] }'
                                                                                                    }, 'Parse::RecDescent::Action' )
@@ -7225,5 +7687,5 @@
                                                          'name' => 'display_text',
                                                          'vars' => '',
-                                                         'line' => 92
+                                                         'line' => 104
                                                        }, 'Parse::RecDescent::Rule' ),
                               'default' => bless( {
@@ -7247,5 +7709,5 @@
                                                                                                 'description' => '\'=\'',
                                                                                                 'lookahead' => 0,
-                                                                                                'line' => 79
+                                                                                                'line' => 91
                                                                                               }, 'Parse::RecDescent::Literal' ),
                                                                                        bless( {
@@ -7255,5 +7717,5 @@
                                                                                                 'lookahead' => 0,
                                                                                                 'rdelim' => '/',
-                                                                                                'line' => 79,
+                                                                                                'line' => 91,
                                                                                                 'mod' => '',
                                                                                                 'ldelim' => '/'
@@ -7265,6 +7727,60 @@
                                                     'name' => 'default',
                                                     'vars' => '',
-                                                    'line' => 79
+                                                    'line' => 91
                                                   }, 'Parse::RecDescent::Rule' ),
+                              '_alternation_1_of_production_1_of_rule_list_def' => bless( {
+                                                                                            'impcount' => 0,
+                                                                                            'calls' => [
+                                                                                                         'static_list',
+                                                                                                         'dynamic_list'
+                                                                                                       ],
+                                                                                            'changed' => 0,
+                                                                                            'opcount' => 0,
+                                                                                            'prods' => [
+                                                                                                         bless( {
+                                                                                                                  'number' => '0',
+                                                                                                                  'strcount' => 0,
+                                                                                                                  'dircount' => 0,
+                                                                                                                  'uncommit' => undef,
+                                                                                                                  'error' => undef,
+                                                                                                                  'patcount' => 0,
+                                                                                                                  'actcount' => 0,
+                                                                                                                  'items' => [
+                                                                                                                               bless( {
+                                                                                                                                        'subrule' => 'static_list',
+                                                                                                                                        'matchrule' => 0,
+                                                                                                                                        'implicit' => undef,
+                                                                                                                                        'argcode' => undef,
+                                                                                                                                        'lookahead' => 0,
+                                                                                                                                        'line' => 112
+                                                                                                                                      }, 'Parse::RecDescent::Subrule' )
+                                                                                                                             ],
+                                                                                                                  'line' => undef
+                                                                                                                }, 'Parse::RecDescent::Production' ),
+                                                                                                         bless( {
+                                                                                                                  'number' => '1',
+                                                                                                                  'strcount' => 0,
+                                                                                                                  'dircount' => 0,
+                                                                                                                  'uncommit' => undef,
+                                                                                                                  'error' => undef,
+                                                                                                                  'patcount' => 0,
+                                                                                                                  'actcount' => 0,
+                                                                                                                  'items' => [
+                                                                                                                               bless( {
+                                                                                                                                        'subrule' => 'dynamic_list',
+                                                                                                                                        'matchrule' => 0,
+                                                                                                                                        'implicit' => undef,
+                                                                                                                                        'argcode' => undef,
+                                                                                                                                        'lookahead' => 0,
+                                                                                                                                        'line' => 112
+                                                                                                                                      }, 'Parse::RecDescent::Subrule' )
+                                                                                                                             ],
+                                                                                                                  'line' => 112
+                                                                                                                }, 'Parse::RecDescent::Production' )
+                                                                                                       ],
+                                                                                            'name' => '_alternation_1_of_production_1_of_rule_list_def',
+                                                                                            'vars' => '',
+                                                                                            'line' => 112
+                                                                                          }, 'Parse::RecDescent::Rule' ),
                               'form_spec' => bless( {
                                                       'impcount' => 1,
@@ -7338,5 +7854,5 @@
                                                                                                 'lookahead' => 0,
                                                                                                 'rdelim' => '/',
-                                                                                                'line' => 32,
+                                                                                                'line' => 44,
                                                                                                 'mod' => '',
                                                                                                 'ldelim' => '/'
@@ -7348,5 +7864,5 @@
                                                     'name' => 'pattern',
                                                     'vars' => '',
-                                                    'line' => 32
+                                                    'line' => 44
                                                   }, 'Parse::RecDescent::Rule' ),
                               'comment' => bless( {
@@ -7370,5 +7886,5 @@
                                                                                                 'description' => '\'#\'',
                                                                                                 'lookahead' => 0,
-                                                                                                'line' => 96
+                                                                                                'line' => 108
                                                                                               }, 'Parse::RecDescent::Literal' ),
                                                                                        bless( {
@@ -7378,5 +7894,5 @@
                                                                                                 'lookahead' => 0,
                                                                                                 'rdelim' => '/',
-                                                                                                'line' => 96,
+                                                                                                'line' => 108,
                                                                                                 'mod' => '',
                                                                                                 'ldelim' => '/'
@@ -7388,5 +7904,5 @@
                                                     'name' => 'comment',
                                                     'vars' => '',
-                                                    'line' => 96
+                                                    'line' => 108
                                                   }, 'Parse::RecDescent::Rule' ),
                               'hint' => bless( {
@@ -7410,5 +7926,5 @@
                                                                                              'description' => '\'[\'',
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 75
+                                                                                             'line' => 87
                                                                                            }, 'Parse::RecDescent::Literal' ),
                                                                                     bless( {
@@ -7418,5 +7934,5 @@
                                                                                              'lookahead' => 0,
                                                                                              'rdelim' => '/',
-                                                                                             'line' => 75,
+                                                                                             'line' => 87,
                                                                                              'mod' => '',
                                                                                              'ldelim' => '/'
@@ -7427,10 +7943,10 @@
                                                                                              'description' => '\']\'',
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 75
+                                                                                             'line' => 87
                                                                                            }, 'Parse::RecDescent::Literal' ),
                                                                                     bless( {
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 75,
+                                                                                             'line' => 87,
                                                                                              'code' => '{ $item[2] }'
                                                                                            }, 'Parse::RecDescent::Action' )
@@ -7441,5 +7957,5 @@
                                                  'name' => 'hint',
                                                  'vars' => '',
-                                                 'line' => 75
+                                                 'line' => 87
                                                }, 'Parse::RecDescent::Rule' ),
                               'type' => bless( {
@@ -7463,5 +7979,5 @@
                                                                                              'description' => '\':\'',
                                                                                              'lookahead' => 0,
-                                                                                             'line' => 77
+                                                                                             'line' => 89
                                                                                            }, 'Parse::RecDescent::Literal' ),
                                                                                     bless( {
@@ -7471,5 +7987,5 @@
                                                                                              'lookahead' => 0,
                                                                                              'rdelim' => '/',
-                                                                                             'line' => 77,
+                                                                                             'line' => 89,
                                                                                              'mod' => '',
                                                                                              'ldelim' => '/'
@@ -7481,6 +7997,46 @@
                                                  'name' => 'type',
                                                  'vars' => '',
-                                                 'line' => 77
+                                                 'line' => 89
                                                }, 'Parse::RecDescent::Rule' ),
+                              'label' => bless( {
+                                                  'impcount' => 0,
+                                                  'calls' => [],
+                                                  'changed' => 0,
+                                                  'opcount' => 0,
+                                                  'prods' => [
+                                                               bless( {
+                                                                        'number' => '0',
+                                                                        'strcount' => 1,
+                                                                        'dircount' => 0,
+                                                                        'uncommit' => undef,
+                                                                        'error' => undef,
+                                                                        'patcount' => 1,
+                                                                        'actcount' => 0,
+                                                                        'items' => [
+                                                                                     bless( {
+                                                                                              'pattern' => '|',
+                                                                                              'hashname' => '__STRING1__',
+                                                                                              'description' => '\'|\'',
+                                                                                              'lookahead' => 0,
+                                                                                              'line' => 85
+                                                                                            }, 'Parse::RecDescent::Literal' ),
+                                                                                     bless( {
+                                                                                              'pattern' => '[^:\\[\\{\\/]+',
+                                                                                              'hashname' => '__PATTERN1__',
+                                                                                              'description' => '/[^:\\\\[\\\\\\{\\\\/]+/i',
+                                                                                              'lookahead' => 0,
+                                                                                              'rdelim' => '/',
+                                                                                              'line' => 85,
+                                                                                              'mod' => 'i',
+                                                                                              'ldelim' => '/'
+                                                                                            }, 'Parse::RecDescent::Token' )
+                                                                                   ],
+                                                                        'line' => undef
+                                                                      }, 'Parse::RecDescent::Production' )
+                                                             ],
+                                                  'name' => 'label',
+                                                  'vars' => '',
+                                                  'line' => 85
+                                                }, 'Parse::RecDescent::Rule' ),
                               'title' => bless( {
                                                   'impcount' => 0,
@@ -7503,5 +8059,5 @@
                                                                                               'description' => '\'!title\'',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 21
+                                                                                              'line' => 33
                                                                                             }, 'Parse::RecDescent::Literal' ),
                                                                                      bless( {
@@ -7511,5 +8067,5 @@
                                                                                               'lookahead' => 0,
                                                                                               'rdelim' => '/',
-                                                                                              'line' => 21,
+                                                                                              'line' => 33,
                                                                                               'mod' => '',
                                                                                               'ldelim' => '/'
@@ -7518,5 +8074,5 @@
                                                                                               'hashname' => '__ACTION1__',
                                                                                               'lookahead' => 0,
-                                                                                              'line' => 22,
+                                                                                              'line' => 34,
                                                                                               'code' => '{ warn "[Text::Formbuilder] Title redefined at input text line $thisline\\n" if defined $title;
     $title = $item[2] }'
@@ -7528,45 +8084,5 @@
                                                   'name' => 'title',
                                                   'vars' => '',
-                                                  'line' => 21
-                                                }, 'Parse::RecDescent::Rule' ),
-                              'label' => bless( {
-                                                  'impcount' => 0,
-                                                  'calls' => [],
-                                                  'changed' => 0,
-                                                  'opcount' => 0,
-                                                  'prods' => [
-                                                               bless( {
-                                                                        'number' => '0',
-                                                                        'strcount' => 1,
-                                                                        'dircount' => 0,
-                                                                        'uncommit' => undef,
-                                                                        'error' => undef,
-                                                                        'patcount' => 1,
-                                                                        'actcount' => 0,
-                                                                        'items' => [
-                                                                                     bless( {
-                                                                                              'pattern' => '|',
-                                                                                              'hashname' => '__STRING1__',
-                                                                                              'description' => '\'|\'',
-                                                                                              'lookahead' => 0,
-                                                                                              'line' => 73
-                                                                                            }, 'Parse::RecDescent::Literal' ),
-                                                                                     bless( {
-                                                                                              'pattern' => '[^:\\[\\{\\/]+',
-                                                                                              'hashname' => '__PATTERN1__',
-                                                                                              'description' => '/[^:\\\\[\\\\\\{\\\\/]+/i',
-                                                                                              'lookahead' => 0,
-                                                                                              'rdelim' => '/',
-                                                                                              'line' => 73,
-                                                                                              'mod' => 'i',
-                                                                                              'ldelim' => '/'
-                                                                                            }, 'Parse::RecDescent::Token' )
-                                                                                   ],
-                                                                        'line' => undef
-                                                                      }, 'Parse::RecDescent::Production' )
-                                                             ],
-                                                  'name' => 'label',
-                                                  'vars' => '',
-                                                  'line' => 73
+                                                  'line' => 33
                                                 }, 'Parse::RecDescent::Rule' ),
                               'pattern_def' => bless( {
@@ -7593,5 +8109,5 @@
                                                                                                     'description' => '\'!pattern\'',
                                                                                                     'lookahead' => 0,
-                                                                                                    'line' => 28
+                                                                                                    'line' => 40
                                                                                                   }, 'Parse::RecDescent::Literal' ),
                                                                                            bless( {
@@ -7601,5 +8117,5 @@
                                                                                                     'argcode' => undef,
                                                                                                     'lookahead' => 0,
-                                                                                                    'line' => 28
+                                                                                                    'line' => 40
                                                                                                   }, 'Parse::RecDescent::Subrule' ),
                                                                                            bless( {
@@ -7609,10 +8125,10 @@
                                                                                                     'argcode' => undef,
                                                                                                     'lookahead' => 0,
-                                                                                                    'line' => 28
+                                                                                                    'line' => 40
                                                                                                   }, 'Parse::RecDescent::Subrule' ),
                                                                                            bless( {
                                                                                                     'hashname' => '__ACTION1__',
                                                                                                     'lookahead' => 0,
-                                                                                                    'line' => 29,
+                                                                                                    'line' => 41,
                                                                                                     'code' => '{ $patterns{$item{pattern_name}} = $item{pattern} }'
                                                                                                   }, 'Parse::RecDescent::Action' )
@@ -7623,5 +8139,140 @@
                                                         'name' => 'pattern_def',
                                                         'vars' => '',
-                                                        'line' => 28
+                                                        'line' => 40
+                                                      }, 'Parse::RecDescent::Rule' ),
+                              'dynamic_list' => bless( {
+                                                         'impcount' => 0,
+                                                         'calls' => [],
+                                                         'changed' => 0,
+                                                         'opcount' => 0,
+                                                         'prods' => [
+                                                                      bless( {
+                                                                               'number' => '0',
+                                                                               'strcount' => 1,
+                                                                               'dircount' => 1,
+                                                                               'uncommit' => undef,
+                                                                               'error' => undef,
+                                                                               'patcount' => 0,
+                                                                               'actcount' => 1,
+                                                                               'items' => [
+                                                                                            bless( {
+                                                                                                     'pattern' => '&',
+                                                                                                     'hashname' => '__STRING1__',
+                                                                                                     'description' => '\'&\'',
+                                                                                                     'lookahead' => 0,
+                                                                                                     'line' => 19
+                                                                                                   }, 'Parse::RecDescent::Literal' ),
+                                                                                            bless( {
+                                                                                                     'hashname' => '__DIRECTIVE1__',
+                                                                                                     'name' => '<perl_codeblock>',
+                                                                                                     'lookahead' => 0,
+                                                                                                     'line' => 19,
+                                                                                                     'code' => 'Text::Balanced::extract_codeblock($text,undef,$skip,\'{}\');
+					'
+                                                                                                   }, 'Parse::RecDescent::Directive' ),
+                                                                                            bless( {
+                                                                                                     'hashname' => '__ACTION1__',
+                                                                                                     'lookahead' => 0,
+                                                                                                     'line' => 20,
+                                                                                                     'code' => '{
+	my @results = (eval $item[2]);
+	if (ref $results[0] eq \'HASH\') {
+	    @options = @results;
+	} else {    
+	    @options = map { { $_ => $_ } } @results;
+	}
+    }'
+                                                                                                   }, 'Parse::RecDescent::Action' )
+                                                                                          ],
+                                                                               'line' => undef
+                                                                             }, 'Parse::RecDescent::Production' )
+                                                                    ],
+                                                         'name' => 'dynamic_list',
+                                                         'vars' => '',
+                                                         'line' => 19
+                                                       }, 'Parse::RecDescent::Rule' ),
+                              'static_list' => bless( {
+                                                        'impcount' => 0,
+                                                        'calls' => [
+                                                                     'option'
+                                                                   ],
+                                                        'changed' => 0,
+                                                        'opcount' => 0,
+                                                        'prods' => [
+                                                                     bless( {
+                                                                              'number' => '0',
+                                                                              'strcount' => 2,
+                                                                              'dircount' => 1,
+                                                                              'uncommit' => undef,
+                                                                              'error' => undef,
+                                                                              'patcount' => 2,
+                                                                              'actcount' => 0,
+                                                                              'op' => [],
+                                                                              'items' => [
+                                                                                           bless( {
+                                                                                                    'pattern' => '{',
+                                                                                                    'hashname' => '__STRING1__',
+                                                                                                    'description' => '\'\\{\'',
+                                                                                                    'lookahead' => 0,
+                                                                                                    'line' => 17
+                                                                                                  }, 'Parse::RecDescent::Literal' ),
+                                                                                           bless( {
+                                                                                                    'expected' => '<leftop: option /,\\\\s*/ option>',
+                                                                                                    'min' => 1,
+                                                                                                    'name' => '\'option(s)\'',
+                                                                                                    'max' => 100000000,
+                                                                                                    'leftarg' => bless( {
+                                                                                                                          'subrule' => 'option',
+                                                                                                                          'matchrule' => 0,
+                                                                                                                          'implicit' => undef,
+                                                                                                                          'argcode' => undef,
+                                                                                                                          'lookahead' => 0,
+                                                                                                                          'line' => 17
+                                                                                                                        }, 'Parse::RecDescent::Subrule' ),
+                                                                                                    'rightarg' => bless( {
+                                                                                                                           'subrule' => 'option',
+                                                                                                                           'matchrule' => 0,
+                                                                                                                           'implicit' => undef,
+                                                                                                                           'argcode' => undef,
+                                                                                                                           'lookahead' => 0,
+                                                                                                                           'line' => 17
+                                                                                                                         }, 'Parse::RecDescent::Subrule' ),
+                                                                                                    'hashname' => '__DIRECTIVE1__',
+                                                                                                    'type' => 'leftop',
+                                                                                                    'op' => bless( {
+                                                                                                                     'pattern' => ',\\s*',
+                                                                                                                     'hashname' => '__PATTERN1__',
+                                                                                                                     'description' => '/,\\\\s*/',
+                                                                                                                     'lookahead' => 0,
+                                                                                                                     'rdelim' => '/',
+                                                                                                                     'line' => 17,
+                                                                                                                     'mod' => '',
+                                                                                                                     'ldelim' => '/'
+                                                                                                                   }, 'Parse::RecDescent::Token' )
+                                                                                                  }, 'Parse::RecDescent::Operator' ),
+                                                                                           bless( {
+                                                                                                    'pattern' => ',?',
+                                                                                                    'hashname' => '__PATTERN2__',
+                                                                                                    'description' => '/,?/',
+                                                                                                    'lookahead' => 0,
+                                                                                                    'rdelim' => '/',
+                                                                                                    'line' => 17,
+                                                                                                    'mod' => '',
+                                                                                                    'ldelim' => '/'
+                                                                                                  }, 'Parse::RecDescent::Token' ),
+                                                                                           bless( {
+                                                                                                    'pattern' => '}',
+                                                                                                    'hashname' => '__STRING2__',
+                                                                                                    'description' => '\'\\}\'',
+                                                                                                    'lookahead' => 0,
+                                                                                                    'line' => 17
+                                                                                                  }, 'Parse::RecDescent::Literal' )
+                                                                                         ],
+                                                                              'line' => undef
+                                                                            }, 'Parse::RecDescent::Production' )
+                                                                   ],
+                                                        'name' => 'static_list',
+                                                        'vars' => '',
+                                                        'line' => 17
                                                       }, 'Parse::RecDescent::Rule' )
                             }
Index: trunk/lib/Text/FormBuilder/grammar
===================================================================
--- trunk/lib/Text/FormBuilder/grammar	(revision 9)
+++ trunk/lib/Text/FormBuilder/grammar	(revision 10)
@@ -12,6 +12,18 @@
     }
 
-list_def: '!list' list_name '{' option(s /,\s*/) /,?/ '}'
+list_def: '!list' list_name (static_list | dynamic_list)
     { $lists{$item{list_name}} = [ @options ]; @options = () }
+
+static_list: '{' option(s /,\s*/) /,?/ '}'
+
+dynamic_list: '&' <perl_codeblock>
+    {
+	my @results = (eval $item[2]);
+	if (ref $results[0] eq 'HASH') {
+	    @options = @results;
+	} else {    
+	    @options = map { { $_ => $_ } } @results;
+	}
+    }
 
 list_name: /[A-Z_]+/
