<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://www.inkscape.org/namespace/inkscape/extension">
<start>
<element name="inkscape-extension">
<element name="_name">
<text/>
</element>
<element name="id">
<text/>
</element>
<zeroOrMore>
<element name="dependency">
<attribute name="type">
<ref name="inx.dependency-type.values"/>
</attribute>
<optional>
<attribute name="location">
<ref name="inx.location.values"/>
</attribute>
</optional>
<optional>
<attribute name="_description">
<text/>
</attribute>
</optional>
<text/>
</element>
</zeroOrMore>
<zeroOrMore>
<choice>
<ref name="inx.parameters"/>
<element name="param">
<attribute name="name"/>
<attribute name="type">
<value>notebook</value>
</attribute>
<oneOrMore>
<element name="page">
<attribute name="name"/>
<attribute name="_gui-text"/>
<oneOrMore>
<ref name="inx.parameters"/>
</oneOrMore>
</element>
</oneOrMore>
</element>
</choice>
</zeroOrMore>
<choice>
<element name="input">
<ref name="inx.io.common"/>
<optional>
<element name="output_extension">
<text/>
</element>
</optional>
</element>
<element name="output">
<ref name="inx.io.common"/>
<optional>
<element name="dataloss">
<data type="boolean"/>
</element>
</optional>
</element>
<element name="effect">
<optional>
<attribute name="needs-document">
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="needs-live-preview">
<data type="boolean"/>
</attribute>
</optional>
<element name="object-type">
<choice>
<value type="token">all</value>
<value type="token">path</value>
<value type="token">rect</value>
</choice>
</element>
<element name="effects-menu">
<choice>
<attribute name="hidden">
<value type="boolean">true</value>
</attribute>
<group>
<element name="submenu">
<attribute name="_name">
<text/>
</attribute>
<empty/>
</element>
</group>
</choice>
</element>
</element>
<element name="path-effect">
<empty/>
</element>
<element name="print">
<empty/>
</element>
</choice>
<choice>
<element name="script">
<group>
<element name="command">
<ref name="inx.reldir.attr"/>
<optional>
<attribute name="interpreter">
<choice>
<value>python</value>
<value>perl</value>
</choice>
</attribute>
</optional>
<text/>
</element>
<optional>
<element name="helper_extension">
<data type="NMTOKEN"/>
</element>
</optional>
<zeroOrMore>
<element name="check">
<ref name="inx.reldir.attr"/>
<text/>
</element>
</zeroOrMore>
</group>
</element>
<element name="xslt">
<element name="file">
<ref name="inx.reldir.attr"/>
<text/>
</element>
</element>
<element name="plugin">
<element name="name">
<text/>
</element>
</element>
</choice>
</element>
</start>
<define name="inx.reldir.attr">
<attribute name="reldir">
<ref name="inx.location.values"/>
</attribute>
</define>
<define name="inx.location.values">
<choice>
<value>extensions</value>
<value>path</value>
<value>plugins</value>
</choice>
</define>
<define name="inx.dependency-type.values">
<choice>
<value>extension</value>
<value>executable</value>
<value>plugin</value>
</choice>
</define>
<define name="inx.io.common">
<element name="extension">
<text/>
</element>
<element name="mimetype">
<text/>
</element>
<optional>
<element name="_filetypename">
<text/>
</element>
</optional>
<optional>
<element name="_filetypetooltip">
<text/>
</element>
</optional>
</define>
<define name="inx.parameter">
<attribute name="name">
<data type="token"/>
</attribute>
<optional>
<attribute name="gui-hidden">
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="_gui-text"/>
</optional>
<choice>
<group>
<attribute name="type">
<value>int</value>
</attribute>
<optional>
<attribute name="min">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="max">
<data type="integer"/>
</attribute>
</optional>
<choice>
<empty/>
<data type="integer"/>
</choice>
</group>
<group>
<attribute name="type">
<value>float</value>
</attribute>
<optional>
<attribute name="precision">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="min">
<data type="float"/>
</attribute>
</optional>
<optional>
<attribute name="max">
<data type="float"/>
</attribute>
</optional>
<data type="float"/>
</group>
<group>
<attribute name="type">
<value>boolean</value>
</attribute>
<data type="boolean"/>
</group>
<group>
<attribute name="type">
<value>string</value>
</attribute>
<optional>
<attribute name="max_length">
<data type="integer"/>
</attribute>
</optional>
<choice>
<empty/>
<text/>
</choice>
</group>
<group>
<attribute name="type">
<value>description</value>
</attribute>
<text/>
</group>
<group>
<attribute name="type">
<value>enum</value>
</attribute>
<oneOrMore>
<choice>
<element name="_item">
<ref name="inx.parameter.enum.item"/>
</element>
<element name="item">
<ref name="inx.parameter.enum.item"/>
</element>
</choice>
</oneOrMore>
</group>
<group>
<attribute name="type">
<value>optiongroup</value>
</attribute>
<optional>
<attribute name="appearance">
<value>minimal</value>
</attribute>
</optional>
<oneOrMore>
<choice>
<element name="option">
<ref name="inx.parameter.optiongroup.option"/>
</element>
<element name="_option">
<ref name="inx.parameter.optiongroup.option"/>
</element>
</choice>
</oneOrMore>
</group>
</choice>
</define>
<define name="inx.parameters">
<choice>
<element name="param">
<ref name="inx.parameter"/>
</element>
<element name="_param">
<ref name="inx.parameter"/>
</element>
</choice>
</define>
<define name="inx.parameter.enum.item">
<attribute name="value"/>
<data type="token"/>
</define>
<define name="inx.parameter.optiongroup.option">
<optional>
<attribute name="value">
<text/>
</attribute>
</optional>
<text/>
</define>
</grammar>