[Fontconfig] fontconfig-2.8 Emmentaler-20 matching
Akira TAGOH
akira at tagoh.org
Thu May 31 00:56:42 PDT 2012
On Thu, May 31, 2012 at 3:01 PM, Werner LEMBERG <wl at gnu.org> wrote:
>
> [I'm forwarding this mail to the fontconfig list (with omissions),
> since it is indeed a problem IMHO]
>
>> [...] [I] found that fontconfig 2.8 no longer selects Emmentaler-20.
>>
>> I found that escaping the dash helps fc-match, but cannot get
>> GnomeCanvas' text method to do the same. I just dropped
>> emmentaler-20.otf in ~/.fonts and it's nicely in fc-list
>>
>> $ fc-scan ~/.fonts/emmentaler-20.otf
>> Pattern has 19 elts (size 32)
>> family: "Emmentaler-20"(s)
>> familylang: "en"(s)
>> style: "20"(s)
>> stylelang: "en"(s)
>> fullname: "Emmentaler-20"(s)
>> fullnamelang: "en"(s)
>> slant: 0(i)(s)
>> weight: 100(i)(s)
>> width: 100(i)(s)
>> foundry: "unknown"(s)
>> file: "/home/janneke/.fonts/emmentaler-20.otf"(s)
>> [...]
>
>> $ fc-match Emmentaler-20
>> DejaVuSans.ttf: "DejaVu Sans" "Book"
>
>> $ fc-match Emmentaler\-20
>> DejaVuSans.ttf: "DejaVu Sans" "Book"
>
>> $ fc-match Emmentaler\\-20
>> emmentaler-20.otf: "Emmentaler-20" "20"
>
>> $ fc-list | grep Emmentaler
>> Emmentaler\-20:style=20
>
> fontconfig's behaviour doesn't look right to me. Why gets a `-'
> character replaced with `\-' in the font name?
This is because of the limitation of FcNameParse() since it uses "-"
as a separator to guess the parameters. see what happened with it:
$ FC_DEBUG=4 fc-match Emmentaler-20
...
FcConfigSubstitute Pattern has 2 elts (size 16)
family: "Emmentaler"(s)
size: 20(f)(s)
...
Although this issue usually won't happens on the applications who uses
fontconfig, because they do as the following:
#include <fontconfig/fontconfig.h>
int
main(void)
{
FcPattern *pat, *match;
FcResult result;
FcInit();
pat = FcPatternCreate();
FcPatternAddString(pat, FC_FAMILY, "Emmentaler-20");
FcConfigSubstitute(NULL, pat, FcMatchPattern);
FcDefaultSubstitute(pat);
match = FcFontMatch(NULL, pat, &result);
FcPatternPrint(match);
if (match)
FcPatternDestroy(match);
FcPatternDestroy(pat);
FcFini();
return 0;
}
$ ./a.out
Pattern has 29 elts (size 32)
family: "Emmentaler-20"(s)
familylang: "en"(s)
style: "20"(s)
stylelang: "en"(s)
fullname: "Emmentaler-20"(s)
fullnamelang: "en"(s)
...
Additionally, there is
> a discrepancy between the output of fc-scan and fc-list, since the
> former doesn't show `\-'.
because the default format for fc-list uses FcNameUnparse(). if you
don't like it, you can specify the output format with -f for your
preference:
$ fc-list -f '%{?file{%{file}: }}%{-file{%{family}:style=%{style}}}\n'
...
/usr/share/fonts/lilypond/emmentaler-20.otf: Emmentaler-20:style=20
...
Hope that helps,
>
>
> Werner
> _______________________________________________
> Fontconfig mailing list
> Fontconfig at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/fontconfig
--
Akira TAGOH
More information about the Fontconfig
mailing list