mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Handle empty index subentries (#7820)
This commit is contained in:
parent
3bf1b97ae5
commit
fd5adacef2
@ -160,7 +160,7 @@ void InsetIndex::latex(otexstream & ios, OutputParams const & runparams_in) cons
|
|||||||
getSortkey(os, runparams);
|
getSortkey(os, runparams);
|
||||||
os << "@";
|
os << "@";
|
||||||
os << ourlatex.str();
|
os << ourlatex.str();
|
||||||
getSubentries(os, runparams);
|
getSubentries(os, runparams, ourlatex.str());
|
||||||
if (hasSeeRef()) {
|
if (hasSeeRef()) {
|
||||||
os << "|";
|
os << "|";
|
||||||
os << insetindexpagerangetranslator_latex().find(params_.range);
|
os << insetindexpagerangetranslator_latex().find(params_.range);
|
||||||
@ -214,7 +214,7 @@ void InsetIndex::latex(otexstream & ios, OutputParams const & runparams_in) cons
|
|||||||
|
|
||||||
odocstringstream subentries;
|
odocstringstream subentries;
|
||||||
otexstream otsub(subentries);
|
otexstream otsub(subentries);
|
||||||
getSubentries(otsub, runparams);
|
getSubentries(otsub, runparams, ourlatex.str());
|
||||||
if (subentries.str().empty()) {
|
if (subentries.str().empty()) {
|
||||||
// Separate the entries and subentries, i.e., split on "!".
|
// Separate the entries and subentries, i.e., split on "!".
|
||||||
// This goes wrong on an escaped "!", but as the escape
|
// This goes wrong on an escaped "!", but as the escape
|
||||||
@ -230,6 +230,12 @@ void InsetIndex::latex(otexstream & ios, OutputParams const & runparams_in) cons
|
|||||||
vector<docstring>::const_iterator it2 = levels_plain.begin();
|
vector<docstring>::const_iterator it2 = levels_plain.begin();
|
||||||
bool first = true;
|
bool first = true;
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
|
if ((*it).empty()) {
|
||||||
|
emptySubentriesWarning(ourlatex.str());
|
||||||
|
if (it2 < levels_plain.end())
|
||||||
|
++it2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// The separator needs to be put back when
|
// The separator needs to be put back when
|
||||||
// writing the levels, except for the first level
|
// writing the levels, except for the first level
|
||||||
if (!first)
|
if (!first)
|
||||||
@ -668,7 +674,22 @@ docstring InsetIndex::getSortkeyAsText(OutputParams const & runparams) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetIndex::getSubentries(otexstream & os, OutputParams const & runparams) const
|
void InsetIndex::emptySubentriesWarning(docstring const & mainentry) const
|
||||||
|
{
|
||||||
|
// Empty subentries crash makeindex. So warn and ignore this.
|
||||||
|
TeXErrors terr;
|
||||||
|
ErrorList & errorList = buffer().errorList("Export");
|
||||||
|
docstring const s = bformat(_("There is an empty index subentry in the entry '%1$s'.\n"
|
||||||
|
"It will be ignored in the output."), mainentry);
|
||||||
|
Paragraph const & par = buffer().paragraphs().front();
|
||||||
|
errorList.push_back(ErrorItem(_("Empty index subentry!"), s,
|
||||||
|
{par.id(), 0}, {par.id(), -1}));
|
||||||
|
buffer().bufferErrors(terr, errorList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetIndex::getSubentries(otexstream & os, OutputParams const & runparams,
|
||||||
|
docstring const & mainentry) const
|
||||||
{
|
{
|
||||||
Paragraph const & par = paragraphs().front();
|
Paragraph const & par = paragraphs().front();
|
||||||
InsetList::const_iterator it = par.insetList().begin();
|
InsetList::const_iterator it = par.insetList().begin();
|
||||||
@ -679,6 +700,10 @@ void InsetIndex::getSubentries(otexstream & os, OutputParams const & runparams)
|
|||||||
InsetIndexMacro const & iim =
|
InsetIndexMacro const & iim =
|
||||||
static_cast<InsetIndexMacro const &>(inset);
|
static_cast<InsetIndexMacro const &>(inset);
|
||||||
if (iim.params().type == InsetIndexMacroParams::Subentry) {
|
if (iim.params().type == InsetIndexMacroParams::Subentry) {
|
||||||
|
if (iim.hasNoContent()) {
|
||||||
|
emptySubentriesWarning(mainentry);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
++i;
|
++i;
|
||||||
if (i > 2)
|
if (i > 2)
|
||||||
return;
|
return;
|
||||||
|
@ -102,7 +102,9 @@ private:
|
|||||||
///
|
///
|
||||||
docstring getSortkeyAsText(OutputParams const &) const;
|
docstring getSortkeyAsText(OutputParams const &) const;
|
||||||
///
|
///
|
||||||
void getSubentries(otexstream &, OutputParams const &) const;
|
void emptySubentriesWarning(docstring const & mainentry) const;
|
||||||
|
///
|
||||||
|
void getSubentries(otexstream &, OutputParams const &, docstring const &) const;
|
||||||
///
|
///
|
||||||
std::vector<docstring> getSubentriesAsText(OutputParams const &,
|
std::vector<docstring> getSubentriesAsText(OutputParams const &,
|
||||||
bool const asLabel = false) const;
|
bool const asLabel = false) const;
|
||||||
|
@ -205,6 +205,12 @@ docstring InsetIndexMacro::getXhtml(XMLStream & xs, OutputParams const & runpara
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool InsetIndexMacro::hasNoContent() const
|
||||||
|
{
|
||||||
|
return paragraphs().front().empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetIndexMacro::doDispatch(Cursor & cur, FuncRequest & cmd)
|
void InsetIndexMacro::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||||
{
|
{
|
||||||
switch (cmd.action()) {
|
switch (cmd.action()) {
|
||||||
|
@ -66,6 +66,8 @@ public:
|
|||||||
int getPlaintext(odocstringstream &, OutputParams const &, size_t) const;
|
int getPlaintext(odocstringstream &, OutputParams const &, size_t) const;
|
||||||
///
|
///
|
||||||
void getDocbook(XMLStream &, OutputParams const &) const;
|
void getDocbook(XMLStream &, OutputParams const &) const;
|
||||||
|
///
|
||||||
|
bool hasNoContent() const;
|
||||||
private:
|
private:
|
||||||
///
|
///
|
||||||
InsetCode lyxCode() const override;
|
InsetCode lyxCode() const override;
|
||||||
|
Loading…
Reference in New Issue
Block a user