Richard, OK for branch? Georg
Georg Baum wrote: > commit a6be519a815893765a257bec5a456d7f6eecf8f6 > Author: Georg Baum <b...@lyx.org> > Date: Thu Sep 8 22:38:33 2016 +0200 > > Fix data loss with [ in first cell of aligned > > If the first character in the first cell of an aligned math > environment is '[', and the environment does not use top or bottom > vertical alignment, then LyX did write the '[' unprotected so that it > got misinterpreted as optional argument, both when reading the .lyx > file in LyX and when reading the .tex file in LaTeX => data loss! > The fix is to output an empty optional argument in this case, which is > interpreted as default alignment both by LyX and LaTeX. It would also > be possible to output \[ in the first cell instead, but this would be > more difficult to implement. > --- > src/mathed/InsetMathSplit.cpp | 18 ++++++++++++++---- > 1 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/src/mathed/InsetMathSplit.cpp b/src/mathed/InsetMathSplit.cpp > index 515dcb0..e385e0a 100644 > --- a/src/mathed/InsetMathSplit.cpp > +++ b/src/mathed/InsetMathSplit.cpp > @@ -14,7 +14,7 @@ > > #include "MathData.h" > #include "MathStream.h" > -#include "MathStream.h" > +#include "MathSupport.h" > > #include "FuncRequest.h" > #include "FuncStatus.h" > @@ -141,9 +141,19 @@ void InsetMathSplit::write(WriteStream & ws) const > suffix = from_ascii("*"); > ws << "\\begin{" << name_ << suffix << '}'; > bool open = ws.startOuterRow(); > - if (name_ != "split" && name_ != "align" && verticalAlignment() != 'c') > - ws << '[' << verticalAlignment() << ']'; > - if (name_ == "alignedat") > + bool const hasArg(name_ == "alignedat"); > + if (name_ != "split" && name_ != "align") { > + if (verticalAlignment() != 'c') > + ws << '[' << verticalAlignment() << ']'; > + else if (!hasArg) { > + docstring const first(asString(cell(0))); > + // prevent misinterpretation of the first character of > + // the first cell as optional argument (bug 10361) > + if (!first.empty() && first[0] == '[') > + ws << "[]"; > + } > + } > + if (hasArg) > ws << '{' << static_cast<unsigned int>((ncols() + 1)/2) << '}'; > InsetMathGrid::write(ws); > if (ws.fragile())