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);
}
void InsetCaption::write(ostream & os) const
{
os << "Caption";
- if (!type_.empty()) {
- os << " "
- << type_;
- }
- os << "\n";
+ if (!type_.empty())
+ os << ' ' << type_;
+ os << '\n';
text().write(os);
}
}
-void InsetCaption::addToToc(DocIterator const & cpit, bool output_active) const
+void InsetCaption::addToToc(DocIterator const & cpit, bool output_active,
+ UpdateType utype) const
{
- if (floattype_.empty())
- return;
-
+ string const & type = floattype_.empty() ? "senseless" : floattype_;
DocIterator pit = cpit;
pit.push_back(CursorSlice(const_cast<InsetCaption &>(*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);
+ }
+ buffer().tocBackend().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);
}
case LFUN_INSET_MODIFY: {
if (cmd.getArg(0) == "changetype") {
- cur.recordUndoInset(ATOMIC_UNDO, this);
+ cur.recordUndoInset(this);
type_ = cmd.getArg(1);
cur.forceBufferUpdate();
break;
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);
return InsetText::getStatus(cur, cmd, status);
}
- case LFUN_PARAGRAPH_BREAK:
- status.setEnabled(false);
- return true;
-
case LFUN_INSET_TOGGLE:
// pass back to owner
cur.undispatched();
// \caption{...}, later we will make it take advantage
// of the one of the caption packages. (Lgb)
OutputParams runparams = runparams_in;
- // FIXME: actually, it is moving only when there is no
- // optional argument.
- runparams.moving_arg = !runparams.inTableCell;
InsetText::latex(os, runparams);
// Backwards compatibility: We always had a linebreak after
// the caption (see #8514)
if (rp.html_disable_captions)
return docstring();
InsetLayout const & il = getLayout();
- string const tag = il.htmltag();
+ string const & tag = il.htmltag();
string attr = il.htmlattr();
if (!type_.empty()) {
string const our_class = "float-caption-" + type_;
if (!il.leftdelim().empty())
os << il.leftdelim();
-
+
OutputParams rp = runparams;
if (isPassThru())
rp.pass_thru = true;
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;
OutputParams const & runparams) const
{
xs << full_label_ << ' ';
- InsetText::XHTMLOptions const opts =
+ InsetText::XHTMLOptions const opts =
InsetText::WriteLabel | InsetText::WriteInnerTag;
return InsetText::insetAsXHTML(xs, runparams, opts);
}
}
// 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
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);
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.