]> mj.ucw.cz Git - temple.git/blobdiff - UCW/Temple.pm
UCW::Temple: Support substitution of named arguments via @(name)
[temple.git] / UCW / Temple.pm
index a7591e525271572c4195b87fe1068937a94f8ad3..6efa0905f45353d855f13ce7c4b81229bae5c11f 100644 (file)
@@ -16,6 +16,7 @@ our @EXPORT_OK = qw();
 
 use IO::File;
 
+our $arguments;
 our @cond;
 
 sub out {
@@ -108,6 +109,11 @@ sub parse_string($) {
                        $x =~ s/^\[//;
                        $x =~ s/\]$//;
                        eval_if_ok($x);
+               } elsif ($t =~ /\G@\(/cgs) {
+                       my $x = get_nested(\$t, '\(', '\)');
+                       $x =~ s/^\(//;
+                       $x =~ s/\)$//;
+                       out (defined($arguments->{$x}) ? $arguments->{$x} : "");
                } elsif ($t =~ /\G\@(\w+)\(/cgs) {
                        my $func = $1;
                        my $args = get_nested(\$t, '(', ')');
@@ -136,8 +142,9 @@ sub parse_file($) {
        parse_string($text);
 }
 
-sub start()
+sub start($)
 {
+       $arguments = $_[0];
        @cond = (1);
 }
 
@@ -146,15 +153,17 @@ sub finish()
        $#cond and die "Unterminated \@if (depth $#cond)";
 }
 
-sub process_file($) {
-       start();
-       parse_file($_[0]);
+sub process_file($;$) {
+       my ($name, $args) = @_;
+       start($args);
+       parse_file($name);
        finish();
 }
 
-sub process_string($) {
-       start();
-       parse_string($_[0]);
+sub process_string($;$) {
+       my ($string, $args) = @_;
+       start($args);
+       parse_string($string);
        finish();
 }