X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCiteEnginesList.cpp;h=58b686511b0eda996efd99dd093001ccc5f543bf;hb=439338850831ee099dbceb3fc5d3438e3e7c77cc;hp=48222cbb23731db4750a5dc8488ed39f2298c127;hpb=0e6a3ac40427ec3107cb88aa678fbe92473e7d45;p=lyx.git diff --git a/src/CiteEnginesList.cpp b/src/CiteEnginesList.cpp index 48222cbb23..58b686511b 100644 --- a/src/CiteEnginesList.cpp +++ b/src/CiteEnginesList.cpp @@ -14,6 +14,7 @@ #include "CiteEnginesList.h" +#include "Citation.h" #include "LaTeXFeatures.h" #include "Lexer.h" @@ -22,6 +23,7 @@ #include "support/gettext.h" #include "support/filetools.h" #include "support/lstrings.h" +#include "support/Translator.h" #include @@ -36,12 +38,11 @@ CiteEnginesList theCiteEnginesList; LyXCiteEngine::LyXCiteEngine(string const & n, string const & i, - vector const & cet, string const & d, - vector const & p, - vector const & r, vector const & e): - name_(n), id_(i), engine_types_(cet), description_(d), package_list_(p), - required_engines_(r), excluded_engines_(e), - checked_(false), available_(false) + vector const & cet, string const & cfm, + vector const & dbs, + string const & d, vector const & p): + name_(n), id_(i), engine_types_(cet), cite_framework_(cfm), default_biblios_(dbs), + description_(d), package_list_(p), checked_(false), available_(false) { filename_ = id_ + ".citeengine"; } @@ -76,36 +77,42 @@ bool LyXCiteEngine::isAvailable() const } -bool LyXCiteEngine::isCompatible(string const & cename) const +bool LyXCiteEngine::hasEngineType(CiteEngineType const & et) const { - // do we exclude it? - if (find(excluded_engines_.begin(), excluded_engines_.end(), cename) != - excluded_engines_.end()) - return false; + return std::find(engine_types_.begin(), engine_types_.end(), + theCiteEnginesList.getTypeAsString(et)) != engine_types_.end(); +} - LyXCiteEngine const * const lm = theCiteEnginesList[cename]; - if (!lm) - return true; - // does it exclude us? - vector const excengs = lm->getExcludedEngines(); - if (find(excengs.begin(), excengs.end(), id_) != excengs.end()) - return false; +string LyXCiteEngine::getDefaultBiblio(CiteEngineType const & cet) const +{ + string res; + string const etp = theCiteEnginesList.getTypeAsString(cet) + ":"; + //check whether all of the required packages are available + for (string const &s: default_biblios_) { + if (prefixIs(s, etp)) + res = split(s, ':'); + else if (!contains(s, ':') && res.empty()) + res = s; + } + return res; +} - return true; + +bool LyXCiteEngine::isDefaultBiblio(string const & bf) const +{ + string const bfs = ":" + bf; + for (string const &s: default_biblios_) + if (suffixIs(s, bfs) || bf == s) + return true; + + return false; } -bool LyXCiteEngine::areCompatible(string const & eng1, string const & eng2) +bool LyXCiteEngine::requires(const string p) const { - LyXCiteEngine const * const lm1 = theCiteEnginesList[eng1]; - if (lm1) - return lm1->isCompatible(eng2); - LyXCiteEngine const * const lm2 = theCiteEnginesList[eng2]; - if (lm2) - return lm2->isCompatible(eng1); - // Can't check it either way. - return true; + return find(package_list_.begin(), package_list_.end(), p) != package_list_.end(); } @@ -119,6 +126,43 @@ public: }; +// Local translators +namespace { + +typedef Translator CiteEngineTypeTranslator; + + +CiteEngineTypeTranslator const init_citeenginetypetranslator() +{ + CiteEngineTypeTranslator translator("authoryear", ENGINE_TYPE_AUTHORYEAR); + translator.addPair("numerical", ENGINE_TYPE_NUMERICAL); + translator.addPair("default", ENGINE_TYPE_DEFAULT); + return translator; +} + + +CiteEngineTypeTranslator const & citeenginetypetranslator() +{ + static CiteEngineTypeTranslator const translator = + init_citeenginetypetranslator(); + return translator; +} + +} // namespace + + +string CiteEnginesList::getTypeAsString(CiteEngineType const & et) const +{ + return citeenginetypetranslator().find(et); +} + + +CiteEngineType CiteEnginesList::getType(string const & et) const +{ + return citeenginetypetranslator().find(et); +} + + // Much of this is borrowed from LayoutFileList::read() bool CiteEnginesList::read() { @@ -171,6 +215,20 @@ bool CiteEnginesList::read() cet = split(cet, p, '|'); cets.push_back(p); } + if (!lex.next(true)) + break; + string const citeframework = lex.getString(); + LYXERR(Debug::TCLASS, "CiteFramework: " << citeframework); + if (!lex.next(true)) + break; + string db = lex.getString(); + LYXERR(Debug::TCLASS, "Default Biblio: " << db); + vector dbs; + while (!db.empty()) { + string p; + db = split(db, p, '|'); + dbs.push_back(p); + } if (!lex.next(true)) break; string const desc = lex.getString(); @@ -186,29 +244,9 @@ bool CiteEnginesList::read() str = split(str, p, ','); pkgs.push_back(p); } - if (!lex.next()) - break; - str = lex.getString(); - LYXERR(Debug::TCLASS, "Required: " << str); - vector req; - while (!str.empty()) { - string p; - str = split(str, p, '|'); - req.push_back(p); - } - if (!lex.next()) - break; - str = lex.getString(); - LYXERR(Debug::TCLASS, "Excluded: " << str); - vector exc; - while (!str.empty()) { - string p; - str = split(str, p, '|'); - exc.push_back(p); - } // This code is run when we have - // cename, fname, desc, pkgs, req and exc - addCiteEngine(cename, fname, cets, desc, pkgs, req, exc); + // cename, fname, cets, citeframework, dbs, desc, pkgs + addCiteEngine(cename, fname, cets, citeframework, dbs, desc, pkgs); } // end switch } //end while @@ -221,11 +259,11 @@ bool CiteEnginesList::read() void CiteEnginesList::addCiteEngine(string const & cename, - string const & filename, vector const & cets, string const & description, - vector const & pkgs, vector const & req, - vector const & exc) + string const & filename, vector const & cets, + string const & citeframework, vector const & dbs, + string const & description, vector const & pkgs) { - LyXCiteEngine ce(cename, filename, cets, description, pkgs, req, exc); + LyXCiteEngine ce(cename, filename, cets, citeframework, dbs, description, pkgs); englist_.push_back(ce); }