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;
};