mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Fix a long-standing FIXME by resetting only the counter for top-level
sectioning when we see an appendix. This fixes bug #8271, whose root cause was the fact that we were resetting all the counters inside ERT.
This commit is contained in:
parent
6335d93643
commit
894569e601
@ -4301,9 +4301,11 @@ void Buffer::Impl::setLabel(ParIterator & it, UpdateType utype) const
|
||||
Counters & counters = textclass.counters();
|
||||
|
||||
if (par.params().startOfAppendix()) {
|
||||
// FIXME: only the counter corresponding to toplevel
|
||||
// sectioning should be reset
|
||||
counters.reset();
|
||||
// We want to reset the counter corresponding to toplevel sectioning
|
||||
Layout const & lay = textclass.getTOCLayout();
|
||||
docstring const cnt = lay.counter;
|
||||
if (!cnt.empty())
|
||||
counters.reset(cnt);
|
||||
counters.appendix(true);
|
||||
}
|
||||
par.params().appendix(counters.appendix());
|
||||
|
@ -1507,27 +1507,32 @@ bool DocumentClass::hasTocLevels() const
|
||||
}
|
||||
|
||||
|
||||
Layout const & DocumentClass::getTOCLayout() const
|
||||
{
|
||||
// we're going to look for the layout with the minimum toclevel
|
||||
TextClass::LayoutList::const_iterator lit = begin();
|
||||
TextClass::LayoutList::const_iterator const len = end();
|
||||
int minlevel = 1000;
|
||||
Layout const * lay = NULL;
|
||||
for (; lit != len; ++lit) {
|
||||
int const level = lit->toclevel;
|
||||
// we don't want Part
|
||||
if (level == Layout::NOT_IN_TOC || level < 0 || level >= minlevel)
|
||||
continue;
|
||||
lay = &*lit;
|
||||
minlevel = level;
|
||||
}
|
||||
if (lay)
|
||||
return *lay;
|
||||
// hmm. that is very odd, so we'll do our best.
|
||||
return operator[](defaultLayoutName());
|
||||
}
|
||||
|
||||
|
||||
Layout const & DocumentClass::htmlTOCLayout() const
|
||||
{
|
||||
if (html_toc_section_.empty()) {
|
||||
// we're going to look for the layout with the minimum toclevel
|
||||
TextClass::LayoutList::const_iterator lit = begin();
|
||||
TextClass::LayoutList::const_iterator const len = end();
|
||||
int minlevel = 1000;
|
||||
Layout const * lay = NULL;
|
||||
for (; lit != len; ++lit) {
|
||||
int const level = lit->toclevel;
|
||||
// we don't want Part
|
||||
if (level == Layout::NOT_IN_TOC || level < 0 || level >= minlevel)
|
||||
continue;
|
||||
lay = &*lit;
|
||||
minlevel = level;
|
||||
}
|
||||
if (lay)
|
||||
html_toc_section_ = lay->name();
|
||||
else
|
||||
// hmm. that is very odd, so we'll do our best
|
||||
html_toc_section_ = defaultLayoutName();
|
||||
html_toc_section_ = getTOCLayout().name();
|
||||
}
|
||||
return operator[](html_toc_section_);
|
||||
}
|
||||
|
@ -419,6 +419,8 @@ public:
|
||||
docstring const & htmlpreamble() const { return htmlpreamble_; }
|
||||
///
|
||||
docstring const & htmlstyles() const { return htmlstyles_; }
|
||||
///
|
||||
Layout const & getTOCLayout() const;
|
||||
/// the paragraph style to use for TOCs, Bibliography, etc
|
||||
/// we will attempt to calculate this if it was not given
|
||||
Layout const & htmlTOCLayout() const;
|
||||
|
@ -967,11 +967,15 @@ void xhtmlParagraphs(Text const & text,
|
||||
while (bpit < epit) {
|
||||
ParagraphList::const_iterator par = paragraphs.constIterator(bpit);
|
||||
if (par->params().startOfAppendix()) {
|
||||
// FIXME: only the counter corresponding to toplevel
|
||||
// sectioning should be reset
|
||||
Counters & cnts = buf.masterBuffer()->params().documentClass().counters();
|
||||
cnts.reset();
|
||||
cnts.appendix(true);
|
||||
// We want to reset the counter corresponding to toplevel sectioning
|
||||
Layout const & lay =
|
||||
buf.masterBuffer()->params().documentClass().getTOCLayout();
|
||||
docstring const cnt = lay.counter;
|
||||
if (!cnt.empty()) {
|
||||
Counters const & cnts =
|
||||
buf.masterBuffer()->params().documentClass().counters();
|
||||
cnts.reset(cnt);
|
||||
}
|
||||
}
|
||||
Layout const & style = par->layout();
|
||||
ParagraphList::const_iterator const lastpar = par;
|
||||
|
Loading…
Reference in New Issue
Block a user