#!/bin/sh

CAT=cat
WIDTH=72
NO_CHANGE='s#^##'
test "x$1" = "x-m" && NO_CHANGE='s#.*#[...]#' && shift
test "x$1" = "x-o" && NO_CHANGE='d' && shift
test "x$1" = "x-w" && WIDTH="$2" && shift && shift
test "x$1" = "x--try-mailcap" && CAT='run-mailcap --action=cat' && shift
test -z "$2" && echo "Usage:	$0 [-m | -o] [-w num] file1 file2" 1>&2 && exit 1

TEMPFILE="`mktemp worddiff.XXXXXXXX`"
trap 'rm $TEMPFILE' 0 1 15

wordify () {
	sed 's#^[[:space:]]*$##' | cat -s | \
	sed 's#^ *$#<p>#' | tr -s '[:space:]' \\012
}

markdiffs () {
	sed '/^---/d;/^+++/d;/^@@/d' | \
	sed 's#^-\(.*\)$#<del>\1</del>#;s#^+\(.*\)$#<ins>\1</ins>#;s#^ ##' | \
	sed ': start;/<p>/!{;N;s#\n# #;b start;}' | \
	sed 's#<ins><p></ins>#<p>#;s#<del><p></del>#<p>#;s#<p>$##' | \
	sed "/<ins>/!{;/<del>/!$NO_CHANGE;}" | \
	sed 's#</ins> <ins># #g;s#</del> <del># #g'
}

$CAT "$1" | wordify > $TEMPFILE
$CAT "$2" | wordify | diff -U 15000 $TEMPFILE - | \
	markdiffs | uniq | sed 's#^#<p>#;G' | fold -s -w "$WIDTH"
