@mieweb/wikigdrive
Version:
Google Drive to MarkDown synchronization
34 lines (30 loc) • 1.01 kB
text/typescript
import {MarkdownNodes} from '../MarkdownNodes.ts';
import {extractText, walkRecursiveAsync} from '../markdownNodesUtils.ts';
import {isMarkdownMacro, stripMarkdownMacro} from '../macroUtils.ts';
export async function removeMarkdownMacro(markdownChunks: MarkdownNodes) {
let inHtml = false;
await walkRecursiveAsync(markdownChunks.body, async (chunk, ctx: { nodeIdx: number }) => {
if (chunk.isTag && chunk.tag === 'HTML_MODE/') {
inHtml = true;
return;
}
if (inHtml) {
return;
}
if (chunk.isTag && chunk.tag === 'CODE') {
const innerTxt = extractText(chunk);
if (isMarkdownMacro(innerTxt)) {
chunk.parent.children.splice(ctx.nodeIdx, 1, {
isTag: false,
text: stripMarkdownMacro(innerTxt),
comment: 'stripMarkdownMacro.ts: replace code part with stripped macro'
});
}
}
}, {}, (chunk) => {
if (chunk.isTag && chunk.tag === 'HTML_MODE/') {
inHtml = false;
return;
}
});
}