cvsuser 02/05/09 15:16:30
Modified: P5EEx/Blue/P5EEx/Blue TemplateEngine.pm
Log:
changed builtin engine to use [% %] rather than { }, also used eval so undefined
widgets wouldn't croak
Revision Changes Path
1.5 +30 -18 p5ee/P5EEx/Blue/P5EEx/Blue/TemplateEngine.pm
Index: TemplateEngine.pm
===================================================================
RCS file: /cvs/public/p5ee/P5EEx/Blue/P5EEx/Blue/TemplateEngine.pm,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -w -r1.4 -r1.5
--- TemplateEngine.pm 14 Apr 2002 03:52:08 -0000 1.4
+++ TemplateEngine.pm 9 May 2002 22:16:30 -0000 1.5
@@ -1,6 +1,6 @@
#############################################################################
-## $Id: TemplateEngine.pm,v 1.4 2002/04/14 03:52:08 spadkins Exp $
+## $Id: TemplateEngine.pm,v 1.5 2002/05/09 22:16:30 spadkins Exp $
#############################################################################
package P5EEx::Blue::TemplateEngine;
@@ -271,23 +271,31 @@
$self->{context}->dbgprint("DataTable->substitute()")
if ($P5EEx::Blue::DEBUG && $self->{context}->dbg());
- my ($phrase, $var, $value, $context);
+ my ($phrase, $var, $value, $context, $expand);
$context = $self->{context};
$values = {} if (! defined $values);
- while ( $template_text =~ /^\[([^\[\]]+)\]$/ ) {
+ while ( $template_text =~ /^\{([^\{\}]+)\}$/ ) {
$phrase = $1;
- while ( $phrase =~ /\{([^\{\}]+)\}/ ) {
- $var = $1;
- if (defined $values->{$var}) {
+ while ( $phrase =~ /\[%(\+?)([^%]+)%\]/ ) {
+ $expand = $1;
+ $var = $2;
+ if ($expand) {
+ eval {
+ $value = $context->widget($var)->html();
+ };
+ $value = "[$var: not yet defined]" if ($@);
+ $phrase =~ s/\[%\+$var%\]/$value/g;
+ }
+ elsif (defined $values->{$var}) {
$value = $values->{$var};
- $phrase =~ s/\{$var\}/$value/g;
+ $phrase =~ s/\[%$var%\]/$value/g;
}
else {
if ($var =~ /^(.+)\.([^.]+)$/) {
$value = $context->wget($1, $2);
if (defined $value) {
- $phrase =~ s/\{$var\}/$value/g;
+ $phrase =~ s/\[%$var%\]/$value/g;
}
else {
$phrase = "";
@@ -299,30 +307,34 @@
}
}
if ($phrase eq "") {
- $template_text =~ s/\[[^\[\]]+\]\n?//; # zap it including (optional)
ending newline
+ $template_text =~ s/^\{[^\{\}]+\}\n?//; # zap it including (optional)
ending newline
}
else {
- $template_text =~ s/\[[^\[\]]+\]/$phrase/;
+ $template_text =~ s/^\{[^\{\}]+\}/$phrase/;
}
}
- while ( $template_text =~ /\{([^\{\}]+)\}/ ) { # vars of the form {var} or
{%var}
- $var = $1;
- if ($var =~ s/^%//) {
+ while ( $template_text =~ /\[%(\+?)([^%]+)%\]/ ) { # vars of the form [%var%]
or [%+var%]
+ $expand = $1;
+ $var = $2;
+ if ($expand) {
+ eval {
$value = $context->widget($var)->html();
- $template_text =~ s/\{%$var\}/$value/g;
+ };
+ $value = "[$var: not yet defined]" if ($@);
+ $template_text =~ s/\[%\+$var%\]/$value/g;
}
elsif (defined $values->{$var}) {
$value = $values->{$var};
- $template_text =~ s/\{$var\}/$value/g;
+ $template_text =~ s/\[%$var%\]/$value/g;
}
else {
$value = "";
if ($var =~ /^(.+)\.([^.]+)$/) {
$value = $context->wget($1, $2);
}
- }
$value = "" if (!defined $value);
$template_text =~ s/\{$var\}/$value/g;
+ }
}
$template_text;
}