67 lines
2.0 KiB
Julia
67 lines
2.0 KiB
Julia
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
|
|
|
include("table.jl")
|
|
|
|
@breaking true ->
|
|
function fencedcode(stream::IO, block::MD)
|
|
withstream(stream) do
|
|
startswith(stream, "~~~", padding = true) || startswith(stream, "```", padding = true) || return false
|
|
skip(stream, -1)
|
|
ch = read(stream, Char)
|
|
trailing = strip(readline(stream))
|
|
flavor = lstrip(trailing, ch)
|
|
n = 3 + length(trailing) - length(flavor)
|
|
|
|
# inline code block
|
|
ch in flavor && return false
|
|
|
|
buffer = IOBuffer()
|
|
while !eof(stream)
|
|
line_start = position(stream)
|
|
if startswith(stream, string(ch) ^ n)
|
|
if !startswith(stream, string(ch))
|
|
if flavor == "math"
|
|
push!(block, LaTeX(String(take!(buffer)) |> chomp))
|
|
else
|
|
push!(block, Code(flavor, String(take!(buffer)) |> chomp))
|
|
end
|
|
return true
|
|
else
|
|
seek(stream, line_start)
|
|
end
|
|
end
|
|
write(buffer, readline(stream, chomp=false))
|
|
end
|
|
return false
|
|
end
|
|
end
|
|
|
|
function github_paragraph(stream::IO, md::MD)
|
|
skipwhitespace(stream)
|
|
buffer = IOBuffer()
|
|
p = Paragraph()
|
|
push!(md, p)
|
|
while !eof(stream)
|
|
char = read(stream, Char)
|
|
if char == '\n'
|
|
eof(stream) && break
|
|
if blankline(stream) || parse(stream, md, breaking = true)
|
|
break
|
|
else
|
|
write(buffer, '\n')
|
|
end
|
|
else
|
|
write(buffer, char)
|
|
end
|
|
end
|
|
p.content = parseinline(seek(buffer, 0), md)
|
|
return true
|
|
end
|
|
|
|
@flavor github [list, indentcode, blockquote, admonition, footnote, fencedcode, hashheader,
|
|
github_table, github_paragraph,
|
|
|
|
linebreak, escapes, en_dash, inline_code, asterisk_bold,
|
|
asterisk_italic, image, footnote_link, link, autolink]
|
|
|