vdoc: fix markdown and plaintext rendering (#6882)
parent
ef3e8d2c84
commit
7c2c187743
|
@ -525,40 +525,56 @@ fn (cfg DocConfig) gen_plaintext(idx int) string {
|
||||||
if dcs.head.comment.trim_space().len > 0 && !cfg.pub_only {
|
if dcs.head.comment.trim_space().len > 0 && !cfg.pub_only {
|
||||||
pw.writeln(dcs.head.comment.split_into_lines().map(' ' + it).join('\n'))
|
pw.writeln(dcs.head.comment.split_into_lines().map(' ' + it).join('\n'))
|
||||||
}
|
}
|
||||||
for _, cn in dcs.contents {
|
cfg.write_plaintext_content(dcs.contents.arr(), mut pw)
|
||||||
pw.writeln(cn.content)
|
|
||||||
if cn.comment.len > 0 && !cfg.pub_only {
|
|
||||||
pw.writeln(cn.comment.trim_space().split_into_lines().map(' ' + it).join('\n'))
|
|
||||||
}
|
|
||||||
if cfg.show_loc {
|
|
||||||
pw.writeln('Location: $cn.file_path:$cn.pos.line\n')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pw.str()
|
return pw.str()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (cfg DocConfig) write_plaintext_content(contents []doc.DocNode, mut pw strings.Builder) {
|
||||||
|
for cn in contents {
|
||||||
|
if cn.content.len > 0 {
|
||||||
|
pw.writeln(cn.content)
|
||||||
|
if cn.comment.len > 0 && !cfg.pub_only {
|
||||||
|
pw.writeln(cn.comment.trim_space().split_into_lines().map(' ' + it).join('\n'))
|
||||||
|
}
|
||||||
|
if cfg.show_loc {
|
||||||
|
pw.writeln('Location: $cn.file_path:$cn.pos.line\n')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cfg.write_plaintext_content(cn.children, mut pw)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn (cfg DocConfig) gen_markdown(idx int, with_toc bool) string {
|
fn (cfg DocConfig) gen_markdown(idx int, with_toc bool) string {
|
||||||
dcs := cfg.docs[idx]
|
dcs := cfg.docs[idx]
|
||||||
mut hw := strings.new_builder(200)
|
mut hw := strings.new_builder(200)
|
||||||
mut cw := strings.new_builder(200)
|
mut cw := strings.new_builder(200)
|
||||||
hw.writeln('# $dcs.head.content\n$dcs.head.comment\n')
|
hw.writeln('# $dcs.head.content\n')
|
||||||
|
if dcs.head.comment.len > 0 {
|
||||||
|
hw.writeln('$dcs.head.comment\n')
|
||||||
|
}
|
||||||
if with_toc {
|
if with_toc {
|
||||||
hw.writeln('## Contents')
|
hw.writeln('## Contents')
|
||||||
}
|
}
|
||||||
for _, cn in dcs.contents {
|
cfg.write_markdown_content(dcs.contents.arr(), mut cw, mut hw, 0, with_toc)
|
||||||
name := cn.name.all_after(dcs.head.name + '.')
|
|
||||||
if with_toc {
|
|
||||||
hw.writeln('- [#$name](${slug(name)})')
|
|
||||||
}
|
|
||||||
cw.writeln('## $name')
|
|
||||||
cw.writeln('```v\n$cn.content\n```$cn.comment\n')
|
|
||||||
cw.writeln('[\[Return to contents\]](#Contents)\n')
|
|
||||||
}
|
|
||||||
footer_text := cfg.gen_footer_text(idx)
|
footer_text := cfg.gen_footer_text(idx)
|
||||||
cw.writeln('#### $footer_text')
|
cw.writeln('#### $footer_text')
|
||||||
return hw.str() + '\n' + cw.str()
|
return hw.str() + '\n' + cw.str()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (cfg DocConfig) write_markdown_content(contents []doc.DocNode, mut cw strings.Builder, mut hw strings.Builder, indent int, with_toc bool) {
|
||||||
|
for cn in contents {
|
||||||
|
if with_toc && cn.name.len > 0 {
|
||||||
|
hw.writeln(' '.repeat(2 * indent) + '- [#$cn.name](${slug(cn.name)})')
|
||||||
|
cw.writeln('## $cn.name')
|
||||||
|
}
|
||||||
|
if cn.content.len > 0 {
|
||||||
|
cw.writeln('```v\n$cn.content\n```$cn.comment\n')
|
||||||
|
cw.writeln('[\[Return to contents\]](#Contents)\n')
|
||||||
|
}
|
||||||
|
cfg.write_markdown_content(cn.children, mut cw, mut hw, indent + 1, with_toc)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn (cfg DocConfig) gen_footer_text(idx int) string {
|
fn (cfg DocConfig) gen_footer_text(idx int) string {
|
||||||
current_doc := cfg.docs[idx]
|
current_doc := cfg.docs[idx]
|
||||||
footer_text := 'Powered by vdoc.'
|
footer_text := 'Powered by vdoc.'
|
||||||
|
|
|
@ -296,6 +296,9 @@ pub fn (mut d Doc) file_ast(file_ast ast.File) map[string]DocNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
d.fmt.mod2alias = map[string]string{}
|
d.fmt.mod2alias = map[string]string{}
|
||||||
|
if contents[''].kind != .const_group {
|
||||||
|
contents.delete('')
|
||||||
|
}
|
||||||
return contents
|
return contents
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,6 @@ fn test_generate_from_mod() {
|
||||||
}
|
}
|
||||||
assert nested_mod_doc.head.name == nested_mod_name
|
assert nested_mod_doc.head.name == nested_mod_name
|
||||||
assert nested_mod_doc.head.content == 'module $nested_mod_name'
|
assert nested_mod_doc.head.content == 'module $nested_mod_name'
|
||||||
assert nested_mod_doc.contents.len == 4
|
assert nested_mod_doc.contents.len == 3
|
||||||
assert nested_mod_doc.contents['ChunkScanner'].children.len == 3
|
assert nested_mod_doc.contents['ChunkScanner'].children.len == 3
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue