diff --git a/Sources/HTMLStreamer/AttributedStringConverter.swift b/Sources/HTMLStreamer/AttributedStringConverter.swift
index f58da8d..ee9221d 100644
--- a/Sources/HTMLStreamer/AttributedStringConverter.swift
+++ b/Sources/HTMLStreamer/AttributedStringConverter.swift
@@ -19,7 +19,8 @@ private typealias PlatformFont = NSFont
public class AttributedStringConverter {
private let configuration: AttributedStringConverterConfiguration
- private var fontCache: [FontTrait: PlatformFont] = [:]
+ // There are only 8 combinations of FontTraits
+ private var fontCache: [PlatformFont?] = Array(repeating: nil, count: 8)
private var tokenizer: Tokenizer!
private var str: NSMutableAttributedString!
@@ -340,7 +341,7 @@ public class AttributedStringConverter {
}
private func getFont(traits: FontTrait) -> PlatformFont? {
- if let cached = fontCache[traits] {
+ if let cached = fontCache[traits.rawValue] {
return cached
}
@@ -355,14 +356,18 @@ public class AttributedStringConverter {
} else if traits.contains(.italic),
let italic = descriptor.withSymbolicTraits(.traitItalic) {
descriptor = italic
+ } else {
+ // N.B.: this does not go through the UIFontMetrics, the configuration fonts are expected to be setup for Dynamic Type already
+ fontCache[traits.rawValue] = baseFont
+ return baseFont
}
let font = PlatformFont(descriptor: descriptor, size: 0)
#if os(iOS) || os(visionOS)
let scaled = configuration.fontMetrics.scaledFont(for: font)
- fontCache[traits] = scaled
+ fontCache[traits.rawValue] = scaled
return scaled
#else
- fontCache[traits] = font
+ fontCache[traits.rawValue] = font
return font
#endif
}