mollusk 0e4acfb8f2 fix incorrect folder name for julia-0.6.x
Former-commit-id: ef2c7401e0876f22d2f7762d182cfbcd5a7d9c70
2018-06-11 03:28:36 -07:00

146 lines
3.7 KiB
Julia
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# This file is a part of Julia. License is MIT: https://julialang.org/license
rst(x) = sprint(rst, x)
function rst(io::IO, content::Vector)
isempty(content) && return
for md in content[1:end-1]
rst(io, md)
println(io)
end
rst(io, content[end])
end
rst(io::IO, md::MD) = rst(io, md.content)
function rst{l}(io::IO, header::Header{l})
s = rstinline(header.text)
println(io, s)
println(io, string("*=-~:.^"[l])^length(s))
println(io)
end
function rst(io::IO, code::Code)
if code.language == "jldoctest"
println(io, ".. doctest::\n")
elseif code.language != "rst"
println(io, ".. code-block:: julia\n")
end
for l in lines(code.code)
println(io, " ", l)
end
end
function rst(io::IO, p::Paragraph)
rstinline(io, p.content)
println(io)
end
function rst(io::IO, list::List)
for (i, item) in enumerate(list.items)
bullet = isordered(list) ? "$(i + list.ordered - 1). " : "* "
print(io, bullet)
lines = split(rstrip(sprint(rst, item)), '\n')
for (n, line) in enumerate(lines)
print(io, (n == 1 || isempty(line)) ? "" : " "^length(bullet), line)
n < length(lines) && println(io)
end
println(io)
end
end
function rst(io::IO, q::BlockQuote)
s = sprint(rst, q.content)
for line in split(rstrip(s), "\n")
println(io, " ", line)
end
println(io)
end
function rst(io::IO, f::Footnote)
print(io, ".. [", f.id, "]")
s = sprint(rst, f.text)
lines = split(rstrip(s), "\n")
# Single line footnotes are printed on the same line as their label
# rather than taking up an additional line.
if length(lines) == 1
println(io, " ", lines[1])
else
println(io)
for line in lines
println(io, isempty(line) ? "" : " ", rstrip(line))
end
println(io)
end
end
function rst(io::IO, md::Admonition)
s = sprint(rst, md.content)
title = md.title == ucfirst(md.category) ? "" : md.title
println(io, ".. ", md.category, "::", isempty(title) ? "" : " $title")
for line in split(rstrip(s), "\n")
println(io, isempty(line) ? "" : " ", line)
end
println(io)
end
function rst(io::IO, md::HorizontalRule)
println(io, "" ^ 5)
end
function rst(io::IO, l::LaTeX)
println(io, ".. math::\n")
for l in lines(l.formula)
println(io, " ", l)
end
end
rst(io::IO, md) = show(io, "text/rst", md)
# Inline elements
rstinline(x) = sprint(rstinline, x)
function rstinline(io::IO, md...)
wasCode = false
for el in md
wasCode && isa(el, AbstractString) && !Base.startswith(el, " ") && print(io, "\\ ")
wasCode = (isa(el, Code) || isa(el, LaTeX) || isa(el, Link)) && (wasCode = true)
rstinline(io, el)
end
end
rstinline(io::IO, md::Vector) = !isempty(md) && rstinline(io, md...)
# rstinline(io::IO, md::Image) = rstinline(io, ".. image:: ", md.url)
function rstinline(io::IO, md::Link)
if ismatch(r":(func|obj|ref|exc|class|const|data):`\.*", md.url)
rstinline(io, md.url)
else
rstinline(io, "`", md.text, " <", md.url, ">`_")
end
end
rstinline(io::IO, f::Footnote) = print(io, "[", f.id, "]_")
rstescape(s) = replace(s, "\\", "\\\\")
rstinline(io::IO, s::AbstractString) = print(io, rstescape(s))
rstinline(io::IO, md::Bold) = rstinline(io, "**", md.text, "**")
rstinline(io::IO, md::Italic) = rstinline(io, "*", md.text, "*")
rstinline(io::IO, md::Code) = print(io, "``", md.code, "``")
rstinline(io::IO, br::LineBreak) = println(io)
rstinline(io::IO, l::LaTeX) = print(io, ":math:`", l.formula, "`")
rstinline(io::IO, x) = show(io, MIME"text/rst"(), x)
# show
Base.show(io::IO, ::MIME"text/rst", md::MD) = rst(io, md)