156bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hoskencdef extern from "fontconfig/fontconfig.h" :
256bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    ctypedef struct FcPattern :
356bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        pass
456bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    ctypedef struct FcConfig :
556bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        pass
656bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    cdef enum FcResult '_FcResult' :
756bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        FcResultMatch = 0, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
856bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        FcResultOutOfMemory
956bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
1056bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    ctypedef char FcChar8
1156bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    FcPattern *FcNameParse(FcChar8 *name)
1256bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    FcPattern *FcFontMatch(FcConfig *config, FcPattern *match, FcResult *res)
1356bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    FcResult FcPatternGetInteger(FcPattern *pattern, char *typeid, int index, int *res)
1456bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    FcResult FcPatternGetString(FcPattern *pattern, char *typeid, int index, FcChar8 **res)
1556bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    void FcPatternPrint(FcPattern *pattern)
1656bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    void FcPatternDestroy(FcPattern *pattern)
1756bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
1856bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    FcConfig *FcConfigGetCurrent()
1956bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
2056bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hoskencdef class fcPattern :
2156bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    cdef FcPattern *_pattern
2256bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
2356bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    def __init__(self, char *name) :
2456bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        cdef FcPattern *temp
2556bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        cdef FcResult res
2656bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
2756bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        temp = FcNameParse(<FcChar8 *>name)
2856bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        self._pattern = FcFontMatch(FcConfigGetCurrent(), temp, &res)
2956bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        if res != FcResultMatch :
3056bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken            print "Failed to match" + str(res)
3156bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken            self._pattern = <FcPattern *>0
3256bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
3356bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    def __destroy__(self) :
3456bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        FcPatternDestroy(self._pattern)
3556bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
3656bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    def getInteger(self, char *typeid, int index) :
3756bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        cdef int res
3856bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        if self._pattern == <FcPattern *>0 or FcPatternGetInteger(self._pattern, typeid, index, &res) != FcResultMatch : return None
3956bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        return res
4056bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
4156bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    def getString(self, char *typeid, int index) :
4256bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        cdef FcChar8 *res
4356bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        if self._pattern == <FcPattern *>0 or FcPatternGetString(self._pattern, typeid, index, &res) != FcResultMatch : return None
4456bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        return <char *>res
4556bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken
4656bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken    def debugPrint(self) :
4756bef5680cc76a67d16ca14ac69f0dda1a691968Martin Hosken        FcPatternPrint(self._pattern)
48