Как найти шрифт по умолчанию для восточноазиатских символов в MacOS

При использовании приложения для редактирования текста выбирается шрифт (например, «Menlo») для представления глифов, когда выбранный шрифт не содержит специального глифа (например, «????», это простой китайский глиф, «Menlo» не содержит не содержит его), приложение подберет шрифт для его представления. В MacOS (Catalina) имеется около 62 шрифтов (STBaoliSC-Regular, STKaiti, STSong, PingFangSC-Regular...), содержащих этот глиф "???? ", я обнаружил, что почти каждое приложение для редактирования текста (vscode, возвышенный текст, TextEdit) использует один и тот же шрифт - "PingFangSC-Regular", поэтому я считаю, что каждый глиф имеет свой собственный шрифт по умолчанию? если да, то как я могу получить имя шрифта?


person Qing    schedule 17.11.2019    source источник


Ответы (1)


Это обрабатывается «каскадным списком». Если вам нужен список по умолчанию, он доступен через CTFontCopyDefaultCascadeListForLanguages для каждого шрифта:

import CoreText
let font = CTFontCreateWithName("Helvetica" as CFString, 12, nil)
let descriptors = CTFontCopyDefaultCascadeListForLanguages(font, nil)! as! [CTFontDescriptor]

Если вы хотите увидеть список, вы можете сделать это следующим образом (у Core Text нет очень хорошей связи со Swift):

for descriptor in descriptors {
    let attributes = CTFontDescriptorCopyAttributes(descriptor) as! [String: Any]
    print(attributes[kCTFontNameAttribute as String]!)
}

==>

LucidaGrande
.AppleSymbolsFB
GeezaPro
NotoNastaliqUrdu
Thonburi
Kailasa
PingFangSC-Regular
PingFangTC-Regular
AppleSDGothicNeo-Regular
PingFangTC-Regular
PingFangSC-Regular
PingFangHK-Regular
PingFangSC-Regular
HiraginoSans-W3
HiraginoSansGB-W3
KohinoorBangla-Regular
KohinoorDevanagari-Regular
KohinoorGujarati-Regular
MuktaMahee-Regular
NotoSansKannada-Regular
KhmerSangamMN
LaoSangamMN
MalayalamSangamMN
NotoSansMyanmar-Regular
NotoSansZawgyi-Regular
NotoSansOriya
SinhalaSangamMN
TamilSangamMN
KohinoorTelugu-Regular
NotoSansArmenian-Regular
EuphemiaUCAS
Menlo-Regular
STIXGeneral-Regular
Galvji
Kefa-Regular
.NotoSansUniversal
AppleColorEmoji

PingFangSC-Regular — первый восточноазиатский шрифт в списке, поэтому он будет выбран для замены Helvetica. Это также первый восточноазиатский шрифт в каскадном списке для Lucida Grande и Helvetica Neue. И шрифт какой-то прямолинейный, даже скучный. Но если бы вы использовали немного более необычный шрифт, например, American Typewriter? Ну, это было бы заменено на Songti, который немного легче. Marker Felt заменяется на Kaiti, у которого больше вариаций ширины штриха (хотя, по моему мнению, было бы гораздо лучше заменить его на Kaiti Black, а не на Regular). Я не знаю ни одного встроенного азиатского шрифта, который был бы таким же «забавным», как доступные латинские шрифты, но если он у вас есть, вы можете настроить каскадный список, чтобы выбрать его вместо этого (используя NSFontDescriptor на Mac или UIFontDescriptor на iOS). ).

Если вам нужны дополнительные сведения о каскадных списках, см. видео WWDC 2018, Создание приложений для Глобальная аудитория.

person Rob Napier    schedule 17.11.2019
comment
идеальный ответ! - person Qing; 18.11.2019