From 54147a7140cbb053711dd9f2cf15763b0943659e Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Fri, 19 Apr 2019 17:26:14 +0200 Subject: [PATCH] Fix #11552 in a different way The reported issue is fixed in a different way, not involving the fix for #9348. This commit supercedes [f2029fb3/lyxgit] and [17abf68b/lyxgit]. --- src/mathed/MathParser.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/mathed/MathParser.cpp b/src/mathed/MathParser.cpp index 0286ba103c..c41a6cfbd7 100644 --- a/src/mathed/MathParser.cpp +++ b/src/mathed/MathParser.cpp @@ -946,13 +946,22 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags, parse(ar, FLAG_BRACE_LAST, mode); // do not create a BraceInset if they were written by LyX // this helps to keep the annoyance of "a choose b" to a minimum - // But create a BraceInset if a script follows (#9348) InsetMathBrace const * mb; - if (ar.size() > 0) - mb = ar[0]->asBraceInset(); - if (ar.size() == 1 && (ar[0]->extraBraces() - || (mb && mb->cell(0).size() - && !mb->cell(0)[0].nucleus()->asScriptInset()))) + InsetMathChar const * mc; + for (size_type i = 0; i < ar.size(); ++i) { + mb = ar[i]->asBraceInset(); + mc = mb && mb->cell(0).size() > 1 && mb->cell(0)[0]->asMacro() + ? mb->cell(0)[1]->asCharInset(): 0; + if (mc && mc->getChar() == '[') { + // Remove the BraceInset around a macro + // with optional arguments. It will be + // automatically reinserted on write. + MathData md = mb->cell(0); + ar.erase(i); + ar.insert(i,md); + } + } + if (ar.size() == 1 && ar[0]->extraBraces()) cell->append(ar); else cell->push_back(MathAtom(new InsetMathBrace(ar)));