X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCaption.cpp;h=0850363bc43f98d40f8004b7227a3572411855ec;hb=96dea61f22c04529e726cab36acf0240d41fa778;hp=ee0c3e0d1d24587325b226c43e2953456fff76ec;hpb=361967e613c47b67ea08b0c13a647e7edca70c2d;p=lyx.git diff --git a/src/insets/InsetCaption.cpp b/src/insets/InsetCaption.cpp index ee0c3e0d1d..0850363bc4 100644 --- a/src/insets/InsetCaption.cpp +++ b/src/insets/InsetCaption.cpp @@ -32,6 +32,8 @@ #include "OutputParams.h" #include "Paragraph.h" #include "ParIterator.h" +#include "TexRow.h" +#include "texstream.h" #include "TextClass.h" #include "TextMetrics.h" #include "TocBackend.h" @@ -51,11 +53,11 @@ namespace lyx { InsetCaption::InsetCaption(Buffer * buf, string const & type) - : InsetText(buf, InsetText::PlainLayout), type_(type) + : InsetText(buf, InsetText::PlainLayout), + labelwidth_(0), is_subfloat_(false), type_(type) { - setAutoBreakRows(true); setDrawFrame(true); - setFrameColor(Color_collapsableframe); + setFrameColor(Color_collapsibleframe); } @@ -91,22 +93,25 @@ void InsetCaption::setCustomLabel(docstring const & label) } -void InsetCaption::addToToc(DocIterator const & cpit, bool output_active) const +void InsetCaption::addToToc(DocIterator const & cpit, bool output_active, + UpdateType utype, TocBackend & backend) const { - if (floattype_.empty()) - return; - + string const & type = floattype_.empty() ? "senseless" : floattype_; DocIterator pit = cpit; pit.push_back(CursorSlice(const_cast(*this))); - - Toc & toc = buffer().tocBackend().toc(floattype_); - docstring str = full_label_; - int length = output_active ? INT_MAX : TOC_ENTRY_LENGTH; - text().forOutliner(str, length); - toc.push_back(TocItem(pit, 0, str, output_active)); - + int length = (utype == OutputUpdate) ? + // For output (e.g. xhtml) all (bug #8603) or nothing + (output_active ? INT_MAX : 0) : + // TOC for LyX interface + TOC_ENTRY_LENGTH; + docstring str; + if (length > 0) { + str = full_label_; + text().forOutliner(str, length); + } + backend.builder(type).captionItem(pit, str, output_active); // Proceed with the rest of the inset. - InsetText::addToToc(cpit, output_active); + InsetText::addToToc(cpit, output_active, utype, backend); } @@ -198,12 +203,14 @@ void InsetCaption::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_INSET_MODIFY: { if (cmd.getArg(0) == "changetype") { - cur.recordUndoInset(ATOMIC_UNDO, this); + cur.recordUndoInset(this); type_ = cmd.getArg(1); cur.forceBufferUpdate(); break; } } + // no "changetype": + // fall through default: InsetText::doDispatch(cur, cmd); @@ -222,7 +229,7 @@ bool InsetCaption::getStatus(Cursor & cur, FuncRequest const & cmd, if (first_arg == "changetype") { string const type = cmd.getArg(1); status.setOnOff(type == type_); - bool varia = type != "LongTableNoNumber"; + bool varia = type != "Unnumbered"; // check if the immediate parent inset allows caption variation if (cur.depth() > 1) { varia = cur[cur.depth() - 2].inset().allowsCaptionVariation(type); @@ -299,7 +306,7 @@ docstring InsetCaption::xhtml(XHTMLStream & xs, OutputParams const & rp) const string const our_class = "float-caption-" + type_; size_t const loc = attr.find("class='"); if (loc != string::npos) - attr.insert(loc + 7, our_class+ " "); + attr.insert(loc + 7, our_class + " "); else attr = attr + " class='" + our_class + "'"; } @@ -317,7 +324,7 @@ void InsetCaption::getArgument(otexstream & os, if (!il.leftdelim().empty()) os << il.leftdelim(); - + OutputParams rp = runparams; if (isPassThru()) rp.pass_thru = true; @@ -327,6 +334,8 @@ void InsetCaption::getArgument(otexstream & os, rp.par_end = paragraphs().size(); // Output the contents of the inset + if (!paragraphs().empty()) + os.texrow().forceStart(paragraphs()[0].id(), 0); latexParagraphs(buffer(), text(), os, rp); runparams.encoding = rp.encoding; @@ -369,7 +378,7 @@ void InsetCaption::updateBuffer(ParIterator const & it, UpdateType utype) } // Memorize type for addToToc(). floattype_ = type; - if (type.empty()) + if (type.empty() || type == "senseless") full_label_ = master.B_("Senseless!!! "); else { // FIXME: life would be _much_ simpler if listings was @@ -380,7 +389,7 @@ void InsetCaption::updateBuffer(ParIterator const & it, UpdateType utype) else name = master.B_(tclass.floats().getType(type).name()); docstring counter = from_utf8(type); - if (cnts.isSubfloat()) { + if ((is_subfloat_ = cnts.isSubfloat())) { // only standard captions allowed in subfloats type_ = "Standard"; counter = "sub-" + from_utf8(type); @@ -403,9 +412,9 @@ void InsetCaption::updateBuffer(ParIterator const & it, UpdateType utype) sec += bformat(from_ascii("(%1$s)"), labelstring); } if (!sec.empty()) - full_label_ = bformat(from_ascii("%1$s %2$s:"), name, sec); + full_label_ = bformat(from_ascii("%1$s %2$s: "), name, sec); else - full_label_ = bformat(from_ascii("%1$s #:"), name); + full_label_ = bformat(from_ascii("%1$s #: "), name); } // Do the real work now.