split csv_line_grammar into *.hpp *_impl.hpp ref #3343
This commit is contained in:
parent
1c29054dea
commit
bde9e61e21
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>
|
||||
struct csv_line_grammar : qi::grammar<Iterator, csv_line(char, char), 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));
|
||||
}
|
||||
csv_line_grammar();
|
||||
private:
|
||||
qi::rule<Iterator, csv_line(char, char), Skipper> line;
|
||||
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/json/geometry_parser.hpp>
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
#include <mapnik/csv/csv_grammar.hpp>
|
||||
#include <mapnik/util/trim.hpp>
|
||||
#include <mapnik/datasource.hpp>
|
||||
// csv grammar
|
||||
#include <mapnik/csv/csv_grammar_impl.hpp>
|
||||
//
|
||||
#include "csv_getline.hpp"
|
||||
#include "csv_utils.hpp"
|
||||
|
||||
|
|
Loading…
Reference in a new issue