}
// Main logic.
- if (openWrapper)
+ if (openWrapper) {
xml::openTag(xs, lay.docbookwrappertag(), lay.docbookwrapperattr(), lay.docbookwrappertagtype());
+ if (lay.docbookgeneratetitle()) {
+ docstring const label = par->params().labelString();
+
+ xml::openTag(xs, "title", "", "paragraph");
+ xs << (!label.empty() ? label : from_ascii("No title"));
+ xml::closeTag(xs, "title", "paragraph");
+ }
+ }
+
const string & tag = lay.docbooktag();
if (tag != "NONE") {
auto xmltag = xml::ParTag(tag, lay.docbookattr());
TABULAR_CODE,
FLOAT_CODE,
BIBTEX_CODE, // Bibliographies cannot be in paragraphs. Bibitems should still be handled as paragraphs,
- // though (see makeParagraphBibliography).
+ // though (see makeBibliography).
ERT_CODE, // ERTs are in comments, not paragraphs.
LISTINGS_CODE,
BOX_CODE,
std::vector<docstring> pars_prepend;
std::vector<docstring> pars;
std::vector<docstring> pars_append;
- tie(pars_prepend, pars, pars_append) = par->simpleDocBookOnePar(buf, runparams, text.outerFont(std::distance(text.paragraphs().begin(), par)), 0, false, ignoreFonts);
+ tie(pars_prepend, pars, pars_append) =
+ par->simpleDocBookOnePar(buf, runparams, text.outerFont(std::distance(text.paragraphs().begin(), par)),
+ 0, false, ignoreFonts);
for (docstring const & parXML : pars_prepend)
xs << XMLStream::ESCAPE_NONE << parXML;
bool documentHasSections = false;
while (bpit < epit) {
- LASSERT(bpit < paragraphs.size(), return make_tuple(documentHasSections, bpit));
+ LASSERT(static_cast<size_t>(bpit) < paragraphs.size(), return make_tuple(documentHasSections, bpit));
Layout const &style = paragraphs[bpit].layout();
documentHasSections |= isLayoutSectioningOrSimilar(style);
// There should never be any section here, except for the first paragraph (a title can be part of <info>).
// (Just a sanity check: if this fails, this function could end up processing the whole document.)
if (cpit != bpit && isLayoutSectioningOrSimilar(par.layout())) {
- LYXERR0("Assertion failed: section found in potential <info> paragraphs.");
+ LYXERR(Debug::OUTFILE, "Assertion failed: section found in potential <info> paragraphs.");
break;
}
}
}
- // Actually output the abstract if there is something to do. Don't count line feeds or spaces in this,
- // even though they must be properly output if there is some abstract.
+ // Actually output the abstract if there is something to do. Don't count line feeds, spaces, or comments
+ // in this -- even though line feeds and spaces must be properly output if there is some abstract.
abstract = os2.str();
docstring cleaned = abstract;
cleaned.erase(std::remove_if(cleaned.begin(), cleaned.end(), lyx::isSpace), cleaned.end());
+ size_t beginComment;
+ size_t endComment;
+ while ((beginComment = cleaned.find(from_ascii("<!--"))) != lyx::docstring::npos) {
+ if ((endComment = cleaned.find(from_ascii("-->"), beginComment)) != lyx::docstring::npos) {
+ cleaned.erase(cleaned.begin() + beginComment, cleaned.begin() + endComment + 3);
+ }
+ }
+
// Nothing? Then there is no abstract!
if (cleaned.empty())
hasAbstract = false;
// Then, the content. It starts where the <info> ends.
auto par = paragraphs.iterator_at(info.epit);
- auto end = paragraphs.iterator_at(epit);
- while (par != end) {
+ auto par_epit = paragraphs.iterator_at(epit);
+ auto par_end = paragraphs.end();
+ while (par != par_epit && par != par_end) {
if (!hasOnlyNotes(*par))
par = makeAny(text, buf, xs, runparams, par);
else
}
// Close all sections before the bibliography.
- // TODO: Only close all when the bibliography is at the end of the document? Or force to output the bibliography at the end of the document? Or don't care (as allowed by DocBook)?
+ // TODO: Only close all when the bibliography is at the end of the document? Or force to output the bibliography
+ // at the end of the document? Or don't care (as allowed by DocBook)?
if (!par->insetList().empty()) {
Inset const *firstInset = par->getInset(0);
if (firstInset && (firstInset->lyxCode() == BIBITEM_CODE || firstInset->lyxCode() == BIBTEX_CODE)) {
// Generate the <info> tag if a section was just opened.
// Some sections may require abstracts (mostly parts, in books: DocBookForceAbstractTag will not be NONE),
// others can still have an abstract (it must be detected so that it can be output at the right place).
- // TODO: docbookforceabstracttag is a bit contrived here, but it does the job. Having another field just for this would be cleaner, but that's just for <part> and <partintro>, so it's probably not worth the effort.
+ // TODO: docbookforceabstracttag is a bit contrived here, but it does the job. Having another field just for
+ // this would be cleaner, but that's just for <part> and <partintro>, so it's probably not worth the effort.
if (isLayoutSectioning(style)) {
// This abstract may be found between the next paragraph and the next title.
pit_type cpit = std::distance(text.paragraphs().begin(), par);