On 09/10/2016 04:22 AM, Georg Baum wrote: > Richard, OK for branch? Yes, thank you.
rh > > 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()) >