#include #include #include #include #include namespace mbgl { using namespace style; std::string fontStackToString(const FontStack& fontStack) { return boost::algorithm::join(fontStack, ","); } FontStackHash FontStackHasher::operator()(const FontStack& fontStack) const { return boost::hash_range(fontStack.begin(), fontStack.end()); } std::set fontStacks(const std::vector>& layers) { std::set result; for (const auto& layer : layers) { if (layer->type != LayerType::Symbol) { continue; } const SymbolLayer::Impl& impl = dynamic_cast(*layer); if (impl.layout.get().isUndefined()) { continue; } impl.layout.get().match( [&] (Undefined) { result.insert({"Open Sans Regular", "Arial Unicode MS Regular"}); }, [&] (const FontStack& constant) { result.insert(constant); }, [&] (const auto& function) { for (const auto& value : function.possibleOutputs()) { if (value) { result.insert(*value); } else { Log::Warning(Event::ParseStyle, "Layer '%s' has an invalid value for text-font and will not render text. Output values must be contained as literals within the expression.", impl.id.c_str()); break; } } } ); } return result; } } // namespace mbgl