<?xml version="1.0" encoding="UTF-8"?>
<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
         xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

  <a:documentation>
    SVG 1.1 Gradient Module
    file: svg-gradient.rng

    This is SVG, a language for describing two-dimensional graphics in XML.
    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.

    $Id: svg-gradient.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
  </a:documentation>

  <a:documentation>
    Gradient

        linearGradient, radialGradient, stop

    This module declares markup to provide support for gradient fill.
  </a:documentation>

  <a:documentation>
    Datatypes
  </a:documentation>

  <define name="NumberOrPercentage.datatype">
    <data type="string"/>
  </define>

  <a:documentation>
    SVG.Gradient.attrib
  </a:documentation>

  <define name="SVG.Gradient.extra.attrib">
    <empty/>
  </define>

  <define name="SVG.Gradient.attrib" combine="interleave">
    <optional>
      <attribute name="stop-color">
        <ref name="SVGColor.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="stop-opacity">
        <ref name="OpacityValue.datatype"/>
      </attribute>
    </optional>
    <ref name="SVG.Gradient.extra.attrib"/>
  </define>

  <a:documentation>
    SVG.Gradient.class
  </a:documentation>

  <define name="SVG.Gradient.extra.class">
    <notAllowed/>
  </define>

  <define name="SVG.Gradient.class" combine="choice">
    <choice>
      <ref name="linearGradient"/>
      <ref name="radialGradient"/>
      <ref name="SVG.Gradient.extra.class"/>
    </choice>
  </define>

  <a:documentation>
    linearGradient: Linear Gradient Element
  </a:documentation>

  <define name="SVG.linearGradient.content">
    <zeroOrMore>
      <ref name="SVG.Description.class"/>
    </zeroOrMore>
    <zeroOrMore>
      <choice>
        <ref name="stop"/>
        <ref name="animate"/>
        <ref name="set"/>
        <ref name="animateTransform"/>
      </choice>
    </zeroOrMore>
  </define>

  <define name="linearGradient">
    <element name="linearGradient">
      <ref name="attlist.linearGradient"/>
      <ref name="SVG.linearGradient.content"/>
    </element>
  </define>

  <define name="attlist.linearGradient" combine="interleave">
    <ref name="SVG.Core.attrib"/>
    <ref name="SVG.Style.attrib"/>
    <ref name="SVG.Color.attrib"/>
    <ref name="SVG.Gradient.attrib"/>
    <ref name="SVG.XLink.attrib"/>
    <ref name="SVG.External.attrib"/>
    <optional>
      <attribute name="x1">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="y1">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="x2">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="y2">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="gradientUnits">
        <choice>
          <value>userSpaceOnUse</value>
          <value>objectBoundingBox</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="gradientTransform">
        <ref name="TransformList.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="spreadMethod">
        <choice>
          <value>pad</value>
          <value>reflect</value>
          <value>repeat</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <a:documentation>
    radialGradient: Radial Gradient Element
  </a:documentation>

  <define name="SVG.radialGradient.content">
    <zeroOrMore>
      <ref name="SVG.Description.class"/>
    </zeroOrMore>
    <zeroOrMore>
      <choice>
        <ref name="stop"/>
        <ref name="animate"/>
        <ref name="set"/>
        <ref name="animateTransform"/>
      </choice>
    </zeroOrMore>
  </define>

  <define name="radialGradient">
    <element name="radialGradient">
      <ref name="attlist.radialGradient"/>
      <ref name="SVG.radialGradient.content"/>
    </element>
  </define>

  <define name="attlist.radialGradient" combine="interleave">
    <ref name="SVG.Core.attrib"/>
    <ref name="SVG.Style.attrib"/>
    <ref name="SVG.Color.attrib"/>
    <ref name="SVG.Gradient.attrib"/>
    <ref name="SVG.XLink.attrib"/>
    <ref name="SVG.External.attrib"/>
    <optional>
      <attribute name="cx">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="cy">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="r">
        <ref name="SVGLength.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="fx">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="fy">
        <ref name="Coordinate.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="gradientUnits">
        <choice>
          <value>userSpaceOnUse</value>
          <value>objectBoundingBox</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="gradientTransform">
        <ref name="TransformList.datatype"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="spreadMethod">
        <choice>
          <value>pad</value>
          <value>reflect</value>
          <value>repeat</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <a:documentation>
    stop: Stop Element
  </a:documentation>

  <define name="SVG.stop.content">
    <zeroOrMore>
      <choice>
        <ref name="animate"/>
        <ref name="set"/>
        <ref name="animateColor"/>
      </choice>
    </zeroOrMore>
  </define>

  <define name="stop">
    <element name="stop">
      <ref name="attlist.stop"/>
      <ref name="SVG.stop.content"/>
    </element>
  </define>

  <define name="attlist.stop" combine="interleave">
    <ref name="SVG.Core.attrib"/>
    <ref name="SVG.Style.attrib"/>
    <ref name="SVG.Color.attrib"/>
    <ref name="SVG.Gradient.attrib"/>
    <attribute name="offset">
      <ref name="NumberOrPercentage.datatype"/>
    </attribute>
  </define>

</grammar>
