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


## 
##     SVG 1.1 Pattern Module
##     file: svg-pattern.rng
## 
##     This is SVG, a language for describing two-dimensional graphics in XML.
##     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
##
##     Modifications Copyright 2007 Mozilla Foundation
## 
##     $Id$
##   

## 
##    Pattern
## 
##         pattern
## 
##     This module declares markup to provide support for pattern fill.
##   

## 
##     SVG.Pattern.class
##   
[ xml:lang = "en" ]
grammar {
    SVG.Pattern.extra.class = notAllowed
    SVG.Pattern.class |= pattern | SVG.Pattern.extra.class
    a:documentation [
        "\x{a}" ~
        "    pattern: Pattern Element\x{a}" ~
        "  "
    ]
    SVG.pattern.content =
        (SVG.Description.class
         | SVG.Animation.class
         | SVG.Structure.class
         | SVG.Conditional.class
         | SVG.Image.class
         | SVG.Style.class
         | SVG.Shape.class
         | SVG.Text.class
         | SVG.Marker.class
         | SVG.Profile.class
         | SVG.Gradient.class
         | SVG.Pattern.class
         | SVG.Clip.class
         | SVG.Mask.class
         | SVG.Filter.class
         | SVG.Cursor.class
         | SVG.Hyperlink.class
         | SVG.View.class
         | SVG.Script.class
         | SVG.Font.class)*
    pattern = element pattern { attlist.pattern, SVG.pattern.content }
    attlist.pattern &=
        SVG.Core.attrib,
        SVG.Conditional.attrib,
        SVG.Style.attrib,
        SVG.Presentation.attrib,
        SVG.XLink.attrib,
        SVG.External.attrib,
        attribute x { Coordinate.datatype }?,
        attribute y { Coordinate.datatype }?,
        attribute width { Length.datatype }?,
        attribute height { Length.datatype }?,
        attribute patternUnits {
            string "userSpaceOnUse" | string "objectBoundingBox"
        }?,
        attribute patternContentUnits {
            string "userSpaceOnUse" | string "objectBoundingBox"
        }?,
        attribute patternTransform { TransformList.datatype }?,
        attribute viewBox { ViewBoxSpec.datatype }?,
        [ a:defaultValue = "xMidYMid meet" ]
        attribute preserveAspectRatio {
            PreserveAspectRatioSpec.datatype
        }?
}
