import {visit} from 'unist-util-visit'; const plugin = (options) => { const transformer = async (ast) => { let hId = null; let hContent = null; visit(ast, 'element', (node, index, parent) => { if (/^h[2-6]$/.test(node.tagName) && node.properties && node.properties.id) { // h2~h6のタグを見つけたら hId = node.properties.id; hContent = node.children && node.children[0] ? node.children[0].value : ''; // h3~h6タグの隣にあるdivタグを探す const nextNode = parent.children[index + 1]; if (nextNode && nextNode.tagName === 'admonition') { // 該当のdiv要素を見つけたらHタグの内容とline-5の#以降の文字列が一致した場合 const contentAfterHash = nextNode.properties.title ? nextNode.properties.title.replace(/^#+/, '').trim() : ''; if (contentAfterHash === hContent.trim()) { // Hタグのidを取得しそれをdivのidに設定 nextNode.properties.id = hId; // Hタグを削除 parent.children.splice(index, 1); } } } }); }; return transformer; }; export default plugin;