Changeset 357
- Timestamp:
- 04/27/08 07:54:30 (3 weeks ago)
- Files:
-
- trunk/src/core/Spork/spork (modified) (1 prop)
- trunk/src/core/Template-Installed/lib/Template.pm (modified) (8 diffs)
- trunk/src/core/Template-Installed/lib/Template/Base.pm (modified) (8 diffs)
- trunk/src/core/Template-Installed/lib/Template/Config.pm (modified) (7 diffs)
- trunk/src/core/Template-Installed/lib/Template/Constants.pm (modified) (8 diffs)
- trunk/src/core/Template-Installed/lib/Template/Context.pm (modified) (19 diffs)
- trunk/src/core/Template-Installed/lib/Template/Directive.pm (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Document.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Exception.pm (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/FAQ.pod (modified) (8 diffs)
- trunk/src/core/Template-Installed/lib/Template/Filters.pm (modified) (14 diffs)
- trunk/src/core/Template-Installed/lib/Template/Grammar.pm (modified) (148 diffs)
- trunk/src/core/Template-Installed/lib/Template/Iterator.pm (modified) (8 diffs)
- trunk/src/core/Template-Installed/lib/Template/Library/HTML.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Library/PostScript.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Library/Splash.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual.pod (modified) (16 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Config.pod (modified) (21 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Credits.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Directives.pod (modified) (9 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Filters.pod (modified) (8 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Internals.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Intro.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Plugins.pod (modified) (8 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Refs.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Syntax.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/VMethods.pod (modified) (15 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Variables.pod (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Manual/Views.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Modules.pod (modified) (9 diffs)
- trunk/src/core/Template-Installed/lib/Template/Namespace/Constants.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Parser.pm (modified) (17 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Autoformat.pm (modified) (3 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/CGI.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Datafile.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Date.pm (modified) (3 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Directory.pm (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Dumper.pm (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/File.pm (modified) (7 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Filter.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Format.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/HTML.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Image.pm (modified) (13 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Iterator.pm (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Pod.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Procedural.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/String.pm (modified) (7 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Table.pm (modified) (11 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/URL.pm (modified) (9 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/View.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugin/Wrap.pm (modified) (3 diffs)
- trunk/src/core/Template-Installed/lib/Template/Plugins.pm (modified) (23 diffs)
- trunk/src/core/Template-Installed/lib/Template/Provider.pm (modified) (51 diffs)
- trunk/src/core/Template-Installed/lib/Template/Service.pm (modified) (12 diffs)
- trunk/src/core/Template-Installed/lib/Template/Stash.pm (modified) (13 diffs)
- trunk/src/core/Template-Installed/lib/Template/Stash/Context.pm (modified) (11 diffs)
- trunk/src/core/Template-Installed/lib/Template/Stash/XS.pm (modified) (5 diffs)
- trunk/src/core/Template-Installed/lib/Template/Test.pm (modified) (13 diffs)
- trunk/src/core/Template-Installed/lib/Template/Toolkit.pod (added)
- trunk/src/core/Template-Installed/lib/Template/Tools/tpage.pod (modified) (2 diffs)
- trunk/src/core/Template-Installed/lib/Template/Tools/ttree.pod (modified) (1 diff)
- trunk/src/core/Template-Installed/lib/Template/Tutorial.pod (modified) (6 diffs)
- trunk/src/core/Template-Installed/lib/Template/Tutorial/Datafile.pod (modified) (4 diffs)
- trunk/src/core/Template-Installed/lib/Template/Tutorial/Web.pod (modified) (3 diffs)
- trunk/src/core/Template-Installed/lib/Template/VMethods.pm (added)
- trunk/src/core/Template-Installed/lib/Template/View.pm (modified) (4 diffs)
- trunk/src/core/modules.mk (modified) (1 diff)
- trunk/src/cpan/Class-Field-0.12/lib/Class/Field.pm (modified) (2 diffs)
- trunk/src/ingy/Class-Field/Changes (modified) (1 diff)
- trunk/src/ingy/Class-Field/META.yml (modified) (2 diffs)
- trunk/src/ingy/Class-Field/README (modified) (4 diffs)
- trunk/src/ingy/Class-Field/lib/Class/Field.pm (modified) (3 diffs)
- trunk/src/ingy/modules.mk (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/core/Spork/spork
- Property svn:executable set to
1
- Property svn:executable set to
trunk/src/core/Template-Installed/lib/Template.pm
r45 r357 8 8 # 9 9 # AUTHOR 10 # Andy Wardley <abw@ andywardley.com>10 # Andy Wardley <abw@wardley.org> 11 11 # 12 12 # COPYRIGHT 13 # Copyright (C) 1996-200 2Andy Wardley. All Rights Reserved.13 # Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved. 14 14 # Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. 15 15 # … … 18 18 # 19 19 # REVISION 20 # $Id: Template.pm ,v 2.80 2004/10/04 10:24:10 abw Exp$20 # $Id: Template.pm 1056 2007-04-27 11:51:47Z abw $ 21 21 # 22 22 #======================================================================== 23 23 24 24 package Template; 25 use base qw( Template::Base );26 27 require 5.005;28 25 29 26 use strict; 30 use vars qw( $VERSION $AUTOLOAD $ERROR $DEBUG $BINMODE ); 31 use Template::Base; 27 use warnings; 28 use base 'Template::Base'; 29 32 30 use Template::Config; 33 31 use Template::Constants; … … 37 35 use File::Path; 38 36 39 ## This is the main version number for the Template Toolkit. 40 ## It is extracted by ExtUtils::MakeMaker and inserted in various places. 41 $VERSION = '2.14'; 42 $ERROR = ''; 43 $DEBUG = 0; 44 $BINMODE = 0 unless defined $BINMODE; 37 our $VERSION = '2.19'; 38 our $ERROR = ''; 39 our $DEBUG = 0; 40 our $BINMODE = 0 unless defined $BINMODE; 41 our $AUTOLOAD; 45 42 46 43 # preload all modules if we're running under mod_perl … … 61 58 my $options = (@opts == 1) && UNIVERSAL::isa($opts[0], 'HASH') 62 59 ? shift(@opts) : { @opts }; 60 61 $options->{ binmode } = $BINMODE 62 unless defined $options->{ binmode }; 63 63 64 $options->{ binmode } = $BINMODE65 unless defined $options->{ binmode };66 67 64 # we're using this for testing in t/output.t and t/filter.t so 68 65 # don't remove it if you don't want tests to fail... … … 77 74 $outstream = "$outpath/$outstream" if $outpath; 78 75 } 79 76 80 77 # send processed template to output stream, checking for error 81 78 return ($self->error($error)) … … 193 190 elsif (open(FP, ">$where")) { 194 191 # binmode option can be 1 or a specific layer, e.g. :utf8 195 my $bm = $options->{ binmode };196 if ($bm && +$bm ==1) {192 my $bm = $options->{ binmode }; 193 if ($bm && $bm eq 1) { 197 194 binmode FP; 198 195 } … … 938 935 =head1 AUTHOR 939 936 940 Andy Wardley E<lt>abw@ andywardley.comE<gt>941 942 L<http://w ww.andywardley.com/|http://www.andywardley.com/>937 Andy Wardley E<lt>abw@wardley.orgE<gt> 938 939 L<http://wardley.org/|http://wardley.org/> 943 940 944 941 … … 947 944 =head1 VERSION 948 945 949 Template Toolkit version 2.1 4, released on 04 October 2004.946 Template Toolkit version 2.19, released on 27 April 2007. 950 947 951 948 =head1 COPYRIGHT 952 949 953 Copyright (C) 1996-200 4Andy Wardley. All Rights Reserved.954 Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. 950 Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved. 951 955 952 956 953 This module is free software; you can redistribute it and/or trunk/src/core/Template-Installed/lib/Template/Base.pm
r45 r357 8 8 # 9 9 # AUTHOR 10 # Andy Wardley <abw@ kfs.org>10 # Andy Wardley <abw@wardley.org> 11 11 # 12 12 # COPYRIGHT 13 # Copyright (C) 1996-200 0Andy Wardley. All Rights Reserved.13 # Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved. 14 14 # Copyright (C) 1998-2000 Canon Research Centre Europe Ltd. 15 15 # … … 17 17 # modify it under the same terms as Perl itself. 18 18 # 19 #------------------------------------------------------------------------ 20 # 21 # $Id: Base.pm,v 2.70 2004/01/30 19:32:21 abw Exp $ 19 # REVISION 20 # $Id: Base.pm 1055 2007-04-27 11:50:40Z abw $ 22 21 # 23 22 #======================================================================== … … 25 24 package Template::Base; 26 25 27 require 5.004;28 29 26 use strict; 30 use vars qw( $VERSION );27 use warnings; 31 28 use Template::Constants; 32 29 33 $VERSION = sprintf("%d.%02d", q$Revision: 2.70 $ =~ /(\d+)\.(\d+)/);30 our $VERSION = 2.77; 34 31 35 32 … … 50 47 51 48 { no strict qw( refs ); 52 $argnames = \@{"$class\::BASEARGS"} || [ ];49 $argnames = \@{"$class\::BASEARGS"} || [ ]; 53 50 } 54 51 55 52 # shift off all mandatory args, returning error if undefined or null 56 53 foreach $arg (@$argnames) { 57 return $class->error("no $arg specified")58 unless ($cfg = shift);59 push(@args, $cfg);54 return $class->error("no $arg specified") 55 unless ($cfg = shift); 56 push(@args, $cfg); 60 57 } 61 58 62 59 # fold all remaining args into a hash, or use provided hash ref 63 # local $" = ', ';64 # print STDERR "args: [@_]\n";65 60 $cfg = defined $_[0] && UNIVERSAL::isa($_[0], 'HASH') ? shift : { @_ }; 66 61 67 62 my $self = bless { 68 map { ($_ => shift @args) } @$argnames,69 _ERROR => '',63 map { ($_ => shift @args) } @$argnames, 64 _ERROR => '', 70 65 DEBUG => 0, 71 66 }, $class; 72 67 73 68 return $self->_init($cfg) ? $self : $class->error($self->error); 74 69 } … … 91 86 92 87 { 93 no strict qw( refs );94 $errvar = ref $self ? \$self->{ _ERROR } : \${"$self\::ERROR"};88 no strict qw( refs ); 89 $errvar = ref $self ? \$self->{ _ERROR } : \${"$self\::ERROR"}; 95 90 } 96 91 if (@_) { 97 $$errvar = ref($_[0]) ? shift : join('', @_);98 return undef;92 $$errvar = ref($_[0]) ? shift : join('', @_); 93 return undef; 99 94 } 100 95 else { 101 return $$errvar;96 return $$errvar; 102 97 } 103 98 } … … 130 125 131 126 unless ($msg =~ /\n$/) { 132 $msg .= ($self->{ DEBUG } & Template::Constants::DEBUG_CALLER)133 ? " at $file line $line\n"134 : "\n";127 $msg .= ($self->{ DEBUG } & Template::Constants::DEBUG_CALLER) 128 ? " at $file line $line\n" 129 : "\n"; 135 130 } 136 131 … … 280 275 =head1 AUTHOR 281 276 282 Andy Wardley E<lt>abw@ andywardley.comE<gt>283 284 L<http://w ww.andywardley.com/|http://www.andywardley.com/>277 Andy Wardley E<lt>abw@wardley.orgE<gt> 278 279 L<http://wardley.org/|http://wardley.org/> 285 280 286 281 … … 289 284 =head1 VERSION 290 285 291 2.7 0, distributed as part of the292 Template Toolkit version 2.1 4, released on 04 October 2004.286 2.77, distributed as part of the 287 Template Toolkit version 2.19, released on 27 April 2007. 293 288 294 289 =head1 COPYRIGHT 295 290 296 Copyright (C) 1996-200 4Andy Wardley. All Rights Reserved.297 Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. 291 Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved. 292 298 293 299 294 This module is free software; you can redistribute it and/or trunk/src/core/Template-Installed/lib/Template/Config.pm
r45 r357 7 7 # 8 8 # AUTHOR 9 # Andy Wardley <abw@ kfs.org>9 # Andy Wardley <abw@wardley.org> 10 10 # 11 11 # COPYRIGHT 12 # Copyright (C) 1996-2000 Andy Wardley. All Rights Reserved. 13 # Copyright (C) 1998-2000 Canon Research Centre Europe Ltd. 12 # Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved. 14 13 # 15 14 # This module is free software; you can redistribute it and/or 16 15 # modify it under the same terms as Perl itself. 17 16 # 18 #------------------------------------------------------------------------ 19 # 20 # $Id: Config.pm,v 2.68 2004/01/30 19:32:23 abw Exp $ 17 # REVISION 18 # $Id: Config.pm 1055 2007-04-27 11:50:40Z abw $ 21 19 # 22 20 #======================================================================== … … 24 22 package Template::Config; 25 23 26 require 5.004;27 28 24 use strict; 29 use base qw( Template::Base ); 25 use warnings; 26 use base 'Template::Base'; 30 27 use vars qw( $VERSION $DEBUG $ERROR $INSTDIR 31 $PARSER $PROVIDER $PLUGINS $FILTERS $ITERATOR28 $PARSER $PROVIDER $PLUGINS $FILTERS $ITERATOR 32 29 $LATEX_PATH $PDFLATEX_PATH $DVIPS_PATH 33 $STASH $SERVICE $CONTEXT $CONSTANTS @PRELOAD );34 35 $VERSION = sprintf("%d.%02d", q$Revision: 2.68 $ =~ /(\d+)\.(\d+)/);30 $STASH $SERVICE $CONTEXT $CONSTANTS @PRELOAD ); 31 32 $VERSION = 2.74; 36 33 $DEBUG = 0 unless defined $DEBUG; 37 34 $ERROR = ''; … … 52 49 $INSTDIR = ''; 53 50 54 # LaTeX executable paths set at installation time by the Makefile.PL55 # Empty strings cause the latex(pdf|dvi|ps) filters to throw an error.56 $LATEX_PATH = '';57 $PDFLATEX_PATH = '';58 $DVIPS_PATH = '';59 51 60 52 #======================================================================== … … 135 127 return undef unless $class->load($PROVIDER); 136 128 return $PROVIDER->new($params) 137 || $class->error("failed to create template provider: ",138 $PROVIDER->error);129 || $class->error("failed to create template provider: ", 130 $PROVIDER->error); 139 131 } 140 132 … … 285 277 } 286 278 287 #------------------------------------------------------------------------288 # latexpaths()289 #290 # Returns a reference to a three element array:291 # [latex_path, pdf2latex_path, dvips_path]292 # These values are determined by Makefile.PL at installation time293 # and are used by the latex(pdf|dvi|ps) filters.294 #------------------------------------------------------------------------295 296 sub latexpaths {297 return [$LATEX_PATH, $PDFLATEX_PATH, $DVIPS_PATH];298 }299 279 300 280 #======================================================================== … … 433 413 =head1 AUTHOR 434 414 435 Andy Wardley E<lt>abw@ andywardley.comE<gt>436 437 L<http://w ww.andywardley.com/|http://www.andywardley.com/>415 Andy Wardley E<lt>abw@wardley.orgE<gt> 416 417 L<http://wardley.org/|http://wardley.org/> 438 418 439 419 … … 442 422 =head1 VERSION 443 423 444 2. 68, distributed as part of the445 Template Toolkit version 2.1 4, released on 04 October 2004.424 2.74, distributed as part of the 425 Template Toolkit version 2.19, released on 27 April 2007. 446 426 447 427 =head1 COPYRIGHT 448 428 449 Copyright (C) 1996-200 4Andy Wardley. All Rights Reserved.450 Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. 429 Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved. 430 451 431 452 432 This module is free software; you can redistribute it and/or trunk/src/core/Template-Installed/lib/Template/Constants.pm
r45 r357 7 7 # 8 8 # AUTHOR 9 # Andy Wardley <abw@ kfs.org>9 # Andy Wardley <abw@wardley.org> 10 10 # 11 11 # COPYRIGHT 12 # Copyright (C) 1996-200 0Andy Wardley. All Rights Reserved.12 # Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved. 13 13 # Copyright (C) 1998-2000 Canon Research Centre Europe Ltd. 14 14 # … … 16 16 # modify it under the same terms as Perl itself. 17 17 # 18 #---------------------------------------------------------------------------- 19 # 20 # $Id: Constants.pm,v 2.68 2004/01/30 19:32:23 abw Exp $ 18 # REVISION 19 # $Id: Constants.pm 1055 2007-04-27 11:50:40Z abw $ 21 20 # 22 21 #============================================================================ … … 24 23 package Template::Constants; 25 24 26 require 5.004;27 25 require Exporter; 28 26 29 27 use strict; 30 use vars qw( $VERSION @ISA @EXPORT_OK %EXPORT_TAGS ); 28 use warnings; 29 use base 'Exporter'; 30 31 use vars qw( @EXPORT_OK %EXPORT_TAGS ); 31 32 use vars qw( $DEBUG_OPTIONS @STATUS @ERROR @CHOMP @DEBUG); 32 33 33 @ISA = qw( Exporter ); 34 $VERSION = sprintf("%d.%02d", q$Revision: 2.68 $ =~ /(\d+)\.(\d+)/); 34 our $VERSION = 2.74; 35 35 36 36 … … 58 58 # CHOMP constants for PRE_CHOMP and POST_CHOMP 59 59 use constant CHOMP_NONE => 0; # do not remove whitespace 60 use constant CHOMP_ALL => 1; # remove whitespace 60 use constant CHOMP_ALL => 1; # remove whitespace up to newline 61 use constant CHOMP_ONE => 1; # new name for CHOMP_ALL 61 62 use constant CHOMP_COLLAPSE => 2; # collapse whitespace to a single space 63 use constant CHOMP_GREEDY => 3; # remove all whitespace including newlines 62 64 63 65 # DEBUG constants to enable various debugging options … … 101 103 @ERROR = qw( ERROR_FILE ERROR_VIEW ERROR_UNDEF ERROR_PERL 102 104 ERROR_RETURN ERROR_FILTER ERROR_PLUGIN ); 103 @CHOMP = qw( CHOMP_NONE CHOMP_ALL CHOMP_ COLLAPSE);105 @CHOMP = qw( CHOMP_NONE CHOMP_ALL CHOMP_ONE CHOMP_COLLAPSE CHOMP_GREEDY ); 104 106 @DEBUG = qw( DEBUG_OFF DEBUG_ON DEBUG_UNDEF DEBUG_VARS 105 107 DEBUG_DIRS DEBUG_STASH DEBUG_CONTEXT DEBUG_PARSER … … 229 231 :chomp # for PRE_CHOMP and POST_CHOMP 230 232 CHOMP_NONE # do not remove whitespace 231 CHOMP_ALL # remove whitespace 233 CHOMP_ONE # remove whitespace to newline 234 CHOMP_ALL # old name for CHOMP_ONE (deprecated) 232 235 CHOMP_COLLAPSE # collapse whitespace to a single space 236 CHOMP_GREEDY # remove all whitespace including newlines 233 237 234 238 :debug … … 253 257 =head1 AUTHOR 254 258 255 Andy Wardley E<lt>abw@ andywardley.comE<gt>256 257 L<http://w ww.andywardley.com/|http://www.andywardley.com/>259 Andy Wardley E<lt>abw@wardley.orgE<gt> 260 261 L<http://wardley.org/|http://wardley.org/> 258 262 259 263 … … 262 266 =head1 VERSION 263 267 264 2. 68, distributed as part of the265 Template Toolkit version 2.1 4, released on 04 October 2004.268 2.74, distributed as part of the 269 Template Toolkit version 2.19, released on 27 April 2007. 266 270 267 271 =head1 COPYRIGHT 268 272 269 Copyright (C) 1996-200 4Andy Wardley. All Rights Reserved.270 Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. 273 Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved. 274 271 275 272 276 This module is free software; you can redistribute it and/or trunk/src/core/Template-Installed/lib/Template/Context.pm
r45 r357 9 9 # 10 10 # AUTHOR 11 # Andy Wardley <abw@ kfs.org>11 # Andy Wardley <abw@wardley.org> 12 12 # 13 13 # COPYRIGHT 14 # Copyright (C) 1996-200 0Andy Wardley. All Rights Reserved.14 # Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved. 15 15 # Copyright (C) 1998-2000 Canon Research Centre Europe Ltd. 16 16 # … … 19 19 # 20 20 # REVISION 21 # $Id: Context.pm ,v 2.91 2004/10/04 10:02:29 abw Exp$21 # $Id: Context.pm 1055 2007-04-27 11:50:40Z abw $ 22 22 # 23 23 #============================================================================ … … 25 25 package Template::Context; 26 26 27 require 5.004;28 29 27 use strict; 30 use vars qw( $VERSION $DEBUG $AUTOLOAD $DEBUG_FORMAT );31 use base qw( Template::Base );28 use warnings; 29 use base 'Template::Base'; 32 30 33 31 use Template::Base; … … 36 34 use Template::Exception; 37 35 38 $VERSION = sprintf("%d.%02d", q$Revision: 2.91 $ =~ /(\d+)\.(\d+)/); 39 $DEBUG_FORMAT = "\n## \$file line \$line : [% \$text %] ##\n"; 40 36 our $VERSION = 2.98; 37 our $DEBUG = 0 unless defined $DEBUG; 38 our $DEBUG_FORMAT = "\n## \$file line \$line : [% \$text %] ##\n"; 39 our $AUTOLOAD; 41 40 42 41 #======================================================================== … … 371 370 372 371 pop(@{$element->{ callers }}) 373 if (UNIVERSAL::isa($ element, 'Template::Document'));372 if (UNIVERSAL::isa($component, 'Template::Document')); 374 373 } 375 374 $stash->set('component', $component); … … 427 426 428 427 FILE: foreach $file (@$files) { 429 my $name = $file;430 431 if ($^O eq 'MSWin32') {432 # let C:/foo through433 $prefix = $1 if $name =~ s/^(\w{2,})://o;434 }435 else {436 $prefix = $1 if $name =~ s/^(\w+)://;437 }438 439 if (defined $prefix) {440 $providers = $self->{ PREFIX_MAP }->{ $prefix }441 || return $self->throw(Template::Constants::ERROR_FILE,442 "no providers for file prefix '$prefix'");443 }444 else {445 $providers = $self->{ PREFIX_MAP }->{ default }446 || $self->{ LOAD_TEMPLATES };447 }448 449 foreach my $provider (@$providers) {450 ($text, $error) = $provider->load($name, $prefix);451 next FILE unless $error;452 if ($error == Template::Constants::STATUS_ERROR) {453 $self->throw($text) if ref $text;454 $self->throw(Template::Constants::ERROR_FILE, $text);455 }456 }457 $self->throw(Template::Constants::ERROR_FILE, "$file: not found");428 my $name = $file; 429 430 if ($^O eq 'MSWin32') { 431 # let C:/foo through 432 $prefix = $1 if $name =~ s/^(\w{2,})://o; 433 } 434 else { 435 $prefix = $1 if $name =~ s/^(\w+)://; 436 } 437 438 if (defined $prefix) { 439 $providers = $self->{ PREFIX_MAP }->{ $prefix } 440 || return $self->throw(Template::Constants::ERROR_FILE, 441 "no providers for file prefix '$prefix'"); 442 } 443 else { 444 $providers = $self->{ PREFIX_MAP }->{ default } 445 || $self->{ LOAD_TEMPLATES }; 446 } 447 448 foreach my $provider (@$providers) { 449 ($text, $error) = $provider->load($name, $prefix); 450 next FILE unless $error; 451 if ($error == Template::Constants::STATUS_ERROR) { 452 $self->throw($text) if ref $text; 453 $self->throw(Template::Constants::ERROR_FILE, $text); 454 } 455 } 456 $self->throw(Template::Constants::ERROR_FILE, "$file: not found"); 458 457 } 459 458 continue { 460 $output .= $text;459 $output .= $text; 461 460 } 462 461 return $output; … … 497 496 # die! die! die! 498 497 if (UNIVERSAL::isa($error, 'Template::Exception')) { 499 die $error;498 die $error; 500 499 } 501 500 elsif (defined $info) { 502 die (Template::Exception->new($error, $info, $output));501 die (Template::Exception->new($error, $info, $output)); 503 502 } 504 503 else { 505 $error ||= '';506 die (Template::Exception->new('undef', $error, $output));504 $error ||= ''; 505 die (Template::Exception->new('undef', $error, $output)); 507 506 } 508 507 … … 534 533 535 534 if (UNIVERSAL::isa($error, 'Template::Exception')) { 536 $error->text($output) if $output;537 return $error;535 $error->text($output) if $output; 536 return $error; 538 537 } 539 538 else { 540 return Template::Exception->new('undef', $error, $output);539 return Template::Exception->new('undef', $error, $output); 541 540 } 542 541 } … … 589 588 # The leave() method is called when the document has finished 590 589 # processing itself. This removes the entry from the BLKSTACK list 591 # that was added visit() above. For persist ance of BLOCK definitions,590 # that was added visit() above. For persistence of BLOCK definitions, 592 591 # the process() method (i.e. the PROCESS directive) does some extra 593 592 # magic to copy BLOCKs into a shared hash. … … 607 606 # object or as text which is compiled into a template. Returns a true 608 607 # value (the $block reference or compiled block reference) if 609 # succes ful or undef on failure. Call error() to retrieve the608 # successful or undef on failure. Call error() to retrieve the 610 609 # relevent error message (i.e. compilation failure). 611 610 #------------------------------------------------------------------------ … … 614 613 my ($self, $name, $block) = @_; 615 614 $block = $self->template(\$block) 616 || return undef617 unless ref $block;615 || return undef 616 unless ref $block; 618 617 $self->{ BLOCKS }->{ $name } = $block; 619 618 } … … 632 631 633 632 foreach my $provider (@{ $self->{ LOAD_FILTERS } }) { 634 ($result, $error) = $provider->store($name, $filter);635 return 1 unless $error;636 $self->throw(&Template::Constants::ERROR_FILTER, $result)637 if $error == &Template::Constants::STATUS_ERROR;633 ($result, $error) = $provider->store($name, $filter); 634 return 1 unless $error; 635 $self->throw(&Template::Constants::ERROR_FILTER, $result) 636 if $error == &Template::Constants::STATUS_ERROR; 638 637 } 639 638 $self->throw(&Template::Constants::ERROR_FILTER, 640 "FILTER providers declined to store filter $name");639 "FILTER providers declined to store filter $name"); 641 640 } 642 641 … … 698 697 # print "*** debug(@args)\n"; 699 698 if (@args) { 700 if ($args[0] =~ /^on|1$/i) {701 $self->{ DEBUG_DIRS } = 1;702 shift(@args);703 }704 elsif ($args[0] =~ /^off|0$/i) {705 $self->{ DEBUG_DIRS } = 0;706 shift(@args);707 }699 if ($args[0] =~ /^on|1$/i) { 700 $self->{ DEBUG_DIRS } = 1; 701 shift(@args); 702 } 703 elsif ($args[0] =~ /^off|0$/i) { 704 $self->{ DEBUG_DIRS } = 0; 705 shift(@args); 706 } 708 707 } 709 708 710 709 if (@args) { 711 if ($args[0] =~ /^msg$/i) {710 if ($args[0] =~ /^msg$/i) { 712 711 return unless $self->{ DEBUG_DIRS }; 713 my $format = $self->{ DEBUG_FORMAT };714 $format = $DEBUG_FORMAT unless defined $format;715 $format =~ s/\$(\w+)/$hash->{ $1 }/ge;716 return $format;717 }718 elsif ($args[0] =~ /^format$/i) {719 $self->{ DEBUG_FORMAT } = $args[1];720 }721 # else ignore712 my $format = $self->{ DEBUG_FORMAT }; 713 $format = $DEBUG_FORMAT unless defined $format; 714 $format =~ s/\$(\w+)/$hash->{ $1 }/ge; 715 return $format; 716 } 717 elsif ($args[0] =~ /^format$/i) { 718 $self->{ DEBUG_FORMAT } = $args[1]; 719 } 720 # else ignore 722 721 } 723 722 … … 744 743 745 744 warn "no such context method/member: $method\n" 746 unless defined ($result = $self->{ uc $method });745 unless defined ($result = $self->{ uc $method }); 747 746 748 747 return $result; … … 778 777 my ($name, $item, $method, $block, $blocks); 779 778 my @itemlut = ( 780 LOAD_TEMPLATES => 'provider',781 LOAD_PLUGINS => 'plugins',782 LOAD_FILTERS => 'filters'779 LOAD_TEMPLATES => 'provider', 780 LOAD_PLUGINS => 'plugins', 781 LOAD_FILTERS => 'filters' 783 782 ); 784 783 785 784 # LOAD_TEMPLATE, LOAD_PLUGINS, LOAD_FILTERS - lists of providers 786 785 while (($name, $method) = splice(@itemlut, 0, 2)) { 787 $item = $config->{ $name }788 || Template::Config->$method($config)789 || return $self->error($Template::Config::ERROR);790 $self->{ $name } = ref $item eq 'ARRAY' ? $item : [ $item ];786 $item = $config->{ $name } 787 || Template::Config->$method($config) 788 || return $self->error($Template::Config::ERROR); 789 $self->{ $name } = ref $item eq 'ARRAY' ? $item : [ $item ]; 791 790 } 792 791 … … 794 793 my $prefix_map = $self->{ PREFIX_MAP } = $config->{ PREFIX_MAP } || { }; 795 794 while (my ($key, $val) = each %$prefix_map) { 796 $prefix_map->{ $key } = [ ref $val ? $val : 797 map { $providers->[$_] } 798 split(/\D+/, $val) ] 799 unless ref $val eq 'ARRAY'; 800 # print(STDERR "prefix $key => $val => [", 801 # join(', ', @{ $prefix_map->{ $key } }), "]\n"); 795 $prefix_map->{ $key } = [ ref $val ? $val : 796 map { $providers->[$_] } split(/\D+/, $val) ] 797 unless ref $val eq 'ARRAY'; 802 798 } 803 799 804 800 # STASH 805 801 $self->{ STASH } = $config->{ STASH } || do { 806 my $predefs = $config->{ VARIABLES }807 || $config->{ PRE_DEFINE }808 || { };809 810 # hack to get stash to know about debug mode811 $predefs->{ _DEBUG } = ( ($config->{ DEBUG } || 0)812 & &Template::Constants::DEBUG_UNDEF ) ? 1 : 0813 unless defined $predefs->{ _DEBUG };814 815 Template::Config->stash($predefs)816 || return $self->error($Template::Config::ERROR);802 my $predefs = $config->{ VARIABLES } 803 || $config->{ PRE_DEFINE } 804 || { }; 805 806 # hack to get stash to know about debug mode 807 $predefs->{ _DEBUG } = ( ($config->{ DEBUG } || 0) 808 & &Template::Constants::DEBUG_UNDEF ) ? 1 : 0 809 unless defined $predefs->{ _DEBUG }; 810 811 Template::Config->stash($predefs) 812 || return $self->error($Template::Config::ERROR); 817 813 }; 818 814 819 815 # compile any template BLOCKS specified as text 820 816 $blocks = $config->{ BLOCKS } || { }; 821 817 $self->{ INIT_BLOCKS } = $self->{ BLOCKS } = { 822 map {823 $block = $blocks->{ $_ };824 $block = $self->template(\$block)825 || return undef826 unless ref $block;827 ($_ => $block);828 }829 keys %$blocks818 map { 819 $block = $blocks->{ $_ }; 820 $block = $self->template(\$block) 821 || return undef 822 unless ref $block; 823 ($_ => $block); 824 } 825 keys %$blocks 830 826 }; 831 827 … … 875 871 876 872 foreach $key (qw( RECURSION EVAL_PERL TRIM )) { 877 $output .= sprintf($format, $key, $self->{ $key });873 $output .= sprintf($format, $key, $self->{ $key }); 878 874 } 879 875 foreach my $pname (qw( LOAD_TEMPLATES LOAD_PLUGINS LOAD_FILTERS )) { 880 my $provtext = "[\n";881 foreach my $prov (@{ $self->{ $pname } }) {882 $provtext .= $prov->_dump();883 # $provtext .= ",\n";884 }885 $provtext =~ s/\n/\n /g;886 $provtext =~ s/\s+$//;887 $provtext .= ",\n ]";888 $output .= sprintf($format, $pname, $provtext);876 my $provtext = "[\n"; 877 foreach my $prov (@{ $self->{ $pname } }) { 878 $provtext .= $prov->_dump(); 879 # $provtext .= ",\n"; 880 } 881 $provtext =~ s/\n/\n /g; 882 $provtext =~ s/\s+$//; 883 $provtext .= ",\n ]"; 884 $output .= sprintf($format, $pname, $provtext); 889 885 } 890 886 $output .= sprintf($format, STASH => $self->{ STASH }->_dump()); … … 1546 1542 =head1 AUTHOR 1547 1543 1548 Andy Wardley E<lt>abw@ andywardley.comE<gt>1549 1550 L<http://w ww.andywardley.com/|http://www.andywardley.com/>1544 Andy Wardley E<lt>abw@wardley.orgE<gt> 1545 1546 L<http://wardley.org/|http://wardley.org/> 1551 1547 1552 1548 … … 1555 1551 =head1 VERSION 1556 1552
