Num piscar de olhos, parece-me um erro genuíno do fontconfig, uma vez que funciona correctamente aqui e tenho o DejaVu e o Unifont instalados:
$ fc-match Sans
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans"
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans "
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans 9"
DejaVuSans.ttf: "DejaVu Sans" "Book"
Mas, olhando mais de perto, podemos ver mais detalhes. Ainda pode haver um bug fontconfig em algum lugar, mas fc-match
aparentemente retorna um valor padrão quando não encontra nada. É apenas o padrão é DejaVu no meu sistema:
$ fc-match uni
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match unifont
Unifont.ttf: "unifont" "Medium"
$ fc-match 4e5zedrkbxp
DejaVuSans.ttf: "DejaVu Sans" "Book"
A página man fc-match(1)
confirma que o comando não faz correspondência exata, mas retorna o que acha que são as melhores correspondências. Você pode vê-los todos com -a
ou o mais conciso -s
:
$ fc-match -s uni # now it also finds unifont
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
n019003l.pfb: "Nimbus Sans L" "Regular"
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
FreeSans.ttf: "FreeSans" "нормален"
KanjiStrokeOrders.ttf: "KanjiStrokeOrders" "Medium"
Eadui.ttf: "Eadui" "Medium"
Unifont.ttf: "unifont" "Medium"
FreeSerif.ttf: "FreeSerif" "нормален"
cu12.pcf.gz: "ClearlyU" "Regular"
cu-pua12.pcf.gz: "ClearlyU PUA" "Regular"
10x20.pcf.gz: "Fixed" "Regular"
Em que você pode simplesmente dizer "dane-se" e adicionar outra pesquisa em cima dela para obter a correspondência da maneira esperada:
$ fc-match -s uni | grep -i uni
Unifont.ttf: "unifont" "Medium"
Mas, sua pergunta é sobre exatamente como é a correspondência. FcFontMatch(3)
e, mais ou menos, aproximadamente confirma que usa um valor padrão / configurado e definitivamente confirma que primeiro modifica o termo de pesquisa que você passou para ele. Para algo ainda mais profundo, você terá que inspecionar o código (começar com a função mencionada acima).