diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-07-31 00:06:50 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-07-31 00:06:50 +0200 |
| commit | b65f8cc887748a3076639f6eabab65fad40ac67f (patch) | |
| tree | 3794d38b96c9b548a4d78e9d451d8c58422b4cc6 /src/command_manager.hh | |
| parent | a3cb9bfc5e0b26a7953ec3795944c6a6563cd7b6 (diff) | |
CommandParameters is a list of Tokens instead of Strings
CommandManager string parsing is less ad-hoc.
Diffstat (limited to 'src/command_manager.hh')
| -rw-r--r-- | src/command_manager.hh | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/command_manager.hh b/src/command_manager.hh index b3f0917e..134dbd48 100644 --- a/src/command_manager.hh +++ b/src/command_manager.hh @@ -21,7 +21,31 @@ struct wrong_argument_count : runtime_error wrong_argument_count() : runtime_error("wrong argument count") {} }; -typedef memoryview<String> CommandParameters; +struct Token +{ + enum class Type + { + Raw, + ShellExpand, + CommandSeparator + }; + Token() : m_type(Type::Raw) {} + + explicit Token(const String& string) : m_content(string), m_type(Type::Raw) {} + explicit Token(Type type) : m_type(type) {} + Token(Type type, String str) : m_content(str), m_type(type) {} + + Type type() const { return m_type; } + + const String& content() const { return m_content; } + +private: + Type m_type; + String m_content; +}; + +using CommandParameters = memoryview<Token>; + typedef std::function<void (const CommandParameters&, const Context& context)> Command; |
