#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { namespace style { using StyleParseResult = std::exception_ptr; class Parser { public: ~Parser(); StyleParseResult parse(const std::string&); std::string spriteURL; std::string glyphURL; std::vector> sources; std::vector> layers; std::string name; LatLng latLng; double zoom = 0; double bearing = 0; double pitch = 0; // 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&); 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