[Templates-cvs] cvs commit: TT3/lib/Template/Directive Set.pm

cvs@template-toolkit.org cvs@template-toolkit.org
Mon, 15 Nov 2004 19:36:47 +0000


cvs         04/11/15 19:36:47

  Modified:    lib/Template/Directive Set.pm
  Log:
  * test implementation with new framework
  
  Revision  Changes    Path
  1.2       +22 -16    TT3/lib/Template/Directive/Set.pm
  
  Index: Set.pm
  ===================================================================
  RCS file: /template-toolkit/TT3/lib/Template/Directive/Set.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Set.pm	2004/11/10 18:26:30	1.1
  +++ Set.pm	2004/11/15 19:36:47	1.2
  @@ -17,7 +17,7 @@
   #   modify it under the same terms as Perl itself.
   #
   # REVISION
  -#   $Id: Set.pm,v 1.1 2004/11/10 18:26:30 abw Exp $
  +#   $Id: Set.pm,v 1.2 2004/11/15 19:36:47 abw Exp $
   #
   #========================================================================
   
  @@ -25,33 +25,39 @@
   
   use strict;
   use warnings;
  -use Template::Constants qw( DECLINE ERROR );
   use Template::Directive;
   use base qw( Template::Directive );
   
  -our $VERSION = sprintf("%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/);
  +our $VERSION = sprintf("%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/);
   our $ERROR   = '';
  +our $KEYWORD = 'SET';
   
  -
   # TODO: $parent->accept($self->element())
   #   OR: $self->element($expr, $parent)  (calls $parent->accept($elem))
   #   OR: $self->attach($parent, $self->element());
   
   sub parse {
  -    my ($self, $textref, $handler, $keyword) = @_;
  -    $keyword ||= 'GET';
  +    my ($self, $textref, $handler, $match) = @_;
  +    my ($expr, @set);
   
  -    my $expr = $handler->parse_expression($textref)
  -        || return $self->decline("$keyword expects an expression");
  -        
  -    return $handler->accept($self->element($expr));
  -}
  +    my $parser = $match->{ parser }
  +        || return $self->error('no parser defined');
   
  -sub element {
  -    my ($self, $expr) = @_;
  -    return [ get => $expr ];
  -}
  +    while ($expr = $parser->parse_assign($textref, $match)) {
  +        push(@set, $expr);
  +    }
  +
  +    return $self->error($parser->error())
  +        unless $parser->declined();
   
  +    return $self->error( 'missing assignment(s) after ',
  +                         $self->keyword($match) )
  +        unless @set;
  +
  +    unshift(@set, 'set');
  +
  +    return $handler->expr(\@set);
  +}
   
   
   1;
  @@ -82,7 +88,7 @@
   
   =head1 VERSION
   
  -$Revision: 1.1 $
  +$Revision: 1.2 $
   
   =head1 COPYRIGHT