From 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 20:24:20 +0200 Subject: Adding upstream version 14.2.21. Signed-off-by: Daniel Baumann --- .../libs/spirit/example/qi/unescaped_string.cpp | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/boost/libs/spirit/example/qi/unescaped_string.cpp (limited to 'src/boost/libs/spirit/example/qi/unescaped_string.cpp') diff --git a/src/boost/libs/spirit/example/qi/unescaped_string.cpp b/src/boost/libs/spirit/example/qi/unescaped_string.cpp new file mode 100644 index 00000000..4a0d6002 --- /dev/null +++ b/src/boost/libs/spirit/example/qi/unescaped_string.cpp @@ -0,0 +1,72 @@ +// Copyright (c) 2010 Jeroen Habraken +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include + +#include +#include +#include + +namespace client +{ + namespace qi = boost::spirit::qi; + + template + struct unescaped_string + : qi::grammar + { + unescaped_string() + : unescaped_string::base_type(unesc_str) + { + unesc_char.add("\\a", '\a')("\\b", '\b')("\\f", '\f')("\\n", '\n') + ("\\r", '\r')("\\t", '\t')("\\v", '\v')("\\\\", '\\') + ("\\\'", '\'')("\\\"", '\"') + ; + + unesc_str = qi::lit(qi::_r1) + >> *(unesc_char | qi::alnum | "\\x" >> qi::hex) + >> qi::lit(qi::_r1) + ; + } + + qi::rule unesc_str; + qi::symbols unesc_char; + }; + +} + +/////////////////////////////////////////////////////////////////////////////// +// Main program +/////////////////////////////////////////////////////////////////////////////// +int main() +{ + namespace qi = boost::spirit::qi; + + typedef std::string::const_iterator iterator_type; + + std::string parsed; + + std::string str("'''string\\x20to\\x20unescape\\x3a\\x20\\n\\r\\t\\\"\\'\\x41'''"); + char const* quote = "'''"; + + iterator_type iter = str.begin(); + iterator_type end = str.end(); + + client::unescaped_string p; + if (!qi::parse(iter, end, p(quote), parsed)) + { + std::cout << "-------------------------\n"; + std::cout << "Parsing failed\n"; + std::cout << "-------------------------\n"; + } + else + { + std::cout << "-------------------------\n"; + std::cout << "Parsed: " << parsed << "\n"; + std::cout << "-------------------------\n"; + } + + return 0; +} -- cgit v1.2.3