Re: [css3-fonts] simplifying font-variant-ligatures, proposal 2

John, I appreciate the revision, but I'm still left thinking that it doesn't improve what's already spec'd.

But recognizing that that's not a very helpful response, I'll take a little more time to consider the situation. I'll hope to comment more substantially early next week.

Meanwhile, I will be interested to see if anyone else has an opinion.

Thanks.  -Christopher


On Feb 22, 2012, at 9:22 PM, John Daggett wrote:

> Given the reaction to my original proposal for simplifying
> font-variant-ligatures, I'd like to propose a smaller set of changes,
> ones that hopefully cover the majority of use cases while making the
> syntax less verbose.
> 
> As noted previously, the current syntax is:
> 
>  font-variant-ligatures: normal | inherit | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> ]
> 
> where
> 
>  <common-lig-values>        = [ common-ligatures | no-common-ligatures ]
>  <discretionary-lig-values> = [ discretionary-ligatures | no-discretionary-ligatures ]
>  <historical-lig-values>    = [ historical-ligatures | no-historical-ligatures ]
> 
> OpenType defines certain features as "on by default" and this includes
> the common ligature feature 'liga'. So the property values here are not
> completely boolean properties, they are really tri-state with possible
> states being "use defaults", "explicitly on" or "explicitly off".  In
> the default 'font-variant-ligatures: normal' case, 'fi' ligatures will
> appear but discretionary ligatures such as 'st' and 'ct' ligatures won't
> (fonts can choose which ligatures are classified under which feature but
> these examples are a typical pattern).
> 
> Additionally, features can be enabled/disabled per-font via
> @font-face rules:
> 
>  @font-face {
>    font-family: DefaultText;
>    src: url(xxx.woff) format("woff");
>    font-variant: discretionary-ligatures;
>  }
> 
>  body { font-family: DefaultText; }
> 
>  /* override font-specific setting, common ligatures on by default */
>  span.special { font-variant-ligatures: no-discretionary-ligatures; }
> 
> I think we can eliminate a couple of these 'no-xxx' values by defining
> 'common-ligatures' to mean "base only" and have the other values
> (discretionary, historical) be additive:
> 
>  font-variant-ligatures: normal | inherit | no-ligatures | [ common-ligatures || discretionary-ligatures || historical-ligatures ]
> 
> In terms of OpenType features this would translate to:
> 
>  normal                  == use defaults, both OpenType and font-specific
>  no-ligatures            == liga=0, clig=0, dlig=0, hlig=0
>  common-ligatures        == liga=1, clig=1, dlig=0, hlig=0 *
>  discretionary-ligatures == dlig=1
>  historical-ligatures    == hlig=1
> 
>  * = (dlig/hlig) explicitly turned off when (discretionary-ligatures/historical-ligatures) 
>      not also listed
> 
> Note: I've added 'clig' == "contextual ligatures" to common-ligatures,
> moving it from 'contextual' in 'font-variant-alternates'.
> 
> Using the new syntax with the example above:
> 
>  /* override font-specific setting, enable only common ligatures explicitly */
>  span.special { font-variant-ligatures: common-ligatures; }
> 
> The only situation this wouldn't cover would be one where an
> author explicitly wants to disable common ligatures but wants to enable
> only historical ligatures (or only discretionary ligatures).
> 
> Regards,
> 
> John Daggett
> 

Received on Friday, 24 February 2012 20:59:56 UTC