diff options
Diffstat (limited to 'src/mbgl/style/style_parser.cpp')
-rw-r--r-- | src/mbgl/style/style_parser.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/mbgl/style/style_parser.cpp b/src/mbgl/style/style_parser.cpp index 7d53d603e5..7c2a94b206 100644 --- a/src/mbgl/style/style_parser.cpp +++ b/src/mbgl/style/style_parser.cpp @@ -18,6 +18,7 @@ #include <algorithm> #include <sstream> +#include <set> namespace mbgl { @@ -255,7 +256,7 @@ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> StyleParser::parseGeoJSON(const JS } } -std::unique_ptr<SourceInfo> StyleParser::parseTileJSON(const std::string& json, const std::string& sourceURL, SourceType type) { +std::unique_ptr<SourceInfo> StyleParser::parseTileJSON(const std::string& json, const std::string& sourceURL, SourceType type, uint16_t tileSize) { rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator> document; document.Parse<0>(json.c_str()); @@ -268,11 +269,10 @@ std::unique_ptr<SourceInfo> StyleParser::parseTileJSON(const std::string& json, std::unique_ptr<SourceInfo> result = StyleParser::parseTileJSON(document); // TODO: Remove this hack by delivering proper URLs in the TileJSON to begin with. - if (type == SourceType::Raster && util::mapbox::isMapboxURL(sourceURL)) { - std::transform(result->tiles.begin(), - result->tiles.end(), - result->tiles.begin(), - util::mapbox::normalizeRasterTileURL); + if (util::mapbox::isMapboxURL(sourceURL)) { + for (auto& url : result->tiles) { + url = util::mapbox::canonicalizeTileURL(url, type, tileSize); + } } return result; @@ -484,4 +484,23 @@ void StyleParser::parseVisibility(StyleLayer& layer, const JSValue& value) { layer.visibility = VisibilityTypeClass({ value["visibility"].GetString(), value["visibility"].GetStringLength() }); } +std::vector<std::string> StyleParser::fontStacks() const { + std::set<std::string> result; + + for (const auto& layer : layers) { + if (layer->is<SymbolLayer>()) { + LayoutProperty<std::string> property = layer->as<SymbolLayer>()->layout.text.font; + if (property.parsedValue) { + for (const auto& stop : property.parsedValue->getStops()) { + result.insert(stop.second); + } + } else { + result.insert(property.value); + } + } + } + + return std::vector<std::string>(result.begin(), result.end()); +} + } // namespace mbgl |