Index: trunk/lib/Text/FormBuilder/grammar
===================================================================
--- trunk/lib/Text/FormBuilder/grammar	(revision 29)
+++ trunk/lib/Text/FormBuilder/grammar	(revision 39)
@@ -11,4 +11,5 @@
 	%lists,
 	%patterns,
+	%subs,         # validation subs
 	@group,        # current group
 	%groups,       # stored groups of fields
@@ -24,5 +25,5 @@
 }
 
-form_spec: (list_def | description_def | group_def | line)(s)
+form_spec: (list_def | description_def | validate_def | group_def | line)(s)
     {
 	# grab the last section, if there is any
@@ -45,4 +46,5 @@
 	    lists    => \%lists,
 	    patterns => \%patterns,
+	    subs     => \%subs,
 	    groups   => \%groups,
 	    sections => \@sections,
@@ -71,4 +73,7 @@
     $description =~ s/^{\s*|\s*}$//g;
     }
+
+validate_def: '!validate' var_name <perl_codeblock>
+    { $subs{$item{var_name}} = $item[3] }
 
 group_def: '!group' { $context = 'group' } var_name '{' field_line(s) '}' { $context = 'line' }
