Эквивалент CoreText для [NSFont fontWithName]
В нашем приложении мы храним шрифты для пользовательских объектов в виде строк, содержащих имя шрифта (как получено из панели шрифтов), и создаем экземпляры шрифтов, используя
+ (NSFont *)fontWithName:(NSString *)fontName
Теперь при загрузке или импорте файлов мы хотели бы проверить, действительно ли имя шрифта будет разрешено в текущей системе.
Из-за определенных конструктивных ограничений нам нужно выполнить проверку на старом, простом C/C++, то есть в наши дни с использованием CoreText.
Однако, похоже, не существует эквивалентного вызова API CoreText, работающего аналогично fontWithName:
:
CTFontCreateWithName
всегда возвращает шрифт, так как использует альтернативную стратегиюCTFontCopyFullName
кажется, использует другие имена, чем те, которые принимаются / используютсяNSFont
..?
Так что в основном вопрос заключается в следующем:
Как мы можем использовать функциональность CoreText, чтобы проверить, существует ли шрифт в текущей системе, и можно ли успешно создать его шрифт, используя [NSFont fontWithName:]
потом..?
1 ответ
Похоже, что CTFontCopyPostScriptName()
всегда будет возвращать действительный результат для любой строки, которая понимается [NSFont fontWithName:]
- и наоборот.
По крайней мере, в моих экспериментах через 10.8 - 10.10 и с использованием действительных и выдуманных имен шрифтов результаты CTFontCopyPostScriptName()
всегда можно использовать для проверки правильности имени шрифта NSFont
,
Правка № 1
Некоторые эксперименты показывают, что было бы неплохо добавить запасной вариант с CTFontCopyFamilyName()
быть на безопасной стороне.