- Timestamp:
- 03/25/05 13:20:40 (20 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MANIFEST
r64 r77 4 4 README 5 5 t/Text-FormBuilder.t 6 t/pod-coverage.t 7 t/01-field.t 6 8 bin/fb.pl 7 9 lib/Text/FormBuilder.pm -
trunk/lib/Text/FormBuilder.pm
r74 r77 821 821 your server, and you don't have to parse the form spec each time you want 822 822 to display your form. The generated module is a subclass of L<CGI::FormBuilder>, 823 that will pass along any constructor arguments to FormBuilder, and set up823 that will pass along any constructor arguments to FormBuilder, and set up 824 824 the fields for you. 825 825 … … 983 983 =item C<!field> 984 984 985 B<DEPR ACATED> Include a named instance of a group defined with C<!group>.985 B<DEPRECATED> Include a named instance of a group defined with C<!group>. 986 986 987 987 =item C<!title> … … 1223 1223 =head2 Language/Parser 1224 1224 1225 Deprecate the C<!field> directive 1225 Make sure that multiple runs of the parser don't share data. 1226 1226 1227 1227 Allow renaming of the submit button; allow renaming and inclusion of a … … 1239 1239 =head2 Code generation/Templates 1240 1240 1241 Expose some of the currently private functions to be able to get the generated 1242 code text directly, without printing. 1243 1241 1244 Revise the generated form constructing code to use the C<fieldopts> 1242 1245 option to C<< FB->new >>; will require FB 3.02 to run. -
trunk/lib/Text/FormBuilder/grammar
r74 r77 1 # line directives 2 # block directives 3 # field lines 4 # comments 5 1 6 { 2 7 #$::RD_TRACE = 1; 3 8 my ( 4 $context, # line or group5 9 @sections, # master data structure 6 10 $section_head, 7 11 $section_id, 8 12 @lines, # lines in each section 9 $title,10 $author,11 $description,12 13 %lists, 13 14 %patterns, … … 24 25 $cols, 25 26 ); 26 $context = 'line'; 27 my $context = 'line'; # start in line context by default 28 my %formspec; 29 30 # TODO: helper sub? 31 sub alert ($) { 32 warn '[' . (split(/::/, (caller(1))[3]))[-1] . '] ' . shift() . "\n"; 33 } 27 34 } 28 35 29 form_spec: (list_def | description_def | validate_def | group_def | note | line)(s) 36 form_spec: 37 { 38 %formspec = (); # clear the old formspec data 39 } 40 (list_def | description_def | group_def | note | line)(s) 30 41 { 31 42 # grab the last section, if there is any … … 39 50 } 40 51 41 $section_id = $item{identifier};42 $section_head = $item[3];43 @lines = ();44 52 $return = { 45 title => $ title,46 author => $ author,47 description => $ description,53 title => $formspec{title}, 54 author => $formspec{author}, 55 description => $formspec{description}, 48 56 lists => \%lists, 49 57 patterns => \%patterns, … … 60 68 61 69 dynamic_list: '&' <perl_codeblock> 62 { 63 warn "[Text::FormBuilder] Dynamic lists have been removed from the formspec grammar"; 64 } 70 { warn "[Text::FormBuilder] Dynamic lists have been removed from the formspec grammar"; } 65 71 66 72 description_def: '!description' block 67 73 { 68 warn "[Text::FormBuilder] Description redefined at input text line $thisline\n" if defined $description; 69 $description = $item{block}; 70 } 71 72 validate_def: '!validate' var_name <perl_codeblock> 73 { $subs{$item{var_name}} = eval "sub $item[3]" } 74 warn "[Text::FormBuilder] Description redefined at input text line $thisline\n" if defined $formspec{description}; 75 $formspec{description} = $item{block}; 76 } 74 77 75 78 group_def: '!group' { $context = 'group' } var_name '{' field_line(s) '}' { $context = 'line' } … … 82 85 note: '!note' block { push @lines, [ 'note', $item{block} ]; } 83 86 84 85 #TODO: allow \ escape for [] {} in these blocks86 87 87 88 # curly-brace delimited block, that can contain properly … … 109 110 title: '!title' /.*/ 110 111 { 111 warn "[Text::FormBuilder] Title redefined at input text line $thisline\n" if defined $ title;112 $ title= $item[2];112 warn "[Text::FormBuilder] Title redefined at input text line $thisline\n" if defined $formspec{title}; 113 $formspec{title} = $item[2]; 113 114 } 114 115 115 116 author: '!author' /.*/ 116 117 { 117 warn "[Text::FormBuilder] Author redefined at input text line $thisline\n" if defined $ author;118 $ author= $item[2];118 warn "[Text::FormBuilder] Author redefined at input text line $thisline\n" if defined $formspec{author}; 119 $formspec{author} = $item[2]; 119 120 } 120 121 … … 147 148 group_field: '!field' group_name name label(?) 148 149 { 149 warn " [Text::FormBuilder] The !field directive has been DEPRECATED (input file line $thisline). Please use the name:GROUP style";150 warn "WARNING line $thisline: The '!field' directive has been DEPRECATED. Use the 'name:GROUP' style instead.\n"; 150 151 push @lines, [ 'group', { name => $item{name}, label => $item{'label(?)'}[0], group => $item{group_name} } ]; 151 152 } … … 227 228 limit: /\d+/ 228 229 229 label: '|' (simple_multiword | quoted_string){ $item[2] }230 label: '|' string { $item[2] } 230 231 231 232 hint: bracket_block … … 237 238 other: '+' 'other' { 1 } 238 239 239 default: '=' (simple_multiword | quoted_string) { $item[2] } 240 default: '=' string { $item[2] } 241 242 string: simple_multiword | quoted_string 240 243 241 244 # for simple multiword values not involving punctuation … … 249 252 option_list: options | list_var 250 253 251 options: '{' option(s / ,/) '}'254 options: '{' option(s /\s*,\s*/) '}' 252 255 253 256 list_var: /@[A-Z_]+/ { $list_var = $item[1] } 254 257 255 option: (simple_multiword | quoted_string)display_text(?)258 option: string display_text(?) 256 259 { push @options, { $item[1] => $item{'display_text(?)'}[0] } } 257 260
Note: See TracChangeset
for help on using the changeset viewer.