| <?xml version="1.0" standalone="no"?> |
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000802//EN" |
| "http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd"> |
| |
| <!-- ========================================================================= --> |
| <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> |
| <!-- --> |
| <!-- This software is published under the terms of the Apache Software License --> |
| <!-- version 1.1, a copy of which has been included with this distribution in --> |
| <!-- the LICENSE file. --> |
| <!-- ========================================================================= --> |
| |
| <!-- ========================================================================= --> |
| <!-- This test validates handling of the orient property on maker-start and --> |
| <!-- marker-end. --> |
| <!-- --> |
| <!-- @author vhardy@apache.org --> |
| <!-- @version $Id$ --> |
| <!-- ========================================================================= --> |
| <?xml-stylesheet type="text/css" href="test.css" ?> |
| |
| <svg id="body" width="450" height="500" viewBox="0 0 450 500"> |
| <title>Marker Test</title> |
| |
| <style type="text/css"><![CDATA[ |
| .markedPath { fill:none; stroke:black; stroke-width:4; } |
| ]]></style> |
| |
| <g id="content"> |
| |
| <g transform="translate(0, 40)"> |
| <text class="title" x="50%" y="0">Markers, preserveAspectRatio</text> |
| </g> |
| |
| <defs> |
| <g id="markerColumn"> |
| <circle cx=".5" cy=".5" r=".5" /> |
| <rect x="0" y="1" width="1" height="1" /> |
| <path d="M 0 3 l 1 0 l -0.5 -1 z" /> |
| </g> |
| |
| <g id="markerContent" stroke="none"> |
| <rect x="0" y="0" width="3" height="3" fill="black" /> |
| <use xlink:href="#markerColumn" fill="crimson" /> |
| <use xlink:href="#markerColumn" x="1" fill="gold" /> |
| <use xlink:href="#markerColumn" x="2" fill="orange" /> |
| </g> |
| |
| <path id="testPath" d="M 60 20 l 30 0 l 30 0" fill="none"/> |
| |
| <!-- ============================= --> |
| <!-- Marker Definitions --> |
| <!-- ============================= --> |
| <marker id="startEndMarker" markerWidth="8" markerHeight="8" |
| viewBox="-4 -4 8 8" orient="0" |
| markerUnits="strokeWidth" overflow="hidden"> |
| <circle r="4" fill="black" stroke="none" /> |
| </marker> |
| |
| |
| <marker id="test" markerWidth="20" markerHeight="20" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <!-- ======================================================== --> |
| <!-- align = none --> |
| <!-- ======================================================== --> |
| <marker id="meetNone" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="none meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="sliceNone" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="none slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| <marker id="noneNone" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="none"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| <!-- ========================================================= --> |
| <!-- meetOrSlice = meet --> |
| <!-- ========================================================= --> |
| |
| <!-- xMxx = xMin --> |
| <marker id="meetXminYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMin meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="meetXminYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMid meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="meetXminYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMax meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| <!-- xMxx = xMid --> |
| <marker id="meetXmidYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMin meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="meetXmidYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMid meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="meetXmidYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMax meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <!-- xMxx = xmax --> |
| <marker id="meetXmaxYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMin meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="meetXmaxYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMid meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="meetXmaxYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMax meet"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| <!-- ========================================================= --> |
| <!-- meetOrSlice = slice --> |
| <!-- ========================================================= --> |
| |
| <!-- xMxx = xMin --> |
| <marker id="sliceXminYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMin slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="sliceXminYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMid slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="sliceXminYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMax slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| <!-- xMxx = xMid --> |
| <marker id="sliceXmidYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMin slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="sliceXmidYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMid slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="sliceXmidYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMax slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <!-- xMxx = xmax --> |
| <marker id="sliceXmaxYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMin slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="sliceXmaxYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMid slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="sliceXmaxYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMax slice"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| <!-- ========================================================= --> |
| <!-- meetOrSlice = none --> |
| <!-- ========================================================= --> |
| |
| <!-- xMxx = xMin --> |
| <marker id="noneXminYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMin"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="noneXminYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMid"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="noneXminYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMinYMax"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| <!-- xMxx = xMid --> |
| <marker id="noneXmidYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMin"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="noneXmidYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMid"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="noneXmidYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMidYMax"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <!-- xMxx = xmax --> |
| <marker id="noneXmaxYmin" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMin"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="noneXmaxYmid" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMid"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| <marker id="noneXmaxYmax" markerWidth="20" markerHeight="30" |
| viewBox="0 0 3 3" orient="0" refX="1.5" refY="1.5" |
| markerUnits="strokeWidth" overflow="hidden" |
| preserveAspectRatio="xMaxYMax"> |
| <g> |
| <use xlink:href="#markerContent" /> |
| </g> |
| </marker> |
| |
| |
| |
| |
| <rect id="xMxx" x="0" y="0" width="20" height="120" /> |
| <rect id="yMxx" x="20" y="0" width="20" height="40" /> |
| <rect id="sampleCell" x="40" y="0" width="100" height="40" /> |
| |
| <g id="xMxxBlock" stroke="black"> |
| <use xlink:href="#xMxx" /> |
| <use xlink:href="#yMxx" fill="rgb(255, 250, 210)"/> |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="35" y="20" |
| transform="rotate(-90, 35, 20)"> |
| yMin |
| </text> |
| <use xlink:href="#yMxx" y="40" fill="rgb(255, 240, 150)"/> |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="35" y="60" |
| transform="rotate(-90, 35, 60)"> |
| yMid |
| </text> |
| <use xlink:href="#yMxx" y="80" fill="rgb(255, 235, 120)"/> |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="35" y="100" |
| transform="rotate(-90, 35, 100)"> |
| yMax |
| </text> |
| </g> |
| |
| <g id="sampleColumn" stroke="black" fill="none"> |
| <use xlink:href="#sampleCell" fill="rgb(255, 250, 210)"/> |
| <use xlink:href="#sampleCell" y="40" fill="rgb(255, 240, 150)"/> |
| <use xlink:href="#sampleCell" y="80" fill="rgb(255, 235, 120)"/> |
| <use xlink:href="#sampleCell" y="120" fill="rgb(255, 250, 210)"/> |
| <use xlink:href="#sampleCell" y="160" fill="rgb(255, 240, 150)"/> |
| <use xlink:href="#sampleCell" y="200" fill="rgb(255, 235, 120)"/> |
| <use xlink:href="#sampleCell" y="240" fill="rgb(255, 250, 210)"/> |
| <use xlink:href="#sampleCell" y="280" fill="rgb(255, 240, 150)"/> |
| <use xlink:href="#sampleCell" y="320" fill="rgb(255, 235, 120)"/> |
| <use xlink:href="#sampleCell" y="360"/> |
| </g> |
| |
| <rect id="columnHeader" x="40" y="-20" width="100" height="20" stroke="black"/> |
| |
| </defs> |
| |
| <g transform="translate(50, 80)"> |
| <use xlink:href="#xMxxBlock" fill="rgb(255, 250, 210)"/> |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="15" y="60" |
| transform="rotate(-90, 15, 60)"> |
| xMin |
| </text> |
| |
| <use xlink:href="#xMxxBlock" y="120" fill="rgb(255, 240, 150)"/> |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="15" y="180" |
| transform="rotate(-90, 15, 180)"> |
| xMid |
| </text> |
| |
| <use xlink:href="#xMxxBlock" y="240" fill="rgb(255, 235, 120)"/> |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="15" y="300" |
| transform="rotate(-90, 15, 300)"> |
| xMax |
| </text> |
| |
| <use xlink:href="#sampleColumn" /> |
| <use xlink:href="#sampleColumn" x="100" /> |
| <use xlink:href="#sampleColumn" x="200" /> |
| |
| <use xlink:href="#columnHeader" fill="none"/> |
| <use xlink:href="#columnHeader" x="100" fill="none"/> |
| <use xlink:href="#columnHeader" x="200" fill="none"/> |
| |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="90" y="-5"> |
| meet |
| </text> |
| |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="190" y="-5"> |
| slice |
| </text> |
| |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="290" y="-5"> |
| none |
| </text> |
| |
| <rect x="0" y="360" width="40" height="40" stroke="black" fill="none" /> |
| <text class="label" stroke="none" fill="black" |
| text-anchor="middle" x="25" y="380" |
| transform="rotate(-90, 25, 380)"> |
| none |
| </text> |
| |
| <!-- ============================================ --> |
| <!-- Various marker settings here --> |
| <!-- ============================================ --> |
| |
| <!-- =============================== --> |
| <!-- meetOrSlice = meet --> |
| <!-- =============================== --> |
| <g marker-start="url(#startEndMarker)" marker-end="url(#startEndMarker)" stroke="black"> |
| |
| <!-- xMxx = xMin --> |
| <use xlink:href="#testPath" marker-mid="url(#meetXminYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#meetXminYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#meetXminYmax)" y="80"/> |
| |
| <!-- xMxx = xMid --> |
| <g transform="translate(0, 120)"> |
| <use xlink:href="#testPath" marker-mid="url(#meetXmidYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#meetXmidYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#meetXmidYmax)" y="80"/> |
| </g> |
| |
| <!-- xMxx = xMax --> |
| <g transform="translate(0, 240)"> |
| <use xlink:href="#testPath" marker-mid="url(#meetXmaxYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#meetXmaxYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#meetXmaxYmax)" y="80"/> |
| </g> |
| |
| </g> |
| |
| <!-- =============================== --> |
| <!-- meetOrSlice = slice --> |
| <!-- =============================== --> |
| <g marker-start="url(#startEndMarker)" transform="translate(100, 0)" |
| marker-end="url(#startEndMarker)" stroke="black"> |
| |
| <!-- xMxx = xMin --> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXminYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXminYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXminYmax)" y="80"/> |
| |
| <!-- xMxx = xMid --> |
| <g transform="translate(0, 120)"> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXmidYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXmidYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXmidYmax)" y="80"/> |
| </g> |
| |
| <!-- xMxx = xMax --> |
| <g transform="translate(0, 240)"> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXmaxYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXmaxYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#sliceXmaxYmax)" y="80"/> |
| </g> |
| |
| </g> |
| |
| <!-- =============================== --> |
| <!-- meetOrSlice = none --> |
| <!-- =============================== --> |
| <g marker-start="url(#startEndMarker)" transform="translate(200, 0)" |
| marker-end="url(#startEndMarker)" stroke="black"> |
| |
| <!-- xMxx = xMin --> |
| <use xlink:href="#testPath" marker-mid="url(#noneXminYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#noneXminYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#noneXminYmax)" y="80"/> |
| |
| <!-- xMxx = xMid --> |
| <g transform="translate(0, 120)"> |
| <use xlink:href="#testPath" marker-mid="url(#noneXmidYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#noneXmidYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#noneXmidYmax)" y="80"/> |
| </g> |
| |
| <!-- xMxx = xMax --> |
| <g transform="translate(0, 240)"> |
| <use xlink:href="#testPath" marker-mid="url(#noneXmaxYmin)" /> |
| <use xlink:href="#testPath" marker-mid="url(#noneXmaxYmid)" y="40"/> |
| <use xlink:href="#testPath" marker-mid="url(#noneXmaxYmax)" y="80"/> |
| </g> |
| |
| </g> |
| |
| <!-- =============================== --> |
| <!-- align = none --> |
| <!-- =============================== --> |
| <g marker-start="url(#startEndMarker)" transform="translate(0, 360)" |
| marker-end="url(#startEndMarker)" stroke="black"> |
| |
| <use xlink:href="#testPath" marker-mid="url(#meetNone)" /> |
| <use xlink:href="#testPath" marker-mid="url(#sliceNone)" x="100"/> |
| <use xlink:href="#testPath" marker-mid="url(#noneNone)" x="200"/> |
| |
| </g> |
| </g> |
| |
| </g> |
| |
| <!-- ============================================================= --> |
| <!-- Batik sample mark --> |
| <!-- ============================================================= --> |
| <use xlink:href="../batikLogo.svg#Batik_Tag_Box" /> |
| |
| </svg> |