diff --git a/src/lib/markdown/rendering.test.ts b/src/lib/markdown/rendering.test.ts
index 6c8e703..028532f 100644
--- a/src/lib/markdown/rendering.test.ts
+++ b/src/lib/markdown/rendering.test.ts
@@ -67,6 +67,24 @@ describe('replaceHugoAdmonitions', () => {
);
expect(singleQuoted).toContain('');
});
+
+ it('handles shortcodes written inline with the body', () => {
+ const inline = replaceHugoAdmonitions(
+ '{{< admonition abstract >}}在使用 Docker 时,可以配置镜像加速器。{{< /admonition >}}',
+ render
+ );
+ expect(inline).toContain(
+ ''
+ );
+ });
+
+ it('handles multi-line bodies that start on the same line as the open tag', () => {
+ const multiline = replaceHugoAdmonitions(
+ '{{< admonition note >}}第一行\n\n第二段\n{{< /admonition >}}',
+ render
+ );
+ expect(multiline).toContain('');
+ });
});
describe('heading IDs', () => {
diff --git a/src/lib/markdown/rendering.ts b/src/lib/markdown/rendering.ts
index ddd6d0a..290ab3a 100644
--- a/src/lib/markdown/rendering.ts
+++ b/src/lib/markdown/rendering.ts
@@ -57,8 +57,9 @@ export function replaceGithubAdmonitions(markdown: string, render: AdmonitionRen
* 标题可选,且可以是 `"标题"`、`'标题'` 或裸文本。
*/
export function replaceHugoAdmonitions(html: string, render: AdmonitionRenderer): string {
+ // 开/闭标签与正文之间允许任意空白(含同一行紧挨着写的情况)
const pattern =
- /\{\{<\s*admonition\s+([a-zA-Z][\w-]*)([^>]*?)>\}\}\r?\n([\s\S]*?)\{\{<\s*\/admonition\s*>\}\}/gi;
+ /\{\{<\s*admonition\s+([a-zA-Z][\w-]*)([^>]*?)>\}\}\s*([\s\S]*?)\s*\{\{<\s*\/admonition\s*>\}\}/gi;
return html.replace(pattern, (_match, type: string, rawTitle: string, content: string) =>
render(type, rawTitle.trim(), content)