<?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">

<!--

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

-->
<!-- ========================================================================= -->
<!-- Error on rect                                                             -->
<!--                                                                           -->
<!-- @author tkormann@apache.org                                               -->
<!-- @version $Id$  -->
<!-- ========================================================================= -->

<?xml-stylesheet type="text/css" href="test.css" ?>

<svg xmlns="http://www.w3.org/2000/svg"
     id="body" width="450" height="500" viewBox="0 0 450 500">
<title>Error: &lt;pattern> has an invalid subelement</title>

    <!-- ============================================================= -->
    <!-- Batik sample mark                                             -->
    <!-- ============================================================= -->
    <use xlink:href="./batikMark.svg#BatikTag" />

    <!-- ============================================================= -->
    <!-- Test content                                                  -->
    <!-- ============================================================= -->
    <g id="testContent">

    <text x="225" y="40" class="title">
      Error: &lt;pattern> has an invalid subelement
    </text>

    <defs>
        <pattern id="good" x="0" y="0" width=".75" height="50%">
            <circle cx="10" cy="10" r="10" style="fill:red" />
            <rect x="10" y="10" width="15" height="15" style="fill:green"/>
        </pattern>
        <pattern id="bad" x="0" y="0" width=".75" height="50%">
            <circle/>
            <rect x="10" y="10" width="15" height="15" style="fill:green"/>
        </pattern>

    </defs>

    <text x="225" y="240" class="legend">A rectangle filled with a &lt;pattern></text>
    <text x="225" y="440" class="legend">
      A rectangle filled with a &lt;pattern>
    </text>
    <text x="225" y="454" class="legend">
      &lt;pattern> has an invalid subelement
    </text>

    <rect x="175" y="100" width="100" height="100" style="fill:url(#good);"/>
    <rect x="175" y="300" width="100" height="100" style="fill:url(#bad);"/>


    </g>    
</svg>
