]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki.pm
Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info
[git.ikiwiki.info.git] / IkiWiki.pm
index a876bbb445353ac254d0b872709754289106077e..e260fffea7aad7802e673541533056ad6960a118 100644 (file)
@@ -18,10 +18,10 @@ use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
-                 bestlink htmllink readfile writefile pagetype srcfile pagename
-                 displaytime will_render gettext urlto targetpage
-                add_underlay pagetitle titlepage linkpage newpagefile
-                inject
+                 pagespec_match_list bestlink htmllink readfile writefile
+                pagetype srcfile pagename displaytime will_render gettext urlto
+                targetpage add_underlay pagetitle titlepage linkpage
+                newpagefile inject
                  %config %links %pagestate %wikistate %renderedfiles
                  %pagesources %destsources);
 our $VERSION = 3.00; # plugin interface version, next is ikiwiki version
                  %config %links %pagestate %wikistate %renderedfiles
                  %pagesources %destsources);
 our $VERSION = 3.00; # plugin interface version, next is ikiwiki version
@@ -321,7 +321,7 @@ sub getsetup () {
                default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
                        qr/\.x?html?$/, qr/\.ikiwiki-new$/,
                        qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
                default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
                        qr/\.x?html?$/, qr/\.ikiwiki-new$/,
                        qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
-                       qr/(^|\/)_MTN\//,
+                       qr/(^|\/)_MTN\//, qr/(^|\/)_darcs\//,
                        qr/\.dpkg-tmp$/],
                description => "regexps of source files to ignore",
                safe => 0,
                        qr/\.dpkg-tmp$/],
                description => "regexps of source files to ignore",
                safe => 0,
@@ -639,8 +639,10 @@ sub pagetype ($) {
        if ($file =~ /\.([^.]+)$/) {
                return $1 if exists $hooks{htmlize}{$1};
        }
        if ($file =~ /\.([^.]+)$/) {
                return $1 if exists $hooks{htmlize}{$1};
        }
-       elsif ($hooks{htmlize}{basename($file)}{noextension}) {
-               return basename($file);
+       my $base=basename($file);
+       if (exists $hooks{htmlize}{$base} &&
+           $hooks{htmlize}{$base}{noextension}) {
+               return $base;
        }
        return;
 }
        }
        return;
 }
@@ -1798,7 +1800,7 @@ sub pagespec_translate ($) {
                                $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)";
                        }
                        else {
                                $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)";
                        }
                        else {
-                               $code.="IkiWiki::FailReason->new(".safequote(qq{unknown function in pagespec "$word"}).")";
+                               $code.="IkiWiki::ErrorReason->new(".safequote(qq{unknown function in pagespec "$word"}).")";
                        }
                }
                else {
                        }
                }
                else {
@@ -1825,11 +1827,35 @@ sub pagespec_match ($$;@) {
        }
 
        my $sub=pagespec_translate($spec);
        }
 
        my $sub=pagespec_translate($spec);
-       return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"")
+       return IkiWiki::ErrorReason->new("syntax error in pagespec \"$spec\"")
                if $@ || ! defined $sub;
        return $sub->($page, @params);
 }
 
                if $@ || ! defined $sub;
        return $sub->($page, @params);
 }
 
+sub pagespec_match_list ($$;@) {
+       my $pages=shift;
+       my $spec=shift;
+       my @params=@_;
+
+       my $sub=pagespec_translate($spec);
+       error "syntax error in pagespec \"$spec\""
+               if $@ || ! defined $sub;
+       
+       my @ret;
+       my $r;
+       foreach my $page (@$pages) {
+               $r=$sub->($page, @params);
+               push @ret, $page if $r;
+       }
+
+       if (! @ret && defined $r && $r->isa("IkiWiki::ErrorReason")) {
+               error(sprintf(gettext("cannot match pages: %s"), $r));
+       }
+       else {
+               return @ret;
+       }
+}
+
 sub pagespec_valid ($) {
        my $spec=shift;
 
 sub pagespec_valid ($) {
        my $spec=shift;
 
@@ -1859,6 +1885,10 @@ sub new {
        return bless \$value, $class;
 }
 
        return bless \$value, $class;
 }
 
+package IkiWiki::ErrorReason;
+
+our @ISA = 'IkiWiki::FailReason';
+
 package IkiWiki::SuccessReason;
 
 use overload (
 package IkiWiki::SuccessReason;
 
 use overload (
@@ -2019,7 +2049,7 @@ sub match_user ($$;@) {
        my %params=@_;
        
        if (! exists $params{user}) {
        my %params=@_;
        
        if (! exists $params{user}) {
-               return IkiWiki::FailReason->new("no user specified");
+               return IkiWiki::ErrorReason->new("no user specified");
        }
 
        if (defined $params{user} && lc $params{user} eq lc $user) {
        }
 
        if (defined $params{user} && lc $params{user} eq lc $user) {
@@ -2039,7 +2069,7 @@ sub match_admin ($$;@) {
        my %params=@_;
        
        if (! exists $params{user}) {
        my %params=@_;
        
        if (! exists $params{user}) {
-               return IkiWiki::FailReason->new("no user specified");
+               return IkiWiki::ErrorReason->new("no user specified");
        }
 
        if (defined $params{user} && IkiWiki::is_admin($params{user})) {
        }
 
        if (defined $params{user} && IkiWiki::is_admin($params{user})) {
@@ -2059,7 +2089,7 @@ sub match_ip ($$;@) {
        my %params=@_;
        
        if (! exists $params{ip}) {
        my %params=@_;
        
        if (! exists $params{ip}) {
-               return IkiWiki::FailReason->new("no IP specified");
+               return IkiWiki::ErrorReason->new("no IP specified");
        }
 
        if (defined $params{ip} && lc $params{ip} eq lc $ip) {
        }
 
        if (defined $params{ip} && lc $params{ip} eq lc $ip) {