dk / Prima

prima.eu.org
Other
106 stars 27 forks source link

t/Object/Shaping.t fails with Unifont font and harfbuzz ≥ 4.4.0 #80

Closed ppisar closed 1 year ago

ppisar commented 1 year ago

After installing Unifont 14.0.01 (I know, it's not the latest version), t/Object/Shaping.t fails like this:

not ok 104 - (--no-fribidi)  - arabic ligation (glyphs) {/|}
#   Failed test '(--no-fribidi)  - arabic ligation (glyphs) {/|}'
#   at t/Object/Shaping.t line 651.
#   Failed test 'arabic ligation (glyphs) {/|}'
#   at t/Object/Shaping.t line 79.
# got [dd91 db42], expected [ddfe] font=Unifont
[...]
1..416
# Looks like you failed 14 tests of 416.

There many more failed tests:

Test Summary Report
-------------------
t/Object/Shaping.t (Wstat: 3584 (exited 14) Tests: 416 Failed: 14)
  Failed tests:  29-30, 67-71, 104-105, 132-136
  Non-zero exit status: 14

When I uninstall that font, the test run reports less, 371, tests. All passing.

I guess that Unifont does not support all features required by the test, but provides enough glyphs not to skip the tests.

Would it it be possible, for the sake of the test, to recommend a font which supports the tested features and change the test to use that font instead of one which blindly returns the operating system (e.g. fontconfig on Linux)?

dk commented 1 year ago

I've just tried this:

  1. apt-get install unifont (unifont:all/jammy 1:14.0.01-1)- the test runs just fine
  2. I added a commit where one can run it as perl t/Object/Shaping.t font=Unifont - the test runs just fine

I rather wouldn't hardcode a font because in a way I want the test to fail - how would I else ensure that Prima would work fine with these fonts?

Could you possibly share the fonts your system is using, or otherwise let me try to reproduce the bug? Mine unifont files are:

$ ls -l /usr/share/fonts/truetype/unifont
total 18080K
-rw-r--r-- 1 root root  1268376 Oct 23  2021 unifont_csur.ttf
-rw-r--r-- 1 root root  2872052 Oct 23  2021 unifont_sample.ttf
-rw-r--r-- 1 root root 12273960 Oct 23  2021 unifont.ttf
-rw-r--r-- 1 root root  2090336 Oct 23  2021 unifont_upper.ttf

Also, is Prima compiled with fribidi, xft, harfbuzz? ( perl -MPrima -e 1 -- --help prints a list of available options, and if f ex xft is not there, then Prima is not compiled with it).

ppisar commented 1 year ago

My Prima is built with all features enabled except of heif. --help shows --no-fribidi, --no-libthai, --no-xft, --font-priority defaulting to xft, --no-harfbuzz options.

I think the test results depend on font which is used. If I install Unifont (/usr/share/fonts/unifont/unifont.ttf and /usr/share/fonts/unifont/unifont_upper.ttf), then the test fails with 416 results. Then when I override the font to a nonexistent one with font=does-not-exist the tests passes with 288 results. If I enforce Unifont with font=Unifont, then it again fails with 416 tests. What bugs me is that number of tests and names of the tests change with fonts. In my opinion a good test script should skip inapplicable tests rather then shorten a test plan. Then the tests numbers would be stable and the results easily comparable.

I added a diag to print a font name in a passed branch of comp() subroutine and without Unifont installed I get:

ok 104 - (--no-fribidi)  - arabic ligation (glyphs)
# font=DejaVu Sans

The "arabic ligation (glyphs) {/|}" test is completely missing from the output and thus the number 104 differs. Here is for a reference the difference between all 416 tests run without installed Unifont (/tmp/good) and with installed Unifont (/tmp/bad). No font= argument was used for overriding:

--- /tmp/good   2023-01-17 17:10:23.576000000 +0100
+++ /tmp/bad    2023-01-17 17:08:58.309000000 +0100
@@ -1,33 +1,33 @@
 ok 1 - ()  - test shaping
 ok 2 - ()  - ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 3 - ()  - ltr (indexes)
 ok 4 - ()  - rtl in ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 5 - ()  - rtl in ltr (indexes)
 ok 6 - ()  - bidi (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 7 - ()  - bidi (indexes)
 ok 8 - ()  - null shaping (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 9 - ()  - null shaping (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 10 - ()  - reorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 11 - ()  - reorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 12 - ()  - noreorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 13 - ()  - noreorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 14 - ()  - reorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 15 - ()  - reorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 16 - ()  - noreorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 17 - ()  - noreorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 18 - ()  - positions are okay
 ok 19 - ()  - advances are okay
 ok 20 - ()  - glyph mapper indexes are okay
@@ -36,40 +36,48 @@
 ok 23 - ()  - glyph mapper positions w/advances are okay
 ok 24 - ()  - glyph mapper advances a w/advances are okay
 ok 25 - ()  - rtl in rtl (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 26 - ()  - rtl in rtl (indexes)
 ok 27 - ()  - no arabic ligation (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 28 - ()  - no arabic ligation (indexes)
-ok 29 - ()  - arabic ligation (glyphs)
-# font=DejaVu Sans
-ok 30 - ()  - arabic ligation (indexes)
-# font=DejaVu Sans
+not ok 29 - ()  - arabic ligation (glyphs) {/|}
+#   Failed test '()  - arabic ligation (glyphs) {/|}'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'arabic ligation (glyphs) {/|}'
+#   at t/Object/Shaping.t line 87.
+# got [dd91 db42], expected [ddfe] font=Unifont
+not ok 30 - ()  - arabic ligation (indexes) {/|}
+#   Failed test '()  - arabic ligation (indexes) {/|}'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'arabic ligation (indexes) {/|}'
+#   at t/Object/Shaping.t line 87.
+# got [-1 -0 2], expected [-0 2] font=Unifont
 ok 31 - ()  - arabic non-ligation (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 32 - ()  - arabic non-ligation (indexes)
 ok 33 - ()  - example 1 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 34 - ()  - example 1 (indexes)
 ok 35 - ()  - example 2 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 36 - ()  - example 2 (indexes)
 ok 37 - ()  - example 3 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 38 - ()  - example 3 (indexes)
 ok 39 - ()  - example 4 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 40 - ()  - example 4 (indexes)
-ok 41 # skip () no devanagari font
-ok 42 # skip () no khmer font
+ok 41 - ()  - devanagari shaping
+ok 42 - ()  - khmer shaping
 ok 43 - ()  - bytes
 ok 44 - ()  - two bytes mapped to two glyphs
 ok 45 - ()  - two bytes index array
 ok 46 - ()  - high unicode
 ok 47 - ()  - unresolvable glyphs
-ok 48 - ()  - found char U+10300 in DejaVu Sans as glyph 14fd (glyphs)
-# font=DejaVu Sans
-ok 49 - ()  - found char U+10300 in DejaVu Sans as glyph 14fd (indexes)
+ok 48 - ()  - found char U+1f12f in Unifont as glyph df01 (glyphs)
+# font=Unifont
+ok 49 - ()  - found char U+1f12f in Unifont as glyph df01 (indexes)
 ok 50 - ()  - glyphs plotting
 ok 51 - ()  - glyphs plotting, terse version
 ok 52 - ()  - glyphs plotting 45 degrees
@@ -87,47 +95,83 @@
 ok 64 - ()  - positions 1
 ok 65 - ()  - positions 2
 ok 66 - ()  - quick clone
-ok 67 - ()  - ligature wrap, chunks
-ok 68 - ()  - ligature wrap, left glyphs
-ok 69 - ()  - ligature wrap, left indexes
-ok 70 - ()  - ligature wrap, right glyphs
-ok 71 - ()  - ligature wrap, right indexes
+not ok 67 - ()  - ligature wrap, chunks
+#   Failed test '()  - ligature wrap, chunks'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, chunks'
+#   at t/Object/Shaping.t line 493.
+#     Structures begin differing at:
+#          $got->[4] = '2'
+#     $expected->[4] = Does not exist
+not ok 68 - ()  - ligature wrap, left glyphs
+#   Failed test '()  - ligature wrap, left glyphs'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, left glyphs'
+#   at t/Object/Shaping.t line 495.
+#     Structures begin differing at:
+#          $got->[0] = '56721'
+#     $expected->[0] = '56830'
+not ok 69 - ()  - ligature wrap, left indexes
+#   Failed test '()  - ligature wrap, left indexes'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, left indexes'
+#   at t/Object/Shaping.t line 496.
+#     Structures begin differing at:
+#          $got->[0] = '32770'
+#     $expected->[0] = '32769'
+not ok 70 - ()  - ligature wrap, right glyphs
+#   Failed test '()  - ligature wrap, right glyphs'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, right glyphs'
+#   at t/Object/Shaping.t line 497.
+#     Structures begin differing at:
+#          $got->[0] = '56130'
+#     $expected->[0] = '56720'
+not ok 71 - ()  - ligature wrap, right indexes
+#   Failed test '()  - ligature wrap, right indexes'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, right indexes'
+#   at t/Object/Shaping.t line 498.
+#     Structures begin differing at:
+#          $got->[0] = '32769'
+#     $expected->[0] = '32768'
 ok 72 - ()  - tilde is at line 1
 ok 73 - ()  - 'p' is at position 2
 ok 74 - ()  - 'A' has non-zero advance
 ok 75 - ()  - joined 'acute' has zero advance
 ok 76 - ()  - 'f' has non-zero advance
 ok 77 - ()  - ZWNJ has zero advance
+# Looks like you failed 7 tests of 77.
 ok 78 - (--no-fribidi)  - test shaping
 ok 79 - (--no-fribidi)  - ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 80 - (--no-fribidi)  - ltr (indexes)
 ok 81 - (--no-fribidi)  - rtl in ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 82 - (--no-fribidi)  - rtl in ltr (indexes)
 ok 83 - (--no-fribidi)  - bidi (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 84 - (--no-fribidi)  - bidi (indexes)
 ok 85 - (--no-fribidi)  - null shaping (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 86 - (--no-fribidi)  - null shaping (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 87 - (--no-fribidi)  - reorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 88 - (--no-fribidi)  - reorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 89 - (--no-fribidi)  - noreorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 90 - (--no-fribidi)  - noreorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 91 - (--no-fribidi)  - reorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 92 - (--no-fribidi)  - reorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 93 - (--no-fribidi)  - noreorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 94 - (--no-fribidi)  - noreorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 95 - (--no-fribidi)  - positions are okay
 ok 96 - (--no-fribidi)  - advances are okay
 ok 97 - (--no-fribidi)  - glyph mapper indexes are okay
@@ -136,22 +180,30 @@
 ok 100 - (--no-fribidi)  - glyph mapper positions w/advances are okay
 ok 101 - (--no-fribidi)  - glyph mapper advances a w/advances are okay
 ok 102 - (--no-fribidi)  - no arabic ligation (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 103 - (--no-fribidi)  - no arabic ligation (indexes)
-ok 104 - (--no-fribidi)  - arabic ligation (glyphs)
-# font=DejaVu Sans
-ok 105 - (--no-fribidi)  - arabic ligation (indexes)
-# font=DejaVu Sans
-ok 106 # skip (--no-fribidi) no devanagari font
-ok 107 # skip (--no-fribidi) no khmer font
+not ok 104 - (--no-fribidi)  - arabic ligation (glyphs) {/|}
+#   Failed test '(--no-fribidi)  - arabic ligation (glyphs) {/|}'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'arabic ligation (glyphs) {/|}'
+#   at t/Object/Shaping.t line 87.
+# got [dd91 db42], expected [ddfe] font=Unifont
+not ok 105 - (--no-fribidi)  - arabic ligation (indexes) {/|}
+#   Failed test '(--no-fribidi)  - arabic ligation (indexes) {/|}'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'arabic ligation (indexes) {/|}'
+#   at t/Object/Shaping.t line 87.
+# got [-1 -0 2], expected [-0 2] font=Unifont
+ok 106 - (--no-fribidi)  - devanagari shaping
+ok 107 - (--no-fribidi)  - khmer shaping
 ok 108 - (--no-fribidi)  - bytes
 ok 109 - (--no-fribidi)  - two bytes mapped to two glyphs
 ok 110 - (--no-fribidi)  - two bytes index array
 ok 111 - (--no-fribidi)  - high unicode
 ok 112 - (--no-fribidi)  - unresolvable glyphs
-ok 113 - (--no-fribidi)  - found char U+10300 in DejaVu Sans as glyph 14fd (glyphs)
-# font=DejaVu Sans
-ok 114 - (--no-fribidi)  - found char U+10300 in DejaVu Sans as glyph 14fd (indexes)
+ok 113 - (--no-fribidi)  - found char U+1f12f in Unifont as glyph df01 (glyphs)
+# font=Unifont
+ok 114 - (--no-fribidi)  - found char U+1f12f in Unifont as glyph df01 (indexes)
 ok 115 - (--no-fribidi)  - glyphs plotting
 ok 116 - (--no-fribidi)  - glyphs plotting, terse version
 ok 117 - (--no-fribidi)  - glyphs plotting 45 degrees
@@ -169,77 +221,113 @@
 ok 129 - (--no-fribidi)  - positions 1
 ok 130 - (--no-fribidi)  - positions 2
 ok 131 - (--no-fribidi)  - quick clone
-ok 132 - (--no-fribidi)  - ligature wrap, chunks
-ok 133 - (--no-fribidi)  - ligature wrap, left glyphs
-ok 134 - (--no-fribidi)  - ligature wrap, left indexes
-ok 135 - (--no-fribidi)  - ligature wrap, right glyphs
-ok 136 - (--no-fribidi)  - ligature wrap, right indexes
+not ok 132 - (--no-fribidi)  - ligature wrap, chunks
+#   Failed test '(--no-fribidi)  - ligature wrap, chunks'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, chunks'
+#   at t/Object/Shaping.t line 493.
+#     Structures begin differing at:
+#          $got->[4] = '2'
+#     $expected->[4] = Does not exist
+not ok 133 - (--no-fribidi)  - ligature wrap, left glyphs
+#   Failed test '(--no-fribidi)  - ligature wrap, left glyphs'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, left glyphs'
+#   at t/Object/Shaping.t line 495.
+#     Structures begin differing at:
+#          $got->[0] = '56721'
+#     $expected->[0] = '56830'
+not ok 134 - (--no-fribidi)  - ligature wrap, left indexes
+#   Failed test '(--no-fribidi)  - ligature wrap, left indexes'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, left indexes'
+#   at t/Object/Shaping.t line 496.
+#     Structures begin differing at:
+#          $got->[0] = '32770'
+#     $expected->[0] = '32769'
+not ok 135 - (--no-fribidi)  - ligature wrap, right glyphs
+#   Failed test '(--no-fribidi)  - ligature wrap, right glyphs'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, right glyphs'
+#   at t/Object/Shaping.t line 497.
+#     Structures begin differing at:
+#          $got->[0] = '56130'
+#     $expected->[0] = '56720'
+not ok 136 - (--no-fribidi)  - ligature wrap, right indexes
+#   Failed test '(--no-fribidi)  - ligature wrap, right indexes'
+#   at t/Object/Shaping.t line 666.
+#   Failed test 'ligature wrap, right indexes'
+#   at t/Object/Shaping.t line 498.
+#     Structures begin differing at:
+#          $got->[0] = '32769'
+#     $expected->[0] = '32768'
 ok 137 - (--no-fribidi)  - tilde is at line 1
 ok 138 - (--no-fribidi)  - 'p' is at position 2
 ok 139 - (--no-fribidi)  - 'A' has non-zero advance
 ok 140 - (--no-fribidi)  - joined 'acute' has zero advance
 ok 141 - (--no-fribidi)  - 'f' has non-zero advance
 ok 142 - (--no-fribidi)  - ZWNJ has zero advance
+# Looks like you failed 7 tests of 65.
 ok 143 - (--no-harfbuzz)  - test bidi
 ok 144 - (--no-harfbuzz)  - ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 145 - (--no-harfbuzz)  - ltr (indexes)
 ok 146 - (--no-harfbuzz)  - rtl in ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 147 - (--no-harfbuzz)  - rtl in ltr (indexes)
 ok 148 - (--no-harfbuzz)  - bidi (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 149 - (--no-harfbuzz)  - bidi (indexes)
 ok 150 - (--no-harfbuzz)  - null shaping (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 151 - (--no-harfbuzz)  - null shaping (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 152 - (--no-harfbuzz)  - reorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 153 - (--no-harfbuzz)  - reorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 154 - (--no-harfbuzz)  - noreorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 155 - (--no-harfbuzz)  - noreorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 156 - (--no-harfbuzz)  - reorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 157 - (--no-harfbuzz)  - reorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 158 - (--no-harfbuzz)  - noreorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 159 - (--no-harfbuzz)  - noreorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 160 - (--no-harfbuzz)  - rtl in rtl (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 161 - (--no-harfbuzz)  - rtl in rtl (indexes)
 ok 162 - (--no-harfbuzz)  - arabic ligation with ZW nobreaker (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 163 - (--no-harfbuzz)  - arabic ligation with ZW nobreaker (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 164 - (--no-harfbuzz)  - no arabic ligation (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 165 - (--no-harfbuzz)  - no arabic ligation (indexes)
 ok 166 - (--no-harfbuzz)  - example 1 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 167 - (--no-harfbuzz)  - example 1 (indexes)
 ok 168 - (--no-harfbuzz)  - example 2 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 169 - (--no-harfbuzz)  - example 2 (indexes)
 ok 170 - (--no-harfbuzz)  - example 3 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 171 - (--no-harfbuzz)  - example 3 (indexes)
 ok 172 - (--no-harfbuzz)  - example 4 (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 173 - (--no-harfbuzz)  - example 4 (indexes)
 ok 174 - (--no-harfbuzz)  - bytes
 ok 175 - (--no-harfbuzz)  - two bytes mapped to two glyphs
 ok 176 - (--no-harfbuzz)  - two bytes index array
 ok 177 - (--no-harfbuzz)  - high unicode
 ok 178 - (--no-harfbuzz)  - unresolvable glyphs
-ok 179 - (--no-harfbuzz)  - found char U+10300 in DejaVu Sans as glyph 14fd (glyphs)
-# font=DejaVu Sans
-ok 180 - (--no-harfbuzz)  - found char U+10300 in DejaVu Sans as glyph 14fd (indexes)
+ok 179 - (--no-harfbuzz)  - found char U+1f12f in Unifont as glyph df01 (glyphs)
+# font=Unifont
+ok 180 - (--no-harfbuzz)  - found char U+1f12f in Unifont as glyph df01 (indexes)
 ok 181 - (--no-harfbuzz)  - glyphs plotting
 ok 182 - (--no-harfbuzz)  - glyphs plotting, terse version
 ok 183 - (--no-harfbuzz)  - glyphs plotting 45 degrees
@@ -260,42 +348,42 @@
 ok 198 # skip (--no-harfbuzz) no combining without shaping
 ok 199 - (--no-fribidi --no-harfbuzz)  - test glyph mapping without bidi
 ok 200 - (--no-fribidi --no-harfbuzz)  - ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 201 - (--no-fribidi --no-harfbuzz)  - ltr (indexes)
 ok 202 - (--no-fribidi --no-harfbuzz)  - rtl in ltr (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 203 - (--no-fribidi --no-harfbuzz)  - rtl in ltr (indexes)
 ok 204 - (--no-fribidi --no-harfbuzz)  - bidi (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 205 - (--no-fribidi --no-harfbuzz)  - bidi (indexes)
 ok 206 - (--no-fribidi --no-harfbuzz)  - null shaping (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 207 - (--no-fribidi --no-harfbuzz)  - null shaping (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 208 - (--no-fribidi --no-harfbuzz)  - reorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 209 - (--no-fribidi --no-harfbuzz)  - reorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 210 - (--no-fribidi --no-harfbuzz)  - noreorder glyphs (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 211 - (--no-fribidi --no-harfbuzz)  - noreorder glyphs (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 212 - (--no-fribidi --no-harfbuzz)  - reorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 213 - (--no-fribidi --no-harfbuzz)  - reorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 214 - (--no-fribidi --no-harfbuzz)  - noreorder full (glyphs)
-# font=DejaVu Sans
+# font=Unifont
 ok 215 - (--no-fribidi --no-harfbuzz)  - noreorder full (indexes)
-# font=DejaVu Sans
+# font=Unifont
 ok 216 - (--no-fribidi --no-harfbuzz)  - bytes
 ok 217 - (--no-fribidi --no-harfbuzz)  - two bytes mapped to two glyphs
 ok 218 - (--no-fribidi --no-harfbuzz)  - two bytes index array
 ok 219 - (--no-fribidi --no-harfbuzz)  - high unicode
 ok 220 - (--no-fribidi --no-harfbuzz)  - unresolvable glyphs
-ok 221 - (--no-fribidi --no-harfbuzz)  - found char U+10300 in DejaVu Sans as glyph 14fd (glyphs)
-# font=DejaVu Sans
-ok 222 - (--no-fribidi --no-harfbuzz)  - found char U+10300 in DejaVu Sans as glyph 14fd (indexes)
+ok 221 - (--no-fribidi --no-harfbuzz)  - found char U+1f12f in Unifont as glyph df01 (glyphs)
+# font=Unifont
+ok 222 - (--no-fribidi --no-harfbuzz)  - found char U+1f12f in Unifont as glyph df01 (indexes)
 ok 223 - (--no-fribidi --no-harfbuzz)  - glyphs plotting
 ok 224 - (--no-fribidi --no-harfbuzz)  - glyphs plotting, terse version
 ok 225 - (--no-fribidi --no-harfbuzz)  - glyphs plotting 45 degrees
@@ -543,3 +631,4 @@
 ok 415 - (--no-fribidi --no-harfbuzz --no-xft)  - quick clone
 ok 416 # skip (--no-fribidi --no-harfbuzz --no-xft) no combining without shaping
 1..416
+# Looks like you failed 14 tests of 416.

I think your system has installed more fonts them mine. And some of yours probably takes preference over Unifont. The preference also depends on fontconfig configuration. My system is an isolated environment, so I can uninstall almost any font. Now I have installed 101 fonts (fc-list | sort):

/usr/share/fonts/dejavu-sans-fonts/DejaVuSans-BoldOblique.ttf: DejaVu Sans:style=Bold Oblique
/usr/share/fonts/dejavu-sans-fonts/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
/usr/share/fonts/dejavu-sans-fonts/DejaVuSansCondensed-BoldOblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold Oblique,Bold Oblique
/usr/share/fonts/dejavu-sans-fonts/DejaVuSansCondensed-Bold.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold,Bold
/usr/share/fonts/dejavu-sans-fonts/DejaVuSansCondensed-Oblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Oblique,Oblique
/usr/share/fonts/dejavu-sans-fonts/DejaVuSansCondensed.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed,Book
/usr/share/fonts/dejavu-sans-fonts/DejaVuSans-ExtraLight.ttf: DejaVu Sans,DejaVu Sans Light:style=ExtraLight
/usr/share/fonts/dejavu-sans-fonts/DejaVuSans-Oblique.ttf: DejaVu Sans:style=Oblique
/usr/share/fonts/dejavu-sans-fonts/DejaVuSans.ttf: DejaVu Sans:style=Regular,Book
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=Bold Italic
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=Display Bold Italic
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=Display Italic
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=Display Medium Italic
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=Display SemiBold Italic
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=Italic
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=Medium Italic
/usr/share/fonts/google-noto-vf/NotoSans-Italic-VF.ttf: Noto Sans:style=SemiBold Italic
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=Bold
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=Display Bold
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=Display Medium
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=Display Regular
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=Display SemiBold
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=Medium
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=Regular
/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf: Noto Sans:style=SemiBold
/usr/share/fonts/lm/lmmonocaps10-oblique.otf: Latin Modern Mono Caps,LM Mono Caps 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmmonocaps10-regular.otf: Latin Modern Mono Caps,LM Mono Caps 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmmonoltcond10-oblique.otf: Latin Modern Mono Light Cond,LM Mono Light Cond 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmmonoltcond10-regular.otf: Latin Modern Mono Light Cond,LM Mono Light Cond 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmmonolt10-boldoblique.otf: Latin Modern Mono Light,LM Mono Light 10:style=10 Bold Oblique,Bold Italic
/usr/share/fonts/lm/lmmonolt10-bold.otf: Latin Modern Mono Light,LM Mono Light 10:style=10 Bold,Bold
/usr/share/fonts/lm/lmmonolt10-oblique.otf: Latin Modern Mono Light,LM Mono Light 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmmonolt10-regular.otf: Latin Modern Mono Light,LM Mono Light 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmmonoproplt10-boldoblique.otf: Latin Modern Mono Prop Light,LM Mono Prop Light 10:style=10 BoldOblique,Bold Italic
/usr/share/fonts/lm/lmmonoproplt10-bold.otf: Latin Modern Mono Prop Light,LM Mono Prop Light 10:style=10 Bold,Bold
/usr/share/fonts/lm/lmmonoproplt10-oblique.otf: Latin Modern Mono Prop Light,LM Mono Prop Light 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmmonoproplt10-regular.otf: Latin Modern Mono Prop Light,LM Mono Prop Light 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmmonoprop10-oblique.otf: Latin Modern Mono Prop,LM Mono Prop 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmmonoprop10-regular.otf: Latin Modern Mono Prop,LM Mono Prop 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmmonoslant10-regular.otf: Latin Modern Mono Slanted,LM Mono Slanted 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmmono10-italic.otf: Latin Modern Mono,LM Mono 10:style=10 Italic,Italic
/usr/share/fonts/lm/lmmono10-regular.otf: Latin Modern Mono,LM Mono 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmmono12-regular.otf: Latin Modern Mono,LM Mono 12:style=12 Regular,Regular
/usr/share/fonts/lm/lmmono8-regular.otf: Latin Modern Mono,LM Mono 8:style=8 Regular,Regular
/usr/share/fonts/lm/lmmono9-regular.otf: Latin Modern Mono,LM Mono 9:style=9 Regular,Regular
/usr/share/fonts/lm/lmromancaps10-oblique.otf: Latin Modern Roman Caps,LM Roman Caps 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmromancaps10-regular.otf: Latin Modern Roman Caps,LM Roman Caps 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmromandemi10-oblique.otf: Latin Modern Roman Demi,LM Roman Demi 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmromandemi10-regular.otf: Latin Modern Roman Demi,LM Roman Demi 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmromandunh10-oblique.otf: Latin Modern Roman Dunhill,LM Roman Dunhill 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmromandunh10-regular.otf: Latin Modern Roman Dunhill,LM Roman Dunhill 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmromanslant10-bold.otf: Latin Modern Roman Slanted,LM Roman Slanted 10:style=10 Bold,Bold
/usr/share/fonts/lm/lmromanslant10-regular.otf: Latin Modern Roman Slanted,LM Roman Slanted 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmromanslant12-regular.otf: Latin Modern Roman Slanted,LM Roman Slanted 12:style=12 Regular,Regular
/usr/share/fonts/lm/lmromanslant17-regular.otf: Latin Modern Roman Slanted,LM Roman Slanted 17:style=17 Regular,Regular
/usr/share/fonts/lm/lmromanslant8-regular.otf: Latin Modern Roman Slanted,LM Roman Slanted 8:style=8 Regular,Regular
/usr/share/fonts/lm/lmromanslant9-regular.otf: Latin Modern Roman Slanted,LM Roman Slanted 9:style=9 Regular,Regular
/usr/share/fonts/lm/lmromanunsl10-regular.otf: Latin Modern Roman Unslanted,LM Roman Unslanted 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmroman10-bolditalic.otf: Latin Modern Roman,LM Roman 10:style=10 Bold Italic,Bold Italic
/usr/share/fonts/lm/lmroman10-bold.otf: Latin Modern Roman,LM Roman 10:style=10 Bold,Bold
/usr/share/fonts/lm/lmroman10-italic.otf: Latin Modern Roman,LM Roman 10:style=10 Italic,Italic
/usr/share/fonts/lm/lmroman10-regular.otf: Latin Modern Roman,LM Roman 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmroman12-bold.otf: Latin Modern Roman,LM Roman 12:style=12 Bold,Bold
/usr/share/fonts/lm/lmroman12-italic.otf: Latin Modern Roman,LM Roman 12:style=12 Italic,Italic
/usr/share/fonts/lm/lmroman12-regular.otf: Latin Modern Roman,LM Roman 12:style=12 Regular,Regular
/usr/share/fonts/lm/lmroman17-regular.otf: Latin Modern Roman,LM Roman 17:style=17 Regular,Regular
/usr/share/fonts/lm/lmroman5-bold.otf: Latin Modern Roman,LM Roman 5:style=5 Bold,Bold
/usr/share/fonts/lm/lmroman5-regular.otf: Latin Modern Roman,LM Roman 5:style=5 Regular,Regular
/usr/share/fonts/lm/lmroman6-bold.otf: Latin Modern Roman,LM Roman 6:style=6 Bold,Bold
/usr/share/fonts/lm/lmroman6-regular.otf: Latin Modern Roman,LM Roman 6:style=6 Regular,Regular
/usr/share/fonts/lm/lmroman7-bold.otf: Latin Modern Roman,LM Roman 7:style=7 Bold,Bold
/usr/share/fonts/lm/lmroman7-italic.otf: Latin Modern Roman,LM Roman 7:style=7 Italic,Italic
/usr/share/fonts/lm/lmroman7-regular.otf: Latin Modern Roman,LM Roman 7:style=7 Regular,Regular
/usr/share/fonts/lm/lmroman8-bold.otf: Latin Modern Roman,LM Roman 8:style=8 Bold,Bold
/usr/share/fonts/lm/lmroman8-italic.otf: Latin Modern Roman,LM Roman 8:style=8 Italic,Italic
/usr/share/fonts/lm/lmroman8-regular.otf: Latin Modern Roman,LM Roman 8:style=8 Regular,Regular
/usr/share/fonts/lm/lmroman9-bold.otf: Latin Modern Roman,LM Roman 9:style=9 Bold,Bold
/usr/share/fonts/lm/lmroman9-italic.otf: Latin Modern Roman,LM Roman 9:style=9 Italic,Italic
/usr/share/fonts/lm/lmroman9-regular.otf: Latin Modern Roman,LM Roman 9:style=9 Regular,Regular
/usr/share/fonts/lm/lmsansdemicond10-oblique.otf: Latin Modern Sans Demi Cond,LM Sans Demi Cond 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmsansdemicond10-regular.otf: Latin Modern Sans Demi Cond,LM Sans Demi Cond 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmsansquot8-boldoblique.otf: Latin Modern Sans Quotation,LM Sans Quot 8:style=8 Bold Oblique,Italic
/usr/share/fonts/lm/lmsansquot8-bold.otf: Latin Modern Sans Quotation,LM Sans Quot 8:style=8 Bold,Bold
/usr/share/fonts/lm/lmsansquot8-oblique.otf: Latin Modern Sans Quotation,LM Sans Quot 8:style=8 Oblique,Bold Italic
/usr/share/fonts/lm/lmsansquot8-regular.otf: Latin Modern Sans Quotation,LM Sans Quot 8:style=8 Regular,Regular
/usr/share/fonts/lm/lmsans10-boldoblique.otf: Latin Modern Sans,LM Sans 10:style=10 Bold Oblique,Bold Italic
/usr/share/fonts/lm/lmsans10-bold.otf: Latin Modern Sans,LM Sans 10:style=10 Bold,Bold
/usr/share/fonts/lm/lmsans10-oblique.otf: Latin Modern Sans,LM Sans 10:style=10 Oblique,Italic
/usr/share/fonts/lm/lmsans10-regular.otf: Latin Modern Sans,LM Sans 10:style=10 Regular,Regular
/usr/share/fonts/lm/lmsans12-oblique.otf: Latin Modern Sans,LM Sans 12:style=12 Oblique,Italic
/usr/share/fonts/lm/lmsans12-regular.otf: Latin Modern Sans,LM Sans 12:style=12 Regular,Regular
/usr/share/fonts/lm/lmsans17-oblique.otf: Latin Modern Sans,LM Sans 17:style=17 Oblique,Italic
/usr/share/fonts/lm/lmsans17-regular.otf: Latin Modern Sans,LM Sans 17:style=17 Regular,Regular
/usr/share/fonts/lm/lmsans8-oblique.otf: Latin Modern Sans,LM Sans 8:style=8 Oblique,Italic
/usr/share/fonts/lm/lmsans8-regular.otf: Latin Modern Sans,LM Sans 8:style=8 Regular,Regular
/usr/share/fonts/lm/lmsans9-oblique.otf: Latin Modern Sans,LM Sans 9:style=9 Oblique,Italic
/usr/share/fonts/lm/lmsans9-regular.otf: Latin Modern Sans,LM Sans 9:style=9 Regular,Regular
/usr/share/fonts/unifont/unifont.ttf: Unifont:style=Regular
/usr/share/fonts/unifont/unifont_upper.ttf: Unifont Upper:style=Regular

What font does the test uses on your system?

diff --git a/t/Object/Shaping.t b/t/Object/Shaping.t
index 67aea11f..51a5c2ab 100644
--- a/t/Object/Shaping.t
+++ b/t/Object/Shaping.t
@@ -81,6 +81,7 @@ sub comp
                goto FAIL if ($got->[$i] // '<undef>') ne ($exp->[$i] // '<undef>');
        }
        ok(1, $name);
+       diag(sprintf("font=%s", $w->font->name));
        return;

 FAIL:

Another option is that my Unifont is built differently than yours. My Unifont comes from https://kojipkgs.fedoraproject.org//packages/unifont/14.0.01/3.fc37/x86_64/unifont-14.0.01-3.fc37.x86_64.rpm. You can unpack it with "< unifont-14.0.01-3.fc37.x86_64.rpm rpm2cpio | cpio -id".

dk commented 1 year ago

Hi Petr,

I wanted to try your rpm but there are no fonts, only some binary utils and man pages? Could you possibly upload here your version of unifont files? Or, alternatively, try mine - here's the content of my /usr/share/fonts/truetype/unifont : http://karasik.eu.org/misc/unifont/

The "arabic ligation (glyphs) {/|}" test is completely missing from the output

It's not missing, it's only printing {/|} as an extra debug info when it fails. Number of tests is the same, just the name differ

number of tests and names of the tests change with fonts

that's okay, as this is for developer's debug only. If font=xxx is given then some heuristics are skipped and if the font doesn't support certain features, then the test is simply skipped too, instead of searching all fonts for one that can be used.

What font does the test uses on your system?

Droid Sans Fallback for high unicode and DejaVu Sans for all the other tests

I think your system has installed more fonts them mine. And some of yours probably takes preference over Unifont.

That's true, fc-list | wc gives 467 fonts, but no, they don't take over Unifont. If I add debug to comp(), the test uses Unifont alright:

dk@hp src/Prima> strace perl -Iblib/arch -I. t/Object/Shaping.t TEST font=Unifont 2>&1| grep -E 'ttf|otf|ttc|pfb|pfm|t1|afm'
access("/home/dk/.fonts/ttf/.uuid", F_OK) = 0
openat(AT_FDCWD, "/home/dk/.fonts/ttf/.uuid", O_RDONLY|O_CLOEXEC) = 9
newfstatat(AT_FDCWD, "/home/dk/.fonts/ttf", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
openat(AT_FDCWD, "/home/dk/.fonts/ttf", O_RDONLY|O_CLOEXEC) = 9
access("/usr/share/fonts/truetype/ttf-khmeros-core/.uuid", F_OK) = 0
openat(AT_FDCWD, "/usr/share/fonts/truetype/ttf-khmeros-core/.uuid", O_RDONLY|O_CLOEXEC) = 9
newfstatat(AT_FDCWD, "/usr/share/fonts/truetype/ttf-khmeros-core", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
openat(AT_FDCWD, "/usr/share/fonts/truetype/ttf-khmeros-core", O_RDONLY|O_CLOEXEC) = 9
openat(AT_FDCWD, "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", O_RDONLY) = 9
openat(AT_FDCWD, "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf", O_RDONLY) = 15
openat(AT_FDCWD, "/usr/share/fonts/truetype/unifont/unifont.ttf", O_RDONLY) = 3
ppisar commented 1 year ago

I'm sorry for the wrong link. It should have been https://kojipkgs.fedoraproject.org//packages/unifont/14.0.01/3.fc37/noarch/unifont-fonts-14.0.01-3.fc37.noarch.rpm.

I tried your fonts and they fail for me exactly as mine from Fedora.

If I enforce Droid Sans Fallback with the argument, then '(--no-fribidi) - arabic ligation (glyphs)' test, which fails for me with Unifont, is not performed. If I enforce DejaVu Sans, then the test is not performed. However, if I don't enforce any font and I uninstall Unifont, the test is performed, it passes, and reports that DejaVu Sans was used. If I install Unifont and enforce Unifont, then the test is performed and fails.

I'm not sure that the last open font in strace output means the that font is used by the test. For example for me it reports only /usr/share/fonts/google-noto-vf/NotoSans-VF.ttf, while the test insists on using a different font. I think fontconfig or whatever library loads the fonts has some kind of cache. Because more extended grep reveals:

openat(AT_FDCWD, "/usr/share/fonts/dejavu-sans-fonts", O_RDONLY|O_CLOEXEC) = 9
openat(AT_FDCWD, "/usr/lib/fontconfig/cache//221930ae9526a9cb8049af2916f03412-le64.cache-8", O_RDONLY|O_CLOEXEC) = 9
openat(AT_FDCWD, "/usr/share/fonts/fontawesome", O_RDONLY|O_CLOEXEC) = 9
openat(AT_FDCWD, "/usr/lib/fontconfig/cache//019629eead7fd8624feacc17e1c76e56-le64.cache-8", O_RDONLY|O_CLOEXEC) = 9
[...]
openat(AT_FDCWD, "/usr/share/fonts/google-noto-vf/NotoSans-VF.ttf", O_RDONLY) = 9
dk commented 1 year ago

Yes, I could get unifont.ttf font package , but that works just fine on my system. I would say that this is not the font to blame, but harfbuzz, which is the library that performs (among others) arabic ligation in absence of fribidi ( IIRC harfbuzz takes precedence over fribidi, but whether that is true or not is not relevant because there's --no-fribidi flag).

My /usr/include/harfbuzz/hb-version.h has HB_VERSION_STRING "2.7.4". Is yours a dev version?

If you have hb-shape, you can try this:

$ perl -CS -le 'print qq(\x{644}\x{627})' | xargs hb-shape ~/.fonts/ttf/unifont.ttf
[uniFEFB=0+512]

and that's a single-glyph ligature, a good result. A bad result would be a non-ligature, 2 glyphs, f.ex.this:

> perl -CS -le 'print qq(\x{627}\x{644})' | xargs hb-shape ~/.fonts/ttf/unifont.ttf
[uniFEDD=1+512|uniFE8D=0+512]
ppisar commented 1 year ago

I have harfbuzz 6.0.0. harfbuzz/hb-version.h also defines HB_VERSION_STRING as 6.0.0. It behaves like this:

$ perl -CS -le 'print qq(\x{644}\x{627})' | xargs hb-shape /usr/share/fonts/unifont/unifont.ttf 
[uniFE8E=1+512|uniFC3F=0+512]

While DejaVu Sans returns single glyph:

$ perl -CS -le 'print qq(\x{644}\x{627})' | xargs hb-shape /usr/share/fonts/dejavu-sans-fonts/DejaVuSans.ttf
[uniFEFB=0+1168]
ppisar commented 1 year ago

harfbuzz-4.0.0 is fine, harfbuzz-5.2.0 is broken. I will try to narrow down the version.

dk commented 1 year ago

Excellent! I'm suspecting that they might have changed api, so ligation requires some extra flags not available before v4.

ppisar commented 1 year ago

It changes between 4.3.0 and 4.4.0. Release notes https://github.com/harfbuzz/harfbuzz/releases/tag/4.4.0.

khaledhosny commented 1 year ago

This seems to be a HarfBuzz regressions, reported as https://github.com/harfbuzz/harfbuzz/issues/4042

ppisar commented 1 year ago

Thanks Khaled. I also came to the same harbuzz commit. If I revert it, all Prima tests pass again. Thanks Dmitry for debugging it. I'm closing this issue as I think it does not make sense to work around it in Prima test suite.

dk commented 1 year ago

Petr thank you for your persistense! Great job!