Skip to content

Commit fca934f

Browse files
authored
Merge pull request #268 from mrueg/fix-codeblock
Render codeblocks properly
2 parents fef6692 + 6265c7f commit fca934f

3 files changed

Lines changed: 72 additions & 4 deletions

File tree

pkg/mark/markdown.go

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (r *ConfluenceRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegister
6868
// reg.Register(ast.KindHeading, r.renderNode)
6969
reg.Register(ast.KindBlockquote, r.renderBlockQuote)
7070
reg.Register(ast.KindCodeBlock, r.renderCodeBlock)
71-
reg.Register(ast.KindFencedCodeBlock, r.renderCodeBlock)
71+
reg.Register(ast.KindFencedCodeBlock, r.renderFencedCodeBlock)
7272
// reg.Register(ast.KindHTMLBlock, r.renderNode)
7373
// reg.Register(ast.KindList, r.renderNode)
7474
// reg.Register(ast.KindListItem, r.renderNode)
@@ -307,9 +307,8 @@ func (r *ConfluenceRenderer) goldmarkRenderLink(w util.BufWriter, source []byte,
307307
return ast.WalkContinue, nil
308308
}
309309

310-
// renderCodeBlock renders a (Fenced)CodeBlock
311-
func (r *ConfluenceRenderer) renderCodeBlock(writer util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
312-
310+
// renderFencedCodeBlock renders a FencedCodeBlock
311+
func (r *ConfluenceRenderer) renderFencedCodeBlock(writer util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
313312
if !entering {
314313
return ast.WalkContinue, nil
315314
}
@@ -384,6 +383,53 @@ func (r *ConfluenceRenderer) renderCodeBlock(writer util.BufWriter, source []byt
384383
return ast.WalkContinue, nil
385384
}
386385

386+
// renderCodeBlock renders a CodeBlock
387+
func (r *ConfluenceRenderer) renderCodeBlock(writer util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
388+
if !entering {
389+
return ast.WalkContinue, nil
390+
}
391+
linenumbers := false
392+
firstline := 0
393+
theme := ""
394+
collapse := false
395+
lang := ""
396+
title := ""
397+
398+
var lval []byte
399+
400+
lines := node.Lines().Len()
401+
for i := 0; i < lines; i++ {
402+
line := node.Lines().At(i)
403+
lval = append(lval, line.Value(source)...)
404+
}
405+
err := r.Stdlib.Templates.ExecuteTemplate(
406+
writer,
407+
"ac:code",
408+
struct {
409+
Language string
410+
Collapse bool
411+
Title string
412+
Theme string
413+
Linenumbers bool
414+
Firstline int
415+
Text string
416+
}{
417+
lang,
418+
collapse,
419+
title,
420+
theme,
421+
linenumbers,
422+
firstline,
423+
strings.TrimSuffix(string(lval), "\n"),
424+
},
425+
)
426+
if err != nil {
427+
return ast.WalkStop, err
428+
}
429+
430+
return ast.WalkContinue, nil
431+
}
432+
387433
// compileMarkdown will replace tags like <ac:rich-tech-body> with escaped
388434
// equivalent, because goldmark markdown parser replaces that tags with
389435
// <a href="ac:rich-text-body">ac:rich-text-body</a> because of the autolink

pkg/mark/testdata/codes.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@
4444
<ac:parameter ac:name="collapse">true</ac:parameter>
4545
<ac:plain-text-body><![CDATA[collapse-no-title]]></ac:plain-text-body>
4646
</ac:structured-macro>
47+
<ac:structured-macro ac:name="code">
48+
<ac:parameter ac:name="language">nested</ac:parameter>
49+
<ac:parameter ac:name="collapse">false</ac:parameter>
50+
<ac:plain-text-body><![CDATA[code
51+
``` more code ```
52+
even more code]]></ac:plain-text-body>
53+
</ac:structured-macro>
54+
<ac:structured-macro ac:name="code">
55+
<ac:parameter ac:name="language"></ac:parameter>
56+
<ac:parameter ac:name="collapse">false</ac:parameter>
57+
<ac:plain-text-body><![CDATA[indented code block
58+
with multiple lines]]></ac:plain-text-body>
59+
</ac:structured-macro>
4760
<ac:structured-macro ac:name="cloudscript-confluence-mermaid">
4861
<ac:parameter ac:name="showSource">true</ac:parameter>
4962
<ac:parameter ac:name="collapse">false</ac:parameter>

pkg/mark/testdata/codes.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ collapse-and-title
3333
collapse-no-title
3434
```
3535

36+
```nested
37+
code
38+
``` more code ```
39+
even more code
40+
```
41+
42+
indented code block
43+
with multiple lines
44+
3645
```mermaid
3746
graph TD;
3847
A-->B;

0 commit comments

Comments
 (0)