UNPKG

ecmarkup

Version:

Custom element definitions and core utilities for markup that specifies ECMAScript and related technologies.

83 lines (82 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Builder_1 = require("./Builder"); const emd = require("ecmarkdown"); const utils = require("./utils"); class Eqn extends Builder_1.default { // @ts-ignore constructor() { throw new Error('not actually constructible'); } static async enter(context) { const { spec, node, clauseStack } = context; const aoid = node.getAttribute('aoid'); if (aoid) { const existing = spec.biblio.keysForNamespace(spec.namespace); if (existing.has(aoid)) { spec.warn({ type: 'attr-value', attr: 'aoid', node, ruleId: 'duplicate-definition', message: `duplicate definition ${JSON.stringify(aoid)}`, }); } const id = node.getAttribute('id'); if (id) { spec.biblio.add({ type: 'op', aoid, id, signature: null, effects: [], }); } else { const clause = clauseStack[clauseStack.length - 1]; const clauseId = clause ? clause.id : ''; // TODO: no eqns outside of clauses, eh? spec.biblio.add({ type: 'op', aoid, refId: clauseId, signature: null, effects: [], }); } } let contents; try { contents = emd.fragment(node.innerHTML); } catch (e) { utils.warnEmdFailure(spec.warn, node, e); node.innerHTML = utils.wrapEmdFailure(node.innerHTML); return; } if (utils.shouldInline(node)) { const classString = node.getAttribute('class'); let classes; if (classString) { classes = classString.split(' '); } else { classes = []; } if (classes.indexOf('inline') === -1) { node.setAttribute('class', classes.concat(['inline']).join(' ')); } } else { contents = '<div>' + contents .split(/\r?\n/g) .filter(s => s.trim().length > 0) .join('</div><div>') + '</div>'; } node.innerHTML = contents; } } Eqn.elements = ['EMU-EQN']; exports.default = Eqn;