- From: John Daggett <jdaggett@mozilla.com>
- Date: Mon, 23 Sep 2013 21:57:31 -0700 (PDT)
- To: Koji Ishii <kojiishi@gluesoft.co.jp>
- Cc: W3C Style <www-style@w3.org>
Koji Ishii wrote: > First of all, the inconsistency you mentioned is, as you also > mentioned, very subtle. They are hardly, or oftentimes not at all, > noticeable. Um, if the behavior only affects one or two codepoints for most fonts in actual usage, then allowing variations in implementations doesn't make sense from a spec perspective. Character properties are the domain of Unicode. In this context, the 'Tr' value of the "Vertical Orientation" character property is fine, since it describes a visual distinction that can be made between 'Tu' and 'Tr' codepoints. In the 'Tu' case, a different alternate design is required, in the 'Tr' case a simple rotation will suffice. But how text layout is done with actual fonts on the web is really the domain of CSS, not of Unicode. In the case of text orientation, CSS should be defining consistent, normative behavior for text display, the display of 'Tu' and 'Tr' codepoints should be consistent and not vary across user agents. For the very small number of 'Tr' codepoints that lack vertical alternates in fonts, it doesn't make sense to have optional behavior since for a given piece of content only one behavior will be considered "correct" by an author. Optional behavior makes sense in areas like justification or hyphenation where user agents can improve on baseline behavior that is already "correct". That's simply not the case for text orientation. > Second about implementations, it depends on what you use for the > underlying engine. I understand that harfbuzz as of today does not > have such mechanism and both you and Nat are right on that point, > but developers in Japan say it's not that hard to add such feature > if desired. OpenType layout is done with a *set* of features, not simply single, individual features. Yes, I've seen the "easy" implementation code which is map character to default glyph, then dig through the lookups to see whether 'vert' implements a mapping for that glyph. But that ignores the possible interactions of other features, so it's only half-right. But the main problem is that you're introducing unnecessary complexity with a performance impact that only aids in rendering a *very* small number of characters. For these cases it's just simpler if authors explicitly declare the text orientation by setting 'text-orientation' appropriately. Authors are going to need to do this already to deal with codepoints for which the UTR50 classification differs from their content (e.g. the copyright sign within rotated Latin text runs, since the copyright sign is classified as 'U', upright). > I also heard from one shaping engine implementer wishing to > implement Tr as UTR#50 defines. If underlying engine follows the > UTR#50 definition, it'd be even more troublesome to ignore UTR#50 > and follow CSS. I'm various curious to understand *why* an implementer would feel this way, I think you need to explain the "why" of this case. If fonts generally support vertical alternates for nearly all the 'Tr' codepoints, why is it necessary to add conditional logic to handle the handful of codepoints that lack these alternates? In the context of the web platform where support of advanced font technologies is standard and fonts contain vertical alternates accessed via features, it doesn't seem to make much sense. > Lastly, we didn't have this text in old versions of our spec, but > some members of UTC raised a concern on this specific part and this > text was added in response to that. I understand the concern but I think that needs to be tempered by actual real-world usage. Given that OpenType support of vertical alternates is standard behavior in modern CJK fonts, I don't think explicit fallback is required. I should also add here that I think eventually we'll need a rule that allows authors to override the default orientation. This will allow authors to define explicit defaults for characters based on the existing expectations within their content: @vertical-text-orientation { /* modifications to UTR50 defaults */ upright: u+20:24f; /* Latin upright by default */ upright: u+370:3FF; /* Greek upright by default rotated: u+3030; /* always rotate the wavy dash */ } This allows, for example, existing JIS-based workflows to smoothly integrate with CSS without the need to use markup to explicitly set text-orientation depending upon content. This isn't something for this level obviously but I think this is a better, long-term solution to dealing with orientation problems. Regards, John Daggett
Received on Tuesday, 24 September 2013 04:57:58 UTC