UNPKG

@curvenote/schema

Version:

Schema and markdown parser for @curvenote/editor

57 lines 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.writeDirectiveOptions = exports.wrapMark = exports.isPlainURL = exports.backticksFor = void 0; // Taken from https://github.com/ProseMirror/prosemirror-markdown/blob/master/src/to_markdown.js // MIT License https://github.com/ProseMirror/prosemirror-markdown/blob/master/LICENSE function backticksFor(node, side) { var _a; const ticks = /`+/g; let m; let len = 0; if (node.isText) { // eslint-disable-next-line no-cond-assign while ((m = ticks.exec((_a = node.text) !== null && _a !== void 0 ? _a : ''))) len = Math.max(len, m[0].length); } let result = len > 0 && side > 0 ? ' `' : '`'; for (let i = 0; i < len; i += 1) result += '`'; if (len > 0 && side < 0) result += ' '; return result; } exports.backticksFor = backticksFor; function isPlainURL(link, href, parent, index, side) { if (link.attrs.title || !/^\w+:/.test(href)) return false; const content = parent.child(index + (side < 0 ? -1 : 0)); if (!content.isText || content.text !== href || content.marks[content.marks.length - 1] !== link) return false; if (index === (side < 0 ? 1 : parent.childCount - 1)) return true; const next = parent.child(index + (side < 0 ? -2 : 1)); return !link.isInSet(next.marks); } exports.isPlainURL = isPlainURL; function wrapMark(token, close) { return { open(_state, _mark, parent, index) { return `{${token}}${backticksFor(parent.child(index), -1)}`; }, close(_state, _mark, parent, index) { const extra = close ? close(_state, _mark, parent, index) : ''; return `${extra}${backticksFor(parent.child(index - 1), 1)}`; }, }; } exports.wrapMark = wrapMark; function writeDirectiveOptions(state, options) { const entries = Object.entries(options) .filter(([, v]) => v) .map(([k, v]) => `:${k}: ${v}\n`); entries.forEach((opt, index) => { state.write(index === entries.length - 1 ? `${opt}\n` : opt); }); } exports.writeDirectiveOptions = writeDirectiveOptions; //# sourceMappingURL=utils.js.map