import {visit, SKIP, EXIT, INDEX, CONTINUE} from 'unist-util-visit'; import {inspect} from 'unist-util-inspect' const plugin = (options) => { const transformer = async (ast) => { let hId = null; let hContent = null; let offset = 0; // Visitor関数を定義 const visitor = ((node, index, parent) => { if (node.type === 'containerDirective') { const val = node.children[0].children[0].value; if(/^##/.test(val)) { // headingノードをparentのchildrenに追加 parent.children.splice(index, 0, { type: 'heading', depth: 4, // Headingの深さを適切に設定 children: [{ type: 'text', value: val.replace(/^#+/, '').trim() }], }); //次に検索するのはindexを2つ飛ばしたノード。 return index + 2; } } }); visit(ast, 'containerDirective', visitor); /* visit(ast, 'containerDirective', (node, index, parent) => { //console.log(node); parent.children.splice(index, 0, {type: 'heading', depth: 4, children:[{type: 'text', value: 'テスト'}]}); index++; //offset++; //console.log(offset); //return EXIT; // if (/^h[3-6]$/.test(node.tagName) && node.properties && node.properties.id) { // h3~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;