1#============================================================= -*-Perl-*- 2# 3# Template::Constants.pm 4# 5# DESCRIPTION 6# Definition of constants for the Template Toolkit. 7# 8# AUTHOR 9# Andy Wardley <abw@wardley.org> 10# 11# COPYRIGHT 12# Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved. 13# 14# This module is free software; you can redistribute it and/or 15# modify it under the same terms as Perl itself. 16# 17#============================================================================ 18 19package Template::Constants; 20 21require Exporter; 22use strict; 23use warnings; 24use Exporter; 25# Perl::MinimumVersion seems to think this is a Perl 5.008ism... 26# use base qw( Exporter ); 27use vars qw( @EXPORT_OK %EXPORT_TAGS ); 28use vars qw( $DEBUG_OPTIONS @STATUS @ERROR @CHOMP @DEBUG @ISA ); 29# ... so we'll do it the Old Skool way just to keep it quiet 30@ISA = qw( Exporter ); 31 32our $VERSION = 2.75; 33 34 35#======================================================================== 36# ----- EXPORTER ----- 37#======================================================================== 38 39# STATUS constants returned by directives 40use constant STATUS_OK => 0; # ok 41use constant STATUS_RETURN => 1; # ok, block ended by RETURN 42use constant STATUS_STOP => 2; # ok, stoppped by STOP 43use constant STATUS_DONE => 3; # ok, iterator done 44use constant STATUS_DECLINED => 4; # ok, declined to service request 45use constant STATUS_ERROR => 255; # error condition 46 47# ERROR constants for indicating exception types 48use constant ERROR_RETURN => 'return'; # return a status code 49use constant ERROR_FILE => 'file'; # file error: I/O, parse, recursion 50use constant ERROR_VIEW => 'view'; # view error 51use constant ERROR_UNDEF => 'undef'; # undefined variable value used 52use constant ERROR_PERL => 'perl'; # error in [% PERL %] block 53use constant ERROR_FILTER => 'filter'; # filter error 54use constant ERROR_PLUGIN => 'plugin'; # plugin error 55 56# CHOMP constants for PRE_CHOMP and POST_CHOMP 57use constant CHOMP_NONE => 0; # do not remove whitespace 58use constant CHOMP_ALL => 1; # remove whitespace up to newline 59use constant CHOMP_ONE => 1; # new name for CHOMP_ALL 60use constant CHOMP_COLLAPSE => 2; # collapse whitespace to a single space 61use constant CHOMP_GREEDY => 3; # remove all whitespace including newlines 62 63# DEBUG constants to enable various debugging options 64use constant DEBUG_OFF => 0; # do nothing 65use constant DEBUG_ON => 1; # basic debugging flag 66use constant DEBUG_UNDEF => 2; # throw undef on undefined variables 67use constant DEBUG_VARS => 4; # general variable debugging 68use constant DEBUG_DIRS => 8; # directive debugging 69use constant DEBUG_STASH => 16; # general stash debugging 70use constant DEBUG_CONTEXT => 32; # context debugging 71use constant DEBUG_PARSER => 64; # parser debugging 72use constant DEBUG_PROVIDER => 128; # provider debugging 73use constant DEBUG_PLUGINS => 256; # plugins debugging 74use constant DEBUG_FILTERS => 512; # filters debugging 75use constant DEBUG_SERVICE => 1024; # context debugging 76use constant DEBUG_ALL => 2047; # everything 77 78# extra debugging flags 79use constant DEBUG_CALLER => 4096; # add caller file/line 80use constant DEBUG_FLAGS => 4096; # bitmask to extraxt flags 81 82$DEBUG_OPTIONS = { 83 &DEBUG_OFF => off => off => &DEBUG_OFF, 84 &DEBUG_ON => on => on => &DEBUG_ON, 85 &DEBUG_UNDEF => undef => undef => &DEBUG_UNDEF, 86 &DEBUG_VARS => vars => vars => &DEBUG_VARS, 87 &DEBUG_DIRS => dirs => dirs => &DEBUG_DIRS, 88 &DEBUG_STASH => stash => stash => &DEBUG_STASH, 89 &DEBUG_CONTEXT => context => context => &DEBUG_CONTEXT, 90 &DEBUG_PARSER => parser => parser => &DEBUG_PARSER, 91 &DEBUG_PROVIDER => provider => provider => &DEBUG_PROVIDER, 92 &DEBUG_PLUGINS => plugins => plugins => &DEBUG_PLUGINS, 93 &DEBUG_FILTERS => filters => filters => &DEBUG_FILTERS, 94 &DEBUG_SERVICE => service => service => &DEBUG_SERVICE, 95 &DEBUG_ALL => all => all => &DEBUG_ALL, 96 &DEBUG_CALLER => caller => caller => &DEBUG_CALLER, 97}; 98 99@STATUS = qw( STATUS_OK STATUS_RETURN STATUS_STOP STATUS_DONE 100 STATUS_DECLINED STATUS_ERROR ); 101@ERROR = qw( ERROR_FILE ERROR_VIEW ERROR_UNDEF ERROR_PERL 102 ERROR_RETURN ERROR_FILTER ERROR_PLUGIN ); 103@CHOMP = qw( CHOMP_NONE CHOMP_ALL CHOMP_ONE CHOMP_COLLAPSE CHOMP_GREEDY ); 104@DEBUG = qw( DEBUG_OFF DEBUG_ON DEBUG_UNDEF DEBUG_VARS 105 DEBUG_DIRS DEBUG_STASH DEBUG_CONTEXT DEBUG_PARSER 106 DEBUG_PROVIDER DEBUG_PLUGINS DEBUG_FILTERS DEBUG_SERVICE 107 DEBUG_ALL DEBUG_CALLER DEBUG_FLAGS ); 108 109@EXPORT_OK = ( @STATUS, @ERROR, @CHOMP, @DEBUG ); 110%EXPORT_TAGS = ( 111 'all' => [ @EXPORT_OK ], 112 'status' => [ @STATUS ], 113 'error' => [ @ERROR ], 114 'chomp' => [ @CHOMP ], 115 'debug' => [ @DEBUG ], 116); 117 118 119sub debug_flags { 120 my ($self, $debug) = @_; 121 my (@flags, $flag, $value); 122 $debug = $self unless defined($debug) || ref($self); 123 124 if ($debug =~ /^\d+$/) { 125 foreach $flag (@DEBUG) { 126 next if $flag =~ /^DEBUG_(OFF|ALL|FLAGS)$/; 127 128 # don't trash the original 129 my $copy = $flag; 130 $flag =~ s/^DEBUG_//; 131 $flag = lc $flag; 132 return $self->error("no value for flag: $flag") 133 unless defined($value = $DEBUG_OPTIONS->{ $flag }); 134 $flag = $value; 135 136 if ($debug & $flag) { 137 $value = $DEBUG_OPTIONS->{ $flag }; 138 return $self->error("no value for flag: $flag") unless defined $value; 139 push(@flags, $value); 140 } 141 } 142 return wantarray ? @flags : join(', ', @flags); 143 } 144 else { 145 @flags = split(/\W+/, $debug); 146 $debug = 0; 147 foreach $flag (@flags) { 148 $value = $DEBUG_OPTIONS->{ $flag }; 149 return $self->error("unknown debug flag: $flag") unless defined $value; 150 $debug |= $value; 151 } 152 return $debug; 153 } 154} 155 156 1571; 158 159__END__ 160 161=head1 NAME 162 163Template::Constants - Defines constants for the Template Toolkit 164 165=head1 SYNOPSIS 166 167 use Template::Constants qw( :status :error :all ); 168 169=head1 DESCRIPTION 170 171The C<Template::Constants> modules defines, and optionally exports into the 172caller's namespace, a number of constants used by the L<Template> package. 173 174Constants may be used by specifying the C<Template::Constants> package 175explicitly: 176 177 use Template::Constants; 178 print Template::Constants::STATUS_DECLINED; 179 180Constants may be imported into the caller's namespace by naming them as 181options to the C<use Template::Constants> statement: 182 183 use Template::Constants qw( STATUS_DECLINED ); 184 print STATUS_DECLINED; 185 186Alternatively, one of the following tagset identifiers may be specified 187to import sets of constants: 'C<:status>', 'C<:error>', 'C<:all>'. 188 189 use Template::Constants qw( :status ); 190 print STATUS_DECLINED; 191 192Consult the documentation for the C<Exporter> module for more information 193on exporting variables. 194 195=head1 EXPORTABLE TAG SETS 196 197The following tag sets and associated constants are defined: 198 199 :status 200 STATUS_OK # no problem, continue 201 STATUS_RETURN # ended current block then continue (ok) 202 STATUS_STOP # controlled stop (ok) 203 STATUS_DONE # iterator is all done (ok) 204 STATUS_DECLINED # provider declined to service request (ok) 205 STATUS_ERROR # general error condition (not ok) 206 207 :error 208 ERROR_RETURN # return a status code (e.g. 'stop') 209 ERROR_FILE # file error: I/O, parse, recursion 210 ERROR_UNDEF # undefined variable value used 211 ERROR_PERL # error in [% PERL %] block 212 ERROR_FILTER # filter error 213 ERROR_PLUGIN # plugin error 214 215 :chomp # for PRE_CHOMP and POST_CHOMP 216 CHOMP_NONE # do not remove whitespace 217 CHOMP_ONE # remove whitespace to newline 218 CHOMP_ALL # old name for CHOMP_ONE (deprecated) 219 CHOMP_COLLAPSE # collapse whitespace to a single space 220 CHOMP_GREEDY # remove all whitespace including newlines 221 222 :debug 223 DEBUG_OFF # do nothing 224 DEBUG_ON # basic debugging flag 225 DEBUG_UNDEF # throw undef on undefined variables 226 DEBUG_VARS # general variable debugging 227 DEBUG_DIRS # directive debugging 228 DEBUG_STASH # general stash debugging 229 DEBUG_CONTEXT # context debugging 230 DEBUG_PARSER # parser debugging 231 DEBUG_PROVIDER # provider debugging 232 DEBUG_PLUGINS # plugins debugging 233 DEBUG_FILTERS # filters debugging 234 DEBUG_SERVICE # context debugging 235 DEBUG_ALL # everything 236 DEBUG_CALLER # add caller file/line info 237 DEBUG_FLAGS # bitmap used internally 238 239 :all 240 All the above constants. 241 242=head1 AUTHOR 243 244Andy Wardley E<lt>abw@wardley.orgE<gt> L<http://wardley.org/> 245 246=head1 COPYRIGHT 247 248Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved. 249 250This module is free software; you can redistribute it and/or 251modify it under the same terms as Perl itself. 252 253=head1 SEE ALSO 254 255L<Template>, C<Exporter> 256 257=cut 258 259# Local Variables: 260# mode: perl 261# perl-indent-level: 4 262# indent-tabs-mode: nil 263# End: 264# 265# vim: expandtab shiftwidth=4: 266