]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki.pm
oops
[ikiwiki.git] / IkiWiki.pm
index 7ead13cf66e054fc54b9efd30929a8155c69b010..1a5cf52ddea717bf366351e4a79c18460be3006a 100644 (file)
@@ -10,6 +10,7 @@ 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};
@@ -271,7 +272,9 @@ sub pagetitle ($) { #{{{
 sub titlepage ($) { #{{{
        my $title=shift;
        $title=~y/ /_/;
-       $title=~s/([^-[:alnum:]_:+\/.])/"__".ord($1)."__"/eg;
+       # Note: [:alnum:] is not used here, on purpose; unicode
+       # not allowed in urls.
+       $title=~s/([^-A-Za-z0-9_:+\/.])/"__".ord($1)."__"/eg;
        return $title;
 } #}}}
 
@@ -529,8 +532,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 +555,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 +563,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 ($$) { #{{{
@@ -571,7 +582,7 @@ sub match_glob ($$) { #{{{
        $glob=~s/\\\*/.*/g;
        $glob=~s/\\\?/./g;
 
-       return $page=~/^$glob$/;
+       return $page=~/^$glob$/i;
 } #}}}
 
 sub match_link ($$) { #{{{
@@ -586,27 +597,43 @@ sub match_link ($$) { #{{{
 } #}}}
 
 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 (localtime($pagectime{shift()}))[3] == shift;
+       return ((gmtime($pagectime{shift()}))[3] == shift);
 } #}}}
 
 sub match_creation_month ($$) { #{{{
-       return if (localtime($pagectime{shift()}))[4] + 1 == shift;
+       return ((gmtime($pagectime{shift()}))[4] + 1 == shift);
 } #}}}
 
 sub match_creation_year ($$) { #{{{
-       return if (localtime($pagectime{shift()}))[5] + 1900 == shift;
+       return ((gmtime($pagectime{shift()}))[5] + 1900 == shift);
 } #}}}
 
-
 1