Package: ikiwiki Version: 2.53.5 Severity: wishlist Attached is editdiff tweaked to use dwdiff instead (this requires the dwdiff in sid in order to not segfault).
I'd like for the dwdiff "markup" to be stylable without doing a full rendering of the diff, but I have no idea how to achieve that.
#!/usr/bin/perl # This plugin adds a "DWDiff" button to the page edit form. package IkiWiki::Plugin::editdwdiff; use warnings; use strict; use IkiWiki 3.00; use HTML::Entities; use IPC::Open2; sub import { hook(type => "getsetup", id => "editdwdiff", call => \&getsetup); hook(type => "formbuilder_setup", id => "editdwdiff", call => \&formbuilder_setup); } sub getsetup () { return plugin => { safe => 1, rebuild => 0, section => "web", }, } sub diff ($$) { my $orig=shift; my $content=shift; my $sigpipe=0; $SIG{PIPE} = sub { $sigpipe=1; }; my $pid = open2(*DIFFOUT, *DIFFIN, 'dwdiff', $orig, '-'); binmode($_, ':utf8') foreach (*DIFFIN, *DIFFOUT); print DIFFIN $content; close DIFFIN; my $ret=''; while (<DIFFOUT>) { if (defined $ret) { $ret.=$_; } elsif (/^...@\@/) { $ret=$_; } } close DIFFOUT; waitpid $pid, 0; $SIG{PIPE}="default"; return "couldn't run diff\n" if $sigpipe; return "<pre>".encode_entities($ret)."</pre>"; } sub formbuilder_setup { my %para...@_; my $form=$params{form}; return if ! defined $form->field("do") || $form->field("do") ne "edit"; my $page=$form->field("page"); $page = IkiWiki::possibly_foolish_untaint($page); return unless exists $pagesources{$page}; push @{$params{buttons}}, "DWDiff"; if ($form->submitted eq "DWDiff") { my $content=$form->field('editcontent'); $content=~s/\r\n/\n/g; $content=~s/\r/\n/g; my $diff = diff(srcfile($pagesources{$page}), $content); $form->tmpl_param("page_diff", $diff); } } 1