* Don't run tidy with -xml as that fails if the input is not well-formed.

Run it with -asxhtml instead, so it will output well-formed xhtml no
  matter what the input.
* Disable tidy warnings too.
* Add a new format hook, and make tidy use it, since tidy can really only
  operate on and output complete html documents, not the body chunks
  that sanitise gets.
master
joey 2006-08-04 07:41:02 +00:00
parent acaee3d0bc
commit 0708bb8aec
5 changed files with 32 additions and 7 deletions

View File

@ -13,11 +13,11 @@ use IkiWiki;
use IPC::Open2;
sub import { #{{{
IkiWiki::hook(type => "sanitize", id => "tidy", call => \&sanitize);
IkiWiki::hook(type => "format", id => "tidy", call => \&format);
} # }}}
sub sanitize ($) { #{{{
open2(*IN, *OUT, 'tidy -quiet -xml -indent -utf8') or return shift;
sub format ($) { #{{{
open2(*IN, *OUT, 'tidy -quiet -asxhtml -indent -utf8 --show-warnings no') or return shift;
# open2 doesn't respect "use open ':utf8'"
binmode (IN, ':utf8');
binmode (OUT, ':utf8');

View File

@ -187,7 +187,13 @@ sub genpage ($$$) { #{{{
shift->(page => $page, destpage => $page, template => $template);
});
return $template->output;
$content=$template->output;
run_hooks(format => sub {
$content=shift->($content);
});
return $content;
} #}}}
sub check_overwrite ($$) { #{{{

9
debian/changelog vendored
View File

@ -13,8 +13,15 @@ ikiwiki (1.16) UNRELEASED; urgency=low
* Also generate rel=bookmark links for permalinks.
* Fix the htmltidy plugin, which wasn't working due my breaking it when
I added it..
* Don't run tidy with -xml as that fails if the input is not well-formed.
Run it with -asxhtml instead, so it will output well-formed xhtml no
matter what the input.
* Disable tidy warnings too.
* Add a new format hook, and make tidy use it, since tidy can really only
operate on and output complete html documents, not the body chunks
that sanitise gets.
-- Joey Hess <joeyh@debian.org> Fri, 4 Aug 2006 03:03:19 -0400
-- Joey Hess <joeyh@debian.org> Fri, 4 Aug 2006 03:33:09 -0400
ikiwiki (1.15) unstable; urgency=low

View File

@ -13,7 +13,9 @@ aggregated feeds.
## setup
Make sure that you have the [[html]] plugin enabled, as the created pages are
in html format. The [[meta]] and [[tag]] plugins are also recommended.
in html format. The [[meta]] and [[tag]] plugins are also recommended. The
[[htmltidy]] plugin is suggested, since feeds can easily contain invalid
html which tidy can fix.
You will need to run ikiwiki periodically from a cron job, passing it the
--aggregate parameter, to make it check for new posts. Here's an example

View File

@ -129,10 +129,20 @@ to set it, as setting a variable that's not present is an error.
IkiWiki::hook(type => "sanitize", id => "foo", call => \&sanitize);
Use this to implement html sanitization or anything else that needs to
modify the content of a page after it has been fully converted to html.
modify the body of a page after it has been fully converted to html.
The function is passed the page content and should return the sanitized
content.
## format
IkiWiki::hook(type => "format", id => "foo", call => \&format);
The function is passed the complete page content and can reformat it
and return the new content. The difference between format and sanitize is
that sanitize only acts on the page body, while format can modify the
entire html page including the header and footer inserted by ikiwiki, the
html document type, etc.
## delete
IkiWiki::hook(type => "delete", id => "foo", call => \&delete);