Repository: JuliaLang/julia
File: stdlib/Markdown/src/render/terminal/render.jl (Julia)

Code before:
        :default
    end
    title = if isempty(md.title) md.category else md.title end
    print(io, ' '^margin, styled"{$accent,markdown_admonition:│ $title}",
          '\n', ' '^margin, styled"{$accent,markdown_admonition:│}", '\n')
    content = annotprint(term, md.content, columns - 10)
    lines = split(rstrip(content), '\n')
    for (i, line) in enumerate(lines)
        print(io, ' '^margin, styled"{$accent,markdown_admonition:│}", line)
        i < length(lines) && println(io)
    end
end

function term(io::IO, f::Footnote, columns)
    print(io, ' '^margin, "│ ")
    print(io, styled"{markdown_footnote:[^$(f.id)]}")
    println(io, '\n', ' '^margin, '│')
    content = annotprint(term, f.text, columns - 10)
    lines = split(rstrip(content), '\n')
    for (i, line) in enumerate(lines)
        print(io, ' '^margin, '│', line)
        i < length(lines) && println(io)
    end
end

const _list_bullets = ["• ", "➤ ", "– "]

function term(io::IO, md::List, columns, depth::Int = 1)
    dterm(io, md, columns, _depth)      = term(io, md, columns)
    dterm(io, md::List, columns, depth) = term(io, md, columns, depth)
    for (i, point) in enumerate(md.items)
        bullet = if isordered(md)
            "$(i + md.ordered - 1)."
        elseif depth == 1
            first(_list_bullets)
        else
            _list_bullets[2 + mod(depth, length(_list_bullets) - 1)]
        end
        print(io, ' '^ifelse(depth == 1, 2margin, 2*(depth-1)), styled"{markdown_list:$bullet} ")
        buf = AnnotatedIOBuffer()
        if point isa Vector && !isempty(point)
            for (i, elt) in enumerate(point[1:end-1])
                dterm(buf, elt, columns - 10, depth + 1)
                println(buf)
                (!(point[i+1] isa List) || point[i+1].loose) && println(buf)
            end
            dterm(buf, point[end], columns - 10, depth + 1)
        else
            dterm(buf, point, columns - 10, depth + 1)
        end
        content = read(seekstart(buf), AnnotatedString)

Review comment (suggestion):
Maybe imitate what GitHub uses?
```suggestion
const _list_bullets = ["• ", "◦ ", "▪︎ "]
```

Code after:
        :default
    end
    title = if isempty(md.title) md.category else md.title end
    print(io, ' '^margin, styled"{$accent,markdown_admonition:│ $title}",
          '\n', ' '^margin, styled"{$accent,markdown_admonition:│}", '\n')
    content = annotprint(term, md.content, columns - 10)
    lines = split(rstrip(content), '\n')
    for (i, line) in enumerate(lines)
        print(io, ' '^margin, styled"{$accent,markdown_admonition:│}", line)
        i < length(lines) && println(io)
    end
end

function term(io::IO, f::Footnote, columns)
    print(io, ' '^margin, "│ ")
    print(io, styled"{markdown_footnote:[^$(f.id)]}")
    println(io, '\n', ' '^margin, '│')
    content = annotprint(term, f.text, columns - 10)
    lines = split(rstrip(content), '\n')
    for (i, line) in enumerate(lines)
        print(io, ' '^margin, '│', line)
        i < length(lines) && println(io)
    end
end

const _list_bullets = ("•  ", "–  ", "▪  ")

function term(io::IO, md::List, columns, depth::Int = 1)
    dterm(io, md, columns, _depth)      = term(io, md, columns)
    dterm(io, md::List, columns, depth) = term(io, md, columns, depth)
    for (i, point) in enumerate(md.items)
        bullet = if isordered(md)
            string(lpad(i + md.ordered - 1, ndigits(length(md.items))), ". ")
        elseif depth == 1
            first(_list_bullets)
        else
            _list_bullets[2 + mod(depth, length(_list_bullets) - 1)]
        end
        print(io, ' '^ifelse(depth == 1, 2margin, 2*(depth-1)), styled"{markdown_list:$bullet}")
        buf = AnnotatedIOBuffer()
        if point isa Vector && !isempty(point)
            for (i, elt) in enumerate(point[1:end-1])
                dterm(buf, elt, columns - 10, depth + 1)
                println(buf)
                (!(point[i+1] isa List) || point[i+1].loose) && println(buf)
            end
            dterm(buf, point[end], columns - 10, depth + 1)
        else
            dterm(buf, point, columns - 10, depth + 1)
        end
        content = read(seekstart(buf), AnnotatedString)