forked from vayn/python-fontconfig
-
Notifications
You must be signed in to change notification settings - Fork 0
/
factory.pxi
44 lines (39 loc) · 1.01 KB
/
factory.pxi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# -*- coding: utf-8
# @Author: Vayn a.k.a. VT <vayn@vayn.de>
# @Name: factory.pxi
# @Date: 2011年 10月 30日 星期日 15:30:18 CST
def query(lang):
'''
Produce font object list for the queried language
'''
cdef:
FcChar8 *strpat
FcPattern *pat = NULL
FcFontSet *fs = NULL
FcObjectSet *os = NULL
list lst = []
l_lang = (':lang='+lang).encode('utf8')
strpat = <FcChar8*>(<char*>l_lang)
pat = FcNameParse(strpat)
os = FcObjectSetBuild(FC_CHARSET, FC_FILE, NULL)
fs = FcFontList(<FcConfig*>0, pat, os)
if fs is NULL or fs.nfont < 1:
return lst
cdef:
int i
FcChar8 *file
FcCharSet *cs
for i in range(fs.nfont):
if FcPatternGetCharSet(fs.fonts[i], FC_CHARSET, 0, &cs) != Match:
continue
if FcPatternGetString(fs.fonts[i], FC_FILE, 0, &file) == Match:
lst.append(FcFont((<char*>file).decode('utf8')))
FcPatternDestroy(pat)
pat = NULL
FcObjectSetDestroy(os)
os = NULL
FcCharSetDestroy(cs)
cs = NULL
FcFontSetDestroy(fs)
fs = NULL
return lst