class Coopy::TerminalDiffRender
Attributes
align_columns[RW]
codes[RW]
csv[RW]
delim[RW]
diff[RW]
flags[RW]
t[RW]
use_glyphs[RW]
v[RW]
wide_columns[RW]
Public Class Methods
new(flags = nil,delim = nil,diff = true)
click to toggle source
# File lib/lib/coopy/terminal_diff_render.rb, line 7 def initialize(flags = nil,delim = nil,diff = true) @align_columns = true @wide_columns = false @use_glyphs = true @flags = flags if flags != nil @align_columns = false if flags.padding_strategy == "dense" @wide_columns = true if flags.padding_strategy == "sparse" @use_glyphs = flags.use_glyphs end if delim != nil @delim = delim else @delim = "," end @diff = diff end
Public Instance Methods
render(t)
click to toggle source
# File lib/lib/coopy/terminal_diff_render.rb, line 44 def render(t) @csv = ::Coopy::Csv.new result = "" w = t.get_width h = t.get_height @t = t @v = t.get_cell_view @codes = {} @codes["header"] = "\x1B[0;1m" @codes["minor"] = "\x1B[33m" @codes["done"] = "\x1B[0m" @codes["meta"] = "\x1B[0;1m" @codes["spec"] = "\x1B[35;1m" @codes["add"] = "\x1B[32;1m" @codes["conflict"] = "\x1B[33;1m" @codes["modify"] = "\x1B[34;1m" @codes["remove"] = "\x1B[31;1m" sizes = nil sizes = self.pick_sizes(t) if @align_columns txts = Array.new begin _g = 0 while(_g < h) y = _g _g+=1 target = 0 at = 0 begin _g1 = 0 while(_g1 < w) x = _g1 _g1+=1 if sizes != nil spaces = target - at begin _g2 = 0 while(_g2 < spaces) i = _g2 _g2+=1 txts.push(" ") at+=1 end end end if x > 0 txts.push(@codes["minor"]) txts.push(@delim) txts.push(@codes["done"]) end txts.push(self.get_text(x,y,true)) if sizes != nil bit = self.get_text(x,y,false) at += bit.length target += sizes[x] end end end txts.push("\r\n") end end @t = nil @v = nil @csv = nil @codes = nil txts.join("") end
Protected Instance Methods
get_text(x,y,color)
click to toggle source
# File lib/lib/coopy/terminal_diff_render.rb, line 113 def get_text(x,y,color) val = @t.get_cell(x,y) cell = ::Coopy::DiffRender.render_cell(@t,@v,x,y) if color && @diff code = nil code = @codes[cell.category] if cell.category != nil if cell.category_given_tr != nil code_tr = @codes[cell.category_given_tr] code = code_tr if code_tr != nil end if code != nil separator = nil if @use_glyphs separator = cell.pretty_separator else separator = cell.separator end if cell.rvalue != nil val = _hx_str(@codes["remove"]) + _hx_str(cell.lvalue) + _hx_str(@codes["modify"]) + _hx_str(separator) + _hx_str(@codes["add"]) + _hx_str(cell.rvalue) + _hx_str(@codes["done"]) val = _hx_str(@codes["conflict"]) + _hx_str(cell.pvalue) + _hx_str(@codes["modify"]) + _hx_str(separator) + _hx_str(val.to_s) if cell.pvalue != nil else if @use_glyphs val = cell.pretty_value else val = cell.value end val = _hx_str(code) + _hx_str(val.to_s) + _hx_str(@codes["done"]) end end elsif color && !@diff val = _hx_str(@codes["header"]) + _hx_str(val.to_s) + _hx_str(@codes["done"]) if y == 0 elsif @use_glyphs val = cell.pretty_value else val = cell.value end @csv.render_cell(@v,val) end
pick_sizes(t)
click to toggle source
# File lib/lib/coopy/terminal_diff_render.rb, line 152 def pick_sizes(t) w = t.get_width h = t.get_height v = t.get_cell_view csv = ::Coopy::Csv.new sizes = Array.new row = -1 total = w - 1 begin _g = 0 while(_g < w) x = _g _g+=1 m = 0 m2 = 0 mmax = 0 mmostmax = 0 mmin = -1 begin _g1 = 0 while(_g1 < h) y = _g1 _g1+=1 txt = self.get_text(x,y,false) row = y if txt == "@@" && row == -1 && @diff row = y if row == -1 && !@diff len = txt.length mmin = len if y == row m += len m2 += len * len mmax = len if len > mmax end end mean = m / h stddev = Math.sqrt(m2 / h - mean * mean) most = (mean + stddev * 2 + 0.5).to_i begin _g11 = 0 while(_g11 < h) y1 = _g11 _g11+=1 txt1 = self.get_text(x,y1,false) len1 = txt1.length if len1 <= most mmostmax = len1 if len1 > mmostmax end end end full = mmax most = mmostmax if mmin != -1 most = mmin if most < mmin end most = full if @wide_columns sizes.push(most) total += most end end return nil if total > 130 sizes end