Fix symbol cmap handling
A while back we removed Apple Roman encoding support. This broke symbol fonts (Wingdings, etc) because those fonts come with two cmaps: 1) platform=1,encoding=0, aka Apple Roman, which maps identity, 2) platform=3,encoding=0, aka MS Symbol font Now, the reason the Apple Roman removal "broke" these fonts is obvious, and for the better: these fonts were mapping ASCII and other Latin chars to symbols. The reason the fonts didn't work anymore, however, is that we were mishandling the MS symbol-font cmaps. In their modern incarnation they are like regular non-symbol-font cmap that map PUA codepoints to symbols. We want to expose those as such. Hence, this change just removes the special-handling for that. Now, the reason this confusion happened, if I was to guess, is either that FreeType docs are wrong saying that FT_ENCODING_MS_SYMBOL is the "Microsoft Symbol encoding, used to encode mathematical symbols": http://www.kostis.net/charsets/symbol.htm or maybe it started that way, but turned into also mapping MS symbol- font cmaps, which is a completely different thing. At any rate, I don't know if there are any fonts that use this thing these days, but the code here didn't seem to produce charset for any font. By now I'm convinced that this change is the Right Thing to do. The MS Symbol thing was called AdobeSymbol in our code by the way. This fixes the much-reported bug that windings, etc are not usable with recent fontconfig: https://bugs.freedesktop.org/show_bug.cgi?id=58641 Now I see PUA mappings reported for Wingdings. This also fixes: Bug 48947 - Drop the non-Unicode cmap support gradually https://bugs.freedesktop.org/show_bug.cgi?id=48947 since the AdobeSymbol was the last non-Unicode cmap we were trying to parse (very incorrectly). Lots of code around this change can be simplified. I'll push those out (including removing the table itself) in subsequent changes.
This commit is contained in:
parent
eb5e89f817
commit
d6d5adeb79
|
@ -2206,7 +2206,7 @@ static const FcCharMap AdobeSymbol = {
|
||||||
|
|
||||||
static const FcFontDecode fcFontDecoders[] = {
|
static const FcFontDecode fcFontDecoders[] = {
|
||||||
{ ft_encoding_unicode, 0, (1 << 21) - 1 },
|
{ ft_encoding_unicode, 0, (1 << 21) - 1 },
|
||||||
{ ft_encoding_symbol, &AdobeSymbol, (1 << 16) - 1 },
|
{ ft_encoding_symbol, 0, (1 << 16) - 1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
|
#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
|
||||||
|
|
Loading…
Reference in New Issue