]> git.lyx.org Git - features.git/blobdiff - src/mathed/MathParser.cpp
Remove another unnecessary assignment
[features.git] / src / mathed / MathParser.cpp
index 35062caefe3a3c69cbe75c5f522f64641ec499a7..00f7e99004fb25bf9c469190d27112c16c17567c 100644 (file)
@@ -162,7 +162,7 @@ docstring escapeSpecialChars(docstring const & str, bool textmode)
  * environments like "equation" that have a fixed number of rows.
  */
 bool addRow(InsetMathGrid & grid, InsetMathGrid::row_type & cellrow,
-           docstring const & vskip, bool allow_newpage_ = true)
+           docstring const & vskip, bool allow_newpage = true)
 {
        ++cellrow;
        if (cellrow == grid.nrows()) {
@@ -179,14 +179,14 @@ bool addRow(InsetMathGrid & grid, InsetMathGrid::row_type & cellrow,
                        lyxerr << "ignoring extra row";
                        if (!vskip.empty())
                                lyxerr << " with extra space " << to_utf8(vskip);
-                       if (!allow_newpage_)
+                       if (!allow_newpage)
                                lyxerr << " with no page break allowed";
                        lyxerr << '.' << endl;
                        return false;
                }
        }
        grid.vcrskip(Length(to_utf8(vskip)), cellrow - 1);
-       grid.rowinfo(cellrow - 1).allow_newpage_ = allow_newpage_;
+       grid.rowinfo(cellrow - 1).allow_newpage = allow_newpage;
        return true;
 }
 
@@ -241,7 +241,7 @@ void delEmptyLastRow(InsetMathGrid & grid)
        for (InsetMathGrid::col_type col = 0; col < grid.ncols(); ++col) {
                InsetMathGrid::idx_type const idx = grid.index(row, col);
                if (!grid.cell(idx).empty() ||
-                   grid.cellinfo(idx).multi_ != InsetMathGrid::CELL_NORMAL)
+                   grid.cellinfo(idx).multi != InsetMathGrid::CELL_NORMAL)
                        return;
        }
        // Copy the row information of the empty row (which would contain the
@@ -622,7 +622,7 @@ void Parser::tokenize(istream & is)
 
 void Parser::tokenize(docstring const & buffer)
 {
-       idocstringstream is(mode_ & Parse::VERBATIM
+       idocstringstream is((mode_ & Parse::VERBATIM)
                        ? escapeSpecialChars(buffer, mode_ & Parse::TEXTMODE)
                        : buffer, ios::in | ios::binary);
 
@@ -744,7 +744,8 @@ docstring Parser::parse_verbatim_option()
        skipSpaces();
        docstring res;
        if (nextToken().character() == '[') {
-               Token t = getToken();
+               // eat [
+               getToken();
                for (Token t = getToken(); t.character() != ']' && good(); t = getToken()) {
                        if (t.cat() == catBegin) {
                                putback();
@@ -762,7 +763,8 @@ docstring Parser::parse_verbatim_item()
        skipSpaces();
        docstring res;
        if (nextToken().cat() == catBegin) {
-               Token t = getToken();
+               // eat catBegin
+               getToken();
                for (Token t = getToken(); t.cat() != catEnd && good(); t = getToken()) {
                        if (t.cat() == catBegin) {
                                putback();
@@ -1017,7 +1019,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
 
                else if (t.cat() == catOther) {
                        char_type c = t.character();
-                       if (isAsciiOrMathAlpha(c)
+                       if (!Encodings::isUnicodeTextOnly(c)
                            || mode_ & Parse::VERBATIM
                            || !(mode_ & Parse::USETEXT)
                            || mode == InsetMath::TEXT_MODE) {
@@ -1026,7 +1028,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                MathAtom at = createInsetMath("text", buf);
                                at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
                                while (nextToken().cat() == catOther
-                                      && !isAsciiOrMathAlpha(nextToken().character())) {
+                                      && Encodings::isUnicodeTextOnly(nextToken().character())) {
                                        c = getToken().character();
                                        at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
                                }
@@ -1037,10 +1039,10 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                else if (t.cat() == catComment) {
                        docstring s;
                        while (good()) {
-                               Token const & t = getToken();
-                               if (t.cat() == catNewline)
+                               Token const & tt = getToken();
+                               if (tt.cat() == catNewline)
                                        break;
-                               s += t.asInput();
+                               s += tt.asInput();
                        }
                        cell->push_back(MathAtom(new InsetMathComment(buf, s)));
                        skipSpaces();
@@ -1381,20 +1383,20 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                for (int i = 1; i < cols; ++i) {
                                        if (addCol(grid, cellcol)) {
                                                size_t const idx = grid.index(cellrow, cellcol);
-                                               grid.cellinfo(idx).multi_ =
+                                               grid.cellinfo(idx).multi =
                                                        InsetMathGrid::CELL_PART_OF_MULTICOLUMN;
                                        }
                                }
 
                                // the first cell is the real thing, not a dummy
                                cell = &grid.cell(first);
-                               grid.cellinfo(first).multi_ =
+                               grid.cellinfo(first).multi =
                                        InsetMathGrid::CELL_BEGIN_OF_MULTICOLUMN;
 
                                // read special alignment
                                MathData align;
                                parse(align, FLAG_ITEM, mode);
-                               grid.cellinfo(first).align_ = asString(align);
+                               grid.cellinfo(first).align = asString(align);
 
                                // parse the remaining contents into the "real" cell
                                parse(*cell, FLAG_ITEM, mode);
@@ -1424,7 +1426,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        grid.asHullInset()->numbered(cellrow, true);
 
                else if (t.cs() == "hline") {
-                       grid.rowinfo(cellrow).lines++;
+                       grid.rowinfo(cellrow).lines++;
                }
 
                else if (t.cs() == "sqrt") {
@@ -1432,12 +1434,10 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        parse(ar, FLAG_OPTION, mode);
                        if (!ar.empty()) {
                                cell->push_back(MathAtom(new InsetMathRoot(buf)));
-                               cell->back().nucleus()->cell(0) = ar;
-                               parse(cell->back().nucleus()->cell(1), FLAG_ITEM, mode);
-                       } else {
+                               cell->back().nucleus()->cell(1) = ar;
+                       } else
                                cell->push_back(MathAtom(new InsetMathSqrt(buf)));
-                               parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
-                       }
+                       parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
                }
 
                else if (t.cs() == "cancelto") {
@@ -1529,8 +1529,8 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        cell->push_back(MathAtom(new InsetMathStackrel(buf, !ar.empty())));
                        if (!ar.empty())
                                cell->back().nucleus()->cell(2) = ar;
-                       parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
                        parse(cell->back().nucleus()->cell(1), FLAG_ITEM, mode);
+                       parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
                }
 
                else if (t.cs() == "xrightarrow" || t.cs() == "xleftarrow") {
@@ -1552,7 +1552,8 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                }
 
                else if (t.cs() == "ref" || t.cs() == "eqref" || t.cs() == "prettyref"
-                         || t.cs() == "pageref" || t.cs() == "vpageref" || t.cs() == "vref") {
+                         || t.cs() == "nameref" || t.cs() == "pageref"
+                         || t.cs() == "vpageref" || t.cs() == "vref") {
                        cell->push_back(MathAtom(new InsetMathRef(buf, t.cs())));
                        docstring const opt = parse_verbatim_option();
                        docstring const ref = parse_verbatim_item();
@@ -1605,7 +1606,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                docstring const halign = parse_verbatim_item();
                                cell->push_back(MathAtom(new InsetMathArray(buf, name,
                                        InsetMathGrid::guessColumns(halign), 1, (char)valign[0], halign)));
-                               parse2(cell->back(), FLAG_END, mode, false);
+                               parse2(cell->back(), FLAG_END, InsetMath::MATH_MODE, false);
                        }
 
                        else if (name == "tabular") {
@@ -1774,7 +1775,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        docstring s;
                        int num_tokens = 0;
                        while (true) {
-                               Token const & t = getToken();
+                               Token const & tt = getToken();
                                ++num_tokens;
                                if (!good()) {
                                        s.clear();
@@ -1782,7 +1783,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                                putback();
                                        break;
                                }
-                               s += t.character();
+                               s += tt.character();
                                if (isValidLength(to_utf8(s)))
                                        break;
                        }
@@ -1986,7 +1987,7 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                                BufferParams::package_off;
 
                        bool const is_user_macro = no_mhchem ||
-                               (buf && (mode_ & Parse::TRACKMACRO
+                               (buf && ((mode_ & Parse::TRACKMACRO)
                                         ? buf->usermacros.count(t.cs()) != 0
                                         : buf->getMacro(t.cs(), false) != 0));
 
@@ -2000,7 +2001,10 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                                        new InsetMathBig(t.cs(), delim)));
                                        else {
                                                cell->push_back(createInsetMath(t.cs(), buf));
-                                               putback();
+                                               // For some reason delim.empty()
+                                               // is always false here
+                                               if (delim.at(0))
+                                                       putback();
                                        }
                                }
 
@@ -2030,6 +2034,12 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                        putback();
                                }
 
+                               else if (l->inset == "underset" || l->inset == "overset") {
+                                       cell->push_back(createInsetMath(t.cs(), buf));
+                                       parse(cell->back().nucleus()->cell(1), FLAG_ITEM, mode);
+                                       parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
+                               }
+
                                else {
                                        MathAtom at = createInsetMath(t.cs(), buf);
                                        for (InsetMath::idx_type i = 0; i < at->nargs(); ++i)
@@ -2073,19 +2083,17 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                                        Encodings::MATH_CMD | Encodings::TEXT_CMD,
                                                        is_combining, termination);
                                        }
-                                       if (c) {
+                                       if (c && buf && buf->params().encoding().encodable(c)) {
                                                if (termination) {
                                                        if (nextToken().cat() == catBegin) {
                                                                getToken();
                                                                if (nextToken().cat() == catEnd) {
                                                                        getToken();
-                                                                       num_tokens += 2;
                                                                } else
                                                                        putback();
                                                        } else {
                                                                while (nextToken().cat() == catSpace) {
                                                                        getToken();
-                                                                       ++num_tokens;
                                                                }
                                                        }
                                                }
@@ -2126,7 +2134,6 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
 
 
                if (flags & FLAG_LEAVE) {
-                       flags &= ~FLAG_LEAVE;
                        break;
                }
        }
@@ -2149,14 +2156,14 @@ char const * latexkeys::MathMLtype() const
 
 bool mathed_parse_cell(MathData & ar, docstring const & str, Parse::flags f)
 {
-       return Parser(str, f, ar.buffer()).parse(ar, 0, f & Parse::TEXTMODE ?
+       return Parser(str, f, ar.buffer()).parse(ar, 0, (f & Parse::TEXTMODE) ?
                                InsetMath::TEXT_MODE : InsetMath::MATH_MODE);
 }
 
 
 bool mathed_parse_cell(MathData & ar, istream & is, Parse::flags f)
 {
-       return Parser(is, f, ar.buffer()).parse(ar, 0, f & Parse::TEXTMODE ?
+       return Parser(is, f, ar.buffer()).parse(ar, 0, (f & Parse::TEXTMODE) ?
                                InsetMath::TEXT_MODE : InsetMath::MATH_MODE);
 }
 
@@ -2178,7 +2185,7 @@ bool mathed_parse_normal(Buffer * buf, MathAtom & t, Lexer & lex,
 bool mathed_parse_normal(InsetMathGrid & grid, docstring const & str,
                         Parse::flags f)
 {
-       return Parser(str, f, &grid.buffer()).parse1(grid, 0, f & Parse::TEXTMODE ?
+       return Parser(str, f, &grid.buffer()).parse1(grid, 0, (f & Parse::TEXTMODE) ?
                        InsetMath::TEXT_MODE : InsetMath::MATH_MODE, false);
 }