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> <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