X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FParse.hh;h=3b059af0d0a3518222cc0e13fbc0722a313b138a;hb=412cf8e222086fb5d89b15cb11556799e131f390;hp=4a5d32ade0b5e49ea3cc5b1e616890320ef655c4;hpb=327ff174bdc67db20c64d92c9a171abfa5443333;p=senf.git diff --git a/Console/Parse.hh b/Console/Parse.hh index 4a5d32a..3b059af 100644 --- a/Console/Parse.hh +++ b/Console/Parse.hh @@ -64,11 +64,14 @@ namespace console { class ParseCommandInfo { typedef std::vector Tokens; + typedef std::vector CommandPath; public: + typedef CommandPath::const_iterator path_iterator; typedef Tokens::const_iterator token_iterator; typedef boost::iterator_range argument_value_type; + private: typedef std::vector Arguments; @@ -76,21 +79,23 @@ namespace console { typedef Arguments::const_iterator argument_iterator; typedef Arguments::size_type size_type; - std::string const & commandPath() const; - - size_type arguments() const; - argument_iterator begin_arguments() const; - argument_iterator end_arguments() const; - - size_type tokens() const; - token_iterator begin_tokens() const; - token_iterator end_tokens() const; + typedef boost::iterator_range CommandPathRange; + typedef boost::iterator_range ArgumentsRange; + typedef boost::iterator_range TokensRange; + + enum BuiltinCommand { NoBuiltin, BuiltinCD, BuiltinLS }; + + BuiltinCommand builtin() const; + CommandPathRange commandPath() const; + ArgumentsRange arguments() const; + TokensRange tokens() const; protected: private: void init(); - void setCommand(std::string const & commandPath); + void setBuiltin(BuiltinCommand builtin); + void setCommand(std::vector & commandPath); void startArgument(); void endArgument(); void addToken(ArgumentToken const & token); @@ -98,11 +103,12 @@ namespace console { struct MakeRange; - std::string commandPath_; + std::vector commandPath_; typedef std::pair TempArgumentRange; typedef std::vector TempArguments; + BuiltinCommand builtin_; Tokens tokens_; Arguments arguments_; TempArguments tempArguments_; @@ -110,6 +116,8 @@ namespace console { friend class detail::ParserAccess; }; + std::ostream & operator<<(std::ostream & stream, ParseCommandInfo const & info); + /** \brief */ class SingleCommandParser