山本です。

>   2. _((hoge)) が残っている

これを解消するスクリプトを作りましたので、近いうちにコミットしようと
思います。([ruby-dev:27042] が修正された後くらいに)

def convert(path)

  changed = false

  require "stringio"

  buffer = StringIO.new

  IO.foreach(path) do |s|

    while i = s.index(/\s+_+\(\(/)

      i2 = j2 = i + $&.size

      nest = 0

      while j2 = s.index(/[()]/, j2)

        raise "nest error" if nest < 0

        if $& == ")" && nest == 0 # should be end of _((hoge))
          raise "bracket error" unless s[j2+1] == ?)
          j = j2 + 2
          s[i...j] = "(" + s[i2...j2] + ")"
          changed = true
          break

        elsif $& == ")" # nested bracket
          nest -= 1
          j2 += 1

        elsif $& == "(" # nested bracket
          nest += 1
          j2 += 1

        end

      end

      i = j

    end

    buffer << s

  end

  if changed
    open(path, "w") do |io|
      io.write(buffer.string)
    end
  end

end

#########################
# main

Dir.glob("*.[hc]") do |path|
  convert(path)
end