X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FModuleList.h;h=66353affe35928ad443503fe3f5aac64733eda1c;hb=24fe5b08c0e1dfb739738acb6fc995da7315d35f;hp=2281a5d74c48c8d9e3ec2aef34880e4389d69a92;hpb=d226da15597b3615cb669d6d09d004671efd24ed;p=lyx.git diff --git a/src/ModuleList.h b/src/ModuleList.h index 2281a5d74c..66353affe3 100644 --- a/src/ModuleList.h +++ b/src/ModuleList.h @@ -21,14 +21,34 @@ namespace lyx { /** * This struct represents a particular LyX "module", which is a like a layout * file, except that it does not stand alone. In that sense, it is more like - * a LaTeX package, where a layout file corresponds to a LaTeX class. + * a LaTeX package, where a layout file corresponds to a LaTeX class. Or, in + * LyX's own terms, a module is more like an included file that can be used + * with various document classes. The difference is that using a module only + * means selecting it in the Document>Settings dialog, whereas including a + * layout file means layout file editing. + * + * In general, a given module can be used with any document class. That said, + * one module may `require' another, or it may `exclude' some other module. + * The requires and excludes are given in comments within the module file, + * which must begin roughly so: + * #\DeclareLyXModule{Theorems (By Section)} + * #DescriptionBegin + * #Numbers theorems and the like by section. + * #DescriptionEnd + * #Requires: theorems-std | theorems-ams + * #Excludes: theorems-chap + * The description is used in the gui to give information to the user. The + * Requires and Excludes lines are read by the configuration script and + * written to a file lyxmodules.lst in the user configuration directory. + * + * Modules can also be "provided" or "excluded" by document classes, using + * the ProvidesModule and ExcludesModule tags. */ -//FIXME Give us some access functions here. class LyXModule { public: /// - LyXModule(std::string const & n, std::string const & f, + LyXModule(std::string const & n, std::string const & i, std::string const & d, std::vector const & p, std::vector const & r, std::vector const & e); @@ -37,6 +57,8 @@ public: /// std::string const & getName() const { return name; } /// + std::string const & getID() const { return id; } + /// std::string const & getFilename() const { return filename; } /// std::string const & getDescription() const { return description; } @@ -49,11 +71,20 @@ public: /// Modules this one excludes: the list should be treated disjunctively std::vector const & getExcludedModules() const { return excludedModules; } - + /// \return true if the module is compatible with this one, i.e., + /// it does not exclude us and we do not exclude it. + /// this will also return true if modName is unknown and we do not + /// exclude it, since in that case we cannot check its exclusions. + bool isCompatible(std::string const & modName) const; + /// + static bool areCompatible(std::string const & mod1, std::string const & mod2); private: /// what appears in the ui std::string name; - /// the filename, without any path + /// the module's unique identifier + /// at present, this is the filename, without the extension + std::string id; + /// the filename std::string filename; /// a short description for use in the ui std::string description; @@ -91,7 +122,7 @@ public: LyXModuleList::iterator end(); /// bool empty() const { return modlist_.empty(); } - /// Returns a pointer to the LyXModule with name str. + /// Returns a pointer to the LyXModule with filename str. /// Returns a null pointer if no such module is found. LyXModule * operator[](std::string const & str); private: