summaryrefslogtreecommitdiff
path: root/platform/node/src/node_expression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/node/src/node_expression.cpp')
-rw-r--r--platform/node/src/node_expression.cpp32
1 files changed, 30 insertions, 2 deletions
diff --git a/platform/node/src/node_expression.cpp b/platform/node/src/node_expression.cpp
index c0b512a899..4f1e392505 100644
--- a/platform/node/src/node_expression.cpp
+++ b/platform/node/src/node_expression.cpp
@@ -37,10 +37,11 @@ type::Type parseType(v8::Local<v8::Object> type) {
static std::unordered_map<std::string, type::Type> types = {
{"string", type::String},
{"number", type::Number},
- {"noolean", type::Boolean},
+ {"boolean", type::Boolean},
{"object", type::Object},
{"color", type::Color},
- {"value", type::Value}
+ {"value", type::Value},
+ {"formatted", type::Formatted}
};
v8::Local<v8::Value> v8kind = Nan::Get(type, Nan::New("kind").ToLocalChecked()).ToLocalChecked();
@@ -151,6 +152,33 @@ struct ToValue {
Nan::EscapableHandleScope scope;
return scope.Escape(Nan::Null());
}
+
+ v8::Local<v8::Value> operator()(const Formatted& formatted) {
+ // This mimics the internal structure of the Formatted class in formatted.js
+ // A better approach might be to use the explicit serialized form
+ // both here and on the JS side? e.g. toJS(fromExpressionValue<mbgl::Value>(formatted))
+ std::unordered_map<std::string, mbgl::Value> serialized;
+ std::vector<mbgl::Value> sections;
+ for (const auto& section : formatted.sections) {
+ std::unordered_map<std::string, mbgl::Value> serializedSection;
+ serializedSection.emplace("text", section.text);
+ if (section.fontScale) {
+ serializedSection.emplace("scale", *section.fontScale);
+ } else {
+ serializedSection.emplace("scale", mbgl::NullValue());
+ }
+ if (section.fontStack) {
+ std::string fontStackString;
+ serializedSection.emplace("fontStack", mbgl::fontStackToString(*section.fontStack));
+ } else {
+ serializedSection.emplace("fontStack", mbgl::NullValue());
+ }
+ sections.push_back(serializedSection);
+ }
+ serialized.emplace("sections", sections);
+
+ return toJS(serialized);
+ }
v8::Local<v8::Value> operator()(const mbgl::Color& color) {
return operator()(std::vector<Value> {