On Fri, Jan 07, 2005 at 07:36:50PM +0100, Georg Baum wrote:
> > Otherwise everything after the & is ignored. The above is valid LaTeX. It
> > can be produced by tex2lyx (because it does not touch formulas at all),
> > and it was created by very old LyX versions. The following patch seems to
> > fix this.
> > I am not sure wether I understood the math parser well enough, so it would
> > be nice if somebody (André?) could comment.
> 
> André, can you have a look?

Patch attached. You could commit that if it fixes the problem.

Andre'
Index: math_parser.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_parser.C,v
retrieving revision 1.308
diff -u -p -r1.308 math_parser.C
--- math_parser.C       7 Jan 2005 13:32:26 -0000       1.308
+++ math_parser.C       8 Jan 2005 20:27:26 -0000
@@ -191,7 +191,8 @@ inline CatCode catcode(unsigned char c)
 
 
 enum {
-       FLAG_BRACE_LAST = 1 << 1,  //  last closing brace ends the parsing
+       FLAG_ALIGN      = 1 << 0,  //  next & ends the parsing process
+       FLAG_BRACE_LAST = 1 << 1,  //  next closing brace ends the parsing
        FLAG_RIGHT      = 1 << 2,  //  next \\right ends the parsing process
        FLAG_END        = 1 << 3,  //  next \\end ends the parsing process
        FLAG_BRACK_LAST = 1 << 4,  //  next closing bracket ends the parsing
@@ -757,9 +758,10 @@ void Parser::parse1(MathGridInset & grid
                else if (t.cat() == catAlign) {
                        //lyxerr << " column now " << (cellcol + 1)
                        //       << " max: " << grid.ncols() << endl;
+                       if (flags & FLAG_ALIGN)
+                               return;
                        if (addCol(grid, cellcol))
-                               cell = &grid.cell(grid.index(cellrow,
-                                                            cellcol));
+                               cell = &grid.cell(grid.index(cellrow, cellcol));
                }
 
                else if (t.cat() == catSuper || t.cat() == catSub) {
@@ -1210,25 +1212,33 @@ void Parser::parse1(MathGridInset & grid
                        if (l) {
                                if (l->inset == "font") {
                                        
cell->push_back(createMathInset(t.cs()));
-                                       parse(cell->back().nucleus()->cell(0), 
FLAG_ITEM, asMode(mode, l->extra));
+                                       parse(cell->back().nucleus()->cell(0),
+                                               FLAG_ITEM, asMode(mode, 
l->extra));
                                }
 
                                else if (l->inset == "oldfont") {
                                        
cell->push_back(createMathInset(t.cs()));
-                                       parse(cell->back().nucleus()->cell(0), 
flags, asMode(mode, l->extra));
-                                       return;
+                                       parse(cell->back().nucleus()->cell(0),
+                                               flags | FLAG_ALIGN, 
asMode(mode, l->extra));
+                                       if (prevToken().cat() != catAlign)
+                                               return;
+                                       putback();
                                }
 
                                else if (l->inset == "style") {
                                        
cell->push_back(createMathInset(t.cs()));
-                                       parse(cell->back().nucleus()->cell(0), 
flags, mode);
-                                       return;
+                                       parse(cell->back().nucleus()->cell(0),
+                                               flags | FLAG_ALIGN, mode);
+                                       if (prevToken().cat() != catAlign)
+                                               return;
+                                       putback();
                                }
 
                                else {
                                        MathAtom at = createMathInset(t.cs());
                                        for (MathInset::idx_type i = 0; i < 
at->nargs(); ++i)
-                                               parse(at.nucleus()->cell(i), 
FLAG_ITEM, asMode(mode, l->extra));
+                                               parse(at.nucleus()->cell(i),
+                                                       FLAG_ITEM, asMode(mode, 
l->extra));
                                        cell->push_back(at);
                                }
                        }

Reply via email to