@curvenote/schema
Version:
Schema and markdown parser for @curvenote/editor
57 lines • 2.22 kB
JavaScript
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
;