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())


Reply via email to