mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-08 04:28:41 +00:00
Fix our parsing strategy so it is the same as (or very similar to) TeX's
Summary: Rewrote the parser to make this work, and added a bunch of tests to make sure this does work. In the process, refactored all of our functions into a separate file, functions.js. Added a bunch of comments to Parser.js. Also, update jasmine so we can make our tests better, and add a lint_blacklist.txt to not lint bad jasmine stuff. Fixes #10 Fixes #12 Test Plan: - Make sure all of the tests still work, and all of the new ones work also - Make sure huxley screenshots didn't change Reviewers: alpert Reviewed By: alpert Differential Revision: http://phabricator.khanacademy.org/D12989
This commit is contained in:
36
buildTree.js
36
buildTree.js
@@ -55,7 +55,7 @@ var getTypeOfGroup = function(group) {
|
||||
} else if (group.type === "sizing") {
|
||||
return getTypeOfGroup(group.value.value);
|
||||
} else if (group.type === "delimsizing") {
|
||||
return groupToType[group.value.type];
|
||||
return groupToType[group.value.delimType];
|
||||
} else {
|
||||
return groupToType[group.type];
|
||||
}
|
||||
@@ -125,8 +125,7 @@ var groupTypes = {
|
||||
|
||||
text: function(group, options, prev) {
|
||||
return makeSpan(["text mord", options.style.cls()],
|
||||
[buildGroup(group.value, options.reset())]
|
||||
);
|
||||
buildExpression(group.value.body, options.reset()));
|
||||
},
|
||||
|
||||
supsub: function(group, options, prev) {
|
||||
@@ -368,7 +367,7 @@ var groupTypes = {
|
||||
|
||||
llap: function(group, options, prev) {
|
||||
var inner = makeSpan(
|
||||
["inner"], [buildGroup(group.value, options.reset())]);
|
||||
["inner"], [buildGroup(group.value.body, options.reset())]);
|
||||
var fix = makeSpan(["fix"], []);
|
||||
return makeSpan(
|
||||
["llap", options.style.cls()], [inner, fix]);
|
||||
@@ -376,7 +375,7 @@ var groupTypes = {
|
||||
|
||||
rlap: function(group, options, prev) {
|
||||
var inner = makeSpan(
|
||||
["inner"], [buildGroup(group.value, options.reset())]);
|
||||
["inner"], [buildGroup(group.value.body, options.reset())]);
|
||||
var fix = makeSpan(["fix"], []);
|
||||
return makeSpan(
|
||||
["rlap", options.style.cls()], [inner, fix]);
|
||||
@@ -399,8 +398,8 @@ var groupTypes = {
|
||||
|
||||
namedfn: function(group, options, prev) {
|
||||
var chars = [];
|
||||
for (var i = 1; i < group.value.length; i++) {
|
||||
chars.push(buildCommon.mathrm(group.value[i], group.mode));
|
||||
for (var i = 1; i < group.value.body.length; i++) {
|
||||
chars.push(buildCommon.mathrm(group.value.body[i], group.mode));
|
||||
}
|
||||
|
||||
return makeSpan(["mop"], chars, options.getColor());
|
||||
@@ -431,7 +430,7 @@ var groupTypes = {
|
||||
},
|
||||
|
||||
sqrt: function(group, options, prev) {
|
||||
var innerGroup = buildGroup(group.value.result,
|
||||
var innerGroup = buildGroup(group.value.body,
|
||||
options.withStyle(options.style.cramp()));
|
||||
|
||||
var fontSizer = buildCommon.makeFontSizer(
|
||||
@@ -493,7 +492,7 @@ var groupTypes = {
|
||||
},
|
||||
|
||||
overline: function(group, options, prev) {
|
||||
var innerGroup = buildGroup(group.value.result,
|
||||
var innerGroup = buildGroup(group.value.body,
|
||||
options.withStyle(options.style.cramp()));
|
||||
|
||||
var fontSizer = buildCommon.makeFontSizer(options, innerGroup.maxFontSize);
|
||||
@@ -518,12 +517,13 @@ var groupTypes = {
|
||||
},
|
||||
|
||||
sizing: function(group, options, prev) {
|
||||
var inner = buildGroup(group.value.value,
|
||||
var inner = buildExpression(group.value.value,
|
||||
options.withSize(group.value.size), prev);
|
||||
|
||||
var span = makeSpan([getTypeOfGroup(group.value.value)],
|
||||
[makeSpan(["sizing", "reset-" + options.size, group.value.size],
|
||||
[inner])]);
|
||||
var span = makeSpan(["mord"],
|
||||
[makeSpan(["sizing", "reset-" + options.size, group.value.size,
|
||||
options.style.cls()],
|
||||
inner)]);
|
||||
|
||||
var sizeToFontSize = {
|
||||
"size1": 0.5,
|
||||
@@ -548,11 +548,13 @@ var groupTypes = {
|
||||
var delim = group.value.value;
|
||||
|
||||
if (delim === ".") {
|
||||
return buildCommon.makeSpan([groupToType[group.value.type]]);
|
||||
return makeSpan([groupToType[group.value.delimType]]);
|
||||
}
|
||||
|
||||
return delimiter.sizedDelim(
|
||||
delim, group.value.size, options, group.mode);
|
||||
return makeSpan(
|
||||
[groupToType[group.value.delimType]],
|
||||
[delimiter.sizedDelim(
|
||||
delim, group.value.size, options, group.mode)]);
|
||||
},
|
||||
|
||||
leftright: function(group, options, prev) {
|
||||
@@ -594,7 +596,7 @@ var groupTypes = {
|
||||
|
||||
rule: function(group, options, prev) {
|
||||
// Make an empty span for the rule
|
||||
var rule = makeSpan(["mord", "rule"], []);
|
||||
var rule = makeSpan(["mord", "rule"], [], options.getColor());
|
||||
|
||||
var width = group.value.width.number;
|
||||
if (group.value.width.unit === "ex") {
|
||||
|
Reference in New Issue
Block a user