Re: marker-pattern syntax

On Thu, Nov 22, 2012 at 6:44 AM, Dirk Schulze <dschulze@adobe.com> wrote:
>
> On Nov 21, 2012, at 10:54 PM, Dirk Schulze <dschulze@adobe.com> wrote:
>
>> Hi SVG folks,
>>
>> Just looked at the syntax of maker-pattern and think that there is a mistake[1]:
>>
>>       [ none | <length> | <percentage> | <funciri> ]+
>>
>> "A bar (|) separates two or more alternatives: exactly one of them must occur."[2]
>>
>> Means that just one in the list can occur, which is may or may not be correct.
>>
>> <percentage>,<length> "Indicates the length of a gap in the repeated pattern of markers."
>>
>> In this case it seems correct. But looking at the example, the values do not define the length of a gap but the distance between two markers (which makes more sense IMO). But in this case the syntax is wrong (and the wording can be improved). It depends on the needs of 'marker' shorthand, but I have two syntax proposals:
>>
>>       none | [ <funciri> || [<length> | <percentage>] ]#
>>
>> or
>>
>>       none | [ <funciri> [<length> | <percentage>] ]#
>
> To get back to it: sometimes you want a marker follow a pseudo irregular pattern. It should be possible to define multiple distances:
>
>         marker-pattern: url(#marker1) 20px 40px, url(#marker2) 20% 40px;
>
> The first marker pattern draws a marker after 20px, then after 40px from the first marker position, then after 20px of the second marker position and so on. Same for the second marker pattern. That is why I  would suggest the following change now :)
>
>         marker-pattern: none | [ <url> <distance>+ ]#

I think the additional ability offered by setting multiple lists in
marker-pattern is potentially useful, but I don't like the
simplification you've made to each individual list.  You can no longer
easily swap between two different markers (you have to instead
coordinate two separate distance lists), nor can you easily insert
"gaps" in the marker list (you have to instead lengthen the distance).

We can merge them together reasonably, though:

<distance> = <length> | <percentage>;
<marker-instance> = none | <url>;
marker-pattern: [ <distance>? <marker-instance> [ <distance>
<marker-instance>? ]* ]#

This lets you still intersperse multiple markers (or gaps) in a single
run, but also lets you specify multiple independent runs.

I've included your optimization that you can omit the <single-marker>,
meaning "use the last <single-marker> provided".  This is a change
from what the current spec seems to mean by having multiple lengths,
which I think is just "combine them", but that's an insignificant loss
in the modern age of calc().

This plays nicely with the 'marker' shorthand that I suggested in the
other thread, where you prefix each segment of the shorthand with an
ident for the subproperty it's specifying.

~TJ

Received on Monday, 26 November 2012 19:37:43 UTC