UNPKG

@mieweb/wikigdrive

Version:

Google Drive to MarkDown synchronization

42 lines (41 loc) 1.82 kB
import { extractText, walkRecursiveAsync } from '../markdownNodesUtils.js'; // Related tests: // test ./issue-443 // test ./intro-to-the-system.md // test ./list-test.md // test ./list-indent.md // test ./strong-headers.md // test ./example-document.md // test ./fix-bold.md export async function fixBoldItalic(markdownChunks) { // Remove empty Bold and empty Italic await walkRecursiveAsync(markdownChunks.body, async (chunk, ctx) => { if (chunk.isTag === true && ['B', 'I'].includes(chunk.tag)) { if (chunk.children.length === 0) { chunk.parent.children.splice(ctx.nodeIdx, 1); return { nodeIdx: ctx.nodeIdx - 1 }; } if (chunk.children.length === 1) { const insideChunk = chunk.children[0]; if (chunk.isTag === true && insideChunk.isTag && chunk.tag === insideChunk.tag) { chunk.children.splice(0, 1, insideChunk); return { nodeIdx: ctx.nodeIdx - 1 }; } } } if (chunk.isTag === true && ['B'].includes(chunk.tag)) { if (chunk.parent?.isTag && ['H1', 'H2', 'H3', 'H4', 'BI'].includes(chunk.parent.tag)) { const chunkChildren = chunk.children.splice(0, chunk.children.length); chunk.parent.children.splice(ctx.nodeIdx, 1, ...chunkChildren); return { nodeIdx: ctx.nodeIdx - 1 }; } } if (chunk.isTag === true && ['I'].includes(chunk.tag)) { const innerTxt = extractText(chunk); if (innerTxt.startsWith('{{%') && innerTxt.endsWith('%}}')) { chunk.parent?.children.splice(ctx.nodeIdx, 1, ...chunk.children); return { nodeIdx: ctx.nodeIdx - 1 }; } } }); }