split csv_line_grammar into *.hpp *_impl.hpp ref #3343
This commit is contained in:
parent
d60891e201
commit
da61043dd9
3 changed files with 65 additions and 31 deletions
|
@ -65,36 +65,7 @@ struct csv_white_space_skipper : qi::primitive_parser<csv_white_space_skipper>
|
||||||
template <typename Iterator, typename Skipper = csv_white_space_skipper>
|
template <typename Iterator, typename Skipper = csv_white_space_skipper>
|
||||||
struct csv_line_grammar : qi::grammar<Iterator, csv_line(char, char), Skipper>
|
struct csv_line_grammar : qi::grammar<Iterator, csv_line(char, char), Skipper>
|
||||||
{
|
{
|
||||||
csv_line_grammar()
|
csv_line_grammar();
|
||||||
: csv_line_grammar::base_type(line)
|
|
||||||
{
|
|
||||||
qi::_r1_type _r1;
|
|
||||||
qi::_r2_type _r2;
|
|
||||||
qi::lit_type lit;
|
|
||||||
qi::char_type char_;
|
|
||||||
unesc_char.add
|
|
||||||
("\\a", '\a')
|
|
||||||
("\\b", '\b')
|
|
||||||
("\\f", '\f')
|
|
||||||
("\\n", '\n')
|
|
||||||
("\\r", '\r')
|
|
||||||
("\\t", '\t')
|
|
||||||
("\\v", '\v')
|
|
||||||
("\\\\",'\\')
|
|
||||||
("\\\'", '\'')
|
|
||||||
("\\\"", '\"')
|
|
||||||
("\"\"", '\"') // double quote
|
|
||||||
;
|
|
||||||
line = -lit("\r") > -lit("\n") > column(_r1, _r2) % lit(_r1)
|
|
||||||
;
|
|
||||||
column = quoted(_r2) | *(char_ - lit(_r1))
|
|
||||||
;
|
|
||||||
quoted = lit(_r1) > text(_r1) > lit(_r1) // support unmatched quotes or not (??)
|
|
||||||
;
|
|
||||||
text = *(unesc_char | (char_ - lit(_r1)))
|
|
||||||
;
|
|
||||||
BOOST_SPIRIT_DEBUG_NODES((line)(column)(quoted));
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
qi::rule<Iterator, csv_line(char, char), Skipper> line;
|
qi::rule<Iterator, csv_line(char, char), Skipper> line;
|
||||||
qi::rule<Iterator, csv_value(char, char)> column; // no-skip
|
qi::rule<Iterator, csv_value(char, char)> column; // no-skip
|
||||||
|
|
61
include/mapnik/csv/csv_grammar_impl.hpp
Normal file
61
include/mapnik/csv/csv_grammar_impl.hpp
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 Artem Pavlenko
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include <mapnik/csv/csv_grammar.hpp>
|
||||||
|
|
||||||
|
namespace mapnik {
|
||||||
|
|
||||||
|
namespace qi = boost::spirit::qi;
|
||||||
|
|
||||||
|
template <typename Iterator, typename Skipper>
|
||||||
|
csv_line_grammar<Iterator, Skipper>::csv_line_grammar()
|
||||||
|
: csv_line_grammar::base_type(line)
|
||||||
|
{
|
||||||
|
qi::_r1_type _r1;
|
||||||
|
qi::_r2_type _r2;
|
||||||
|
qi::lit_type lit;
|
||||||
|
qi::char_type char_;
|
||||||
|
unesc_char.add
|
||||||
|
("\\a", '\a')
|
||||||
|
("\\b", '\b')
|
||||||
|
("\\f", '\f')
|
||||||
|
("\\n", '\n')
|
||||||
|
("\\r", '\r')
|
||||||
|
("\\t", '\t')
|
||||||
|
("\\v", '\v')
|
||||||
|
("\\\\",'\\')
|
||||||
|
("\\\'", '\'')
|
||||||
|
("\\\"", '\"')
|
||||||
|
("\"\"", '\"') // double quote
|
||||||
|
;
|
||||||
|
line = -lit("\r") > -lit("\n") > column(_r1, _r2) % lit(_r1)
|
||||||
|
;
|
||||||
|
column = quoted(_r2) | *(char_ - lit(_r1))
|
||||||
|
;
|
||||||
|
quoted = lit(_r1) > text(_r1) > lit(_r1) // support unmatched quotes or not (??)
|
||||||
|
;
|
||||||
|
text = *(unesc_char | (char_ - lit(_r1)))
|
||||||
|
;
|
||||||
|
BOOST_SPIRIT_DEBUG_NODES((line)(column)(quoted));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace mapnik
|
|
@ -27,9 +27,11 @@
|
||||||
#include <mapnik/wkt/wkt_factory.hpp>
|
#include <mapnik/wkt/wkt_factory.hpp>
|
||||||
#include <mapnik/json/geometry_parser.hpp>
|
#include <mapnik/json/geometry_parser.hpp>
|
||||||
#include <mapnik/util/conversions.hpp>
|
#include <mapnik/util/conversions.hpp>
|
||||||
#include <mapnik/csv/csv_grammar.hpp>
|
|
||||||
#include <mapnik/util/trim.hpp>
|
#include <mapnik/util/trim.hpp>
|
||||||
#include <mapnik/datasource.hpp>
|
#include <mapnik/datasource.hpp>
|
||||||
|
// csv grammar
|
||||||
|
#include <mapnik/csv/csv_grammar_impl.hpp>
|
||||||
|
//
|
||||||
#include "csv_getline.hpp"
|
#include "csv_getline.hpp"
|
||||||
#include "csv_utils.hpp"
|
#include "csv_utils.hpp"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue