Index: trunk/lib/Text/FormBuilder.pm
===================================================================
--- trunk/lib/Text/FormBuilder.pm	(revision 56)
+++ trunk/lib/Text/FormBuilder.pm	(revision 57)
@@ -982,8 +982,4 @@
 =back
 
-B<Known BUG:> If you include an odd number of C<'> or C<"> characters in a
-C<!description> or C<!note>, then that directive will mistakenly be skipped.
-This is a bug casued by me taking a shortcut in the parser C<:-/>
-
 =head2 Fields
 
@@ -1162,5 +1158,5 @@
 =head1 TODO
 
-Improve the commmand line tools
+Document the commmand line tool
 
 Allow renaming of the submit button; allow renaming and inclusion of a 
@@ -1193,8 +1189,4 @@
 =head1 BUGS
 
-Having a single C<'> or C<"> in a C<!description> or C<!note> directive causes that
-directive to get skipped. This is an issue with the C<perl_codeblock> shortcut in
-Parse::RecDescent.
-
 Creating two $parsers in the same script causes the second one to get the data
 from the first one.
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];
     }
