DocBook: ensure xml:id is not output too many times.

This is mostly important for subfigures, but debugging this issue showed that InsetCaption could be slightly simplified and InsetLabel should be made a tad more robust.
This commit is contained in:
Thibaut Cuvelier 2020-09-11 23:38:11 +02:00
parent d0a5ba4859
commit 8758000641
3 changed files with 7 additions and 5 deletions

View File

@ -367,8 +367,7 @@ void InsetCaption::getCaptionAsDocBook(XMLStream & xs,
return;
// Ignore full_label_, as the DocBook processor will deal with the numbering.
InsetText::XHTMLOptions const opts =
InsetText::WriteLabel | InsetText::WriteInnerTag;
InsetText::XHTMLOptions opts = InsetText::WriteInnerTag;
InsetText::docbook(xs, runparams, opts);
}

View File

@ -583,7 +583,7 @@ void docbookSubfigures(XMLStream & xs, OutputParams const & runparams, const Ins
xs << xml::StartTag("formalgroup", attr);
xs << xml::CR();
xs << xml::StartTag("title", attr);
xs << xml::StartTag("title"); // Don't take attr here, the ID should only go in one place, not two.
if (caption) {
caption->getCaptionAsDocBook(xs, rpNoLabel);
} else {

View File

@ -356,8 +356,11 @@ int InsetLabel::plaintext(odocstringstream & os,
void InsetLabel::docbook(XMLStream & xs, OutputParams const & runparams) const
{
// Output an anchor only if it has not been processed before.
if (runparams.docbook_anchors_to_ignore.find(getParam("name")) == runparams.docbook_anchors_to_ignore.end()) {
docstring attr = from_utf8("xml:id=\"") + xml::cleanID(getParam("name")) + from_utf8("\"");
docstring id = getParam("name");
docstring cleaned_id = xml::cleanID(id);
if (runparams.docbook_anchors_to_ignore.find(id) == runparams.docbook_anchors_to_ignore.end() &&
runparams.docbook_anchors_to_ignore.find(cleaned_id) == runparams.docbook_anchors_to_ignore.end()) {
docstring attr = from_utf8("xml:id=\"") + cleaned_id + from_utf8("\"");
xs << xml::CompTag("anchor", to_utf8(attr));
}
}