summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-04-23 15:45:30 -0400
committerJoey Hess <joey@gnu.kitenet.net>2009-04-23 15:45:30 -0400
commitaa306957bac11477b914ac19b93890184ffe4062 (patch)
treec9b05bf73cb4d19e55297ad3b335bb1fc3ce67e5 /IkiWiki/Plugin
parent527d178c12141d2467dfa86492e249d021b88997 (diff)
pagespec_match_list added and used in most appropriate places
* pagespec_match_list: New API function, matches pages in a list and throws an error if the pagespec is bad. * inline, brokenlinks, calendar, linkmap, map, orphans, pagecount, pagestate, postsparkline: Display a handy error message if the pagespec is erronious.
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/brokenlinks.pm23
-rw-r--r--IkiWiki/Plugin/calendar.pm3
-rw-r--r--IkiWiki/Plugin/external.pm9
-rw-r--r--IkiWiki/Plugin/inline.pm17
-rw-r--r--IkiWiki/Plugin/linkmap.pm7
-rw-r--r--IkiWiki/Plugin/map.pm49
-rw-r--r--IkiWiki/Plugin/orphans.pm7
-rw-r--r--IkiWiki/Plugin/pagecount.pm9
-rw-r--r--IkiWiki/Plugin/pagestats.pm11
-rw-r--r--IkiWiki/Plugin/postsparkline.pm10
10 files changed, 65 insertions, 80 deletions
diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm
index bf0d7560d..da97dbc28 100644
--- a/IkiWiki/Plugin/brokenlinks.pm
+++ b/IkiWiki/Plugin/brokenlinks.pm
@@ -28,18 +28,17 @@ sub preprocess (@) {
add_depends($params{page}, $params{pages});
my %broken;
- foreach my $page (keys %links) {
- if (pagespec_match($page, $params{pages}, location => $params{page})) {
- my $discussion=gettext("discussion");
- my %seen;
- foreach my $link (@{$links{$page}}) {
- next if $seen{$link};
- $seen{$link}=1;
- next if $link =~ /.*\/\Q$discussion\E/i && $config{discussion};
- my $bestlink=bestlink($page, $link);
- next if length $bestlink;
- push @{$broken{$link}}, $page;
- }
+ foreach my $page (pagespec_match_list([keys %links],
+ $params{pages}, location => $params{page})) {
+ my $discussion=gettext("discussion");
+ my %seen;
+ foreach my $link (@{$links{$page}}) {
+ next if $seen{$link};
+ $seen{$link}=1;
+ next if $link =~ /.*\/\Q$discussion\E/i && $config{discussion};
+ my $bestlink=bestlink($page, $link);
+ next if length $bestlink;
+ push @{$broken{$link}}, $page;
}
}
diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
index d473c8348..fe4b16072 100644
--- a/IkiWiki/Plugin/calendar.pm
+++ b/IkiWiki/Plugin/calendar.pm
@@ -369,8 +369,7 @@ sub preprocess (@) {
my $page =$params{page};
if (! defined $cache{$pagespec}) {
- foreach my $p (keys %pagesources) {
- next unless pagespec_match($p, $pagespec);
+ foreach my $p (pagespec_match_list([keys %pagesources], $pagespec)) {
my $mtime = $IkiWiki::pagectime{$p};
my $src = $pagesources{$p};
my @date = localtime($mtime);
diff --git a/IkiWiki/Plugin/external.pm b/IkiWiki/Plugin/external.pm
index 066f15cf1..aeee15dea 100644
--- a/IkiWiki/Plugin/external.pm
+++ b/IkiWiki/Plugin/external.pm
@@ -230,10 +230,17 @@ sub hook ($@) {
}
sub pagespec_match ($@) {
- # convert pagespec_match's return object into a XML RPC boolean
+ # convert return object into a XML RPC boolean
my $plugin=shift;
return RPC::XML::boolean->new(0 + IkiWiki::pagespec_march(@_));
}
+sub pagespec_match_list ($@) {
+ # convert return object into a XML RPC boolean
+ my $plugin=shift;
+
+ return RPC::XML::boolean->new(0 + IkiWiki::pagespec_march_list(@_));
+}
+
1
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 551c38a65..366357095 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -183,20 +183,9 @@ sub preprocess_inline (@) {
$params{template} = $archive ? "archivepage" : "inlinepage";
}
- my @list;
- my $lastmatch;
- foreach my $page (keys %pagesources) {
- next if $page eq $params{page};
- $lastmatch=pagespec_match($page, $params{pages}, location => $params{page});
- if ($lastmatch) {
- push @list, $page;
- }
- }
-
- if (! @list && defined $lastmatch &&
- $lastmatch->isa("IkiWiki::ErrorReason")) {
- error(sprintf(gettext("cannot match pages: %s"), $lastmatch));
- }
+ my @list=pagespec_match_list(
+ [ grep { $_ ne $params{page}} keys %pagesources ],
+ $params{pages}, location => $params{page});
if (exists $params{sort} && $params{sort} eq 'title') {
@list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list;
diff --git a/IkiWiki/Plugin/linkmap.pm b/IkiWiki/Plugin/linkmap.pm
index 941ed5f36..0137476ac 100644
--- a/IkiWiki/Plugin/linkmap.pm
+++ b/IkiWiki/Plugin/linkmap.pm
@@ -56,10 +56,9 @@ sub genmap ($) {
# Get all the items to map.
my %mapitems = ();
- foreach my $item (keys %links) {
- if (pagespec_match($item, $params{pages}, location => $params{page})) {
- $mapitems{$item}=urlto($item, $params{destpage});
- }
+ foreach my $item (pagespec_match_list([keys %links],
+ $params{pages}, location => $params{page})) {
+ $mapitems{$item}=urlto($item, $params{destpage});
}
my $dest=$params{page}."/linkmap.png";
diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm
index 328493116..120451b5d 100644
--- a/IkiWiki/Plugin/map.pm
+++ b/IkiWiki/Plugin/map.pm
@@ -32,32 +32,31 @@ sub preprocess (@) {
# Get all the items to map.
my %mapitems;
- foreach my $page (keys %pagesources) {
- if (pagespec_match($page, $params{pages}, location => $params{page})) {
- if (exists $params{show} &&
- exists $pagestate{$page} &&
- exists $pagestate{$page}{meta}{$params{show}}) {
- $mapitems{$page}=$pagestate{$page}{meta}{$params{show}};
- }
- else {
- $mapitems{$page}='';
- }
- # Check for a common prefix.
- if (! defined $common_prefix) {
- $common_prefix=$page;
- }
- elsif (length $common_prefix &&
- $page !~ /^\Q$common_prefix\E(\/|$)/) {
- my @a=split(/\//, $page);
- my @b=split(/\//, $common_prefix);
- $common_prefix="";
- while (@a && @b && $a[0] eq $b[0]) {
- if (length $common_prefix) {
- $common_prefix.="/";
- }
- $common_prefix.=shift(@a);
- shift @b;
+ foreach my $page (pagespec_match_list([keys %pagesources],
+ $params{pages}, location => $params{page})) {
+ if (exists $params{show} &&
+ exists $pagestate{$page} &&
+ exists $pagestate{$page}{meta}{$params{show}}) {
+ $mapitems{$page}=$pagestate{$page}{meta}{$params{show}};
+ }
+ else {
+ $mapitems{$page}='';
+ }
+ # Check for a common prefix.
+ if (! defined $common_prefix) {
+ $common_prefix=$page;
+ }
+ elsif (length $common_prefix &&
+ $page !~ /^\Q$common_prefix\E(\/|$)/) {
+ my @a=split(/\//, $page);
+ my @b=split(/\//, $common_prefix);
+ $common_prefix="";
+ while (@a && @b && $a[0] eq $b[0]) {
+ if (length $common_prefix) {
+ $common_prefix.="/";
}
+ $common_prefix.=shift(@a);
+ shift @b;
}
}
}
diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm
index 605e6e43a..cf74c9b79 100644
--- a/IkiWiki/Plugin/orphans.pm
+++ b/IkiWiki/Plugin/orphans.pm
@@ -35,9 +35,10 @@ sub preprocess (@) {
my @orphans;
my $discussion=gettext("discussion");
- foreach my $page (keys %pagesources) {
- next if $linkedto{$page} || $page eq 'index';
- next unless pagespec_match($page, $params{pages}, location => $params{page});
+ foreach my $page (pagespec_match_list(
+ [ grep { ! $linkedto{$_} && $_ ne 'index' }
+ keys %pagesources ],
+ $params{pages}, location => $params{page})) {
# If the page has a link to some other page, it's
# indirectly linked to a page via that page's backlinks.
next if grep {
diff --git a/IkiWiki/Plugin/pagecount.pm b/IkiWiki/Plugin/pagecount.pm
index a143f24d0..f8881a04b 100644
--- a/IkiWiki/Plugin/pagecount.pm
+++ b/IkiWiki/Plugin/pagecount.pm
@@ -27,12 +27,9 @@ sub preprocess (@) {
add_depends($params{page}, $params{pages});
my @pages=keys %pagesources;
- return $#pages+1 if $params{pages} eq "*"; # optimisation
- my $count=0;
- foreach my $page (@pages) {
- $count++ if pagespec_match($page, $params{pages}, location => $params{page});
- }
- return $count;
+ @pages=pagespec_match_list(\@pages, $params{pages}, location => $params{page})
+ if $params{pages} ne "*"; # optimisation;
+ return $#pages+1;
}
1
diff --git a/IkiWiki/Plugin/pagestats.pm b/IkiWiki/Plugin/pagestats.pm
index dbe69539d..8ab5d3666 100644
--- a/IkiWiki/Plugin/pagestats.pm
+++ b/IkiWiki/Plugin/pagestats.pm
@@ -41,12 +41,11 @@ sub preprocess (@) {
my %counts;
my $max = 0;
- foreach my $page (keys %links) {
- if (pagespec_match($page, $params{pages}, location => $params{page})) {
- use IkiWiki::Render;
- $counts{$page} = scalar(IkiWiki::backlinks($page));
- $max = $counts{$page} if $counts{$page} > $max;
- }
+ foreach my $page (pagespec_match_list([keys %links],
+ $params{pages}, location => $params{page})) {
+ use IkiWiki::Render;
+ $counts{$page} = scalar(IkiWiki::backlinks($page));
+ $max = $counts{$page} if $counts{$page} > $max;
}
if ($style eq 'table') {
diff --git a/IkiWiki/Plugin/postsparkline.pm b/IkiWiki/Plugin/postsparkline.pm
index ba43561fb..c2ebbc5eb 100644
--- a/IkiWiki/Plugin/postsparkline.pm
+++ b/IkiWiki/Plugin/postsparkline.pm
@@ -50,13 +50,9 @@ sub preprocess (@) {
add_depends($params{page}, $params{pages});
- my @list;
- foreach my $page (keys %pagesources) {
- next if $page eq $params{page};
- if (pagespec_match($page, $params{pages}, location => $params{page})) {
- push @list, $page;
- }
- }
+ my @list=pagespec_match_list(
+ [ grep { $_ ne $params{page} } keys %pagesources],
+ $params{pages}, location => $params{page});
@list = sort { $params{timehash}->{$b} <=> $params{timehash}->{$a} } @list;