-
-
Notifications
You must be signed in to change notification settings - Fork 138
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dont replace block-ids in codeblocks
- Loading branch information
1 parent
34a93b8
commit f2b7deb
Showing
3 changed files
with
106 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import { replaceBlockIDs } from "./replaceBlockIDs"; | ||
|
||
describe("replaceBlockIDs", () => { | ||
it("should replace block IDs in markdown", () => { | ||
const EXPECTED_MARKDOWN = ` | ||
# header | ||
foo ^block-id-1234 | ||
bar ^block-id-5678 | ||
below | ||
^block-id-9999 | ||
`; | ||
|
||
const result = replaceBlockIDs(EXPECTED_MARKDOWN); | ||
|
||
expect(result).toBe(` | ||
# header | ||
foo | ||
{ #block-id-1234} | ||
bar | ||
{ #block-id-5678} | ||
below | ||
{ #block-id-9999} | ||
`); | ||
}); | ||
|
||
it("should not replace block IDs in code blocks", () => { | ||
const CODEBLOCK_WITH_BLOCKIDS = ` | ||
\`\`\` | ||
foobar. | ||
this is a code block. | ||
but it contains a block ID to try to fool the compiler | ||
and, consequently, wreck your garden. | ||
here it goes: ^block-id-1234 | ||
and for fun, here's another: ^block-id-5678 | ||
\`\`\` | ||
additionally, block IDs outside of code blocks should be replaced | ||
for example, ^block-id-9999 | ||
and ^block-id-0000 | ||
`; | ||
|
||
const result = replaceBlockIDs(CODEBLOCK_WITH_BLOCKIDS); | ||
|
||
expect(result).toBe(` | ||
\`\`\` | ||
foobar. | ||
this is a code block. | ||
but it contains a block ID to try to fool the compiler | ||
and, consequently, wreck your garden. | ||
here it goes: ^block-id-1234 | ||
and for fun, here's another: ^block-id-5678 | ||
\`\`\` | ||
additionally, block IDs outside of code blocks should be replaced | ||
for example, | ||
{ #block-id-9999} | ||
and | ||
{ #block-id-0000} | ||
`); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
export function replaceBlockIDs(markdown: string) { | ||
const block_pattern = / \^([\w\d-]+)/g; | ||
const complex_block_pattern = /\n\^([\w\d-]+)\n/g; | ||
|
||
// To ensure code blocks are not modified... | ||
const codeBlockPattern = /```[\s\S]*?```/g; | ||
|
||
// Extract code blocks and replace them with placeholders | ||
const codeBlocks: string[] = []; | ||
|
||
markdown = markdown.replace(codeBlockPattern, (match) => { | ||
codeBlocks.push(match); | ||
|
||
return `{{CODE_BLOCK_${codeBlocks.length - 1}}}`; | ||
}); | ||
|
||
// Replace patterns outside code blocks | ||
markdown = markdown.replace( | ||
complex_block_pattern, | ||
(_match: string, $1: string) => { | ||
return `{ #${$1}}\n\n`; | ||
}, | ||
); | ||
|
||
markdown = markdown.replace(block_pattern, (_match: string, $1: string) => { | ||
return `\n{ #${$1}}\n`; | ||
}); | ||
|
||
// Reinsert code blocks | ||
codeBlocks.forEach((block, index) => { | ||
markdown = markdown.replace(`{{CODE_BLOCK_${index}}}`, block); | ||
}); | ||
|
||
return markdown; | ||
} |