[Templates-cvs] cvs commit: TT3/lib/Template/Generator Perl.pm

cvs@template-toolkit.org cvs@template-toolkit.org
Wed, 01 Dec 2004 11:16:32 +0000


cvs         04/12/01 11:16:32

  Modified:    lib/Template/Generator Perl.pm
  Log:
  * first attempt at code for generating MY variables
  
  Revision  Changes    Path
  1.7       +50 -3     TT3/lib/Template/Generator/Perl.pm
  
  Index: Perl.pm
  ===================================================================
  RCS file: /template-toolkit/TT3/lib/Template/Generator/Perl.pm,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Perl.pm	2004/11/29 11:38:19	1.6
  +++ Perl.pm	2004/12/01 11:16:32	1.7
  @@ -18,7 +18,7 @@
   #   modify it under the same terms as Perl itself.
   #
   # REVISION
  -#   $Id: Perl.pm,v 1.6 2004/11/29 11:38:19 abw Exp $
  +#   $Id: Perl.pm,v 1.7 2004/12/01 11:16:32 abw Exp $
   #
   #========================================================================
   
  @@ -30,7 +30,7 @@
   use Template::Generator;
   use base qw( Template::Generator );
   
  -our $VERSION  = sprintf("%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/);
  +our $VERSION  = sprintf("%d.%02d", q$Revision: 1.7 $ =~ /(\d+)\.(\d+)/);
   our $DEBUG    = 0 unless defined $DEBUG;
   our $ERROR    = '';
   #our $DEFAULT  = '_default';
  @@ -406,6 +406,21 @@
   
   sub generate_variable {
       my ($self, $nodes) = @_;
  +
  +    if (@$nodes == 1) {
  +        my $node = $nodes->[0];
  +        my ($name, $args) = @$node;
  +        if ($name->[0] eq 'ident') {
  +            $name = $name->[1];
  +            if (my $code = $self->{ variables }->{ $name }) {
  +                $self->debug("got code for $name: $code\n");
  +                return $code;
  +            }
  +        }
  +        else {
  +            $self->debug("not an ident; $name->[0]\n");
  +        }
  +    }
       return '$stash->get(' . $self->variable_nodes($nodes) . ')';
   }
   
  @@ -499,6 +514,38 @@
   
   
   #------------------------------------------------------------------------
  +# generate_my(@list) 
  +#------------------------------------------------------------------------
  +
  +sub generate_my {
  +    my ($self, @list) = @_;
  +    my @items;
  +
  +    foreach my $assign (@list) {
  +        my ($type, $var, $value) = @$assign;
  +        return $self->error("non-assign node in MY: $assign->[0]")
  +            unless $type eq 'assign';
  +        ($type, $var) = @$var;
  +        return $self->error("cannot create non-variable MY variable")
  +            unless $type eq 'variable';
  +        return $self->error("cannot create complex MY variable")
  +            if @$var > 1;
  +        $var = $var->[0];
  +        my ($name, $args) = @$var;
  +        return $self->error("cannot create MY variable with arguments: $args")
  +            if $args && @$args;
  +        return $self->error("cannot create non-identifier MY variable: $var->[0]->[0]")
  +            unless $name->[0] eq 'ident';
  +        $name = $name->[1];
  +        $value = $self->generate($value);
  +        push(@items, "my \$var_$name = $value");
  +        $self->{ variables }->{ $name } = "\$var_$name";
  +    }
  +    return join('; ', @items) . ';';
  +}
  +
  +
  +#------------------------------------------------------------------------
   # generate_default($setlist)
   #------------------------------------------------------------------------
   
  @@ -1484,7 +1531,7 @@
   
   =head1 VERSION
   
  -$Revision: 1.6 $
  +$Revision: 1.7 $
   
   =head1 COPYRIGHT