X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetcommandparams.h;h=ae6876ba834f180e86ea6628411eb001986e0906;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=e5186a9cf20f47441914464b3fb46478e2a33855;hpb=236ea81bc5c0ce7101c9460d1ee97b8f3c9be9df;p=lyx.git diff --git a/src/insets/insetcommandparams.h b/src/insets/insetcommandparams.h index e5186a9cf2..ae6876ba83 100644 --- a/src/insets/insetcommandparams.h +++ b/src/insets/insetcommandparams.h @@ -5,6 +5,7 @@ * Licence details can be found in the file COPYING. * * \author Angus Leeming + * \author Georg Baum * * Full author contact details are available in file CREDITS. */ @@ -12,65 +13,96 @@ #ifndef INSETCOMMANDPARAMS_H #define INSETCOMMANDPARAMS_H - -#include "support/std_string.h" +#include "support/docstring.h" #include +#include + + +namespace lyx { class LyXLex; class InsetCommandParams { public: - /// - InsetCommandParams(); - /// - explicit - InsetCommandParams(string const & n, - string const & c = string(), - string const & o = string()); + /// Construct parameters for command \p name. \p name must be known. + explicit InsetCommandParams(std::string const & name); /// void read(LyXLex &); /// Parse the command - void scanCommand(string const &); + /// FIXME remove + void scanCommand(std::string const &); /// void write(std::ostream &) const; /// Build the complete LaTeX command - string const getCommand() const; - /// - string const & getCmdName() const { return cmdname; } - /// - string const & getOptions() const { return options; } - /// - string const & getContents() const { return contents; } - /// - void setCmdName(string const & n) { cmdname = n; } - /// - void setOptions(string const & o) { options = o; } - /// - void setContents(string const & c) { contents = c; } + docstring const getCommand() const; + /// Return the command name + std::string const & getCmdName() const { return name_; } + /// FIXME remove + std::string const getOptions() const; + /// FIXME remove + std::string const getSecOptions() const; + /// FIXME remove + std::string const getContents() const; + /// Set the name to \p n. This must be a known name. All parameters + /// are cleared except those that exist also in the new command. + /// What matters here is the parameter name, not position. + void setCmdName(std::string const & n); + /// FIXME remove + void setOptions(std::string const &); + /// FIXME remove + void setSecOptions(std::string const &); + /// FIXME remove + void setContents(std::string const &); + /// get parameter \p name + docstring const & operator[](std::string const & name) const; + /// set parameter \p name + docstring & operator[](std::string const & name); /// bool preview() const { return preview_; } /// void preview(bool p) { preview_ = p; } + /// Clear the values of all parameters + void clear(); private: /// - string cmdname; - /// - string contents; - /// - string options; + struct CommandInfo { + /// Number of parameters + size_t n; + /// Parameter names. paramnames[n] must be "". + char const * const * paramnames; + /// Tells whether a parameter is optional + bool const * optional; + }; + /// Get information for command \p name. + /// Returns 0 if the command is not known. + static CommandInfo const * findInfo(std::string const & name); + /// Description of all command properties + CommandInfo const * info_; + /// The name of this command as it appears in .lyx and .tex files + std::string name_; + /// + typedef std::vector ParamVector; + /// The parameters (both optional and required ones). The order is + /// the same that is required for LaTeX output. The size of params_ + /// is always info_->n. + ParamVector params_; /// bool preview_; + /// + friend bool operator==(InsetCommandParams const &, + InsetCommandParams const &); }; /// -bool operator==(InsetCommandParams const &, - InsetCommandParams const &); +bool operator==(InsetCommandParams const &, InsetCommandParams const &); /// -bool operator!=(InsetCommandParams const &, - InsetCommandParams const &); +bool operator!=(InsetCommandParams const &, InsetCommandParams const &); + + +} // namespace lyx #endif