#ifndef LLMR_STYLE_STYLE_PARSER #define LLMR_STYLE_STYLE_PARSER #include #include namespace llmr { class StyleParser { public: using JSVal = const rapidjson::Value&; void parseBuckets(JSVal value, std::map& buckets); void parseLayers(JSVal value, std::vector& layers); void parseConstants(JSVal value); void parseClasses(JSVal value, std::map& classes); private: LayerDescription parseLayer(JSVal value); BucketDescription parseBucket(JSVal value); std::pair parseClassDescription(JSVal value); void parseClass(const std::string& name, JSVal value, ClassDescription& class_desc); FillClass parseFillClass(JSVal value); LineClass parseLineClass(JSVal value); PointClass parsePointClass(JSVal value); TextClass parseTextClass(JSVal value); BackgroundClass parseBackgroundClass(JSVal value); bool parseBoolean(JSVal value); std::string parseString(JSVal value); Color parseColor(JSVal value); Value parseValue(JSVal value); template typename FunctionProperty::fn parseFunctionType(JSVal type); FunctionProperty parseFloatFunction(JSVal value); FunctionProperty parseBoolFunction(JSVal value); private: std::map constants; }; } #endif