X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FModuleList.cpp;h=d8fd34cc729437bab7c7ef45eb0f6b5affbe27c0;hb=26ba2a65838731ce639a09539f617cb0f0be3b22;hp=547f1f922072a74a4c5c19ed4b84f222bf9de0a1;hpb=a940cc3f6b46a21c2738e9ad409bfacbde5320e6;p=lyx.git diff --git a/src/ModuleList.cpp b/src/ModuleList.cpp index 547f1f9220..d8fd34cc72 100644 --- a/src/ModuleList.cpp +++ b/src/ModuleList.cpp @@ -4,7 +4,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Richard Heck + * \author Richard Kimberly Heck * * Full author contact details are available in file CREDITS. */ @@ -18,11 +18,12 @@ #include "support/debug.h" #include "support/FileName.h" +#include "support/gettext.h" #include "support/filetools.h" #include "support/lstrings.h" #include - + using namespace std; using namespace lyx::support; @@ -30,54 +31,64 @@ namespace lyx { //global variable: module list -ModuleList moduleList; +ModuleList theModuleList; -LyXModule::LyXModule(string const & n, string const & i, +LyXModule::LyXModule(string const & n, string const & i, string const & d, vector const & p, - vector const & r, vector const & e): - name(n), id(i), description(d), - packageList(p), requiredModules(r), excludedModules(e), - checked(false) + vector const & r, vector const & e, + string const & c, bool const local): + name_(n), id_(i), description_(d), package_list_(p), + required_modules_(r), excluded_modules_(e), category_(c), + checked_(false), available_(false), local_(local) +{ + filename_ = id_ + ".module"; +} + + +vector LyXModule::prerequisites() const { - filename = id + ".module"; + if (!checked_) + isAvailable(); + return prerequisites_; } -bool LyXModule::isAvailable() { - if (packageList.empty()) +bool LyXModule::isAvailable() const +{ + if (package_list_.empty()) return true; - if (checked) - return available; - checked = true; + if (checked_) + return available_; + checked_ = true; + available_ = true; //check whether all of the required packages are available - vector::const_iterator it = packageList.begin(); - vector::const_iterator end = packageList.end(); + vector::const_iterator it = package_list_.begin(); + vector::const_iterator end = package_list_.end(); for (; it != end; ++it) { if (!LaTeXFeatures::isAvailable(*it)) { - available = false; - return available; + available_ = false; + prerequisites_.push_back(*it); } } - available = true; - return available; + return available_; } -bool LyXModule::isCompatible(string const & modName) const +bool LyXModule::isCompatible(string const & modname) const { // do we exclude it? - if (find(excludedModules.begin(), excludedModules.end(), modName) != - excludedModules.end()) + if (find(excluded_modules_.begin(), excluded_modules_.end(), modname) != + excluded_modules_.end()) return false; - LyXModule const * const lm = moduleList[modName]; + LyXModule const * const lm = theModuleList[modname]; if (!lm) return true; // does it exclude us? - vector const excMods = lm->getExcludedModules(); - if (find(excMods.begin(), excMods.end(), name) != excMods.end()) + vector const excmods = lm->getExcludedModules(); + if (find(excmods.begin(), excmods.end(), id_) != excmods.end()) return false; return true; @@ -86,37 +97,36 @@ bool LyXModule::isCompatible(string const & modName) const bool LyXModule::areCompatible(string const & mod1, string const & mod2) { - LyXModule const * const lm1 = moduleList[mod1]; + LyXModule const * const lm1 = theModuleList[mod1]; if (lm1) return lm1->isCompatible(mod2); - LyXModule const * const lm2 = moduleList[mod2]; + LyXModule const * const lm2 = theModuleList[mod2]; if (lm2) return lm2->isCompatible(mod1); // Can't check it either way. return true; } + // used when sorting the module list. -class ModuleSorter -{ +class ModuleSorter { public: int operator()(LyXModule const & lm1, LyXModule const & lm2) const { - return lm1.getName() < lm2.getName(); + return _(lm1.getName()) < _(lm2.getName()); } }; -//Much of this is borrowed from LayoutFileList::read() -bool ModuleList::load() +// Much of this is borrowed from LayoutFileList::read() +bool ModuleList::read() { FileName const real_file = libFileSearch("", "lyxmodules.lst"); LYXERR(Debug::TCLASS, "Reading modules from `" << real_file << '\''); if (real_file.empty()) { - LYXERR0("unable to find modules file `" - << to_utf8(makeDisplayPath(real_file.absFilename(), 1000)) - << "'.\nNo modules will be available."); + LYXERR0("unable to find modules file `lyxmodules.lst'.\n" + << "No modules will be available."); return false; } @@ -129,7 +139,7 @@ bool ModuleList::load() if (!lex.isOK()) { LYXERR0("unable to open modules file `" - << to_utf8(makeDisplayPath(real_file.absFilename(), 1000)) + << to_utf8(makeDisplayPath(real_file.absFileName(), 1000)) << "'\nNo modules will be available."); return false; } @@ -144,13 +154,13 @@ bool ModuleList::load() finished = true; break; default: - string const modName = lex.getString(); - LYXERR(Debug::TCLASS, "Module name: " << modName); + string const modname = lex.getString(); + LYXERR(Debug::TCLASS, "Module name: " << modname); if (!lex.next()) break; string const fname = lex.getString(); LYXERR(Debug::TCLASS, "Filename: " << fname); - if (!lex.next()) + if (!lex.next(true)) break; string const desc = lex.getString(); LYXERR(Debug::TCLASS, "Description: " << desc); @@ -185,26 +195,34 @@ bool ModuleList::load() str = split(str, p, '|'); exc.push_back(p); } + if (!lex.next()) + break; + string const catgy = lex.getString(); + LYXERR(Debug::TCLASS, "Category: " << catgy); + if (!lex.next()) + break; + bool const local = lex.getString() == "true"; + LYXERR(Debug::TCLASS, "Local: " << local); // This code is run when we have - // modName, fname, desc, pkgs, req, and exc - addLayoutModule(modName, fname, desc, pkgs, req, exc); + // modName, fname, desc, pkgs, req, exc, catgy, and local + addLayoutModule(modname, fname, desc, pkgs, req, exc, catgy, local); } // end switch } //end while - + LYXERR(Debug::TCLASS, "End of parsing of lyxmodules.lst"); - if (!moduleList.empty()) - sort(moduleList.begin(), moduleList.end(), ModuleSorter()); + if (!theModuleList.empty()) + sort(theModuleList.begin(), theModuleList.end(), ModuleSorter()); return true; } -void ModuleList::addLayoutModule(string const & moduleName, +void ModuleList::addLayoutModule(string const & modname, string const & filename, string const & description, vector const & pkgs, vector const & req, - vector const & exc) + vector const & exc, string const & catgy, bool const local) { - LyXModule lm(moduleName, filename, description, pkgs, req, exc); + LyXModule lm(modname, filename, description, pkgs, req, exc, catgy, local); modlist_.push_back(lm); } @@ -233,6 +251,18 @@ LyXModuleList::iterator ModuleList::end() } +LyXModule const * ModuleList::operator[](string const & str) const +{ + LyXModuleList::const_iterator it = modlist_.begin(); + for (; it != modlist_.end(); ++it) + if (it->getID() == str) { + LyXModule const & mod = *it; + return &mod; + } + return nullptr; +} + + LyXModule * ModuleList::operator[](string const & str) { LyXModuleList::iterator it = modlist_.begin(); @@ -241,7 +271,7 @@ LyXModule * ModuleList::operator[](string const & str) LyXModule & mod = *it; return &mod; } - return 0; + return nullptr; } } // namespace lyx