• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

JuliaLang / julia / 1572

01 Feb 2026 09:55PM UTC coverage: 76.677% (-0.07%) from 76.749%
1572

push

buildkite

web-flow
docs: clarify 'using A, B' semantics (#60856)

Resolves #36090

62889 of 82018 relevant lines covered (76.68%)

23269256.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.07
/stdlib/Markdown/src/render/plain.jl
1
# This file is a part of Julia. License is MIT: https://julialang.org/license
2

3
plain(x) = sprint(plain, x)
5,949✔
4

5
function plain(io::IO, content::Vector)
9,732✔
6
    isempty(content) && return
9,732✔
7
    for md in content[1:end-1]
9,675✔
8
        plain(io, md)
3,975✔
9
        println(io)
3,975✔
10
    end
3,975✔
11
    plain(io, content[end])
9,675✔
12
end
13

14
plain(io::IO, md::MD) = plain(io, md.content)
8,175✔
15

16
function plain(io::IO, header::Header{l}) where l
903✔
17
    print(io, "#"^l*" ")
903✔
18
    plaininline(io, header.text)
903✔
19
    println(io)
903✔
20
end
21

22
function plain(io::IO, code::Code)
1,014✔
23
    # If the code includes a fenced block this will break parsing,
24
    # so it must be enclosed by a longer ````-sequence.
25
    n = mapreduce(m -> length(m.match), max, eachmatch(r"^`+"m, code.code); init=2) + 1
1,044✔
26
    println(io, "`" ^ n, code.language)
1,014✔
27
    println(io, code.code)
1,014✔
28
    println(io, "`" ^ n)
1,014✔
29
end
30

31
function plain(io::IO, p::Paragraph)
8,172✔
32
    plaininline(io, p.content)
8,172✔
33
    println(io)
8,172✔
34
end
35

36
function plain(io::IO, md::HTMLBlock)
495✔
37
    for line in md.content
504✔
38
        println(io, line)
1,278✔
39
    end
1,278✔
40
end
41

42
function plain(io::IO, list::List)
1,578✔
43
    for (i, item) in enumerate(list.items)
1,578✔
44
        list_marker = isordered(list) ? "$(i + list.ordered - 1). " : "  * "
2,352✔
45
        print(io, list_marker)
2,352✔
46
        content = sprint(list.loose ? plain : plaintight, item)
2,352✔
47
        lines = split(rstrip(content), "\n")
2,352✔
48

49
        for (n, line) in enumerate(lines)
4,704✔
50
            print(io, (n == 1 || isempty(line)) ? "" : " "^length(list_marker), line)
6,210✔
51
            n < length(lines) && println(io)
4,281✔
52
        end
6,210✔
53
        println(io)
2,352✔
54
    end
2,352✔
55
end
56

57
plaintight(io::IO, md) = plain(io, md)
303✔
58
plaintight(io::IO, md::Paragraph) = plaininline(io, md.content)
1,236✔
59
function plaintight(io::IO, content::Vector)
1,425✔
60
    for (i, md) in enumerate(content)
1,425✔
61
        plaintight(io, md)
1,842✔
62
        i < length(content) && println(io)
1,539✔
63
    end
1,539✔
64
end
65

66
function plain(io::IO, q::BlockQuote)
582✔
67
    s = sprint(plain, q.content)
582✔
68
    for line in split(rstrip(s), "\n")
582✔
69
        println(io, isempty(line) ? ">" : "> ", line)
969✔
70
    end
969✔
71
    println(io)
582✔
72
end
73

74
function plain(io::IO, f::Footnote)
9✔
75
    print(io, "[^", f.id, "]:")
9✔
76
    s = sprint(plain, f.text)
9✔
77
    lines = split(rstrip(s), "\n")
9✔
78
    # Single line footnotes are printed on the same line as their label
79
    # rather than taking up an additional line.
80
    if length(lines) == 1
9✔
81
        println(io, " ", lines[1])
6✔
82
    else
83
        println(io)
3✔
84
        for line in lines
3✔
85
            println(io, isempty(line) ? "" : "    ", line)
33✔
86
        end
33✔
87
        println(io)
3✔
88
    end
89
end
90

91
function plain(io::IO, md::Admonition)
39✔
92
    s = sprint(plain, md.content)
39✔
93
    title = md.title == uppercasefirst(md.category) ? "" : " \"$(md.title)\""
51✔
94
    println(io, "!!! ", md.category, title)
39✔
95
    for line in split(rstrip(s), "\n")
39✔
96
        println(io, isempty(line) ? "" : "    ", line)
129✔
97
    end
129✔
98
    println(io)
39✔
99
end
100

101
function plain(io::IO, md::HorizontalRule)
402✔
102
    println(io, "-" ^ 3)
411✔
103
end
104

105
function plain(io::IO, l::LaTeX)
27✔
106
    println(io, '$', '$')
27✔
107
    println(io, l.formula)
27✔
108
    println(io, '$', '$')
27✔
109
end
110

111
function plain(io::IO, md)
9✔
112
    show(io,  MIME"text/plain"(), md)
9✔
113
    println(io)
9✔
114
end
115

116
# Inline elements
117

118
# HACK TODO: instead of the following hack, we should have a `Text` node type
119
function plaininline(io::IO, md...)
2,265✔
120
    for (i, el) in enumerate(md)
4,530✔
121
        if isodd(i)
8,337✔
122
            @assert el isa AbstractString
5,301✔
123
            print(io, el)
5,301✔
124
        else
125
            plaininline(io, el)
3,036✔
126
        end
127
    end
8,337✔
128
end
129

130
function plaininline(io::IO, md::Vector)
12,528✔
131
    for el in md
12,528✔
132
        plaininline(io, el)
17,961✔
133
    end
17,961✔
134
end
135

136
plaininline(io::IO, f::Footnote) = print(io, "[^", f.id, "]")
6✔
137

138
plaininline(io::IO, link::Link) = plaininline(io, "[", link.text, "](", link.url, ")")
681✔
139

140
plaininline(io::IO, md::Image) = plaininline(io, "![", md.alt, "](", md.url, ")")
90✔
141

142
plaininline(io::IO, s::AbstractString) = print(io, s)
15,867✔
143

144
plaininline(io::IO, md::Bold) = plaininline(io, "**", md.text, "**")
435✔
145

146
plaininline(io::IO, md::Italic) = plaininline(io, "*", md.text, "*")
1,059✔
147

148
plaininline(io::IO, md::Strikethrough) = plaininline(io, "~~", md.text, "~~")
×
149

150
function plaininline(io::IO, md::Code)
927✔
151
    if occursin("`", md.code)
927✔
152
        n = maximum(length(m.match) for m in eachmatch(r"(`+)", md.code))
3✔
153
        s = "`"^((iseven(n) ? 1 : 2) + n)
3✔
154
        print(io, s, Base.startswith(md.code, "`") ? " " : "")
3✔
155
        print(io, md.code, endswith(md.code, "`") ? " " : "", s)
3✔
156
    else
157
        print(io, "`", md.code, "`")
924✔
158
    end
159
end
160

161
plaininline(io::IO, br::LineBreak) = println(io, "\\")
90✔
162

163
plaininline(io::IO, x) = show(io, MIME"text/plain"(), x)
147✔
164

165
# show
166

167
Base.show(io::IO, md::MD) = plain(io, md)
1,029✔
168
Base.show(io::IO, ::MIME"text/markdown", md::MD) = plain(io, md)
525✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc