From a223f4540fee2d0c49523343a422315377bc0025 Mon Sep 17 00:00:00 2001 From: joey Date: Thu, 23 Mar 2006 19:25:08 +0000 Subject: [PATCH] support arbitrary characters in page titles, via some ugly use of unicode character numbers --- IkiWiki/Render.pm | 3 +-- doc/todo.mdwn | 7 +------ doc/wikilink.mdwn | 10 ++++++++++ ikiwiki | 21 +++++++++++++++------ 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 "?$link" + return "?$linktext" } $bestlink=File::Spec->abs2rel($bestlink, dirname($page)); @@ -266,7 +275,7 @@ sub htmllink ($$;$$) { #{{{ if (! $noimageinline && isinlinableimage($bestlink)) { return ""; } - return "$link"; + return "$linktext"; } #}}} sub indexlink () { #{{{ -- 2.45.0