From d8c5a828fadf1efac1f1cf081aef4895d1def701 Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Mon, 10 May 2004 20:55:00 +0000 Subject: [PATCH] Clean up natbib, jurabib code as posted to the list last Friday. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8748 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/controllers/ChangeLog | 8 ++++ src/frontends/controllers/ControlCitation.C | 26 ++++------ src/frontends/controllers/ControlCitation.h | 5 +- src/frontends/controllers/biblio.C | 53 ++++++++++++++++----- src/frontends/controllers/biblio.h | 23 +++++---- src/frontends/qt2/ChangeLog | 5 ++ src/frontends/qt2/QCitation.C | 24 ++++++---- src/frontends/xforms/ChangeLog | 5 ++ src/frontends/xforms/FormCitation.C | 15 ++++-- src/insets/ChangeLog | 5 ++ src/insets/insetcite.C | 30 ++---------- src/insets/insetcite.h | 26 +++------- 12 files changed, 128 insertions(+), 97 deletions(-) diff --git a/src/frontends/controllers/ChangeLog b/src/frontends/controllers/ChangeLog index 367742ba59..df6d011683 100644 --- a/src/frontends/controllers/ChangeLog +++ b/src/frontends/controllers/ChangeLog @@ -1,3 +1,11 @@ +2004-05-10 Angus Leeming + + * biblio.[Ch]: create a new biblio::CiteEngine enum. Use it instead of + bools usingNatbib, usingJurabib. + + * ControlCitation.[Ch]: simplified code to use the biblio::CiteEngine + enum rather than multiple bools, usingNatbib and using Jurabib. + 2004-04-12 Georg Baum * ControlGraphics.[Ch] (editGraphics): new method diff --git a/src/frontends/controllers/ControlCitation.C b/src/frontends/controllers/ControlCitation.C index 9b48f2c9d6..950478db1d 100644 --- a/src/frontends/controllers/ControlCitation.C +++ b/src/frontends/controllers/ControlCitation.C @@ -13,7 +13,6 @@ #include "ControlCitation.h" #include "buffer.h" -#include "bufferparams.h" using std::string; @@ -36,7 +35,9 @@ bool ControlCitation::initialiseParams(string const & data) vector > 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::value_type InfoMapValue; @@ -47,12 +48,11 @@ bool ControlCitation::initialiseParams(string const & data) } 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::bibkeysInfo() const } -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 const ControlCitation::getCiteStrings(string const & key) const { vector styles; - vector const cs = - biblio::getCiteStyles(usingNatbib(), usingJurabib()); + biblio::CiteEngine const engine = biblio::getEngine(kernel().buffer()); + vector 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); diff --git a/src/frontends/controllers/ControlCitation.h b/src/frontends/controllers/ControlCitation.h index 65b3aa299a..6d8b9e9bd6 100644 --- a/src/frontends/controllers/ControlCitation.h +++ b/src/frontends/controllers/ControlCitation.h @@ -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 const getCiteStrings(std::string const & key) const; diff --git a/src/frontends/controllers/biblio.C b/src/frontends/controllers/biblio.C index 2ba7e9c7bb..7298b1f717 100644 --- a/src/frontends/controllers/biblio.C +++ b/src/frontends/controllers/biblio.C @@ -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 @@ -560,24 +562,53 @@ string const getCiteCommand(CiteStyle command, bool full, bool forceUCase) } -vector 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 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 styles(nStyles); + typedef vector cite_vec; - vector::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; } diff --git a/src/frontends/controllers/biblio.h b/src/frontends/controllers/biblio.h index ed59be052b..e079c66e01 100644 --- a/src/frontends/controllers/biblio.h +++ b/src/frontends/controllers/biblio.h @@ -16,10 +16,21 @@ #include #include +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 Casa" becomes "Della Case" std::string const getCiteCommand(CiteStyle, bool full, bool forceUCase); /// Returns a vector of available Citation styles. -std::vector const getCiteStyles(bool usingNatbib, bool usingJurabib); +std::vector const getCiteStyles(CiteEngine); /** "Translates" the available Citation Styles into strings for this key. diff --git a/src/frontends/qt2/ChangeLog b/src/frontends/qt2/ChangeLog index f190e6fdcb..8f4af3b6a4 100644 --- a/src/frontends/qt2/ChangeLog +++ b/src/frontends/qt2/ChangeLog @@ -1,3 +1,8 @@ +2004-05-10 Angus Leeming + + * QCitation.C: simplified code to use the biblio::CiteEngine + enum rather than multiple bools, usingNatbib and using Jurabib. + 2004-05-05 Angus Leeming * QIndexDialog.[Ch] (reject): overload the QDialog::reject function diff --git a/src/frontends/qt2/QCitation.C b/src/frontends/qt2/QCitation.C index ac82d14eca..87e0b569cf 100644 --- a/src/frontends/qt2/QCitation.C +++ b/src/frontends/qt2/QCitation.C @@ -125,10 +125,11 @@ void QCitation::fillStyles() vector 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::const_iterator it = sty.begin(); it != sty.end(); ++it) { @@ -142,12 +143,15 @@ void QCitation::fillStyles() void QCitation::updateStyle() { - bool const natbib = controller().usingNatbib(); - - dialog_->fulllistCB->setEnabled(natbib); - dialog_->forceuppercaseCB->setEnabled(natbib); - dialog_->textBeforeED->setEnabled(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; + + dialog_->fulllistCB->setEnabled(natbib_engine); + dialog_->forceuppercaseCB->setEnabled(natbib_engine); + dialog_->textBeforeED->setEnabled(!basic_engine); string const & command = controller().params().getCmdName(); diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 6d1311f557..6742b5ede5 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,8 @@ +2004-05-10 Angus Leeming + + * FormCitation.C: simplified code to use the biblio::CiteEngine + enum rather than multiple bools, usingNatbib and using Jurabib. + 2004-05-04 Angus Leeming * FormRef.C (input): don't activate the Apply buttons when using diff --git a/src/frontends/xforms/FormCitation.C b/src/frontends/xforms/FormCitation.C index 6213575e7d..10c855ac75 100644 --- a/src/frontends/xforms/FormCitation.C +++ b/src/frontends/xforms/FormCitation.C @@ -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); diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 4f61821e3c..e4751e51c4 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,8 @@ +2004-05-10 Angus Leeming + + * insetcite.[Ch]: move the Cache::Style enum to biblio::CiteEngine. + Ditto with getStyle, moved to biblio::getEngine. + 2004-05-07 Georg Baum * insetgraphics.C (validate): remove pre 233 file format stuff, diff --git a/src/insets/insetcite.C b/src/insets/insetcite.C index 0699b955d6..32aa3d10ea 100644 --- a/src/insets/insetcite.C +++ b/src/insets/insetcite.C @@ -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::generateLabel(Buffer const & buffer) const } -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::getScreenLabel(Buffer const & buffer) const 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::getScreenLabel(Buffer const & buffer) const 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); diff --git a/src/insets/insetcite.h b/src/insets/insetcite.h index f5b2a3c940..6025d8ecfe 100644 --- a/src/insets/insetcite.h +++ b/src/insets/insetcite.h @@ -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; }; -- 2.39.2