ecmarkup
Version:
Custom element definitions and core utilities for markup that specifies ECMAScript and related technologies.
83 lines (82 loc) • 2.69 kB
JavaScript
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;
;