]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetcommandparams.h
* src/LyXAction.C: mark goto-clear-bookmark as working without buffer
[lyx.git] / src / insets / insetcommandparams.h
index e863a3772d570815b507c6aeff2d84c4439ffa47..ae6876ba834f180e86ea6628411eb001986e0906 100644 (file)
@@ -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.
  */
 #ifndef INSETCOMMANDPARAMS_H
 #define INSETCOMMANDPARAMS_H
 
-#include <string>
+#include "support/docstring.h"
+
 #include <iosfwd>
+#include <vector>
 
 
-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<docstring> 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