X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetERT.cpp;h=a023f7a464af403154af95fa6ae37737f977997e;hb=85946aae;hp=61b3128ffb82451f6935e3b5d325f7a05c22c8af;hpb=c145665832bfd8e4abf93136dd39c5b0eab4002b;p=lyx.git diff --git a/src/insets/InsetERT.cpp b/src/insets/InsetERT.cpp index 61b3128ffb..a023f7a464 100644 --- a/src/insets/InsetERT.cpp +++ b/src/insets/InsetERT.cpp @@ -25,16 +25,15 @@ #include "Lexer.h" #include "LyXAction.h" #include "OutputParams.h" +#include "xml.h" #include "ParagraphParameters.h" #include "Paragraph.h" -#include "TextClass.h" +#include -#include "frontends/alert.h" -#include "frontends/Application.h" - -#include "support/debug.h" +#include "support/docstream.h" #include "support/gettext.h" #include "support/lstrings.h" +#include "support/TempFile.h" #include @@ -44,20 +43,26 @@ using namespace lyx::support; namespace lyx { InsetERT::InsetERT(Buffer * buf, CollapseStatus status) - : InsetCollapsable(buf) + : InsetCollapsible(buf) { status_ = status; } +InsetERT::InsetERT(InsetERT const & old) + : InsetCollapsible(old) +{} + + void InsetERT::write(ostream & os) const { os << "ERT" << "\n"; - InsetCollapsable::write(os); + InsetCollapsible::write(os); } -int InsetERT::plaintext(odocstream & os, OutputParams const & rp) const +int InsetERT::plaintext(odocstringstream & os, + OutputParams const & rp, size_t max_length) const { if (!rp.inIndexEntry) // do not output TeX code @@ -66,7 +71,7 @@ int InsetERT::plaintext(odocstream & os, OutputParams const & rp) const ParagraphList::const_iterator par = paragraphs().begin(); ParagraphList::const_iterator end = paragraphs().end(); - while (par != end) { + while (par != end && os.str().size() <= max_length) { pos_type siz = par->size(); for (pos_type i = 0; i < siz; ++i) { char_type const c = par->getChar(i); @@ -87,25 +92,30 @@ int InsetERT::plaintext(odocstream & os, OutputParams const & rp) const } -int InsetERT::docbook(odocstream & os, OutputParams const &) const +void InsetERT::docbook(XMLStream & xs, OutputParams const & runparams) const { - // FIXME can we do the same thing here as for LaTeX? - ParagraphList::const_iterator par = paragraphs().begin(); - ParagraphList::const_iterator end = paragraphs().end(); + auto const begin = paragraphs().begin(); + auto par = begin; + auto const end = paragraphs().end(); - int lines = 0; + odocstringstream os2; + XMLStream xs2(os2); + + // Recreate the logic of makeParagraphs in output_docbook.cpp, but much simplified: never open + // in an ERT, use simple line breaks. while (par != end) { - pos_type siz = par->size(); - for (pos_type i = 0; i < siz; ++i) - os.put(par->getChar(i)); + par->simpleDocBookOnePar(buffer(), xs2, runparams, text().outerFont(distance(begin, par))); + + // New line after each paragraph of the ERT, save the last one. ++par; - if (par != end) { - os << "\n"; - ++lines; - } + if (par != end) + xs << "\n"; } - return lines; + // Output the ERT as a comment with the appropriate escaping. + xs << XMLStream::ESCAPE_NONE << ""; } @@ -114,12 +124,13 @@ void InsetERT::doDispatch(Cursor & cur, FuncRequest & cmd) switch (cmd.action()) { case LFUN_INSET_MODIFY: if (cmd.getArg(0) == "ert") { + cur.recordUndoInset(this); setStatus(cur, string2params(to_utf8(cmd.argument()))); break; } //fall-through default: - InsetCollapsable::doDispatch(cur, cmd); + InsetCollapsible::doDispatch(cur, cmd); break; } @@ -130,6 +141,9 @@ bool InsetERT::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { + case LFUN_INSET_INSERT: + status.setEnabled(false); + return true; case LFUN_INSET_MODIFY: if (cmd.getArg(0) == "ert") { status.setEnabled(true); @@ -138,11 +152,12 @@ bool InsetERT::getStatus(Cursor & cur, FuncRequest const & cmd, //fall through default: - return InsetCollapsable::getStatus(cur, cmd, status); + return InsetCollapsible::getStatus(cur, cmd, status); } } + docstring const InsetERT::buttonLabel(BufferView const & bv) const { if (decoration() == InsetLayout::CLASSIC) @@ -152,7 +167,7 @@ docstring const InsetERT::buttonLabel(BufferView const & bv) const } -InsetCollapsable::CollapseStatus InsetERT::string2params(string const & in) +InsetCollapsible::CollapseStatus InsetERT::string2params(string const & in) { if (in.empty()) return Collapsed; @@ -175,7 +190,7 @@ string InsetERT::params2string(CollapseStatus status) } -docstring InsetERT::xhtml(XHTMLStream &, OutputParams const &) const +docstring InsetERT::xhtml(XMLStream &, OutputParams const &) const { return docstring(); }