my $page=shift;
my $pagespec=shift;
+ return unless pagespec_valid($pagespec);
+
if (! exists $depends{$page}) {
$depends{$page}=$pagespec;
}
} #}}}
sub pagespec_translate ($) { #{{{
- # This assumes that $page is in scope in the function
- # that evalulates the translated pagespec code.
my $spec=shift;
# Support for old-style GlobLists.
}
elsif ($word =~ /^(\w+)\((.*)\)$/) {
if (exists $IkiWiki::PageSpec::{"match_$1"}) {
- $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@params)";
+ $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)";
}
else {
$code.=' 0';
}
}
else {
- $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@params)";
+ $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@_)";
}
}
- return $code;
+ return eval 'sub { my $page=shift; '.$code.' }';
} #}}}
sub pagespec_match ($$;@) { #{{{
unshift @params, 'location';
}
- my $ret=eval pagespec_translate($spec);
+ my $sub=pagespec_translate($spec);
return IkiWiki::FailReason->new('syntax error') if $@;
- return $ret;
+ return $sub->($page, @params);
+} #}}}
+
+sub pagespec_valid ($) { #{{{
+ my $spec=shift;
+
+ my $sub=pagespec_translate($spec);
+ return ! $@;
} #}}}
package IkiWiki::FailReason;