<div dir="auto"><div>Hi,<div dir="auto"><br></div><div dir="auto">Some variable fonts supports multiple weights and fontconfig returns a weight property in Range as the base pattern which is a sort of the virtual entry and has "true" in variable property. If you want to traverse all the fonts patterns and do something in the own way, you have to use FcPatternGetRange in such case. otherwise fontconfig returns a proper pattern according to the request (with FcFontMatch). </div><div dir="auto"><br></div><div dir="auto">Hope that helps,</div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2022年1月3日(月) 11:04 Sean Whitton <<a href="mailto:spwhitton@spwhitton.name" target="_blank" rel="noreferrer">spwhitton@spwhitton.name</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[re-send; looks like the list silently drops mail from non-subscribers]<br>
<br>
Hello,<br>
<br>
Emacs is crashing[1] when Inconsolata-VariableFont_wdth,wght.ttf[2] is<br>
installed and I'm trying to understand why.  This is what I know.  We<br>
call FcFontList to obtain an FcFontSet, and then for each FcPattern in<br>
that list we produce a Lisp vector containing the attributes of the<br>
font, and that goes into the Emacs-specific font selection code.  In<br>
particular, in order to populate the weight field in that vector, we<br>
call FcPatternGetInteger on the pattern, passing FC_WEIGHT as the second<br>
argument.  For most fonts this yields an integer representing the<br>
weight.<br>
<br>
When Inconsolata-VariableFont_wdth,wght.ttf is installed, the FcFontSet<br>
contains multiple FcPatterns corresponding to entries in that file.  For<br>
most of these, FcPatternGetInteger with FC_WEIGHT yields an integer.<br>
But for some of them, it does not; FcPatternGetInteger (and<br>
FcPatternGetDouble) do not return the success value FcResultMatch.<br>
Emacs's font code assumes that there is a weight associated to every<br>
font, and so there is a crash.<br>
<br>
One option to fix this is just to skip over entries in the FcFontSet for<br>
which FcPatternGetInteger is unable to return a weight.  But is that the<br>
correct thing to do?  I don't really understand these multi-weight .ttf<br>
files -- what might it mean if entries in them do not seem to have a<br>
weight at all?<br>
<br>
Many thanks!<br>
<br>
[1]  <a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52888" rel="noreferrer noreferrer noreferrer" target="_blank">https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52888</a><br>
[2]  <a href="https://github.com/googlefonts/Inconsolata/tree/main/fonts/variable" rel="noreferrer noreferrer noreferrer" target="_blank">https://github.com/googlefonts/Inconsolata/tree/main/fonts/variable</a><br>
<br>
-- <br>
Sean Whitton<br>
</blockquote></div></div></div>