json - use unified error_handler accross grammars
This commit is contained in:
parent
25ed5d1e00
commit
58c7e5baa3
2 changed files with 18 additions and 34 deletions
|
@ -59,13 +59,13 @@ struct apply_feature_callback
|
|||
}
|
||||
};
|
||||
|
||||
template <typename Iterator, typename FeatureType, typename FeatureCallback = default_feature_callback>
|
||||
template <typename Iterator, typename FeatureType, typename FeatureCallback = default_feature_callback, typename ErrorHandler = error_handler<Iterator> >
|
||||
struct feature_collection_grammar :
|
||||
qi::grammar<Iterator, void(context_ptr const&, std::size_t&, FeatureCallback &), space_type>
|
||||
{
|
||||
feature_collection_grammar(mapnik::transcoder const& tr);
|
||||
// grammars
|
||||
feature_grammar<Iterator,FeatureType> feature_g;
|
||||
feature_grammar<Iterator, FeatureType, ErrorHandler> feature_g;
|
||||
// rules
|
||||
qi::rule<Iterator, void(context_ptr const&, std::size_t&, FeatureCallback&), space_type> start; // START
|
||||
qi::rule<Iterator, void(context_ptr const&, std::size_t&, FeatureCallback&), space_type> feature_collection;
|
||||
|
@ -74,9 +74,11 @@ struct feature_collection_grammar :
|
|||
qi::rule<Iterator, qi::locals<feature_ptr,int>, void(context_ptr const& ctx, std::size_t, FeatureCallback&), space_type> feature;
|
||||
// phoenix functions
|
||||
phoenix::function<apply_feature_callback> on_feature;
|
||||
// error handler
|
||||
boost::phoenix::function<ErrorHandler> const error_handler;
|
||||
};
|
||||
|
||||
template <typename Iterator, typename FeatureType, typename FeatureCallback = default_feature_callback>
|
||||
template <typename Iterator, typename FeatureType,typename FeatureCallback = default_feature_callback, typename ErrorHandler = error_handler<Iterator> >
|
||||
struct feature_grammar_callback :
|
||||
qi::grammar<Iterator, void(context_ptr const&, std::size_t&, FeatureCallback &), space_type>
|
||||
{
|
||||
|
@ -91,6 +93,8 @@ struct feature_grammar_callback :
|
|||
// phoenix functions
|
||||
phoenix::function<json::set_geometry_impl> set_geometry;
|
||||
phoenix::function<apply_feature_callback> on_feature;
|
||||
// error handler
|
||||
boost::phoenix::function<ErrorHandler> const error_handler;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -31,14 +31,14 @@
|
|||
|
||||
namespace mapnik { namespace json {
|
||||
|
||||
template <typename Iterator, typename FeatureType, typename FeatureCallback>
|
||||
feature_collection_grammar<Iterator,FeatureType, FeatureCallback>::feature_collection_grammar(mapnik::transcoder const& tr)
|
||||
template <typename Iterator, typename FeatureType, typename FeatureCallback, typename ErrorHandler>
|
||||
feature_collection_grammar<Iterator,FeatureType, FeatureCallback,ErrorHandler>::feature_collection_grammar(mapnik::transcoder const& tr)
|
||||
: feature_collection_grammar::base_type(start,"start"),
|
||||
feature_g(tr)
|
||||
{
|
||||
qi::lit_type lit;
|
||||
qi::eps_type eps;
|
||||
//qi::_1_type _1;
|
||||
qi::_1_type _1;
|
||||
qi::_2_type _2;
|
||||
qi::_3_type _3;
|
||||
qi::_4_type _4;
|
||||
|
@ -49,7 +49,8 @@ feature_collection_grammar<Iterator,FeatureType, FeatureCallback>::feature_colle
|
|||
using phoenix::construct;
|
||||
using phoenix::new_;
|
||||
using phoenix::val;
|
||||
|
||||
using qi::on_error;
|
||||
using qi::fail;
|
||||
start = feature_collection(_r1, _r2, _r3)
|
||||
;
|
||||
|
||||
|
@ -75,23 +76,12 @@ feature_collection_grammar<Iterator,FeatureType, FeatureCallback>::feature_colle
|
|||
features.name("features");
|
||||
feature.name("feature");
|
||||
feature_g.name("feature-grammar");
|
||||
|
||||
qi::on_error<qi::fail>
|
||||
(
|
||||
start
|
||||
, std::clog
|
||||
<< phoenix::val("Error parsing GeoJSON ")
|
||||
<< _4
|
||||
<< phoenix::val(" here: \"")
|
||||
<< construct<std::string>(_3, _2)
|
||||
<< phoenix::val('\"')
|
||||
<< std::endl
|
||||
);
|
||||
on_error<fail>(feature_collection, error_handler(_1, _2, _3, _4));
|
||||
}
|
||||
|
||||
|
||||
template <typename Iterator, typename FeatureType, typename FeatureCallback>
|
||||
feature_grammar_callback<Iterator,FeatureType, FeatureCallback>::feature_grammar_callback(mapnik::transcoder const& tr)
|
||||
template <typename Iterator, typename FeatureType, typename FeatureCallback, typename ErrorHandler>
|
||||
feature_grammar_callback<Iterator,FeatureType, FeatureCallback,ErrorHandler>::feature_grammar_callback(mapnik::transcoder const& tr)
|
||||
: feature_grammar_callback::base_type(start,"start"),
|
||||
feature_g(tr)
|
||||
{
|
||||
|
@ -108,7 +98,8 @@ feature_grammar_callback<Iterator,FeatureType, FeatureCallback>::feature_grammar
|
|||
using phoenix::construct;
|
||||
using phoenix::new_;
|
||||
using phoenix::val;
|
||||
|
||||
using qi::on_error;
|
||||
using qi::fail;
|
||||
start = feature_from_geometry(_r1, _r2, _r3) | feature(_r1, _r2, _r3)
|
||||
;
|
||||
|
||||
|
@ -126,18 +117,7 @@ feature_grammar_callback<Iterator,FeatureType, FeatureCallback>::feature_grammar
|
|||
feature_from_geometry.name("feature-from-geometry");
|
||||
feature_g.name("feature-grammar");
|
||||
geometry_g.name("geometry-grammar");
|
||||
|
||||
qi::on_error<qi::fail>
|
||||
(
|
||||
start
|
||||
, std::clog
|
||||
<< phoenix::val("Error parsing GeoJSON ")
|
||||
<< _4
|
||||
<< phoenix::val(" here: \"")
|
||||
<< construct<std::string>(_3, _2)
|
||||
<< phoenix::val('\"')
|
||||
<< std::endl
|
||||
);
|
||||
on_error<fail>(feature, error_handler(_1, _2, _3, _4));
|
||||
}
|
||||
|
||||
}}
|
||||
|
|
Loading…
Add table
Reference in a new issue