]> mj.ucw.cz Git - temple.git/blobdiff - UCW/Temple.pm
The argument of UCW::Temple::start() is no longer mandatory
[temple.git] / UCW / Temple.pm
index bafe91d6bf65593be184178c806414b1ea02bbf1..1a3dc971f10f5980da10ccbdea2458d3151db1f3 100644 (file)
@@ -16,10 +16,18 @@ our @EXPORT_OK = qw();
 
 use IO::File;
 
+our $arguments;
 our @cond;
 
 sub out {
        $T::out_func->(@_);
+       return;
+}
+
+our %deps = ();
+
+sub add_depend($) {
+       $deps{$_[0]} = 1;
 }
 
 sub get_nested($$$) {
@@ -82,7 +90,7 @@ sub eval_func($$) {
                }
                # print "Cond stack: @cond\n";
        } else {
-               my $res = eval_if_ok("$f($a)");
+               my $res = eval_if_ok("$f $a");
                out $res if defined $res;
        }
 }
@@ -98,7 +106,7 @@ sub parse_string($) {
                } elsif ($t =~ /\G\@#[^\n]*\n/cgs) {
                        # a comment, which is ignored
                } elsif ($t =~ /\G\@\@/cgs) {
-                       out "\@";
+                       out "\@" if $cond[0] > 0;
                } elsif ($t =~ /\G\@{/cgs) {
                        my $x = get_nested(\$t, "{", "}");
                        out eval_if_ok($x);
@@ -107,6 +115,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, '(', ')');
@@ -127,6 +140,7 @@ sub parse_string($) {
 
 sub parse_file($) {
        my ($name) = @_;
+       add_depend($name);
        my $fh = new IO::File $name;
        die "Unable to open $name: $!" unless defined $fh;
        my $text;
@@ -135,8 +149,9 @@ sub parse_file($) {
        parse_string($text);
 }
 
-sub start()
+sub start(;$)
 {
+       $arguments = $_[0];
        @cond = (1);
 }
 
@@ -145,15 +160,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();
 }
 
@@ -180,6 +197,7 @@ sub include {
 sub load {
        my $f = shift @_;
        (!defined($f) || @_) and die "\@load requires only one argument";
+       UCW::Temple::add_depend($f);
        require $f;
        return;
 }