}
+CtObject InsetFloat::getCtObject(OutputParams const &) const
+{
+ return CtObject::OmitObject;
+}
+
+
LyXAlignment InsetFloat::contentAlignment() const
{
LyXAlignment align = LYX_ALIGN_NONE;
if (runparams.inDeletedInset) {
// This has to be done manually since we need it inside the float
- OutputParams::CtObject ctobject = runparams.ctObject;
- runparams.ctObject = OutputParams::CT_DISPLAYOBJECT;
+ CtObject ctobject = runparams.ctObject;
+ runparams.ctObject = CtObject::DisplayObject;
Changes::latexMarkChange(os, buffer().params(), Change(Change::UNCHANGED),
Change(Change::DELETED), runparams);
runparams.ctObject = ctobject;
}
-void docbookNoSubfigures(XMLStream & xs, OutputParams const & runparams, const InsetCaption * caption,
- const InsetLabel * label, Floating const & ftype, const InsetFloat * thisFloat)
+void docbookGenerateFillerMedia(XMLStream & xs)
{
- string const &titleTag = ftype.docbookCaption();
+ xs << xml::StartTag("mediaobject");
+ xs << xml::CR();
+ xs << xml::StartTag("textobject");
+ xs << xml::CR();
+ xs << xml::StartTag("phrase");
+ xs << "This figure is empty.";
+ xs << xml::EndTag("phrase");
+ xs << xml::CR();
+ xs << xml::EndTag("textobject");
+ xs << xml::CR();
+ xs << xml::EndTag("mediaobject");
+ xs << xml::CR();
+}
+
+
+void docbookGenerateFillerTable(XMLStream & xs, BufferParams::TableOutput format)
+{
+ switch (format) {
+ case BufferParams::HTMLTable:
+ xs << xml::StartTag("tr");
+ xs << xml::CR();
+ xs << xml::StartTag("td");
+ xs << "This table is empty.";
+ xs << xml::EndTag("td");
+ xs << xml::CR();
+ xs << xml::EndTag("tr");
+ xs << xml::CR();
+ break;
+ case BufferParams::CALSTable:
+ // CALS tables allow for <mediaobject>, use that instead.
+ docbookGenerateFillerMedia(xs);
+ break;
+ }
+}
+
+void docbookNoSubfigures(XMLStream & xs, OutputParams const & runparams, const InsetCaption * caption,
+ const InsetLabel * label, Floating const & ftype, const InsetFloat * thisFloat) {
// Ensure there is no label output, it is supposed to be handled as xml:id.
OutputParams rpNoLabel = runparams;
if (label)
rpNoTitle.docbook_in_table = true;
// Generate the contents of the float (to check for emptiness).
- odocstringstream os2;
- XMLStream xs2(os2);
- thisFloat->InsetText::docbook(xs, rpNoTitle);
+ odocstringstream osFloatContent;
+ bool hasFloat = false;
+
+ if (thisFloat) {
+ XMLStream xsFloatContent(osFloatContent);
+ thisFloat->InsetText::docbook(xsFloatContent, rpNoTitle);
+ hasFloat = !osFloatContent.str().empty();
+ }
+
+ // Do the same for the caption.
+ odocstringstream osCaptionContent;
+ bool hasCaption = false;
- // Organisation: <float> <title if any/> <contents without title/> </float>.
+ if (caption != nullptr) {
+ XMLStream xsCaptionContent(osCaptionContent);
+ caption->getCaptionAsDocBook(xsCaptionContent, rpNoLabel);
+ hasCaption = !osCaptionContent.str().empty();
+ }
+
+ // Organisation: <float with xml:id if any> <title if any/> <contents without title nor xml:id/> </float>.
+ // Titles and xml:id are generated with specific insets and must be dealt with using OutputParams.
+
+ // - Generate the attributes for the float tag.
docstring attr = docstring();
if (label)
attr += "xml:id=\"" + xml::cleanID(label->screenLabel()) + "\"";
attr += from_utf8(ftype.docbookAttr());
}
- xs << xml::StartTag(ftype.docbookTag(caption != nullptr), attr);
+ // - Open the float tag.
+ xs << xml::StartTag(ftype.docbookTag(hasCaption), attr);
xs << xml::CR();
- if (caption) {
+
+ // - Generate the caption.
+ if (hasCaption) {
+ string const &titleTag = ftype.docbookCaption();
xs << xml::StartTag(titleTag);
- caption->getCaptionAsDocBook(xs, rpNoLabel);
+ xs << XMLStream::ESCAPE_NONE << osCaptionContent.str();
xs << xml::EndTag(titleTag);
xs << xml::CR();
}
- if (!os2.str().empty()) {
- xs << XMLStream::ESCAPE_NONE << os2.str();
- } else {
- xs << xml::StartTag("mediaobject");
- xs << xml::CR();
- xs << xml::StartTag("textobject");
- xs << xml::CR();
- xs << xml::StartTag("phrase");
- xs << "This figure is empty.";
- xs << xml::EndTag("phrase");
- xs << xml::CR();
- xs << xml::EndTag("textobject");
- xs << xml::CR();
- xs << xml::EndTag("mediaobject");
- xs << xml::CR();
- }
+ // - Output the actual content of the float or some dummy content (to ensure that the output
+ // document is valid).
+ if (hasFloat)
+ xs << XMLStream::ESCAPE_NONE << osFloatContent.str();
+ else if (ftype.docbookFloatType() == "table")
+ docbookGenerateFillerTable(xs, thisFloat->buffer().params().docbook_table_output);
+ else
+ docbookGenerateFillerMedia(xs);
- xs << xml::EndTag(ftype.docbookTag(caption != nullptr));
+ // - Close the float.
+ xs << xml::EndTag(ftype.docbookTag(hasCaption));
xs << xml::CR();
}
void InsetFloat::docbook(XMLStream & xs, OutputParams const & runparams) const
{
-// if (runparams.docbook_in_par) {
-// xs << xml::EndTag("para");
-// xs << xml::CR();
-// }
-
const InsetCaption* caption = getCaptionInset();
const InsetLabel* label = getLabelInset();
docbookSubfigures(xs, runparams, caption, label, subfigures);
else
docbookNoSubfigures(xs, runparams, caption, label, ftype, this);
-
-// if (runparams.docbook_in_par) {
-// xs << xml::CR();
-// xs << xml::StartTag("para");
-// }
}
void InsetFloat::setNewLabel()
{
- docstring lab = _("float: ");
+ docstring lab = _("Float: ");
if (params_.subfloat)
- lab = _("subfloat: ");
+ lab = _("Subfloat: ");
lab += floatName(params_.type);