From c343229441ade3e3422aba00de80b4ca50b8bbe1 Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Tue, 23 Apr 2019 00:51:52 +0300 Subject: [PATCH] [iOS] fix handling kerning, wordSpacing and letterSpacing when Number https://github.com/react-native-community/react-native-svg/issues/568#issuecomment-485518338 --- ios/Text/RNSVGFontData.m | 47 ++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/ios/Text/RNSVGFontData.m b/ios/Text/RNSVGFontData.m index 0d902ac04..9b9d9805d 100644 --- a/ios/Text/RNSVGFontData.m +++ b/ios/Text/RNSVGFontData.m @@ -84,25 +84,40 @@ + (instancetype)initWithNSDictionary:(NSDictionary *)font NSString* decoration = [font objectForKey:TEXT_DECORATION]; data->textDecoration = decoration ? RNSVGTextDecorationFromString(decoration) : parent->textDecoration; - NSString* kerning = [font objectForKey:KERNING]; - data->manualKerning = (kerning || parent->manualKerning ); CGFloat fontSize = data->fontSize; - data->kerning = kerning ? - [RNSVGFontData toAbsoluteWithNSString:kerning - fontSize:fontSize] - : parent->kerning; + id kerning = [font objectForKey:KERNING]; + data->manualKerning = (kerning || parent->manualKerning ); + if ([kerning isKindOfClass:NSNumber.class]) { + NSNumber* kern = kerning; + data->kerning = (CGFloat)[kern doubleValue]; + } else { + data->kerning = kerning ? + [RNSVGFontData toAbsoluteWithNSString:kerning + fontSize:fontSize] + : parent->kerning; + } - NSString* wordSpacing = [font objectForKey:WORD_SPACING]; - data->wordSpacing = wordSpacing ? - [RNSVGFontData toAbsoluteWithNSString:wordSpacing - fontSize:fontSize] - : parent->wordSpacing; + id wordSpacing = [font objectForKey:WORD_SPACING]; + if ([wordSpacing isKindOfClass:NSNumber.class]) { + NSNumber* ws = wordSpacing; + data->wordSpacing = (CGFloat)[ws doubleValue]; + } else { + data->wordSpacing = wordSpacing ? + [RNSVGFontData toAbsoluteWithNSString:wordSpacing + fontSize:fontSize] + : parent->wordSpacing; + } - NSString* letterSpacing = [font objectForKey:LETTER_SPACING]; - data->letterSpacing = letterSpacing ? - [RNSVGFontData toAbsoluteWithNSString:letterSpacing - fontSize:fontSize] - : parent->letterSpacing; + id letterSpacing = [font objectForKey:LETTER_SPACING]; + if ([letterSpacing isKindOfClass:NSNumber.class]) { + NSNumber* ls = letterSpacing; + data->wordSpacing = (CGFloat)[ls doubleValue]; + } else { + data->letterSpacing = letterSpacing ? + [RNSVGFontData toAbsoluteWithNSString:letterSpacing + fontSize:fontSize] + : parent->letterSpacing; + } return data; }