default namespace = "http://www.w3.org/2000/svg"
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"


## 
##     SVG 1.1 Shape Module
##     file: svg-shape.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-shape.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
##   

## 
##     Shape
## 
##         path, rect, circle, line, ellipse, polyline, polygon
## 
##     This module declares markup to provide support for graphical shapes.
##   
[ xml:lang = "en" ]
grammar {
  
  ## 
  ##       a list of points
  ##     
  Points.datatype = xsd:string
  a:documentation [ "\x{a}" ~ "    SVG.Shape.class\x{a}" ~ "  " ]
  SVG.Shape.extra.class = notAllowed
  SVG.Shape.class |=
    path
    | rect
    | circle
    | line
    | ellipse
    | polyline
    | polygon
    | SVG.Shape.extra.class
  a:documentation [ "\x{a}" ~ "    path: Path Element\x{a}" ~ "  " ]
  SVG.path.content = SVG.Description.class*, SVG.Animation.class*
  path = element path { attlist.path, SVG.path.content }
  attlist.path &=
    SVG.Core.attrib,
    SVG.Conditional.attrib,
    SVG.Style.attrib,
    SVG.Paint.attrib,
    SVG.Color.attrib,
    SVG.Opacity.attrib,
    SVG.Graphics.attrib,
    SVG.Marker.attrib,
    SVG.Clip.attrib,
    SVG.Mask.attrib,
    SVG.Filter.attrib,
    SVG.GraphicalEvents.attrib,
    SVG.Cursor.attrib,
    SVG.External.attrib,
    attribute d { PathData.datatype },
    attribute pathLength { Number.datatype }?,
    attribute transform { TransformList.datatype }?
  a:documentation [
    "\x{a}" ~
    "    rect: Rectangle Element\x{a}" ~
    "  "
  ]
  SVG.rect.content = SVG.Description.class*, SVG.Animation.class*
  rect = element rect { attlist.rect, SVG.rect.content }
  attlist.rect &=
    SVG.Core.attrib,
    SVG.Conditional.attrib,
    SVG.Style.attrib,
    SVG.Paint.attrib,
    SVG.Color.attrib,
    SVG.Opacity.attrib,
    SVG.Graphics.attrib,
    SVG.Clip.attrib,
    SVG.Mask.attrib,
    SVG.Filter.attrib,
    SVG.GraphicalEvents.attrib,
    SVG.Cursor.attrib,
    SVG.External.attrib,
    attribute x { Coordinate.datatype }?,
    attribute y { Coordinate.datatype }?,
    attribute width { Length.datatype },
    attribute height { Length.datatype },
    attribute rx { Length.datatype }?,
    attribute ry { Length.datatype }?,
    attribute transform { TransformList.datatype }?
  a:documentation [ "\x{a}" ~ "    circle: Circle Element\x{a}" ~ "  " ]
  SVG.circle.content = SVG.Description.class*, SVG.Animation.class*
  circle = element circle { attlist.circle, SVG.circle.content }
  attlist.circle &=
    SVG.Core.attrib,
    SVG.Conditional.attrib,
    SVG.Style.attrib,
    SVG.Paint.attrib,
    SVG.Color.attrib,
    SVG.Opacity.attrib,
    SVG.Graphics.attrib,
    SVG.Clip.attrib,
    SVG.Mask.attrib,
    SVG.Filter.attrib,
    SVG.GraphicalEvents.attrib,
    SVG.Cursor.attrib,
    SVG.External.attrib,
    attribute cx { Coordinate.datatype }?,
    attribute cy { Coordinate.datatype }?,
    attribute r { Length.datatype },
    attribute transform { TransformList.datatype }?
  a:documentation [ "\x{a}" ~ "    line: Line Element\x{a}" ~ "  " ]
  SVG.line.content = SVG.Description.class*, SVG.Animation.class*
  line = element line { attlist.line, SVG.line.content }
  attlist.line &=
    SVG.Core.attrib,
    SVG.Conditional.attrib,
    SVG.Style.attrib,
    SVG.Paint.attrib,
    SVG.Color.attrib,
    SVG.Opacity.attrib,
    SVG.Graphics.attrib,
    SVG.Marker.attrib,
    SVG.Clip.attrib,
    SVG.Mask.attrib,
    SVG.Filter.attrib,
    SVG.GraphicalEvents.attrib,
    SVG.Cursor.attrib,
    SVG.External.attrib,
    attribute x1 { Coordinate.datatype }?,
    attribute y1 { Coordinate.datatype }?,
    attribute x2 { Coordinate.datatype }?,
    attribute y2 { Coordinate.datatype }?,
    attribute transform { TransformList.datatype }?
  a:documentation [
    "\x{a}" ~
    "    ellipse: Ellipse Element\x{a}" ~
    "  "
  ]
  SVG.ellipse.content = SVG.Description.class*, SVG.Animation.class*
  ellipse = element ellipse { attlist.ellipse, SVG.ellipse.content }
  attlist.ellipse &=
    SVG.Core.attrib,
    SVG.Conditional.attrib,
    SVG.Style.attrib,
    SVG.Paint.attrib,
    SVG.Color.attrib,
    SVG.Opacity.attrib,
    SVG.Graphics.attrib,
    SVG.Clip.attrib,
    SVG.Mask.attrib,
    SVG.Filter.attrib,
    SVG.GraphicalEvents.attrib,
    SVG.Cursor.attrib,
    SVG.External.attrib,
    attribute cx { Coordinate.datatype }?,
    attribute cy { Coordinate.datatype }?,
    attribute rx { Length.datatype },
    attribute ry { Length.datatype },
    attribute transform { TransformList.datatype }?
  a:documentation [
    "\x{a}" ~
    "    polyline: Polyline Element\x{a}" ~
    "  "
  ]
  SVG.polyline.content = SVG.Description.class*, SVG.Animation.class*
  polyline = element polyline { attlist.polyline, SVG.polyline.content }
  attlist.polyline &=
    SVG.Core.attrib,
    SVG.Conditional.attrib,
    SVG.Style.attrib,
    SVG.Paint.attrib,
    SVG.Color.attrib,
    SVG.Opacity.attrib,
    SVG.Graphics.attrib,
    SVG.Marker.attrib,
    SVG.Clip.attrib,
    SVG.Mask.attrib,
    SVG.Filter.attrib,
    SVG.GraphicalEvents.attrib,
    SVG.Cursor.attrib,
    SVG.External.attrib,
    attribute points { Points.datatype },
    attribute transform { TransformList.datatype }?
  a:documentation [
    "\x{a}" ~
    "    polygon: Polygon Element\x{a}" ~
    "  "
  ]
  SVG.polygon.content = SVG.Description.class*, SVG.Animation.class*
  polygon = element polygon { attlist.polygon, SVG.polygon.content }
  attlist.polygon &=
    SVG.Core.attrib,
    SVG.Conditional.attrib,
    SVG.Style.attrib,
    SVG.Paint.attrib,
    SVG.Color.attrib,
    SVG.Opacity.attrib,
    SVG.Graphics.attrib,
    SVG.Marker.attrib,
    SVG.Clip.attrib,
    SVG.Mask.attrib,
    SVG.Filter.attrib,
    SVG.GraphicalEvents.attrib,
    SVG.Cursor.attrib,
    SVG.External.attrib,
    attribute points { Points.datatype },
    attribute transform { TransformList.datatype }?
}