summaryrefslogtreecommitdiff
path: root/src/mbgl/style/style_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/style_parser.cpp')
-rw-r--r--src/mbgl/style/style_parser.cpp31
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