]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetLabel.cpp
de.po
[lyx.git] / src / insets / InsetLabel.cpp
index cb419f397d88fa2f3f56e86b982b00f0bfe348a4..6d5c0b6ddde9a1f1392772dbd52515caf5b0e4e2 100644 (file)
@@ -28,6 +28,7 @@
 #include "output_xhtml.h"
 #include "ParIterator.h"
 #include "sgml.h"
+#include "texstream.h"
 #include "Text.h"
 #include "TextClass.h"
 #include "TocBackend.h"
@@ -82,10 +83,11 @@ void InsetLabel::uniqueLabel(docstring & label) const
 }
 
 
-void InsetLabel::updateLabel(docstring const & new_label)
+void InsetLabel::updateLabel(docstring const & new_label, bool const active)
 {
        docstring label = new_label;
-       uniqueLabel(label);
+       if (active)
+               uniqueLabel(label);
        setParam("name", label);
 }
 
@@ -146,14 +148,16 @@ void InsetLabel::updateBuffer(ParIterator const & par, UpdateType utype)
 {
        docstring const & label = getParam("name");
 
-       // Check if this one is deleted (ct)
+       // Check if this one is active (i.e., neither deleted with change-tracking
+       // nor in an inset that does not produce output, such as notes or inactive branches)
        Paragraph const & para = par.paragraph();
-       bool active = !para.isDeleted(par.pos());
-       // If not, check whether we are in a deleted inset
+       bool active = !para.isDeleted(par.pos()) && para.inInset().producesOutput();
+       // If not, check whether we are in a deleted/non-outputting inset
        if (active) {
                for (size_type sl = 0 ; sl < par.depth() ; ++sl) {
                        Paragraph const & outer_par = par[sl].paragraph();
-                       if (outer_par.isDeleted(par[sl].pos())) {
+                       if (outer_par.isDeleted(par[sl].pos())
+                           || !outer_par.inInset().producesOutput()) {
                                active = false;
                                break;
                        }
@@ -291,6 +295,22 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd)
 }
 
 
+void InsetLabel::latex(otexstream & os, OutputParams const & runparams_in) const
+{
+       OutputParams runparams = runparams_in;
+       docstring command = getCommand(runparams);
+       // In macros with moving arguments, such as \section,
+       // we store the label and output it after the macro (#2154)
+       if (runparams_in.postpone_fragile_stuff)
+               runparams_in.post_macro += command;
+       else {
+               if (runparams.moving_arg)
+                       os << "\\protect";
+               os << command;
+       }
+}
+
+
 int InsetLabel::plaintext(odocstringstream & os,
         OutputParams const &, size_t) const
 {