]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki.pm
* -CSD does not affect modules, so readfile() was not using the utf-8 input
[ikiwiki.git] / IkiWiki.pm
index ce9542f628ecbc055ecd331742e438ef3e6f56e9..76472302e12a9bce6c3989e90969399184a9cafd 100644 (file)
@@ -163,7 +163,12 @@ sub readfile ($;$) { #{{{
        
        local $/=undef;
        open (IN, $file) || error("failed to read $file: $!");
        
        local $/=undef;
        open (IN, $file) || error("failed to read $file: $!");
-       binmode(IN) if $binary;
+       if (! $binary) {
+               binmode(IN, ":utf8");
+       }
+       else {
+               binmode(IN);
+       }
        my $ret=<IN>;
        close IN;
        return $ret;
        my $ret=<IN>;
        close IN;
        return $ret;
@@ -195,7 +200,12 @@ sub writefile ($$$;$) { #{{{
        }
        
        open (OUT, ">$destdir/$file") || error("failed to write $destdir/$file: $!");
        }
        
        open (OUT, ">$destdir/$file") || error("failed to write $destdir/$file: $!");
-       binmode(OUT) if $binary;
+       if (! $binary) {
+               binmode(OUT, ":utf8");
+       }
+       else {
+               binmode(OUT);
+       }
        print OUT $content;
        close OUT;
 } #}}}
        print OUT $content;
        close OUT;
 } #}}}
@@ -401,13 +411,27 @@ sub glob_match ($$) { #{{{
        my $page=shift;
        my $glob=shift;
 
        my $page=shift;
        my $glob=shift;
 
-       # turn glob into safe regexp
-       $glob=quotemeta($glob);
-       $glob=~s/\\\*/.*/g;
-       $glob=~s/\\\?/./g;
-       $glob=~s!\\/!/!g;
-       
-       $page=~/^$glob$/i;
+       if ($glob =~ /^link\((.+)\)$/) {
+               my $rev = $links{$page} or return undef;
+               foreach my $p (@$rev) {
+                       return 1 if lc $p eq $1;
+               }
+               return 0;
+       } elsif ($glob =~ /^backlink\((.+)\)$/) {
+               my $rev = $links{$1} or return undef;
+               foreach my $p (@$rev) {
+                       return 1 if lc $p eq $page;
+               }
+               return 0;
+       } else {
+               # turn glob into safe regexp
+               $glob=quotemeta($glob);
+               $glob=~s/\\\*/.*/g;
+               $glob=~s/\\\?/./g;
+               $glob=~s!\\/!/!g;
+               
+               return $page=~/^$glob$/i;
+       }
 } #}}}
 
 sub globlist_match ($$) { #{{{
 } #}}}
 
 sub globlist_match ($$) { #{{{