From 490790c06f3cb25a8f3addd5731706bc521b1086 Mon Sep 17 00:00:00 2001 From: Peter Tang Date: Tue, 12 Sep 2023 18:10:05 +0800 Subject: [PATCH] fixed UIFont and NSFont issue, their names are different from the otf file names --- Sources/SwiftMath/MathBundle/MathFont.swift | 37 +++++++++++++++++++-- Tests/SwiftMathTests/MathFontTests.swift | 26 ++++++++++++--- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/Sources/SwiftMath/MathBundle/MathFont.swift b/Sources/SwiftMath/MathBundle/MathFont.swift index 5e6d443..caba500 100644 --- a/Sources/SwiftMath/MathBundle/MathFont.swift +++ b/Sources/SwiftMath/MathBundle/MathFont.swift @@ -5,8 +5,13 @@ // Created by Peter Tang on 10/9/2023. // -import Foundation -import CoreText +#if os(iOS) +import UIKit +#endif + +#if os(macOS) +import AppKit +#endif public enum MathFont: String, CaseIterable { @@ -16,12 +21,40 @@ public enum MathFont: String, CaseIterable { case xitsFont = "xits-math" case termesFont = "texgyretermes-math" + var fontFamilyName: String { + switch self { + case .latinModernFont: return "Latin Modern Math" + case .kpMathLightFont: return "KpMath" + case .kpMathSansFont: return "KpMath" + case .xitsFont: return "XITS Math" + case .termesFont: return "TeX Gyre Termes Math" + } + } + var fontName: String { + switch self { + case .latinModernFont: return "LatinModernMath-Regular" + case .kpMathLightFont: return "KpMath-Light" + case .kpMathSansFont: return "KpMath-Sans" + case .xitsFont: return "XITSMath" + case .termesFont: return "TeXGyreTermesMath-Regular" + } + } public func cgFont() -> CGFont? { BundleManager.manager.obtainCGFont(font: self) } public func ctFont(withSize size: CGFloat) -> CTFont? { BundleManager.manager.obtainCTFont(font: self, withSize: size) } + #if os(iOS) + public func uiFont(withSize size: CGFloat) -> UIFont? { + UIFont(name: fontName, size: size) + } + #endif + #if os(macOS) + public func nsFont(withSize size: CGFloat) -> NSFont? { + NSFont(name: fontName, size: size) + } + #endif internal func mathTable() -> NSDictionary? { BundleManager.manager.obtainMathTable(font: self) } diff --git a/Tests/SwiftMathTests/MathFontTests.swift b/Tests/SwiftMathTests/MathFontTests.swift index 65ddeac..c417cfa 100644 --- a/Tests/SwiftMathTests/MathFontTests.swift +++ b/Tests/SwiftMathTests/MathFontTests.swift @@ -10,10 +10,6 @@ import XCTest final class MathFontTests: XCTestCase { func testMathFontScript() throws { - // for family in UIFont.familyNames.sorted() { - // let names = UIFont.fontNames(forFamilyName: family) - // print("Family: \(family) Font names: \(names)") - // } let size = Int.random(in: 20 ... 40) MathFont.allCases.forEach { // print("\(#function) cgfont \($0.cgFont())") @@ -22,5 +18,27 @@ final class MathFontTests: XCTestCase { XCTAssertNotNil($0.ctFont(withSize: CGFloat(size))) XCTAssertEqual($0.ctFont(withSize: CGFloat(size))?.fontSize, CGFloat(size), "ctFont fontSize test") } + #if os(iOS) + // for family in UIFont.familyNames.sorted() { + // let names = UIFont.fontNames(forFamilyName: family) + // print("Family: \(family) Font names: \(names)") + // } + fontNames.forEach { name in + let font = UIFont(name: name, size: CGFloat(size)) + XCTAssertNotNil(font) + } + #endif + #if os(macOS) + fontNames.forEach { name in + let font = NSFont(name: name, size: CGFloat(size)) + XCTAssertNotNil(font) + } + #endif + } + var fontNames: [String] { + MathFont.allCases.map { $0.fontName } + } + var fontFamilyNames: [String] { + MathFont.allCases.map { $0.fontFamilyName } } }