diff --git a/fontconfig-lcdfilter.patch b/fontconfig-lcdfilter.patch new file mode 100644 index 0000000..c99cdb6 --- /dev/null +++ b/fontconfig-lcdfilter.patch @@ -0,0 +1,40 @@ +From 2b897d4624f015c0f59a9f46925b758adfc79190 Mon Sep 17 00:00:00 2001 +From: Akira TAGOH +Date: Mon, 19 Jul 2021 21:03:20 +0900 +Subject: [PATCH] Enable 11-lcdfilter-default.conf by default + +Some applications needs this enabled by default on non-GNOME desktops. + +reference: https://bugzilla.redhat.com/show_bug.cgi?id=1965684 +--- + conf.d/Makefile.am | 1 + + conf.d/meson.build | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/conf.d/Makefile.am b/conf.d/Makefile.am +index 710318c1..43b6e2b9 100644 +--- a/conf.d/Makefile.am ++++ b/conf.d/Makefile.am +@@ -32,6 +32,7 @@ DOC_FILES = $(DOC_SOURCES:.in=) + CONF_LINKS = \ + 10-hinting-$(PREFERRED_HINTING).conf \ + 10-scale-bitmap-fonts.conf \ ++ 11-lcdfilter-default.conf \ + 20-unhint-small-vera.conf \ + 30-metric-aliases.conf \ + 40-nonlatin.conf \ +diff --git a/conf.d/meson.build b/conf.d/meson.build +index 2cb144ee..172e2af2 100644 +--- a/conf.d/meson.build ++++ b/conf.d/meson.build +@@ -42,6 +42,7 @@ preferred_hinting = 'slight' + conf_links = [ + '10-hinting-@0@.conf'.format(preferred_hinting), + '10-scale-bitmap-fonts.conf', ++ '11-lcdfilter-default.conf', + '20-unhint-small-vera.conf', + '30-metric-aliases.conf', + '40-nonlatin.conf', +-- +2.32.0 + diff --git a/fontconfig-score-fix.patch b/fontconfig-score-fix.patch new file mode 100644 index 0000000..1842985 --- /dev/null +++ b/fontconfig-score-fix.patch @@ -0,0 +1,188 @@ +From 4d43f84188847a6a77f7259f986fb178c52c1ea7 Mon Sep 17 00:00:00 2001 +From: Akira TAGOH +Date: Thu, 8 Jul 2021 14:21:50 +0900 +Subject: [PATCH 1/2] 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 +--- + src/fcmatch.c | 2 +- + test/Makefile.am | 1 + + test/run-test-conf.sh | 1 + + test/test-conf.c | 71 ++++++++++++++++++++++++++-------------- + test/test-issue-286.json | 35 ++++++++++++++++++++ + 5 files changed, 85 insertions(+), 25 deletions(-) + create mode 100644 test/test-issue-286.json + +diff --git a/src/fcmatch.c b/src/fcmatch.c +index c88e3aa..fd43cbd 100644 +--- a/src/fcmatch.c ++++ b/src/fcmatch.c +@@ -433,7 +433,7 @@ FcCompareValueList (FcObject object, + *result = FcResultTypeMismatch; + return FcFalse; + } +- v = v * 1000 + j * 100 + k; ++ v = v * 1000 + j * 100 + k * (v2->value.type == FcTypeString ? 1 : 0); + if (v < best) + { + if (bestValue) +diff --git a/test/Makefile.am b/test/Makefile.am +index aea8724..d07654b 100644 +--- a/test/Makefile.am ++++ b/test/Makefile.am +@@ -47,6 +47,7 @@ TESTDATA = \ + test-45-generic.json \ + test-60-generic.json \ + test-90-synthetic.json \ ++ test-issue-286.json \ + test-style-match.json \ + $(NULL) + +diff --git a/test/run-test-conf.sh b/test/run-test-conf.sh +index 0c2bd52..bbb56f4 100644 +--- a/test/run-test-conf.sh ++++ b/test/run-test-conf.sh +@@ -49,6 +49,7 @@ for i in \ + $RUNNER $TESTDIR/../conf.d/$i $TESTDIR/$test_json + done + for i in \ ++ test-issue-286.json \ + test-style-match.json \ + ; do + echo $RUNNER $TESTDIR/$i ... +diff --git a/test/test-conf.c b/test/test-conf.c +index e4e9da4..1a52c6e 100644 +--- a/test/test-conf.c ++++ b/test/test-conf.c +@@ -207,35 +207,58 @@ build_pattern (json_object *obj) + } + } + } else if (type == json_type_double || type == json_type_int) { ++ const FcObjectType *fc_o = FcNameGetObjectType (iter.key); + double values[4]; +- if (n != 2 && n != 4) { +- fprintf (stderr, "E: array starting with number not range or matrix\n"); ++ ++ 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; +- } +- 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 && type != json_type_int) { +- fprintf (stderr, "E: numeric array entry not a number\n"); ++ } else { ++ if (n != 2 && n != 4) { ++ fprintf (stderr, "E: array starting with number not range or matrix\n"); + continue; + } +- values[i] = json_object_get_double (o); +- } +- if (n == 2) { +- v.type = FcTypeRange; +- v.u.r = FcRangeCreateDouble (values[0], values[1]); +- if (!v.u.r) { +- fprintf (stderr, "E: failed to create range\n"); +- continue; ++ 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 && type != json_type_int) { ++ fprintf (stderr, "E: numeric array entry not a number\n"); ++ continue; ++ } ++ values[i] = json_object_get_double (o); ++ } ++ if (n == 2) { ++ v.type = FcTypeRange; ++ v.u.r = FcRangeCreateDouble (values[0], values[1]); ++ if (!v.u.r) { ++ fprintf (stderr, "E: failed to create range\n"); ++ continue; ++ } ++ destroy_v = FcTrue; ++ } else { ++ v.type = FcTypeMatrix; ++ v.u.m = &matrix; ++ matrix.xx = values[0]; ++ matrix.xy = values[1]; ++ matrix.yx = values[2]; ++ matrix.yy = values[3]; + } +- destroy_v = FcTrue; +- } else { +- v.type = FcTypeMatrix; +- v.u.m = &matrix; +- matrix.xx = values[0]; +- matrix.xy = values[1]; +- matrix.yx = values[2]; +- matrix.yy = values[3]; + } + } else { + fprintf (stderr, "E: array format not recognized\n"); +diff --git a/test/test-issue-286.json b/test/test-issue-286.json +new file mode 100644 +index 0000000..a3199fa +--- /dev/null ++++ b/test/test-issue-286.json +@@ -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 ++ } ++ } ++ ] ++} +-- +2.31.1 + diff --git a/fontconfig.spec b/fontconfig.spec index 178de3a..7335ee3 100644 --- a/fontconfig.spec +++ b/fontconfig.spec @@ -5,7 +5,7 @@ Summary: Font configuration and customization library Name: fontconfig Version: 2.13.94 -Release: 1%{?dist} +Release: 2%{?dist} # src/ftglue.[ch] is in Public Domain # src/fccache.c contains Public Domain code # fc-case/CaseFolding.txt is in the UCD @@ -20,6 +20,8 @@ Source2: fc-cache Patch0: %{name}-sleep-less.patch Patch4: %{name}-drop-lang-from-pkgkit-format.patch Patch5: %{name}-disable-network-required-test.patch +Patch6: %{name}-score-fix.patch +Patch7: %{name}-lcdfilter.patch BuildRequires: libxml2-devel BuildRequires: freetype-devel >= %{freetype_version} @@ -187,6 +189,11 @@ fi %doc fontconfig-devel.txt fontconfig-devel %changelog +* Tue Jul 20 2021 Akira TAGOH - 2.13.94-2 +- Fix the score calculation on matching for multiple values. +- Enable 11-lcdfilter-default.conf. + Resolves: rhbz#1965684 + * Thu Jun 29 2021 Akira TAGOH - 2.13.94-1 - New upstream release.