# Optimisation.
use Memoize;
memoize("abs2rel");
+memoize("pagespec_translate");
use vars qw{%config %links %oldlinks %oldpagemtime %pagectime
%renderedfiles %pagesources %depends %hooks %forcerebuild};
sub defaultconfig () { #{{{
- wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$|\.rss$)},
+ wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.x?html?$|\.rss$)},
wiki_link_regexp => qr/\[\[(?:([^\]\|]+)\|)?([^\s\]]+)\]\]/,
wiki_processor_regexp => qr/\[\[(\w+)\s+([^\]]*)\]\]/,
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
return "($a) or ($b)";
} #}}}
-sub pagespec_match ($$) { #{{{
- my $page=shift;
+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 eq "(" || $word eq ")" || $word eq "!") {
$code.=" ".$word;
}
- elsif ($word =~ /^(link|backlink|creation_month|creation_year|creation_day)\((.+)\)$/) {
+ elsif ($word =~ /^(link|backlink|created_before|created_after|creation_month|creation_year|creation_day)\((.+)\)$/) {
$code.=" match_$1(\$page, ".safequote($2).")";
}
else {
}
}
- return eval $code;
+ return $code;
+} #}}}
+
+sub pagespec_match ($$) { #{{{
+ my $page=shift;
+ my $spec=shift;
+
+ return eval pagespec_translate($spec);
} #}}}
sub match_glob ($$) { #{{{
} #}}}
sub match_backlink ($$) { #{{{
+ match_link(pop, pop);
+} #}}}
+
+sub match_created_before ($$) { #{{{
my $page=shift;
- my $linkto=shift;
+ my $testpage=shift;
- my $links = $links{$linkto} or return undef;
- foreach my $p (@$links) {
- return 1 if lc $p eq $page;
+ if (exists $pagectime{$testpage}) {
+ return $pagectime{$page} < $pagectime{$testpage};
+ }
+ else {
+ return 0;
+ }
+} #}}}
+
+sub match_created_after ($$) { #{{{
+ my $page=shift;
+ my $testpage=shift;
+
+ if (exists $pagectime{$testpage}) {
+ return $pagectime{$page} > $pagectime{$testpage};
+ }
+ else {
+ return 0;
}
- return 0;
} #}}}
sub match_creation_day ($$) { #{{{
- return if (gmtime($pagectime{shift()}))[3] == shift;
+ return ((gmtime($pagectime{shift()}))[3] == shift);
} #}}}
sub match_creation_month ($$) { #{{{
- return if (gmtime($pagectime{shift()}))[4] + 1 == shift;
+ return ((gmtime($pagectime{shift()}))[4] + 1 == shift);
} #}}}
sub match_creation_year ($$) { #{{{
- return if (gmtime($pagectime{shift()}))[5] + 1900 == shift;
+ return ((gmtime($pagectime{shift()}))[5] + 1900 == shift);
} #}}}
-
1