From 972f89d5a1d0c094241eb6ce1b8f499e3fcf151b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 20 Apr 2017 12:16:05 +0200 Subject: Sketch string_parser --- butl/string-parser | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 butl/string-parser diff --git a/butl/string-parser b/butl/string-parser new file mode 100644 index 0000000..e3fa507 --- /dev/null +++ b/butl/string-parser @@ -0,0 +1,45 @@ +// file : butl/string-parser -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BUTL_STRING_PARSER +#define BUTL_STRING_PARSER + +#include +#include +#include // size_t +#include // invalid_argument + +#include + +namespace butl +{ + class LIBBUTL_EXPORT invalid_string: public std::invalid_argument + { + public: + invalid_string (std::size_t p, const std::string& d) + : invalid_argument (d), pos (p) {} + + std::size_t pos; // Zero-based. + }; + + class LIBBUTL_EXPORT string_parser + { + public: + // Parse a whitespace-separated list of strings. Can contain single or + // double quoted substrings. No escaping is supported. If unquote is true, + // return one-level unquoted values. Throw invalid_string in case of + // invalid quoting. + // + std::vector + parse_quoted (const string&, bool unquote); + + // Remove a single level of quotes. Note that the format or the + // correctness of the quotation is not validated. + // + std::string + unquote (const string&); + }; +} + +#endif // BUTL_STRING_PARSER -- cgit v1.1