Index: trunk/lib/Text/FormBuilder/grammar
===================================================================
--- trunk/lib/Text/FormBuilder/grammar	(revision 56)
+++ trunk/lib/Text/FormBuilder/grammar	(revision 57)
@@ -68,5 +68,5 @@
     }
 
-description_def: '!description' <perl_codeblock>
+description_def: '!description' block
     { warn "[Text::FormBuilder] Description redefined at input text line $thisline\n" if defined $description;
     
@@ -85,5 +85,5 @@
     }
 
-note: '!note' <perl_codeblock>
+note: '!note' block
     {   
 	(my $note = $item[2]) =~ s/^{\s*|\s*}$//g;
@@ -91,4 +91,15 @@
     }
 
+# curly-brace delimited block, that can contain properly
+# nested curly brackets, along with any other characters
+# return with the '{...}' so that nested blocks get the
+# brackets treated as literals
+block: '{' <skip:''> block_content(s) '}'
+    {
+	'{' . join('', @{ $item[3] }) . '}';
+    }
+
+block_content: /[^\{\}]+?/ | block
+
 
 field_line: <skip:'[ \t]*'> ( field | comment | blank ) "\n"
@@ -97,5 +108,5 @@
 title: '!title' /.*/
     {
-	warn "[Text::Formbuilder] Title redefined at input text line $thisline\n" if defined $title;
+	warn "[Text::FormBuilder] Title redefined at input text line $thisline\n" if defined $title;
 	$title = $item[2];
     }
@@ -103,5 +114,5 @@
 author: '!author' /.*/
     {
-	warn "[Text::Formbuilder] Author redefined at input text line $thisline\n" if defined $author;
+	warn "[Text::FormBuilder] Author redefined at input text line $thisline\n" if defined $author;
 	$author = $item[2];
     }
