nebius/SWE-rebench-V2-PRs huggingface dataset:
Repository: kovetskiy/mark
Pull request #270 (2023-03-30 12:33:07)

Fix "<ac:*>" tag rendering
Extend the existing workaround to avoid HTML element escaping to handle more variants.


Patch:
diff --git a/pkg/mark/markdown.go b/pkg/mark/markdown.go
index 335166d..2ff2b71 100644
--- a/pkg/mark/markdown.go
+++ b/pkg/mark/markdown.go
@@ -437,14 +437,14 @@ func (r *ConfluenceRenderer) renderCodeBlock(writer util.BufWriter, source []byt
 func CompileMarkdown(markdown []byte, stdlib *stdlib.Lib) string {
 	log.Tracef(nil, "rendering markdown:\n%s", string(markdown))
 
-	colon := regexp.MustCompile(`---bf-COLON---`)
+	colon := []byte("---bf-COLON---")
 
-	tags := regexp.MustCompile(`<(/?ac):(\S+?)>`)
+	tags := regexp.MustCompile(`</?ac:[^>]+>`)
 
-	markdown = tags.ReplaceAll(
-		markdown,
-		[]byte(`<$1`+colon.String()+`$2>`),
-	)
+	for _, match := range tags.FindAll(markdown, -1) {
+		// Replace the colon in all "<ac:*>" tags with the colon bytes to avoid having Goldmark escape the HTML output.
+		markdown = bytes.ReplaceAll(markdown, match, bytes.ReplaceAll(match, []byte(":"), colon))
+	}
 
 	converter := goldmark.New(
 		goldmark.WithExtensions(
@@ -472,7 +472,8 @@ func CompileMarkdown(markdown []byte, stdlib *stdlib.Lib) string {
 		panic(err)
 	}
 
-	html := colon.ReplaceAll(buf.Bytes(), []byte(`:`))
+	// Restore all the colons we previously replaced.
+	html := bytes.ReplaceAll(buf.Bytes(), colon, []byte(":"))
 
 	log.Tracef(nil, "rendered markdown to html:\n%s", string(html))
 


Test patch:
diff --git a/pkg/mark/testdata/macro-include.html b/pkg/mark/testdata/macro-include.html
new file mode 100644
index 0000000..55f1496
--- /dev/null
+++ b/pkg/mark/testdata/macro-include.html
@@ -0,0 +1,6 @@
+<p><foo>bar</foo></p>
+<ac:structured-macro ac:name="info">
+<ac:parameter ac:name="icon">true</ac:parameter>
+<ac:parameter ac:name="title">Attention</ac:parameter>
+<ac:rich-text-body>This is an info!</ac:rich-text-body>
+</ac:structured-macro>
\ No newline at end of file
diff --git a/pkg/mark/testdata/macro-include.md b/pkg/mark/testdata/macro-include.md
new file mode 100644
index 0000000..c8d3d89
--- /dev/null
+++ b/pkg/mark/testdata/macro-include.md
@@ -0,0 +1,7 @@
+<foo>bar</foo>
+
+<ac:structured-macro ac:name="info">
+<ac:parameter ac:name="icon">true</ac:parameter>
+<ac:parameter ac:name="title">Attention</ac:parameter>
+<ac:rich-text-body>This is an info!</ac:rich-text-body>
+</ac:structured-macro>
\ No newline at end of file