Skip to content

Commit 820ec74

Browse files
authored
Update MarkupStyleFont.swift
1 parent bcea69a commit 820ec74

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

Sources/ZMarkupParser/Core/MarkupStyle/MarkupStyleFont.swift

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@ public struct MarkupStyleFont: MarkupStyleItem {
8181
if let traits = font.fontDescriptor.fontAttributes[.traits] as? [NSFontDescriptor.TraitKey: Any], let weight = traits[.weight] as? NSFont.Weight {
8282
self = weight.convertFontWeightStyle()
8383
return
84-
} else if font.fontDescriptor.symbolicTraits.contains(.bold) {
85-
self = .bold
86-
return
8784
} else if let weightName = font.fontDescriptor.object(forKey: .face) as? String, let weight = Self.init(rawValue: weightName) {
8885
self = weight
8986
return
@@ -273,7 +270,7 @@ extension MarkupStyleFont {
273270
func getFont() -> NSFont? {
274271
guard !isNil() else { return nil }
275272

276-
var traits: [NSFontDescriptor.SymbolicTraits] = []
273+
var traits: NSFontDescriptor.SymbolicTraits = []
277274

278275
let size = (self.size ?? MarkupStyle.default.font.size) ?? NSFont.systemFontSize
279276
let weight = self.weight?.convertToUIFontWeight() ?? .regular
@@ -289,24 +286,15 @@ extension MarkupStyleFont {
289286
font = NSFont.systemFont(ofSize: size, weight: weight)
290287
}
291288

292-
if weight.rawValue >= NSFont.Weight.medium.rawValue {
293-
traits.append(.bold)
289+
if bold == true {
290+
traits.insert(.bold)
294291
}
295292

296293
if let italic = self.italic, italic {
297-
traits.append(.italic)
298-
}
299-
300-
if traits.isEmpty {
301-
return font
302-
} else {
303-
return withTraits(font: font, traits: traits)
294+
traits.insert(.italic)
304295
}
305-
}
306296

307-
private func withTraits(font: NSFont, traits: [NSFontDescriptor.SymbolicTraits]) -> NSFont {
308-
let descriptor = font.fontDescriptor.withSymbolicTraits(NSFontDescriptor.SymbolicTraits(traits))
309-
return NSFont(descriptor: descriptor, size: font.pointSize) ?? font
297+
return font.with(weight: weight, symbolicTraits: traits)
310298
}
311299
}
312300

@@ -367,4 +355,26 @@ private extension NSFont.Weight {
367355
}
368356
}
369357

358+
private extension NSFont {
359+
360+
/// Returns a font object that is the same as the receiver but which has the specified weight and symbolic traits
361+
func with(weight: Weight, symbolicTraits: NSFontDescriptor.SymbolicTraits) -> NSFont {
362+
363+
var mergedsymbolicTraits = fontDescriptor.symbolicTraits
364+
mergedsymbolicTraits.formUnion(symbolicTraits)
365+
366+
var traits = fontDescriptor.fontAttributes[.traits] as? [NSFontDescriptor.TraitKey: Any] ?? [:]
367+
traits[.weight] = weight
368+
traits[.symbolic] = mergedsymbolicTraits.rawValue
369+
370+
var fontAttributes: [NSFontDescriptor.AttributeName: Any] = [:]
371+
fontAttributes[.family] = familyName
372+
fontAttributes[.traits] = traits
373+
374+
let font = NSFont(descriptor: NSFontDescriptor(fontAttributes: fontAttributes), size: pointSize)
375+
// return UIFontMetrics.default.scaledFont(for: font)
376+
return font ?? self
377+
}
378+
}
379+
370380
#endif

0 commit comments

Comments
 (0)