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

Reply via email to