class Diff::LCS::HTMLDiff

Produce a simple HTML diff view.

def initialize(left, right, options = nil)

def initialize(left, right, options = nil)
  @left     = left
  @right    = right
  @options  = options
  @options = DEFAULT_OPTIONS.dup if @options.nil?
end

def run

def run
  verify_options
  if @options[:expand_tabs].positive? && self.class.can_expand_tabs
    formatter = Text::Format.new
    formatter.tabstop = @options[:expand_tabs]
    @left.map! do |line| formatter.expand(line.chomp) end
    @right.map! do |line| formatter.expand(line.chomp) end
  end
  @left.map! do |line| CGI.escapeHTML(line.chomp) end
  @right.map! do |line| CGI.escapeHTML(line.chomp) end
  @options[:output] << <<-OUTPUT
tml>
<head>
  <title>#{@options[:title]}</title>
  <style type="text/css">
  #{@options[:css]}
  </style>
</head>
<body>
  <h1>#{@options[:title]}</h1>
  <p>Legend: <span class="only_a">Only in Old</span>&nbsp;
  <span class="only_b">Only in New</span></p>
  <div class="diff">
  OUTPUT
  callbacks = Callbacks.new(@options[:output])
  Diff::LCS.traverse_sequences(@left, @right, callbacks)
  @options[:output] << <<-OUTPUT
  </div>
</body>
html>
  OUTPUT
end

def verify_options

def verify_options
  @options[:expand_tabs] ||= 4
  @options[:expand_tabs] = 4 if @options[:expand_tabs].negative?
  @options[:output] ||= $stdout
  @options[:css] ||= DEFAULT_CSS.dup
  @options[:title] ||= 'diff'
end