From 9d3cdf694c33ee008af9508481d316d78cce329a Mon Sep 17 00:00:00 2001 From: Eddie Kohler Date: Mon, 28 Nov 2016 12:55:54 -0500 Subject: [PATCH] Fix spacing between groups to match TeX spacing (#567) * Internal: Pass full `options` objects to makeSpan/makeSymbol. Not just the current color. This will facilitate applying options to built nodes in a standardized way, rather than changing all callsites. * Add style switching test: text and scriptstyle in the same group. * Apply style-specific spacing using different CSS coding. Specifically, infer style from a class on the *current* element, rather than the parent element. Use "mtight" class to denote elements with tight spacing (scriptstyle or scriptscriptstyle). Apply that class automatically based on options. * Fix #533, #534, #541. - #534: Implement getTypeOfGroup for font groups. - #533, #541: Improve the ways spaces are applied to lists. Since CSS adjacency implements mathematical spacing, it's incorrect to introduce "convenience spans" for spaces and display changes into the generated HTML -- those spans break adjacency. Apply display changes directly, and shift space spans into adjacent atoms. Requires updates to two screenshotter tests, LimitControls and SupSubLeftAlignReset. The new results for these tests are closer to TeX output than the old results. Also requires updates to Jasmine tests, since those assumed output structures that have changed. * Fix #136: Size commands generate fragments, not spans. This is so the size commands don't hide the types of their enclosed atoms. Addresses #136. This slightly changes the vertical position of the Sizing test. Not sure the vertical position matters, so change the test. --- src/Style.js | 7 + src/buildCommon.js | 68 +++-- src/buildHTML.js | 232 ++++++++++++------ src/delimiter.js | 15 +- src/domTree.js | 26 +- static/katex.less | 189 +++++++------- test/katex-spec.js | 9 +- .../images/BoldSpacing-chrome.png | Bin 0 -> 7022 bytes .../images/BoldSpacing-firefox.png | Bin 0 -> 7040 bytes .../images/ColorSpacing-chrome.png | Bin 0 -> 8730 bytes .../images/ColorSpacing-firefox.png | Bin 0 -> 8709 bytes .../images/LimitControls-chrome.png | Bin 14363 -> 14357 bytes .../images/LimitControls-firefox.png | Bin 13896 -> 13897 bytes .../images/NegativeSpaceBetweenRel-chrome.png | Bin 0 -> 4417 bytes .../NegativeSpaceBetweenRel-firefox.png | Bin 0 -> 4403 bytes test/screenshotter/images/Sizing-chrome.png | Bin 7175 -> 7175 bytes test/screenshotter/images/Sizing-firefox.png | Bin 7166 -> 7166 bytes .../images/StyleSwitching-chrome.png | Bin 0 -> 6549 bytes .../images/StyleSwitching-firefox.png | Bin 0 -> 5500 bytes .../images/SupSubLeftAlignReset-chrome.png | Bin 10135 -> 10152 bytes .../images/SupSubLeftAlignReset-firefox.png | Bin 8921 -> 8918 bytes test/screenshotter/ss_data.yaml | 4 + 22 files changed, 340 insertions(+), 210 deletions(-) create mode 100644 test/screenshotter/images/BoldSpacing-chrome.png create mode 100644 test/screenshotter/images/BoldSpacing-firefox.png create mode 100644 test/screenshotter/images/ColorSpacing-chrome.png create mode 100644 test/screenshotter/images/ColorSpacing-firefox.png create mode 100644 test/screenshotter/images/NegativeSpaceBetweenRel-chrome.png create mode 100644 test/screenshotter/images/NegativeSpaceBetweenRel-firefox.png create mode 100644 test/screenshotter/images/StyleSwitching-chrome.png create mode 100644 test/screenshotter/images/StyleSwitching-firefox.png diff --git a/src/Style.js b/src/Style.js index 96cf50d6..5cf2e6f5 100644 --- a/src/Style.js +++ b/src/Style.js @@ -87,6 +87,13 @@ Style.prototype.reset = function() { return resetNames[this.size]; }; +/** + * Return if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ +Style.prototype.isTight = function() { + return this.size >= 2; +}; + // IDs of the different styles var D = 0; var Dc = 1; diff --git a/src/buildCommon.js b/src/buildCommon.js index d793b5b3..c4ab8ba6 100644 --- a/src/buildCommon.js +++ b/src/buildCommon.js @@ -34,14 +34,16 @@ var mainitLetters = [ * Makes a symbolNode after translation via the list of symbols in symbols.js. * Correctly pulls out metrics for the character, and optionally takes a list of * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan */ -var makeSymbol = function(value, style, mode, color, classes) { +var makeSymbol = function(value, fontFamily, mode, options, classes) { // Replace the value with its replaced value from symbol.js if (symbols[mode][value] && symbols[mode][value].replace) { value = symbols[mode][value].replace; } - var metrics = fontMetrics.getCharacterMetrics(value, style); + var metrics = fontMetrics.getCharacterMetrics(value, fontFamily); var symbolNode; if (metrics) { @@ -52,12 +54,17 @@ var makeSymbol = function(value, style, mode, color, classes) { // TODO(emily): Figure out a good way to only print this in development typeof console !== "undefined" && console.warn( "No character metrics for '" + value + "' in style '" + - style + "'"); + fontFamily + "'"); symbolNode = new domTree.symbolNode(value, 0, 0, 0, 0, classes); } - if (color) { - symbolNode.style.color = color; + if (options) { + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + if (options.getColor()) { + symbolNode.style.color = options.getColor(); + } } return symbolNode; @@ -67,7 +74,7 @@ var makeSymbol = function(value, style, mode, color, classes) { * Makes a symbol in Main-Regular or AMS-Regular. * Used for rel, bin, open, close, inner, and punct. */ -var mathsym = function(value, mode, color, classes) { +var mathsym = function(value, mode, options, classes) { // Decide what font to render the symbol in by its entry in the symbols // table. // Have a special case for when the value = \ because the \ is used as a @@ -75,22 +82,22 @@ var mathsym = function(value, mode, color, classes) { // text ordinal and is therefore not present as a symbol in the symbols // table for text if (value === "\\" || symbols[mode][value].font === "main") { - return makeSymbol(value, "Main-Regular", mode, color, classes); + return makeSymbol(value, "Main-Regular", mode, options, classes); } else { return makeSymbol( - value, "AMS-Regular", mode, color, classes.concat(["amsrm"])); + value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); } }; /** * Makes a symbol in the default font for mathords and textords. */ -var mathDefault = function(value, mode, color, classes, type) { +var mathDefault = function(value, mode, options, classes, type) { if (type === "mathord") { - return mathit(value, mode, color, classes); + return mathit(value, mode, options, classes); } else if (type === "textord") { return makeSymbol( - value, "Main-Regular", mode, color, classes.concat(["mathrm"])); + value, "Main-Regular", mode, options, classes.concat(["mathrm"])); } else { throw new Error("unexpected type: " + type + " in mathDefault"); } @@ -99,17 +106,17 @@ var mathDefault = function(value, mode, color, classes, type) { /** * Makes a symbol in the italic math font. */ -var mathit = function(value, mode, color, classes) { +var mathit = function(value, mode, options, classes) { if (/[0-9]/.test(value.charAt(0)) || // glyphs for \imath and \jmath do not exist in Math-Italic so we // need to use Main-Italic instead utils.contains(mainitLetters, value) || utils.contains(greekCapitals, value)) { return makeSymbol( - value, "Main-Italic", mode, color, classes.concat(["mainit"])); + value, "Main-Italic", mode, options, classes.concat(["mainit"])); } else { return makeSymbol( - value, "Math-Italic", mode, color, classes.concat(["mathit"])); + value, "Math-Italic", mode, options, classes.concat(["mathit"])); } }; @@ -124,23 +131,22 @@ var makeOrd = function(group, options, type) { } var classes = ["mord"]; - var color = options.getColor(); var font = options.font; if (font) { if (font === "mathit" || utils.contains(mainitLetters, value)) { - return mathit(value, mode, color, classes); + return mathit(value, mode, options, classes); } else { var fontName = fontMap[font].fontName; if (fontMetrics.getCharacterMetrics(value, fontName)) { return makeSymbol( - value, fontName, mode, color, classes.concat([font])); + value, fontName, mode, options, classes.concat([font])); } else { - return mathDefault(value, mode, color, classes, type); + return mathDefault(value, mode, options, classes, type); } } } else { - return mathDefault(value, mode, color, classes, type); + return mathDefault(value, mode, options, classes, type); } }; @@ -173,20 +179,29 @@ var sizeElementFromChildren = function(elem) { }; /** - * Makes a span with the given list of classes, list of children, and color. + * Makes a span with the given list of classes, list of children, and options. + * + * TODO: Ensure that `options` is always provided (currently some call sites + * don't pass it). */ -var makeSpan = function(classes, children, color) { - var span = new domTree.span(classes, children); +var makeSpan = function(classes, children, options) { + var span = new domTree.span(classes, children, options); sizeElementFromChildren(span); - if (color) { - span.style.color = color; - } - return span; }; +/** + * Prepends the given children to the given span, updating height, depth, and + * maxFontSize. + */ +var prependChildren = function(span, children) { + span.children = children.concat(span.children); + + sizeElementFromChildren(span); +}; + /** * Makes a document fragment with the given list of children. */ @@ -447,6 +462,7 @@ module.exports = { makeFragment: makeFragment, makeVList: makeVList, makeOrd: makeOrd, + prependChildren: prependChildren, sizingMultiplier: sizingMultiplier, spacingFunctions: spacingFunctions, }; diff --git a/src/buildHTML.js b/src/buildHTML.js index 9bc8c3a7..61ec1b7c 100644 --- a/src/buildHTML.js +++ b/src/buildHTML.js @@ -17,18 +17,57 @@ var utils = require("./utils"); var makeSpan = buildCommon.makeSpan; +var isSpace = function(node) { + return node instanceof domTree.span && node.classes[0] === "mspace"; +}; + /** * Take a list of nodes, build them in order, and return a list of the built * nodes. This function handles the `prev` node correctly, and passes the - * previous element from the list as the prev of the next element. + * previous element from the list as the prev of the next element, ignoring + * spaces. documentFragments are flattened into their contents, so the + * returned list contains no fragments. */ var buildExpression = function(expression, options, prev) { + // Parse expressions into `groups`. var groups = []; for (var i = 0; i < expression.length; i++) { var group = expression[i]; - groups.push(buildGroup(group, options, prev)); - prev = group; + var output = buildGroup(group, options, prev); + if (output instanceof domTree.documentFragment) { + Array.prototype.push.apply(groups, output.children); + } else { + groups.push(output); + } + if (!isSpace(output)) { + prev = group; + } } + // At this point `groups` consists entirely of `symbolNode`s and `span`s. + + // Explicit spaces (e.g., \;, \,) should be ignored with respect to atom + // spacing (e.g., "add thick space between mord and mrel"). Since CSS + // adjacency rules implement atom spacing, spaces should be invisible to + // CSS. So we splice them out of `groups` and into the atoms themselves. + var spaces = null; + for (i = 0; i < groups.length; i++) { + if (isSpace(groups[i])) { + spaces = spaces || []; + spaces.push(groups[i]); + groups.splice(i, 1); + i--; + } else if (spaces) { + if (groups[i] instanceof domTree.symbolNode) { + groups[i] = makeSpan(groups[i].classes, [groups[i]]); + } + buildCommon.prependChildren(groups[i], spaces); + spaces = null; + } + } + if (spaces) { + Array.prototype.push.apply(groups, spaces); + } + return groups; }; @@ -80,12 +119,13 @@ var getTypeOfGroup = function(group) { return getTypeOfGroup(group.value.base); } else if (group.type === "llap" || group.type === "rlap") { return getTypeOfGroup(group.value); - } else if (group.type === "color") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "sizing") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "styling") { - return getTypeOfGroup(group.value.value); + } else if (group.type === "color" || group.type === "sizing" + || group.type === "styling") { + // Return type of rightmost element of group. + var atoms = group.value.value; + return getTypeOfGroup(atoms[atoms.length - 1]); + } else if (group.type === "font") { + return getTypeOfGroup(group.value.body); } else if (group.type === "delimsizing") { return groupToType[group.value.delimType]; } else { @@ -203,44 +243,46 @@ groupTypes.bin = function(group, options, prev) { } return buildCommon.mathsym( - group.value, group.mode, options.getColor(), [className]); + group.value, group.mode, options, [className]); }; groupTypes.rel = function(group, options, prev) { return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mrel"]); + group.value, group.mode, options, ["mrel"]); }; groupTypes.open = function(group, options, prev) { return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mopen"]); + group.value, group.mode, options, ["mopen"]); }; groupTypes.close = function(group, options, prev) { return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mclose"]); + group.value, group.mode, options, ["mclose"]); }; groupTypes.inner = function(group, options, prev) { return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["minner"]); + group.value, group.mode, options, ["minner"]); }; groupTypes.punct = function(group, options, prev) { return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mpunct"]); + group.value, group.mode, options, ["mpunct"]); }; groupTypes.ordgroup = function(group, options, prev) { return makeSpan( ["mord", options.style.cls()], - buildExpression(group.value, options.reset()) + buildExpression(group.value, options.reset()), + options ); }; groupTypes.text = function(group, options, prev) { - return makeSpan(["text", "mord", options.style.cls()], - buildExpression(group.value.body, options.reset())); + return makeSpan(["mord", "text", options.style.cls()], + buildExpression(group.value.body, options.reset()), + options); }; groupTypes.color = function(group, options, prev) { @@ -274,15 +316,20 @@ groupTypes.supsub = function(group, options, prev) { var sub; var style = options.style; + var newOptions; if (group.value.sup) { - sup = buildGroup(group.value.sup, options.withStyle(style.sup())); - supmid = makeSpan([style.reset(), style.sup().cls()], [sup]); + newOptions = options.withStyle(style.sup()); + sup = buildGroup(group.value.sup, newOptions); + supmid = makeSpan([style.reset(), style.sup().cls()], + [sup], newOptions); } if (group.value.sub) { - sub = buildGroup(group.value.sub, options.withStyle(style.sub())); - submid = makeSpan([style.reset(), style.sub().cls()], [sub]); + newOptions = options.withStyle(style.sub()); + sub = buildGroup(group.value.sub, newOptions); + submid = makeSpan([style.reset(), style.sub().cls()], + [sub], newOptions); } // Rule 18a @@ -376,7 +423,8 @@ groupTypes.supsub = function(group, options, prev) { // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align return makeSpan([getTypeOfGroup(group.value.base)], - [base, makeSpan(["msupsub"], [supsub])]); + [base, makeSpan(["msupsub"], [supsub])], + options); }; groupTypes.genfrac = function(group, options, prev) { @@ -392,12 +440,17 @@ groupTypes.genfrac = function(group, options, prev) { var nstyle = style.fracNum(); var dstyle = style.fracDen(); + var newOptions; - var numer = buildGroup(group.value.numer, options.withStyle(nstyle)); - var numerreset = makeSpan([style.reset(), nstyle.cls()], [numer]); + newOptions = options.withStyle(nstyle); + var numer = buildGroup(group.value.numer, newOptions); + var numerreset = makeSpan([style.reset(), nstyle.cls()], + [numer], newOptions); - var denom = buildGroup(group.value.denom, options.withStyle(dstyle)); - var denomreset = makeSpan([style.reset(), dstyle.cls()], [denom]); + newOptions = options.withStyle(dstyle); + var denom = buildGroup(group.value.denom, newOptions); + var denomreset = makeSpan([style.reset(), dstyle.cls()], + [denom], newOptions); var ruleWidth; if (group.value.hasBarLine) { @@ -510,7 +563,7 @@ groupTypes.genfrac = function(group, options, prev) { return makeSpan( ["mord", options.style.reset(), style.cls()], [leftDelim, makeSpan(["mfrac"], [frac]), rightDelim], - options.getColor()); + options); }; groupTypes.array = function(group, options, prev) { @@ -674,7 +727,7 @@ groupTypes.array = function(group, options, prev) { } } body = makeSpan(["mtable"], cols); - return makeSpan(["mord"], [body], options.getColor()); + return makeSpan(["mord"], [body], options); }; groupTypes.spacing = function(group, options, prev) { @@ -684,14 +737,14 @@ groupTypes.spacing = function(group, options, prev) { // things has an entry in the symbols table, so these will be turned // into appropriate outputs. return makeSpan( - ["mord", "mspace"], + ["mspace"], [buildCommon.mathsym(group.value, group.mode)] ); } else { // Other kinds of spaces are of arbitrary width. We use CSS to // generate these. return makeSpan( - ["mord", "mspace", + ["mspace", buildCommon.spacingFunctions[group.value].className]); } }; @@ -701,7 +754,7 @@ groupTypes.llap = function(group, options, prev) { ["inner"], [buildGroup(group.value.body, options.reset())]); var fix = makeSpan(["fix"], []); return makeSpan( - ["llap", options.style.cls()], [inner, fix]); + ["llap", options.style.cls()], [inner, fix], options); }; groupTypes.rlap = function(group, options, prev) { @@ -709,7 +762,7 @@ groupTypes.rlap = function(group, options, prev) { ["inner"], [buildGroup(group.value.body, options.reset())]); var fix = makeSpan(["fix"], []); return makeSpan( - ["rlap", options.style.cls()], [inner, fix]); + ["rlap", options.style.cls()], [inner, fix], options); }; groupTypes.op = function(group, options, prev) { @@ -750,8 +803,8 @@ groupTypes.op = function(group, options, prev) { // If this is a symbol, create the symbol. var fontName = large ? "Size2-Regular" : "Size1-Regular"; base = buildCommon.makeSymbol( - group.value.body, fontName, "math", options.getColor(), - ["op-symbol", large ? "large-op" : "small-op", "mop"]); + group.value.body, fontName, "math", options, + ["mop", "op-symbol", large ? "large-op" : "small-op"]); // Shift the symbol so its center lies on the axis (rule 13). It // appears that our fonts have the centers of the symbols already @@ -772,7 +825,7 @@ groupTypes.op = function(group, options, prev) { for (var i = 1; i < group.value.body.length; i++) { output.push(buildCommon.mathsym(group.value.body[i], group.mode)); } - base = makeSpan(["mop"], output, options.getColor()); + base = makeSpan(["mop"], output, options); } if (hasLimits) { @@ -784,11 +837,14 @@ groupTypes.op = function(group, options, prev) { var supKern; var submid; var subKern; + var newOptions; // We manually have to handle the superscripts and subscripts. This, // aside from the kern calculations, is copied from supsub. if (supGroup) { - var sup = buildGroup(supGroup, options.withStyle(style.sup())); - supmid = makeSpan([style.reset(), style.sup().cls()], [sup]); + newOptions = options.withStyle(style.sup()); + var sup = buildGroup(supGroup, newOptions); + supmid = makeSpan([style.reset(), style.sup().cls()], + [sup], newOptions); supKern = Math.max( fontMetrics.metrics.bigOpSpacing1, @@ -796,8 +852,10 @@ groupTypes.op = function(group, options, prev) { } if (subGroup) { - var sub = buildGroup(subGroup, options.withStyle(style.sub())); - submid = makeSpan([style.reset(), style.sub().cls()], [sub]); + newOptions = options.withStyle(style.sub()); + var sub = buildGroup(subGroup, newOptions); + submid = makeSpan([style.reset(), style.sub().cls()], + [sub], newOptions); subKern = Math.max( fontMetrics.metrics.bigOpSpacing2, @@ -862,7 +920,7 @@ groupTypes.op = function(group, options, prev) { finalGroup.children[2].style.marginLeft = slant + "em"; } - return makeSpan(["mop", "op-limits"], [finalGroup]); + return makeSpan(["mop", "op-limits"], [finalGroup], options); } else { if (group.value.symbol) { base.style.top = baseShift + "em"; @@ -877,26 +935,26 @@ groupTypes.katex = function(group, options, prev) { // good, but the offsets for the T, E, and X were taken from the // definition of \TeX in TeX (see TeXbook pg. 356) var k = makeSpan( - ["k"], [buildCommon.mathsym("K", group.mode)]); + ["k"], [buildCommon.mathsym("K", group.mode)], options); var a = makeSpan( - ["a"], [buildCommon.mathsym("A", group.mode)]); + ["a"], [buildCommon.mathsym("A", group.mode)], options); a.height = (a.height + 0.2) * 0.75; a.depth = (a.height - 0.2) * 0.75; var t = makeSpan( - ["t"], [buildCommon.mathsym("T", group.mode)]); + ["t"], [buildCommon.mathsym("T", group.mode)], options); var e = makeSpan( - ["e"], [buildCommon.mathsym("E", group.mode)]); + ["e"], [buildCommon.mathsym("E", group.mode)], options); e.height = (e.height - 0.2155); e.depth = (e.depth + 0.2155); var x = makeSpan( - ["x"], [buildCommon.mathsym("X", group.mode)]); + ["x"], [buildCommon.mathsym("X", group.mode)], options); return makeSpan( - ["katex-logo", "mord"], [k, a, t, e, x], options.getColor()); + ["mord", "katex-logo"], [k, a, t, e, x], options); }; groupTypes.overline = function(group, options, prev) { @@ -924,7 +982,7 @@ groupTypes.overline = function(group, options, prev) { {type: "kern", size: ruleWidth}, ], "firstBaseline", null, options); - return makeSpan(["overline", "mord"], [vlist], options.getColor()); + return makeSpan(["mord", "overline"], [vlist], options); }; groupTypes.underline = function(group, options, prev) { @@ -950,7 +1008,7 @@ groupTypes.underline = function(group, options, prev) { {type: "elem", elem: innerGroup}, ], "top", innerGroup.height, options); - return makeSpan(["underline", "mord"], [vlist], options.getColor()); + return makeSpan(["mord", "underline"], [vlist], options); }; groupTypes.sqrt = function(group, options, prev) { @@ -966,7 +1024,7 @@ groupTypes.sqrt = function(group, options, prev) { var line = makeSpan( [style.reset(), Style.TEXT.cls(), "sqrt-line"], [], - options.getColor()); + options); line.height = ruleWidth; line.maxFontSize = 1.0; @@ -985,7 +1043,7 @@ groupTypes.sqrt = function(group, options, prev) { var delim = makeSpan(["sqrt-sign"], [ delimiter.customSizedDelim("\\surd", minDelimiterHeight, false, options, group.mode)], - options.getColor()); + options); var delimDepth = (delim.height + delim.depth) - ruleWidth; @@ -1019,17 +1077,17 @@ groupTypes.sqrt = function(group, options, prev) { } if (!group.value.index) { - return makeSpan(["sqrt", "mord"], [delim, body]); + return makeSpan(["mord", "sqrt"], [delim, body], options); } else { // Handle the optional root index // The index is always in scriptscript style - var root = buildGroup( - group.value.index, - options.withStyle(Style.SCRIPTSCRIPT)); + var newOptions = options.withStyle(Style.SCRIPTSCRIPT); + var root = buildGroup(group.value.index, newOptions); var rootWrap = makeSpan( [style.reset(), Style.SCRIPTSCRIPT.cls()], - [root]); + [root], + newOptions); // Figure out the height and depth of the inner part var innerRootHeight = Math.max(delim.height, body.height); @@ -1047,7 +1105,8 @@ groupTypes.sqrt = function(group, options, prev) { // kerning var rootVListWrap = makeSpan(["root"], [rootVList]); - return makeSpan(["sqrt", "mord"], [rootVListWrap, delim, body]); + return makeSpan(["mord", "sqrt"], + [rootVListWrap, delim, body], options); } }; @@ -1058,17 +1117,28 @@ groupTypes.sizing = function(group, options, prev) { var inner = buildExpression(group.value.value, options.withSize(group.value.size), prev); + // Compute the correct maxFontSize. var style = options.style; - var span = makeSpan(["mord"], - [makeSpan(["sizing", "reset-" + options.size, group.value.size, - style.cls()], - inner)]); - - // Calculate the correct maxFontSize manually var fontSize = buildCommon.sizingMultiplier[group.value.size]; - span.maxFontSize = fontSize * style.sizeMultiplier; + fontSize = fontSize * style.sizeMultiplier; - return span; + // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + for (var i = 0; i < inner.length; i++) { + var pos = utils.indexOf(inner[i].classes, "sizing"); + if (pos < 0) { + inner[i].classes.push("sizing", "reset-" + options.size, + group.value.size, style.cls()); + inner[i].maxFontSize = fontSize; + } else if (inner[i].classes[pos + 1] === "reset-" + group.value.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-" + options.size; + } + } + + return buildCommon.makeFragment(inner); }; groupTypes.styling = function(group, options, prev) { @@ -1083,12 +1153,25 @@ groupTypes.styling = function(group, options, prev) { }; var newStyle = styleMap[group.value.style]; + var newOptions = options.withStyle(newStyle); // Build the inner expression in the new style. var inner = buildExpression( - group.value.value, options.withStyle(newStyle), prev); + group.value.value, newOptions, prev); - return makeSpan([options.style.reset(), newStyle.cls()], inner); + // Add style-resetting classes to the inner list. Handle nested changes. + for (var i = 0; i < inner.length; i++) { + var pos = utils.indexOf(inner[i].classes, newStyle.reset()); + if (pos < 0) { + inner[i].classes.push(options.style.reset(), newStyle.cls()); + } else { + // This is a nested style change, as `\textstyle a\scriptstyle b`. + // Only override the old style (the reset class). + inner[i].classes[pos] = options.style.reset(); + } + } + + return new buildCommon.makeFragment(inner); }; groupTypes.font = function(group, options, prev) { @@ -1109,7 +1192,8 @@ groupTypes.delimsizing = function(group, options, prev) { return makeSpan( [groupToType[group.value.delimType]], [delimiter.sizedDelim( - delim, group.value.size, options, group.mode)]); + delim, group.value.size, options, group.mode)], + options); }; groupTypes.leftright = function(group, options, prev) { @@ -1160,12 +1244,12 @@ groupTypes.leftright = function(group, options, prev) { inner.push(rightDelim); return makeSpan( - ["minner", style.cls()], inner, options.getColor()); + ["minner", style.cls()], inner, options); }; groupTypes.rule = function(group, options, prev) { // Make an empty span for the rule - var rule = makeSpan(["mord", "rule"], [], options.getColor()); + var rule = makeSpan(["mord", "rule"], [], options); var style = options.style; // Calculate the shift, width, and height of the rule, and account for units @@ -1208,7 +1292,7 @@ groupTypes.rule = function(group, options, prev) { groupTypes.kern = function(group, options, prev) { // Make an empty span for the rule - var rule = makeSpan(["mord", "rule"], [], options.getColor()); + var rule = makeSpan(["mord", "rule"], [], options); var style = options.style; var dimension = 0; @@ -1290,7 +1374,7 @@ groupTypes.accent = function(group, options, prev) { // Build the accent var accent = buildCommon.makeSymbol( - group.value.accent, "Main-Regular", "math", options.getColor()); + group.value.accent, "Main-Regular", "math", options); // Remove the italic correction of the accent, because it only serves to // shift the accent over to a place we don't want. accent.italic = 0; @@ -1315,7 +1399,7 @@ groupTypes.accent = function(group, options, prev) { // we shift it to the right by 1*skew. accentBody.children[1].style.marginLeft = 2 * skew + "em"; - var accentWrap = makeSpan(["mord", "accent"], [accentBody]); + var accentWrap = makeSpan(["mord", "accent"], [accentBody], options); if (supsubGroup) { // Here, we replace the "base" child of the supsub with our newly @@ -1400,7 +1484,7 @@ var buildHTML = function(tree, options) { // Build the expression contained in the tree var expression = buildExpression(tree, options); - var body = makeSpan(["base", options.style.cls()], expression); + var body = makeSpan(["base", options.style.cls()], expression, options); // Add struts, which ensure that the top of the HTML element falls at the // height of the expression, and the bottom of the HTML element falls at the diff --git a/src/delimiter.js b/src/delimiter.js index b8af478a..3b626210 100644 --- a/src/delimiter.js +++ b/src/delimiter.js @@ -47,8 +47,9 @@ var getMetrics = function(symbol, font) { /** * Builds a symbol in the given font size (note size is an integer) */ -var mathrmSize = function(value, size, mode) { - return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode); +var mathrmSize = function(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", + mode, options); }; /** @@ -57,7 +58,7 @@ var mathrmSize = function(value, size, mode) { */ var styleWrap = function(delim, toStyle, options) { var span = makeSpan( - ["style-wrap", options.style.reset(), toStyle.cls()], [delim]); + ["style-wrap", options.style.reset(), toStyle.cls()], [delim], options); var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier; @@ -74,7 +75,7 @@ var styleWrap = function(delim, toStyle, options) { * scriptscriptstyle. */ var makeSmallDelim = function(delim, style, center, options, mode) { - var text = buildCommon.makeSymbol(delim, "Main-Regular", mode); + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); var span = styleWrap(text, style, options); @@ -96,11 +97,11 @@ var makeSmallDelim = function(delim, style, center, options, mode) { * Size3, or Size4 fonts. It is always rendered in textstyle. */ var makeLargeDelim = function(delim, size, center, options, mode) { - var inner = mathrmSize(delim, size, mode); + var inner = mathrmSize(delim, size, mode, options); var span = styleWrap( makeSpan(["delimsizing", "size" + size], - [inner], options.getColor()), + [inner], options), Style.TEXT, options); if (center) { @@ -318,7 +319,7 @@ var makeStackedDelim = function(delim, heightTotal, center, options, mode) { var inner = buildCommon.makeVList(inners, "bottom", depth, options); return styleWrap( - makeSpan(["delimsizing", "mult"], [inner], options.getColor()), + makeSpan(["delimsizing", "mult"], [inner], options), Style.TEXT, options); }; diff --git a/src/domTree.js b/src/domTree.js index 46b515ea..0517b812 100644 --- a/src/domTree.js +++ b/src/domTree.js @@ -30,14 +30,22 @@ var createClass = function(classes) { * an inline style. It also contains information about its height, depth, and * maxFontSize. */ -function span(classes, children, height, depth, maxFontSize, style) { +function span(classes, children, options) { this.classes = classes || []; this.children = children || []; - this.height = height || 0; - this.depth = depth || 0; - this.maxFontSize = maxFontSize || 0; - this.style = style || {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; this.attributes = {}; + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + if (options.getColor()) { + this.style.color = options.getColor(); + } + } } /** @@ -133,11 +141,11 @@ span.prototype.toMarkup = function() { * contains children and doesn't have any HTML properties. It also keeps track * of a height, depth, and maxFontSize. */ -function documentFragment(children, height, depth, maxFontSize) { +function documentFragment(children) { this.children = children || []; - this.height = height || 0; - this.depth = depth || 0; - this.maxFontSize = maxFontSize || 0; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; } /** diff --git a/static/katex.less b/static/katex.less index 8b11048a..7b8c293a 100644 --- a/static/katex.less +++ b/static/katex.less @@ -101,111 +101,120 @@ @mediumspace: 0.22222em; @thickspace: 0.27778em; - .textstyle { - > .mord { - & + .mord {} - & + .mop { margin-left: @thinspace; } - & + .mbin { margin-left: @mediumspace; } - & + .mrel { margin-left: @thickspace; } - & + .mopen {} - & + .mclose {} - & + .mpunct {} - & + .minner { margin-left: @thinspace; } - } - - > .mop { - & + .mord { margin-left: @thinspace; } - & + .mop { margin-left: @thinspace; } - & + .mbin {} - & + .mrel { margin-left: @thickspace; } - & + .mopen {} - & + .mclose {} - & + .mpunct {} - & + .minner { margin-left: @thinspace; } - } - - > .mbin { - & + .mord { margin-left: @mediumspace; } - & + .mop { margin-left: @mediumspace; } - & + .mbin {} - & + .mrel {} - & + .mopen { margin-left: @mediumspace; } - & + .mclose {} - & + .mpunct {} - & + .minner { margin-left: @mediumspace; } - } - - > .mrel { - & + .mord { margin-left: @thickspace; } - & + .mop { margin-left: @thickspace; } - & + .mbin {} - & + .mrel {} - & + .mopen { margin-left: @thickspace; } - & + .mclose {} - & + .mpunct {} - & + .minner { margin-left: @thickspace; } - } - - > .mopen { - & + .mord {} - & + .mop {} - & + .mbin {} - & + .mrel {} - & + .mopen {} - & + .mclose {} - & + .mpunct {} - & + .minner {} - } - - > .mclose { - & + .mord {} - & + .mop { margin-left: @thinspace; } - & + .mbin { margin-left: @mediumspace; } - & + .mrel { margin-left: @thickspace; } - & + .mopen {} - & + .mclose {} - & + .mpunct {} - & + .minner { margin-left: @thinspace; } - } - - > .mpunct { - & + .mord { margin-left: @thinspace; } - & + .mop { margin-left: @thinspace; } - & + .mbin {} - & + .mrel { margin-left: @thinspace; } - & + .mopen { margin-left: @thinspace; } - & + .mclose { margin-left: @thinspace; } - & + .mpunct { margin-left: @thinspace; } - & + .minner { margin-left: @thinspace; } - } - - > .minner { - & + .mord { margin-left: @thinspace; } - & + .mop { margin-left: @thinspace; } - & + .mbin { margin-left: @mediumspace; } - & + .mrel { margin-left: @thickspace; } - & + .mopen { margin-left: @thinspace; } - & + .mclose {} - & + .mpunct { margin-left: @thinspace; } - & + .minner { margin-left: @thinspace; } - } - } - + // These spacings apply in textstyle and displaystyle. .mord { + & + .mord {} & + .mop { margin-left: @thinspace; } + & + .mbin { margin-left: @mediumspace; } + & + .mrel { margin-left: @thickspace; } + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thinspace; } } .mop { & + .mord { margin-left: @thinspace; } & + .mop { margin-left: @thinspace; } + & + .mbin {} + & + .mrel { margin-left: @thickspace; } + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thinspace; } + } + + .mbin { + & + .mord { margin-left: @mediumspace; } + & + .mop { margin-left: @mediumspace; } + & + .mbin {} + & + .mrel {} + & + .mopen { margin-left: @mediumspace; } + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @mediumspace; } + } + + .mrel { + & + .mord { margin-left: @thickspace; } + & + .mop { margin-left: @thickspace; } + & + .mbin {} + & + .mrel {} + & + .mopen { margin-left: @thickspace; } + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thickspace; } + } + + .mopen { + & + .mord {} + & + .mop {} + & + .mbin {} + & + .mrel {} + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner {} } .mclose { + & + .mord {} & + .mop { margin-left: @thinspace; } + & + .mbin { margin-left: @mediumspace; } + & + .mrel { margin-left: @thickspace; } + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thinspace; } + } + + .mpunct { + & + .mord { margin-left: @thinspace; } + & + .mop { margin-left: @thinspace; } + & + .mbin {} + & + .mrel { margin-left: @thinspace; } + & + .mopen { margin-left: @thinspace; } + & + .mclose { margin-left: @thinspace; } + & + .mpunct { margin-left: @thinspace; } + & + .minner { margin-left: @thinspace; } } .minner { + & + .mord { margin-left: @thinspace; } & + .mop { margin-left: @thinspace; } + & + .mbin { margin-left: @mediumspace; } + & + .mrel { margin-left: @thickspace; } + & + .mopen { margin-left: @thinspace; } + & + .mclose {} + & + .mpunct { margin-left: @thinspace; } + & + .minner { margin-left: @thinspace; } + } + + // These tighter spacings apply in scriptstyle and scriptscriptstyle. + .mord.mtight { margin-left: 0; } + .mop.mtight { margin-left: 0; } + .mbin.mtight { margin-left: 0; } + .mrel.mtight { margin-left: 0; } + .mopen.mtight { margin-left: 0; } + .mclose.mtight { margin-left: 0; } + .mpunct.mtight { margin-left: 0; } + .minner.mtight { margin-left: 0; } + + .mord { + & + .mop.mtight { margin-left: @thinspace; } + } + + .mop { + & + .mord.mtight { margin-left: @thinspace; } + & + .mop.mtight { margin-left: @thinspace; } + } + + .mclose { + & + .mop.mtight { margin-left: @thinspace; } + } + + .minner { + & + .mop.mtight { margin-left: @thinspace; } } .reset-textstyle.textstyle { font-size: 1em; } diff --git a/test/katex-spec.js b/test/katex-spec.js index 57aad4e5..122c8dbd 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -1581,7 +1581,8 @@ describe("A bin builder", function() { it("should correctly interact with color objects", function() { expect(getBuilt("\\blue{x}+y")[1].classes).toContain("mbin"); - expect(getBuilt("\\blue{x+}+y")[1].classes).toContain("mord"); + expect(getBuilt("\\blue{x+}+y")[1].classes).toContain("mbin"); + expect(getBuilt("\\blue{x+}+y")[2].classes).toContain("mord"); }); }); @@ -1695,17 +1696,17 @@ describe("A phantom builder", function() { }); it("should make the children transparent", function() { - var children = getBuilt("\\phantom{x+1}")[0].children; + var children = getBuilt("\\phantom{x+1}"); expect(children[0].style.color).toBe("transparent"); expect(children[1].style.color).toBe("transparent"); expect(children[2].style.color).toBe("transparent"); }); it("should make all descendants transparent", function() { - var children = getBuilt("\\phantom{x+\\blue{1}}")[0].children; + var children = getBuilt("\\phantom{x+\\blue{1}}"); expect(children[0].style.color).toBe("transparent"); expect(children[1].style.color).toBe("transparent"); - expect(children[2].children[0].style.color).toBe("transparent"); + expect(children[2].style.color).toBe("transparent"); }); }); diff --git a/test/screenshotter/images/BoldSpacing-chrome.png b/test/screenshotter/images/BoldSpacing-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..443e149bea36b3b9ab01cac68b4a9004fcc35878 GIT binary patch literal 7022 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 I&MBb@06fpuRR910 literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/ColorSpacing-chrome.png b/test/screenshotter/images/ColorSpacing-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..520054429fa65f457e0795e8ae055ee2dee52b22 GIT binary patch literal 8730 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 DH*RbO literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/ColorSpacing-firefox.png b/test/screenshotter/images/ColorSpacing-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb2d466062862a0493dde9abb5d3af51d14ee67 GIT binary patch literal 8709 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 Lu6{1-oD!Mr4Dts$?)hR1_ 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 II;Vst06MM5F#rGn literal 14363 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 diff --git a/test/screenshotter/images/LimitControls-firefox.png b/test/screenshotter/images/LimitControls-firefox.png index db98c97895bbbe7f275e97fd19cfc67abed88b82..8184ac232b389ba53526c4f43443582692314cd5 100644 GIT binary patch literal 13897 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 diff --git a/test/screenshotter/images/NegativeSpaceBetweenRel-chrome.png b/test/screenshotter/images/NegativeSpaceBetweenRel-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..5428d096b29b47e3167c0eb4fbb0aa030c01c31f GIT binary patch literal 4417 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 HB{Ts5%M(+U literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/NegativeSpaceBetweenRel-firefox.png b/test/screenshotter/images/NegativeSpaceBetweenRel-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..2617807f5fce72c6bcd92669d3bae4bdd6ab6ea8 GIT binary patch literal 4403 zcmeAS@N?(olHy`uVBq!ia0y~yU}0cjU}oT8U|?XFf6?nA1B1XXPZ!6KiaBrZX0BOU z9(&+p`ZDL4V#`>y0~R{AXiXF9aMU>>uu-k!l%A54kN5$xiLL@%F5840J4C0tHaF#W z7%p-Vb9Pm53ZAxMsw;<{NrMh+(^jP|mm}YNvDrTN<(%T@F*A$(-v6z$TmR1T|4#M& z&yW7Mem?JMW!qneYa3oMHe3~C;1H$&-7a9TEBW;8;T~5XCY`%(%mr^>9yXY>Z$e;0 z>g^1MxYE1-Aux}Pyd=jJD<-f{`U2p<@Yw|!}TuKH8(yk9-( zw%=Xz|9qJj+Rt%%`$2}7!bgn^Irn$ZNECZvczEKQUthbwudVWm*u=~BV9v?3ok@m= zbuP^9lW2H-=lR~%a>CQHlNo<}*mlzI=ar^qk#pGJ%vjEF__NvlV(A}tIT{SV>$2{s zzmL0O!Ts&&W%bYVf9>3w{`>d0xazOv`@S}A-rn#2ErWGIiZf%y;al}n>bI^a6npz_ z^3V998;5?^CD?3PzBWNCVrnnTgHyNHvp(n-GdrIYYx$4!^TWf_@715F$ax?AFJgn1 zH0OcK`G0~d6F=)*J39GezV+M6fBAjK%Z^=I-Zb^51A|@hQvubZ{WSC>glg(N2;t^ZaiurSU{=Zt;T`s}@j@Mg`D=hsV!=9hJ_I`X6 zo%d?_$=&_)d;aSOhrhRGdvHkApLMlyIm5o{=ZO|?XUWfdGjX?0(UPM-52XB>ynOvU zL$(Ly)2&6;T)4wn@z5Y=cgp|2>eWwvxb|(aSU^)z zf_MM^_Dh(bEElu7vgpsHlppr9cl|iKRh-d&$CH%_rO$W|lv@8cyMJT<|2>71YZ4ba z>ztygjuCw9|%+b#$G28!nyTkWi z4akziYMb}h-MY2)yHx+1+|%>8!ZOw|)ckEptoZZQKGrC2^8M%+0o@zFZ+pFm<%9L( z#=QkMgAZz*6>Zquo_IZc{r{JrAKTsRxj*ywkCZR+v$lQPWsXN2Be@_hl{CM~A*pJ8u#^P32l6v$R|GZ4( z4!0@VRJ6Q4?qJ9UuVR)5`s;2>|KC#fc*@DRozIohqk8skpV{;8=IlHF=XR^D=au=~ z^FQun%mycSz5`RYOSie-FL-S?Id%)DKhM97C!g3?oS6In>$%VB%b9K!Ui;F|esEgZ z69$`FiN61rc(=>h{M%}C|M=5=g+JSB-b~`pdn5j@nAzQ`jw|8$U3dGkSF!Ib>@+Q& z^>pvs*XZ7)`?!PAqCjfG^t%pBJX)_hPE||GE6x=Eu$Md;br|KDWEDSAE@Q18e!OV&bd|UwD8`ESD>( z{^R!c!@NqlKeg(*760?=-`-*WHSuKrorkO5zui}M{@&i--`?KeUVi@F`?}AMHuvqV zdwB2ttltY0PFpxJ@XcX+BFKLKx1xqk86r;|7MXYcz}{y6aOD^P-s)@QhWr}o?H z_upf0wYVQ|R!jbW@XOWpz3y9Izk2z4gX>!HhVV0Y{v9rOzSOrO;$VmFSvVR*XMRt-a29;M~*R3X>jnqnoC$=kAMroVd64m{pGNYnBIvhYLP!<}1Fn zBh>7A_;bBEJbxcZo(^AM`Zj+WNdFrK84K@cv-$Q{zg61xf7gM9ef!w`+UjohJk?*v zny`-F;?OihV}|N?rabnxPydPcMnC<_E%R!{?|bJ?UYLF^qW*Ri!@g}-HYQw6V|(D= zmiYVl@;m=$_1Z-K`*v*K-Rhfe`}zJnwe0_7J9%dRZQJD9w^i!P&;G2~;ChDZfarF~ zw$ICT|9ssMzAQfJcR>EmqgMLLa-#Y(-)qdb|9O40U&^-Mevc3Dt=QMzyf!I};hbFC zavpbHxJA0|(?tbp&Yu{Gi+wnjDXa8wA?y$TlhJCgD zufHAMo&NXO-DCFqpIhsHID1g^wwkj4Z;=C`{j%Tx`^{%k%kW~*+kd~2_hV<|{=)r* z$8+X|pSf=$S#f=9yZ+wFx4Z`?r`5V~Y}<60=|k&ux%$6-KYp&vXL@)4|HrM<&)nbm z;$q*l)#qmL{OLB2{c&ye^>v(fcm8*;p1~9L_5s75uT7ujE6+>cOS=7Y!Sen8CQN=3 zTXS&p{7*Bg?`+ujcVB<~t>Ss*7tj8f`nlZpzvX$0_lEY{zxnPDo>zHr)^nTRGyVTg z-F>$}V|&%pDeCM31py4-?$zyB>8$s^@Kxez_L{t#!sm0(zg@;xGb8!@{O`g?H(Zqw zX*kVyTdKY0+&k^y^7Fa*`_eD{JrZ;K|Ci~zwIpKMSs&c*+kNuhjlvV#)Aw)6KK1Qp z-Mvlh^X{wrTfS_Ge!J&rU-Gv5C9iUCm*07GsXk?%mYdxexwVgR$FmRj_SWAD zJN{>7{2 zc|Ehl@e>R+Px}sk|G((Qm!5A|wBH-%+>*|F{-1NhJvY_|Z@IO9f4Jl>U-CuW@9&f9 z@B6dQuiN`(c5v|edkbrx>~ybx#XY~?`rnCK?fD!!Kd!y~zn}5i=?;cH%Qk(tf4gP2 zHUIj*SMIK6z47Pz^v&(E#r=HIo+_~WwgQ}h+yZT?mEJDwp~QmSDqd)fDUs_b$1 zj7tvByUKLu|FzCeXY2iU9RrFz`Pr}Szx!)J7GvKW ziMt z=eup=xpj7=ZQCw4W1=FX#oEp7`j#6D_dK`$e=fbX{`2voL$j1u%~$ZVs+?vnH)G~O z#vMC8bN<_Od6s(3+85hjx<36e>-jbJ`&Or=`Olm=z_8}l($DpW{w`rO&WpMu-|$%L z@%mTNwi#jOvNKjTGFAkqudh9RAocy-?d|WwB>!G(+V@cW%%e7DV{;9L`|tPE-mm|# zY4?}651)s){a^O~>p{iMJD(ot;pI56>fH1i>;IJ>HdS9O|FBoP`Tpzs|GVpFT=iv7 z%W`12cl%zd`HqAWn`+lH>#flVE1T`k$kDr&K=f&T$%Y+ z|BrLl*;u|l z_Ra_Q%Bzy^E9!qTuCIR|d6=KUYVZ3rr|LUq1x4Srmaa48F}^O)Anx-%alPEW2V1vp zu9Y`@CpPCoL1g1|-dTTo-%VjYR%^FlwIYN0zHd|4*L;<}Xa8v1z2(=w-8Apr$*AsE zAHCsd_P*Meq4QtK#n`-PJ7irt|Gi|goqRyl^V`kW_ihqv$nV=etKN9o_n*^a?7v2T z7kXrEdVb%Yntj`QcHVW!e8X^M-S>@erfs}dbo5H>aq-#}e_wa+dcAu|;ji}7>VF

yZaNKJDbaSPj1&{yKo>JdawMLy~)iK@!&$Hh%9NT^4 z{Fk}xao7L;eR=n*>>ZQ8=cUV!zqhNum&P3Wm~BDb$@}kn;+EWhzic1Fot=AL9QeEY zb@rd0_h&x+oM-*4j9K(C+XKhFzyG(@OQox_ZxxFTny32b_@^}I{`^_>6+c_#C5m@9 zb{R4k#J<&N*n2GUq-wA`!=6nw544|h{V%`FG*y|c-soN#b7(T#gDJPH8@Bgup0v`q z&AfiswwebQidx-G&g@@U)41X02jQs=rABECd}~=B>`q?u`1|Q-?=XIgHFFYbybd!> zebuuggmHu4F`fg=Rp0+VZRWox|K{&nRq;Q&Y96>hZr$2TdyPdP(cm?B* zW#0r3Bp;7F=^X8Cx9*d}(=aCgtf++cqCfV>Z{;kwUQy5Z!{@E+fd{|Y`N}R{nRI+Q z|C+n&VjiYTi|yDXbFbjU->!yIvp9xV*O?@q^MBeM#jUq?PEm>5&V9PG?*)adbNDo4 z<2I=klKKqaU)}w0F7=%MQ}V0#415~lKXxr+{ic8XZi+zK(Fn#Ji@q^EC|oT5(!5l3 z!}n?X@5jhJkB+&qE7wnF<_q88&~K`6v0*S5vv?)j5{`R@|(xOW4D3XK(rccsuF&C*$MlHt*Q- zQlX(UeX4)O4;>qMgE$7gwR;&PUTZY$DxdoL_wHky&(04<23ieQd9NeEJ=m1lja`Imc6HzyJL9Q)Bo0h&$zGW_-_97BYRf6UA`MQgFe$ zJw>J3QudF2PcJ&uz%B5to~q)sT;$&^?Mm+Og;SRUEsR+pM4)^zYFmD zk#)IcvUsRj=6dNU{<+)tXxJG^OS6BzD#2*6OsqlK?acmPtLIyO-152oyyfRvDF0<{JZY08+i?N^vSv_AANaH+o4-sW57 zv~$<9z2D}a;`Ehgyi@<@SNNYb&l}(Cl^-zZxhBx?{OY$4&ed+~SH<$K*|DsiS2X*b znQivLP-nHf+Y)!~iZ?x15oGzWckw^($>(A&{y&xSR=q54&!5EOVfQ*?{_N~tR=?w^ zX>@+=C#yAL&u0H)*t36I^L4$0vG#mF<{iHN|LC_Zw(Y*Z;&$%Jl~xb2XR7~ktKS-1n0E0PEiP72D^8%hqS* zZuq%l?>hHw%WKnaEGeJ9x;pW3i~JPfX?;H~C0<&2y6e&ZD{|3)TasQsuK)XKQPIJV zx$5%JbY_g(vAzS}zSXLI*4*lf=KufMN8MDpKdx2*>siof{hR(&nZxu2=RZ|AOl zQ@<55tRGHH{J-?EnCYJX_M3KmP7OZJR{q|~qEzsc{Fb_3->!7=OYKaWQT~c?$BrtO z+}oT}KVE*->|6ffMbzz|M?SoDHeXb9dOf$4`kPokiJuqm1#)*in){VqKi;l%&!ySj zpF$SZ>sZx?i|>2;aIL7kLDo@&|5unlT>JNT|Bsl|KdoO6E_ZOSHYNP(YG2Gd-e4Bh$?dJ{0zx0Q1@2kqNJIe8F zYZb${42}cePd&W-E{PB6yzrXd4PtSi}S=)S=@5Ado zMfd+*dng@PcWl4^>_OI)??qAQMWhS@j-S<+pUW>4dB-irNv-dS^HrDJ@Zd?2O*xl|& ze$P#K_N=qm@%4P1Yo+7Gu#i*vB5`p#WlIy8t}=a?+{Pdi&KJLBgWZmc4?^qnGpo<- zTWq$7=fLOLZQ-GQ_EyO!vewP~V_nzZJvRQeC+Iu?fw+ASbqDpu)4(s@8_+z zQgGE}n11d1`_$!AoA=+}rpO>aC!-|x`<#W!?)fg2t`FMHdgS6Nw;en#{O8fS$v;=r z-uUtF@BOICpGB^(b=uBZdagaMeo9+1W`Dv(-o@s^&*nxkT)V>eB|7pa*M_RtbAk1f z>%Sj3SMj*J{?{z$UD>yn)Ngohm%{wsvE<(q>AvOH_2NHGUKA1WlP&qxHK*_`^_hET zYOYTy*fg7W;>tRi1B+MfzI`b??7!Z=rJq0Czn^-=uJYYotHu2h)A_IOk6ZUv{OiVi z-L*E?yV|rxe1HC&+x5tDbvD1<{_pct{b$D<{A;y;%R7@_x87Yau6LKY$n!bGmSL*& z7ahw5&slc9oBpvs>T_!rL)i=KQ~7V%r%RW||9LXEO#IK<*C+4u=l!p#%+6h2=9U*5_@^j#oA9&QRSbGB=W%~HuzGd> zdaE6ue@vVHb2l}gtbOqKZT!A#zn0$KK3Uqny5Z;g_c;fimw(?jcYloB)ADQ0 zyVi4`oAc)@KmUq%)2!?EZ~8OyyvBNoO|QSc-XXeu%6(>;;L0Dn#6|X=%Z>TfCL5jH z{l0$FX~p?(?y)^t{yXgZ_i5VE{3Yw8E0SJMf0y3iuXk^IpETEJ?|25i)q9@Z`*vY{ z?9QyDv+MtTy?D1>Y@UVb>ffsMzg-Ww>(Bbbyyw-SV7`@i9xSeS^dk7XwcqQoKC6P`ZE)GfC!-n%XNtRnNZ&1;IZ3Ldw*`p>WVxZ%_0$r~+y z+wJvUw_u3D?_-5sbt@n4%iMw-^o59I6R&>X|bGx&jMo!HPe`A($Yl&)p z#QWmxzN{T0o`E(`j^CcL-$eF#{oQM>A3wZ2FSWkjrSzokzWCWUciB923%)K>zxUNV z*Vjf%&d;j);a(o|;px}AVKdaF@_9b3+gDt-%x3L(x9IG?SNm%oY-v58xo_M1g6D59 zZeP^f9~Zkb{lqt4@4XqHKK{@9UlaWF(Lw&#|C93npKO0$^{BMo;_JJk&FAuK_ieb( zpa1i$wRsT_!_Hanc}m_XciVk`^WVDiW~2A-`sbq3drOYYbzuK>>T zu6XzFf6Q?&+@C z=dN3ByYXj5{j2xsZ#Ex2r2E~v?to|We#@f%wbSyxU059b-v8R1e~*6W?<-g>9&6Ej zw)Ovc-hI{|^_@+a2ru$;}OPwzJ`xOK$!_};AZ)wx?AF6w>1>GS6M|IRLp zEM{keJHgS1(~J9idrU^Sme2t+cC2tX%N1Y;$dcpn>6W#)|yX z|L^TDZU6Ky;mcmuhOg$!8Gr1a$56A~?AO1d7oo+QDh=MB&16`0onL#}m35~+HhjLo+*{&*{UYxl4EzV^9w|F)X{`M&i3&vU1E>$d&; zH78HzOnq^U)raue>$L514zopr00W!V APyhe` delta 5040 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 HN@xNA@L%tP diff --git a/test/screenshotter/images/Sizing-firefox.png b/test/screenshotter/images/Sizing-firefox.png index 2e36f1ee3316058e246aa1e575600681a851f569..7febe8cc72fa5700f1638f491f101128d8d8e642 100644 GIT binary patch delta 5032 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 delta 5036 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 Z88Sbv3t6*z=L^t$i>Irf%Q~loCIF0Z+j9T_ literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/StyleSwitching-firefox.png b/test/screenshotter/images/StyleSwitching-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..60e45bfe17447cb27cf151d18ff48e013aff7f3a GIT binary patch literal 5500 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 diff --git a/test/screenshotter/ss_data.yaml b/test/screenshotter/ss_data.yaml index 4897096d..ca069065 100644 --- a/test/screenshotter/ss_data.yaml +++ b/test/screenshotter/ss_data.yaml @@ -27,6 +27,7 @@ ArrayType: 1\begin{array}{c}2\\3\end{array}4 Baseline: a+b-c\cdot d/e BasicTest: a BinomTest: \dbinom{a}{b}\tbinom{a}{b}^{\binom{a}{b}+17} +BoldSpacing: \mathbf{A}^2+\mathbf{B}_3*\mathscr{C}' Cases: | f(a,b)=\begin{cases} a+1&\text{if }b\text{ is odd} \\ @@ -36,6 +37,7 @@ Cases: | Colors: tex: \blue{a}\color{#0f0}{b}\color{red}{c} nolatex: different syntax and different scope +ColorSpacing: \color{red}{\displaystyle \int x} + 1 DashesAndQuotes: \text{``a'' b---c -- d----`e'-{-}-f}--``x'' DeepFontSizing: tex: | @@ -82,6 +84,7 @@ MathRm: \mathrm{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathSf: \mathsf{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathScr: \mathscr{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathTt: \mathtt{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} +NegativeSpaceBetweenRel: A =\!= B NestedFractions: | \dfrac{\frac{a}{b}}{\frac{c}{d}}\dfrac{\dfrac{a}{b}} {\dfrac{c}{d}}\frac{\frac{a}{b}}{\frac{c}{d}} @@ -106,6 +109,7 @@ Sqrt: | ^{\sqrt{\sqrt{\sqrt{x}}}}} SqrtRoot: | 1+\sqrt[3]{2}+\sqrt[1923^234]{2^{2^{2^{2^{2^{2^{2^{2^{2^{2^{2^2}}}}}}}}}}} +StyleSwitching: a\cdot b\scriptstyle a\cdot ba\textstyle\cdot ba\scriptstyle\cdot b SupSubCharacterBox: a_2f_2{f}_2{aa}_2{af}_2\mathbf{y}_Ay_A SupSubHorizSpacing: | x^{x^{x}}\Big|x_{x_{x_{x_{x}}}}\bigg|x^{x^{x_{x_{x_{x_{x}}}}}}\bigg|