Angus Leeming wrote:
> Jürgen,
> 
> attached is a patch that should help ensure the above requirement.
> It's actually just a refactoring of existing code, even though it
> looks pretty frightening.

Doh! Wrong patch! That was the old one you've already commented on.

-- 
Angus
Index: src/frontends/controllers/ControlCitation.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlCitation.C,v
retrieving revision 1.40
diff -u -p -r1.40 ControlCitation.C
--- src/frontends/controllers/ControlCitation.C	3 Apr 2004 08:37:09 -0000	1.40
+++ src/frontends/controllers/ControlCitation.C	6 May 2004 20:19:30 -0000
@@ -13,7 +13,6 @@
 #include "ControlCitation.h"
 
 #include "buffer.h"
-#include "bufferparams.h"
 
 
 using std::string;
@@ -36,7 +35,9 @@ bool ControlCitation::initialiseParams(s
 	vector<pair<string, string> > blist;
 	kernel().buffer().fillWithBibKeys(blist);
 
-	bool use_styles = (usingNatbib() || usingJurabib());
+	biblio::CiteEngine const engine = biblio::getEngine(kernel().buffer());
+		
+	bool use_styles = engine != biblio::ENGINE_BASIC;
 
 	typedef std::map<string, string>::value_type InfoMapValue;
 
@@ -47,12 +48,11 @@ bool ControlCitation::initialiseParams(s
 	}
 
 	if (citeStyles_.empty())
-		citeStyles_ = biblio::getCiteStyles(usingNatbib(), usingJurabib());
+		citeStyles_ = biblio::getCiteStyles(engine);
 	else {
 		if ((use_styles && citeStyles_.size() == 1) ||
 		    (!use_styles && citeStyles_.size() != 1))
-			citeStyles_ = biblio::getCiteStyles(usingNatbib(),
-				usingJurabib());
+			citeStyles_ = biblio::getCiteStyles(engine);
 	}
 
 	return true;
@@ -73,15 +73,9 @@ biblio::InfoMap const & ControlCitation:
 }
 
 
-bool ControlCitation::usingNatbib() const
+biblio::CiteEngine ControlCitation::getEngine() const
 {
-    return kernel().buffer().params().use_natbib;
-}
-
-
-bool ControlCitation::usingJurabib() const
-{
-    return kernel().buffer().params().use_jurabib;
+	return biblio::getEngine(kernel().buffer());
 }
 
 
@@ -89,10 +83,10 @@ vector<string> const ControlCitation::ge
 {
 	vector<string> styles;
 
-	vector<biblio::CiteStyle> const cs =
-		biblio::getCiteStyles(usingNatbib(), usingJurabib());
+	biblio::CiteEngine const engine = biblio::getEngine(kernel().buffer());
+	vector<biblio::CiteStyle> const cs = biblio::getCiteStyles(engine);
 
-	if (kernel().buffer().params().use_numerical_citations)
+	if (engine == biblio::ENGINE_NATBIB_NUMERICAL)
 		styles = biblio::getNumericalStrings(key, bibkeysInfo_, cs);
 	else
 		styles = biblio::getAuthorYearStrings(key, bibkeysInfo_, cs);
Index: src/frontends/controllers/ControlCitation.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlCitation.h,v
retrieving revision 1.22
diff -u -p -r1.22 ControlCitation.h
--- src/frontends/controllers/ControlCitation.h	7 Mar 2004 14:33:14 -0000	1.22
+++ src/frontends/controllers/ControlCitation.h	6 May 2004 20:19:30 -0000
@@ -37,9 +37,8 @@ public:
 	biblio::InfoMap const & bibkeysInfo() const;
 
 	///
-	bool usingNatbib() const;
-	///
-	bool usingJurabib() const;
+	biblio::CiteEngine getEngine() const;
+
 	/// Possible citations based on this key
 	std::vector<std::string> const getCiteStrings(std::string const & key) const;
 
Index: src/frontends/controllers/biblio.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/biblio.C,v
retrieving revision 1.62
diff -u -p -r1.62 biblio.C
--- src/frontends/controllers/biblio.C	7 Mar 2004 14:33:14 -0000	1.62
+++ src/frontends/controllers/biblio.C	6 May 2004 20:19:31 -0000
@@ -13,10 +13,12 @@
 
 #include "biblio.h"
 
-#include "support/std_sstream.h"
-#include "gettext.h" // for _()
+#include "buffer.h"
+#include "bufferparams.h"
+#include "gettext.h"
 
 #include "support/lstrings.h"
+#include "support/std_sstream.h"
 
 #include <boost/regex.hpp>
 
@@ -560,24 +562,53 @@ string const getCiteCommand(CiteStyle co
 }
 
 
-vector<CiteStyle> const getCiteStyles(bool usingNatbib, bool usingJurabib)
+CiteEngine getEngine(Buffer const & buffer)
+{
+	CiteEngine engine = ENGINE_BASIC;
+
+	if (buffer.params().use_natbib) {
+		if (buffer.params().use_numerical_citations) {
+			engine = ENGINE_NATBIB_NUMERICAL;
+		} else {
+			engine = ENGINE_NATBIB_AUTHORYEAR;
+		}
+	}
+
+	if (buffer.params().use_jurabib)
+		engine = ENGINE_JURABIB;
+
+	return engine;
+}
+
+
+vector<CiteStyle> const getCiteStyles(CiteEngine engine)
 {
-	unsigned int nStyles = 1;
+	unsigned int nStyles = 0;
 	unsigned int start = 0;
-	if (usingNatbib) {
+
+	switch (engine) {
+	case ENGINE_BASIC:
+		nStyles = 1;
+		start = 0;
+		break;
+	case ENGINE_NATBIB_AUTHORYEAR:
+	case ENGINE_NATBIB_NUMERICAL:
 		nStyles = nCiteStyles - 1;
 		start = 1;
-	}
-	if (usingJurabib)
+		break;
+	case ENGINE_JURABIB:
 		nStyles = nCiteStyles;
+		start = 0;
+		break;
+	}
 
-	vector<CiteStyle> styles(nStyles);
+	typedef vector<CiteStyle> cite_vec;
 
-	vector<CiteStyle>::size_type i = 0;
+	cite_vec styles(nStyles);
+	cite_vec::size_type i = 0;
 	int j = start;
-	for (; i != styles.size(); ++i, ++j) {
+	for (; i != styles.size(); ++i, ++j)
 		styles[i] = citeStyles[j];
-	}
 
 	return styles;
 }
Index: src/frontends/controllers/biblio.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/biblio.h,v
retrieving revision 1.18
diff -u -p -r1.18 biblio.h
--- src/frontends/controllers/biblio.h	7 Mar 2004 14:33:14 -0000	1.18
+++ src/frontends/controllers/biblio.h	6 May 2004 20:19:31 -0000
@@ -16,10 +16,21 @@
 #include <string>
 #include <vector>
 
+class Buffer;
+
 /** Functions of use to citation and bibtex GUI controllers and views */
 namespace biblio {
 
-///
+enum CiteEngine {
+	ENGINE_BASIC,
+	ENGINE_NATBIB_AUTHORYEAR,
+	ENGINE_NATBIB_NUMERICAL,
+	ENGINE_JURABIB
+};
+
+CiteEngine getEngine(Buffer const &);
+
+
 enum CiteStyle {
 	CITE,
 	CITET,
@@ -31,19 +42,15 @@ enum CiteStyle {
 	CITEYEARPAR
 };
 
-///
+
 enum Search {
-	///
 	SIMPLE,
-	///
 	REGEX
 };
 
-///
+
 enum Direction {
-	///
 	FORWARD,
-	///
 	BACKWARD
 };
 
@@ -116,7 +123,7 @@ a flag forcing upper case, e.g. "della C
 std::string const getCiteCommand(CiteStyle, bool full, bool forceUCase);
 
 /// Returns a vector of available Citation styles.
-std::vector<CiteStyle> const getCiteStyles(bool usingNatbib, bool usingJurabib);
+std::vector<CiteStyle> const getCiteStyles(CiteEngine);
 
 /**
    "Translates" the available Citation Styles into strings for this key.
Index: src/frontends/qt2/QCitation.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QCitation.C,v
retrieving revision 1.32
diff -u -p -r1.32 QCitation.C
--- src/frontends/qt2/QCitation.C	3 Apr 2004 08:37:10 -0000	1.32
+++ src/frontends/qt2/QCitation.C	6 May 2004 20:19:32 -0000
@@ -125,10 +125,11 @@ void QCitation::fillStyles()
 
 	vector<string> const & sty = controller().getCiteStrings(key);
 
-	bool const use_styles = (controller().usingNatbib() ||
-		controller().usingJurabib());
-	dialog_->citationStyleCO->setEnabled(!sty.empty() && use_styles);
-	dialog_->citationStyleLA->setEnabled(!sty.empty() && use_styles);
+	biblio::CiteEngine const engine = controller().getEngine();
+	bool const basic_engine = engine == biblio::ENGINE_BASIC;
+
+	dialog_->citationStyleCO->setEnabled(!sty.empty() && !basic_engine);
+	dialog_->citationStyleLA->setEnabled(!sty.empty() && !basic_engine);
 
 	for (vector<string>::const_iterator it = sty.begin();
 		it != sty.end(); ++it) {
@@ -142,12 +143,15 @@ void QCitation::fillStyles()
 
 void QCitation::updateStyle()
 {
-	bool const natbib = controller().usingNatbib();
+	biblio::CiteEngine const engine = controller().getEngine();
+	bool const natbib_engine =
+		engine == biblio::ENGINE_NATBIB_AUTHORYEAR ||
+		engine == biblio::ENGINE_NATBIB_NUMERICAL;
+	bool const basic_engine = engine == biblio::ENGINE_BASIC;
 
-	dialog_->fulllistCB->setEnabled(natbib);
-	dialog_->forceuppercaseCB->setEnabled(natbib);
-	dialog_->textBeforeED->setEnabled(natbib ||
-		controller().usingJurabib());
+	dialog_->fulllistCB->setEnabled(natbib_engine);
+	dialog_->forceuppercaseCB->setEnabled(natbib_engine);
+	dialog_->textBeforeED->setEnabled(!basic_engine);
 
 	string const & command = controller().params().getCmdName();
 
Index: src/frontends/xforms/FormCitation.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormCitation.C,v
retrieving revision 1.101
diff -u -p -r1.101 FormCitation.C
--- src/frontends/xforms/FormCitation.C	3 Apr 2004 08:37:10 -0000	1.101
+++ src/frontends/xforms/FormCitation.C	6 May 2004 20:19:33 -0000
@@ -449,11 +449,16 @@ void FormCitation::update()
 	// Use the citation command to update the GUI
 	updateStyle(dialog_.get(), controller().params().getCmdName());
 
-	bool const natbib = controller().usingNatbib();
-	setEnabled(dialog_->check_full_author_list, natbib);
-	setEnabled(dialog_->check_force_uppercase, natbib);
-	setEnabled(dialog_->choice_style, natbib || controller().usingJurabib());
-	setEnabled(dialog_->input_before, natbib || controller().usingJurabib());
+	biblio::CiteEngine const engine = controller().getEngine();
+	bool const natbib_engine =
+		engine == biblio::ENGINE_NATBIB_AUTHORYEAR ||
+		engine == biblio::ENGINE_NATBIB_NUMERICAL;
+	bool const basic_engine = engine == biblio::ENGINE_BASIC;
+
+	setEnabled(dialog_->check_full_author_list, natbib_engine);
+	setEnabled(dialog_->check_force_uppercase, natbib_engine);
+	setEnabled(dialog_->choice_style, !basic_engine);
+	setEnabled(dialog_->input_before, !basic_engine);
 
 	// No keys have been selected yet, so...
 	fl_clear_browser(dialog_->browser_info);
Index: src/insets/insetcite.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcite.C,v
retrieving revision 1.79
diff -u -p -r1.79 insetcite.C
--- src/insets/insetcite.C	3 Apr 2004 08:37:10 -0000	1.79
+++ src/insets/insetcite.C	6 May 2004 20:19:34 -0000
@@ -20,8 +20,6 @@
 #include "funcrequest.h"
 #include "LaTeXFeatures.h"
 
-#include "frontends/controllers/biblio.h"
-
 #include "support/lstrings.h"
 
 using lyx::support::ascii_lowercase;
@@ -275,29 +273,10 @@ string const InsetCitation::generateLabe
 }
 
 
-InsetCitation::Cache::Style InsetCitation::getStyle(Buffer const & buffer) const
-{
-	Cache::Style style = Cache::BASIC;
-
-	if (buffer.params().use_natbib) {
-		if (buffer.params().use_numerical_citations) {
-			style = Cache::NATBIB_NUM;
-		} else {
-			style = Cache::NATBIB_AY;
-		}
-	}
-
-	if (buffer.params().use_jurabib)
-		style = Cache::JURABIB;
-
-	return style;
-}
-
-
 string const InsetCitation::getScreenLabel(Buffer const & buffer) const
 {
-	Cache::Style const style = getStyle(buffer);
-	if (cache.params == params() && cache.style == style)
+	biblio::CiteEngine const engine = biblio::getEngine(buffer);
+	if (cache.params == params() && cache.engine == engine)
 		return cache.screen_label;
 
 	// The label has changed, so we have to re-create it.
@@ -314,7 +293,7 @@ string const InsetCitation::getScreenLab
 		label += "...";
 	}
 
-	cache.style  = style;
+	cache.engine  = engine;
 	cache.params = params();
 	cache.generated_label = glabel;
 	cache.screen_label = label;
@@ -325,7 +304,8 @@ string const InsetCitation::getScreenLab
 
 int InsetCitation::plaintext(Buffer const & buffer, ostream & os, int) const
 {
-	if (cache.params == params() && cache.style == getStyle(buffer))
+	if (cache.params == params() &&
+	    cache.engine == biblio::getEngine(buffer))
 		os << cache.generated_label;
 	else
 		os << generateLabel(buffer);
Index: src/insets/insetcite.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcite.h,v
retrieving revision 1.48
diff -u -p -r1.48 insetcite.h
--- src/insets/insetcite.h	7 Mar 2004 14:33:15 -0000	1.48
+++ src/insets/insetcite.h	6 May 2004 20:19:34 -0000
@@ -15,6 +15,7 @@
 
 
 #include "insetcommand.h"
+#include "frontends/controllers/biblio.h"
 
 /** Used to insert citations
  */
@@ -39,23 +40,16 @@ public:
 		  OutputParams const &) const;
 	///
 	void validate(LaTeXFeatures &) const;
+
 private:
+	/// This function does the donkey work of creating the pretty label
+	std::string const generateLabel(Buffer const &) const;
+
 	struct Cache {
 		///
-		enum Style {
-			///
-			BASIC,
-			///
-			NATBIB_AY,
-			///
-			NATBIB_NUM,
-			///
-			JURABIB
-		};
-		///
-		Cache() : style(BASIC) {}
+		Cache() : engine(biblio::ENGINE_BASIC) {}
 		///
-		Style style;
+		biblio::CiteEngine engine;
 		///
 		InsetCommandParams params;
 		///
@@ -63,12 +57,6 @@ private:
 		///
 		std::string screen_label;
 	};
-
-	/// This function does the donkey work of creating the pretty label
-	std::string const generateLabel(Buffer const &) const;
-	///
-	Cache::Style getStyle(Buffer const & buffer) const;
-
 	///
 	mutable Cache cache;
 };

Reply via email to