aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Render.pm3
-rw-r--r--doc/todo.mdwn7
-rw-r--r--doc/wikilink.mdwn10
-rwxr-xr-xikiwiki21
4 files changed, 27 insertions, 14 deletions
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index 98c86bac8..df24fd568 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -84,8 +84,7 @@ sub finalize ($$$) { #{{{
my $page=shift;
my $mtime=shift;
- my $title=basename($page);
- $title=~s/_/ /g;
+ my $title=pagetitle(basename($page));
my $template=HTML::Template->new(blind_cache => 1,
filename => "$config{templatedir}/page.tmpl");
diff --git a/doc/todo.mdwn b/doc/todo.mdwn
index 7926fd954..f01753e33 100644
--- a/doc/todo.mdwn
+++ b/doc/todo.mdwn
@@ -100,15 +100,10 @@ Requirements:
* Need to keep track of the globlists in the index file.
- Probably need to redesign the index file format to allow for this sort
of future expansion.
-* Need to make _ render as " " in page titles.
-* Also need to support as much other punctuation as possible in page
- titles, ideally all of it. Punctuation that is illegal in filenames for
- various good reasons should be embedded encoded in the filenames. Blogs
- tend to have more punctuation-intensive page titles than wikis.
* Need to pick a good token and note that the token will need to be passed
multiple parameters. Possibly something like this:
- [[rss pages="myblog/*" show="30"]]
+ [[embed pages="myblog/*" show="30"]]
## revisit case
diff --git a/doc/wikilink.mdwn b/doc/wikilink.mdwn
index ac0ec9d56..1da5fb64d 100644
--- a/doc/wikilink.mdwn
+++ b/doc/wikilink.mdwn
@@ -11,5 +11,15 @@ play when linking between [[SubPage]]s.
WikiLinks can be entered in any case you like, the page they link to is
always lowercased.
+While a WikiLink is limited to alphanumerics and only a few special
+charaters, it is possible to create page names containing other characters:
+
+* To display a page name with a space in it, use "_" in the WikiLink, for
+ example, [[Multi_Word_Page_Name]].
+* For any other special character, you can use "__nnnn__" where `nnnn` is the
+ unicode character number. For example,
+ [[This_page_name_is__44___uselessly__44___a_complete_sentence__46__]]
+ Limiting use of this to when you really need it is a good idea.
+
Note that if the file linked to by a WikiLink looks like an image, it will
be displayed inline on the page.
diff --git a/ikiwiki b/ikiwiki
index 936b0a173..3540f8667 100755
--- a/ikiwiki
+++ b/ikiwiki
@@ -19,7 +19,7 @@ sub getconfig () { #{{{
%config=(
wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$)},
wiki_link_regexp => qr/\[\[([^\s\]]+)\]\]/,
- wiki_file_regexp => qr/(^[-A-Za-z0-9_.:\/+]+$)/,
+ wiki_file_regexp => qr/(^[-A-Za-z0-9_.\&;:\/+]+$)/,
verbose => 0,
wikiname => "wiki",
default_pageext => ".mdwn",
@@ -92,11 +92,11 @@ sub checkconfig () { #{{{
unless exists $config{wikistatedir};
if ($config{svn}) {
- require IkiWiki::RCS::SVN;
+ require IkiWiki::Rcs::SVN;
$config{rcs}=1;
}
else {
- require IkiWiki::RCS::Stub;
+ require IkiWiki::Rcs::Stub;
$config{rcs}=0;
}
} #}}}
@@ -234,6 +234,13 @@ sub isinlinableimage ($) { #{{{
$file=~/\.(png|gif|jpg|jpeg)$/;
} #}}}
+sub pagetitle ($) { #{{{
+ my $page=shift;
+ $page=~s/__(\d+)__/&#$1;/g;
+ $page=~y/_/ /;
+ return $page;
+} #}}}
+
sub htmllink ($$;$$) { #{{{
my $page=shift;
my $link=shift;
@@ -248,7 +255,9 @@ sub htmllink ($$;$$) { #{{{
$bestlink="$page/".lc($link);
}
- return $link if length $bestlink && $page eq $bestlink;
+ my $linktext=pagetitle($link);
+
+ return $linktext if length $bestlink && $page eq $bestlink;
# TODO BUG: %renderedfiles may not have it, if the linked to page
# was also added and isn't yet rendered! Note that this bug is
@@ -258,7 +267,7 @@ sub htmllink ($$;$$) { #{{{
$bestlink=htmlpage($bestlink);
}
if (! grep { $_ eq $bestlink } values %renderedfiles) {
- return "<a href=\"$config{cgiurl}?do=create&page=$link&from=$page\">?</a>$link"
+ return "<a href=\"$config{cgiurl}?do=create&page=$link&from=$page\">?</a>$linktext"
}
$bestlink=File::Spec->abs2rel($bestlink, dirname($page));
@@ -266,7 +275,7 @@ sub htmllink ($$;$$) { #{{{
if (! $noimageinline && isinlinableimage($bestlink)) {
return "<img src=\"$bestlink\">";
}
- return "<a href=\"$bestlink\">$link</a>";
+ return "<a href=\"$bestlink\">$linktext</a>";
} #}}}
sub indexlink () { #{{{