]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathHull.cpp
Fix build with GNU libstdc++ C++11 ABI
[lyx.git] / src / mathed / InsetMathHull.cpp
index b9c5b2c2e39a9b6b07f247766a4eee7e3c85c1fc..19206331152f3532a7dd742788dfdf766bece62a 100644 (file)
@@ -637,12 +637,22 @@ void InsetMathHull::preparePreview(DocIterator const & pos,
        buffer->listMacroNames(macros);
        MacroNameSet::iterator it = macros.begin();
        MacroNameSet::iterator end = macros.end();
-       odocstringstream macro_preamble;
+       docstring macro_preamble;
        for (; it != end; ++it) {
                MacroData const * data = buffer->getMacro(*it, pos, true);
                if (data) {
-                       data->write(macro_preamble, true);
-                       macro_preamble << endl;
+                       odocstringstream mac_preamble;
+                       data->write(mac_preamble, false);
+                       docstring const mps = mac_preamble.str();
+                       bool const is_new_def = prefixIs(mps, from_ascii("\\newcomm"));
+                       // assure that \newcommand definitions of macros are only added once
+                       if (!is_new_def || !preview_->hasMacroDef(mps, *buffer)) {
+                               if (is_new_def)
+                                       preview_->addMacroDef(mps, *buffer);
+                               if (!macro_preamble.empty())
+                                       macro_preamble += '\n';
+                               macro_preamble += mps;
+                       }
                }
        }
 
@@ -667,8 +677,7 @@ void InsetMathHull::preparePreview(DocIterator const & pos,
                                          '{' + convert<docstring>(num) + '}';
                }
        }
-       docstring const snippet = macro_preamble.str() +
-           setcnt + latexString(*this);
+       docstring const snippet = macro_preamble + setcnt + latexString(*this);
        LYXERR(Debug::MACROS, "Preview snippet: " << snippet);
        preview_->addPreview(snippet, *buffer, forexport);
 }