https://bugs.winehq.org/show_bug.cgi?id=48447
Bug ID: 48447 Summary: GetUnicodeRanges() returned data is inaccurate Product: Wine Version: 5.0-rc5 Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: dwrite Assignee: wine-bugs@winehq.org Reporter: bunglehead@gmail.com Distribution: ---
Current GetUnicodeRanges() implementation returns ranges as specified by cmap, while some point might still fall on zero glyph, splitting ranges further or discarding some ranges. Windows takes that into account, and returns ranges that will tell exactly which points are covered with non-zero glyphs. We'll have to follow that, but it should most likely be disk-cached somehow, because iterating whole cmap every time is not very practical.
Once does correctly this data could be used for binary lookup in HasCharacter(), if it turns out not to be slower that looking up actual glyph id.
Test failures for that problem will entirely depend on the font, and could look like this:
--- font.c:3742: Test failed: L"DejaVu Sans" - L"ExtraLight": unexpected range count 181, expected 182. font.c:3742: Test failed: L"DejaVu Sans" - L"ExtraLight Oblique": unexpected range count 181, expected 182. ... font.c:3742: Test failed: L"DejaVu Sans Mono" - L"Oblique": unexpected range count 209, expected 210. font.c:3742: Test failed: L"DejaVu Sans Mono" - L"Bold": unexpected range count 252, expected 253. font.c:3742: Test failed: L"DejaVu Sans Mono" - L"Bold Oblique": unexpected range count 209, expected 210. ---
https://bugs.winehq.org/show_bug.cgi?id=48447
--- Comment #1 from Nikolay Sivov bunglehead@gmail.com --- Another issue specific to symbol fonts (in Windows nomenclature), GetUnicodeRanges() should return additional ranges that are not specified in cmap, but are assumed for symbols fonts - shifted by 0xf000, so for cmap containing [ch1,ch2] it will also return [0xf000 + ch1, 0xf000 + ch2].
https://bugs.winehq.org/show_bug.cgi?id=48447
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |minor