const SMILES = [ '๐Ÿ‘จโ€๐Ÿ’ป', // 1 'โ€๐Ÿ‘จโ€๐Ÿ’ผ', // 2 '๐Ÿ‘‘', // 3 null, // 4 '๐Ÿš€', // 5 'โ€๐ŸŽญ', // 6 '๐Ÿ“ค', // 7 null, // 8 null, // 9 null, // 9 '๐Ÿ“ˆ', // 10 null, // 11 null, // 12 '๐Ÿญ', // 13 '๐Ÿ—ƒ๏ธ', // 14 '๐ŸŽจ', // 15 '๐Ÿ“', // 16 '๐Ÿ‘ฎ', // 17 null, // 18 null, // 19 '๐Ÿ“š', // 20 null, // 21 null, // 22 '๐Ÿ› ๏ธ', // 23 null, // 24 null, // 25 null, // 26 '๐Ÿ› ๏ธ', // 27 '๐Ÿ“', // 28 '๐Ÿˆฏ', // 29 '๐Ÿ—บ๏ธ', // 30 '๐Ÿ“ง', // 31 ]; class TableOfContent { constructor() { this.prefixes = (new Array(6)).fill(1).map((a, i) => (new Array(i)).fill('#').join('')); this.smiles = SMILES; this.titles = []; this.indexOfList = 0; } addTitle(level, text, markdownText) { this.titles.push({ level, text }); const index = this.titles.length - 1; markdownText.push(``); const prefix = this.prefixes[level] || ''; const smile = this.smiles[index] || ''; markdownText.push(`${prefix} ${smile} ${text}`); // ะผะฐั€ะบะตั€, ะณะดะต ะฑัƒะดะตั‚ ะกะพะดะตั€ะถะฐะฝะธะต if (!this.indexOfList && level === 3) { this.indexOfList = markdownText.length; } } getMarkdownWithTable(markdownText) { const content = this.titles .map(({ level, text }, i) => { if (!(level === 3 || level === 4) || i === 3) return; const prefix = level === 4 ? ' ' : ''; const title = text.replace(/(\([^)]*\))|([\[\]`]*)/gim, ''); return `${prefix}- [${title}](#link-${i})`; }) .filter(v => v); return [ ...markdownText.slice(0, this.indexOfList), ...content, ...markdownText.slice(this.indexOfList), ]; } } module.exports = TableOfContent;