const _ = require('lodash'); const getTOC = (pages)=>{ const add1 = (title, page)=>{ res.push({ title : title, page : page + 1, children : [] }); }; const add2 = (title, page)=>{ if(!_.last(res)) add1('', page); _.last(res).children.push({ title : title, page : page + 1, children : [] }); }; const add3 = (title, page)=>{ if(!_.last(res)) add1('', page); if(!_.last(_.last(res).children)) add2('', page); _.last(_.last(res).children).children.push({ title : title, page : page + 1, children : [] }); }; const res = []; _.each(pages, (page, pageNum)=>{ const lines = page.split('\n'); _.each(lines, (line)=>{ if(_.startsWith(line, '# ')){ const title = line.replace('# ', ''); add1(title, pageNum); } if(_.startsWith(line, '## ')){ const title = line.replace('## ', ''); add2(title, pageNum); } if(_.startsWith(line, '### ')){ const title = line.replace('### ', ''); add3(title, pageNum); } }); }); return res; }; module.exports = function(props){ const pages = props.brew.text.split('\\page'); const TOC = getTOC(pages); const markdown = _.reduce(TOC, (r, g1, idx1)=>{ r.push(`- **[${idx1 + 1} ${g1.title}](#p${g1.page})**`); if(g1.children.length){ _.each(g1.children, (g2, idx2)=>{ r.push(` - [${idx1 + 1}.${idx2 + 1} ${g2.title}](#p${g2.page})`); if(g2.children.length){ _.each(g2.children, (g3, idx3)=>{ r.push(` - [${idx1 + 1}.${idx2 + 1}.${idx3 + 1} ${g3.title}](#p${g3.page})`); }); } }); } return r; }, []).join('\n'); return `
##### Table Of Contents ${markdown}
\n`; };