- From: Tavmjong via GitHub <sysbot+gh@w3.org>
- Date: Wed, 22 Aug 2018 13:47:50 +0000
- To: public-svg-issues@w3.org
Tavmjong has just created a new issue for https://github.com/w3c/svgwg: == Character counting in text 'x', 'y', 'dx', 'dy', and 'rotate' attributes. == SVG 1.1 dictates that 'x', 'y', etc. values apply to characters (as defined in XML) in the description of these attributes. See: https://www.w3.org/TR/SVG11/text.html#TextElement https://www.w3.org/TR/SVG11/text.html#TSpanElement SVG 1.1 also dictates that the number returned by getNumberOfChars() should be a count according to DOM 3. Non-rendered characters are to be included in the count. https://www.w3.org/TR/SVG11/text.html#InterfaceSVGTextContentElement DOM 3 defines strings as 16 bit units. Non-base plane Unicode points consist of two units. See: https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMString Normative text the SVGTextContentElement section appears to contradict that in the section discussing attribute value mapping in the <tspan> section in that the formal uses UTF-16 units while the latter uses XML characters. SVG 2 attempts to make some clarifications: An **'_addressable character'_** is defined which applies to _both_ mapping attribute values to characters and to character counting by getNumberOfChars(): https://www.w3.org/TR/SVG2/text.html#Definitions Addressable characters are counted in units of UTF-16 code units and after white-space collapsing. They do not include characters in elements with 'display' value of 'none'. https://www.w3.org/TR/SVG2/text.html#Definitions Both these conditions seem to be a change from SVG 1.1 with respect to attribute value mapping. https://www.w3.org/TR/SVG2/text.html#TSpanNotes https://www.w3.org/TR/SVG2/text.html#InterfaceSVGTextContentElement **Tests** Test of UTF-16 code point counting: http://tavmjong.free.fr/SVG/positioning-001.svg Firefox 61 passes this test, Edge 15, Chrome 50/68, Android 5, iOS 8.3 fail. The latter do mapping by Unicode code points. Firefox and Chrome (only ones tested) do report the correct number of characters from getNumberOfChars() (see JavaScript console output). I think most developers would expect mapping to be by Unicode code points and propose that we ask Firefox to switch and change the spec. Test of effect of 'display:none': http://tavmjong.free.fr/SVG/positioning-002.svg Firefox 61 fails this test (as does Inkscape which doesn't handle 'display:none'). Edge 15, Chrome 50/68, Android 5, iOS 8.3 pass. Firefox includes characters in an element with 'display:none' in the count. I believe Firefox does the right thing here. The mapping of values in an attribute shouldn't depend on a CSS value that can be changed at whim. However, as Firefox is the odd one out, it might be more prudent to follow the behavior of the other browsers and the spec as currently written. Please view or discuss this issue at https://github.com/w3c/svgwg/issues/537 using your GitHub account
Received on Wednesday, 22 August 2018 13:47:51 UTC