X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/3a95b4b13254dbdbd94074d6da9fbeba99d08349..0708bb8aecaa6f4edcb60d84ed6555d61f83a2bc:/IkiWiki.pm?ds=sidebyside diff --git a/IkiWiki.pm b/IkiWiki.pm index 57c7d8f58..5bb8ea1c9 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -10,12 +10,13 @@ use open qw{:utf8 :std}; # 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:]_.:\/+]+$)/, @@ -529,8 +530,9 @@ sub pagespec_merge ($$) { #{{{ 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. @@ -551,7 +553,7 @@ sub pagespec_match ($$) { #{{{ 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 { @@ -559,7 +561,14 @@ sub pagespec_match ($$) { #{{{ } } - return eval $code; + return $code; +} #}}} + +sub pagespec_match ($$) { #{{{ + my $page=shift; + my $spec=shift; + + return eval pagespec_translate($spec); } #}}} sub match_glob ($$) { #{{{ @@ -589,17 +598,40 @@ sub match_backlink ($$) { #{{{ match_link(pop, pop); } #}}} +sub match_created_before ($$) { #{{{ + my $page=shift; + my $testpage=shift; + + 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; + } +} #}}} + 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