]> git.lyx.org Git - features.git/blobdiff - src/insets/InsetListings.cpp
InsetIndex: Some comments and indentation fixes
[features.git] / src / insets / InsetListings.cpp
index cff7bcc9c1b9232a5f8a5e300f4657c4f0f63ff8..67a046208542ce222b671301be29e2c78a73379e 100644 (file)
 #include "Buffer.h"
 #include "BufferView.h"
 #include "BufferParams.h"
-#include "Counters.h"
 #include "Cursor.h"
-#include "DispatchResult.h"
 #include "Encoding.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
 #include "InsetCaption.h"
 #include "InsetLabel.h"
+#include "InsetLayout.h"
 #include "Language.h"
 #include "LaTeXFeatures.h"
 #include "Lexer.h"
 #include "output_latex.h"
 #include "output_docbook.h"
 #include "output_xhtml.h"
-#include "OutputParams.h"
-#include "TextClass.h"
 #include "TexRow.h"
 #include "texstream.h"
 
@@ -44,8 +41,8 @@
 #include "frontends/alert.h"
 #include "frontends/Application.h"
 
-#include "support/regex.h"
-
+#include <cstring>
+#include <regex>
 #include <sstream>
 
 using namespace std;
@@ -68,7 +65,7 @@ InsetListings::~InsetListings()
 }
 
 
-Inset::RowFlags InsetListings::rowFlags() const
+int InsetListings::rowFlags() const
 {
        return params().isInline() || params().isFloat() ? Inline : Display | AlignLeft;
 }
@@ -316,9 +313,11 @@ void InsetListings::latex(otexstream & os, OutputParams const & runparams) const
                        }
                }
                ++par;
-               // for the inline case, if there are multiple paragraphs
+               // Add new line between paragraphs in displayed listings.
+               // Exception: merged paragraphs in change tracking mode.
+               // Also, for the inline case, if there are multiple paragraphs
                // they are simply joined. Otherwise, expect latex errors.
-               if (par != end && !isInline && !captionline)
+               if (par != end && !isInline && !captionline && !par->parEndChange().deleted())
                        code += "\n";
        }
        if (isInline) {
@@ -482,42 +481,6 @@ docstring InsetListings::xhtml(XMLStream & os, OutputParams const & rp) const
 }
 
 
-namespace {
-
-const InsetLabel* findLabelInParagraph(const Paragraph &par)
-{
-       for (pos_type pos = 0; pos < par.size(); ++pos) {
-               const Inset *inset = par.getInset(pos);
-
-               // Maybe an inset is directly a label, in which case no more work is needed.
-               if (inset && dynamic_cast<const InsetLabel *>(inset))
-                       return dynamic_cast<const InsetLabel *>(inset);
-
-               // More likely, the label is hidden in an inset of a paragraph (only if a subtype of InsetText).
-               if (!dynamic_cast<const InsetText *>(inset))
-                       continue;
-
-               auto insetAsText = dynamic_cast<const InsetText *>(inset);
-               auto itIn = insetAsText->paragraphs().begin();
-               auto endIn = insetAsText->paragraphs().end();
-               for (; itIn != endIn; ++itIn) {
-                       for (pos_type posIn = 0; posIn < itIn->size(); ++posIn) {
-                               const Inset *insetIn = itIn->getInset(posIn);
-                               if (insetIn && dynamic_cast<const InsetLabel *>(insetIn)) {
-                                       return dynamic_cast<const InsetLabel *>(insetIn);
-                               }
-                       }
-               }
-
-               // Obviously, this solution does not scale with more levels of paragraphs-insets, but this should be enough.
-       }
-
-       return nullptr;
-}
-
-} // anonymous namespace
-
-
 void InsetListings::docbook(XMLStream & xs, OutputParams const & rp) const
 {
        InsetLayout const & il = getLayout();
@@ -531,14 +494,7 @@ void InsetListings::docbook(XMLStream & xs, OutputParams const & rp) const
        // TODO: parts of this code could be merged with InsetFloat and findLabelInParagraph.
        InsetCaption const * caption = getCaptionInset();
        if (caption) {
-               // Find the label in the caption, if any.
-               InsetLabel const * label;
-               auto const end = caption->paragraphs().end();
-               for (auto it = caption->paragraphs().begin(); it != end; ++it) {
-                       label = findLabelInParagraph(*it);
-                       if (label)
-                               break;
-               }
+               InsetLabel const * label = getLabelInset();
 
                // Ensure that the label will not be output a second time as an anchor.
                OutputParams rpNoLabel = rp;
@@ -651,10 +607,10 @@ bool InsetListings::getStatus(Cursor & cur, FuncRequest const & cmd,
 docstring const InsetListings::buttonLabel(BufferView const & bv) const
 {
        // FIXME UNICODE
-       if (decoration() == InsetLayout::CLASSIC)
-               return isOpen(bv) ? _("Listing") : getNewLabel(_("Listing"));
-       else
-               return getNewLabel(_("Listing"));
+       docstring const locked = tempfile_ ? docstring(1, 0x1F512) : docstring();
+       if (decoration() == InsetDecoration::CLASSIC)
+               return locked + (isOpen(bv) ? _("Listing") : getNewLabel(_("Listing")));
+       return locked + getNewLabel(_("Listing"));
 }