Skip to content

Commit e448900

Browse files
authored
fix(specs): nested codeblocks (#173)
1 parent e3c9680 commit e448900

3 files changed

Lines changed: 136 additions & 2 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
## Input
2+
3+
```md
4+
````mdc
5+
::code-preview
6+
`inline code`
7+
8+
#code
9+
```mdc
10+
`inline code`
11+
```
12+
::
13+
````
14+
```
15+
16+
## AST
17+
18+
```json
19+
{
20+
"frontmatter": {},
21+
"meta": {},
22+
"nodes": [
23+
[
24+
"pre",
25+
{
26+
"language": "mdc"
27+
},
28+
[
29+
"code",
30+
{
31+
"class": "language-mdc"
32+
},
33+
"::code-preview\n`inline code`\n\n#code\n```mdc\n`inline code`\n```\n::"
34+
]
35+
]
36+
]
37+
}
38+
```
39+
40+
## HTML
41+
42+
```html
43+
<pre language="mdc"><code class="language-mdc">::code-preview
44+
`inline code`
45+
46+
#code
47+
```mdc
48+
`inline code`
49+
```
50+
::</code></pre>
51+
```
52+
53+
## Markdown
54+
55+
```md
56+
~~~mdc
57+
::code-preview
58+
`inline code`
59+
60+
#code
61+
```mdc
62+
`inline code`
63+
```
64+
::
65+
~~~
66+
```
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
## Input
2+
3+
```md
4+
~~~mdc
5+
::code-preview
6+
`inline code`
7+
8+
#code
9+
```mdc
10+
`inline code`
11+
```
12+
::
13+
~~~
14+
```
15+
16+
## AST
17+
18+
```json
19+
{
20+
"frontmatter": {},
21+
"meta": {},
22+
"nodes": [
23+
[
24+
"pre",
25+
{
26+
"language": "mdc"
27+
},
28+
[
29+
"code",
30+
{
31+
"class": "language-mdc"
32+
},
33+
"::code-preview\n`inline code`\n\n#code\n```mdc\n`inline code`\n```\n::"
34+
]
35+
]
36+
]
37+
}
38+
```
39+
40+
## HTML
41+
42+
```html
43+
<pre language="mdc"><code class="language-mdc">::code-preview
44+
`inline code`
45+
46+
#code
47+
```mdc
48+
`inline code`
49+
```
50+
::</code></pre>
51+
```
52+
53+
## Markdown
54+
55+
```md
56+
~~~mdc
57+
::code-preview
58+
`inline code`
59+
60+
#code
61+
```mdc
62+
`inline code`
63+
```
64+
::
65+
~~~
66+
```

packages/comark/src/internal/stringify/handlers/pre.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ export function pre(node: ComarkElement, state: State) {
2323
// Meta always has a leading space
2424
const meta = attributes.meta ? ' ' + attributes.meta : ''
2525

26-
const result =
27-
'```' + language + filename + highlights + meta + '\n' + String(node[1]?.code || textContent(node)).trim() + '\n```'
26+
const code = String(node[1]?.code || textContent(node)).trim()
27+
const fence = code.includes('```') ? '~~~' : '```'
28+
29+
const result = fence + language + filename + highlights + meta + '\n' + code + '\n' + fence
2830

2931
return result + state.context.blockSeparator
3032
}

0 commit comments

Comments
 (0)