UNPKG

@jackens/md2json

Version:
73 lines (68 loc) 2.33 kB
/* ISC (c) 2018+ Jackens * https://github.com/jackens/md2json */ (function (E, W) { var PATTERN = /(?:```(\w+)(.+?)```)|(?:`(.*?)`)|(?:\*\*(.*?)\*\*)|(?:\*(.*?)\*)|(?:__(.*?)__)|(?:_(.*?)_)|(?:~~(.*?)~~)|(?:<(.*?)>)/ var KEYS = ['info', 'lang', 'src', 'code', 'a2', 'a1', 'u2', 'u1', 'del', 'url', 'items'] function getNewItem () { var result = { heading: null } KEYS.map(function (key) { result[key] = [] }) return result } function $ (md) { var result = getNewItem() var heading = 0 var current = result var parents = [result] var newItem md.replace(/\r/g, '').replace(/\t/g, ' ').replace(/```(\w+)\n((.|\n)+?)```/g, function (_, lang, code) { return '```' + lang + '\t' + code.replace(/\n/g, '\t') + '```' }).split('\n').map(function (line) { if (!line) { return } var matchH = line.match(/^(#+)\s*(.*)$/) if (matchH) { heading = matchH[1].length line = matchH[2] } var matchLi = line.match(/^(\s*)(?:(\*|-|\d+\.)\s+)?(.*)$/) var level = heading + (matchLi[1].length >> 2) + +!!matchLi[2] while (parents.length < level - 1) { newItem = getNewItem() parents[parents.length - 1].items.push(newItem) parents.push(newItem) } if (parents.length > level) { parents.length = level } if ((matchH || matchLi[2]) && level > 1) { newItem = getNewItem() parents[level - 2].items.push(newItem) parents[level - 1] = newItem } current = parents[level - 1] if (matchH) { current.heading = heading } matchLi[3].split(PATTERN).forEach(function (_, chunkIndex, chunks) { if (chunkIndex % 10) { return } KEYS.forEach(function (key, keyIndex) { var value = (chunks[chunkIndex + keyIndex] || '').replace(/^\s+|\s+$/g, '') if (value) { current[key].push(keyIndex === 2 ? value.replace(/\t/g, '\n').replace(new RegExp('\n {' + 4 * (level - heading) + '}', 'g'), '\n') : value) } }) }) }) return result } try { (W = window).require = function (I) { return W[E][I] }; (W[E] = W[E] || {})['@jackens/md2json'] = $ } catch (_) { module.exports = $ } })('module.exports')