]> git.lyx.org Git - features.git/blobdiff - src/insets/InsetPreview.cpp
Really fix bug #9354
[features.git] / src / insets / InsetPreview.cpp
index 1b3456eac947f3e3d415e52a4afdb28fdefd023b..36e866c37cfa142f887299773c3aed22d067fa6a 100644 (file)
 
 #include "graphics/PreviewImage.h"
 
+#include "mathed/MacroTable.h"
+
+#include "support/lstrings.h"
+
 #include <sstream>
 
 using namespace std;
 
 namespace lyx {
 
+using support::prefixIs;
+
 
 InsetPreview::InsetPreview(Buffer * buf) 
        : InsetText(buf),
@@ -70,10 +76,33 @@ void InsetPreview::preparePreview(DocIterator const & pos) const
        TexRow texrow;
        odocstringstream str;
        otexstream os(str, texrow);
-       OutputParams runparams(&pos.buffer()->params().encoding());
+       Buffer const * buffer = pos.buffer();
+       OutputParams runparams(&buffer->params().encoding());
        latex(os, runparams);
-       docstring const snippet = str.str();
-       preview_->addPreview(snippet, *pos.buffer());
+       // collect macros at this position in case they are used in a math inset
+       MacroNameSet macros;
+       buffer->listMacroNames(macros);
+       MacroNameSet::iterator it = macros.begin();
+       MacroNameSet::iterator end = macros.end();
+       docstring macro_preamble;
+       for (; it != end; ++it) {
+               MacroData const * data = buffer->getMacro(*it, pos, true);
+               if (data) {
+                       odocstringstream macro_def;
+                       data->write(macro_def, false);
+                       docstring const md = macro_def.str();
+                       macro_def << endl;
+                       bool is_newcomm = prefixIs(md, from_ascii("\\newcomm"));
+                       // assure that \newcommand defs are only added once
+                       if (!is_newcomm || !preview_->hasMacroDef(md, *buffer)) {
+                               if (is_newcomm)
+                                       preview_->addMacroDef(md, *buffer);
+                               macro_preamble.append(macro_def.str());
+                       }
+               }
+       }
+       docstring const snippet = macro_preamble + str.str();
+       preview_->addPreview(snippet, *buffer);
 }