The following patch (which could easily be broken in parts) does the
following:

- fix numbering of sections on display. In particular, secnumdepth is
  respected.

- add proper numbering for Paragraph and SubParagraph.

- fix the problem with extra spacing above unnumbered Chapter.

- makes sure Koma-script's captionabove and captionbelow get into the
  table of floats.

- hopefully fix correctly numbering of Theorems with several
  paragraphs (I was sure there was a bug for that, but I cannot find
  it anymore).

- update screen and counters after a class switch.

- update screen and counters after a secnumdepth change.

Testing is very welcome. More works remains to be done on counters:

- make numbering of captions work

- use this proper numbering in List of Floats.

- The table of contents is not able to display items with a toclevel
  <=0. This is related to the removal of LyXTextClass::maxcounter in
  HEAD. Basically, we have to know what is the index of the topmost
  toc level (which is different between book and article, for
  example).

- other bug reports?

If no problems are uncovered in this patch, I would like to commit it.
If some parts are controversial, I can commit the rest.

JMarc

Index: lib/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/lib/ChangeLog,v
retrieving revision 1.684
diff -u -p -r1.684 ChangeLog
--- lib/ChangeLog	9 Apr 2005 10:52:52 -0000	1.684
+++ lib/ChangeLog	14 Apr 2005 14:42:34 -0000
@@ -1,3 +1,14 @@
+2005-04-14  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	* layouts/scrclass.inc: do not assign a toclevel to addchap or
+	addsec. 
+
+	* layouts/numreport.inc: use data from numarticle.inc, so that
+	changes from article are obvious.
+
+	* layouts/numarticle.inc: add numbering stuff for Paragraph and
+	SubParagraph; set Part TocLevel to 0.
+
 2005-04-09  Angus Leeming  <[EMAIL PROTECTED]>
 
 	* Makefile.am (dist_scripts_DATA): add scripts/fig_copy.sh and
Index: lib/layouts/numarticle.inc
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/lib/layouts/numarticle.inc,v
retrieving revision 1.3
diff -u -p -r1.3 numarticle.inc
--- lib/layouts/numarticle.inc	13 Oct 2003 09:50:10 -0000	1.3
+++ lib/layouts/numarticle.inc	14 Apr 2005 14:42:34 -0000
@@ -1,10 +1,11 @@
 # Author : André Pönitz
-# This include files contains label definitions for a article-like numbering.
+# This include file contains label definitions for an article-like numbering.
 
 Style Part
 	LabelType             Counter
 	LabelCounter          part
 	LabelString           "Part \Roman{part}"
+	TocLevel              0
 End
 
 
@@ -36,10 +37,18 @@ End
 
 
 Style Paragraph
+	LabelType             Counter
+	LabelCounter          paragraph
+	LabelString           "@[EMAIL PROTECTED]"
+	LabelStringAppendix   "@[EMAIL PROTECTED]"
 	TocLevel              4
 End
 
 
 Style Subparagraph
+	LabelType             Counter
+	LabelCounter          subparagraph
+	LabelString           "@[EMAIL PROTECTED]"
+	LabelStringAppendix   "@[EMAIL PROTECTED]"
 	TocLevel              5
 End
Index: lib/layouts/numreport.inc
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/lib/layouts/numreport.inc,v
retrieving revision 1.3
diff -u -p -r1.3 numreport.inc
--- lib/layouts/numreport.inc	13 Oct 2003 09:50:10 -0000	1.3
+++ lib/layouts/numreport.inc	14 Apr 2005 14:42:34 -0000
@@ -1,10 +1,10 @@
 # Author : André Pönitz
-# This include files contains a label definitions for a report-like numbering.
+# This include file contains label definitions for a report-like numbering.
+
+Input numarticle.inc
 
 Style Part
-	LabelType             Counter
-	LabelCounter          part
-	LabelString           "Part \Roman{part}"
+	TocLevel              -1
 End
 
 
@@ -13,42 +13,12 @@ Style Chapter
 	LabelCounter          chapter
 	LabelString           "Chapter \arabic{chapter}"
 	LabelStringAppendix   "Appendix \Alph{chapter}"
-	TocLevel              1
+	TocLevel              0
 End
 
 
 Style Section
-	LabelType             Counter
-	LabelCounter          section
 	LabelString           "\arabic{chapter}.\arabic{section}"
 	LabelStringAppendix   "\Alph{chapter}.\arabic{section}"
-	TocLevel              2
-End
-
-
-Style Subsection
-	LabelType             Counter
-	LabelCounter          subsection
-	LabelString           "@[EMAIL PROTECTED]"
-	LabelStringAppendix   "@[EMAIL PROTECTED]"
-	TocLevel              3
-End
-
-
-Style Subsubsection
-	LabelType             Counter
-	LabelCounter          subsubsection
-	LabelString           "@[EMAIL PROTECTED]"
-	LabelStringAppendix   "@[EMAIL PROTECTED]"
-	TocLevel              4
-End
-
-
-Style Paragraph
-	TocLevel              5
 End
 
-
-Style Subparagraph
-	TocLevel              6
-End
Index: lib/layouts/scrclass.inc
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/lib/layouts/scrclass.inc,v
retrieving revision 1.11
diff -u -p -r1.11 scrclass.inc
--- lib/layouts/scrclass.inc	13 Oct 2003 09:50:10 -0000	1.11
+++ lib/layouts/scrclass.inc	14 Apr 2005 14:42:34 -0000
@@ -109,14 +109,12 @@ End
 Style Addchap
 	CopyStyle             Chapter*
 	LatexName             addchap
-	TocLevel              1
 End
 
 
 Style Addsec
 	CopyStyle             Section*
 	LatexName             addsec
-	TocLevel              2
 End
 
 
Index: src/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ChangeLog,v
retrieving revision 1.2155
diff -u -p -r1.2155 ChangeLog
--- src/ChangeLog	14 Apr 2005 10:19:37 -0000	1.2155
+++ src/ChangeLog	14 Apr 2005 14:42:35 -0000
@@ -1,3 +1,20 @@
+2005-04-14  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	* lyxfunc.C (actOnUpdatedPrefs): avoid warning
+	(dispatch): update counters and screen after LFUN_TEXTCLASS_APPLY.
+
+	* rowpainter.C (paintFirst): simplify the code a little bit. In
+	particular, remove the test for secnumdepth.
+	* text.C (setHeightOfRow): only allocate space for chapter number
+	when updateCounters provided an actual label, instead of looking
+	at secnumdepth directly.
+
+	* lyxlayout.C (LyXLayout): set toclevel to -2 by default.
+
+	* buffer_funcs.C (setCounter): only number LABEL_COUNTER
+	paragraphs when secnumdepth is large enough or, for environments,
+	when they are not the first in a sequence.
+
 2005-04-11  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
 
 	* text3.C (dispatch): change the layout to "Caption" after inserting
Index: src/buffer_funcs.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer_funcs.C,v
retrieving revision 1.24
diff -u -p -r1.24 buffer_funcs.C
--- src/buffer_funcs.C	25 Feb 2005 11:55:31 -0000	1.24
+++ src/buffer_funcs.C	14 Apr 2005 14:42:35 -0000
@@ -26,6 +26,7 @@
 #include "LaTeX.h"
 #include "lyxtextclass.h"
 #include "paragraph.h"
+#include "paragraph_funcs.h"
 #include "ParagraphList_fwd.h"
 #include "ParagraphParameters.h"
 #include "pariterator.h"
@@ -377,9 +378,14 @@ void setCounter(Buffer const & buf, ParI
 
 	// is it a layout that has an automatic label?
 	if (layout->labeltype == LABEL_COUNTER) {
-		counters.step(layout->counter);
-		string label = expandLabel(textclass, layout, par.params().appendix());
-		par.params().labelString(label);
+		if (layout->toclevel <= buf.params().secnumdepth
+		    && (!layout->isEnvironment() 
+			|| isFirstInSequence(it.pit(), it.plist()))) {
+			counters.step(layout->counter);
+			string label = expandLabel(textclass, layout, 
+						   par.params().appendix());
+			par.params().labelString(label);
+		}
 	} else if (layout->labeltype == LABEL_ITEMIZE) {
 		// At some point of time we should do something more
 		// clever here, like:
Index: src/lyxfunc.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxfunc.C,v
retrieving revision 1.651
diff -u -p -r1.651 lyxfunc.C
--- src/lyxfunc.C	13 Apr 2005 09:43:56 -0000	1.651
+++ src/lyxfunc.C	14 Apr 2005 14:42:35 -0000
@@ -1474,6 +1474,8 @@ void LyXFunc::dispatch(FuncRequest const
 
 			bufferErrors(*buffer, el);
 			view()->showErrorList(_("Class switch"));
+			updateCounters(*buffer);
+			update = true;
 			break;
 		}
 
@@ -1971,6 +1973,7 @@ void actOnUpdatedPrefs(LyXRC const & lyx
 	case LyXRC::RC_SPELL_COMMAND:
 	case LyXRC::RC_TEMPDIRPATH:
 	case LyXRC::RC_TEMPLATEPATH:
+	case LyXRC::RC_TEX_ALLOWS_SPACES:
 	case LyXRC::RC_UIFILE:
 	case LyXRC::RC_USER_EMAIL:
 	case LyXRC::RC_USER_NAME:
Index: src/lyxlayout.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxlayout.C,v
retrieving revision 1.25
diff -u -p -r1.25 lyxlayout.C
--- src/lyxlayout.C	6 Jan 2005 13:48:07 -0000	1.25
+++ src/lyxlayout.C	14 Apr 2005 14:42:35 -0000
@@ -121,7 +121,7 @@ LyXLayout::LyXLayout ()
 	free_spacing = false;
 	pass_thru = false;
 	is_environment = false;
-	toclevel = 0;
+	toclevel = -2;
 	commanddepth = 0;
 }
 
Index: src/rowpainter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v
retrieving revision 1.146
diff -u -p -r1.146 rowpainter.C
--- src/rowpainter.C	12 Apr 2005 18:42:27 -0000	1.146
+++ src/rowpainter.C	14 Apr 2005 14:42:35 -0000
@@ -501,37 +501,35 @@ void RowPainter::paintFirst()
 		      || layout->latextype != LATEX_ENVIRONMENT
 		      || is_seq)) {
 
-		LyXFont font = getLabelFont();
-		if (!par_.getLabelstring().empty()) {
+		LyXFont const font = getLabelFont();
+		string const str = par_.getLabelstring();
+		if (!str.empty()) {
 			double x = x_;
-			string const str = par_.getLabelstring();
 
 			// this is special code for the chapter layout. This is
 			// printed in an extra row and has a pagebreak at
 			// the top.
 			if (layout->counter == "chapter") {
-				if (buffer.params().secnumdepth >= 0) {
-					double spacing_val = 1.0;
-					if (!parparams.spacing().isDefault()) {
-						spacing_val = parparams.spacing().getValue();
-					} else {
-						spacing_val = buffer.params().spacing().getValue();
-					}
+				double spacing_val = 1.0;
+				if (!parparams.spacing().isDefault()) {
+					spacing_val = parparams.spacing().getValue();
+				} else {
+					spacing_val = buffer.params().spacing().getValue();
+				}
 #ifdef WITH_WARNINGS
 #warning Look is this correct?
 #endif
-					int const labeladdon = int(font_metrics::maxHeight(font) * layout->spacing.getValue() * spacing_val);
-
-					int const maxdesc = int(font_metrics::maxDescent(font) * layout->spacing.getValue() * spacing_val)
-						+ int(layout->parsep) * defaultRowHeight();
+				int const labeladdon = int(font_metrics::maxHeight(font) * layout->spacing.getValue() * spacing_val);
 
-					if (is_rtl) {
-						x = width_ - leftMargin() -
-							font_metrics::width(str, font);
-					}
+				int const maxdesc = int(font_metrics::maxDescent(font) * layout->spacing.getValue() * spacing_val)
+					+ int(layout->parsep) * defaultRowHeight();
 
-					pain_.text(int(x), yo_ - maxdesc - labeladdon, str, font);
+				if (is_rtl) {
+					x = width_ - leftMargin() -
+						font_metrics::width(str, font);
 				}
+				
+				pain_.text(int(x), yo_ - maxdesc - labeladdon, str, font);
 			} else {
 				if (is_rtl) {
 					x = width_ - leftMargin()
Index: src/text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
retrieving revision 1.597
diff -u -p -r1.597 text.C
--- src/text.C	12 Apr 2005 18:42:25 -0000	1.597
+++ src/text.C	14 Apr 2005 14:42:35 -0000
@@ -911,12 +911,13 @@ void LyXText::setHeightOfRow(pit_type co
 				maxasc += bufparams.getDefSkip().inPixels(*bv());
 		}
 
-		if (pars_[pit].params().startOfAppendix())
+		if (par.params().startOfAppendix())
 			maxasc += int(3 * dh);
 
 		// This is special code for the chapter, since the label of this
 		// layout is printed in an extra row
-		if (layout->counter == "chapter" && bufparams.secnumdepth >= 0) {
+		if (layout->counter == "chapter" 
+		    && !par.params().labelString().empty()) {
 			labeladdon = int(font_metrics::maxHeight(labelfont)
 			             * layout->spacing.getValue()
 			             * spacing(par));
Index: src/frontends/controllers/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ChangeLog,v
retrieving revision 1.472
diff -u -p -r1.472 ChangeLog
--- src/frontends/controllers/ChangeLog	13 Apr 2005 09:43:57 -0000	1.472
+++ src/frontends/controllers/ChangeLog	14 Apr 2005 14:42:35 -0000
@@ -1,8 +1,13 @@
+2005-04-11  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	* ControlDocument.C (dispatchParams): update the counters if
+	necessary. 
+
 2005-04-13  Georg Baum  <[EMAIL PROTECTED]>
 
 	* Dialog.[Ch] (checkStatus): new
 
-2005-03-27  MArtin Vermeer  <[EMAIL PROTECTED]>
+2005-03-27  Martin Vermeer  <[EMAIL PROTECTED]>
 
 	* ControlDocument.C (dispatch_bufferparams): fix bug 1843
 
Index: src/frontends/controllers/ControlDocument.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlDocument.C,v
retrieving revision 1.54
diff -u -p -r1.54 ControlDocument.C
--- src/frontends/controllers/ControlDocument.C	27 Mar 2005 07:14:12 -0000	1.54
+++ src/frontends/controllers/ControlDocument.C	14 Apr 2005 14:42:35 -0000
@@ -16,6 +16,8 @@
 #include "BranchList.h"
 #include "buffer.h"
 #include "bufferparams.h"
+#include "BufferView.h"
+#include "buffer_funcs.h"
 #include "funcrequest.h"
 #include "language.h"
 #include "LColor.h"
@@ -89,14 +91,22 @@ void ControlDocument::dispatchParams()
 	textclass_type const old_class =
 		kernel().buffer().params().textclass;
 	textclass_type const new_class = bp_->textclass;
-
 	if (new_class != old_class) {
 		string const name = textclasslist[new_class].name();
 		kernel().dispatch(FuncRequest(LFUN_TEXTCLASS_APPLY, name));
 	}
 
+	int const old_secnumdepth = kernel().buffer().params().secnumdepth;
+	int const new_secnumdepth = bp_->secnumdepth;
+
 	// Apply the BufferParams.
 	dispatch_bufferparams(kernel(), params(), LFUN_BUFFERPARAMS_APPLY);
+
+	// redo the numbering if necessary
+	if (new_secnumdepth != old_secnumdepth) {
+		updateCounters(kernel().buffer());
+		kernel().bufferview()->update();
+	}
 
 	// Generate the colours requested by each new branch.
 	BranchList & branchlist = params().branchlist();
Index: src/insets/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/ChangeLog,v
retrieving revision 1.1128
diff -u -p -r1.1128 ChangeLog
--- src/insets/ChangeLog	14 Apr 2005 10:19:38 -0000	1.1128
+++ src/insets/ChangeLog	14 Apr 2005 14:42:36 -0000
@@ -1,3 +1,10 @@
+2005-04-14  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	* insetwrap.C (addToToc): copy the code from InsetFloat::addToToc.
+
+	* insetfloat.C (addToToc): do not use the harcoded "Caption" name,
+	but the SENSITIVE label type. 
+
 2005-04-11  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
 
 	* insetfloat.C (InsetFloat): 
Index: src/insets/insetfloat.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetfloat.C,v
retrieving revision 1.136
diff -u -p -r1.136 insetfloat.C
--- src/insets/insetfloat.C	14 Apr 2005 10:19:39 -0000	1.136
+++ src/insets/insetfloat.C	14 Apr 2005 14:42:36 -0000
@@ -114,10 +114,6 @@ using std::ostringstream;
 
 namespace {
 
-// this should not be hardcoded, but be part of the definition
-// of the float (JMarc)
-string const caplayout("Caption");
-
 string floatname(string const & type, BufferParams const & bp)
 {
 	FloatList const & floats = bp.getLyXTextClass().floats();
@@ -421,7 +417,7 @@ void InsetFloat::addToToc(lyx::toc::TocL
 
 	// Find a caption layout in one of the (child inset's) pars
 	for (; pit != end; ++pit) {
-		if (pit->layout()->name() == caplayout) {
+		if (pit->layout()->labeltype == LABEL_SENSITIVE) {
 			string const name = floatname(params_.type, buf.params());
 			string const str =
 				convert<string>(toclist[name].size() + 1)
Index: src/insets/insetwrap.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetwrap.C,v
retrieving revision 1.73
diff -u -p -r1.73 insetwrap.C
--- src/insets/insetwrap.C	14 Apr 2005 10:19:39 -0000	1.73
+++ src/insets/insetwrap.C	14 Apr 2005 14:42:36 -0000
@@ -27,6 +27,7 @@
 #include "lyxlex.h"
 #include "outputparams.h"
 #include "paragraph.h"
+#include "pariterator.h"
 
 #include "support/convert.h"
 
@@ -42,10 +43,6 @@ using std::ostringstream;
 
 namespace {
 
-// this should not be hardcoded, but be part of the definition
-// of the float (JMarc)
-string const caplayout("Caption");
-
 string floatname(string const & type, BufferParams const & bp)
 {
 	FloatList const & floats = bp.getLyXTextClass().floats();
@@ -224,17 +221,17 @@ bool InsetWrap::showInsetDialog(BufferVi
 
 void InsetWrap::addToToc(lyx::toc::TocList & toclist, Buffer const & buf) const
 {
-	// Now find the caption in the float...
-	ParagraphList::const_iterator tmp = paragraphs().begin();
-	ParagraphList::const_iterator end = paragraphs().end();
+	ParConstIterator pit = par_const_iterator_begin(*this);
+	ParConstIterator end = par_const_iterator_end(*this);
 
-	for (; tmp != end; ++tmp) {
-		if (tmp->layout()->name() == caplayout) {
+	// Find a caption layout in one of the (child inset's) pars
+	for (; pit != end; ++pit) {
+		if (pit->layout()->labeltype == LABEL_SENSITIVE) {
 			string const name = floatname(params_.type, buf.params());
 			string const str =
 				convert<string>(toclist[name].size() + 1)
-				+ ". " + tmp->asString(buf, false);
-			lyx::toc::TocItem const item(tmp->id(), 0 , str);
+				+ ". " + pit->asString(buf, false);
+			lyx::toc::TocItem const item(pit->id(), 0 , str);
 			toclist[name].push_back(item);
 		}
 	}

Reply via email to