mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-06 07:06:11 +00:00
76 lines
2.5 KiB
Objective-C
76 lines
2.5 KiB
Objective-C
#import <Foundation/Foundation.h>
|
|
#import "RNSVGLength.h"
|
|
|
|
@implementation RNSVGLength
|
|
|
|
- (instancetype) init
|
|
{
|
|
self = [super init];
|
|
if (self)
|
|
{
|
|
_value = 0;
|
|
_unit = SVG_LENGTHTYPE_UNKNOWN;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (instancetype) lengthWithNumber:(CGFloat)number
|
|
{
|
|
RNSVGLength *length = [[self alloc] init];
|
|
length.unit = SVG_LENGTHTYPE_NUMBER;
|
|
length.value = number;
|
|
return length;
|
|
}
|
|
|
|
+ (instancetype) lengthWithString: (NSString *) lengthString {
|
|
NSString *length = [lengthString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
|
NSUInteger stringLength = [length length];
|
|
NSInteger percentIndex = stringLength - 1;
|
|
RNSVGLength *output = [RNSVGLength alloc];
|
|
if (stringLength == 0) {
|
|
output.unit = SVG_LENGTHTYPE_UNKNOWN;
|
|
output.value = 0;
|
|
return output;
|
|
} else if ([length characterAtIndex:percentIndex] == '%') {
|
|
output.unit = SVG_LENGTHTYPE_PERCENTAGE;
|
|
output.value = (CGFloat)[[length substringWithRange:NSMakeRange(0, percentIndex)] doubleValue];
|
|
} else {
|
|
NSInteger twoLetterUnitIndex = stringLength - 2;
|
|
RNSVGLengthUnitType unit = SVG_LENGTHTYPE_NUMBER;
|
|
if (twoLetterUnitIndex > 0) {
|
|
NSString *lastTwo = [length substringFromIndex:twoLetterUnitIndex];
|
|
NSUInteger end = twoLetterUnitIndex;
|
|
if ([lastTwo isEqualToString:@"px"]) {
|
|
unit = SVG_LENGTHTYPE_PX;
|
|
} else if ([lastTwo isEqualToString:@"em"]) {
|
|
unit = SVG_LENGTHTYPE_EMS;
|
|
} else if ([lastTwo isEqualToString:@"ex"]) {
|
|
unit = SVG_LENGTHTYPE_EXS;
|
|
} else if ([lastTwo isEqualToString:@"pt"]) {
|
|
unit = SVG_LENGTHTYPE_PT;
|
|
} else if ([lastTwo isEqualToString:@"pc"]) {
|
|
unit = SVG_LENGTHTYPE_PC;
|
|
} else if ([lastTwo isEqualToString:@"mm"]) {
|
|
unit = SVG_LENGTHTYPE_MM;
|
|
} else if ([lastTwo isEqualToString:@"cm"]) {
|
|
unit = SVG_LENGTHTYPE_CM;
|
|
} else if ([lastTwo isEqualToString:@"in"]) {
|
|
unit = SVG_LENGTHTYPE_IN;
|
|
} else {
|
|
end = stringLength;
|
|
}
|
|
output.value = (CGFloat)[[length substringWithRange:NSMakeRange(0, end)] doubleValue];
|
|
} else {
|
|
output.value = (CGFloat)[length doubleValue];
|
|
}
|
|
output.unit = unit;
|
|
}
|
|
return output;
|
|
}
|
|
|
|
- (BOOL) isEqualTo: (RNSVGLength *)other {
|
|
return self.unit == other.unit && self.value == other.value;
|
|
}
|
|
|
|
@end
|