class HTMLDOMDiff::DeltaTreeBuilder

Attributes

ldoc[R]
rdoc[R]

Public Class Methods

new(ldoc, rdoc) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 4
def initialize(ldoc, rdoc)
  @ldoc     = ldoc
  @rdoc     = rdoc
  @weights  = {}
  @forward  = {}
  @backward = {}
end

Public Instance Methods

add_weight(element, weight) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 20
def add_weight(element, weight)
  @weights[element] = weight
end
left_match(lnode) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 37
def left_match(lnode)
  @forward[lnode]
end
left_matched?(lnode) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 41
def left_matched?(lnode)
  @forward.has_key?(lnode)
end
left_matches?(lnode, rnode) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 33
def left_matches?(lnode, rnode)
  @forward[lnode] == rnode
end
match(left, right) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 28
def match(left, right)
  @forward[left]   = right
  @backward[right] = left
end
right_matched?(rnode) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 45
def right_matched?(rnode)
  @backward.has_key?(rnode)
end
root() click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 12
def root
  wrap @rdoc
end
total_weight() click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 16
def total_weight
  @weights[ldoc].to_f + @weights[rdoc].to_f
end
weight(element) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 24
def weight(element)
  @weights[element]
end

Private Instance Methods

reverse_wrap(lnode, parent) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 67
def reverse_wrap(lnode, parent)
  return if @forward[lnode]
  result = Node.new nil, lnode, @weights[lnode]
  lnode.children.each { |c| reverse_wrap c, result }
  parent.add_child result
end
wrap(rnode, parent=nil) click to toggle source
# File lib/html-dom-diff/delta_tree_builder.rb, line 51
def wrap(rnode, parent=nil)
  result = Node.new rnode, @backward[rnode], @weights[rnode], parent
  rnode.children.each do |child|
    wrap child, result
  end
  if parent
    parent.add_child result
  end
  if @backward[rnode]
    @backward[rnode].children.each do |child|
      reverse_wrap(child, result)
    end
  end
  result
end