#include #include static int test (const FcChar8 *query, const FcPattern *expect) { FcPattern *pat; int c = 0; c++; pat = FcNameParse (query); if (!pat) goto bail; c++; if (!FcPatternEqual (pat, expect)) goto bail; c = 0; bail: FcPatternDestroy (pat); return c; } #define BEGIN(x) (x) = FcPatternCreate (); c++; #define END(x) FcPatternDestroy (x); (x) = NULL int main (void) { FcPattern *expect; int c = 0, ret; BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"sans-serif"); if ((ret = test ((const FcChar8 *)"sans\\-serif", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddInteger (expect, FC_SIZE, 10); if ((ret = test ((const FcChar8 *)"Foo-10", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Bar"); FcPatternAddInteger (expect, FC_SIZE, 10); if ((ret = test ((const FcChar8 *)"Foo,Bar-10", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); if ((ret = test ((const FcChar8 *)"Foo:weight=medium", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); if ((ret = test ((const FcChar8 *)"Foo:weight_medium", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); if ((ret = test ((const FcChar8 *)":medium", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL); if ((ret = test ((const FcChar8 *)":normal", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL); if ((ret = test ((const FcChar8 *)":normal", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcRange *r = FcRangeCreateDouble (FC_WEIGHT_MEDIUM, FC_WEIGHT_BOLD); FcPatternAddRange (expect, FC_WEIGHT, r); FcRangeDestroy (r); if ((ret = test ((const FcChar8 *)":weight=[medium bold]", expect)) != 0) goto bail; } END (expect); bail: if (expect) FcPatternDestroy (expect); return ret == 0 ? 0 : (c - 1) * 2 + ret; }