#include "InsetERT.h"
-#include "Buffer.h"
-#include "BufferParams.h"
-#include "BufferView.h"
#include "Cursor.h"
-#include "DispatchResult.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
+#include "InsetLayout.h"
#include "Language.h"
-#include "Layout.h"
#include "Lexer.h"
-#include "LyXAction.h"
-#include "OutputParams.h"
#include "xml.h"
#include "ParagraphParameters.h"
#include "Paragraph.h"
-#include <output_docbook.h>
+#include "output_docbook.h"
#include "support/docstream.h"
#include "support/gettext.h"
#include <sstream>
+#include <iostream>
+
using namespace std;
using namespace lyx::support;
auto par = begin;
auto const end = paragraphs().end();
- odocstringstream os2;
- XMLStream xs2(os2);
+ odocstringstream os; // No need for XML handling here.
- // Recreate the logic of makeParagraphs in output_docbook.cpp, but much simplified: never open <para>
+ // Recreate the logic of makeParagraph in output_docbook.cpp, but much simplified: never open <para>
// in an ERT, use simple line breaks.
- while (par != end) {
- par->simpleDocBookOnePar(buffer(), xs2, runparams, text().outerFont(distance(begin, par)));
+ // New line after each paragraph of the ERT, save the last one.
+ while (true) { // For each paragraph in the ERT...
+ std::vector<docstring> pars_prepend;
+ std::vector<docstring> pars;
+ std::vector<docstring> pars_append;
+ tie(pars_prepend, pars, pars_append) = par->simpleDocBookOnePar(buffer(), runparams, text().outerFont(distance(begin, par)), 0, false, true);
+
+ for (docstring const & parXML : pars_prepend)
+ xs << XMLStream::ESCAPE_NONE << parXML;
+ auto p = pars.begin();
+ while (true) { // For each line of this ERT paragraph...
+ os << *p;
+ ++p;
+ if (p != pars.end())
+ os << "\n";
+ else
+ break;
+ }
+ for (docstring const & parXML : pars_append)
+ xs << XMLStream::ESCAPE_NONE << parXML;
- // New line after each paragraph of the ERT, save the last one.
++par;
if (par != end)
- xs << "\n";
+ os << "\n";
+ else
+ break;
}
- // Output the ERT as a comment with the appropriate escaping.
- xs << XMLStream::ESCAPE_NONE << "<!-- ";
- xs << XMLStream::ESCAPE_COMMENTS << os2.str();
- xs << XMLStream::ESCAPE_NONE << " -->";
+// // Implement the special case of \and: split the current item.
+// if (os.str() == "\\and" || os.str() == "\\and ") {
+// auto lay = getLayout();
+// }
+
+ // Output the ERT as a comment with the appropriate escaping if the command is not recognised.
+ if (trim(os.str()) == from_ascii("\\textquotesingle")) {
+ xs << "'";
+ } else {
+ xs << XMLStream::ESCAPE_NONE << "<!-- ";
+ xs << XMLStream::ESCAPE_COMMENTS << os.str();
+ xs << XMLStream::ESCAPE_NONE << " -->";
+ }
}
docstring const InsetERT::buttonLabel(BufferView const & bv) const
{
- if (decoration() == InsetLayout::CLASSIC)
- return isOpen(bv) ? _("ERT") : getNewLabel(_("ERT"));
- else
- return getNewLabel(_("ERT"));
+ // U+1F512 LOCK
+ docstring const locked = tempfile_ ? docstring(1, 0x1F512) : docstring();
+ if (decoration() == InsetDecoration::CLASSIC)
+ return locked + (isOpen(bv) ? _("ERT") : getNewLabel(_("ERT")));
+ return locked + getNewLabel(_("ERT"));
}