void FcPatternPrint(const FcPattern *p) { int i; FcPatternElt *e; if (!p) { printf("Null pattern\n"); return; } printf("Pattern has %d elts (size %d)\n", p->num, p->size); for (i = 0; i < p->num; i++) { e = &FcPatternElts(p)[i]; printf("\t%s:", FcObjectName(e->object)); FcValueListPrint(FcPatternEltValues(e)); printf("\n"); } printf("\n"); }
void FcPatternPrint (const FcPattern *p) { int i; FcPatternElt *e; if (!p) { printf ("Null pattern\n"); return; } printf ("Pattern %d of %d\n", p->num, p->size); for (i = 0; i < p->num; i++) { e = &p->elts[i]; printf ("\t%s:", e->object); FcValueListPrint (e->values); printf ("\n"); } printf ("\n"); }
static FcBool FcCompareValueList (FcObject object, const FcMatcher *match, FcValueListPtr v1orig, /* pattern */ FcValueListPtr v2orig, /* target */ FcValue *bestValue, double *value, int *n, FcResult *result) { FcValueListPtr v1, v2; double v, best, bestStrong, bestWeak; int j, k, pos = 0; if (!match) { if (bestValue) *bestValue = FcValueCanonicalize(&v2orig->value); if (n) *n = 0; return FcTrue; } best = 1e99; bestStrong = 1e99; bestWeak = 1e99; j = 1; for (v1 = v1orig; v1; v1 = FcValueListNext(v1)) { for (v2 = v2orig, k = 0; v2; v2 = FcValueListNext(v2), k++) { v = (match->compare) (&v1->value, &v2->value); if (v < 0) { *result = FcResultTypeMismatch; return FcFalse; } v = v * 1000 + j; if (v < best) { if (bestValue) *bestValue = FcValueCanonicalize(&v2->value); best = v; pos = k; } if (v1->binding == FcValueBindingStrong) { if (v < bestStrong) bestStrong = v; } else { if (v < bestWeak) bestWeak = v; } } j++; } if (FcDebug () & FC_DBG_MATCHV) { printf (" %s: %g ", FcObjectName (object), best); FcValueListPrint (v1orig); printf (", "); FcValueListPrint (v2orig); printf ("\n"); } if (value) { int weak = match->weak; int strong = match->strong; if (weak == strong) value[strong] += best; else { value[weak] += bestWeak; value[strong] += bestStrong; } } if (n) *n = pos; return FcTrue; }
static FcBool FcCompareValueList (const char *object, FcValueList *v1orig, /* pattern */ FcValueList *v2orig, /* target */ FcValue *bestValue, double *value, FcResult *result) { FcValueList *v1, *v2; double v, best, bestStrong, bestWeak; int i; int j; /* * Locate the possible matching entry by examining the * first few characters in object */ i = -1; switch (FcToLower (object[0])) { case 'f': switch (FcToLower (object[1])) { case 'o': switch (FcToLower (object[2])) { case 'u': i = MATCH_FOUNDRY; break; case 'n': i = MATCH_FONTVERSION; break; } break; case 'a': i = MATCH_FAMILY; break; } break; case 'c': i = MATCH_CHARSET; break; case 'a': i = MATCH_ANTIALIAS; break; case 'l': i = MATCH_LANG; break; case 's': switch (FcToLower (object[1])) { case 'p': i = MATCH_SPACING; break; case 't': i = MATCH_STYLE; break; case 'l': i = MATCH_SLANT; break; } break; case 'p': i = MATCH_PIXEL_SIZE; break; case 'w': switch (FcToLower (object[1])) { case 'i': i = MATCH_WIDTH; break; case 'e': i = MATCH_WEIGHT; break; } break; case 'r': i = MATCH_RASTERIZER; break; case 'o': i = MATCH_OUTLINE; break; } if (i == -1 || FcStrCmpIgnoreCase ((FcChar8 *) _FcMatchers[i].object, (FcChar8 *) object) != 0) { if (bestValue) *bestValue = v2orig->value; return FcTrue; } #if 0 for (i = 0; i < NUM_MATCHER; i++) { if (!FcStrCmpIgnoreCase ((FcChar8 *) _FcMatchers[i].object, (FcChar8 *) object)) break; } if (i == NUM_MATCHER) { if (bestValue) *bestValue = v2orig->value; return FcTrue; } #endif best = 1e99; bestStrong = 1e99; bestWeak = 1e99; j = 0; for (v1 = v1orig; v1; v1 = v1->next) { for (v2 = v2orig; v2; v2 = v2->next) { v = (*_FcMatchers[i].compare) (_FcMatchers[i].object, v1->value, v2->value); if (v < 0) { *result = FcResultTypeMismatch; return FcFalse; } if (FcDebug () & FC_DBG_MATCHV) printf (" v %g j %d ", v, j); v = v * 100 + j; if (v < best) { if (bestValue) *bestValue = v2->value; best = v; } if (v1->binding == FcValueBindingStrong) { if (v < bestStrong) bestStrong = v; } else { if (v < bestWeak) bestWeak = v; } } j++; } if (FcDebug () & FC_DBG_MATCHV) { printf (" %s: %g ", object, best); FcValueListPrint (v1orig); printf (", "); FcValueListPrint (v2orig); printf ("\n"); } if (value) { int weak = _FcMatchers[i].weak; int strong = _FcMatchers[i].strong; if (weak == strong) value[strong] += best; else { value[weak] += bestWeak; value[strong] += bestStrong; } } return FcTrue; }