From c09cd7512491cee1e82c1ad8128ce9fd4bc3f79b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 22 Sep 2017 23:32:28 +0200 Subject: Initial modularization with both Clang and VC hacks Note: gave up on VC about half way though. --- libbutl/string-parser.mxx | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 libbutl/string-parser.mxx (limited to 'libbutl/string-parser.mxx') diff --git a/libbutl/string-parser.mxx b/libbutl/string-parser.mxx new file mode 100644 index 0000000..559b938 --- /dev/null +++ b/libbutl/string-parser.mxx @@ -0,0 +1,67 @@ +// file : libbutl/string-parser.mxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef __cpp_modules +#pragma once +#endif + +// C includes. + +#ifndef __cpp_lib_modules +#include +#include +#include // size_t +#include // pair +#include // invalid_argument +#endif + +// Other includes. + +#ifdef __cpp_modules +export module butl.string_parser; +#ifdef __cpp_lib_modules +import std.core; +#endif +#endif + +#include + +LIBBUTL_MODEXPORT namespace butl +{ + namespace string_parser + { + class LIBBUTL_SYMEXPORT invalid_string: public std::invalid_argument + { + public: + invalid_string (std::size_t p, const std::string& d) + : invalid_argument (d), position (p) {} + + std::size_t position; // Zero-based. + }; + + // 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. + // + LIBBUTL_SYMEXPORT std::vector + parse_quoted (const std::string&, bool unquote); + + // As above but return a list of string and zero-based position pairs. + // Position is useful for issuing diagnostics about an invalid string + // during second-level parsing. + // + LIBBUTL_SYMEXPORT std::vector> + parse_quoted_position (const std::string&, bool unquote); + + // Remove a single level of quotes. Note that the format or the + // correctness of the quotation is not validated. + // + LIBBUTL_SYMEXPORT std::string + unquote (const std::string&); + + LIBBUTL_SYMEXPORT std::vector + unquote (const std::vector&); + } +} -- cgit v1.1