]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetListings.cpp
Improve handling of top and bottom margin
[lyx.git] / src / insets / InsetListings.cpp
index f2af5813bd625e30bde7c0729fb8476526a491d8..848e4ae45a6bfaf2e0e8c5bffd2304e5b1726c11 100644 (file)
@@ -27,6 +27,7 @@
 #include "LaTeXFeatures.h"
 #include "Lexer.h"
 #include "output_latex.h"
+#include "output_docbook.h"
 #include "output_xhtml.h"
 #include "OutputParams.h"
 #include "TextClass.h"
@@ -66,9 +67,9 @@ InsetListings::~InsetListings()
 }
 
 
-Inset::DisplayType InsetListings::display() const
+Inset::RowFlags InsetListings::rowFlags() const
 {
-       return params().isInline() || params().isFloat() ? Inline : AlignLeft;
+       return params().isInline() || params().isFloat() ? Inline : Display | AlignLeft;
 }
 
 
@@ -433,21 +434,21 @@ void InsetListings::latex(otexstream & os, OutputParams const & runparams) const
 }
 
 
-docstring InsetListings::xhtml(XHTMLStream & os, OutputParams const & rp) const
+docstring InsetListings::xhtml(XMLStream & os, OutputParams const & rp) const
 {
        odocstringstream ods;
-       XHTMLStream out(ods);
+       XMLStream out(ods);
 
        bool const isInline = params().isInline();
        if (isInline)
-               out << html::CompTag("br");
+               out << xml::CompTag("br");
        else {
-               out << html::StartTag("div", "class='float-listings'");
+               out << xml::StartTag("div", "class='float-listings'");
                docstring caption = getCaptionHTML(rp);
                if (!caption.empty())
-                       out << html::StartTag("div", "class='listings-caption'")
-                           << XHTMLStream::ESCAPE_NONE
-                           << caption << html::EndTag("div");
+                       out << xml::StartTag("div", "class='listings-caption'")
+                           << XMLStream::ESCAPE_NONE
+                           << caption << xml::EndTag("div");
        }
 
        InsetLayout const & il = getLayout();
@@ -457,21 +458,21 @@ docstring InsetListings::xhtml(XHTMLStream & os, OutputParams const & rp) const
        if (!lang.empty())
                attr += " " + lang;
        attr += "'";
-       out << html::StartTag(tag, attr);
+       out << xml::StartTag(tag, attr);
        OutputParams newrp = rp;
        newrp.html_disable_captions = true;
        // We don't want to convert dashes here. That's the only conversion we
        // do for XHTML, so this is safe.
        newrp.pass_thru = true;
        docstring def = InsetText::insetAsXHTML(out, newrp, InsetText::JustText);
-       out << html::EndTag(tag);
+       out << xml::EndTag(tag);
 
        if (isInline) {
-               out << html::CompTag("br");
+               out << xml::CompTag("br");
                // escaping will already have been done
-               os << XHTMLStream::ESCAPE_NONE << ods.str();
+               os << XMLStream::ESCAPE_NONE << ods.str();
        } else {
-               out << html::EndTag("div");
+               out << xml::EndTag("div");
                // In this case, this needs to be deferred, but we'll put it
                // before anything the text itself deferred.
                def = ods.str() + '\n' + def;
@@ -480,6 +481,45 @@ docstring InsetListings::xhtml(XHTMLStream & os, OutputParams const & rp) const
 }
 
 
+void InsetListings::docbook(XMLStream & xs, OutputParams const & rp) const
+{
+       InsetLayout const & il = getLayout();
+
+       // Forge the attributes.
+       string attrs;
+       if (!il.docbookattr().empty())
+               attrs += " role=\"" + il.docbookattr() + "\"";
+       string const lang = params().getParamValue("language");
+       if (!lang.empty())
+               attrs += " language=\"" + lang + "\"";
+       xs << xml::StartTag(il.docbooktag(), attrs);
+       xs.startDivision(false);
+
+       // Deal with the caption.
+       docstring caption = getCaptionDocBook(rp);
+       if (!caption.empty()) {
+               xs << xml::StartTag("bridgehead");
+               xs << XMLStream::ESCAPE_NONE;
+               xs << caption;
+               xs << xml::EndTag("bridgehead");
+       }
+
+       // Deal with the content of the listing.
+       OutputParams newrp = rp;
+       newrp.pass_thru = true;
+       newrp.docbook_make_pars = false;
+       newrp.par_begin = 0;
+       newrp.par_end = text().paragraphs().size();
+       newrp.docbook_in_listing = true;
+
+       docbookParagraphs(text(), buffer(), xs, newrp);
+
+       // Done with the listing.
+       xs.endDivision();
+       xs << xml::EndTag(il.docbooktag());
+}
+
+
 string InsetListings::contextMenuName() const
 {
        return "context-listings";