[Templates-svn] r1066 - trunk/parser
svn@template-toolkit.org
svn@template-toolkit.org
Author: abw
Date: 2007-04-27 14:21:30 +0100 (Fri, 27 Apr 2007)
New Revision: 1066
Modified:
trunk/parser/Parser.yp
Log:
fixed whitespace damage
Modified: trunk/parser/Parser.yp
===================================================================
--- trunk/parser/Parser.yp 2007-04-27 13:21:04 UTC (rev 1065)
+++ trunk/parser/Parser.yp 2007-04-27 13:21:30 UTC (rev 1066)
@@ -61,44 +61,44 @@
# START AND TOP-LEVEL RULES
#--------------------------------------------------------------------------
-template: block { $factory->template($_[1]) }
+template: block { $factory->template($_[1]) }
;
-block: chunks { $factory->block($_[1]) }
- | /* NULL */ { $factory->block() }
+block: chunks { $factory->block($_[1]) }
+ | /* NULL */ { $factory->block() }
;
-chunks: chunks chunk { push(@{$_[1]}, $_[2])
- if defined $_[2]; $_[1] }
- | chunk { defined $_[1] ? [ $_[1] ] : [ ] }
+chunks: chunks chunk { push(@{$_[1]}, $_[2])
+ if defined $_[2]; $_[1] }
+ | chunk { defined $_[1] ? [ $_[1] ] : [ ] }
;
-chunk: TEXT { $factory->textblock($_[1]) }
- | statement ';' { return '' unless $_[1];
- $_[0]->location() . $_[1];
- }
+chunk: TEXT { $factory->textblock($_[1]) }
+ | statement ';' { return '' unless $_[1];
+ $_[0]->location() . $_[1];
+ }
;
statement: directive
- | defblock
- | anonblock
- | capture
- | macro
- | use
- | view
- | rawperl
- | expr { $factory->get($_[1]) }
- | META metadata { $_[0]->add_metadata($_[2]); }
- | /* empty statement */
+ | defblock
+ | anonblock
+ | capture
+ | macro
+ | use
+ | view
+ | rawperl
+ | expr { $factory->get($_[1]) }
+ | META metadata { $_[0]->add_metadata($_[2]); }
+ | /* empty statement */
;
-directive: setlist { $factory->set($_[1]) }
- | atomdir
- | condition
- | switch
- | loop
- | try
- | perl
+directive: setlist { $factory->set($_[1]) }
+ | atomdir
+ | condition
+ | switch
+ | loop
+ | try
+ | perl
;
@@ -106,193 +106,191 @@
# DIRECTIVE RULES
#--------------------------------------------------------------------------
-atomexpr: expr { $factory->get($_[1]) }
- | atomdir
+atomexpr: expr { $factory->get($_[1]) }
+ | atomdir
;
-atomdir: GET expr { $factory->get($_[2]) }
- | CALL expr { $factory->call($_[2]) }
- | SET setlist { $factory->set($_[2]) }
- | DEFAULT setlist { $factory->default($_[2]) }
- | INSERT nameargs { $factory->insert($_[2]) }
- | INCLUDE nameargs { $factory->include($_[2]) }
- | PROCESS nameargs { $factory->process($_[2]) }
- | THROW nameargs { $factory->throw($_[2]) }
- | RETURN { $factory->return() }
- | STOP { $factory->stop() }
- | CLEAR { "\$output = '';"; }
- | LAST { $_[0]->{ INFOR } || $_[0]->{ INWHILE }
+atomdir: GET expr { $factory->get($_[2]) }
+ | CALL expr { $factory->call($_[2]) }
+ | SET setlist { $factory->set($_[2]) }
+ | DEFAULT setlist { $factory->default($_[2]) }
+ | INSERT nameargs { $factory->insert($_[2]) }
+ | INCLUDE nameargs { $factory->include($_[2]) }
+ | PROCESS nameargs { $factory->process($_[2]) }
+ | THROW nameargs { $factory->throw($_[2]) }
+ | RETURN { $factory->return() }
+ | STOP { $factory->stop() }
+ | CLEAR { "\$output = '';"; }
+ | LAST { $_[0]->{ INFOR } || $_[0]->{ INWHILE }
? 'last LOOP;'
: 'last;' }
- | NEXT { $_[0]->{ INFOR }
- ? $factory->next()
- : ($_[0]->{ INWHILE }
+ | NEXT { $_[0]->{ INFOR }
+ ? $factory->next()
+ : ($_[0]->{ INWHILE }
? 'next LOOP;'
: 'next;') }
- | DEBUG nameargs { if ($_[2]->[0]->[0] =~ /^'(on|off)'$/) {
- $_[0]->{ DEBUG_DIRS } = ($1 eq 'on');
- $factory->debug($_[2]);
- }
- else {
- $_[0]->{ DEBUG_DIRS } ? $factory->debug($_[2]) : '';
- }
- }
+ | DEBUG nameargs { if ($_[2]->[0]->[0] =~ /^'(on|off)'$/) {
+ $_[0]->{ DEBUG_DIRS } = ($1 eq 'on');
+ $factory->debug($_[2]);
+ }
+ else {
+ $_[0]->{ DEBUG_DIRS } ? $factory->debug($_[2]) : '';
+ }
+ }
| wrapper
- | filter
+ | filter
;
condition: IF expr ';'
- block else END { $factory->if(@_[2, 4, 5]) }
- | atomexpr IF expr { $factory->if(@_[3, 1]) }
- | UNLESS expr ';'
- block else END { $factory->if("!($_[2])", @_[4, 5]) }
- | atomexpr UNLESS expr { $factory->if("!($_[3])", $_[1]) }
+ block else END { $factory->if(@_[2, 4, 5]) }
+ | atomexpr IF expr { $factory->if(@_[3, 1]) }
+ | UNLESS expr ';'
+ block else END { $factory->if("!($_[2])", @_[4, 5]) }
+ | atomexpr UNLESS expr { $factory->if("!($_[3])", $_[1]) }
;
-else: ELSIF expr ';'
- block else { unshift(@{$_[5]}, [ @_[2, 4] ]);
- $_[5]; }
- | ELSE ';' block { [ $_[3] ] }
- | /* NULL */ { [ undef ] }
+else: ELSIF expr ';'
+ block else { unshift(@{$_[5]}, [ @_[2, 4] ]);
+ $_[5]; }
+ | ELSE ';' block { [ $_[3] ] }
+ | /* NULL */ { [ undef ] }
;
-switch: SWITCH expr ';'
- block case END { $factory->switch(@_[2, 5]) }
+switch: SWITCH expr ';'
+ block case END { $factory->switch(@_[2, 5]) }
;
-case: CASE term ';' block
- case { unshift(@{$_[5]}, [ @_[2, 4] ]);
- $_[5]; }
- | CASE DEFAULT ';' block { [ $_[4] ] }
- | CASE ';' block { [ $_[3] ] }
- | /* NULL */ { [ undef ] }
+case: CASE term ';' block
+ case { unshift(@{$_[5]}, [ @_[2, 4] ]);
+ $_[5]; }
+ | CASE DEFAULT ';' block { [ $_[4] ] }
+ | CASE ';' block { [ $_[3] ] }
+ | /* NULL */ { [ undef ] }
;
-loop: FOR loopvar ';' { $_[0]->{ INFOR }++ }
- block END { $_[0]->{ INFOR }--;
- $factory->foreach(@{$_[2]}, $_[5]) }
-#loop: FOR loopvar ';'
-# block END { $factory->foreach(@{$_[2]}, $_[4]) }
- | atomexpr FOR loopvar { $factory->foreach(@{$_[3]}, $_[1]) }
- | WHILE expr ';' { $_[0]->{ INWHILE }++ }
- block END { $_[0]->{ INWHILE }--;
+loop: FOR loopvar ';' { $_[0]->{ INFOR }++ }
+ block END { $_[0]->{ INFOR }--;
+ $factory->foreach(@{$_[2]}, $_[5]) }
+ | atomexpr FOR loopvar { $factory->foreach(@{$_[3]}, $_[1]) }
+ | WHILE expr ';' { $_[0]->{ INWHILE }++ }
+ block END { $_[0]->{ INWHILE }--;
$factory->while(@_[2, 5]) }
- | atomexpr WHILE expr { $factory->while(@_[3, 1]) }
+ | atomexpr WHILE expr { $factory->while(@_[3, 1]) }
;
loopvar: IDENT ASSIGN term args { [ @_[1, 3, 4] ] }
| IDENT IN term args { [ @_[1, 3, 4] ] }
- | term args { [ 0, @_[1, 2] ] }
+ | term args { [ 0, @_[1, 2] ] }
;
wrapper: WRAPPER nameargs ';'
- block END { $factory->wrapper(@_[2, 4]) }
- | atomexpr
- WRAPPER nameargs { $factory->wrapper(@_[3, 1]) }
+ block END { $factory->wrapper(@_[2, 4]) }
+ | atomexpr
+ WRAPPER nameargs { $factory->wrapper(@_[3, 1]) }
;
-try: TRY ';'
- block final END { $factory->try(@_[3, 4]) }
+try: TRY ';'
+ block final END { $factory->try(@_[3, 4]) }
;
-final: CATCH filename ';'
- block final { unshift(@{$_[5]}, [ @_[2,4] ]);
- $_[5]; }
- | CATCH DEFAULT ';'
- block final { unshift(@{$_[5]}, [ undef, $_[4] ]);
- $_[5]; }
- | CATCH ';'
- block final { unshift(@{$_[4]}, [ undef, $_[3] ]);
- $_[4]; }
- | FINAL ';' block { [ $_[3] ] }
- | /* NULL */ { [ 0 ] } # no final
+final: CATCH filename ';'
+ block final { unshift(@{$_[5]}, [ @_[2,4] ]);
+ $_[5]; }
+ | CATCH DEFAULT ';'
+ block final { unshift(@{$_[5]}, [ undef, $_[4] ]);
+ $_[5]; }
+ | CATCH ';'
+ block final { unshift(@{$_[4]}, [ undef, $_[3] ]);
+ $_[4]; }
+ | FINAL ';' block { [ $_[3] ] }
+ | /* NULL */ { [ 0 ] } # no final
;
-use: USE lnameargs { $factory->use($_[2]) }
+use: USE lnameargs { $factory->use($_[2]) }
;
-view: VIEW nameargs ';' { $_[0]->push_defblock(); }
- block END { $factory->view(@_[2,5],
- $_[0]->pop_defblock) }
+view: VIEW nameargs ';' { $_[0]->push_defblock(); }
+ block END { $factory->view(@_[2,5],
+ $_[0]->pop_defblock) }
;
-perl: PERL ';' { ${$_[0]->{ INPERL }}++; }
- block END { ${$_[0]->{ INPERL }}--;
- $_[0]->{ EVAL_PERL }
- ? $factory->perl($_[4])
- : $factory->no_perl(); }
+perl: PERL ';' { ${$_[0]->{ INPERL }}++; }
+ block END { ${$_[0]->{ INPERL }}--;
+ $_[0]->{ EVAL_PERL }
+ ? $factory->perl($_[4])
+ : $factory->no_perl(); }
;
rawperl: RAWPERL { ${$_[0]->{ INPERL }}++;
- $rawstart = ${$_[0]->{'LINE'}}; }
- ';' TEXT END { ${$_[0]->{ INPERL }}--;
- $_[0]->{ EVAL_PERL }
- ? $factory->rawperl($_[4], $rawstart)
- : $factory->no_perl(); }
+ $rawstart = ${$_[0]->{'LINE'}}; }
+ ';' TEXT END { ${$_[0]->{ INPERL }}--;
+ $_[0]->{ EVAL_PERL }
+ ? $factory->rawperl($_[4], $rawstart)
+ : $factory->no_perl(); }
;
-filter: FILTER lnameargs ';'
- block END { $factory->filter(@_[2,4]) }
- | atomexpr FILTER
- lnameargs { $factory->filter(@_[3,1]) }
+filter: FILTER lnameargs ';'
+ block END { $factory->filter(@_[2,4]) }
+ | atomexpr FILTER
+ lnameargs { $factory->filter(@_[3,1]) }
;
-defblock: defblockname
- blockargs ';'
- template END { my $name = join('/', @{ $_[0]->{ DEFBLOCKS } });
- pop(@{ $_[0]->{ DEFBLOCKS } });
- $_[0]->define_block($name, $_[4]);
- undef
- }
+defblock: defblockname
+ blockargs ';'
+ template END { my $name = join('/', @{ $_[0]->{ DEFBLOCKS } });
+ pop(@{ $_[0]->{ DEFBLOCKS } });
+ $_[0]->define_block($name, $_[4]);
+ undef
+ }
;
defblockname: BLOCK blockname { push(@{ $_[0]->{ DEFBLOCKS } }, $_[2]);
- $_[2];
- }
+ $_[2];
+ }
;
blockname: filename
- | LITERAL { $_[1] =~ s/^'(.*)'$/$1/; $_[1] }
+ | LITERAL { $_[1] =~ s/^'(.*)'$/$1/; $_[1] }
;
blockargs: metadata
- | /* NULL */
+ | /* NULL */
;
-anonblock: BLOCK blockargs ';' block END
- { local $" = ', ';
- print STDERR "experimental block args: [@{ $_[2] }]\n"
- if $_[2];
- $factory->anon_block($_[4]) }
+anonblock: BLOCK blockargs ';' block END
+ { local $" = ', ';
+ print STDERR "experimental block args: [@{ $_[2] }]\n"
+ if $_[2];
+ $factory->anon_block($_[4]) }
;
-capture: ident ASSIGN mdir { $factory->capture(@_[1, 3]) }
+capture: ident ASSIGN mdir { $factory->capture(@_[1, 3]) }
;
macro: MACRO IDENT '(' margs ')'
- mdir { $factory->macro(@_[2, 6, 4]) }
- | MACRO IDENT mdir { $factory->macro(@_[2, 3]) }
+ mdir { $factory->macro(@_[2, 6, 4]) }
+ | MACRO IDENT mdir { $factory->macro(@_[2, 3]) }
;
-mdir: directive
- | BLOCK ';' block END { $_[3] }
+mdir: directive
+ | BLOCK ';' block END { $_[3] }
;
-margs: margs IDENT { push(@{$_[1]}, $_[2]); $_[1] }
- | margs COMMA { $_[1] }
- | IDENT { [ $_[1] ] }
+margs: margs IDENT { push(@{$_[1]}, $_[2]); $_[1] }
+ | margs COMMA { $_[1] }
+ | IDENT { [ $_[1] ] }
;
-metadata: metadata meta { push(@{$_[1]}, @{$_[2]}); $_[1] }
- | metadata COMMA
- | meta
+metadata: metadata meta { push(@{$_[1]}, @{$_[2]}); $_[1] }
+ | metadata COMMA
+ | meta
;
-meta: IDENT ASSIGN LITERAL { for ($_[3]) { s/^'//; s/'$//;
- s/\\'/'/g };
- [ @_[1,3] ] }
- | IDENT ASSIGN '"' TEXT '"' { [ @_[1,4] ] }
- | IDENT ASSIGN NUMBER { [ @_[1,3] ] }
+meta: IDENT ASSIGN LITERAL { for ($_[3]) { s/^'//; s/'$//;
+ s/\\'/'/g };
+ [ @_[1,3] ] }
+ | IDENT ASSIGN '"' TEXT '"' { [ @_[1,4] ] }
+ | IDENT ASSIGN NUMBER { [ @_[1,3] ] }
;
@@ -300,99 +298,99 @@
# FUNDAMENTAL ELEMENT RULES
#--------------------------------------------------------------------------
-term: lterm
- | sterm
+term: lterm
+ | sterm
;
-lterm: '[' list ']' { "[ $_[2] ]" }
- | '[' range ']' { "[ $_[2] ]" }
- | '[' ']' { "[ ]" }
- | '{' hash '}' { "{ $_[2] }" }
+lterm: '[' list ']' { "[ $_[2] ]" }
+ | '[' range ']' { "[ $_[2] ]" }
+ | '[' ']' { "[ ]" }
+ | '{' hash '}' { "{ $_[2] }" }
;
-sterm: ident { $factory->ident($_[1]) }
- | REF ident { $factory->identref($_[2]) }
- | '"' quoted '"' { $factory->quoted($_[2]) }
- | LITERAL
- | NUMBER
+sterm: ident { $factory->ident($_[1]) }
+ | REF ident { $factory->identref($_[2]) }
+ | '"' quoted '"' { $factory->quoted($_[2]) }
+ | LITERAL
+ | NUMBER
;
-list: list term { "$_[1], $_[2]" }
- | list COMMA
- | term
+list: list term { "$_[1], $_[2]" }
+ | list COMMA
+ | term
;
-range: sterm TO sterm { $_[1] . '..' . $_[3] }
+range: sterm TO sterm { $_[1] . '..' . $_[3] }
;
-hash: params
- | /* NULL */ { "" }
+hash: params
+ | /* NULL */ { "" }
;
-params: params param { "$_[1], $_[2]" }
- | params COMMA
- | param
+params: params param { "$_[1], $_[2]" }
+ | params COMMA
+ | param
;
param: LITERAL ASSIGN expr { "$_[1] => $_[3]" }
| item ASSIGN expr { "$_[1] => $_[3]" }
;
-ident: ident DOT node { push(@{$_[1]}, @{$_[3]}); $_[1] }
- | ident DOT NUMBER { push(@{$_[1]},
- map {($_, 0)} split(/\./, $_[3]));
- $_[1]; }
- | node
+ident: ident DOT node { push(@{$_[1]}, @{$_[3]}); $_[1] }
+ | ident DOT NUMBER { push(@{$_[1]},
+ map {($_, 0)} split(/\./, $_[3]));
+ $_[1]; }
+ | node
;
-node: item { [ $_[1], 0 ] }
- | item '(' args ')' { [ $_[1], $factory->args($_[3]) ] }
+node: item { [ $_[1], 0 ] }
+ | item '(' args ')' { [ $_[1], $factory->args($_[3]) ] }
;
-item: IDENT { "'$_[1]'" }
- | '${' sterm '}' { $_[2] }
- | '$' IDENT { $_[0]->{ V1DOLLAR }
- ? "'$_[2]'"
- : $factory->ident(["'$_[2]'", 0]) }
+item: IDENT { "'$_[1]'" }
+ | '${' sterm '}' { $_[2] }
+ | '$' IDENT { $_[0]->{ V1DOLLAR }
+ ? "'$_[2]'"
+ : $factory->ident(["'$_[2]'", 0]) }
;
-expr: expr BINOP expr { "$_[1] $_[2] $_[3]" }
- | expr '/' expr { "$_[1] $_[2] $_[3]" }
- | expr '+' expr { "$_[1] $_[2] $_[3]" }
- | expr DIV expr { "int($_[1] / $_[3])" }
- | expr MOD expr { "$_[1] % $_[3]" }
- | expr CMPOP expr { "$_[1] $CMPOP{ $_[2] } $_[3]" }
- | expr CAT expr { "$_[1] . $_[3]" }
- | expr AND expr { "$_[1] && $_[3]" }
- | expr OR expr { "$_[1] || $_[3]" }
- | NOT expr { "! $_[2]" }
- | expr '?' expr ':' expr { "$_[1] ? $_[3] : $_[5]" }
- | '(' assign ')' { $factory->assign(@{$_[2]}) }
- | '(' expr ')' { "($_[2])" }
- | term
+expr: expr BINOP expr { "$_[1] $_[2] $_[3]" }
+ | expr '/' expr { "$_[1] $_[2] $_[3]" }
+ | expr '+' expr { "$_[1] $_[2] $_[3]" }
+ | expr DIV expr { "int($_[1] / $_[3])" }
+ | expr MOD expr { "$_[1] % $_[3]" }
+ | expr CMPOP expr { "$_[1] $CMPOP{ $_[2] } $_[3]" }
+ | expr CAT expr { "$_[1] . $_[3]" }
+ | expr AND expr { "$_[1] && $_[3]" }
+ | expr OR expr { "$_[1] || $_[3]" }
+ | NOT expr { "! $_[2]" }
+ | expr '?' expr ':' expr { "$_[1] ? $_[3] : $_[5]" }
+ | '(' assign ')' { $factory->assign(@{$_[2]}) }
+ | '(' expr ')' { "($_[2])" }
+ | term
;
-setlist: setlist assign { push(@{$_[1]}, @{$_[2]}); $_[1] }
- | setlist COMMA
- | assign
+setlist: setlist assign { push(@{$_[1]}, @{$_[2]}); $_[1] }
+ | setlist COMMA
+ | assign
;
-assign: ident ASSIGN expr { [ $_[1], $_[3] ] }
- | LITERAL ASSIGN expr { [ @_[1,3] ] }
+assign: ident ASSIGN expr { [ $_[1], $_[3] ] }
+ | LITERAL ASSIGN expr { [ @_[1,3] ] }
;
# The 'args' production constructs a list of named and positional
# parameters. Named parameters are stored in a list in element 0
# of the args list. Remaining elements contain positional parameters
-args: args expr { push(@{$_[1]}, $_[2]); $_[1] }
- | args param { push(@{$_[1]->[0]}, $_[2]); $_[1] }
- | args ident ASSIGN expr { push(@{$_[1]->[0]}, "'', " .
- $factory->assign(@_[2,4])); $_[1] }
- | args COMMA { $_[1] }
- | /* init */ { [ [ ] ] }
+args: args expr { push(@{$_[1]}, $_[2]); $_[1] }
+ | args param { push(@{$_[1]->[0]}, $_[2]); $_[1] }
+ | args ident ASSIGN expr { push(@{$_[1]->[0]}, "'', " .
+ $factory->assign(@_[2,4])); $_[1] }
+ | args COMMA { $_[1] }
+ | /* init */ { [ [ ] ] }
;
@@ -403,38 +401,30 @@
# without requiring quoting.
lnameargs: lvalue ASSIGN nameargs { push(@{$_[3]}, $_[1]); $_[3] }
- | nameargs
+ | nameargs
;
-lvalue: item
- | '"' quoted '"' { $factory->quoted($_[2]) }
- | LITERAL
+lvalue: item
+ | '"' quoted '"' { $factory->quoted($_[2]) }
+ | LITERAL
;
-nameargs: '$' ident args { [ [$factory->ident($_[2])], $_[3] ] }
- | names args { [ @_[1,2] ] }
- | names '(' args ')' { [ @_[1,3] ] }
+nameargs: '$' ident args { [ [$factory->ident($_[2])], $_[3] ] }
+ | names args { [ @_[1,2] ] }
+ | names '(' args ')' { [ @_[1,3] ] }
;
-names: names '+' name { push(@{$_[1]}, $_[3]); $_[1] }
- | name { [ $_[1] ] }
+names: names '+' name { push(@{$_[1]}, $_[3]); $_[1] }
+ | name { [ $_[1] ] }
;
-name: '"' quoted '"' { $factory->quoted($_[2]) }
- | filename { "'$_[1]'" }
- | LITERAL
+name: '"' quoted '"' { $factory->quoted($_[2]) }
+ | filename { "'$_[1]'" }
+ | LITERAL
;
-#nameargs: literal args { [ @_[1,2] ] }
-# | literal '(' args ')' { [ @_[1,3] ] }
-# | '$' ident
-#;
-
-#namesargs: names args { [ @_[1,2] ] }
-#;
-
filename: filename DOT filepart { "$_[1].$_[3]" }
- | filepart
+ | filepart
;
filepart: FILENAME | IDENT | NUMBER
@@ -447,14 +437,14 @@
# parser identify directive/text boundaries; we're not interested in
# them here so we can simply accept and ignore by returning undef
-quoted: quoted quotable { push(@{$_[1]}, $_[2])
- if defined $_[2]; $_[1] }
- | /* NULL */ { [ ] }
+quoted: quoted quotable { push(@{$_[1]}, $_[2])
+ if defined $_[2]; $_[1] }
+ | /* NULL */ { [ ] }
;
-quotable: ident { $factory->ident($_[1]) }
- | TEXT { $factory->text($_[1]) }
- | ';' { undef }
+quotable: ident { $factory->ident($_[1]) }
+ | TEXT { $factory->text($_[1]) }
+ | ';' { undef }
;