8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/cless/export.rb', line 8
def self.export(file, format, lines, data, display, opts = {})
current_line = nil
mod = Format[format] or raise "Unsupported format '#{format}'"
line_s = lines.begin
line_e = lines.end
if !line_s.kind_of?(Integer) || !line_e.kind_of?(Integer) ||
line_s > line_e || line_s < 0
raise "Invalid line range '#{lines}'"
end
current_line = data.line + 1
nb_lines = line_e - line_s + 1
data.goto_line(line_s)
data.cache_fill(nb_lines)
nb_col = data.sizes.size
col_start = display.col_start
hidden = display.col_hidden
hidden.map! { |x| x - col_start } col_show = (0...nb_col).to_a - hidden
nb_col = col_show.size
lines = proc { |b|
data.lines(nb_lines) { |l|
next if l.kind_of?(IgnoredLine)
a = l.values_at(*col_show)
b.call(a)
}
}
class << lines
def each(&b); self.call(b); end
end
columns = if display.col_names
display..values_at(*col_show)
else
nil
end
File.open(file, "w") { |fd|
mod.export(fd, nb_col, lines, columns, opts)
return fd.pos
}
ensure
if current_line
data.clear_cache
data.goto_line(current_line)
end
end
|