[ios, macos] Fix format expression parsing. (#14168)
Fixed a parsing issue when a non-constant expression was passed to MGLAttributedExpression.expression property.
This commit is contained in:
committed by
GitHub
parent
3122df7e50
commit
fc77090fce
@@ -1016,14 +1016,10 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
if ([constantValue isKindOfClass:[MGLAttributedExpression class]]) {
|
||||
MGLAttributedExpression *attributedExpression = (MGLAttributedExpression *)constantValue;
|
||||
id jsonObject = attributedExpression.expression.mgl_jsonExpressionObject;
|
||||
NSMutableArray *attributes = [NSMutableArray array];
|
||||
if ([jsonObject isKindOfClass:[NSArray class]]) {
|
||||
[attributes addObjectsFromArray:jsonObject];
|
||||
} else {
|
||||
[attributes addObject:jsonObject];
|
||||
}
|
||||
NSMutableDictionary *attributedDictionary = [NSMutableDictionary dictionary];
|
||||
|
||||
if (attributedExpression.attributes) {
|
||||
NSMutableDictionary *attributedDictionary = [NSMutableDictionary dictionaryWithDictionary:attributedExpression.attributes];
|
||||
attributedDictionary = [NSMutableDictionary dictionaryWithDictionary:attributedExpression.attributes];
|
||||
if (attributedDictionary[MGLFontNamesAttribute]) {
|
||||
attributedDictionary[MGLFontNamesAttribute] = @[@"literal", attributedDictionary[MGLFontNamesAttribute]];
|
||||
}
|
||||
@@ -1031,12 +1027,8 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
MGLColor *color = attributedDictionary[MGLFontColorAttribute];
|
||||
attributedDictionary[MGLFontColorAttribute] = color.mgl_jsonExpressionObject;
|
||||
}
|
||||
[attributes addObject:attributedDictionary];
|
||||
} else {
|
||||
[attributes addObject:@{}];
|
||||
}
|
||||
|
||||
return attributes;
|
||||
}
|
||||
return @[jsonObject, attributedDictionary];
|
||||
}
|
||||
return self.constantValue;
|
||||
}
|
||||
|
||||
@@ -1062,6 +1062,14 @@ using namespace std::string_literals;
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionForConstantValue:@"foo"]] ;
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)];
|
||||
|
||||
NSArray *jsonExpression = @[ @"format", @"foo", @{ } ];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionForConstantValue:@"foo"]
|
||||
attributes:@{ MGLFontSizeAttribute: @(1.2),
|
||||
@@ -1086,6 +1094,18 @@ using namespace std::string_literals;
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionWithFormat:@"CAST(x, 'NSString')"]
|
||||
attributes:@{ MGLFontSizeAttribute: @(1.2),
|
||||
MGLFontColorAttribute: [MGLColor redColor],
|
||||
MGLFontNamesAttribute: @[ @"DIN Offc Pro Bold", @"Arial Unicode MS Bold" ]
|
||||
}] ;
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)];
|
||||
|
||||
NSArray *jsonExpression = @[ @"format", @[@"to-string", @[@"get", @"x"]], @{ @"font-scale": @1.2, @"text-color": @[@"rgb", @255, @0, @0] , @"text-font" : @[ @"literal", @[ @"DIN Offc Pro Bold", @"Arial Unicode MS Bold" ]]} ];
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression);
|
||||
}
|
||||
{
|
||||
MGLAttributedExpression *attribute1 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"foo"]
|
||||
fontNames:nil
|
||||
|
||||
Reference in New Issue
Block a user