- From: Paul LeBeau <paul.lebeau@gmail.com>
- Date: Mon, 27 Jan 2014 21:32:50 +1300
- To: Chris Lilley <chris@w3.org>
- Cc: www-svg <www-svg@w3.org>
- Message-ID: <CACfsppA+yTWxBY6Cd9y8zULg6pOjd2EekAXZ2auT-C1wB-TzSw@mail.gmail.com>
Thanks Chris
Ah yes. Thanks for finding my error. I forgot that there was a definition
of percentage in the CSS spec. I was getting distracted by the explicit
definition in the SVG spec.
Paul
On 27 January 2014 19:59, Chris Lilley <chris@w3.org> wrote:
> Hello Paul,
>
> Monday, January 27, 2014, 6:03:16 AM, you wrote:
>
> > So it turns out that Adobe InDesign - before SVG export was removed
> > post-CS3 - generated files with rgb() component values that are
> > floats rather than integers. I discovered this after a user of my
> > rendering library reported a rendering "bug".
> >
>
> > After experimenting, I see that all three of Chrome, FF and IE
> > allow float values in percentage components,
>
> Yes. As per the CSS spec.
>
> > but not normal components.
>
> Again, yes.
>
> > In the following test file, the first rect is displayed, but not the
> second.
>
>
> > <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> > <svg xmlns="http://www.w3.org/2000/svg" version="1.1"
> > width="100%" height="100%"
> > viewBox="0 0 200 200">
>
> >
> > <!-- Test float values in rgb() colour declarations.
> > The Adobe InDesign SVG export filter (present in CS3 and earlier)
> generated
> > these erroneous type of values. -->
> > <rect x="50" y="50" width="50" height="80" fill="rgb(100.5%,-4%,
> 33.3%)" />
> > <rect x="100" y="50" width="50" height="80" fill="rgb(255, 0, 85.3)" />
> >
> > <text x="100" y="160" text-anchor="middle" font-size="8">Accept
> > bad Adobe InDesign colour declarations</text>
> > </svg>
>
>
> > How did it come about that the browsers all support floats in
> > percentages?
>
> Because they all follow the relevant specifications.
>
> "SVG supports all of the syntax alternatives for <color> defined in
> CSS2 syntax and basic data types ([CSS2], section 4.3.6), with the
> exception that SVG allows an expanded list of recognized color
> keywords names."
> www.w3.org/TR/SVG11/types.html#DataTypeColor
>
> "The format of an RGB value in the functional notation is 'rgb('
> followed by a comma-separated list of three numerical values (either
> three integer values or three percentage values) followed by ')'.
> The integer value 255 corresponds to 100%, and to F or FF in the
> hexadecimal notation: rgb(255,255,255) = rgb(100%,100%,100%) = #FFF.
> Whitespace characters are allowed around the numerical values. "
> http://www.w3.org/TR/2008/REC-CSS2-20080411/syndata.html#color-units
>
> "4.3.3 Percentages
>
> The format of a percentage value (denoted by <percentage> in this
> specification) is an optional sign character ('+' or '-', with '+'
> being the default) immediately followed by a <number> immediately
> followed by '%'."
>
> http://www.w3.org/TR/2008/REC-CSS2-20080411/syndata.html#percentage-units
>
> "<number> (real number value): The specification of real number
> values is different for property values than for XML attribute
> values.
>
> CSS2 [CSS2] states that a property value which is a <number> is
> specified in decimal notation (i.e., a <decimal-number>), which
> consists of either an <integer>, or an optional sign character
> followed by zero or more digits followed by a dot (.) followed by
> one or more digits. Thus, for conformance with CSS2, any property
> in SVG which accepts <number> values is specified in decimal
> notation only."
> http://www.w3.org/TR/2003/REC-SVG11-20030114/types.html
>
> "Some value types may have integer values (denoted by <integer>) or
> real number values (denoted by <number>). Real numbers and integers
> are specified in decimal notation only. An <integer> consists of one
> or more digits "0" to "9". A <number> can either be an <integer>, or
> it can be zero or more digits followed by a dot (.) followed by one
> or more digits. Both integers and real numbers may be preceded by a
> "-" or "+" to indicate the sign."
> http://www.w3.org/TR/2008/REC-CSS2-20080411/syndata.html#q13
>
> > All versions of the spec, including SVG2, specify that
> > they should be integers. Is it just a case of choosing to be
> > permissive? If so, why do non-percent components not get the same
> treatment?
>
> Huh, that looks like an error that crept in during SVG 1.1 second
> edition. The first edition just referred to CSS (which has always
> allowed floats in percentages); the second edition similarly refers to
> CSS2 and also adds a grammar which, as you point out, is a subset of
> the allowed syntax because it uses <integer> instead of <number>:
>
> color ::= "#" hexdigit hexdigit hexdigit (hexdigit hexdigit hexdigit)?
> | "rgb(" wsp* integer comma integer comma integer wsp* ")"
> | "rgb(" wsp* integer "%" comma integer "%" comma integer "%"
> wsp* ")"
> | color-keyword
> hexdigit ::= [0-9A-Fa-f]
> comma ::= wsp* "," wsp*
>
> SVG2 repeats this error
>
> "color ::=
> "#" hexdigit hexdigit hexdigit (hexdigit hexdigit hexdigit)?
> | ~"rgb(" wsp* integer comma integer comma integer wsp* ")"
> | ~"rgb(" wsp* integer "%" comma integer "%" comma integer "%" wsp* ")"
> | ~"hsl(" wsp* integer comma integer comma integer wsp* ")"
> | ~"hsla(" wsp* integer comma integer comma integer comma integer wsp*
> ")"
> | color-keyword
> http://www.w3.org/TR/SVG2/color.html#color
>
>
> I will record that as an erratum for SVG 1.1 second edition, and
> ensure it gets fixed in SVG2.
>
> Thanks for your careful review, Paul
>
>
>
>
>
>
> --
> Best regards,
> Chris mailto:chris@w3.org
>
>
Received on Monday, 27 January 2014 08:33:43 UTC