]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetListings.cpp
Rewrite the label numbering code.
[lyx.git] / src / insets / InsetListings.cpp
index 60dc22eb64796424b845a12964b52ddf5723584d..e756d4fb7b5c462890aad16e0fa9709ca1a6d929 100644 (file)
@@ -14,6 +14,9 @@
 #include "InsetListings.h"
 #include "InsetCaption.h"
 
+#include "Buffer.h"
+#include "BufferParams.h"
+#include "Counters.h"
 #include "Language.h"
 #include "gettext.h"
 #include "DispatchResult.h"
@@ -84,6 +87,21 @@ Inset::DisplayType InsetListings::display() const
 }
 
 
+void InsetListings::updateLabels(Buffer const & buf, ParIterator const & it)
+{
+       Counters & cnts = buf.params().getTextClass().counters();
+       string const saveflt = cnts.current_float();
+
+       // Tell to captions what the current float is
+       cnts.current_float("listing");
+
+       InsetCollapsable::updateLabels(buf, it);
+
+       //reset afterwards
+       cnts.current_float(saveflt);
+}
+
+
 void InsetListings::write(Buffer const & buf, ostream & os) const
 {
        os << "listings" << "\n";
@@ -124,7 +142,7 @@ void InsetListings::read(Buffer const & buf, Lexer & lex)
 
 docstring const InsetListings::editMessage() const
 {
-       return _("Opened Listings Inset");
+       return _("Opened Listing Inset");
 }
 
 
@@ -135,7 +153,7 @@ int InsetListings::latex(Buffer const & buf, odocstream & os,
        // NOTE: I use {} to quote text, which is an experimental feature
        // of the listings package (see page 25 of the manual)
        int lines = 0;
-       bool lstinline = params().isInline();
+       bool isInline = params().isInline();
        // get the paragraphs. We can not output them directly to given odocstream
        // because we can not yet determine the delimiter character of \lstinline
        docstring code;
@@ -156,17 +174,17 @@ int InsetListings::latex(Buffer const & buf, odocstream & os,
                ++par;
                // for the inline case, if there are multiple paragraphs
                // they are simply joined. Otherwise, expect latex errors.
-               if (par != end && !lstinline && !captionline) {
+               if (par != end && !isInline && !captionline) {
                        code += "\n";
                        ++lines;
                }
        }
-       char const * delimiter;
-       if (lstinline) {
-               for (delimiter = lstinline_delimiters; delimiter != '\0'; ++delimiter)
+       if (isInline) {
+                char const * delimiter = lstinline_delimiters;
+               for (; delimiter != '\0'; ++delimiter)
                        if (!contains(code, *delimiter))
                                break;
-               // this code piece contains all possible special character? !!!
+               // This code piece contains all possible special character? !!!
                // Replace ! with a warning message and use ! as delimiter.
                if (*delimiter == '\0') {
                        code = subst(code, from_ascii("!"), from_ascii(" WARNING: no lstline delimiter can be used "));
@@ -176,6 +194,8 @@ int InsetListings::latex(Buffer const & buf, odocstream & os,
                        os << "\\lstinline" << *delimiter;
                else
                        os << "\\lstinline[" << from_ascii(param_string) << "]" << *delimiter;
+                os << code
+                   << *delimiter;
        } else {
                docstring const caption = getCaption(buf, runparams);
                if (param_string.empty() && caption.empty())
@@ -190,12 +210,8 @@ int InsetListings::latex(Buffer const & buf, odocstream & os,
                        os << from_utf8(param_string) << "]\n";
                }
                lines += 4;
-       }
-       os << code;
-       if (lstinline)
-               os << *delimiter;
-       else {
-               os << "\n\\end{lstlisting}\n\\endgroup\n";
+                os << code
+                   << "\n\\end{lstlisting}\n\\endgroup\n";
                lines += 3;
        }
 
@@ -248,7 +264,7 @@ bool InsetListings::getStatus(Cursor & cur, FuncRequest const & cmd,
 void InsetListings::setButtonLabel()
 {
        // FIXME UNICODE
-       setLabel(isOpen() ?  _("Listings") : getNewLabel(_("Listings")));
+       setLabel(isOpen() ?  _("Listing") : getNewLabel(_("Listing")));
 }