# 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("
foo
") You can also use a stream for large amounts of data: HTML() do io println(io, "
foo
") 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