#pragma once #include #include #include #include #include #include #include #include #include #include namespace mbgl { namespace style { Filter parseFilter(const JSValue&); class Parser { public: ~Parser(); void parse(const std::string&); std::string spriteURL; std::string glyphURL; std::vector> sources; std::vector> layers; // Statically evaluate layer properties to determine what font stacks are used. std::vector fontStacks() const; private: void parseSources(const JSValue&); void parseLayers(const JSValue&); void parseLayer(const std::string& id, const JSValue&, std::unique_ptr&); void parseVisibility(Layer&, const JSValue& value); std::unordered_map sourcesMap; std::unordered_map>> layersMap; // Store a stack of layer IDs we're parsing right now. This is to prevent reference cycles. std::forward_list stack; }; } // namespace style } // namespace mbgl