123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.openingFraction = openingFraction;
- exports.closingFraction = closingFraction;
- exports.overFraction = overFraction;
- exports.overBevelledFraction = overBevelledFraction;
- exports.hyperFractionBoundary = hyperFractionBoundary;
- exports.openingRadical = openingRadical;
- exports.closingRadical = closingRadical;
- exports.indexRadical = indexRadical;
- exports.relationIterator = relationIterator;
- exports.implicitIterator = implicitIterator;
- exports.contentIterator = contentIterator;
- const auditory_description_js_1 = require("../audio/auditory_description.js");
- const span_js_1 = require("../audio/span.js");
- const DomUtil = require("../common/dom_util.js");
- const XpathUtil = require("../common/xpath_util.js");
- const grammar_js_1 = require("../rule_engine/grammar.js");
- const engine_js_1 = require("../common/engine.js");
- const semantic_annotations_js_1 = require("../semantic_tree/semantic_annotations.js");
- const semantic_annotator_js_1 = require("../semantic_tree/semantic_annotator.js");
- const semantic_meaning_js_1 = require("../semantic_tree/semantic_meaning.js");
- const locale_js_1 = require("../l10n/locale.js");
- const MathspeakUtil = require("./mathspeak_util.js");
- const store_util_js_1 = require("../rule_engine/store_util.js");
- function openingFraction(node) {
- const depth = MathspeakUtil.fractionNestingDepth(node);
- return span_js_1.Span.singleton(new Array(depth).join(locale_js_1.LOCALE.MESSAGES.MS.FRACTION_REPEAT) +
- locale_js_1.LOCALE.MESSAGES.MS.FRACTION_START);
- }
- function closingFraction(node) {
- const depth = MathspeakUtil.fractionNestingDepth(node);
- return span_js_1.Span.singleton(new Array(depth).join(locale_js_1.LOCALE.MESSAGES.MS.FRACTION_REPEAT) +
- locale_js_1.LOCALE.MESSAGES.MS.FRACTION_END);
- }
- function overFraction(node) {
- const depth = MathspeakUtil.fractionNestingDepth(node);
- return span_js_1.Span.singleton(new Array(depth).join(locale_js_1.LOCALE.MESSAGES.MS.FRACTION_REPEAT) +
- locale_js_1.LOCALE.MESSAGES.MS.FRACTION_OVER);
- }
- function overBevelledFraction(node) {
- const depth = MathspeakUtil.fractionNestingDepth(node);
- return span_js_1.Span.singleton(new Array(depth).join(locale_js_1.LOCALE.MESSAGES.MS.FRACTION_REPEAT) +
- '⠸' +
- locale_js_1.LOCALE.MESSAGES.MS.FRACTION_OVER);
- }
- function hyperFractionBoundary(node) {
- return locale_js_1.LOCALE.MESSAGES.regexp.HYPER ===
- MathspeakUtil.fractionNestingDepth(node).toString()
- ? [node]
- : [];
- }
- function nestedRadical(node, postfix) {
- const depth = radicalNestingDepth(node);
- return span_js_1.Span.singleton(depth === 1
- ? postfix
- : new Array(depth).join(locale_js_1.LOCALE.MESSAGES.MS.NESTED) + postfix);
- }
- function radicalNestingDepth(node, opt_depth) {
- const depth = opt_depth || 0;
- if (!node.parentNode) {
- return depth;
- }
- return radicalNestingDepth(node.parentNode, node.tagName === 'root' || node.tagName === 'sqrt' ? depth + 1 : depth);
- }
- function openingRadical(node) {
- return nestedRadical(node, locale_js_1.LOCALE.MESSAGES.MS.STARTROOT);
- }
- function closingRadical(node) {
- return nestedRadical(node, locale_js_1.LOCALE.MESSAGES.MS.ENDROOT);
- }
- function indexRadical(node) {
- return nestedRadical(node, locale_js_1.LOCALE.MESSAGES.MS.ROOTINDEX);
- }
- function enlargeFence(text) {
- const start = '⠠';
- if (text.length === 1) {
- return start + text;
- }
- const neut = '⠳';
- const split = text.split('');
- if (split.every(function (x) {
- return x === neut;
- })) {
- return start + split.join(start);
- }
- return text.slice(0, -1) + start + text.slice(-1);
- }
- grammar_js_1.Grammar.getInstance().setCorrection('enlargeFence', enlargeFence);
- const NUMBER_PROPAGATORS = [
- semantic_meaning_js_1.SemanticType.MULTIREL,
- semantic_meaning_js_1.SemanticType.RELSEQ,
- semantic_meaning_js_1.SemanticType.APPL,
- semantic_meaning_js_1.SemanticType.ROW,
- semantic_meaning_js_1.SemanticType.LINE
- ];
- const NUMBER_INHIBITORS = [
- semantic_meaning_js_1.SemanticType.SUBSCRIPT,
- semantic_meaning_js_1.SemanticType.SUPERSCRIPT,
- semantic_meaning_js_1.SemanticType.OVERSCORE,
- semantic_meaning_js_1.SemanticType.UNDERSCORE
- ];
- function checkParent(node, info) {
- const parent = node.parent;
- if (!parent) {
- return false;
- }
- const type = parent.type;
- if (NUMBER_PROPAGATORS.indexOf(type) !== -1 ||
- (type === semantic_meaning_js_1.SemanticType.PREFIXOP &&
- parent.role === semantic_meaning_js_1.SemanticRole.NEGATIVE &&
- !info.script &&
- !info.enclosed) ||
- (type === semantic_meaning_js_1.SemanticType.PREFIXOP &&
- parent.role === semantic_meaning_js_1.SemanticRole.GEOMETRY)) {
- return true;
- }
- if (type === semantic_meaning_js_1.SemanticType.PUNCTUATED) {
- if (!info.enclosed || parent.role === semantic_meaning_js_1.SemanticRole.TEXT) {
- return true;
- }
- }
- return false;
- }
- function propagateNumber(node, info) {
- if (!node.childNodes.length) {
- if (checkParent(node, info)) {
- info.number = true;
- info.script = false;
- info.enclosed = false;
- }
- return [
- info['number'] ? 'number' : '',
- { number: false, enclosed: info.enclosed, script: info.script }
- ];
- }
- if (NUMBER_INHIBITORS.indexOf(node.type) !== -1) {
- info.script = true;
- }
- if (node.type === semantic_meaning_js_1.SemanticType.FENCED) {
- info.number = false;
- info.enclosed = true;
- return ['', info];
- }
- if (node.type === semantic_meaning_js_1.SemanticType.PREFIXOP &&
- node.role !== semantic_meaning_js_1.SemanticRole.GEOMETRY &&
- node.role !== semantic_meaning_js_1.SemanticRole.NEGATIVE) {
- info.number = false;
- return ['', info];
- }
- if (checkParent(node, info)) {
- info.number = true;
- info.enclosed = false;
- }
- return ['', info];
- }
- (0, semantic_annotations_js_1.register)(new semantic_annotator_js_1.SemanticVisitor('nemeth', 'number', propagateNumber, { number: true }));
- function annotateDepth(node) {
- if (!node.parent) {
- return [1];
- }
- const depth = parseInt(node.parent.annotation['depth'][0]);
- return [depth + 1];
- }
- (0, semantic_annotations_js_1.register)(new semantic_annotator_js_1.SemanticVisitor('depth', 'depth', annotateDepth));
- (0, semantic_annotations_js_1.activate)('depth', 'depth');
- function relationIterator(nodes, context) {
- var _a;
- const childNodes = nodes.slice(0);
- let first = true;
- const parentNode = nodes[0].parentNode.parentNode;
- const match = (_a = parentNode.getAttribute('annotation')) === null || _a === void 0 ? void 0 : _a.match(/depth:(\d+)/);
- const depth = match ? match[1] : '';
- let contentNodes;
- if (nodes.length > 0) {
- contentNodes = XpathUtil.evalXPath('./content/*', parentNode);
- }
- else {
- contentNodes = [];
- }
- return function () {
- const content = contentNodes.shift();
- const leftChild = childNodes.shift();
- const rightChild = childNodes[0];
- const contextDescr = context
- ? [auditory_description_js_1.AuditoryDescription.create({ text: context }, { translate: true })]
- : [];
- if (!content) {
- return contextDescr;
- }
- const base = leftChild
- ? MathspeakUtil.nestedSubSuper(leftChild, '', {
- sup: locale_js_1.LOCALE.MESSAGES.MS.SUPER,
- sub: locale_js_1.LOCALE.MESSAGES.MS.SUB
- })
- : '';
- const left = (leftChild && DomUtil.tagName(leftChild) !== 'EMPTY') ||
- (first && parentNode && parentNode.previousSibling)
- ? [
- auditory_description_js_1.AuditoryDescription.create({ text: locale_js_1.LOCALE.MESSAGES.regexp.SPACE + base }, {})
- ]
- : [];
- const right = (rightChild && DomUtil.tagName(rightChild) !== 'EMPTY') ||
- (!contentNodes.length && parentNode && parentNode.nextSibling)
- ? [
- auditory_description_js_1.AuditoryDescription.create({ text: locale_js_1.LOCALE.MESSAGES.regexp.SPACE }, {})
- ]
- : [];
- const descrs = engine_js_1.Engine.evaluateNode(content);
- descrs.unshift(new auditory_description_js_1.AuditoryDescription({ text: '', layout: `beginrel${depth}` }));
- descrs.push(new auditory_description_js_1.AuditoryDescription({ text: '', layout: `endrel${depth}` }));
- first = false;
- return contextDescr.concat(left, descrs, right);
- };
- }
- function implicitIterator(nodes, context) {
- const childNodes = nodes.slice(0);
- let contentNodes;
- if (nodes.length > 0) {
- contentNodes = XpathUtil.evalXPath('../../content/*', nodes[0]);
- }
- else {
- contentNodes = [];
- }
- return function () {
- const leftChild = childNodes.shift();
- const rightChild = childNodes[0];
- const content = contentNodes.shift();
- const contextDescr = context
- ? [auditory_description_js_1.AuditoryDescription.create({ text: context }, { translate: true })]
- : [];
- if (!content) {
- return contextDescr;
- }
- const left = leftChild && DomUtil.tagName(leftChild) === 'NUMBER';
- const right = rightChild && DomUtil.tagName(rightChild) === 'NUMBER';
- return contextDescr.concat(left && right && content.getAttribute('role') === semantic_meaning_js_1.SemanticRole.SPACE
- ? [
- auditory_description_js_1.AuditoryDescription.create({ text: locale_js_1.LOCALE.MESSAGES.regexp.SPACE }, {})
- ]
- : []);
- };
- }
- function ignoreEnglish(text) {
- return (0, grammar_js_1.correctFont)(text, locale_js_1.LOCALE.ALPHABETS.languagePrefix.english);
- }
- grammar_js_1.Grammar.getInstance().setCorrection('ignoreEnglish', ignoreEnglish);
- function contentIterator(nodes, context) {
- var _a;
- const func = (0, store_util_js_1.contentIterator)(nodes, context);
- const parentNode = nodes[0].parentNode.parentNode;
- const match = (_a = parentNode.getAttribute('annotation')) === null || _a === void 0 ? void 0 : _a.match(/depth:(\d+)/);
- const depth = match ? match[1] : '';
- return function () {
- const descrs = func();
- descrs.unshift(new auditory_description_js_1.AuditoryDescription({ text: '', layout: `beginrel${depth}` }));
- descrs.push(new auditory_description_js_1.AuditoryDescription({ text: '', layout: `endrel${depth}` }));
- return descrs;
- };
- }
- function literal(text) {
- const evalStr = (e) => engine_js_1.Engine.getInstance().evaluator(e, engine_js_1.Engine.getInstance().dynamicCstr);
- return Array.from(text).map(evalStr).join('');
- }
- grammar_js_1.Grammar.getInstance().setCorrection('literal', literal);
|