]> git.lyx.org Git - features.git/commitdiff
Fix bug #7183 (User math macros defined in child documents are shadowed on loading)
authorEnrico Forestieri <forenr@lyx.org>
Sat, 18 Dec 2010 02:27:25 +0000 (02:27 +0000)
committerEnrico Forestieri <forenr@lyx.org>
Sat, 18 Dec 2010 02:27:25 +0000 (02:27 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36930 a592a061-630c-0410-9148-cb99ea01b6c8

src/Buffer.cpp
src/Buffer.h
src/mathed/MathParser.cpp

index 9efb2d4c7917be8c48826801a9c44210c1ca7d4f..f52423d24d6ee35a16bf02f4997f9f33b14e57aa 100644 (file)
@@ -820,7 +820,6 @@ bool Buffer::readDocument(Lexer & lex)
        // read main text
        bool const res = text().read(lex, errorList, d->inset);
 
-       usermacros.clear();
        updateMacros();
        updateMacroInstances();
        return res;
index d0d787687c94510f5ada9c1339be7bbb313c7c90..e79856609ff18fb58c3c7e830b6c108d125c08dd 100644 (file)
@@ -542,10 +542,6 @@ public:
        /// Return macro defined before the inclusion of the child
        MacroData const * getMacro(docstring const & name, Buffer const & child, bool global = true) const;
 
-       /// Collect user macro names at loading time
-       typedef std::set<docstring> UserMacroSet;
-       UserMacroSet usermacros;
-
        /// Replace the inset contents for insets which InsetCode is equal
        /// to the passed \p inset_code.
        void changeRefsIfUnique(docstring const & from, docstring const & to,
index 4767dc1536cc6ae5bce7de6896307d7e6641902a..f86a762be83e865f76c78ca856fc44021f416125 100644 (file)
@@ -1060,9 +1060,6 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        cell->push_back(MathAtom(new MathMacroTemplate(buf,
                                name, nargs, 0, MacroTypeDef,
                                vector<MathData>(), def, display)));
-
-                       if (buf && (mode_ & Parse::TRACKMACRO))
-                               buf->usermacros.insert(name);
                }
                
                else if (t.cs() == "newcommand" ||
@@ -1108,9 +1105,6 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        cell->push_back(MathAtom(new MathMacroTemplate(buf,
                                name, nargs, optionals, MacroTypeNewcommand,
                                optionalValues, def, display)));
-
-                       if (buf && (mode_ & Parse::TRACKMACRO))
-                               buf->usermacros.insert(name);
                }
                
                else if (t.cs() == "newcommandx" ||
@@ -1229,9 +1223,6 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                        cell->push_back(MathAtom(new MathMacroTemplate(buf,
                                name, nargs, optionals, MacroTypeNewcommandx,
                                optionalValues, def, display)));
-
-                       if (buf && (mode_ & Parse::TRACKMACRO))
-                               buf->usermacros.insert(name);
                }
 
                else if (t.cs() == "(") {
@@ -1830,14 +1821,14 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                }
 
                else if (t.cs().size()) {
-                       bool const no_mhchem =
-                               (t.cs() == "ce" || t.cs() == "cf") && buf
-                               && buf->params().use_mhchem == BufferParams::package_off;
-                       bool const is_user_macro = no_mhchem ||
-                               (buf && (mode_ & Parse::TRACKMACRO
-                                       ? buf->usermacros.count(t.cs()) != 0
-                                       : buf->getMacro(t.cs(), false) != 0));
                        latexkeys const * l = in_word_set(t.cs());
+
+                       if (buf && (mode_ & Parse::TRACKMACRO) && l)
+                               buf->updateMacros();
+
+                       bool const is_user_macro =
+                               (buf && buf->getMacro(t.cs(), false) != 0);
+
                        if (l && !is_user_macro) {
                                if (l->inset == "big") {
                                        skipSpaces();