From 65e3dcf3ad4c2e815c4f0db82e30554b0e049a04 Mon Sep 17 00:00:00 2001 From: t-bltg Date: Sun, 19 Dec 2021 22:29:54 +0100 Subject: [PATCH] support sixel --- src/backends/unicodeplots.jl | 90 ++++++++++++++++++++---------------- src/examples.jl | 3 +- 2 files changed, 50 insertions(+), 43 deletions(-) diff --git a/src/backends/unicodeplots.jl b/src/backends/unicodeplots.jl index b7b794d34..c35f3bbe4 100644 --- a/src/backends/unicodeplots.jl +++ b/src/backends/unicodeplots.jl @@ -114,7 +114,7 @@ function addUnicodeSeries!( elseif st == :spy return UnicodePlots.spy(series[:z].surf; kw...) elseif st == :image - return UnicodePlots.imshow(series[:z].surf; kw...) + return UnicodePlots.image(series[:z].surf; kw...) end series_kw = (;) @@ -195,53 +195,61 @@ Base.show(io::IO, plt::Plot{UnicodePlotsBackend}) = _show(io, MIME("text/plain") function _show(io::IO, ::MIME"text/plain", plt::Plot{UnicodePlotsBackend}) unicodeplots_rebuild(plt) nr, nc = size(plt.layout) - lines_colored = Array{Union{Nothing,Vector{String}}}(undef, nr, nc) - lines_uncolored = copy(lines_colored) - l_max = zeros(Int, nr) - w_max = zeros(Int, nc) - buf = IOBuffer() - cbuf = IOContext(buf, :color => true) - re_col = r"\x1B\[[0-9;]*[a-zA-Z]" - sps = 0 - for r in 1:nr - lmax = 0 - for c in 1:nc - l = plt.layout[r, c] - if l isa GridLayout && size(l) != (1, 1) - @error "UnicodePlots: complex nested layout is currently unsupported !" - else - if get(l.attr, :blank, false) - lines_colored[r, c] = lines_uncolored[r, c] = nothing + if nr == 1 && nc == 1 # fast path + for p in plt.o + show(io, p) + println(io) + end + else + # FIXME: sixel unsupported + lines_colored = Array{Union{Nothing,Vector{String}}}(undef, nr, nc) + lines_uncolored = copy(lines_colored) + l_max = zeros(Int, nr) + w_max = zeros(Int, nc) + buf = IOBuffer() + cbuf = IOContext(buf, :color => true) + re_col = r"\x1B\[[0-9;]*[a-zA-Z]" + sps = 0 + for r in 1:nr + lmax = 0 + for c in 1:nc + l = plt.layout[r, c] + if l isa GridLayout && size(l) != (1, 1) + @error "UnicodePlots: complex nested layout is currently unsupported !" else - sp = plt.o[sps += 1] - show(cbuf, sp) - colored = String(take!(buf)) - uncolored = replace(colored, re_col => "") - lines_colored[r, c] = lc = split(colored, "\n") - lines_uncolored[r, c] = lu = split(uncolored, "\n") - lmax = max(length(lc), lmax) - w_max[c] = max(maximum(length.(lu)), w_max[c]) + if get(l.attr, :blank, false) + lines_colored[r, c] = lines_uncolored[r, c] = nothing + else + sp = plt.o[sps += 1] + show(cbuf, sp) + colored = String(take!(buf)) + uncolored = replace(colored, re_col => "") + lines_colored[r, c] = lc = split(colored, "\n") + lines_uncolored[r, c] = lu = split(uncolored, "\n") + lmax = max(length(lc), lmax) + w_max[c] = max(maximum(length.(lu)), w_max[c]) + end end end + l_max[r] = lmax end - l_max[r] = lmax - end - empty = String[' '^w for w in w_max] - for r in 1:nr - for n in 1:l_max[r] - for c in 1:nc - pre = c == 1 ? '\0' : ' ' - lc = lines_colored[r, c] - if lc === nothing || length(lc) < n - print(io, pre, empty[c]) - else - lu = lines_uncolored[r, c] - print(io, pre, lc[n], ' '^(w_max[c] - length(lu[n]))) + empty = String[' '^w for w in w_max] + for r in 1:nr + for n in 1:l_max[r] + for c in 1:nc + pre = c == 1 ? '\0' : ' ' + lc = lines_colored[r, c] + if lc === nothing || length(lc) < n + print(io, pre, empty[c]) + else + lu = lines_uncolored[r, c] + print(io, pre, lc[n], ' '^(w_max[c] - length(lu[n]))) + end end + println(io) end - println(io) + r < nr && println(io) end - r < nr && println(io) end nothing end diff --git a/src/examples.jl b/src/examples.jl index c173f328b..4711a8611 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -1286,7 +1286,6 @@ _backend_skips = Dict( :inspectdr => [4, 6, 10, 22, 24, 28, 30, 38, 43, 45, 47, 48, 49, 50, 51, 55, 56], :unicodeplots => [ 5, # limits issue - 6, # embedded images unsupported 16, # nested layout unsupported 21, # custom markers unsupported 22, # contours unsupported @@ -1302,7 +1301,7 @@ _backend_skips = Dict( 47, # mesh3D unsupported 49, # polar heatmap 50, # 3D surface unsupported - 51, # embedded images unsupported + 51, # drawing on top of image unsupported 52, # 3D quiver unsupported 55, # 3D unsupported 56, # barplots