diff options
-rw-r--r-- | platform/darwin/src/NSExpression+MGLAdditions.h | 42 | ||||
-rw-r--r-- | platform/darwin/src/NSExpression+MGLAdditions.mm | 50 |
2 files changed, 68 insertions, 24 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.h b/platform/darwin/src/NSExpression+MGLAdditions.h index df8129811d..9b74460e47 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.h +++ b/platform/darwin/src/NSExpression+MGLAdditions.h @@ -117,7 +117,35 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio */ + (instancetype)mgl_expressionForValue:(nonnull NSValue *)value; -+ (instancetype)mgl_expressionForTernaryFunction:(nonnull NSString *)conditionString trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression; +/** + Returns a conditional function expression specifying the string predicate, and + colors for each condition. + + @param conditionPredicate The predicate to get evaluated. + @param trueColor The color for conditions equal to true. + @param falseColor The color value if the condition is equal to false. + */ ++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueColor:(nonnull MGLColor*)trueColor falseColor:(nonnull MGLColor *)falseColor; + +/** + Returns a conditional function expression specifying the string predicate, and + values for each condition. + + @param conditionPredicate The predicate to get evaluated. + @param trueValue The value for conditions equal to true. + @param falseValue The value for conditions equal to false. + */ ++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueValue:(nonnull NSValue *)trueValue falseValue:(nonnull NSValue *)falseValue; + +/** + Returns a conditional function expression specifying the string predicate, and + expressions for each condition. + + @param conditionPredicate The predicate to get evaluated. + @param trueExpression The expression for conditions equal to true. + @param falseExpression The expression for conditions equal to false. + */ ++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression; /** Returns a step function expression specifying the function operator, default value @@ -143,11 +171,11 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio Returns a step function expression specifying the function operator, default expression and stops. - @param function The operator type in which this expression is applied. + @param operatorExpression The operator expression. @param expression The expression which could be a constant or function expression. @param stops The stops dictionay must be numeric literals in strictly ascending order. */ -+ (instancetype)mgl_expressionForStepFunction:(nonnull MGLExpressionStyleFunction)function defaultExpression:(nonnull NSExpression *)expression stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops; ++ (instancetype)mgl_expressionForStepFunction:(nonnull NSExpression*)operatorExpression defaultExpression:(nonnull NSExpression *)expression stops:(nonnull NSExpression*)stops; /** Returns an interpolated function expression specifying the function operator, curve type @@ -157,7 +185,7 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio @param curveType The curve type could be `MGLExpressionInterpolationModeLinear`, `MGLExpressionInterpolationModeExponential` and `MGLExpressionInterpolationModeCubicBezier`. - @param steps The stops dictionay must be numeric literals in strictly ascending order. + @param steps The steps dictionay must be numeric literals in strictly ascending order. */ + (instancetype)mgl_expressionForInterpolateFunction:(nonnull MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps; @@ -165,14 +193,14 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio Returns an interpolated function expression specifying the function operator, curve type, parameters and steps. - @param function The operator type in which this expression is applied. + @param expressionOperator The expression operator. @param curveType The curve type could be `MGLExpressionInterpolationModeLinear`, `MGLExpressionInterpolationModeExponential` and `MGLExpressionInterpolationModeCubicBezier`. @param parameters The parameters expression. - @param steps The stops dictionay must be numeric literals in strictly ascending order. + @param steps The steps expression. */ -+ (instancetype)mgl_expressionForInterpolateFunction:(nonnull MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps; ++ (instancetype)mgl_expressionForInterpolateFunction:(nonnull NSExpression*)expressionOperator curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NSExpression*)steps; /** Returns a string constant expression appending the passed string. diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index ed501d0e18..a7a2f0e1bb 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -305,7 +305,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { } + (instancetype)mgl_expressionForString:(NSString *)string { - return [NSExpression expressionForConstantValue:string]; + return [NSExpression expressionWithFormat:string]; } + (instancetype)mgl_expressionForColor:(MGLColor *)color { @@ -315,41 +315,57 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { return [NSExpression expressionForConstantValue:value]; } -+ (instancetype)mgl_expressionForTernaryFunction:(NSString *)conditionString trueExpression:(NSExpression *)trueExpression falseExpresssion:(NSExpression *)falseExpression { - NSString *funtionFormat = [NSString stringWithFormat:@"TERNARY(%@, %%@, %%@)", conditionString]; - return [NSExpression expressionWithFormat:funtionFormat, trueExpression, falseExpression]; ++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueColor:(nonnull MGLColor*)trueColor falseColor:(nonnull MGLColor *)falseColor { + return [NSExpression mgl_expressionForConditional:conditionPredicate + trueExpression:[NSExpression mgl_expressionForColor:trueColor] + falseExpresssion:[NSExpression mgl_expressionForColor:falseColor]]; +} + ++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueValue:(nonnull NSValue *)trueValue falseValue:(nonnull NSValue *)falseValue { + return [NSExpression mgl_expressionForConditional:conditionPredicate + trueExpression:[NSExpression mgl_expressionForValue:trueValue] + falseExpresssion:[NSExpression mgl_expressionForValue:falseValue]]; +} + ++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression { + NSPredicate *conditional = [NSPredicate predicateWithFormat:conditionPredicate]; + return [NSExpression expressionForConditional:conditional trueExpression:trueExpression falseExpression:falseExpression]; } + (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultValue:(NSValue *)value stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops { - return [NSExpression mgl_expressionForStepFunction:function + return [NSExpression mgl_expressionForStepFunction:[NSExpression mgl_expressionForString:function] defaultExpression:[NSExpression mgl_expressionForValue:value] - stops:stops]; + stops:[NSExpression expressionWithFormat:@"%@", stops]]; } + (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultString:(NSString *)string stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops { - return [NSExpression mgl_expressionForStepFunction:function + return [NSExpression mgl_expressionForStepFunction:[NSExpression mgl_expressionForString:function] defaultExpression:[NSExpression mgl_expressionForString:string] - stops:stops]; + stops:[NSExpression expressionWithFormat:@"%@", stops]]; } + (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultColor:(MGLColor *)color stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops { - return [NSExpression mgl_expressionForStepFunction:function + return [NSExpression mgl_expressionForStepFunction:[NSExpression mgl_expressionForString:function] defaultExpression:[NSExpression mgl_expressionForColor:color] - stops:stops]; + stops:[NSExpression expressionWithFormat:@"%@", stops]]; } -+ (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultExpression:(NSExpression *)expression stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops { - NSString *functionFormat = [NSString stringWithFormat:@"FUNCTION(%@, 'mgl_stepWithMinimum:stops:', %%@, %%@, %%@)", function]; - return [NSExpression expressionWithFormat:functionFormat, expression, stops]; ++ (instancetype)mgl_expressionForStepFunction:(NSExpression *)operatorExpression defaultExpression:(NSExpression *)expression stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops { + return [NSExpression expressionForFunction:operatorExpression selectorName:@"mgl_stepWithMinimum:stops:" arguments:@[expression, stops]]; } + (instancetype)mgl_expressionForInterpolateFunction:(MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps; { - return [NSExpression mgl_expressionForInterpolateFunction:function curveType:curveType parameters:nil steps:steps]; + return [NSExpression mgl_expressionForInterpolateFunction:[NSExpression mgl_expressionForString:function] + curveType:curveType + parameters:nil + steps:[NSExpression expressionWithFormat:@"%@", steps]]; } -+ (instancetype)mgl_expressionForInterpolateFunction:(MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps { - NSString *functionFormat = [NSString stringWithFormat:@"FUNCTION(%@, 'mgl_interpolateWithCurveType:parameters:stops:', %%@, %%@, %%@)", function]; - return [NSExpression expressionWithFormat:functionFormat, curveType, parameters, steps]; ++ (instancetype)mgl_expressionForInterpolateFunction:(nonnull NSExpression*)expressionOperator curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NSExpression*)steps { + NSExpression *sanitizeParams = parameters ? parameters : [NSExpression expressionWithFormat:@"%@", parameters]; + return [NSExpression expressionForFunction:expressionOperator + selectorName:@"mgl_interpolateWithCurveType:parameters:stops:" + arguments:@[[NSExpression expressionForConstantValue:curveType], sanitizeParams, steps]]; } |