<?xml version="1.0" standalone="no"?>
<!--
  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.
-->

<!--
       SVG Anteater logo

To get started with SVG, I'd recommend getting the Adobe SVG plugin, and the
xml-batik CVS module. Then have a look at the xml-batik/samples files. Use the
SVG spec (http://www.w3.org/TR/SVG/) as a reference.
-->

<!-- See Forrest Issue: FOR-229
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
[
 <!ATTLIST svg xmlns:for CDATA #FIXED "http://apache.org/forrest">
 <!ENTITY % textExt "|for:group-name">
 <!ELEMENT for:group-name (#PCDATA)>
]>
-->
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xsl:version="1.0"
     xmlns:for="http://apache.org/forrest"
     width="600" height="65" >
  <title>Anteater logo</title>

  <defs>

    <!--
    <radialGradient id="radialGradient">
      <stop style="stop-color:gold" offset="0"/>
      <stop style="stop-color:orange" offset=".5"/>
      <stop style="stop-color:crimson" offset="1"/>
    </radialGradient>
    <linearGradient id="linearGradient">
      <stop style="stop-color:gold" offset="0"/>
      <stop style="stop-color:orange" offset=".5"/>
      <stop style="stop-color:crimson" offset="1"/>
    </linearGradient>
    -->

    <linearGradient id="gradient" x1="0" y1="0" x2="0" y2="1">
      <stop style="stop-color:white" offset="0"/>
      <stop style="stop-color:lightgreen" offset="1"/>
    </linearGradient>

    <filter id="shadowFilter" filterUnits="objectBoundingBox" width="1.4" height="1.4">
      <!-- Takes the alpha channel (black outline of the text), blurs it and saves as 'blur' -->
      <feGaussianBlur in="SourceAlpha" stdDeviation="2 2" result="blur"/>
      <!-- Takes saved 'blur' and offsets it by 4 pixels, saves as 'offsetBlur' -->
      <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/>
      <!-- Merges SourceGraphic (original image) and 'offsetBlur', putting the
      former 'over' the latter, and using the merged result as the finished
      image -->
      <feComposite in="SourceGraphic" in2="offsetBlur" operator="over"/>
    </filter>

  </defs>

  <g filter="url(#shadowFilter)" fill="url(#gradient)">
    <text x="40%" y="60%" style="font-size:24pt; font-family:Verdana ; text-anchor: middle">
    <for:group-name />
    </text>
  </g>
</svg>
