UNPKG

@curvenote/schema

Version:

Schema and markdown parser for @curvenote/editor

69 lines 2.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toTex = exports.toMarkdown = void 0; const types_1 = require("./types"); const utils_1 = require("./utils"); const getAttrs = (level) => (dom) => (Object.assign(Object.assign({}, (0, utils_1.getNumberedAttrs)(dom)), { level })); const heading = { attrs: Object.assign(Object.assign({}, (0, utils_1.getNumberedDefaultAttrs)()), { level: { default: 1 } }), content: `${types_1.NodeGroups.inline}*`, group: types_1.NodeGroups.heading, defining: true, parseDOM: [ { tag: 'h1', getAttrs: getAttrs(1) }, { tag: 'h2', getAttrs: getAttrs(2) }, { tag: 'h3', getAttrs: getAttrs(3) }, { tag: 'h4', getAttrs: getAttrs(4) }, { tag: 'h5', getAttrs: getAttrs(5) }, { tag: 'h6', getAttrs: getAttrs(6) }, ], toDOM(node) { return [`h${node.attrs.level}`, (0, utils_1.setNumberedAttrs)(node.attrs), 0]; }, attrsFromMyst: (token) => { var _a; return ({ id: null, label: null, numbered: (_a = token.enumerated) !== null && _a !== void 0 ? _a : false, level: token.depth, }); }, toMyst: (props) => ({ type: 'heading', depth: parseInt(props.tag.slice(1), 10), enumerated: (0, utils_1.readBooleanAttr)(props.numbered), children: (props.children || []), }), }; const toMarkdown = (state, node) => { // TODO: Put the id in: state.write(`${state.repeat('#', node.attrs.level)} `); state.renderInline(node); state.closeBlock(node); }; exports.toMarkdown = toMarkdown; const toTex = (state, node) => { const { level, id, numbered } = node.attrs; if (level === 1) state.write(`\\section${numbered ? '' : '*'}{`); if (level === 2) state.write(`\\subsection${numbered ? '' : '*'}{`); if (level === 3) state.write(`\\subsubsection${numbered ? '' : '*'}{`); if (level === 4) state.write(`\\paragraph${numbered ? '' : '*'}{`); if (level === 5) state.write(`\\subparagraph${numbered ? '' : '*'}{`); if (level === 6) state.write(`\\subparagraph${numbered ? '' : '*'}{`); state.renderInline(node); state.write('}'); if (numbered && id) { state.write(`\\label{${id}}`); } state.closeBlock(node); }; exports.toTex = toTex; exports.default = heading; //# sourceMappingURL=heading.js.map