From f32b96f8cf076460786b23041e893b4403458960 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 15 Jun 2021 09:02:46 -0400 Subject: [PATCH] Fix setting of movablelimits to false for \overset, \unserset, \overunderset, and ParseUtil.underOver(). (mathjax/MathJax#2709) --- ts/input/tex/ParseUtil.ts | 18 +++++++++++++----- ts/input/tex/base/BaseMethods.ts | 13 +++---------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/ts/input/tex/ParseUtil.ts b/ts/input/tex/ParseUtil.ts index 606debdbe..3a8486b66 100644 --- a/ts/input/tex/ParseUtil.ts +++ b/ts/input/tex/ParseUtil.ts @@ -374,11 +374,7 @@ namespace ParseUtil { */ export function underOver(parser: TexParser, base: MmlNode, script: MmlNode, pos: string, stack: boolean): MmlNode { // @test Overline - const symbol = NodeUtil.getForm(base); - if ((symbol && symbol[3] && symbol[3]['movablelimits']) || NodeUtil.getProperty(base, 'movablelimits')) { - // @test Overline Sum - NodeUtil.setProperties(base, {'movablelimits': false}); - } + ParseUtil.checkMovableLimits(base); if (NodeUtil.isType(base, 'munderover') && NodeUtil.isEmbellished(base)) { // @test Overline Limits NodeUtil.setProperties(NodeUtil.getCoreMO(base), {lspace: 0, rspace: 0}); @@ -397,6 +393,18 @@ namespace ParseUtil { return node; } + /** + * Set movablelimits to false if necessary. + * @param {MmlNode} base The base node being tested. + */ + export function checkMovableLimits(base: MmlNode) { + const symbol = (NodeUtil.isType(base, 'mo') ? NodeUtil.getForm(base) : null); + if (NodeUtil.getProperty(base, 'movablelimits') || (symbol && symbol[3] && symbol[3].movablelimits)) { + // @test Overline Sum + NodeUtil.setProperties(base, {movablelimits: false}); + } + } + /** * Trim spaces from a string. * @param {string} text The string to clean. diff --git a/ts/input/tex/base/BaseMethods.ts b/ts/input/tex/base/BaseMethods.ts index 8a63a64a7..0bf2e6397 100644 --- a/ts/input/tex/base/BaseMethods.ts +++ b/ts/input/tex/base/BaseMethods.ts @@ -625,9 +625,7 @@ BaseMethods.Overset = function(parser: TexParser, name: string) { // @test Overset const top = parser.ParseArg(name); const base = parser.ParseArg(name); - if (NodeUtil.getAttribute(base, 'movablelimits') || NodeUtil.getProperty(base, 'movablelimits')) { - NodeUtil.setProperties(base, {'movablelimits': false}); - } + ParseUtil.checkMovableLimits(base); const node = parser.create('node', 'mover', [base, top]); parser.Push(node); }; @@ -642,10 +640,7 @@ BaseMethods.Underset = function(parser: TexParser, name: string) { // @test Underset const bot = parser.ParseArg(name); const base = parser.ParseArg(name); - if (NodeUtil.isType(base, 'mo') || NodeUtil.getProperty(base, 'movablelimits')) { - // @test Overline Sum - NodeUtil.setProperties(base, {'movablelimits': false}); - } + ParseUtil.checkMovableLimits(base); const node = parser.create('node', 'munder', [base, bot]); parser.Push(node); }; @@ -660,9 +655,7 @@ BaseMethods.Overunderset = function(parser: TexParser, name: string) { const top = parser.ParseArg(name); const bot = parser.ParseArg(name); const base = parser.ParseArg(name); - if (NodeUtil.isType(base, 'mo') || NodeUtil.getProperty(base, 'movablelimits')) { - NodeUtil.setProperties(base, {'movablelimits': false}); - } + ParseUtil.checkMovableLimits(base); const node = parser.create('node', 'munderover', [base, bot, top]); parser.Push(node); };