X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTocBackend.cpp;h=a253d57ca337ec2903d4ecc6b9b8f5d9975e82e9;hb=77a7df10037c64040c5910d7e997af3026bd5c39;hp=1c1606608ebf884a8aeb2c58a252ac0b1f149539;hpb=b9aabe6d891b5347586bdfaeff407552213f94bb;p=lyx.git diff --git a/src/TocBackend.cpp b/src/TocBackend.cpp index 1c1606608e..a253d57ca3 100644 --- a/src/TocBackend.cpp +++ b/src/TocBackend.cpp @@ -17,11 +17,12 @@ #include "Buffer.h" #include "BufferParams.h" +#include "IndicesList.h" #include "InsetList.h" #include "Paragraph.h" #include "TextClass.h" -#include "insets/InsetText.h" +#include "insets/InsetArgument.h" #include "support/debug.h" #include "support/docstream.h" @@ -161,7 +162,7 @@ bool TocBackend::updateItem(DocIterator const & dit_in) return false; if (toc("tableofcontents")->empty()) { - // FIXME: should not happen, + // FIXME: should not happen, // a call to TocBackend::update() is missing somewhere LYXERR0("TocBackend::updateItem called but the TOC is empty!"); return false; @@ -180,18 +181,14 @@ bool TocBackend::updateItem(DocIterator const & dit_in) // FIXME: This is supposed to accomplish the same as the body of // InsetText::iterateForToc(), probably Paragraph & par = toc_item->dit().paragraph(); - InsetList::const_iterator it = par.insetList().begin(); - InsetList::const_iterator end = par.insetList().end(); - for (; it != end; ++it) { - Inset & inset = *it->inset; - if (inset.lyxCode() == ARG_CODE) { + for (auto const & table : par.insetList()) + if (InsetArgument const * arg = table.inset->asInsetArgument()) { tocstring = par.labelString(); if (!tocstring.empty()) tocstring += ' '; - inset.asInsetText()->text().forOutliner(tocstring,TOC_ENTRY_LENGTH); + arg->text().forOutliner(tocstring,TOC_ENTRY_LENGTH); break; } - } int const toclevel = toc_item->dit().text()-> getTocLevel(toc_item->dit().pit()); @@ -213,9 +210,10 @@ void TocBackend::update(bool output_active, UpdateType utype) it->second->clear(); tocs_.clear(); builders_.clear(); + resetOutlinerNames(); if (!buffer_->isInternal()) { DocIterator dit; - buffer_->inset().addToToc(dit, output_active, utype); + buffer_->inset().addToToc(dit, output_active, utype, *this); } } @@ -249,8 +247,56 @@ void TocBackend::writePlaintextTocList(string const & type, docstring TocBackend::outlinerName(string const & type) const { - return translateIfPossible( - buffer_->params().documentClass().outlinerName(type)); + map::const_iterator const it + = outliner_names_.find(type); + if (it != outliner_names_.end()) + return it->second; + + // Legacy treatment of index:... type + if (support::prefixIs(type, "index:")) { + string const itype = support::split(type, ':'); + IndicesList const & indiceslist = buffer_->params().indiceslist(); + Index const * index = indiceslist.findShortcut(from_utf8(itype)); + docstring indextype = _("unknown type!"); + if (index) + indextype = index->index(); + return support::bformat(_("Index Entries (%1$s)"), indextype); + } + + LYXERR0("Missing OutlinerName for " << type << "!"); + return from_utf8(type); +} + + +void TocBackend::resetOutlinerNames() +{ + outliner_names_.clear(); + // names from this document class + for (pair const & name + : buffer_->params().documentClass().outlinerNames()) + addName(name.first, translateIfPossible(name.second)); + // Hardcoded types + addName("tableofcontents", _("Table of Contents")); + addName("change", _("Changes")); + addName("senseless", _("Senseless")); + addName("citation", _("Citations")); + addName("label", _("Labels and References")); + // Customizable, but the corresponding insets have no layout definition + addName("child", _("Child Documents")); + addName("graphics", _("Graphics")); + addName("equation", _("Equations")); + addName("external", _("External Material")); + addName("math-macro", _("Math Macros")); + addName("nomencl", _("Nomenclature Entries")); +} + + +void TocBackend::addName(string const & type, docstring const & name) +{ + if (name.empty()) + return; + // only inserts if the key does not exist + outliner_names_.insert({type, name}); }