| #include <fontconfig/fontconfig.h> |
| #include <stdio.h> |
| |
| 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; |
| } |