I just completed a rewrite of the ShowChanges code on the NBTSC Wiki. It’s been two years in the making, counting from when I first hunted down the sourcecode to diff, the diff.st implementation, and a few hours of talks with my dad on possible ways to figure out what’s changed, and since I looked at the HTML spec to figure out where the <ins> and <del> tags were allowed to go.

It’s not an easy algorithm in the first place. It’s made worse by HTML’s stuff-inside-of-stuff-inside-of-stuff layout. The usual way diffs work is on flat lists of things. That’s the easy part. The hard part is figuring out the little bits that changed in a complex document.

I’d really appreciate bug reports right now, but I can’t make it break (for once!), and I’ve run it through a fair number of tests.

There’s more improvements in the works — at the moment, the smallest changes it’ll highlight is paragraphs. I’d like it to find individual words and sentences that have changed, but that’ll have to wait a while longer.