RE: [css3-writing-modes] inconsistent handling of 'Tr' codepoints in 'text-orientation'

I think we should keep the current definition.

First of all, the inconsistency you mentioned is, as you also mentioned, very subtle. They are hardly, or oftentimes not at all, noticeable.

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. 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.

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.

Given this text does not add any complexity to implementers who want to render all Tr as U, I think keeping as is doesn't do any bad to anyone, and helps some different architectures.

/koji

-----Original Message-----
From: John Daggett [mailto:jdaggett@mozilla.com] 
Sent: Friday, September 20, 2013 4:19 PM
To: W3C Style
Subject: [css3-writing-modes] inconsistent handling of 'Tr' codepoints in 'text-orientation'


The UTR50 spec defines a Vertical Orientation property [1] for codepoints in Unicode.  Codepoints marked 'U' are upright by default and those marked 'R' are rotated by default.  Those marked 'Tu' or 'Tr' require some form of alternate in the vertical case.

In the definition of the 'text-orientation' property, the CSS3 Writing Modes spec defines this handling for characters with a vertical orientation property of 'Tr'.

http://dev.w3.org/csswg/css-writing-modes/#vertical-orientations


# For Tr characters, which are intended to be either transformed or # rotated sideways, the UA may assume that appropriate glyphs for # upright typesetting are given in the font and render them upright; # alternately it may check for such glyphs first, and fall back to # typesetting them sideways if the appropriate glyphs are missing. 

This defines inconsistent behavior across user agents.  User agents that just assume the font has vertical alternates for these codepoints will render differently from user agents that use the alternate behavior of checking the font and doing a manual rotation.

The "alternate" behavior seems implicitly better at first glance but it's in fact a very poor tradeoff for the inconsistency it introduces.
As I said during similar discussions related to this property, correctly checking substitutions like this is tedious work for implementations. Nat McCully from Adobe made this same point when we met in Kyoto two years ago.

There are only roughly 50 of these 'Tr' codepoints in Unicode, mostly pairs of brackets and a sprinkling of ideographic punctuation characters.  For the most part, fonts that support these characters provide vertical alternates for them. So specifying this behavior is not really going to be of much use to authors in practice. For the fonts I looked at, this only simulates fallback for one or two
codepoints:

Kozuka Mincho Pr6N
3030 cid12218 vert: [] WAVY DASH
ff1b cid00640 vert: [] FULLWIDTH SEMICOLON

MS Mincho:
ff1b uniFF1B vert: [] FULLWIDTH SEMICOLON

For CSS, I think we should keep it simple - for the codepoints marked 'U', 'Tu' or 'Tr', set the glyph upright and enable vertical alternates, without allowing tricky fallback schemes that expose authors to inconsistencies across user agents or that require complex fallback behavior.

Regards,

John Daggett

[1] http://www.unicode.org/Public/vertical/revision-11/VerticalOrientation-11.html


Font data for 'Tr' codepoints in two common Japanese fonts.  When a given codepoint is supported by the font, the character map glyph id is in column 2 and the vertical alternate glyph id is in column 4.

Kozuka Mincho Pr6N (supports Adobe Japan1-6 glyph set, publishing industry standard set):
=========================================================================================

Not supported by font:
2329 LEFT-POINTING ANGLE BRACKET
232A RIGHT-POINTING ANGLE BRACKET
301A LEFT WHITE SQUARE BRACKET
301B RIGHT WHITE SQUARE BRACKET
301E DOUBLE PRIME QUOTATION MARK
FE59 SMALL LEFT PARENTHESIS
FE5A SMALL RIGHT PARENTHESIS
FE5B SMALL LEFT CURLY BRACKET
FE5C SMALL RIGHT CURLY BRACKET
FE5D SMALL LEFT TORTOISE SHELL BRACKET
FE5E SMALL RIGHT TORTOISE SHELL BRACKET

Supported by font:
3008 cid00682 vert: [cid07907] LEFT ANGLE BRACKET
3009 cid00683 vert: [cid07908] RIGHT ANGLE BRACKET 300a cid00684 vert: [cid07909] LEFT DOUBLE ANGLE BRACKET 300b cid00685 vert: [cid07910] RIGHT DOUBLE ANGLE BRACKET 300c cid00686 vert: [cid07911] LEFT CORNER BRACKET 300d cid00687 vert: [cid07912] RIGHT CORNER BRACKET 300e cid00688 vert: [cid07913] LEFT WHITE CORNER BRACKET 300f cid00689 vert: [cid07914] RIGHT WHITE CORNER BRACKET
3010 cid00690 vert: [cid07915] LEFT BLACK LENTICULAR BRACKET
3011 cid00691 vert: [cid07916] RIGHT BLACK LENTICULAR BRACKET
3014 cid00676 vert: [cid07901] LEFT TORTOISE SHELL BRACKET
3015 cid00677 vert: [cid07902] RIGHT TORTOISE SHELL BRACKET
3016 cid16197 vert: [cid16329] LEFT WHITE LENTICULAR BRACKET
3017 cid16198 vert: [cid16330] RIGHT WHITE LENTICULAR BRACKET
3018 cid12129 vert: [cid12139] LEFT WHITE TORTOISE SHELL BRACKET
3019 cid12130 vert: [cid12140] RIGHT WHITE TORTOISE SHELL BRACKET 301c cid00665 vert: [cid07894] WAVE DASH 301d cid07608 vert: [cid07956] REVERSED DOUBLE PRIME QUOTATION MARK 301f cid07609 vert: [cid07957] LOW DOUBLE PRIME QUOTATION MARK
3030 cid12218 vert: [] WAVY DASH
30a0 cid16205 vert: [cid16331] KATAKANA-HIRAGANA DOUBLE HYPHEN 30fc cid00660 vert: [cid07891] KATAKANA-HIRAGANA PROLONGED SOUND MARK
ff08 cid00674 vert: [cid07899] FULLWIDTH LEFT PARENTHESIS
ff09 cid00675 vert: [cid07900] FULLWIDTH RIGHT PARENTHESIS ff1a cid00639 vert: [cid12101] FULLWIDTH COLON ff1b cid00640 vert: [] FULLWIDTH SEMICOLON ff3b cid00678 vert: [cid07903] FULLWIDTH LEFT SQUARE BRACKET ff3d cid00679 vert: [cid07904] FULLWIDTH RIGHT SQUARE BRACKET ff3f cid00650 vert: [cid07890] FULLWIDTH LOW LINE ff5b cid00680 vert: [cid07905] FULLWIDTH LEFT CURLY BRACKET ff5c cid00667 vert: [cid07896] FULLWIDTH VERTICAL LINE ff5d cid00681 vert: [cid07906] FULLWIDTH RIGHT CURLY BRACKET ff5e cid00665 vert: [cid07894] FULLWIDTH TILDE ff5f cid12131 vert: [cid12141] FULLWIDTH LEFT WHITE PARENTHESIS
ff60 cid12132 vert: [cid12142] FULLWIDTH RIGHT WHITE PARENTHESIS
ffe3 cid00649 vert: [cid07889] FULLWIDTH MACRON

MS Mincho (ancient and honorable sole Windows Japanese serif font):
===================================================================

Not supported by font:
2329 LEFT-POINTING ANGLE BRACKET
232A RIGHT-POINTING ANGLE BRACKET
FE59 SMALL LEFT PARENTHESIS
FE5A SMALL RIGHT PARENTHESIS
FE5B SMALL LEFT CURLY BRACKET
FE5C SMALL RIGHT CURLY BRACKET
FE5D SMALL LEFT TORTOISE SHELL BRACKET
FE5E SMALL RIGHT TORTOISE SHELL BRACKET

Supported by font:
3008 uni3008 vert: [glyph18639] LEFT ANGLE BRACKET
3009 uni3009 vert: [glyph18640] RIGHT ANGLE BRACKET 300a uni300A vert: [glyph18641] LEFT DOUBLE ANGLE BRACKET 300b uni300B vert: [glyph18642] RIGHT DOUBLE ANGLE BRACKET 300c uni300C vert: [glyph18643] LEFT CORNER BRACKET 300d uni300D vert: [glyph18644] RIGHT CORNER BRACKET 300e uni300E vert: [glyph18645] LEFT WHITE CORNER BRACKET 300f uni300F vert: [glyph18646] RIGHT WHITE CORNER BRACKET
3010 uni3010 vert: [glyph18647] LEFT BLACK LENTICULAR BRACKET
3011 uni3011 vert: [glyph18648] RIGHT BLACK LENTICULAR BRACKET
3014 uni3014 vert: [glyph18650] LEFT TORTOISE SHELL BRACKET
3015 uni3015 vert: [glyph18651] RIGHT TORTOISE SHELL BRACKET
3016 uni3016 vert: [glyph18652] LEFT WHITE LENTICULAR BRACKET
3017 uni3017 vert: [glyph18653] RIGHT WHITE LENTICULAR BRACKET
3018 uni3018 vert: [glyph18654] LEFT WHITE TORTOISE SHELL BRACKET
3019 uni3019 vert: [glyph18655] RIGHT WHITE TORTOISE SHELL BRACKET 301a uni301A vert: [glyph18656] LEFT WHITE SQUARE BRACKET 301b uni301B vert: [glyph18657] RIGHT WHITE SQUARE BRACKET 301c uni301C vert: [glyph18658] WAVE DASH 301d uni301D vert: [glyph18659] REVERSED DOUBLE PRIME QUOTATION MARK 301e uni301E vert: [glyph18660] DOUBLE PRIME QUOTATION MARK 301f uni301F vert: [glyph18661] LOW DOUBLE PRIME QUOTATION MARK
3030 uni3030 vert: [glyph18662] WAVY DASH
30a0 uni30A0 vert: [glyph18675] KATAKANA-HIRAGANA DOUBLE HYPHEN 30fc uni30FC vert: [glyph18688] KATAKANA-HIRAGANA PROLONGED SOUND MARK
ff08 uniFF08 vert: [glyph18809] FULLWIDTH LEFT PARENTHESIS
ff09 uniFF09 vert: [glyph18810] FULLWIDTH RIGHT PARENTHESIS ff1a uniFF1A vert: [glyph18813] FULLWIDTH COLON ff1b uniFF1B vert: [] FULLWIDTH SEMICOLON ff3b uniFF3B vert: [glyph18815] FULLWIDTH LEFT SQUARE BRACKET ff3d uniFF3D vert: [glyph18816] FULLWIDTH RIGHT SQUARE BRACKET ff3f uniFF3F vert: [glyph18817] FULLWIDTH LOW LINE ff5b uniFF5B vert: [glyph18818] FULLWIDTH LEFT CURLY BRACKET ff5c uniFF5C vert: [glyph18819] FULLWIDTH VERTICAL LINE ff5d uniFF5D vert: [glyph18820] FULLWIDTH RIGHT CURLY BRACKET ff5e uniFF5E vert: [glyph18821] FULLWIDTH TILDE ff5f uniFF5F vert: [glyph18822] FULLWIDTH LEFT WHITE PARENTHESIS
ff60 uniFF60 vert: [glyph18823] FULLWIDTH RIGHT WHITE PARENTHESIS
ffe3 uniFFE3 vert: [glyph18824] FULLWIDTH MACRON

Received on Monday, 23 September 2013 19:36:59 UTC