X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e255e8ecbf2ae2dea4889ef2f5ccc3e4669d8b7d..b6774bc6afac48e2c0a122647edc1485e7174a6e:/doc/bugs/multiple_pages_with_same_name.mdwn diff --git a/doc/bugs/multiple_pages_with_same_name.mdwn b/doc/bugs/multiple_pages_with_same_name.mdwn index 191de8be5..20c38c062 100644 --- a/doc/bugs/multiple_pages_with_same_name.mdwn +++ b/doc/bugs/multiple_pages_with_same_name.mdwn @@ -4,8 +4,73 @@ I realised that this is going to have problems when you ask it to process `.c` a I tested it briefly with `test.java` and `test.mdwn` just to see what would happen. Things got quite strange. The source-highlighting plugin was called (probably for the java file), but then when it calls `pagetype($pagesources{$page})` to figure out the file type, that function returns `mdwn`, which confuses things somewhat. +> This is a known possible point of confusion. If there are multiple source +> files, it will render them both, in an arbitrary sequence, so one "wins". +> --[[Joey]] + Anyway, I'm thinking about possible solutions. The best option I've come up with so far is: when registering an htmlize hook, add a new optional paramter 'keep_extension'. This would make a source file of `hello.c` generate a page with name `hello.c` rather than the current `hello`. This would keep the pages unique (until someone makes `hello.c.mdwn`...). Suggestions welcome. -- [[Will]] + +> Ok, this turned out not to be a hard change. [[patch]] is below. With this patch you can tell IkiWiki not to drop the suffix when you register a hook: `hook(type => "htmlize", id => $lang, call => \&htmlize, leavesuffix => 1);` + +>> I think that's a good solution to the problem that most syntax plugins +>> have struggled with. It makes sense. It doesn't solve the case where +>> you have source files without any extension (eg `Makefile`), but at +>> least it covers the common cases. +>> +>> I'm going to be annoying and call it "keepextension", otherwise, applied +>> as-is. --[[Joey]] [[done]] + + diff --git a/IkiWiki.pm b/IkiWiki.pm + index 4e4da11..853f905 100644 + --- a/IkiWiki.pm + +++ b/IkiWiki.pm + @@ -618,7 +618,7 @@ sub pagename ($) { + + my $type=pagetype($file); + my $page=$file; + - $page=~s/\Q.$type\E*$// if defined $type; + + $page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{leavesuffix}; + return $page; + } + + diff --git a/t/pagename.t b/t/pagename.t + index 96e6a87..58811b9 100755 + --- a/t/pagename.t + +++ b/t/pagename.t + @@ -6,7 +6,7 @@ use Test::More tests => 5; + BEGIN { use_ok("IkiWiki"); } + + # Used internally. + -$IkiWiki::hooks{htmlize}{mdwn}=1; + +$IkiWiki::hooks{htmlize}{mdwn}{call}=1; + + is(pagename("foo.mdwn"), "foo"); + is(pagename("foo/bar.mdwn"), "foo/bar"); + +---- + +I wonder if this patch will also be useful: + +> Reasonable, applied. + + diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm + index 752d176..3f1b67b 100644 + --- a/IkiWiki/Render.pm + +++ b/IkiWiki/Render.pm + @@ -279,7 +279,11 @@ sub refresh () { + else { + $f=~s/^\Q$config{srcdir}\E\/?//; + push @files, $f; + - $exists{pagename($f)}=1; + + my $pagename = pagename($f); + + if ($exists{$pagename}) { + + warn(sprintf(gettext("Page %s has multiple possible source pages"), $pagename)."\n"); + + } + + $exists{$pagename}=1; + } + } + },