class Diff::LCS::HTMLDiff
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] > 0 && self.class.can_expand_tabs formatter = Text::Format.new formatter.tabstop = @options[:expand_tabs] @left = left.map { |line| formatter.expand(line.chomp) } @right = right.map { |line| formatter.expand(line.chomp) } end @left.map! { |line| CGI.escapeHTML(line.chomp) } @right.map! { |line| CGI.escapeHTML(line.chomp) } @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> <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] < 0 @options[:output] ||= $stdout @options[:css] ||= DEFAULT_CSS.dup @options[:title] ||= "diff" end