From 5f64bbb262038002a614ecfec178261e73a2ce0f Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 26 Jan 2024 10:16:37 -0500 Subject: [PATCH] Fix issues with linebreaks and spacing in SVG output. (mathjax/MathJax#3166) --- ts/output/common/LineBBox.ts | 2 +- ts/output/common/Wrappers/mspace.ts | 3 ++- ts/output/svg.ts | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ts/output/common/LineBBox.ts b/ts/output/common/LineBBox.ts index 32e74157e..4db0b8fcf 100644 --- a/ts/output/common/LineBBox.ts +++ b/ts/output/common/LineBBox.ts @@ -99,7 +99,7 @@ export class LineBBox extends BBox { */ public append(cbox: LineBBox) { if (this.isFirst) { - cbox.originalL = cbox.L; + cbox.originalL += cbox.L; cbox.L = 0; // remove spacing after an operator with a linebreak after it } if (cbox.indentData) { diff --git a/ts/output/common/Wrappers/mspace.ts b/ts/output/common/Wrappers/mspace.ts index b8b65fc9e..8e3c71d72 100644 --- a/ts/output/common/Wrappers/mspace.ts +++ b/ts/output/common/Wrappers/mspace.ts @@ -201,7 +201,8 @@ export function CommonMspaceMixin< const bbox = LineBBox.from(BBox.zero(), leading); if (i === 1) { bbox.getIndentData(this.node); - bbox.isFirst = true; + bbox.w = this.getBBox().w; + bbox.isFirst = (bbox.w === 0); } return bbox; } diff --git a/ts/output/svg.ts b/ts/output/svg.ts index fb6297dac..26431174a 100644 --- a/ts/output/svg.ts +++ b/ts/output/svg.ts @@ -397,12 +397,12 @@ CommonOutputJax< if (forced && mo.node.attributes.get('linebreakstyle') === 'after') { const k = mml.parent.node.childIndex(mml.node) + 1; const next = mml.parent.childNodes[k]; - const dimen = (next ? next.getLineBBox(0).originalL : 0) * scale; + const dimen = (next ? next.getLineBBox(0).originalL * scale : 0); if (dimen) { this.addInlineBreak(nsvg, dimen, forced); } } else if (forced || i) { - const dimen = (mml && i ? mml.getLineBBox(0).originalL : 0) * scale; + const dimen = (mml && i ? mml.getLineBBox(0).originalL * scale : 0); if (dimen || !forced) { this.addInlineBreak(nsvg, dimen, forced || !!mml.node.getProperty('forcebreak')); }