77 lines
3.2 KiB
Markdown
77 lines
3.2 KiB
Markdown
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.
|
|
|
|
> 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;
|
|
}
|
|
}
|
|
},
|