dirname, basename, bestlink, linkify, pagetitle, titlepage.
* Allow links of the form [[some page|page]], with whitespace in the link text.master
parent
0e8d8be117
commit
642f73a39f
36
IkiWiki.pm
36
IkiWiki.pm
|
@ -9,6 +9,42 @@ use HTML::Template;
|
||||||
use vars qw{%config %links %oldlinks %oldpagemtime %pagectime
|
use vars qw{%config %links %oldlinks %oldpagemtime %pagectime
|
||||||
%renderedfiles %pagesources %depends %hooks};
|
%renderedfiles %pagesources %depends %hooks};
|
||||||
|
|
||||||
|
sub defaultconfig () { #{{{
|
||||||
|
wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$|\.rss$)},
|
||||||
|
wiki_link_regexp => qr/\[\[(?:([^\]\|]+)\|)?([^\s\]]+)\]\]/,
|
||||||
|
wiki_processor_regexp => qr/\[\[(\w+)\s+([^\]]*)\]\]/,
|
||||||
|
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
|
||||||
|
verbose => 0,
|
||||||
|
wikiname => "wiki",
|
||||||
|
default_pageext => ".mdwn",
|
||||||
|
cgi => 0,
|
||||||
|
rcs => 'svn',
|
||||||
|
notify => 0,
|
||||||
|
url => '',
|
||||||
|
cgiurl => '',
|
||||||
|
historyurl => '',
|
||||||
|
diffurl => '',
|
||||||
|
anonok => 0,
|
||||||
|
rss => 0,
|
||||||
|
sanitize => 1,
|
||||||
|
rebuild => 0,
|
||||||
|
refresh => 0,
|
||||||
|
getctime => 0,
|
||||||
|
wrapper => undef,
|
||||||
|
wrappermode => undef,
|
||||||
|
svnrepo => undef,
|
||||||
|
svnpath => "trunk",
|
||||||
|
srcdir => undef,
|
||||||
|
destdir => undef,
|
||||||
|
templatedir => "/usr/share/ikiwiki/templates",
|
||||||
|
underlaydir => "/usr/share/ikiwiki/basewiki",
|
||||||
|
setup => undef,
|
||||||
|
adminuser => undef,
|
||||||
|
adminemail => undef,
|
||||||
|
plugin => [qw{inline}],
|
||||||
|
headercontent => '',
|
||||||
|
} #}}}
|
||||||
|
|
||||||
sub checkconfig () { #{{{
|
sub checkconfig () { #{{{
|
||||||
if ($config{cgi} && ! length $config{url}) {
|
if ($config{cgi} && ! length $config{url}) {
|
||||||
error("Must specify url to wiki with --url when using --cgi\n");
|
error("Must specify url to wiki with --url when using --cgi\n");
|
||||||
|
|
|
@ -15,5 +15,5 @@ Note that if the file linked to by a WikiLink looks like an image, it will
|
||||||
be displayed inline on the page.
|
be displayed inline on the page.
|
||||||
|
|
||||||
It's also possible to write a WikiLink that uses something other than the
|
It's also possible to write a WikiLink that uses something other than the
|
||||||
page name as the link text. For example "\[[foo_bar|SandBox]]" links to the
|
page name as the link text. For example "\[[foo bar|SandBox]]" links to the
|
||||||
SandBox page, but the link will appear like this: [[foo_bar|SandBox]]
|
SandBox page, but the link will appear like this: [[foo bar|SandBox]]
|
||||||
|
|
|
@ -27,7 +27,7 @@ ikiwiki (1.1) UNRELEASED; urgency=low
|
||||||
* Split off an IkiWiki.pm out of ikiwiki and have all the other modules use
|
* Split off an IkiWiki.pm out of ikiwiki and have all the other modules use
|
||||||
it, this will allow for adding a unit test suite.
|
it, this will allow for adding a unit test suite.
|
||||||
* Add unit tests for several core functions, including globlist_match,
|
* Add unit tests for several core functions, including globlist_match,
|
||||||
dirname, basename, and bestlink.
|
dirname, basename, bestlink, linkify, pagetitle, titlepage.
|
||||||
* Smart globlist merging.
|
* Smart globlist merging.
|
||||||
* Patch from Thomas Schwinge to switch from --svn to --rcs=svn, etc,
|
* Patch from Thomas Schwinge to switch from --svn to --rcs=svn, etc,
|
||||||
to pave the way for adding other RCS support. This also changes the
|
to pave the way for adding other RCS support. This also changes the
|
||||||
|
@ -41,8 +41,10 @@ ikiwiki (1.1) UNRELEASED; urgency=low
|
||||||
switch.
|
switch.
|
||||||
* Added smiley plugin, nicely controlled and documented by the smileys page.
|
* Added smiley plugin, nicely controlled and documented by the smileys page.
|
||||||
* Copied in some smileys from Moin Moin.
|
* Copied in some smileys from Moin Moin.
|
||||||
|
* Allow links of the form [[some page|page]], with whitespace in the link
|
||||||
|
text.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Tue, 2 May 2006 14:13:59 -0400
|
-- Joey Hess <joeyh@debian.org> Thu, 4 May 2006 14:46:46 -0400
|
||||||
|
|
||||||
ikiwiki (1.0) unstable; urgency=low
|
ikiwiki (1.0) unstable; urgency=low
|
||||||
|
|
||||||
|
|
37
ikiwiki
37
ikiwiki
|
@ -13,42 +13,7 @@ sub usage () { #{{{
|
||||||
|
|
||||||
sub getconfig () { #{{{
|
sub getconfig () { #{{{
|
||||||
if (! exists $ENV{WRAPPED_OPTIONS}) {
|
if (! exists $ENV{WRAPPED_OPTIONS}) {
|
||||||
%config=(
|
%config=defaultconfig();
|
||||||
wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$|\.rss$)},
|
|
||||||
wiki_link_regexp => qr/\[\[(?:([^\s\]\|]+)\|)?([^\s\]]+)\]\]/,
|
|
||||||
wiki_processor_regexp => qr/\[\[(\w+)\s+([^\]]*)\]\]/,
|
|
||||||
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
|
|
||||||
verbose => 0,
|
|
||||||
wikiname => "wiki",
|
|
||||||
default_pageext => ".mdwn",
|
|
||||||
cgi => 0,
|
|
||||||
rcs => 'svn',
|
|
||||||
notify => 0,
|
|
||||||
url => '',
|
|
||||||
cgiurl => '',
|
|
||||||
historyurl => '',
|
|
||||||
diffurl => '',
|
|
||||||
anonok => 0,
|
|
||||||
rss => 0,
|
|
||||||
sanitize => 1,
|
|
||||||
rebuild => 0,
|
|
||||||
refresh => 0,
|
|
||||||
getctime => 0,
|
|
||||||
wrapper => undef,
|
|
||||||
wrappermode => undef,
|
|
||||||
svnrepo => undef,
|
|
||||||
svnpath => "trunk",
|
|
||||||
srcdir => undef,
|
|
||||||
destdir => undef,
|
|
||||||
templatedir => "/usr/share/ikiwiki/templates",
|
|
||||||
underlaydir => "/usr/share/ikiwiki/basewiki",
|
|
||||||
setup => undef,
|
|
||||||
adminuser => undef,
|
|
||||||
adminemail => undef,
|
|
||||||
plugin => [qw{inline}],
|
|
||||||
headercontent => '',
|
|
||||||
);
|
|
||||||
|
|
||||||
eval q{use Getopt::Long};
|
eval q{use Getopt::Long};
|
||||||
GetOptions(
|
GetOptions(
|
||||||
"setup|s=s" => \$config{setup},
|
"setup|s=s" => \$config{setup},
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
use warnings;
|
||||||
|
use strict;
|
||||||
|
use Test::More tests => 11;
|
||||||
|
|
||||||
|
sub linkify ($$$) {
|
||||||
|
my $content=shift;
|
||||||
|
my $page=shift;
|
||||||
|
my @existing_pages=@{shift()};
|
||||||
|
|
||||||
|
# This is what linkify and htmllink need set right now to work.
|
||||||
|
# This could change, if so, update it..
|
||||||
|
%IkiWiki::links=();
|
||||||
|
foreach my $page (@existing_pages) {
|
||||||
|
$IkiWiki::links{$page}=[];
|
||||||
|
$IkiWiki::renderedfiles{"$page.mdwn"}=$page;
|
||||||
|
}
|
||||||
|
%IkiWiki::config=IkiWiki::defaultconfig();
|
||||||
|
|
||||||
|
return IkiWiki::linkify($content, $page);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub links_to ($$) {
|
||||||
|
my $link=shift;
|
||||||
|
my $content=shift;
|
||||||
|
|
||||||
|
if ($content =~ m!<a href="[^"]*\Q$link\E[^"]*">!) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print STDERR "# expected link to $link in $content\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub not_links_to ($$) {
|
||||||
|
my $link=shift;
|
||||||
|
my $content=shift;
|
||||||
|
|
||||||
|
if ($content !~ m!<a href="[^"]*\Q$link\E[^"]*">!) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print STDERR "# expected no link to $link in $content\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub links_text ($$) {
|
||||||
|
my $text=shift;
|
||||||
|
my $content=shift;
|
||||||
|
|
||||||
|
if ($content =~ m!>\Q$text\E</a>!) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print STDERR "# expected link text $text in $content\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN { use_ok("IkiWiki::Render"); }
|
||||||
|
|
||||||
|
ok(links_to("bar", linkify("link to [[bar]] ok", "foo", ["foo", "bar"])), "ok link");
|
||||||
|
ok(not_links_to("bar", linkify("link to \\[[bar]] ok", "foo", ["foo", "bar"])), "escaped link");
|
||||||
|
ok(links_to("page=bar", linkify("link to [[bar]] ok", "foo", ["foo"])), "broken link");
|
||||||
|
ok(links_to("bar", linkify("link to [[baz]] and [[bar]] ok", "foo", ["foo", "baz", "bar"])), "dual links");
|
||||||
|
ok(links_to("baz", linkify("link to [[baz]] and [[bar]] ok", "foo", ["foo", "baz", "bar"])), "dual links");
|
||||||
|
ok(links_to("bar", linkify("link to [[some_page|bar]] ok", "foo", ["foo", "bar"])), "named link");
|
||||||
|
ok(links_text("some page", linkify("link to [[some_page|bar]] ok", "foo", ["foo", "bar"])), "named link text");
|
||||||
|
ok(links_to("bar", linkify("link to [[some page|bar]] ok", "foo", ["foo", "bar"])), "named link, with whitespace");
|
||||||
|
ok(links_text("some page", linkify("link to [[some page|bar]] ok", "foo", ["foo", "bar"])), "named link text, with whitespace");
|
||||||
|
ok(links_text("Some long, & complex page name.", linkify("link to [[Some long, & complex page name.|bar]] ok, and this is not a link]] here", "foo", ["foo", "bar"])), "complex named link text");
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
use warnings;
|
||||||
|
use strict;
|
||||||
|
use Test::More tests => 6;
|
||||||
|
|
||||||
|
BEGIN { use_ok("IkiWiki"); }
|
||||||
|
|
||||||
|
is(IkiWiki::pagetitle("foo_bar"), "foo bar");
|
||||||
|
is(IkiWiki::pagetitle("foo_bar_baz"), "foo bar baz");
|
||||||
|
is(IkiWiki::pagetitle("foo_bar__33__baz"), "foo bar!baz");
|
||||||
|
is(IkiWiki::pagetitle("foo_bar__1234__baz"), "foo barӒbaz");
|
||||||
|
is(IkiWiki::pagetitle("foo_bar___33___baz"), "foo bar ! baz");
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
use warnings;
|
||||||
|
use strict;
|
||||||
|
use Test::More tests => 6;
|
||||||
|
|
||||||
|
BEGIN { use_ok("IkiWiki"); }
|
||||||
|
|
||||||
|
is(IkiWiki::titlepage("foo bar"), "foo_bar");
|
||||||
|
is(IkiWiki::titlepage("foo bar baz"), "foo_bar_baz");
|
||||||
|
is(IkiWiki::titlepage("foo bar/baz"), "foo_bar/baz");
|
||||||
|
is(IkiWiki::titlepage("foo bar&baz"), "foo_bar__38__baz");
|
||||||
|
is(IkiWiki::titlepage("foo bar & baz"), "foo_bar___38___baz");
|
Loading…
Reference in New Issue