From ecb65e703896671db62358baa4e5ebe35145bc53 Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Sat, 21 Jul 2012 14:14:12 -0400 Subject: [PATCH] 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. Conflicts: src/TextClass.h --- src/Buffer.cpp | 8 +++++--- src/TextClass.cpp | 41 +++++++++++++++++++++++------------------ src/TextClass.h | 2 ++ src/output_xhtml.cpp | 14 +++++++++----- status.20x | 4 ++++ 5 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index c246190c09..061f00ba65 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -4145,9 +4145,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()); diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 7e431b6889..a15f8bf6a4 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -1387,27 +1387,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_); } diff --git a/src/TextClass.h b/src/TextClass.h index 6e20650cc2..dc47192e03 100644 --- a/src/TextClass.h +++ b/src/TextClass.h @@ -397,6 +397,8 @@ public: docstring const & preamble() const { return preamble_; } /// docstring const & htmlpreamble() const { return htmlpreamble_; } + /// + 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; diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index b882c35aac..1d604183d5 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -947,11 +947,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 & cnts = + buf.masterBuffer()->params().documentClass().counters(); + cnts.reset(cnt); + } } Layout const & style = par->layout(); ParagraphList::const_iterator const lastpar = par; diff --git a/status.20x b/status.20x index 158370e8dd..c7205663ab 100644 --- a/status.20x +++ b/status.20x @@ -41,6 +41,8 @@ What's new * USER INTERFACE +- Reset only the top-level counter when starting the appendix. + - Show backends, not formats, in View>Source (bug #7652). - Allow native LyX format to be shown in View>Source. @@ -66,6 +68,8 @@ What's new * DOCUMENT INPUT/OUTPUT +- Fix assertion when start of appendix is in ERT (bug 8271). + - Do not output empty language switch commands (bug 8216). - When using Turkish language, use the xkeyval package to avoid -- 2.39.5