class DiffGenerator
Constants
- MAX_TIME
Public Class Methods
gen_ary(s1, s2)
click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-diff.rb, line 18 def self.gen_ary(s1, s2) s1 = s1.gsub(/\r/, '') s2 = s2.gsub(/\r/, '') a1 = s1.split("\n").collect! {|s| "#{s}\n"} a2 = s2.split("\n").collect! {|s| "#{s}\n"} Diff.diff(a1, a2) end
generate(s1, s2, maxtime=MAX_TIME)
click to toggle source
ref. moonrock.jp/%7Edon/wikimodoki/security.html
# File vendor/qwik/lib/qwik/wabisabi-diff.rb, line 29 def self.generate(s1, s2, maxtime=MAX_TIME) result = nil begin Timeout.timeout(maxtime) { result = generate_internal(s1, s2) } rescue Timeout::Error return ['timeout'] end result end
generate_internal(s1, s2)
click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-diff.rb, line 41 def self.generate_internal(s1, s2) s1 = s1.gsub(/\r/, '') s2 = s2.gsub(/\r/, '') # why? #src = s1.split("\n").collect {|s| "#{s.escapeHTML}" } #src = s1 src = s1.split("\n").collect {|s| s } si = 0 di = 0 e = [] self.gen_ary(s1, s2).each {|action, position, elements| case action when :- while si < position e << src[si] e << [:br] si += 1 di += 1 end si += elements.length elements.each {|l| e << [:del, l.chomp] e << [:br] } when :+ while di < position e << src[si] e << [:br] si += 1 di += 1 end di += elements.length elements.each {|l| e << [:ins, l.chomp] e << [:br] } end } while si < src.length e << src[si] e << [:br] si += 1 end e end