]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathParser.cpp
tex2lyx: support for \item with opt arg in itemize environment
[lyx.git] / src / mathed / MathParser.cpp
index 1c7f2ff0ad3abc79a452d187f29378c3eb4d7a15..21621a3e25c4088953c06dbb11b418d980cd8252 100644 (file)
@@ -1368,15 +1368,13 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        }
                }
 
-               else if (t.cs() == "nonumber") {
-                       if (grid.asHullInset())
-                               grid.asHullInset()->numbered(cellrow, false);
-               }
+               // \notag is the same as \nonumber if amsmath is used
+               else if ((t.cs() == "nonumber" || t.cs() == "notag") &&
+                        grid.asHullInset())
+                       grid.asHullInset()->numbered(cellrow, false);
 
-               else if (t.cs() == "number") {
-                       if (grid.asHullInset())
-                               grid.asHullInset()->numbered(cellrow, true);
-               }
+               else if (t.cs() == "number" && grid.asHullInset())
+                       grid.asHullInset()->numbered(cellrow, true);
 
                else if (t.cs() == "hline") {
                        grid.rowinfo(cellrow).lines_ ++;
@@ -1494,6 +1492,18 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
                }
 
+               else if (t.cs() == "xhookrightarrow" || t.cs() == "xhookleftarrow" ||
+                            t.cs() == "xRightarrow" || t.cs() == "xLeftarrow" ||
+                                t.cs() == "xleftrightarrow" || t.cs() == "xLeftrightarrow" ||
+                                t.cs() == "xrightharpoondown" || t.cs() == "xrightharpoonup" ||
+                                t.cs() == "xleftharpoondown" || t.cs() == "xleftharpoonup" ||
+                                t.cs() == "xleftrightharpoons" || t.cs() == "xrightleftharpoons" ||
+                                t.cs() == "xmapsto") {
+                       cell->push_back(createInsetMath(t.cs(), buf));
+                       parse(cell->back().nucleus()->cell(1), FLAG_OPTION, mode);
+                       parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
+               }
+
                else if (t.cs() == "ref" || t.cs() == "eqref" || t.cs() == "prettyref"
                          || t.cs() == "pageref" || t.cs() == "vpageref" || t.cs() == "vref") {
                        cell->push_back(MathAtom(new InsetMathRef(buf, t.cs())));
@@ -1849,16 +1859,22 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        skipSpaces();
                        if (nextToken().asInput() == "[") {
                                // Since the phantom inset cannot handle optional arguments
-                               // we must not create an InsetMathPhantom (bug 8967).
+                               // other than b and t, we must not create an InsetMathPhantom
+                               // if opt is different from b and t (bug 8967).
                                docstring const opt = parse_verbatim_option();
-                               docstring const arg = parse_verbatim_item();
-                               cell->push_back(MathAtom(new MathMacro(buf, t.cs())));
-                               MathData ar;
-                               mathed_parse_cell(ar, '[' + opt + ']', mode_);
-                               cell->append(ar);
-                               ar = MathData();
-                               mathed_parse_cell(ar, '{' + arg + '}', mode_);
-                               cell->append(ar);
+                               if (opt == "t" || opt == "b") {
+                                       cell->push_back(createInsetMath(t.cs() + opt, buf));
+                                       parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
+                               } else {
+                                       docstring const arg = parse_verbatim_item();
+                                       cell->push_back(MathAtom(new MathMacro(buf, t.cs())));
+                                       MathData ar;
+                                       mathed_parse_cell(ar, '[' + opt + ']', mode_);
+                                       cell->append(ar);
+                                       ar = MathData();
+                                       mathed_parse_cell(ar, '{' + arg + '}', mode_);
+                                       cell->append(ar);
+                               }
                        }
                        else {
                                cell->push_back(createInsetMath(t.cs(), buf));
@@ -2068,7 +2084,8 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                        //}
                                        for (InsetMath::idx_type i = start; i < at->nargs(); ++i) {
                                                parse(at.nucleus()->cell(i), FLAG_ITEM, m);
-                                               skipSpaces();
+                                               if (mode == InsetMath::MATH_MODE)
+                                                       skipSpaces();
                                        }
                                        cell->push_back(at);
                                }