refactor error handler to work with mapnik/debug macros
This commit is contained in:
parent
e7e235a8b5
commit
5df668d126
2 changed files with 21 additions and 17 deletions
|
@ -31,10 +31,11 @@
|
||||||
#include <mapnik/value.hpp>
|
#include <mapnik/value.hpp>
|
||||||
#include <mapnik/json/generic_json.hpp>
|
#include <mapnik/json/generic_json.hpp>
|
||||||
#include <mapnik/json/value_converters.hpp>
|
#include <mapnik/json/value_converters.hpp>
|
||||||
|
#include <mapnik/debug.hpp>
|
||||||
// spirit::qi
|
// spirit::qi
|
||||||
#include <boost/spirit/include/qi.hpp>
|
#include <boost/spirit/include/qi.hpp>
|
||||||
#include <boost/spirit/include/phoenix.hpp>
|
#include <boost/spirit/include/phoenix.hpp>
|
||||||
|
#include <boost/spirit/include/support_line_pos_iterator.hpp>
|
||||||
|
|
||||||
namespace mapnik { namespace json {
|
namespace mapnik { namespace json {
|
||||||
|
|
||||||
|
@ -88,7 +89,19 @@ struct extract_geometry
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Iterator, typename FeatureType>
|
template <typename Iterator>
|
||||||
|
struct error_handler
|
||||||
|
{
|
||||||
|
using result_type = void;
|
||||||
|
void operator() (
|
||||||
|
Iterator first, Iterator last,
|
||||||
|
Iterator err_pos, boost::spirit::info const& what) const
|
||||||
|
{
|
||||||
|
MAPNIK_LOG_WARN(error_handler) << what << " expected in input";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename Iterator, typename FeatureType, typename ErrorHandler = error_handler<Iterator> >
|
||||||
struct feature_grammar :
|
struct feature_grammar :
|
||||||
qi::grammar<Iterator, void(FeatureType&),
|
qi::grammar<Iterator, void(FeatureType&),
|
||||||
space_type>
|
space_type>
|
||||||
|
@ -110,7 +123,7 @@ struct feature_grammar :
|
||||||
phoenix::function<put_property> put_property_;
|
phoenix::function<put_property> put_property_;
|
||||||
phoenix::function<extract_geometry> extract_geometry_;
|
phoenix::function<extract_geometry> extract_geometry_;
|
||||||
// error handler
|
// error handler
|
||||||
boost::phoenix::function<where_message> where_message_;
|
boost::phoenix::function<ErrorHandler> const error_handler;
|
||||||
// geometry
|
// geometry
|
||||||
geometry_grammar<Iterator> geometry_grammar_;
|
geometry_grammar<Iterator> geometry_grammar_;
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,11 +26,12 @@
|
||||||
|
|
||||||
namespace mapnik { namespace json {
|
namespace mapnik { namespace json {
|
||||||
|
|
||||||
template <typename Iterator, typename FeatureType>
|
template <typename Iterator, typename FeatureType, typename ErrorHandler>
|
||||||
feature_grammar<Iterator,FeatureType>::feature_grammar(mapnik::transcoder const& tr)
|
feature_grammar<Iterator,FeatureType,ErrorHandler>::feature_grammar(mapnik::transcoder const& tr)
|
||||||
: feature_grammar::base_type(feature,"feature"),
|
: feature_grammar::base_type(feature,"feature"),
|
||||||
json_(),
|
json_(),
|
||||||
put_property_(put_property(tr))
|
put_property_(put_property(tr)),
|
||||||
|
error_handler(ErrorHandler())
|
||||||
{
|
{
|
||||||
qi::lit_type lit;
|
qi::lit_type lit;
|
||||||
qi::long_long_type long_long;
|
qi::long_long_type long_long;
|
||||||
|
@ -116,17 +117,7 @@ feature_grammar<Iterator,FeatureType>::feature_grammar(mapnik::transcoder const&
|
||||||
properties.name("Properties");
|
properties.name("Properties");
|
||||||
attributes.name("Attributes");
|
attributes.name("Attributes");
|
||||||
|
|
||||||
on_error<fail>
|
on_error<fail>(feature, error_handler(_1, _2, _3, _4));
|
||||||
(
|
|
||||||
feature
|
|
||||||
, std::clog
|
|
||||||
<< phoenix::val("Error! Expecting ")
|
|
||||||
<< _4 // what failed?
|
|
||||||
<< phoenix::val(" here: \"")
|
|
||||||
<< where_message_(_3, _2, 16) // where? 16 is max chars to output
|
|
||||||
<< phoenix::val("\"")
|
|
||||||
<< std::endl
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue