Skip to content

Commit 767848d

Browse files
committed
iOS: Allow passing a comma-separated list to fontFamily
1 parent f3a6539 commit 767848d

File tree

1 file changed

+44
-8
lines changed

1 file changed

+44
-8
lines changed

Libraries/Text/RCTTextAttributes.m

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,50 @@ - (NSParagraphStyle *)effectiveParagraphStyle
192192

193193
- (UIFont *)effectiveFont
194194
{
195-
// FIXME: RCTFont has thread-safety issues and must be rewritten.
196-
return [RCTFont updateFont:nil
197-
withFamily:_fontFamily
198-
size:@(isnan(_fontSize) ? 0 : _fontSize)
199-
weight:_fontWeight
200-
style:_fontStyle
201-
variant:_fontVariant
202-
scaleMultiplier:self.effectiveFontSizeMultiplier];
195+
NSArray *rawFontFamilies = [_fontFamily componentsSeparatedByString:@","];
196+
197+
if (rawFontFamilies.count == 0) {
198+
return [RCTFont updateFont:nil
199+
withFamily:_fontFamily
200+
size:@(isnan(_fontSize) ? 0 : _fontSize)
201+
weight:_fontWeight
202+
style:_fontStyle
203+
variant:_fontVariant
204+
scaleMultiplier:self.effectiveFontSizeMultiplier];
205+
}
206+
207+
NSMutableArray *fonts = [NSMutableArray new];
208+
for (NSString *rawFontFamily in rawFontFamilies) {
209+
NSString *fontFamily = [rawFontFamily stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
210+
if (fontFamily.length == 0) {
211+
continue;
212+
}
213+
214+
UIFont *font = [RCTFont updateFont:nil
215+
withFamily:fontFamily
216+
size:@(isnan(_fontSize) ? 0 : _fontSize)
217+
weight:_fontWeight
218+
style:_fontStyle
219+
variant:_fontVariant
220+
scaleMultiplier:self.effectiveFontSizeMultiplier];
221+
222+
if (font) {
223+
[fonts addObject:font];
224+
}
225+
}
226+
227+
UIFont *primaryFont = fonts[0];
228+
229+
NSMutableArray *fontDescriptors = [NSMutableArray new];
230+
for (NSUInteger i = 1; i < fonts.count; i++) {
231+
UIFont *font = fonts[i];
232+
[fontDescriptors addObject:font.fontDescriptor];
233+
}
234+
235+
UIFontDescriptor *fontDescriptor = [primaryFont.fontDescriptor fontDescriptorByAddingAttributes:
236+
@{UIFontDescriptorCascadeListAttribute: fontDescriptors}];
237+
238+
return [UIFont fontWithDescriptor:fontDescriptor size:primaryFont.pointSize];
203239
}
204240

205241
- (CGFloat)effectiveFontSizeMultiplier

0 commit comments

Comments
 (0)