]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetCommandParams.h
This should be the last of the commits refactoring the InsetLayout code.
[lyx.git] / src / insets / InsetCommandParams.h
index 3e6b20eca8f689b1be11eeceaa5fa04105509a32..5e043a4e57395ec69a77a75b4755309b32446cb7 100644 (file)
@@ -6,6 +6,7 @@
  *
  * \author Angus Leeming
  * \author Georg Baum
+ * \author Richard Heck
  *
  * Full author contact details are available in file CREDITS.
  */
 #ifndef INSETCOMMANDPARAMS_H
 #define INSETCOMMANDPARAMS_H
 
+#include "InsetCode.h"
 #include "support/docstring.h"
 
 #include <iosfwd>
+#include <string>
 #include <vector>
 
 
@@ -23,41 +26,46 @@ namespace lyx {
 
 class Lexer;
 
+// No parameter may be named "preview", because that is a required
+// flag for all commands.
+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;
+};
+
+
 class InsetCommandParams {
 public:
-       /// Construct parameters for command \p name. \p name must be known.
-       explicit InsetCommandParams(std::string const & name);
+       /// Construct parameters for inset of type \p code.
+       explicit InsetCommandParams(InsetCode code);
+       /// Construct parameters for inset of type \p code with
+       /// command name \p cmdName.
+       explicit InsetCommandParams(InsetCode code,
+                       std::string const & cmdName);
+       ///
+       std::string insetType() const { return insetName(insetCode_); }
+       ///
+       InsetCode code() const { return insetCode_; }
        ///
        void read(Lexer &);
        /// Parse the command
-       /// FIXME remove
-       void scanCommand(std::string const &);
        ///
        void write(std::ostream &) const;
        /// Build the complete LaTeX command
        docstring const getCommand() const;
        /// Return the command name
-       std::string const & getCmdName() const { return name_; }
-       /// this is used by listings package.
-       std::string const getOptions() const;
-private:
-       /// FIXME remove
-       std::string const getSecOptions() const;
-public:
-       /// FIXME remove
-       std::string const getContents() const;
+       std::string const & getCmdName() const { return cmdName_; }
        /// 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);
-       /// this is used by the listings package
-       void setOptions(std::string const &);
-private:
-       /// FIXME remove
-       void setSecOptions(std::string const &);
-public:
-       /// FIXME remove
-       void setContents(std::string const &);
+       /// FIXME Would be better removed, but is used in BufferView.cpp in 
+       /// ways that make removal hard.
+       docstring const getFirstNonOptParam() const;
        /// get parameter \p name
        docstring const & operator[](std::string const & name) const;
        /// set parameter \p name
@@ -71,21 +79,25 @@ public:
 
 private:
        ///
-       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);
+       /// Get information for inset type \p code.
+       /// Returns 0 if the inset is not known.
+       static CommandInfo const * findInfo(InsetCode code);
+       /// Get information for \p code and command \p cmdName.
+       /// Returns 0 if the combination is not known.
+       /// Don't call this without first making sure the command name is
+       /// acceptable to the inset.
+       static CommandInfo const * findInfo(InsetCode code,
+                                           std::string const & cmdName);
+       ///
+       static bool isCompatibleCommand(InsetCode code, std::string const & s);
+       ///
+       std::string getDefaultCmd(InsetCode);
        /// Description of all command properties
        CommandInfo const * info_;
+       /// what kind of inset we're the parameters for
+       InsetCode insetCode_;
        /// The name of this command as it appears in .lyx and .tex files
-       std::string name_;
+       std::string cmdName_;
        ///
        typedef std::vector<docstring> ParamVector;
        /// The parameters (both optional and required ones). The order is