add initial marp implementation with sample content and build configuration
This commit is contained in:
98
node_modules/speech-rule-engine/js/highlighter/abstract_highlighter.js
generated
vendored
Normal file
98
node_modules/speech-rule-engine/js/highlighter/abstract_highlighter.js
generated
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AbstractHighlighter = void 0;
|
||||
const XpathUtil = require("../common/xpath_util.js");
|
||||
const enrich_attr_js_1 = require("../enrich_mathml/enrich_attr.js");
|
||||
let counter = 0;
|
||||
class AbstractHighlighter {
|
||||
constructor() {
|
||||
this.counter = counter++;
|
||||
this.ATTR = 'sre-highlight-' + this.counter.toString();
|
||||
this.color = null;
|
||||
this.mactionName = '';
|
||||
this.currentHighlights = [];
|
||||
}
|
||||
highlight(nodes) {
|
||||
this.currentHighlights.push(nodes.map((node) => {
|
||||
const info = this.highlightNode(node);
|
||||
this.setHighlighted(node);
|
||||
return info;
|
||||
}));
|
||||
}
|
||||
highlightAll(node) {
|
||||
const mactions = this.getMactionNodes(node);
|
||||
for (let i = 0, maction; (maction = mactions[i]); i++) {
|
||||
this.highlight([maction]);
|
||||
}
|
||||
}
|
||||
unhighlight() {
|
||||
const nodes = this.currentHighlights.pop();
|
||||
if (!nodes) {
|
||||
return;
|
||||
}
|
||||
nodes.forEach((highlight) => {
|
||||
if (this.isHighlighted(highlight.node)) {
|
||||
this.unhighlightNode(highlight);
|
||||
this.unsetHighlighted(highlight.node);
|
||||
}
|
||||
});
|
||||
}
|
||||
unhighlightAll() {
|
||||
while (this.currentHighlights.length > 0) {
|
||||
this.unhighlight();
|
||||
}
|
||||
}
|
||||
setColor(color) {
|
||||
this.color = color;
|
||||
}
|
||||
colorString() {
|
||||
return this.color.rgba();
|
||||
}
|
||||
addEvents(node, events) {
|
||||
const mactions = this.getMactionNodes(node);
|
||||
for (let i = 0, maction; (maction = mactions[i]); i++) {
|
||||
for (const [key, event] of Object.entries(events)) {
|
||||
maction.addEventListener(key, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
getMactionNodes(node) {
|
||||
return Array.from(node.getElementsByClassName(this.mactionName));
|
||||
}
|
||||
isMactionNode(node) {
|
||||
const className = node.className || node.getAttribute('class');
|
||||
return className ? !!className.match(new RegExp(this.mactionName)) : false;
|
||||
}
|
||||
isHighlighted(node) {
|
||||
return node.hasAttribute(this.ATTR);
|
||||
}
|
||||
setHighlighted(node) {
|
||||
node.setAttribute(this.ATTR, 'true');
|
||||
}
|
||||
unsetHighlighted(node) {
|
||||
node.removeAttribute(this.ATTR);
|
||||
}
|
||||
colorizeAll(node) {
|
||||
XpathUtil.updateEvaluator(node);
|
||||
const allNodes = XpathUtil.evalXPath(`.//*[@${enrich_attr_js_1.Attribute.ID}]`, node);
|
||||
allNodes.forEach((x) => this.colorize(x));
|
||||
}
|
||||
uncolorizeAll(node) {
|
||||
const allNodes = XpathUtil.evalXPath(`.//*[@${enrich_attr_js_1.Attribute.ID}]`, node);
|
||||
allNodes.forEach((x) => this.uncolorize(x));
|
||||
}
|
||||
colorize(node) {
|
||||
const fore = (0, enrich_attr_js_1.addPrefix)('foreground');
|
||||
if (node.hasAttribute(fore)) {
|
||||
node.setAttribute(fore + '-old', node.style.color);
|
||||
node.style.color = node.getAttribute(fore);
|
||||
}
|
||||
}
|
||||
uncolorize(node) {
|
||||
const fore = (0, enrich_attr_js_1.addPrefix)('foreground') + '-old';
|
||||
if (node.hasAttribute(fore)) {
|
||||
node.style.color = node.getAttribute(fore);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.AbstractHighlighter = AbstractHighlighter;
|
||||
Reference in New Issue
Block a user