htmldiff.rb

HTML ファイル同士を、行毎でなくワード毎に比較して、HTML で(ins, del タグを使って) 出力したかった。ので作った。


htmldiff.rb:

#!/usr/bin/env ruby
require 'hiki/util'
include Hiki::Util

def usage
   STDERR.puts "Usage: #{$0} before.html after.html"
end


if __FILE__ == $0
   if ARGV.size != 2
      usage
      exit 1
   end

   before = File.read ARGV.shift
   after = File.read ARGV.shift

   diff = word_diff_text(before, after)
   diff.gsub!(/(\[-)(.*?)(-\])/) { %Q|<del>#{$2}</del>| }
   diff.gsub!(/(\{\+)(.*?)(\+\})/) { %Q|<ins>#{$2}</ins>| }
   puts diff
end

Hiki ラブ。 DocDiff ラブ。
hisashim さん ごめんなさい。奥まで見てなかったwww


こんな感じ

$ cat before.html
<html>
    <body>
        <h1>Before</h1>
        text teXt text
    </body>
</html>


$ cat after.html
<html>
    <body>
        <h1>After</h1>
        text teSt text
    </body>
</html>


$ ruby -I./hiki htmldiff.rb before.html after.html
<html>
    <body>
        <del><h1>Before</h1></del><ins><h1>After</h1></ins>
        text <del>teXt </del><ins>teSt </ins>text
    </body>
</html>

h1 タグのトコは見なかったことにする。