[Fontconfig] strict check for object modification

Akira TAGOH akira at tagoh.org
Wed Aug 15 00:29:41 PDT 2012


On Wed, Aug 15, 2012 at 7:11 AM, Raimund Steger <rs at mytum.de> wrote:
> But why would it be so important to recognize a difference here?

Because something added by rules in target="pattern" might be an error
and may be not what they expected. propagating including them is
actually the side-effects to reflect something in the initial pattern
to the result. it will causes a trouble, particularly if one expects
to apply something for the certain conditions. for example, the
following rule expects to enable the embedded bitmap when matching the
font A. which is actually wrong usage and always enable it as long as
the font A is included in the pattern but the result:

<match target="pattern">
  <test name="family">
    <string>A</string>
  </test>
  <edit name="embeddedbitmap">
    <bool>true</bool>
  </edit>
</match>

We have no way to detect the kind of this error so far and if one do
test only what they expect, they will miss an opportunity to see their
mistake.

> To clarify, we're actually talking about two distinct questions:
>
> (1) Whether fontconfig should restrict the properties that can be
>     edited in patterns
>
>   (1a) for builtin properties that are not used by the matcher
>
>   (1b) for custom properties

(1b) is out of the scope here since I added the user-defined objects
in target="pattern". it can be referred among rules. hmm, all of the
built-in objects may possibly be referred too though. but then, if we
are about to fix the above side-effects, I'm not quite sure if it's
really useful.

> I use (1b) extensively in my configuration to pass information between rules
> before the match. I'm surely not the only guy on the planet who does this.
> Now such properties don't necessarily need to be passed on to the result,
> but it makes testing the rules with fc-match easier, so I don't see the case
> for (2) either.

Okay, so do you have any example for objects not listing in the
target="pattern" and you can't do it in target="font" ?

> Restricting (2) also has the potential to make the implementation of
> FcFontRenderPrepare more complicated, because properties like
> 'pixelsize' will still need to be passed on. It also will make it impossible
> for the user to control things like the aforementioned 'rgba' from font
> descriptors, i. e. 'xterm -bg gray -fa mono:rgba=rgb' would be a thing of
> the past.

I see the needs for such situation. as I mentioned the above, this
proposal is basically to avoid an error in the rule but to prevent
something added to the pattern by the users or applications.
having said that we might miss the way to test something from the rule
then. that looks like a trade-off really. but instead, we may get the
full-control with the initial pattern. i.e. no need to write rules,
might possibly do everything from fc-match.

FWIW I tend to feel odd to give a FcPattern to FcConfigSubstitute()
with mixing the expectation and the options for rendering. isn't it
better giving a separate FcPattern or new structure for the rendering
options to FcFontRenderPrepare() and/or FcFontMatch and so on? so we
can simply stop propagating the pattern to the result and apply the
rendering options to the result at the end.

-- 
Akira TAGOH


More information about the Fontconfig mailing list