X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetFloat.cpp;h=beb5e0b5571e1b2d63508eafef0d52f2fcb0a9b8;hb=a25569ebb3e739779ff458b287e403c3bf79777a;hp=2292d175c99b88a8046f6995fe3dfe6f438a5478;hpb=838af80834ac38c231ff080acc3a6d60ad664ede;p=lyx.git diff --git a/src/insets/InsetFloat.cpp b/src/insets/InsetFloat.cpp index 2292d175c9..beb5e0b557 100644 --- a/src/insets/InsetFloat.cpp +++ b/src/insets/InsetFloat.cpp @@ -119,7 +119,7 @@ InsetFloat::InsetFloat(Buffer * buf, string params_str) } -docstring InsetFloat::name() const +docstring InsetFloat::layoutName() const { return "Float:" + from_utf8(params_.type); } @@ -189,6 +189,12 @@ bool InsetFloat::getStatus(Cursor & cur, FuncRequest const & cmd, return true; } else return false; + + case LFUN_NEWLINE_INSERT: + if (params_.subfloat) { + flag.setEnabled(false); + return true; + } default: return InsetCollapsable::getStatus(cur, cmd, flag); @@ -325,7 +331,7 @@ docstring InsetFloat::xhtml(XHTMLStream & xs, OutputParams const & rp) const } -int InsetFloat::latex(odocstream & os, OutputParams const & runparams_in) const +void InsetFloat::latex(otexstream & os, OutputParams const & runparams_in) const { if (runparams_in.inFloat != OutputParams::NONFLOAT) { if (runparams_in.moving_arg) @@ -339,10 +345,10 @@ int InsetFloat::latex(odocstream & os, OutputParams const & runparams_in) const } os << '{'; rp.inFloat = OutputParams::SUBFLOAT; - int const i = InsetText::latex(os, rp); + InsetText::latex(os, rp); os << "}"; - return i + 1; + return; } OutputParams runparams(runparams_in); runparams.inFloat = OutputParams::MAINFLOAT; @@ -372,32 +378,28 @@ int InsetFloat::latex(odocstream & os, OutputParams const & runparams_in) const placement = buf_placement; } - // The \n is used to force \begin{} to appear in a new line. - // The % is needed to prevent two consecutive \n chars in the case - // when the current output line is empty. - os << "%\n\\begin{" << from_ascii(tmptype) << '}'; + // Force \begin{} to appear in a new line. + os << breakln << "\\begin{" << from_ascii(tmptype) << '}'; + if (runparams.lastid != -1) + os.texrow().start(runparams.lastid, runparams.lastpos); // We only output placement if different from the def_placement. // sidewaysfloats always use their own page - if (!placement.empty() && !params_.sideways) { + if (!placement.empty() && !params_.sideways) os << '[' << from_ascii(placement) << ']'; - } os << '\n'; - int const i = InsetText::latex(os, runparams); + InsetText::latex(os, runparams); - // The \n is used to force \end{} to appear in a new line. - // In this case, we do not case if the current output line is empty. - os << "\n\\end{" << from_ascii(tmptype) << "}\n"; - - return i + 4; + // Force \end{} to appear in a new line. + os << breakln << "\\end{" << from_ascii(tmptype) << "}\n"; } -int InsetFloat::plaintext(odocstream & os, OutputParams const & runparams) const +int InsetFloat::plaintext(odocstringstream & os, OutputParams const & runparams, size_t max_length) const { os << '[' << buffer().B_("float") << ' ' << floatName(params_.type) << ":\n"; - InsetText::plaintext(os, runparams); + InsetText::plaintext(os, runparams, max_length); os << "\n]"; return PLAINTEXT_NEWLINE + 1; // one char on a separate line @@ -474,6 +476,12 @@ void InsetFloat::setNewLabel() } +bool InsetFloat::allowsCaptionVariation(std::string const & newtype) const +{ + return !params_.subfloat && newtype != "LongTableNoNumber"; +} + + docstring InsetFloat::getCaption(OutputParams const & runparams) const { if (paragraphs().empty()) @@ -483,10 +491,19 @@ docstring InsetFloat::getCaption(OutputParams const & runparams) const if (ins == 0) return docstring(); + TexRow texrow; odocstringstream ods; - ins->getOptArg(ods, runparams); + otexstream os(ods, texrow); + ins->getArgs(os, runparams); ods << '['; - ins->getArgument(ods, runparams); + odocstringstream odss; + otexstream oss(odss, texrow); + ins->getArgument(oss, runparams); + docstring arg = odss.str(); + // Protect ']' + if (arg.find(']') != docstring::npos) + arg = '{' + arg + '}'; + ods << arg; ods << ']'; return ods.str(); }