summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/htmltidy.pm
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/Plugin/htmltidy.pm')
-rw-r--r--IkiWiki/Plugin/htmltidy.pm32
1 files changed, 32 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/htmltidy.pm b/IkiWiki/Plugin/htmltidy.pm
new file mode 100644
index 000000000..ad405dce5
--- /dev/null
+++ b/IkiWiki/Plugin/htmltidy.pm
@@ -0,0 +1,32 @@
+#!/usr/bin/perl
+# HTML Tidy plugin
+# requires 'tidy' binary, found in Debian or http://tidy.sf.net/
+# mostly a proof-of-concept on how to use external filters.
+# It is particularly useful when the html plugin is used.
+#
+# by Faidon Liambotis
+package IkiWiki::Plugin::tidy;
+
+use warnings;
+use strict;
+use IkiWiki;
+use IPC::Open2;
+
+sub import { #{{{
+ IkiWiki::hook(type => "sanitize", id => "tidy", call => \&sanitize);
+} # }}}
+
+sub sanitize ($) { #{{{
+ open2(*IN, *OUT, 'tidy -quiet -xml -indent -utf8') or return shift;
+ # open2 doesn't respect "use open ':utf8'"
+ binmode (IN, ':utf8');
+ binmode (OUT, ':utf8');
+
+ print OUT shift;
+ close OUT;
+
+ local $/ = undef;
+ return <IN>;
+} # }}}
+
+1