Markers and Patterns default attributes

Hi SVG Experts,

Suppose we have the following SVG (from the SVG 1.1 example):
=======================
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="4in" height="2in"
     viewBox="0 0 4000 2000" version="1.1"
     xmlns="http://www.w3.org/2000/svg">
  <defs>
    <marker id="Triangle"
      viewBox="0 0 10 10" refX="0" refY="5"
      markerUnits="strokeWidth"
      markerWidth="4" markerHeight="3"
      orient="auto">
      <path d="M 0 0 L 10 5 L 0 10 z" />
    </marker>
  </defs>
  <rect x="10" y="10" width="3980" height="1980"
       fill="none" stroke="blue" stroke-width="10" />
  <desc>Placing an arrowhead at the end of a path.
  </desc>
  <path d="M 1000 750 L 2000 750 L 2500 1250"
        fill="none" stroke="black" stroke-width="100"
        marker-end="url(#Triangle)"  />
</svg>
======================

Here we have a black arrohead. Then, we enclose <defs> into <g> as follows:

=======================
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="4in" height="2in"
     viewBox="0 0 4000 2000" version="1.1"
     xmlns="http://www.w3.org/2000/svg">
  <g fill="green">                        <!-- HERE! -->
    <defs>
      <marker id="Triangle"
        viewBox="0 0 10 10" refX="0" refY="5"
        markerUnits="strokeWidth"
        markerWidth="4" markerHeight="3"
        orient="auto">
        <path d="M 0 0 L 10 5 L 0 10 z" />
      </marker>
    </defs>
  </g>
  <rect x="10" y="10" width="3980" height="1980"
       fill="none" stroke="blue" stroke-width="10" />
  <desc>Placing an arrowhead at the end of a path.
  </desc>
  <path d="M 1000 750 L 2000 750 L 2500 1250"
        fill="none" stroke="black" stroke-width="100"
        marker-end="url(#Triangle)"  />
</svg>
=======================

Adobe SVG draws a green marker in this case, but in Inkscape it remains 
black. And the specification doesn't say anything about this behaviour (or I 
might be missing something).

So, what is the correct behaviour? In other words, should we take into 
account the attribute values that exist at the entry point of the 
marker/pattern definition?

If we should it leads us to whether:
a) Very inefficient rendering, O(n^2), when for every marker we have to 
traverse the whole DOM from the beginning to deduct the attributes at the 
marker entry point.
Or:
b) Very complex and buggy code (literally spaghetti-code), especially 
considering scripting and editing. Just imagine you have 10 nested <g> with 
a <marker> element inside and then you change some attribute at the 5th <g> 
that affects the marker. Collecting of the attribute values becomes a 
nightmare.

Can we treat the attributes at the marker/pattern entry point as default 
ones?

McSeem

Received on Friday, 11 November 2005 14:53:08 UTC