[Fontconfig] matching multiple families in <alias> and <test>

Raimund Steger rs at mytum.de
Thu May 17 16:33:49 PDT 2012


Akira TAGOH wrote:
> On Wed, May 16, 2012 at 9:11 AM, Raimund Steger<rs at mytum.de>  wrote:
>> You mean comment #8 in that bug
>> ( https://bugs.freedesktop.org/show_bug.cgi?id=33644#c8 )? Well I think that
>> suggestion would be a different interpretation than what is currently
>> implemented.
>
> Yes. and actually it's not a suggestion but the real behavior on
> current implementation. it may works only on the limited conditions
> though.

Yeah, one could say that ;-)
For example, in the rule mentioned in that comment: --

   <test name="object" qual="all">
     <string>A</string>
     <string>B</string>
   </test>

-- I think the first value ("A") will be ignored, because only the last 
iteration of the while-loop in FcConfigMatchValueList() has the chance 
to set the return value. So the following snippet -- changed to use 
"style" to make the pattern have no fallback values with typical configs:

   <match target="pattern">
     <test name="style" qual="all">
       <string>Roman</string>
       <string>Bold</string>
     </test>
     <edit name="some_property">
       <string>some_value</string>
     </edit>
   </match>

will match (and apply "some_property") if called like this:

   FC_DEBUG=1 fc-match :style=Bold |grep some_property

but not if called like this:

   FC_DEBUG=1 fc-match :style=Roman |grep some_property

in both cases the pattern element contains a single value at the moment 
of the match, while the test contains two. Only the last value from the 
qual="all" test is effectively checked.

> [...]
> I'll think about it more though, I tend to think of getting rid of
> FcOpComma so far. if there are any use-cases that there are no
> workaround or any other reasonable suggestion, please let me know.
>

A part of me tends to agree (to remove FcOpComma syntax from <test>). 
Everything else, like new boolean ops or user-defined edit positions, 
although sounding neat, is just making things complicated.

At the moment, if users want an AND, they can write multiple <test>s. If 
they want an OR, they can write multiple <match>es. For anything more 
complex they can assign custom properties to use them later in the 
config. So basically I can't think of anything that cannot already be 
achieved.

However, there are probably a lot of existing users who have FcOpComma 
in their rules that accidentally works. So it could be trouble to switch 
that syntax off, and another part of me tends to not change anything 
(and endure future inquiries about that <alias> thing). Or maybe 
implement a warning as is also suggested in that bug.

In the end I think I'm fine with whatever solution you'll come up with...

Raimund


More information about the Fontconfig mailing list