use UNIVERSAL;
sub import { #{{{
+ hook(type => "getsetup", id => "conditional", call => \&getsetup);
hook(type => "preprocess", id => "if", call => \&preprocess_if);
} # }}}
+sub getsetup { #{{{
+ return
+ plugin => {
+ safe => 1,
+ rebuild => undef,
+ },
+} #}}}
+
sub preprocess_if (@) { #{{{
my %params=@_;
- if (! exists $params{test} || ! exists $params{then}) {
- return "[[if ".gettext('"test" and "then" parameters are required')."]]";
+ foreach my $param (qw{test then}) {
+ if (! exists $params{$param}) {
+ error sprintf(gettext('%s parameter is required'), $param);
+ }
}
my $result=0;
- # An optimisation to avoid needless looping over every page
- # and adding of dependencies for simple uses of some of the
- # tests.
- if ($params{test} =~ /^(enabled|sourcepage|destpage)\((.*)\)$/) {
+ if ((exists $params{all} && lc $params{all} eq "no") ||
+ # An optimisation to avoid needless looping over every page
+ # and adding of dependencies for simple uses of some of the
+ # tests.
+ $params{test} =~ /^([\s\!()]*((enabled|sourcepage|destpage|included)\([^)]*\)|(and|or))[\s\!()]*)+$/) {
+ add_depends($params{page}, "($params{test}) and $params{page}");
$result=pagespec_match($params{page}, $params{test},
location => $params{page},
sourcepage => $params{page},
$ret="";
}
return IkiWiki::preprocess($params{page}, $params{destpage},
- IkiWiki::filter($params{page}, $ret));
+ IkiWiki::filter($params{page}, $params{destpage}, $ret));
} # }}}
package IkiWiki::PageSpec;
}
} #}}}
-sub match_included ($$;$) { #{{{
+sub match_included ($$;@) { #{{{
shift;
shift;
my %params=@_;