-
Notifications
You must be signed in to change notification settings - Fork 23
/
types.jl
79 lines (60 loc) · 1.58 KB
/
types.jl
1
2
3
4
5
6
7
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Displays
struct Inline end
struct Clipboard end
struct Editor end
struct Console end # deprecated
struct PlotPane end
# View data structures
mutable struct Model
data
end
struct Tree
head
children::Vector{Any}
end
struct LazyTree
head
children::Function
end
struct SubTree
label
child
end
limit(s::AbstractString) = length(s) ≤ 5000 ? s : s[chr2ind(s, 1):chr2ind(s, 5000)]*"..."
struct Copyable
view
text::String
Copyable(view, text::String) = new(view, limit(text))
end
Copyable(view, text) = Copyable(view, render(Clipboard(), text))
Copyable(view) = Copyable(view, view)
struct Link
file::String
line::Int
contents::Vector{Any}
function Link(file::AbstractString, line::Integer, contents...)
isempty(contents) && (contents = ("$file:$line",))
new(file, line, [contents...])
end
end
Link(file::AbstractString, contents...) = Link(file, 0, contents...)
link(a...) = Link(a...)
mutable struct Row
xs::Vector{Any}
Row(xs...) = new(collect(xs))
end
mutable struct Table
xs::Matrix{Any}
end
"""
defaultrepr(x, lazy = false)
`render` fallback for types without any specialized `show` methods.
If `lazy` is true, then the type's fields will be loaded lazily when expanding the tree.
This is useful when the fields contain big elements that might need to be inspectable.
Can be used by packages to restore Juno's default printing if they have defined
a `show` method that should *not* be used by Juno:
```julia
Juno.render(i::Juno.Inline, x::myType) = Juno.render(i, Juno.defaultrepr(x))
```
"""
defaultrepr(x, lazy = false) = Atom.defaultrepr(x, lazy)