-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
/
utils.jl
119 lines (92 loc) · 2.24 KB
/
utils.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# This file is a part of Julia. License is MIT: https://julialang.org/license
# Text / HTML objects
import .Base: print, show, ==, hash
export HTML, @html_str
export HTML, Text
"""
`HTML(s)`: Create an object that renders `s` as html.
HTML("<div>foo</div>")
You can also use a stream for large amounts of data:
HTML() do io
println(io, "<div>foo</div>")
end
!!! warning
`HTML` is currently exported to maintain
backwards compatibility, but this export
is deprecated. It is recommended to use
this type as `Docs.HTML` or to explicitly
import it from `Docs`.
"""
mutable struct HTML{T}
content::T
end
function HTML(xs...)
HTML() do io
for x in xs
print(io, x)
end
end
end
show(io::IO, ::MIME"text/html", h::HTML) = print(io, h.content)
show(io::IO, ::MIME"text/html", h::HTML{<:Function}) = h.content(io)
"""
@html_str -> Docs.HTML
Create an `HTML` object from a literal string.
# Examples
```jldoctest
julia> html"Julia"
HTML{String}("Julia")
```
"""
macro html_str(s)
:(HTML($s))
end
function catdoc(xs::HTML...)
HTML() do io
for x in xs
show(io, MIME"text/html"(), x)
end
end
end
export Text, @text_str
"""
`Text(s)`: Create an object that renders `s` as plain text.
Text("foo")
You can also use a stream for large amounts of data:
Text() do io
println(io, "foo")
end
!!! warning
`Text` is currently exported to maintain
backwards compatibility, but this export
is deprecated. It is recommended to use
this type as `Docs.Text` or to explicitly
import it from `Docs`.
"""
mutable struct Text{T}
content::T
end
print(io::IO, t::Text) = print(io, t.content)
print(io::IO, t::Text{<:Function}) = t.content(io)
show(io::IO, t::Text) = print(io, t)
==(t1::T, t2::T) where {T<:Union{HTML,Text}} = t1.content == t2.content
hash(t::T, h::UInt) where {T<:Union{HTML,Text}} = hash(T, hash(t.content, h))
"""
@text_str -> Docs.Text
Create a `Text` object from a literal string.
# Examples
```jldoctest
julia> text"Julia"
Julia
```
"""
macro text_str(s)
:(Text($s))
end
function catdoc(xs::Text...)
Text() do io
for x in xs
show(io, MIME"text/plain"(), x)
end
end
end