- From: Christoph Päper <christoph.paeper@crissov.de>
- Date: Thu, 10 May 2012 17:02:19 +0200
- To: www-style list <www-style@w3.org>
The name of the property currently called ‘font-variant-position’ is already noted as an issue. I’d like to support that and extend it. The sub-properties of ‘font-variant’ should uniformly describe either what types of characters they are applied to or what effect they have on characters they are applied to.
Current name Applies to Effect
‘font-variant-position’ all chars glyph substitution or synthesis
‘font-variant-ligatures’ some char pairs glyph substitution
‘font-variant-caps’ lowercase chars glyph substitution or synthesis
… ‘all-*’ bicameral chars glyph substitution or synthesis
… ‘unicase’ bicameral chars glyph substitution
… ‘titling-*’ uppercase chars glyph substitution
‘font-variant-numeric’ digits glyph substitution
… ‘frac’ digits + solidus glyph substitution or composition
‘font-variant-alternates’ all possible[1] glyph substitution
… ‘contextual’ some char pairs glyph substitution
… ‘swash’ uppercase[2] glyph substitution
… ‘ornament’ bullet glyph substitution
… ‘annotation’ digits mostly glyph substitution
‘font-variant-east-asian’ some sinograms glyph substitution
… ‘ruby’ syllabograms glyph substitution
[1] ‘stylistic’, ‘styleset’ and ‘character-variant’ may apply to any character or character sequence and require ‘@font-feature-values’. ‘historical-forms’ may apply to any character, too, but is predefined in the font.
[2] Swashes mostly apply to initial uppercase, but also initial and final lowercase or caseless, and also medial, especially with ascender or descender.
You see that …
— the sub-/superscript property is the only one that applies to every single character. The other properties either just apply to a subset (and may need to synthesize) or it’s up to the font which characters are affected in which combination. I already wrote in my last mail that I think it shouldn’t be used with HTML’s ‘sub’ and ‘sup’ elements, but with one of their ancestors.
— sometimes it depends on the value which type of characters a property applies to.
Basing properties on affected characters would yield something like this:
‘font-variant-position’: normal | auto | none /* ‘init’, ‘fina’ … */
‘font-variant-initial’: normal | auto | swash || <feature-value-name>#
‘font-variant-medial’: /* ditto */
‘font-variant-final’: /* ditto */
‘font-variant-free’: normal | auto | annotation || ornament || <feature-value-name>#
‘font-variant-case’: normal | small-caps | petite-caps | unicase | titling
‘font-variant-cased’ or /* may include digits */
‘font-variant-bicameral’: normal | small-caps | petite-caps | unicase
‘font-variant-lower’: normal | small-caps | petite-caps /* fall back to each other */
‘font-variant-upper’: normal | small-caps | petite-caps | titling
/* … | swash | <feature-value-name># */
‘font-variant-punctuation’: normal | [titling || <feature-valuename>]#
‘font-variant-parentheses’: normal | auto /* grow to enclosed line-height */
‘font-variant-digit’: normal | [ [proportional|monospace] || [uppercase|lowercase] ]
[, slashed-zero ]? [, ordinal ]? [, annotation ]?
‘font-variant-index’: normal | auto | sub | super /* depends on markup + magic */
‘font-variant-subscript’: normal | alternate /* depends on ‘vertical-align’ */
‘font-variant-superscript’: normal | alternate /* depends on ‘vertical-align’ */
‘font-variant-bullet’: normal | auto | <feature-value-name>#
/* Level 4, partially AAT, may conflict with ‘@text-transform’:
‘font-variant-quotes’: normal | auto "'it's'" → “‘it’s’”, reuse ‘quotes’ property
‘font-variant-dashes’: normal | auto --- -- -1 → — – -1
‘font-variant-arrows’: normal | auto => -> → ⇒ →
‘font-variant-dots’: normal | auto ... → …
‘font-variant-spaces’: normal | auto non-breaking, thin, french …
‘font-variant-emoticons’: normal | auto :-) → ☺
‘font-variant-operators’: normal | auto * / - =< → × ÷ - ≤
‘font-variant-math’: normal | can-of-worms
*/
‘font-variant-east-asian’ or /* not ‘font-varant-ideograph’ */
‘font-variant-sinogram’: normal /* trust Unicode */
| auto /* trust content language */
| [ simplified | complex /* depend on font */
| korean | vietnamese
| [traditional | reformed]? chinese
| [1978|1983|1990|2004]? japanese /* jisXY */
]# /* preference and fallback order */
‘font-variant-syllabogram’: normal | annotation /* depends on markup */
or
‘font-variant-ruby’ or
‘font-variant-annotation’: normal | alternate /* depends on ‘display’ */
‘font-variant-digraph’ or
‘font-variant-sequence’: normal | separate /* fi → fi */ | [contextual]? [alternates]?
[required || common || discretionary || historical]? ligatures
‘font-variant-fraction’: normal | diagonal | stacked /* fall back to each other */
‘font-variant-style’: normal | <feature-value-name>#
Every occurrence of ‘alternate’ may be replaced by ‘auto’.
Basing properties on their effect would look simple property-wise, but horrible otherwise:
‘font-variant-substitution’: /* try your imagination */
‘font-variant-synthesis’: subscript || superscript || [all]? [small-caps|petite-caps]
‘font-variant-composition’: diagonal-fraction | stacked-fraction
I really hate to suggest (again) a major overhaul of this module, because the editor has done a great job introducing and illustrating the concepts and collecting what Open Type offers, but I firmly believe the structure is not well enough thought out – or systematic enough – for authors and real usecases.
As far as I know current implementations are limited to ‘font-feature-settings’, so it’s not too late to change, although it soon may be. Therefore now is the time!
Received on Thursday, 10 May 2012 15:02:32 UTC