[#39699] デーモン・プロセスの作り方 — "Mitsuyasu Ichimura" <mitsuyasu@...>

こんにちは、市村と申します。

27 messages 2004/06/01
[#39710] Re: デーモン・プロセスの作り方 — Masayoshi Takahashi <maki@...> 2004/06/01

高橋征義です。宣伝モードです(_o_)

[#39711] Re: デーモン・プロセスの作り方 — nobu.nakada@... 2004/06/01

なかだです。

[ruby-list:39790] Re: SimpleDiff

From: Nowake <nowake@...>
Date: 2004-06-23 17:11:09 UTC
List: ruby-list #39790
野分です。

> こんな感じで使えばよいのでしょうか。

OKかと思います。
ただ、こうしたほうがスマートな気がします。

------------------8<------------------8=------------------
  class HtmlResult < OriginalBaseResult
    ------------------8<------------------8=------------------
    def changes( original )
      ori = HtmlResultCreator.tokenize( original )
      result = ""; idx = 0
      p ori
      @data.each do | i |
        result << ori[idx...i[0]].join
        result << "<del>#{i[1].join}</del>" if not i[1].empty?
        result << "<ins>#{i[2].join}</ins>" if not i[2].empty?
        idx = i[0] + i[1].size
      end
      result << ori[idx...ori.size].join if idx < ori.size
      result
    end
    ------------------8<------------------8=------------------

result = Algorithm::SimpleDiff::Diff.new( a, b, HtmlResultCreator).result
puts result.changes( a )


> メソッド名が patch でよかったのか自信がないですが…。

patchは、通常「修正後の文章を作成する」という目的で使用されるので、変更
が判るようにするメソッド名にはしないほうがいいと思います。
わたしだったら、changes とかresult_htmlとかですかね……

あと、再利用しない使い捨てコードなら、これでもOKですね。

result = ""
diff = Algorithm::SimpleDiff::Diff.new( a.scan(/\W+|\w+/), b.scan(/\W+|\w+/) )
diff.trace do | ori,mod,ori_pos,mod_pos |
  if ori.empty?
    result << "<ins>#{mod.join}</ins>"
  elsif mod.empty?
    result << "<del>#{ori.join}</del>"
  else
    result << ori.join
  end
end
p result

In This Thread