Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 53 additions & 30 deletions src/Dimensions/show.jl
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
function dimsymbols(i)
# Symbols and colors
function dimsymbol(i)
symbols = ['↓', '→', '↗', '⬔', '◩', '⬒', '⬓', '■']
symbols[min(i, length(symbols))]
end
function dimcolors(i)
function dimcolor(i::Int)
# colors = [203, 37, 162, 106, 67, 173, 91]
# colors = [110, 216, 223, 218, 153, 79, 185, 142, 253]
# colors = reverse([61, 153, 73, 29, 143, 186, 174, 132, 133])
Expand All @@ -12,61 +13,88 @@ function dimcolors(i)
c = rem(i - 1, length(colors)) + 1
colors[c]
end
dimcolor(io::IO) = get(io, :dimcolor, dimcolor(1))

@deprecate dimcolor(x) dimcolor(x) false
@deprecate dimsymbols(x) dimsymbol(x) false

# Base methods

Base.show(io::IO, dims::DimTuple) = show_dims(io, MIME"text/plain"(), dims)
Base.show(io::IO, mime::MIME"text/plain", dims::DimTuple) = show_dims(io, mime, dims)
function Base.show(io::IO, mime::MIME"text/plain", dim::Dimension)
get(io, :compact, false) && return show_compact(io, mime, dim)
# Print the dimension name
print_dimname(io, dim)
# Print whitespace after dim name, unless the val is not shown
dimname_len = get(io, :dimname_len, 0)
this_dimname_len = length(string(name(dim)))
print(io, repeat(" ", max(0, dimname_len - this_dimname_len)))
# Print the dimension value
print_dimval(io, mime, val(dim))
end
function Base.show(io::IO, ::MIME"text/plain",
dim::Dimension{<:Union{AbstractNoLookup,AutoLookup,Colon}}
)
print_dimname(io, dim)
end

function show_dims(io::IO, mime::MIME"text/plain", dims::DimTuple;
colors=map(x -> get(io, :dimcolor, dimcolors(x)), ntuple(identity, length(dims)))
colors=map(x -> get(io, :dimcolor, dimcolor(x)), ntuple(identity, length(dims)))
)
ctx = IOContext(io, :compact => true)
# Add whitespace inset
inset = get(io, :inset, "")
brackets = get(io, :dim_brackets, true)
print(io, inset)
# Print brackets
brackets = get(io, :dim_brackets, true)
brackets && print(io, '(')
if all(map(d -> !(parent(d) isa AbstractArray) || (parent(d) isa AbstractNoLookup), dims))
# No lookups, dims all go on one line
dc = colors[1]
printstyled(io, dimsymbols(1), ' '; color=dc)
# Print the first dim
printstyled(io, dimsymbol(1), ' '; color=dc)
show(IOContext(ctx, :dimcolor => dc, :dimname_len => 0), mime, first(dims))
# Print the rest of the dims
foreach(enumerate(Base.tail(dims))) do (i, d)
n = i + 1
print(io, ", ")
dc = colors[n]
printstyled(io, dimsymbols(n), ' '; color=dc)
printstyled(io, dimsymbol(n), ' '; color=dc)
show(IOContext(ctx, :dimcolor => dc, :dimname_len => 0), mime, d)
end
# Maybe close brackets
brackets && print(io, ')')
return 0
else # Dims get a line each
else
# Dims get a line each
lines = 3
# Print the first dim
dc = colors[1]
printstyled(io, dimsymbols(1), ' '; color=dc)
maxname = maximum(length ∘ string ∘ name, dims)
dim_ctx = IOContext(ctx, :dimcolor => dc, :dimname_len=> maxname)
printstyled(io, dimsymbol(1), ' '; color=dc)
# Get the maximum dim name length
max_name_len = maximum(length ∘ string ∘ name, dims)
# Update context with colors and name length
dim_ctx = IOContext(ctx, :dimcolor => dc, :dimname_len=> max_name_len)
# Show the dim
show(dim_ctx, mime, first(dims))
lines += 1
# Print the rest of the dims
map(Base.tail(dims), ntuple(x -> x + 1, length(dims) - 1)) do d, n
lines += 1
s = dimsymbols(n)
s = dimsymbol(n)
print(io, ",\n", inset)
dc = colors[n]
printstyled(io, s, ' '; color=dc)
dim_ctx = IOContext(ctx, :dimcolor => dc, :dimname_len => maxname)
dim_ctx = IOContext(ctx, :dimcolor => dc, :dimname_len => max_name_len)
show(dim_ctx, mime, d)
end
# Maybe close brackets
brackets && print(io, ')')
return lines
end
end

Base.show(io::IO, dims::DimTuple) = show_dims(io, MIME"text/plain"(), dims)
Base.show(io::IO, mime::MIME"text/plain", dims::DimTuple) = show_dims(io, mime, dims)
function Base.show(io::IO, mime::MIME"text/plain", dim::Dimension)
get(io, :compact, false) && return show_compact(io, mime, dim)
print_dimname(io, dim)
print_dimval(io, mime, val(dim))
end
function Base.show(io::IO, mime::MIME"text/plain", dim::Dimension{Colon})
print_dimname(io, dim)
end

# compact version for dimensions
show_compact(io::IO, mime, dim::Dimension{Colon}) = print_dimname(io, dim)
function show_compact(io::IO, mime, dim::Dimension)
Expand All @@ -84,8 +112,6 @@ function show_compact(io::IO, mime, dim::Dimension)
end
end

dimcolor(io) = get(io, :dimcolor, dimcolors(1))

# print dims with description string and inset
function print_dims(io::IO, mime, dims::Tuple{}; kw...)
@nospecialize io mime dims
Expand All @@ -107,19 +133,16 @@ function print_refdims(io::IO, mime, refdims::Tuple)
return lines
end
# print a dimension name
function print_dimname(io, dim::Dimension)
dimname_len = get(io, :dimname_len, 0)::Int
printstyled(io, rpad(String(name(dim)), dimname_len); color=dimcolor(io))
end

print_dimname(io, dim::Dimension) = printstyled(io, name(dim); color=dimcolor(io))

# print the dimension value
function print_dimval(io, mime, val, nchars=0)
val isa Colon || print(io, " ")
printstyled(io, val; color=get(io, :dimcolor, 1))
end
print_dimval(io, mime, lookup::AbstractArray, nchars=0) =
Lookups.print_index(io, mime, lookup, nchars)
Lookups.print_lookup_values(io, mime, lookup, nchars)
print_dimval(io, mime, lookup::AbstractArray{<:Any,0}, nchars=0) =
printstyled(io, " ", lookup; color=get(io, :dimcolor, 1))
print_dimval(io, mime, lookup::Union{AutoLookup,AbstractNoLookup}, nchars=0) = print(io, "")
Expand Down
15 changes: 6 additions & 9 deletions src/Lookups/show.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ end

function Base.show(io::IO, mime::MIME"text/plain", lookup::Lookup)
show_compact(io, mime, lookup)
get(io, :compact, false) && print_index(io, mime, parent(lookup))
get(io, :compact, false) && print_lookup_values(io, mime, parent(lookup))
show_properties(io, mime, lookup)
if !get(io, :compact, false)
println(io)
Expand Down Expand Up @@ -90,18 +90,15 @@ function print_metadata(io, lookup)
print(io, nameof(typeof(metadata(lookup))))
end

function print_index(io, mime, A::AbstractRange, nchars=0)
function print_lookup_values(io, mime, A::AbstractRange, nchars=0)
print(io, " ")
printstyled(io, repr(A); color=get(io, :dimcolor, :white))
end
function print_index(io, mime, v::AbstractVector, nchars=0)
function print_lookup_values(io, mime, v::AbstractVector, nchars=0)
print(io, " ")
# Maximum 2 values for dates
vals = if length(v) > 2 && eltype(v) <: Dates.TimeType
"$(v[begin]), …, $(v[end])"
# Maximum 4 values for other types
elseif length(v) > 5
"$(v[begin]), $(v[begin+1]), …, $(v[end-1]), $(v[end])"
# Maximum 2 values
vals = if length(v) > 2
join((repr(v[begin]), "…", repr(v[end])), ", ")
else
join((repr(va) for va in v), ", ")
end
Expand Down
Loading
Loading