Merge branch 'master' of github.com:mapnik/mapnik

This commit is contained in:
Dane Springmeyer 2013-02-27 09:40:25 -05:00
commit 9a49d0c82f
3 changed files with 35 additions and 10 deletions

View file

@ -39,7 +39,10 @@ struct image_filter_grammar :
{
image_filter_grammar();
qi::rule<Iterator, ContType(), qi::ascii::space_type> start;
qi::rule<Iterator, ContType(), qi::locals<int,int>, qi::ascii::space_type> filter;
qi::rule<Iterator, ContType(), qi::ascii::space_type> filter;
qi::rule<Iterator, qi::locals<int,int>, void(ContType&), qi::ascii::space_type> agg_blur_filter;
qi::rule<Iterator, qi::locals<std::string>, void(ContType&), qi::ascii::space_type> hsla_filter;
qi::rule<Iterator, std::string(), qi::ascii::space_type> string_arg;
qi::uint_parser< unsigned, 10, 1, 3 > radius_;
};

View file

@ -30,7 +30,6 @@
#include <boost/variant/variant_fwd.hpp>
// stl
#include <iostream>
#include <vector>
#include <ostream>
#include <iterator> // for std::back_insert_iterator
@ -55,6 +54,14 @@ struct agg_stack_blur
unsigned ry;
};
struct hsla
{
hsla(std::string const& str)
{
// do something
}
};
typedef boost::variant<filter::blur,
filter::gray,
filter::agg_stack_blur,
@ -64,7 +71,8 @@ typedef boost::variant<filter::blur,
filter::sobel,
filter::x_gradient,
filter::y_gradient,
filter::invert> filter_type;
filter::invert,
filter::hsla> filter_type;
inline std::ostream& operator<< (std::ostream& os, blur)
{

View file

@ -44,8 +44,11 @@ image_filter_grammar<Iterator,ContType>::image_filter_grammar()
using qi::_1;
using qi::_a;
using qi::_b;
using qi::_r1;
using qi::eps;
using qi::char_;
using qi::lexeme;
using boost::spirit::ascii::string;
using phoenix::push_back;
using phoenix::construct;
@ -75,15 +78,26 @@ image_filter_grammar<Iterator,ContType>::image_filter_grammar()
|
lit("y-gradient")[push_back(_val,construct<mapnik::filter::y_gradient>())]
|
(lit("agg-stack-blur")[_a = 1, _b = 1]
>> -( lit('(') >> radius_[_a = _1]
>> lit(',')
>> radius_[_b = _1]
>> lit(')'))
[push_back(_val,construct<mapnik::filter::agg_stack_blur>(_a,_b))])
|
lit("invert")[push_back(_val,construct<mapnik::filter::invert>())]
|
agg_blur_filter(_val)
|
hsla_filter(_val)
;
agg_blur_filter = (lit("agg-stack-blur")[_a = 1, _b = 1]
>> -( lit('(') >> radius_[_a = _1]
>> lit(',')
>> radius_[_b = _1]
>> lit(')')))
[push_back(_r1,construct<mapnik::filter::agg_stack_blur>(_a,_b))]
;
hsla_filter = (lit("hsla") >> lit('(') >> string_arg[_a = _1] >> lit(')'))
[push_back(_r1,construct<mapnik::filter::hsla>(_a))]
;
string_arg = +~char_(')');
}
template struct mapnik::image_filter_grammar<std::string::const_iterator,std::vector<mapnik::filter::filter_type> >;