From dc79b91dbf0906e4986b4d6ff0f7dbd71faff40c Mon Sep 17 00:00:00 2001 From: Eddie Kohler Date: Sun, 27 Nov 2016 10:53:53 -0500 Subject: [PATCH] Mark delimiters with the proper class (mopen or mclose). This fixes some atom spacing issues. Update the BinCancellation screenshotter test. --- src/buildHTML.js | 31 ++++++------ src/delimiter.js | 45 ++++++++++-------- .../images/BinCancellation-chrome.png | Bin 7526 -> 10141 bytes .../images/BinCancellation-firefox.png | Bin 6912 -> 9161 bytes test/screenshotter/ss_data.yaml | 4 +- 5 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/buildHTML.js b/src/buildHTML.js index 0fc6d4f5..15859ea7 100644 --- a/src/buildHTML.js +++ b/src/buildHTML.js @@ -235,12 +235,11 @@ var isCharacterBox = function(group) { baseElem.type === "punct"; }; -var makeNullDelimiter = function(options) { - return makeSpan([ +var makeNullDelimiter = function(options, classes) { + return makeSpan(classes.concat([ "sizing", "reset-" + options.size, "size5", options.style.reset(), Style.TEXT.cls(), - "nulldelimiter", - ]); + "nulldelimiter"])); }; /** @@ -562,18 +561,18 @@ groupTypes.genfrac = function(group, options) { var leftDelim; var rightDelim; if (group.value.leftDelim == null) { - leftDelim = makeNullDelimiter(options); + leftDelim = makeNullDelimiter(options, ["mopen"]); } else { leftDelim = delimiter.customSizedDelim( group.value.leftDelim, delimSize, true, - options.withStyle(style), group.mode); + options.withStyle(style), group.mode, ["mopen"]); } if (group.value.rightDelim == null) { - rightDelim = makeNullDelimiter(options); + rightDelim = makeNullDelimiter(options, ["mclose"]); } else { rightDelim = delimiter.customSizedDelim( group.value.rightDelim, delimSize, true, - options.withStyle(style), group.mode); + options.withStyle(style), group.mode, ["mclose"]); } return makeSpan( @@ -1205,11 +1204,9 @@ groupTypes.delimsizing = function(group, options) { } // Use delimiter.sizedDelim to generate the delimiter. - return makeSpan( - [groupToType[group.value.delimType]], - [delimiter.sizedDelim( - delim, group.value.size, options, group.mode)], - options); + return delimiter.sizedDelim( + delim, group.value.size, options, group.mode, + [groupToType[group.value.delimType]]); }; groupTypes.leftright = function(group, options) { @@ -1236,13 +1233,13 @@ groupTypes.leftright = function(group, options) { var leftDelim; if (group.value.left === ".") { // Empty delimiters in \left and \right make null delimiter spaces. - leftDelim = makeNullDelimiter(options); + leftDelim = makeNullDelimiter(options, ["mopen"]); } else { // Otherwise, use leftRightDelim to generate the correct sized // delimiter. leftDelim = delimiter.leftRightDelim( group.value.left, innerHeight, innerDepth, options, - group.mode); + group.mode, ["mopen"]); } // Add it to the beginning of the expression inner.unshift(leftDelim); @@ -1250,11 +1247,11 @@ groupTypes.leftright = function(group, options) { var rightDelim; // Same for the right delimiter if (group.value.right === ".") { - rightDelim = makeNullDelimiter(options); + rightDelim = makeNullDelimiter(options, ["mclose"]); } else { rightDelim = delimiter.leftRightDelim( group.value.right, innerHeight, innerDepth, options, - group.mode); + group.mode, ["mclose"]); } // Add it to the end of the expression. inner.push(rightDelim); diff --git a/src/delimiter.js b/src/delimiter.js index 3b626210..0dbc8c5f 100644 --- a/src/delimiter.js +++ b/src/delimiter.js @@ -56,9 +56,11 @@ var mathrmSize = function(value, size, mode, options) { * Puts a delimiter span in a given style, and adds appropriate height, depth, * and maxFontSizes. */ -var styleWrap = function(delim, toStyle, options) { +var styleWrap = function(delim, toStyle, options, classes) { + classes = classes || []; var span = makeSpan( - ["style-wrap", options.style.reset(), toStyle.cls()], [delim], options); + classes.concat(["style-wrap", options.style.reset(), toStyle.cls()]), + [delim], options); var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier; @@ -74,10 +76,10 @@ var styleWrap = function(delim, toStyle, options) { * font, but is restyled to either be in textstyle, scriptstyle, or * scriptscriptstyle. */ -var makeSmallDelim = function(delim, style, center, options, mode) { +var makeSmallDelim = function(delim, style, center, options, mode, classes) { var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); - var span = styleWrap(text, style, options); + var span = styleWrap(text, style, options, classes); if (center) { var shift = @@ -96,13 +98,12 @@ var makeSmallDelim = function(delim, style, center, options, mode) { * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, * Size3, or Size4 fonts. It is always rendered in textstyle. */ -var makeLargeDelim = function(delim, size, center, options, mode) { +var makeLargeDelim = function(delim, size, center, options, mode, classes) { var inner = mathrmSize(delim, size, mode, options); var span = styleWrap( - makeSpan(["delimsizing", "size" + size], - [inner], options), - Style.TEXT, options); + makeSpan(["delimsizing", "size" + size], [inner], options), + Style.TEXT, options, classes); if (center) { var shift = (1 - options.style.sizeMultiplier) * @@ -142,7 +143,8 @@ var makeInner = function(symbol, font, mode) { * Make a stacked delimiter out of a given delimiter, with the total height at * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. */ -var makeStackedDelim = function(delim, heightTotal, center, options, mode) { +var makeStackedDelim = function(delim, heightTotal, center, options, mode, + classes) { // There are four parts, the top, an optional middle, a repeated part, and a // bottom. var top; @@ -320,7 +322,7 @@ var makeStackedDelim = function(delim, heightTotal, center, options, mode) { return styleWrap( makeSpan(["delimsizing", "mult"], [inner], options), - Style.TEXT, options); + Style.TEXT, options, classes); }; // There are three kinds of delimiters, delimiters that stack when they become @@ -354,7 +356,7 @@ var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; /** * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. */ -var makeSizedDelim = function(delim, size, options, mode) { +var makeSizedDelim = function(delim, size, options, mode, classes) { // < and > turn into \langle and \rangle in delimiters if (delim === "<" || delim === "\\lt") { delim = "\\langle"; @@ -365,10 +367,10 @@ var makeSizedDelim = function(delim, size, options, mode) { // Sized delimiters are never centered. if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { - return makeLargeDelim(delim, size, false, options, mode); + return makeLargeDelim(delim, size, false, options, mode, classes); } else if (utils.contains(stackAlwaysDelimiters, delim)) { return makeStackedDelim( - delim, sizeToMaxHeight[size], false, options, mode); + delim, sizeToMaxHeight[size], false, options, mode, classes); } else { throw new ParseError("Illegal delimiter: '" + delim + "'"); } @@ -471,7 +473,8 @@ var traverseSequence = function(delim, height, sequence, options) { * Make a delimiter of a given height+depth, with optional centering. Here, we * traverse the sequences, and create a delimiter that the sequence tells us to. */ -var makeCustomSizedDelim = function(delim, height, center, options, mode) { +var makeCustomSizedDelim = function(delim, height, center, options, mode, + classes) { if (delim === "<" || delim === "\\lt") { delim = "\\langle"; } else if (delim === ">" || delim === "\\gt") { @@ -494,11 +497,13 @@ var makeCustomSizedDelim = function(delim, height, center, options, mode) { // Depending on the sequence element we decided on, call the appropriate // function. if (delimType.type === "small") { - return makeSmallDelim(delim, delimType.style, center, options, mode); + return makeSmallDelim(delim, delimType.style, center, options, mode, + classes); } else if (delimType.type === "large") { - return makeLargeDelim(delim, delimType.size, center, options, mode); + return makeLargeDelim(delim, delimType.size, center, options, mode, + classes); } else if (delimType.type === "stack") { - return makeStackedDelim(delim, height, center, options, mode); + return makeStackedDelim(delim, height, center, options, mode, classes); } }; @@ -506,7 +511,8 @@ var makeCustomSizedDelim = function(delim, height, center, options, mode) { * Make a delimiter for use with `\left` and `\right`, given a height and depth * of an expression that the delimiters surround. */ -var makeLeftRightDelim = function(delim, height, depth, options, mode) { +var makeLeftRightDelim = function(delim, height, depth, options, mode, + classes) { // We always center \left/\right delimiters, so the axis is always shifted var axisHeight = options.style.metrics.axisHeight * options.style.sizeMultiplier; @@ -533,7 +539,8 @@ var makeLeftRightDelim = function(delim, height, depth, options, mode) { // Finally, we defer to `makeCustomSizedDelim` with our calculated total // height - return makeCustomSizedDelim(delim, totalHeight, true, options, mode); + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, + classes); }; module.exports = { diff --git a/test/screenshotter/images/BinCancellation-chrome.png b/test/screenshotter/images/BinCancellation-chrome.png index 7f50bed53a0f425238bdd0f64174b545e7b5d6fb..749e2bd13bb4d4c1e33f3adfc1db58c46608f686 100644 GIT binary patch literal 10141 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 literal 7526 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 a|MTb6Mw<&;$Ud9~|cZ diff --git a/test/screenshotter/images/BinCancellation-firefox.png b/test/screenshotter/images/BinCancellation-firefox.png index 7376557d295f726ef65fe44500f6b040309675a6..021274ecf423d4dcc1fcce8faf831391723fec43 100644 GIT binary patch literal 9161 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%0D)zTY0c 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 diff --git a/test/screenshotter/ss_data.yaml b/test/screenshotter/ss_data.yaml index a2d48b87..6c5cd88c 100644 --- a/test/screenshotter/ss_data.yaml +++ b/test/screenshotter/ss_data.yaml @@ -28,8 +28,8 @@ Baseline: a+b-c\cdot d/e BasicTest: a BinCancellation: | \begin{array}{ccc} - +1 & 1+ & 1+1 \\ - 1++1 & 3\times) & 1+, + +1 & 1+ & 1+1 & (,) \\ + 1++1 & 3\times) & 1+, & \left(,\right) \end{array} BinomTest: \dbinom{a}{b}\tbinom{a}{b}^{\binom{a}{b}+17} BoldSpacing: \mathbf{A}^2+\mathbf{B}_3*\mathscr{C}'