49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
"""Cocoa implementation of get_font"""
|
||
|
|
||
|
|
||
|
# imports ####################################################################
|
||
|
|
||
|
from CoreText import ( # pylint: disable=import-error
|
||
|
CTFontCollectionCreateFromAvailableFonts, # @UnresolvedImport
|
||
|
CTFontCollectionCreateMatchingFontDescriptors, # @UnresolvedImport
|
||
|
kCTFontFamilyNameAttribute, # @UnresolvedImport
|
||
|
kCTFontTraitsAttribute, # @UnresolvedImport
|
||
|
kCTFontURLAttribute, # @UnresolvedImport
|
||
|
kCTFontSymbolicTrait, # @UnresolvedImport
|
||
|
kCTFontItalicTrait, # @UnresolvedImport
|
||
|
kCTFontBoldTrait, # @UnresolvedImport
|
||
|
)
|
||
|
|
||
|
|
||
|
# fonts ######################################################################
|
||
|
|
||
|
_font_collection = CTFontCollectionCreateFromAvailableFonts({})
|
||
|
_font_descriptors = CTFontCollectionCreateMatchingFontDescriptors(_font_collection)
|
||
|
|
||
|
_FONTS = {}
|
||
|
_FONT_NAMES = {}
|
||
|
for _font in _font_descriptors:
|
||
|
family = _font[kCTFontFamilyNameAttribute]
|
||
|
_fonts = _FONTS.get(family, {})
|
||
|
_traits = _font[kCTFontTraitsAttribute]
|
||
|
_bold = bool(_traits[kCTFontSymbolicTrait] & kCTFontBoldTrait)
|
||
|
_italic = bool(_traits[kCTFontSymbolicTrait] & kCTFontItalicTrait)
|
||
|
_font_name = _font[kCTFontURLAttribute].path()
|
||
|
_key = _italic, _bold
|
||
|
_fonts[_key] = _font_name
|
||
|
_names = _FONT_NAMES.get(_font_name, [])
|
||
|
_names.append(_key) # TODO: no idea how to retreive fonst index in dfont file
|
||
|
_names.sort() # so rely on arbitrary assunption
|
||
|
_FONT_NAMES[_font_name] = _names
|
||
|
_FONTS[family] = _fonts
|
||
|
|
||
|
|
||
|
# utils ######################################################################
|
||
|
|
||
|
def _get_font(family, bold, italic):
|
||
|
key = italic, bold
|
||
|
font_name = _FONTS[family][key]
|
||
|
return font_name, _FONT_NAMES[font_name].index(key)
|