Skip to content

Commit

Permalink
basic rst rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeInnes committed Jun 27, 2015
1 parent cd639a5 commit fc43d63
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
1 change: 1 addition & 0 deletions base/markdown/Markdown.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ include("Julia/Julia.jl")
include("render/plain.jl")
include("render/html.jl")
include("render/latex.jl")
include("render/rst.jl")

include("render/terminal/render.jl")

Expand Down
80 changes: 80 additions & 0 deletions base/markdown/render/rst.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# This file is a part of Julia. License is MIT: http://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)
println(io, "::")
println(io)
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)
print(io, list.ordered ? "$i. " : " * ")
rstinline(io, item)
println(io)
end
end

function rst(io::IO, md::HorizontalRule)
println(io, "" ^ 5)
end

rst(io::IO, md) = writemime(io, "text/rst", md)

# Inline elements

rstinline(x) = sprint(rstinline, x)

function rstinline(io::IO, md...)
for el in md
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)

rstinline(io::IO, md::Link) = rstinline(io, "`", md.text, " <", md.url, ">`_")

rstinline(io::IO, s::AbstractString) = print(io, 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, x) = writemime(io, MIME"text/rst"(), x)

# writemime

Base.writemime(io::IO, ::MIME"text/rst", md::MD) = rst(io, md)

0 comments on commit fc43d63

Please sign in to comment.