Re: [css3-fonts] simplifying font-variant-ligatures

Christopher Slye (2012-02-18 02:13):
> … the font attributes should convey features in high level, technology-agnostic terms, not with the lower level wiring of OpenType feature tags. The current draft follows this spirit well enough.

I still disagree. The current WD and ED has

            ‘common-ligatures’ ⇔ ‘liga’ := 1
         ‘no-common-ligatures’ ⇔ ‘liga’ := 0
     ‘discretionary-ligatures’ ⇔ ‘dlig’ := 1
  ‘no-discretionary-ligatures’ ⇔ ‘dlig’ := 0
        ‘historical-ligatures’ ⇔ ‘hlig’ := 1
     ‘no-historical-ligatures’ ⇔ ‘hlig’ := 0

John Daggett wants to change it to

            ‘common-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 0, ‘hlig’ = 0
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1, ‘hlig’ = 0
               ‘all-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1, ‘hlig’ = 1

and forgets, I guess, ‘none’ or ‘no-ligatures’. Other keywords for common combinations could be added (now or later). 

It probably merits discussion whether it should rather use default values like ‘normal’

            ‘common-ligatures’ ⇔ ‘liga’ := 1
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1
               ‘all-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1, ‘hlig’ = 1

> I think it's better to pretend that font-feature-settings doesn't exist and design the primary attributes to include and control font features as they should ideally be.

I agree, but “font features” to be controlled in this context should be abstracted from Open Type, because OT features are all but perfect. They are neither designed in a coherent manner nor with authors in focus. CSS properties and values should be both.

> I prefer to think of font-feature-settings as a way to have access to OpenType features that are too obscure or specialized to have a place among the regular font attributes (…).

Yes, or for rare combinations of features.

> You're worried about the current syntax being verbose, but your example
> seems unlikely because common-ligatures will be on by default,

Not necessarily: the initial value ‘normal’ relies on the default settings inside the font.

> They have the benefit of being switches directly associated with distinct categories (default, discretionary, historical).

These categories (or their names) are all but distinct.

> Also, common-ligatures is more likely to be enabled across sections of (…) text, but discretionary ligatures might (…) be better applied situationally, i.e. with a span.

That is

  :root {font-variant-ligatures: common-ligatures;}
  span  {font-variant-ligatures: discretionary-ligatures;}

instead of

  :root {font-variant-ligatures: common-ligatures
                       no-discretionary-ligatures
                          no-historical-ligatures;}
  span  {font-variant-ligatures: common-ligatures /* ‘no-…’?*/
                          discretionary-ligatures
                          no-historical-ligatures;}

(The current draft doesn’t seem to say whether features that are not set explicitly are inherited or fall back to their font-specific default, as in ‘normal’.)

> Your proposed syntax merges the two and blurs this distinction,

When or where would you want ‘dlig’ to be on, but not ‘liga’?

Would you like ‘additional-ligatures’ or ‘optional-ligatures’ better?

     ‘discretionary-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1, ‘hlig’ = 1
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1, ‘hlig’ = 0
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1, ‘hlig’ = i
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 1, ‘dlig’ = 1, ‘hlig’ = d
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 0, ‘dlig’ = 1, ‘hlig’ = 1
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 0, ‘dlig’ = 1, ‘hlig’ = 0
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 0, ‘dlig’ = 1, ‘hlig’ = i
     ‘discretionary-ligatures’ ⇔ ‘liga’ := 0, ‘dlig’ = 1, ‘hlig’ = d
     ‘discretionary-ligatures’ ⇔ ‘liga’ := i, ‘dlig’ = 1, ‘hlig’ = 1
     ‘discretionary-ligatures’ ⇔ ‘liga’ := i, ‘dlig’ = 1, ‘hlig’ = 0
     ‘discretionary-ligatures’ ⇔ ‘liga’ := i, ‘dlig’ = 1, ‘hlig’ = i
     ‘discretionary-ligatures’ ⇔ ‘liga’ := i, ‘dlig’ = 1, ‘hlig’ = d
     ‘discretionary-ligatures’ ⇔ ‘liga’ := d, ‘dlig’ = 1, ‘hlig’ = 1
     ‘discretionary-ligatures’ ⇔ ‘liga’ := d, ‘dlig’ = 1, ‘hlig’ = 0
     ‘discretionary-ligatures’ ⇔ ‘liga’ := d, ‘dlig’ = 1, ‘hlig’ = i
     ‘discretionary-ligatures’ ⇔ ‘liga’ := d, ‘dlig’ = 1, ‘hlig’ = d

Which one of the above would you prefer? (‘i’ means inherit, ‘d’ is font default.)

> and I think it would be more confusing to the average developer.

No, it wouldn’t, because the average (website) developer is not a font designer, too.

Received on Wednesday, 22 February 2012 20:28:50 UTC