2
0
mirror of https://github.com/boostorg/spirit.git synced 2026-01-19 04:42:11 +00:00
Files
spirit/example/karma/quick_start1.cpp
Nikita Kniazev f44479bcd3 Remove boost/config/warning_disable.hpp usage
It is better to manage warnings on our side to know what warnings we need to fix or suppress, and the only thing that header does is disabling deprecation warnings on MSVC and ICC which we would prefer to not show to users.
2021-08-24 03:14:12 +03:00

119 lines
4.4 KiB
C++

// Copyright (c) 2001-2010 Hartmut Kaiser
//
// 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)
// The main purpose of this example is to show how a single container type can
// be formatted using different output grammars.
#include <boost/spirit/include/karma.hpp>
#include <boost/spirit/include/karma_stream.hpp>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace boost::spirit;
using namespace boost::spirit::ascii;
///////////////////////////////////////////////////////////////////////////////
int main()
{
///////////////////////////////////////////////////////////////////////////
// vector
std::vector<int> v (8);
std::generate(v.begin(), v.end(), std::rand); // randomly fill the vector
std::cout << "Output 8 integers from a std::vector<int>..." << std::endl;
// output the container as a sequence without any separation
std::cout << "...without any separation" << std::endl;
std::cout <<
karma::format(
*int_, // format description
v // data
) << std::endl << std::endl;
// output the container as a space separated sequence
std::cout << "...as space delimited list" << std::endl;
std::cout <<
karma::format_delimited(
*int_, // format description
space, // delimiter
v // data
) << std::endl << std::endl;
std::cout <<
karma::format_delimited(
'[' << *int_ << ']', // format description
space, // delimiter
v // data
) << std::endl << std::endl;
// output the container as a comma separated list
std::cout << "...as comma separated list" << std::endl;
std::cout <<
karma::format(
int_ % ", ", // format description
v // data
) << std::endl << std::endl;
std::cout <<
karma::format(
'[' << (int_ % ", ") << ']', // format description
v // data
) << std::endl << std::endl;
// output the container as a comma separated list of double's
std::cout << "...as comma separated list of doubles" << std::endl;
std::cout <<
karma::format(
double_ % ", ", // format description
v // data
) << std::endl << std::endl;
// output the container as a comma separated list of items enclosed in '()'
std::cout << "..as list of ints enclosed in '()'" << std::endl;
std::cout <<
karma::format(
('(' << int_ << ')') % ", ", // format description
v // data
) << std::endl << std::endl;
std::cout <<
karma::format(
'[' << (
('(' << int_ << ')') % ", "
) << ']', // format description
v // data
) << std::endl << std::endl;
// output the container as a HTML list
std::cout << "...as HTML bullet list" << std::endl;
std::cout <<
karma::format_delimited(
"<ol>" <<
// no delimiting within verbatim
*verbatim[" <li>" << int_ << "</li>"]
<< "</ol>", // format description
'\n', // delimiter
v // data
) << std::endl;
// output the container as right aligned column
std::cout << "...right aligned in a column" << std::endl;
std::cout <<
karma::format_delimited(
*verbatim[
"|" << right_align[int_] << "|"
], // format description
'\n', // delimiter
v // data
) << std::endl;
std::cout << std::endl;
return 0;
}