UNPKG

very-small-parser

Version:

A very small Markdown, HTML, and CSS parser.

61 lines (60 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dhe = exports.repAll = exports.rep = exports.regexParser = exports.first = exports.loop = exports.loop0 = exports.token = void 0; const isTest = process.env.NODE_ENV !== 'production'; const token = (value, type, children, overrides, len = value.length) => { const tok = { type, len }; if (isTest) tok.raw = value; if (children) tok.children = children; if (overrides) Object.assign(tok, overrides); return tok; }; exports.token = token; const loop0 = (parser, tokenizer, src) => { const children = []; const end = src.length; let remaining = src; let length = 0; while (length < end) { const tok = tokenizer(parser, remaining); if (!tok) break; if (tok.type) children.push(tok); length += tok.len || 0; remaining = remaining.slice(tok.len); } return [children, length]; }; exports.loop0 = loop0; const loop = (parser, tokenizer, src) => (0, exports.loop0)(parser, tokenizer, src)[0]; exports.loop = loop; const first = (tokenizers) => { const length = tokenizers.length; return (parser, src) => { for (let i = 0; i < length; i++) { const tokenizer = tokenizers[i]; const tok = tokenizer(parser, src); if (tok) return tok; } return; }; }; exports.first = first; const regexParser = (type, reg, childrenMatchIndex) => (parser, value) => { const matches = value.match(reg); return matches ? (0, exports.token)(matches[0], type, parser.parse(matches[childrenMatchIndex])) : void 0; }; exports.regexParser = regexParser; const rep = (search, replace, str) => str.replace(search, replace); exports.rep = rep; const repAll = (search, replace, str) => str.replaceAll(search, replace); exports.repAll = repAll; const textarea = typeof document === 'object' ? document.createElement('textarea') : void 0; /** Decode HTML entities. */ const dhe = (html) => (textarea ? ((textarea.innerHTML = html), textarea.value) : html); exports.dhe = dhe;