Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2251)

Unified Diff: chrome/browser/resources/chromeos/chromevox/common/math_semantic_tree.js

Issue 2939273002: DO NOT SUBMIT: what chrome/browser/resources/ could eventually look like with clang-format (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/chromeos/chromevox/common/math_semantic_tree.js
diff --git a/chrome/browser/resources/chromeos/chromevox/common/math_semantic_tree.js b/chrome/browser/resources/chromeos/chromevox/common/math_semantic_tree.js
index daf7671944f6e0ba92b85069f410795295cea406..bcddbde4caaf89597eaf653e8b9b9ef3b11cec32 100644
--- a/chrome/browser/resources/chromeos/chromevox/common/math_semantic_tree.js
+++ b/chrome/browser/resources/chromeos/chromevox/common/math_semantic_tree.js
@@ -98,61 +98,63 @@ cvox.SemanticTree.Node.prototype.querySelectorAll = function(pred) {
};
- /**
- * Returns an XML representation of the tree.
- * @param {boolean=} brief If set attributes are omitted.
- * @return {Node} The XML representation of the tree.
- */
- cvox.SemanticTree.prototype.xml = function(brief) {
- var dp = new DOMParser();
- var xml = dp.parseFromString('<stree></stree>', 'text/xml');
-
- var xmlRoot = this.root.xml(xml, brief);
- xml.childNodes[0].appendChild(xmlRoot);
-
- return xml.childNodes[0];
- };
-
-
- /**
- * An XML tree representation of the current node.
- * @param {Document} xml The XML document.
- * @param {boolean=} brief If set attributes are omitted.
- * @return {Node} The XML representation of the node.
- */
- cvox.SemanticTree.Node.prototype.xml = function(xml, brief) {
- /**
- * Translates a list of nodes into XML representation.
- * @param {string} tag Name of the enclosing tag.
- * @param {!Array<!cvox.SemanticTree.Node>} nodes A list of nodes.
- * @return {Node} An XML representation of the node list.
- */
- var xmlNodeList = function(tag, nodes) {
- var xmlNodes = nodes.map(function(x) {return x.xml(xml, brief);});
- var tagNode = xml.createElement(tag);
- for (var i = 0, child; child = xmlNodes[i]; i++) {
- tagNode.appendChild(child);
- }
- return tagNode;
- };
- var node = xml.createElement(this.type);
- if (!brief) {
- this.xmlAttributes_(node);
- }
- node.textContent = this.textContent;
- if (this.contentNodes.length > 0) {
- node.appendChild(xmlNodeList('content', this.contentNodes));
- }
- if (this.childNodes.length > 0) {
- node.appendChild(xmlNodeList('children', this.childNodes));
- }
- return node;
- };
-
-
-/**
- * Serializes the XML representation of the tree.
- * @param {boolean=} brief If set attributes are omitted.
+/**
+ * Returns an XML representation of the tree.
+ * @param {boolean=} brief If set attributes are omitted.
+ * @return {Node} The XML representation of the tree.
+ */
+cvox.SemanticTree.prototype.xml = function(brief) {
+ var dp = new DOMParser();
+ var xml = dp.parseFromString('<stree></stree>', 'text/xml');
+
+ var xmlRoot = this.root.xml(xml, brief);
+ xml.childNodes[0].appendChild(xmlRoot);
+
+ return xml.childNodes[0];
+};
+
+
+/**
+ * An XML tree representation of the current node.
+ * @param {Document} xml The XML document.
+ * @param {boolean=} brief If set attributes are omitted.
+ * @return {Node} The XML representation of the node.
+ */
+cvox.SemanticTree.Node.prototype.xml = function(xml, brief) {
+ /**
+ * Translates a list of nodes into XML representation.
+ * @param {string} tag Name of the enclosing tag.
+ * @param {!Array<!cvox.SemanticTree.Node>} nodes A list of nodes.
+ * @return {Node} An XML representation of the node list.
+ */
+ var xmlNodeList = function(tag, nodes) {
+ var xmlNodes = nodes.map(function(x) {
+ return x.xml(xml, brief);
+ });
+ var tagNode = xml.createElement(tag);
+ for (var i = 0, child; child = xmlNodes[i]; i++) {
+ tagNode.appendChild(child);
+ }
+ return tagNode;
+ };
+ var node = xml.createElement(this.type);
+ if (!brief) {
+ this.xmlAttributes_(node);
+ }
+ node.textContent = this.textContent;
+ if (this.contentNodes.length > 0) {
+ node.appendChild(xmlNodeList('content', this.contentNodes));
+ }
+ if (this.childNodes.length > 0) {
+ node.appendChild(xmlNodeList('children', this.childNodes));
+ }
+ return node;
+};
+
+
+/**
+ * Serializes the XML representation of the tree.
+ * @param {boolean=} brief If set attributes are omitted.
* @return {string} Serialized string.
*/
cvox.SemanticTree.prototype.toString = function(brief) {
@@ -184,26 +186,25 @@ cvox.SemanticTree.formatXml = function(xml) {
xml = xml.replace(reg, '$1\r\n$2\r\n$3');
var formatted = '';
var padding = '';
- xml.split('\r\n')
- .forEach(function(node) {
- if (node.match(/.+<\/\w[^>]*>$/)) {
- // Node with content.
- formatted += padding + node + '\r\n';
- } else if (node.match(/^<\/\w/)) {
- if (padding) {
- // Closing tag
- padding = padding.slice(2);
- formatted += padding + node + '\r\n';
- }
- } else if (node.match(/^<\w[^>]*[^\/]>.*$/)) {
- // Opening tag
- formatted += padding + node + '\r\n';
- padding += ' ';
- } else {
- // Empty tag
- formatted += padding + node + '\r\n';
- }
- });
+ xml.split('\r\n').forEach(function(node) {
+ if (node.match(/.+<\/\w[^>]*>$/)) {
+ // Node with content.
+ formatted += padding + node + '\r\n';
+ } else if (node.match(/^<\/\w/)) {
+ if (padding) {
+ // Closing tag
+ padding = padding.slice(2);
+ formatted += padding + node + '\r\n';
+ }
+ } else if (node.match(/^<\w[^>]*[^\/]>.*$/)) {
+ // Opening tag
+ formatted += padding + node + '\r\n';
+ padding += ' ';
+ } else {
+ // Empty tag
+ formatted += padding + node + '\r\n';
+ }
+ });
return formatted;
};
@@ -341,10 +342,12 @@ cvox.SemanticTree.Node.prototype.replaceChild_ = function(oldNode, newNode) {
// To not mess up the order of MathML elements more than necessary, we only
// remove and add difference lists. The hope is that we might end up with
// little change.
- var removeMathml = oldNode.mathml.filter(
- function(x) {return newNode.mathml.indexOf(x) == -1;});
- var addMathml = newNode.mathml.filter(
- function(x) {return oldNode.mathml.indexOf(x) == -1;});
+ var removeMathml = oldNode.mathml.filter(function(x) {
+ return newNode.mathml.indexOf(x) == -1;
+ });
+ var addMathml = newNode.mathml.filter(function(x) {
+ return oldNode.mathml.indexOf(x) == -1;
+ });
this.removeMathmlNodes_(removeMathml);
this.addMathmlNodes_(addMathml);
};
@@ -396,16 +399,15 @@ cvox.SemanticTree.prototype.parseMathml_ = function(mml) {
children = cvox.SemanticUtil.purgeNodes(children);
// Single child node, i.e. the row is meaningless.
if (children.length == 1) {
- return this.parseMathml_(/** @type {!Element} */(children[0]));
+ return this.parseMathml_(/** @type {!Element} */ (children[0]));
}
// Case of a 'meaningful' row, even if they are empty.
return this.processRow_(this.parseMathmlChildren_(children));
- break;
+ break;
case 'MFRAC':
var newNode = this.makeBranchNode_(
cvox.SemanticAttr.Type.FRACTION,
- [this.parseMathml_(children[0]), this.parseMathml_(children[1])],
- []);
+ [this.parseMathml_(children[0]), this.parseMathml_(children[1])], []);
newNode.role = cvox.SemanticAttr.Role.DIVISION;
return newNode;
break;
@@ -415,40 +417,38 @@ cvox.SemanticTree.prototype.parseMathml_ = function(mml) {
case 'MOVER':
case 'MUNDER':
case 'MUNDEROVER':
- return this.makeLimitNode_(cvox.SemanticUtil.tagName(mml),
- this.parseMathmlChildren_(children));
+ return this.makeLimitNode_(
+ cvox.SemanticUtil.tagName(mml), this.parseMathmlChildren_(children));
break;
case 'MROOT':
return this.makeBranchNode_(
cvox.SemanticAttr.Type.ROOT,
- [this.parseMathml_(children[0]), this.parseMathml_(children[1])],
- []);
+ [this.parseMathml_(children[0]), this.parseMathml_(children[1])], []);
break;
case 'MSQRT':
- children = this.parseMathmlChildren_(
- cvox.SemanticUtil.purgeNodes(children));
+ children =
+ this.parseMathmlChildren_(cvox.SemanticUtil.purgeNodes(children));
return this.makeBranchNode_(
cvox.SemanticAttr.Type.SQRT, [this.processRow_(children)], []);
break;
case 'MTABLE':
newNode = this.makeBranchNode_(
- cvox.SemanticAttr.Type.TABLE,
- this.parseMathmlChildren_(children), []);
+ cvox.SemanticAttr.Type.TABLE, this.parseMathmlChildren_(children),
+ []);
if (cvox.SemanticTree.tableIsMultiline_(newNode)) {
this.tableToMultiline_(newNode);
- }
+ }
return newNode;
break;
case 'MTR':
newNode = this.makeBranchNode_(
- cvox.SemanticAttr.Type.ROW,
- this.parseMathmlChildren_(children), []);
+ cvox.SemanticAttr.Type.ROW, this.parseMathmlChildren_(children), []);
newNode.role = cvox.SemanticAttr.Role.TABLE;
return newNode;
break;
case 'MTD':
- children = this.parseMathmlChildren_(
- cvox.SemanticUtil.purgeNodes(children));
+ children =
+ this.parseMathmlChildren_(cvox.SemanticUtil.purgeNodes(children));
newNode = this.makeBranchNode_(
cvox.SemanticAttr.Type.CELL, [this.processRow_(children)], []);
newNode.role = cvox.SemanticAttr.Role.TABLE;
@@ -485,7 +485,7 @@ cvox.SemanticTree.prototype.parseMathml_ = function(mml) {
break;
// TODO (sorge) Do something useful with error and phantom symbols.
default:
- // Ordinarilly at this point we should not get any other tag.
+ // Ordinarilly at this point we should not get any other tag.
return this.makeUnprocessed_(mml);
}
};
@@ -564,12 +564,10 @@ cvox.SemanticTree.prototype.makeBranchNode_ = function(
node.type = type;
node.childNodes = children;
node.contentNodes = contentNodes;
- children.concat(contentNodes)
- .forEach(
- function(x) {
- x.parent = node;
- node.addMathmlNodes_(x.mathml);
- });
+ children.concat(contentNodes).forEach(function(x) {
+ x.parent = node;
+ node.addMathmlNodes_(x.mathml);
+ });
return node;
};
@@ -584,7 +582,7 @@ cvox.SemanticTree.prototype.makeBranchNode_ = function(
cvox.SemanticTree.prototype.makeImplicitNode_ = function(nodes) {
if (nodes.length == 1) {
return nodes[0];
- }
+ }
var operator = this.createNode_();
// For now we assume this is a multiplication using invisible times.
operator.updateContent_(cvox.SemanticAttr.invisibleTimes());
@@ -621,7 +619,11 @@ cvox.SemanticTree.prototype.makeConcatNode_ = function(inner, nodeList, type) {
if (nodeList.length == 0) {
return inner;
}
- var content = nodeList.map(function(x) {return x.textContent;}).join(' ');
+ var content = nodeList
+ .map(function(x) {
+ return x.textContent;
+ })
+ .join(' ');
var newNode = this.makeBranchNode_(type, [inner], nodeList, content);
if (nodeList.length > 0) {
newNode.role = cvox.SemanticAttr.Role.MULTIOP;
@@ -717,10 +719,11 @@ cvox.SemanticTree.prototype.processRelationsInRow_ = function(nodes) {
if (nodes.length == 1) {
return nodes[0];
}
- var children = partition.comp.map(
- goog.bind(this.processOperationsInRow_, this));
- if (partition.rel.every(
- function(x) {return x.textContent == firstRel.textContent;})) {
+ var children =
+ partition.comp.map(goog.bind(this.processOperationsInRow_, this));
+ if (partition.rel.every(function(x) {
+ return x.textContent == firstRel.textContent;
+ })) {
return this.makeBranchNode_(
cvox.SemanticAttr.Type.RELSEQ, children, partition.rel,
firstRel.textContent);
@@ -745,8 +748,7 @@ cvox.SemanticTree.prototype.processOperationsInRow_ = function(nodes) {
}
var prefix = [];
- while (nodes.length > 0 &&
- nodes[0].type == cvox.SemanticAttr.Type.OPERATOR) {
+ while (nodes.length > 0 && nodes[0].type == cvox.SemanticAttr.Type.OPERATOR) {
prefix.push(nodes.shift());
}
// Pathological case: only operators in row.
@@ -810,8 +812,7 @@ cvox.SemanticTree.prototype.makeOperationsTree_ = function(
return this.makeOperationsTree_(split.tail, root, lastop, prefixes);
}
- var node = this.makePrefixNode_(
- this.makeImplicitNode_(split.head), prefixes);
+ var node = this.makePrefixNode_(this.makeImplicitNode_(split.head), prefixes);
var newNode = this.appendOperand_(root, lastop, node);
if (!split.div) {
return newNode;
@@ -841,7 +842,7 @@ cvox.SemanticTree.prototype.appendOperand_ = function(root, op, node) {
}
return op.role == cvox.SemanticAttr.Role.MULTIPLICATION ?
this.appendMultiplicativeOp_(root, op, node) :
- this.appendAdditiveOp_(root, op, node);
+ this.appendAdditiveOp_(root, op, node);
};
@@ -900,8 +901,7 @@ cvox.SemanticTree.prototype.appendExistingOperator_ = function(root, op, node) {
this.appendExistingOperator_(
// Again, if this is an INFIXOP node, we know it has a child!
/** @type {!cvox.SemanticTree.Node} */
- (root.childNodes[root.childNodes.length - 1]),
- op, node);
+ (root.childNodes[root.childNodes.length - 1]), op, node);
return false;
};
@@ -946,11 +946,11 @@ cvox.SemanticTree.prototype.getFencesInRow_ = function(nodes) {
* @private
*/
cvox.SemanticTree.prototype.processFences_ = function(
- fences, content, openStack, contentStack) {
+ fences, content, openStack, contentStack) {
// Base case 1: Everything is used up.
if (fences.length == 0 && openStack.length == 0) {
return contentStack[0];
- }
+ }
var openPred = cvox.SemanticTree.attrPred_('role', 'OPEN');
// Base case 2: Only open and neutral fences are left on the stack.
if (fences.length == 0) {
@@ -979,9 +979,9 @@ cvox.SemanticTree.prototype.processFences_ = function(
var innerNodes = this.processNeutralFences_(
split.head, contentStack.slice(0, cutLength));
contentStack = contentStack.slice(cutLength);
- //var rightContent = contentStack.shift();
+ // var rightContent = contentStack.shift();
result.push.apply(result, innerNodes);
- //result.push.apply(result, rightContent);
+ // result.push.apply(result, rightContent);
if (split.div) {
split.tail.unshift(split.div);
}
@@ -997,21 +997,21 @@ cvox.SemanticTree.prototype.processFences_ = function(
// Either we have an open fence.
if (firstRole == cvox.SemanticAttr.Role.OPEN ||
// Or we have a neutral fence that does not have a counter part.
- (firstRole == cvox.SemanticAttr.Role.NEUTRAL &&
- (!lastOpen ||
- fences[0].textContent != lastOpen.textContent))) {
+ (firstRole == cvox.SemanticAttr.Role.NEUTRAL &&
+ (!lastOpen || fences[0].textContent != lastOpen.textContent))) {
openStack.push(fences.shift());
contentStack.push(content.shift());
return this.processFences_(fences, content, openStack, contentStack);
}
// General closing case.
- if (lastOpen && (
- // Closing fence for some opening fence.
- (firstRole == cvox.SemanticAttr.Role.CLOSE &&
- lastOpen.role == cvox.SemanticAttr.Role.OPEN) ||
- // Netural fence with exact counter part.
- (firstRole == cvox.SemanticAttr.Role.NEUTRAL &&
- fences[0].textContent == lastOpen.textContent))) {
+ if (lastOpen &&
+ (
+ // Closing fence for some opening fence.
+ (firstRole == cvox.SemanticAttr.Role.CLOSE &&
+ lastOpen.role == cvox.SemanticAttr.Role.OPEN) ||
+ // Netural fence with exact counter part.
+ (firstRole == cvox.SemanticAttr.Role.NEUTRAL &&
+ fences[0].textContent == lastOpen.textContent))) {
var fenced = this.makeHorizontalFencedNode_(
openStack.pop(), fences.shift(), contentStack.pop());
contentStack.push(contentStack.pop().concat([fenced], content.shift()));
@@ -1020,7 +1020,7 @@ cvox.SemanticTree.prototype.processFences_ = function(
// Closing with a neutral fence on the stack.
if (lastOpen && firstRole == cvox.SemanticAttr.Role.CLOSE &&
lastOpen.role == cvox.SemanticAttr.Role.NEUTRAL &&
- openStack.some(openPred)) {
+ openStack.some(openPred)) {
// Steps of the algorithm:
// 1. Split list at right most opening bracket.
// 2. Cut content list at corresponding length.
@@ -1037,8 +1037,8 @@ cvox.SemanticTree.prototype.processFences_ = function(
// shift of content.
var rightContent = contentStack.pop();
var cutLength = contentStack.length - split.tail.length + 1;
- var innerNodes = this.processNeutralFences_(
- split.tail, contentStack.slice(cutLength));
+ var innerNodes =
+ this.processNeutralFences_(split.tail, contentStack.slice(cutLength));
contentStack = contentStack.slice(0, cutLength);
var fenced = this.makeHorizontalFencedNode_(
split.div, fences.shift(),
@@ -1072,18 +1072,19 @@ cvox.SemanticTree.prototype.processNeutralFences_ = function(fences, content) {
if (fences.length == 1) {
cvox.SemanticTree.fenceToPunct_(fences[0]);
return fences;
- }
+ }
var firstFence = fences.shift();
- var split = cvox.SemanticTree.sliceNodes_(
- fences, function(x) {return x.textContent == firstFence.textContent;});
+ var split = cvox.SemanticTree.sliceNodes_(fences, function(x) {
+ return x.textContent == firstFence.textContent;
+ });
if (!split.div) {
cvox.SemanticTree.fenceToPunct_(firstFence);
var restContent = content.shift();
restContent.unshift(firstFence);
return restContent.concat(this.processNeutralFences_(fences, content));
}
- var newContent = this.combineFencedContent_(
- firstFence, split.div, split.head, content);
+ var newContent =
+ this.combineFencedContent_(firstFence, split.div, split.head, content);
if (split.tail.length > 0) {
var leftContent = newContent.shift();
var result = this.processNeutralFences_(split.tail, newContent);
@@ -1114,8 +1115,8 @@ cvox.SemanticTree.prototype.combineFencedContent_ = function(
leftFence, rightFence, midFences, content) {
if (midFences.length == 0) {
- var fenced = this.makeHorizontalFencedNode_(
- leftFence, rightFence, content.shift());
+ var fenced =
+ this.makeHorizontalFencedNode_(leftFence, rightFence, content.shift());
content.unshift(fenced);
return content;
}
@@ -1128,15 +1129,15 @@ cvox.SemanticTree.prototype.combineFencedContent_ = function(
var innerNodes = this.processNeutralFences_(midFences, midContent);
leftContent.push.apply(leftContent, innerNodes);
leftContent.push.apply(leftContent, rightContent);
- var fenced = this.makeHorizontalFencedNode_(
- leftFence, rightFence, leftContent);
+ var fenced =
+ this.makeHorizontalFencedNode_(leftFence, rightFence, leftContent);
if (content.length > 0) {
content[0].unshift(fenced);
} else {
content = [[fenced]];
}
return content;
- };
+};
/**
@@ -1148,14 +1149,14 @@ cvox.SemanticTree.fenceToPunct_ = function(fence) {
fence.type = cvox.SemanticAttr.Type.PUNCTUATION;
switch (fence.role) {
case cvox.SemanticAttr.Role.NEUTRAL:
- fence.role = cvox.SemanticAttr.Role.VBAR;
- break;
+ fence.role = cvox.SemanticAttr.Role.VBAR;
+ break;
case cvox.SemanticAttr.Role.OPEN:
- fence.role = cvox.SemanticAttr.Role.OPENFENCE;
- break;
+ fence.role = cvox.SemanticAttr.Role.OPENFENCE;
+ break;
case cvox.SemanticAttr.Role.CLOSE:
- fence.role = cvox.SemanticAttr.Role.CLOSEFENCE;
- break;
+ fence.role = cvox.SemanticAttr.Role.CLOSEFENCE;
+ break;
}
};
@@ -1194,10 +1195,10 @@ cvox.SemanticTree.prototype.getPunctuationInRow_ = function(nodes) {
// similar to an mrow. The only exception are ellipses, which we assume to be
// in lieu of identifiers.
// In addition we keep the single punctuation nodes as content.
- var partition = cvox.SemanticTree.partitionNodes_(
- nodes, function(x) {
- return cvox.SemanticTree.attrPred_('type', 'PUNCTUATION')(x) &&
- !cvox.SemanticTree.attrPred_('role', 'ELLIPSIS')(x);});
+ var partition = cvox.SemanticTree.partitionNodes_(nodes, function(x) {
+ return cvox.SemanticTree.attrPred_('type', 'PUNCTUATION')(x) &&
+ !cvox.SemanticTree.attrPred_('role', 'ELLIPSIS')(x);
+ });
if (partition.rel.length == 0) {
return nodes;
}
@@ -1235,7 +1236,8 @@ cvox.SemanticTree.prototype.makePunctuatedNode_ = function(
if (punctuations.length == 1 &&
nodes[0].type == cvox.SemanticAttr.Type.PUNCTUATION) {
newNode.role = cvox.SemanticAttr.Role.STARTPUNCT;
- } else if (punctuations.length == 1 &&
+ } else if (
+ punctuations.length == 1 &&
nodes[nodes.length - 1].type == cvox.SemanticAttr.Type.PUNCTUATION) {
newNode.role = cvox.SemanticAttr.Role.ENDPUNCT;
} else {
@@ -1269,46 +1271,46 @@ cvox.SemanticTree.prototype.makeLimitNode_ = function(mmlTag, children) {
switch (mmlTag) {
case 'MSUB':
case 'MUNDER':
- type = cvox.SemanticAttr.Type.LIMLOWER;
- break;
+ type = cvox.SemanticAttr.Type.LIMLOWER;
+ break;
case 'MSUP':
case 'MOVER':
- type = cvox.SemanticAttr.Type.LIMUPPER;
- break;
+ type = cvox.SemanticAttr.Type.LIMUPPER;
+ break;
case 'MSUBSUP':
case 'MUNDEROVER':
- type = cvox.SemanticAttr.Type.LIMBOTH;
- break;
+ type = cvox.SemanticAttr.Type.LIMBOTH;
+ break;
}
} else {
switch (mmlTag) {
case 'MSUB':
- type = cvox.SemanticAttr.Type.SUBSCRIPT;
- break;
+ type = cvox.SemanticAttr.Type.SUBSCRIPT;
+ break;
case 'MSUP':
- type = cvox.SemanticAttr.Type.SUPERSCRIPT;
- break;
+ type = cvox.SemanticAttr.Type.SUPERSCRIPT;
+ break;
case 'MSUBSUP':
- var innerNode = this.makeBranchNode_(cvox.SemanticAttr.Type.SUBSCRIPT,
- [center, children[1]], []);
- innerNode.role = center.role;
- children = [innerNode, children[2]];
- type = cvox.SemanticAttr.Type.SUPERSCRIPT;
- break;
+ var innerNode = this.makeBranchNode_(
+ cvox.SemanticAttr.Type.SUBSCRIPT, [center, children[1]], []);
+ innerNode.role = center.role;
+ children = [innerNode, children[2]];
+ type = cvox.SemanticAttr.Type.SUPERSCRIPT;
+ break;
case 'MOVER':
- type = cvox.SemanticAttr.Type.OVERSCORE;
- break;
+ type = cvox.SemanticAttr.Type.OVERSCORE;
+ break;
case 'MUNDER':
- type = cvox.SemanticAttr.Type.UNDERSCORE;
- break;
+ type = cvox.SemanticAttr.Type.UNDERSCORE;
+ break;
case 'MUNDEROVER':
default:
- var innerNode = this.makeBranchNode_(cvox.SemanticAttr.Type.UNDERSCORE,
- [center, children[1]], []);
- innerNode.role = center.role;
- children = [innerNode, children[2]];
- type = cvox.SemanticAttr.Type.OVERSCORE;
- break;
+ var innerNode = this.makeBranchNode_(
+ cvox.SemanticAttr.Type.UNDERSCORE, [center, children[1]], []);
+ innerNode.role = center.role;
+ children = [innerNode, children[2]];
+ type = cvox.SemanticAttr.Type.OVERSCORE;
+ break;
}
}
var newNode = this.makeBranchNode_(type, children, []);
@@ -1371,7 +1373,7 @@ cvox.SemanticTree.classifyFunction_ = function(funcNode, restNodes) {
// We do not allow double function application. This is not lambda calculus!
if (funcNode.type == cvox.SemanticAttr.Type.APPL ||
funcNode.type == cvox.SemanticAttr.Type.BIGOP ||
- funcNode.type == cvox.SemanticAttr.Type.INTEGRAL) {
+ funcNode.type == cvox.SemanticAttr.Type.INTEGRAL) {
return '';
}
// Find and remove explicit function applications.
@@ -1387,19 +1389,19 @@ cvox.SemanticTree.classifyFunction_ = function(funcNode, restNodes) {
}
switch (funcNode.role) {
case cvox.SemanticAttr.Role.INTEGRAL:
- return 'integral';
- break;
+ return 'integral';
+ break;
case cvox.SemanticAttr.Role.SUM:
- return 'bigop';
- break;
+ return 'bigop';
+ break;
case cvox.SemanticAttr.Role.PREFIXFUNC:
case cvox.SemanticAttr.Role.LIMFUNC:
- return 'prefix';
- break;
+ return 'prefix';
+ break;
default:
- if (funcNode.type == cvox.SemanticAttr.Type.IDENTIFIER) {
- return 'simple';
- }
+ if (funcNode.type == cvox.SemanticAttr.Type.IDENTIFIER) {
+ return 'simple';
+ }
}
return '';
};
@@ -1433,50 +1435,50 @@ cvox.SemanticTree.propagatePrefixFunc_ = function(funcNode) {
cvox.SemanticTree.prototype.getFunctionArgs_ = function(func, rest, heuristic) {
switch (heuristic) {
case 'integral':
- var components = this.getIntegralArgs_(rest);
- var integrand = this.processRow_(components.integrand);
- var funcNode = this.makeIntegralNode_(func, integrand, components.intvar);
- components.rest.unshift(funcNode);
- return components.rest;
- break;
+ var components = this.getIntegralArgs_(rest);
+ var integrand = this.processRow_(components.integrand);
+ var funcNode = this.makeIntegralNode_(func, integrand, components.intvar);
+ components.rest.unshift(funcNode);
+ return components.rest;
+ break;
case 'prefix':
- if (rest[0] && rest[0].type == cvox.SemanticAttr.Type.FENCED) {
- funcNode = this.makeFunctionNode_(
- func, /** @type {!cvox.SemanticTree.Node} */ (rest.shift()));
- rest.unshift(funcNode);
- return rest;
- }
+ if (rest[0] && rest[0].type == cvox.SemanticAttr.Type.FENCED) {
+ funcNode = this.makeFunctionNode_(
+ func, /** @type {!cvox.SemanticTree.Node} */ (rest.shift()));
+ rest.unshift(funcNode);
+ return rest;
+ }
case 'bigop':
- var partition = cvox.SemanticTree.sliceNodes_(
- rest, cvox.SemanticTree.prefixFunctionBoundary_);
- var arg = this.processRow_(partition.head);
- if (heuristic == 'prefix') {
- funcNode = this.makeFunctionNode_(func, arg);
- } else {
- funcNode = this.makeBigOpNode_(func, arg);
- }
- if (partition.div) {
- partition.tail.unshift(partition.div);
- }
- partition.tail.unshift(funcNode);
- return partition.tail;
- break;
+ var partition = cvox.SemanticTree.sliceNodes_(
+ rest, cvox.SemanticTree.prefixFunctionBoundary_);
+ var arg = this.processRow_(partition.head);
+ if (heuristic == 'prefix') {
+ funcNode = this.makeFunctionNode_(func, arg);
+ } else {
+ funcNode = this.makeBigOpNode_(func, arg);
+ }
+ if (partition.div) {
+ partition.tail.unshift(partition.div);
+ }
+ partition.tail.unshift(funcNode);
+ return partition.tail;
+ break;
case 'simple':
- if (rest.length == 0) {
- return [func];
- }
- var firstArg = rest[0];
- if (firstArg.type == cvox.SemanticAttr.Type.FENCED &&
- firstArg.role != cvox.SemanticAttr.Role.NEUTRAL &&
- this.simpleFunctionHeuristic_(firstArg)) {
- funcNode = this.makeFunctionNode_(
- func, /** @type {!cvox.SemanticTree.Node} */ (rest.shift()));
- rest.unshift(funcNode);
+ if (rest.length == 0) {
+ return [func];
+ }
+ var firstArg = rest[0];
+ if (firstArg.type == cvox.SemanticAttr.Type.FENCED &&
+ firstArg.role != cvox.SemanticAttr.Role.NEUTRAL &&
+ this.simpleFunctionHeuristic_(firstArg)) {
+ funcNode = this.makeFunctionNode_(
+ func, /** @type {!cvox.SemanticTree.Node} */ (rest.shift()));
+ rest.unshift(funcNode);
+ return rest;
+ }
+ rest.unshift(func);
return rest;
- }
- rest.unshift(func);
- return rest;
- break;
+ break;
}
return [];
};
@@ -1509,8 +1511,8 @@ cvox.SemanticTree.prototype.getIntegralArgs_ = function(nodes, args) {
if (nodes[1] && cvox.SemanticTree.integralDxBoundary_(firstNode, nodes[1])) {
var comma = this.createNode_();
comma.updateContent_(cvox.SemanticAttr.invisibleComma());
- var intvar = this.makePunctuatedNode_(
- [firstNode, comma, nodes[1]], [comma]);
+ var intvar =
+ this.makePunctuatedNode_([firstNode, comma, nodes[1]], [comma]);
intvar.role = cvox.SemanticAttr.Role.INTEGRAL;
return {integrand: args, intvar: intvar, rest: nodes.slice(2)};
}
@@ -1531,8 +1533,8 @@ cvox.SemanticTree.prototype.makeFunctionNode_ = function(func, arg) {
applNode.updateContent_(cvox.SemanticAttr.functionApplication());
applNode.type = cvox.SemanticAttr.Type.PUNCTUATION;
applNode.role = cvox.SemanticAttr.Role.APPLICATION;
- var newNode = this.makeBranchNode_(cvox.SemanticAttr.Type.APPL, [func, arg],
- [applNode]);
+ var newNode = this.makeBranchNode_(
+ cvox.SemanticAttr.Type.APPL, [func, arg], [applNode]);
newNode.role = func.role;
return newNode;
};
@@ -1546,8 +1548,8 @@ cvox.SemanticTree.prototype.makeFunctionNode_ = function(func, arg) {
* @private
*/
cvox.SemanticTree.prototype.makeBigOpNode_ = function(bigOp, arg) {
- var newNode = this.makeBranchNode_(
- cvox.SemanticAttr.Type.BIGOP, [bigOp, arg], []);
+ var newNode =
+ this.makeBranchNode_(cvox.SemanticAttr.Type.BIGOP, [bigOp, arg], []);
newNode.role = bigOp.role;
return newNode;
};
@@ -1566,8 +1568,8 @@ cvox.SemanticTree.prototype.makeIntegralNode_ = function(
integral, integrand, intvar) {
integrand = integrand || this.makeEmptyNode_();
intvar = intvar || this.makeEmptyNode_();
- var newNode = this.makeBranchNode_(cvox.SemanticAttr.Type.INTEGRAL,
- [integral, integrand, intvar], []);
+ var newNode = this.makeBranchNode_(
+ cvox.SemanticAttr.Type.INTEGRAL, [integral, integrand, intvar], []);
newNode.role = integral.role;
return newNode;
};
@@ -1625,11 +1627,10 @@ cvox.SemanticTree.prefixFunctionBoundary_ = function(node) {
* @return {boolean} True if the second node exists and the first node is a 'd'.
* @private
*/
-cvox.SemanticTree.integralDxBoundary_ = function(
- firstNode, secondNode) {
+cvox.SemanticTree.integralDxBoundary_ = function(firstNode, secondNode) {
return !!secondNode &&
cvox.SemanticTree.attrPred_('type', 'IDENTIFIER')(secondNode) &&
- cvox.SemanticAttr.isCharacterD(firstNode.textContent);
+ cvox.SemanticAttr.isCharacterD(firstNode.textContent);
};
@@ -1704,8 +1705,9 @@ cvox.SemanticTree.prototype.processTablesInRow_ = function(nodes) {
* @private
*/
cvox.SemanticTree.isTableOrMultiline_ = function(node) {
- return !!node && (cvox.SemanticTree.attrPred_('type', 'TABLE')(node) ||
- cvox.SemanticTree.attrPred_('type', 'MULTILINE')(node));
+ return !!node &&
+ (cvox.SemanticTree.attrPred_('type', 'TABLE')(node) ||
+ cvox.SemanticTree.attrPred_('type', 'MULTILINE')(node));
};
@@ -1719,8 +1721,8 @@ cvox.SemanticTree.isTableOrMultiline_ = function(node) {
cvox.SemanticTree.tableIsMatrixOrVector_ = function(node) {
return !!node && cvox.SemanticTree.attrPred_('type', 'FENCED')(node) &&
cvox.SemanticTree.attrPred_('role', 'LEFTRIGHT')(node) &&
- node.childNodes.length == 1 &&
- cvox.SemanticTree.isTableOrMultiline_(node.childNodes[0]);
+ node.childNodes.length == 1 &&
+ cvox.SemanticTree.isTableOrMultiline_(node.childNodes[0]);
};
@@ -1733,7 +1735,8 @@ cvox.SemanticTree.tableIsMatrixOrVector_ = function(node) {
cvox.SemanticTree.prototype.tableToMatrixOrVector_ = function(node) {
var matrix = node.childNodes[0];
var type = cvox.SemanticTree.attrPred_('type', 'MULTILINE')(matrix) ?
- 'VECTOR' : 'MATRIX';
+ 'VECTOR' :
+ 'MATRIX';
matrix.type = cvox.SemanticAttr.Type[type];
node.contentNodes.forEach(goog.bind(matrix.appendContentNode_, matrix));
for (var i = 0, row; row = matrix.childNodes[i]; i++) {
@@ -1753,8 +1756,8 @@ cvox.SemanticTree.prototype.tableToMatrixOrVector_ = function(node) {
*/
cvox.SemanticTree.tableIsCases_ = function(table, prevNodes) {
return prevNodes.length > 0 &&
- cvox.SemanticTree.attrPred_('role', 'OPENFENCE')(
- prevNodes[prevNodes.length - 1]);
+ cvox.SemanticTree.attrPred_(
+ 'role', 'OPENFENCE')(prevNodes[prevNodes.length - 1]);
};
@@ -1790,10 +1793,10 @@ cvox.SemanticTree.prototype.tableToCases_ = function(table, openFence) {
* @private
*/
cvox.SemanticTree.tableIsMultiline_ = function(table) {
- return table.childNodes.every(
- function(row) {
- var length = row.childNodes.length;
- return length <= 1;});
+ return table.childNodes.every(function(row) {
+ var length = row.childNodes.length;
+ return length <= 1;
+ });
};
@@ -1821,7 +1824,7 @@ cvox.SemanticTree.rowToLine_ = function(row, role) {
role = role || cvox.SemanticAttr.Role.UNKNOWN;
if (cvox.SemanticTree.attrPred_('type', 'ROW')(row) &&
row.childNodes.length == 1 &&
- cvox.SemanticTree.attrPred_('type', 'CELL')(row.childNodes[0])) {
+ cvox.SemanticTree.attrPred_('type', 'CELL')(row.childNodes[0])) {
row.type = cvox.SemanticAttr.Type.LINE;
row.role = role;
row.childNodes = row.childNodes[0].childNodes;
@@ -1871,13 +1874,13 @@ cvox.SemanticTree.sliceNodes_ = function(nodes, pred, reverse) {
for (var i = 0, node; node = nodes[i]; i++) {
if (pred(node)) {
if (reverse) {
- return {head: nodes.slice(i + 1).reverse(),
- div: node,
- tail: head.reverse()};
+ return {
+ head: nodes.slice(i + 1).reverse(),
+ div: node,
+ tail: head.reverse()
+ };
}
- return {head: head,
- div: node,
- tail: nodes.slice(i + 1)};
+ return {head: head, div: node, tail: nodes.slice(i + 1)};
}
head.push(node);
}
@@ -1931,11 +1934,16 @@ cvox.SemanticTree.partitionNodes_ = function(nodes, pred) {
cvox.SemanticTree.attrPred_ = function(prop, attr) {
var getAttr = function(prop) {
switch (prop) {
- case 'type': return cvox.SemanticAttr.Type[attr];
- case 'role': return cvox.SemanticAttr.Role[attr];
- case 'font': return cvox.SemanticAttr.Font[attr];
+ case 'type':
+ return cvox.SemanticAttr.Type[attr];
+ case 'role':
+ return cvox.SemanticAttr.Role[attr];
+ case 'font':
+ return cvox.SemanticAttr.Font[attr];
}
};
- return function(node) {return node[prop] == getAttr(prop);};
+ return function(node) {
+ return node[prop] == getAttr(prop);
+ };
};

Powered by Google App Engine
This is Rietveld 408576698