Merge pull request #108 from lonekorean/pre-code-blocks

<pre> code blocks
This commit is contained in:
Will Boyd
2024-02-22 14:42:25 -05:00
committed by GitHub
+16
View File
@@ -79,6 +79,18 @@ function initTurndownService() {
} }
}); });
// convert <pre> into a code block with language when appropriate
turndownService.addRule('pre', {
filter: node => {
// a <pre> with <code> inside will already render nicely, so don't interfere
return node.nodeName === 'PRE' && !node.querySelector('code');
},
replacement: (content, node) => {
const language = node.getAttribute('data-wetm-language') || '';
return '\n\n```' + language + '\n' + node.textContent + '\n```\n\n';
}
});
return turndownService; return turndownService;
} }
@@ -100,6 +112,10 @@ function getPostContent(post, turndownService, config) {
// by escaping angle brackets (will be unescaped during turndown conversion) // by escaping angle brackets (will be unescaped during turndown conversion)
content = content.replace(/<(!--more( .*)?--)>/, '&lt;$1&gt;'); content = content.replace(/<(!--more( .*)?--)>/, '&lt;$1&gt;');
// some WordPress plugins specify a code language in an HTML comment above a
// <pre> block, save it to a data attribute so the "pre" rule can use it
content = content.replace(/(<!-- wp:.+? \{"language":"(.+?)"\} -->\r?\n<pre )/g, '$1data-wetm-language="$2" ');
// use turndown to convert HTML to Markdown // use turndown to convert HTML to Markdown
content = turndownService.turndown(content); content = turndownService.turndown(content);