Do not set different score to non-string values
Non-string values in a cache is supposed to choose one from them.
Due to the change of da1c9f7a
, there was a regression on scoring for
matching functions. So reverting the behavior for evaluating non-string
values to the previous one.
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/286
This commit is contained in:
parent
fd393c53d8
commit
4d43f84188
|
@ -433,7 +433,7 @@ FcCompareValueList (FcObject object,
|
||||||
*result = FcResultTypeMismatch;
|
*result = FcResultTypeMismatch;
|
||||||
return FcFalse;
|
return FcFalse;
|
||||||
}
|
}
|
||||||
v = v * 1000 + j * 100 + k;
|
v = v * 1000 + j * 100 + k * (v2->value.type == FcTypeString ? 1 : 0);
|
||||||
if (v < best)
|
if (v < best)
|
||||||
{
|
{
|
||||||
if (bestValue)
|
if (bestValue)
|
||||||
|
|
|
@ -47,6 +47,7 @@ TESTDATA = \
|
||||||
test-45-generic.json \
|
test-45-generic.json \
|
||||||
test-60-generic.json \
|
test-60-generic.json \
|
||||||
test-90-synthetic.json \
|
test-90-synthetic.json \
|
||||||
|
test-issue-286.json \
|
||||||
test-style-match.json \
|
test-style-match.json \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ for i in \
|
||||||
$RUNNER $TESTDIR/../conf.d/$i $TESTDIR/$test_json
|
$RUNNER $TESTDIR/../conf.d/$i $TESTDIR/$test_json
|
||||||
done
|
done
|
||||||
for i in \
|
for i in \
|
||||||
|
test-issue-286.json \
|
||||||
test-style-match.json \
|
test-style-match.json \
|
||||||
; do
|
; do
|
||||||
echo $RUNNER $TESTDIR/$i ...
|
echo $RUNNER $TESTDIR/$i ...
|
||||||
|
|
|
@ -207,7 +207,29 @@ build_pattern (json_object *obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (type == json_type_double || type == json_type_int) {
|
} else if (type == json_type_double || type == json_type_int) {
|
||||||
|
const FcObjectType *fc_o = FcNameGetObjectType (iter.key);
|
||||||
double values[4];
|
double values[4];
|
||||||
|
|
||||||
|
if (fc_o && fc_o->type == FcTypeDouble) {
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
o = json_object_array_get_idx (iter.val, i);
|
||||||
|
type = json_object_get_type (o);
|
||||||
|
if (type == json_type_double) {
|
||||||
|
v.type = FcTypeDouble;
|
||||||
|
v.u.d = json_object_get_double (o);
|
||||||
|
} else if (type == json_type_int) {
|
||||||
|
v.type = FcTypeInteger;
|
||||||
|
v.u.i = json_object_get_int (o);
|
||||||
|
} else {
|
||||||
|
fprintf (stderr, "E: unable to convert to double\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
FcPatternAdd (pat, iter.key, v, FcTrue);
|
||||||
|
v.type = FcTypeVoid;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
if (n != 2 && n != 4) {
|
if (n != 2 && n != 4) {
|
||||||
fprintf (stderr, "E: array starting with number not range or matrix\n");
|
fprintf (stderr, "E: array starting with number not range or matrix\n");
|
||||||
continue;
|
continue;
|
||||||
|
@ -237,6 +259,7 @@ build_pattern (json_object *obj)
|
||||||
matrix.yx = values[2];
|
matrix.yx = values[2];
|
||||||
matrix.yy = values[3];
|
matrix.yy = values[3];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf (stderr, "E: array format not recognized\n");
|
fprintf (stderr, "E: array format not recognized\n");
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
"fonts": [
|
||||||
|
{
|
||||||
|
"family": "Foo",
|
||||||
|
"style": "Italic",
|
||||||
|
"pixelsize": [15, 16, 17, 18],
|
||||||
|
"file": "/path/to/Foo-Italic.ttf",
|
||||||
|
"fontversion": 133365
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"family": "Foo",
|
||||||
|
"style": "Regular",
|
||||||
|
"pixelsize": [11, 12, 13, 14, 15, 16, 17, 18, 22],
|
||||||
|
"file": "/path/to/Foo-Regular.ttf",
|
||||||
|
"fontversion": 133365
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"method": "match",
|
||||||
|
"query": {
|
||||||
|
"family": "Foo",
|
||||||
|
"style": "Regular",
|
||||||
|
"pixelsize": 16
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"family": "Foo",
|
||||||
|
"style": "Regular",
|
||||||
|
"pixelsize": 16,
|
||||||
|
"file": "/path/to/Foo-Regular.ttf",
|
||||||
|
"fontversion": 133365
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue