From c4315a1eaddbb8e4db739f9b016e2e44900c1725 Mon Sep 17 00:00:00 2001 From: Joshua Chen Date: Mon, 18 Jul 2022 18:57:32 +0800 Subject: [PATCH] fix(utils): recognize ~~~ as code fences in link replacement --- .../__snapshots__/markdownLinks.test.ts.snap | 12 ++++++++++++ .../src/__tests__/markdownLinks.test.ts | 12 ++++++++++++ packages/docusaurus-utils/src/markdownLinks.ts | 6 +++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/docusaurus-utils/src/__tests__/__snapshots__/markdownLinks.test.ts.snap b/packages/docusaurus-utils/src/__tests__/__snapshots__/markdownLinks.test.ts.snap index f42727544ff09..18260d1b60512 100644 --- a/packages/docusaurus-utils/src/__tests__/__snapshots__/markdownLinks.test.ts.snap +++ b/packages/docusaurus-utils/src/__tests__/__snapshots__/markdownLinks.test.ts.snap @@ -76,6 +76,18 @@ exports[`replaceMarkdownLinks ignores links in fenced blocks 1`] = ` \`\`\` [foo](foo.md) \`\`\`\` + +~~~js +[foo](foo.md) +~~~ + +~~~js +[foo](foo.md) +\`\`\` +[foo](foo.md) +\`\`\` +[foo](foo.md) +~~~ ", } `; diff --git a/packages/docusaurus-utils/src/__tests__/markdownLinks.test.ts b/packages/docusaurus-utils/src/__tests__/markdownLinks.test.ts index 46df9f1e66293..4a17e1140afb6 100644 --- a/packages/docusaurus-utils/src/__tests__/markdownLinks.test.ts +++ b/packages/docusaurus-utils/src/__tests__/markdownLinks.test.ts @@ -179,6 +179,18 @@ The following operations are defined for [URI]s: \`\`\` [foo](foo.md) \`\`\`\` + +~~~js +[foo](foo.md) +~~~ + +~~~js +[foo](foo.md) +\`\`\` +[foo](foo.md) +\`\`\` +[foo](foo.md) +~~~ `, }), ).toMatchSnapshot(); diff --git a/packages/docusaurus-utils/src/markdownLinks.ts b/packages/docusaurus-utils/src/markdownLinks.ts index af322fe840d27..7938e7afed880 100644 --- a/packages/docusaurus-utils/src/markdownLinks.ts +++ b/packages/docusaurus-utils/src/markdownLinks.ts @@ -85,14 +85,14 @@ export function replaceMarkdownLinks({ let fencedBlock = false; let lastCodeFence = ''; const lines = fileString.split('\n').map((line) => { - if (line.trim().startsWith('```')) { - const codeFence = line.trim().match(/^`+/)![0]!; + const codeFence = line.trimStart().match(/^`{3,}|^~{3,}/)?.[0]; + if (codeFence) { if (!fencedBlock) { fencedBlock = true; lastCodeFence = codeFence; // If we are in a ````-fenced block, all ``` would be plain text instead // of fences - } else if (codeFence.length >= lastCodeFence.length) { + } else if (codeFence.startsWith(lastCodeFence)) { fencedBlock = false; } }