#pragma once #include #include #include #include #include #include namespace mbgl { namespace style { namespace expression { extern const char* const kFormattedSectionFontScale; extern const char* const kFormattedSectionTextFont; extern const char* const kFormattedSectionTextColor; struct FormattedSection { FormattedSection(std::string text_, optional fontScale_, optional fontStack_, optional textColor_) : text(std::move(text_)) , fontScale(std::move(fontScale_)) , fontStack(std::move(fontStack_)) , textColor(std::move(textColor_)) {} std::string text; optional fontScale; optional fontStack; optional textColor; }; class Formatted { public: Formatted() = default; Formatted(const char* plainU8String) { sections.emplace_back(std::string(plainU8String), nullopt, nullopt, nullopt); } Formatted(std::vector sections_) : sections(std::move(sections_)) {} bool operator==(const Formatted& ) const; std::string toString() const; bool empty() const { return sections.empty() || sections.at(0).text.empty(); } std::vector sections; }; } // namespace expression namespace conversion { template <> struct Converter { public: optional operator()(const Convertible& value, Error& error) const; }; } // namespace conversion } // namespace style } // namespace mbgl