I'm just working on an updated solution to [[todo/automatic_use_of_syntax_plugin_on_source_code_files]] (see also [[plugins/contrib/highlightcode]] or [[plugins/contrib/sourcehighlight]]). I realised that this is going to have problems when you ask it to process `.c` and `.h` files with the same base name. e.g. `hello.c` and `hello.h`. 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. 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);` 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");