Blog3 では、公開用の markdown のレンダリングには markdown-it を使っている。
デフォルトでは HTML コメントが除去されないので、以下のようにして HTML コメントを除去するようにした。 これで、ネタバレとかを除外できるようになった。
const MarkdownIt = require('markdown-it');
const md = new MarkdownIt({
html: true,
});
md.core.ruler.push('ignore_html_comments', (state) => {
state.tokens = state.tokens.filter((token) => {
if (token.type === 'html_block' || token.type === 'html_inline') {
return !token.content.trim().startsWith('<!--');
}
return true;
});
});
const markdownString = `
# Heading
<!-- This is a comment -->
Content here.
<div>This HTML block remains</div>
`;
console.log(md.render(markdownString));
Blog3 での実装は以下のようになった。 https://github.com/tokuhirom/blog3/pull/825/commits/0339b38cb70b8e793debf77dd4946c88faac141a
と、思ったけどいま RSS の description には markdown をそのままのせているので、おかしなことになる。 よって、HTML を text に戻したものを description に載せることにした。
html-to-text を使えば簡単にできた。