bestlink htmllink readfile writefile pagetype srcfile pagename
displaytime will_render gettext urlto targetpage
%config %links %renderedfiles %pagesources %destsources);
-our $VERSION = 1.02; # plugin interface version, next is ikiwiki version
+our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
}
elsif ($word =~ /^(\w+)\((.*)\)$/) {
if (exists $IkiWiki::PageSpec::{"match_$1"}) {
- $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \$from)";
+ $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@params)";
}
else {
$code.=" 0";
}
}
else {
- $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \$from)";
+ $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@params)";
}
}
return $code;
} #}}}
-sub pagespec_match ($$;$) { #{{{
+sub pagespec_match ($$;@) { #{{{
my $page=shift;
my $spec=shift;
- my $from=shift;
+ my @params=@_;
+
+ # Backwards compatability with old calling convention.
+ if (@params == 1) {
+ unshift @params, "location";
+ }
return eval pagespec_translate($spec);
} #}}}
package IkiWiki::PageSpec;
-sub match_glob ($$$) { #{{{
+sub match_glob ($$;@) { #{{{
my $page=shift;
my $glob=shift;
- my $from=shift;
- if (! defined $from){
- $from = "";
- }
-
+ my %params=@_;
+
+ my $from=exists $params{location} ? $params{location} : "";
+
# relative matching
if ($glob =~ m!^\./!) {
$from=~s!/?[^/]+$!!;
return $page=~/^$glob$/i;
} #}}}
-sub match_link ($$$) { #{{{
+sub match_link ($$;@) { #{{{
my $page=shift;
my $link=lc(shift);
- my $from=shift;
- if (! defined $from){
- $from = "";
- }
+ my %params=@_;
+
+ my $from=exists $params{location} ? $params{location} : "";
# relative matching
if ($link =~ m!^\.! && defined $from) {
return 0;
} #}}}
-sub match_backlink ($$$) { #{{{
- match_link($_[1], $_[0], $_[3]);
+sub match_backlink ($$;@) { #{{{
+ match_link($_[1], $_[0], @_);
} #}}}
-sub match_created_before ($$$) { #{{{
+sub match_created_before ($$;@) { #{{{
my $page=shift;
my $testpage=shift;
}
} #}}}
-sub match_created_after ($$$) { #{{{
+sub match_created_after ($$;@) { #{{{
my $page=shift;
my $testpage=shift;
}
} #}}}
-sub match_creation_day ($$$) { #{{{
+sub match_creation_day ($$;@) { #{{{
return ((gmtime($IkiWiki::pagectime{shift()}))[3] == shift);
} #}}}
-sub match_creation_month ($$$) { #{{{
+sub match_creation_month ($$;@) { #{{{
return ((gmtime($IkiWiki::pagectime{shift()}))[4] + 1 == shift);
} #}}}
-sub match_creation_year ($$$) { #{{{
+sub match_creation_year ($$;@) { #{{{
return ((gmtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift);
} #}}}
+sub match_user ($$;@) { #{{{
+ shift;
+ my $user=shift;
+ my %params=@_;
+
+ return unless exists $params{user};
+ return $user eq $params{user};
+} #}}}
+
1
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use HTML::Entities;
use HTML::Parser;
use HTML::Tagset;
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "canedit", id => "anonok", call => \&canedit,);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "brokenlinks", call => \&preprocess);
my @broken;
foreach my $page (keys %links) {
- if (pagespec_match($page, $params{pages}, $params{page})) {
+ if (pagespec_match($page, $params{pages}, location => $params{page})) {
my $discussion=gettext("discussion");
foreach my $link (@{$links{$page}}) {
next if $link =~ /.*\/\Q$discussion\E/i && $config{discussion};
# CamelCase links
package IkiWiki::Plugin::camelcase;
-use IkiWiki;
use warnings;
use strict;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "filter", id => "camelcase", call => \&filter);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use UNIVERSAL;
-# Globals used to pass information into the PageSpec functions.
-our ($sourcepage, $destpage);
-
sub import { #{{{
hook(type => "preprocess", id => "if", call => \&preprocess_if);
} # }}}
}
my $result=0;
- $sourcepage=$params{page};
- $destpage=$params{destpage};
# An optimisation to avoid needless looping over every page
# and adding of dependencies for simple uses of some of the
# tests.
if ($params{test} =~ /^(enabled|sourcepage|destpage)\((.*)\)$/) {
- $result=eval "IkiWiki::PageSpec::match_$1(undef, ".
- IkiWiki::safequote($2).", \$params{page})";
+ $result=pagespec_match($params{page}, $params{test},
+ location => $params{page},
+ sourcepage => $params{page},
+ destpage => $params{destpage});
}
else {
add_depends($params{page}, $params{test});
foreach my $page (keys %pagesources) {
- if (pagespec_match($page, $params{test}, $params{page})) {
+ if (pagespec_match($page, $params{test},
+ location => $params{page},
+ sourcepage => $params{page},
+ destpage => $params{destpage})) {
$result=1;
last;
}
}
}
- $sourcepage="";
- $destpage="";
my $ret;
if ($result) {
package IkiWiki::PageSpec;
-sub match_enabled ($$$) { #{{{
+sub match_enabled ($$;@) { #{{{
shift;
my $plugin=shift;
return UNIVERSAL::can("IkiWiki::Plugin::".$plugin, "import");
} #}}}
-sub match_sourcepage ($$$) { #{{{
+sub match_sourcepage ($$;@) { #{{{
shift;
my $glob=shift;
-
- return match_glob($IkiWiki::Plugin::conditional::sourcepage, $glob,
- $IkiWiki::Plugin::conditional::sourcepage);
+ my %params=@_;
+
+ return unless exists $params{sourcepage};
+ return match_glob($params{sourcepage}, $glob, @_);
} #}}}
-sub match_destpage ($$$) { #{{{
+sub match_destpage ($$;@) { #{{{
shift;
my $glob=shift;
+ my %params=@_;
- return match_glob($IkiWiki::Plugin::conditional::destpage, $glob,
- $IkiWiki::Plugin::conditional::sourcepage);
+ return unless exists $params{destpage};
+ return match_glob($params{destpage}, $glob, @_);
} #}}}
-sub match_included ($$$) { #{{{
- return $IkiWiki::Plugin::conditional::sourcepage ne $IkiWiki::Plugin::conditional::destpage;
+sub match_included ($$;$) { #{{{
+ shift;
+ shift;
+ my %params=@_;
+
+ return unless exists $params{sourcepage} && exists $params{destpage};
+ return $params{sourcepage} ne $params{destpage};
} #}}}
1
#!/usr/bin/perl
# Discordian date support fnord ikiwiki.
package IkiWiki::Plugin::ddate;
-use IkiWiki;
+
+use IkiWiki 2.00;
no warnings;
sub import { #{{{
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "pagetemplate", id => "favicon", call => \&pagetemplate);
# Include a fortune in a page
package IkiWiki::Plugin::fortune;
-use IkiWiki;
use warnings;
use strict;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "fortune", call => \&preprocess);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
my @bundle=qw{
brokenlinks
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "googlecalendar",
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use IPC::Open2;
sub import { #{{{
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "haiku", call => \&preprocess);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "htmlize", id => "html", call => \&htmlize);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "sanitize", id => "htmlscrubber", call => \&sanitize);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use IPC::Open2;
sub import { #{{{
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "auth", id => "httpauth", call => \&auth);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
my %imgdefaults;
use warnings;
use strict;
-use IkiWiki 1.00;
+use IkiWiki 2.00;
use URI;
sub import { #{{{
my @list;
foreach my $page (keys %pagesources) {
next if $page eq $params{page};
- if (pagespec_match($page, $params{pages}, $params{page})) {
+ if (pagespec_match($page, $params{pages}, location => $params{page})) {
push @list, $page;
}
}
@list=@list[0..$params{feedshow} - 1];
}
if (exists $params{feedpages}) {
- @list=grep { pagespec_match($_, $params{feedpages}, $params{page}) } @list;
+ @list=grep { pagespec_match($_, $params{feedpages}, location => $params{page}) } @list;
}
if ($rss) {
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use IPC::Open2;
sub import { #{{{
# Get all the items to map.
my %mapitems = ();
foreach my $item (keys %links) {
- if (pagespec_match($item, $params{pages}, $params{page})) {
+ if (pagespec_match($item, $params{pages}, location => $params{page})) {
$mapitems{$item}=urlto($item, $params{destpage});
}
}
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "canedit", id => "lockedit", call => \&canedit);
return undef if defined $user && IkiWiki::is_admin($user);
foreach my $admin (@{$config{adminuser}}) {
- if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"), "")) {
+ if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) {
return sprintf(gettext("%s is locked by %s and cannot be edited"),
htmllink("", "", $page, noimageinline => 1),
IkiWiki::userlink($admin));
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "map", call => \&preprocess);
# Get all the items to map.
my @mapitems = ();
foreach my $page (keys %links) {
- if (pagespec_match($page, $params{pages}, $params{page})) {
+ if (pagespec_match($page, $params{pages}, location => $params{page})) {
push @mapitems, $page;
}
}
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "htmlize", id => "mdwn", call => \&htmlize);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
my %meta;
my %title;
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "pagetemplate", id => "mirrorlist", call => \&pagetemplate);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
my $linktext = gettext("more");
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "canedit", id => "opendiscussion", call => \&canedit);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "getopt", id => "openid", call => \&getopt);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "orphans", call => \&preprocess);
my $discussion=gettext("discussion");
foreach my $page (keys %pagesources) {
next if $linkedto{$page};
- next unless pagespec_match($page, $params{pages}, $params{page});
+ next unless pagespec_match($page, $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 {
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "filter", id => "otl", call => \&filter);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "pagecount", call => \&preprocess);
return $#pages+1 if $params{pages} eq "*"; # optimisation
my $count=0;
foreach my $page (@pages) {
- $count++ if pagespec_match($page, $params{pages}, $params{page});
+ $count++ if pagespec_match($page, $params{pages}, location => $params{page});
}
return $count;
} # }}}
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
# Names of the HTML classes to use for the tag cloud
our @classes = ('smallestPC', 'smallPC', 'normalPC', 'bigPC', 'biggestPC' );
my %counts;
my $max = 0;
foreach my $page (keys %links) {
- if (pagespec_match($page, $params{pages}, $params{page})) {
+ if (pagespec_match($page, $params{pages}, location => $params{page})) {
use IkiWiki::Render;
my @bl = IkiWiki::backlinks($page);
$counts{$page} = scalar(@bl);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "formbuilder_setup", id => "passwordauth",
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "poll", call => \&preprocess);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use File::Find;
sub import { #{{{
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
IkiWiki::loadplugin('sparkline');
my @list;
foreach my $page (keys %pagesources) {
next if $page eq $params{page};
- if (pagespec_match($page, $params{pages}, $params{page})) {
+ if (pagespec_match($page, $params{pages}, location => $params{page})) {
push @list, $page;
}
}
#!/usr/bin/perl
package IkiWiki::Plugin::prettydate;
-use IkiWiki;
+use IkiWiki 2.00;
use warnings;
no warnings 'redefine';
use strict;
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
$config{wiki_file_prune_regexps} = [ grep { !m/\\\.x\?html\?\$/ } @{$config{wiki_file_prune_regexps}} ];
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use IPC::Open2;
# Simple python script, maybe it should be implemented using an external script.
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "getopt", id => "hyperestraier",
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "checkconfig", id => "shortcut", call => \&checkconfig);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "canedit", id => "signinedit", call => \&canedit,
use warnings;
use strict;
-use IkiWiki '1.02';
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "getopt", id => "skeleton", call => \&getopt);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
my %smileys;
my $smiley_regexp;
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use IPC::Open2;
my $match_num=qr/[-+]?[0-9]+(?:\.[0-9]+)?/;
use warnings;
use strict;
-
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "preprocess", id => "table", call => \&preprocess);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
my %tags;
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use HTML::Template;
use Encode;
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "htmlize", id => "txtl", call => \&htmlize);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
use HTML::Parser;
sub import { #{{{
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
# Here's the javascript that makes this possible. A key feature is the use
# of css to hide toggleables, to avoid any flashing on page load. The css
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
IkiWiki::hook(type => "sanitize", id => "typography", call => \&sanitize);
use warnings;
use strict;
-use IkiWiki;
+use IkiWiki 2.00;
sub import { #{{{
hook(type => "htmlize", id => "wiki", call => \&htmlize);
foreach my $file (keys %rendered, @del) {
next if $f eq $file;
my $page=pagename($file);
- if (pagespec_match($page, $depends{$p}, $p)) {
+ if (pagespec_match($page, $depends{$p}, location => $p)) {
debug(sprintf(gettext("rendering %s, which depends on %s"), $f, $page));
render($f);
$rendered{$f}=1;
return userinfo_store($userinfo);
} #}}}
-# Global used to pass information into the PageSpec function.
-our $committer;
-
sub commit_notify_list ($@) { #{{{
- $committer=shift;
+ my $committer=shift;
my @pages = map pagename($_), @_;
my @ret;
length $userinfo->{$user}->{subscriptions} &&
exists $userinfo->{$user}->{email} &&
length $userinfo->{$user}->{email} &&
- grep { pagespec_match($_, $userinfo->{$user}->{subscriptions}, "") }
+ grep { pagespec_match($_,
+ $userinfo->{$user}->{subscriptions},
+ user => $committer) }
map pagename($_), @_) {
push @ret, $userinfo->{$user}->{email};
}
}
} #}}}
-package IkiWiki::PageSpec;
-
-sub match_user ($$$) { #{{{
- shift;
- my $user=shift;
-
- return $user eq $committer;
-} #}}}
-
1
* Avoid .svn directories when installing from svn checkout.
* Fix sending of commit mails when new pages are added via the web.
* Add user(name) to the PageSpec for commit subscriptions.
-
- -- Joey Hess <joeyh@debian.org> Thu, 26 Apr 2007 20:25:53 -0400
+ * pagespec_match() has changed to take named parameters, to better allow
+ for extended pagespecs. The old calling convention will still work for
+ back-compat for now.
+ * The calling convention for functions in the IkiWiki::PageSpec namespace
+ has changed so they are passed named parameters.
+ * Plugin interface version increased to 2.00 since I don't anticipate any
+ more interface changes before 2.0.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 26 Apr 2007 22:18:47 -0400
ikiwiki (1.50) unstable; urgency=low
## Registering plugins
All plugins should `use IkiWiki` to import the ikiwiki plugin interface.
+It's a good idea to include the version number of the plugin interface that
+your plugin expects: `use IkiWiki 2.00`
Plugins should, when imported, call `hook()` to hook into ikiwiki's
processing. The function uses named parameters, and use varies depending on
Makes the specified page depend on the specified [[PageSpec]].
-#### `pagespec_match($$;$)`
+#### `pagespec_match($$;@)`
-Passed a page name, a [[PageSpec]], and the location the [[PageSpec]] should
-be matched against, returns true if the [[PageSpec]] matches the page. (If
-the third parameter is not passed, relative PageSpecs will match relative to
-the top of the wiki.)
+Passed a page name, and [[PageSpec]], returns true if the [[PageSpec]]
+matches the page.
+
+Additional named parameters can be passed, to further limit the match.
+The most often used is "location", which specifies the location the
+PageSpec should match against. If not passed, relative PageSpecs will match
+relative to the top of the wiki.
#### `bestlink($$)`
[[PageSpecs|PageSpec]]. Such a plugin should add a function to the
IkiWiki::PageSpec package, that is named `match_foo`, where "foo()" is
how it will be accessed in a [[PageSpec]]. The function will be passed
-three parameters: The name of the page being matched, the thing to match
-against, and the page that the matching is occuring on. It should return
+two parameters: The name of the page being matched, and the thing to match
+against. It may also be passed additional, named parameters. It should return
true if the page matches.
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-04-26 20:28-0400\n"
+"POT-Creation-Date: 2007-04-26 22:52-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "There are no broken links!"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:20
+#: ../IkiWiki/Plugin/conditional.pm:17
msgid "\"test\" and \"then\" parameters are required"
msgstr ""
msgid "failed to run php"
msgstr ""
-#: ../IkiWiki/Plugin/table.pm:22
+#: ../IkiWiki/Plugin/table.pm:21
msgid "cannot find file"
msgstr ""
-#: ../IkiWiki/Plugin/table.pm:45
+#: ../IkiWiki/Plugin/table.pm:44
msgid "unknown data format"
msgstr ""
-#: ../IkiWiki/Plugin/table.pm:53
+#: ../IkiWiki/Plugin/table.pm:52
msgid "empty data"
msgstr ""
-#: ../IkiWiki/Plugin/table.pm:73
+#: ../IkiWiki/Plugin/table.pm:72
msgid "Direct data download"
msgstr ""
-#: ../IkiWiki/Plugin/table.pm:106
+#: ../IkiWiki/Plugin/table.pm:105
#, perl-format
msgid "parse fail at line %d: %s"
msgstr ""
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:146
+#: ../IkiWiki/UserInfo.pm:145
#, perl-format
msgid "update of %s's %s by %s"
msgstr ""
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More tests => 46;
+use Test::More tests => 49;
BEGIN { use_ok("IkiWiki"); }
-ok(pagespec_match("foo", "*", ""));
-ok(pagespec_match("page", "?ag?", ""));
-ok(! pagespec_match("page", "?a?g?", ""));
-ok(pagespec_match("foo.png", "*.*", ""));
-ok(! pagespec_match("foo", "*.*", ""));
-ok(pagespec_match("foo", "foo or bar", ""), "simple list");
-ok(pagespec_match("bar", "foo or bar", ""), "simple list 2");
-ok(pagespec_match("foo", "f?? and !foz", ""));
-ok(! pagespec_match("foo", "f?? and !foo", ""));
-ok(! pagespec_match("foo", "* and !foo", ""));
-ok(! pagespec_match("foo", "foo and !foo", ""));
-ok(! pagespec_match("foo.png", "* and !*.*", ""));
-ok(pagespec_match("foo", "(bar or ((meep and foo) or (baz or foo) or beep))", ""));
-ok(! pagespec_match("a/foo", "foo", "a/b"), "nonrelative fail");
-ok(! pagespec_match("foo", "./*", "a/b"), "relative fail");
-ok(pagespec_match("a/foo", "./*", "a/b"), "relative");
-ok(pagespec_match("a/b/foo", "./*", "a/b"), "relative 2");
-ok(pagespec_match("foo", "./*", "a"), "relative toplevel");
-ok(pagespec_match("foo/bar", "*", "baz"), "absolute");
+ok(pagespec_match("foo", "*"));
+ok(pagespec_match("page", "?ag?"));
+ok(! pagespec_match("page", "?a?g?"));
+ok(pagespec_match("foo.png", "*.*"));
+ok(! pagespec_match("foo", "*.*"));
+ok(pagespec_match("foo", "foo or bar"), "simple list");
+ok(pagespec_match("bar", "foo or bar"), "simple list 2");
+ok(pagespec_match("foo", "f?? and !foz"));
+ok(! pagespec_match("foo", "f?? and !foo"));
+ok(! pagespec_match("foo", "* and !foo"));
+ok(! pagespec_match("foo", "foo and !foo"));
+ok(! pagespec_match("foo.png", "* and !*.*"));
+ok(pagespec_match("foo", "(bar or ((meep and foo) or (baz or foo) or beep))"));
+ok(! pagespec_match("a/foo", "foo", location => "a/b"), "nonrelative fail");
+ok(! pagespec_match("foo", "./*", location => "a/b"), "relative fail");
+ok(pagespec_match("a/foo", "./*", location => "a/b"), "relative");
+ok(pagespec_match("a/b/foo", "./*", location => "a/b"), "relative 2");
+ok(pagespec_match("a/foo", "./*", "a/b"), "relative oldstyle call");
+ok(pagespec_match("foo", "./*", location => "a"), "relative toplevel");
+ok(pagespec_match("foo/bar", "*", location => "baz"), "absolute");
# The link and backlink stuff needs this.
$config{userdir}="";
$links{"examples/softwaresite/bugs/fails_to_frobnicate"}=[qw{done}];
$links{"examples/softwaresite/bugs/done"}=[];
-ok(pagespec_match("foo", "link(bar)", ""), "link");
-ok(! pagespec_match("foo", "link(quux)", ""), "failed link");
-ok(pagespec_match("bugs/foo", "link(done)", "bugs/done"), "link match to bestlink");
+ok(pagespec_match("foo", "link(bar)"), "link");
+ok(! pagespec_match("foo", "link(quux)"), "failed link");
+ok(pagespec_match("bugs/foo", "link(done)", location => "bugs/done"), "link match to bestlink");
ok(! pagespec_match("examples/softwaresite/bugs/done", "link(done)",
- "bugs/done"), "link match to bestlink");
+ location => "bugs/done"), "link match to bestlink");
ok(pagespec_match("examples/softwaresite/bugs/fails_to_frobnicate",
- "link(./done)", "examples/softwaresite/bugs/done"), "link relative");
-ok(! pagespec_match("foo", "link(./bar)", "foo/bar"), "link relative fail");
-ok(pagespec_match("bar", "backlink(foo)", ""), "backlink");
-ok(! pagespec_match("quux", "backlink(foo)", ""), "failed backlink");
+ "link(./done)", location => "examples/softwaresite/bugs/done"), "link relative");
+ok(! pagespec_match("foo", "link(./bar)", location => "foo/bar"), "link relative fail");
+ok(pagespec_match("bar", "backlink(foo)"), "backlink");
+ok(! pagespec_match("quux", "backlink(foo)"), "failed backlink");
$IkiWiki::pagectime{foo}=1154532692; # Wed Aug 2 11:26 EDT 2006
$IkiWiki::pagectime{bar}=1154532695; # after
ok(! pagespec_match("foo", "no_such_function(foo)"), "foo");
+ok(pagespec_match("foo", "foo and user(bar)", user => "bar"), "user");
+ok(! pagespec_match("foo", "foo and user(bar)", user => "baz"), "user fail");
+
# old style globlists
ok(pagespec_match("foo", "foo bar"), "simple list");
ok(pagespec_match("bar", "foo bar"), "simple list 2");