X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetcommandparams.h;h=ae6876ba834f180e86ea6628411eb001986e0906;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=e863a3772d570815b507c6aeff2d84c4439ffa47;hpb=357a3741c0655e174ad48ded68cca90b09a158e6;p=lyx.git diff --git a/src/insets/insetcommandparams.h b/src/insets/insetcommandparams.h index e863a3772d..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,55 +13,86 @@ #ifndef INSETCOMMANDPARAMS_H #define INSETCOMMANDPARAMS_H -#include +#include "support/docstring.h" + #include +#include -class LyXLex; +namespace lyx { +class LyXLex; class InsetCommandParams { public: - /// - InsetCommandParams(); - /// - explicit InsetCommandParams(std::string const & n, - std::string const & c = std::string(), - std::string const & o = std::string()); + /// Construct parameters for command \p name. \p name must be known. + explicit InsetCommandParams(std::string const & name); /// void read(LyXLex &); /// Parse the command + /// FIXME remove void scanCommand(std::string const &); /// void write(std::ostream &) const; /// Build the complete LaTeX command - std::string const getCommand() const; - /// - std::string const & getCmdName() const { return cmdname; } - /// - std::string const & getOptions() const { return options; } - /// - std::string const & getContents() const { return contents; } - /// - void setCmdName(std::string const & n) { cmdname = n; } - /// - void setOptions(std::string const & o) { options = o; } - /// - void setContents(std::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: /// - std::string cmdname; - /// - std::string contents; - /// - std::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 &); }; @@ -70,4 +102,7 @@ bool operator==(InsetCommandParams const &, InsetCommandParams const &); /// bool operator!=(InsetCommandParams const &, InsetCommandParams const &); + +} // namespace lyx + #endif