<?xml version="1.0" encoding="UTF-8"?>
-<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0">
+<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- Handling of element overloading when inheriting from a base
+ template
+ -->
+ <rng:define name="overload">
+ <rng:optional>
+ <!--
+ Alter matched element with content
+ -->
+ <rng:choice>
+ <rng:attribute name="position">
+ <rng:choice>
+ <!-- Insert content before first child -->
+ <rng:value>before</rng:value>
+ <!-- Insert content after last child -->
+ <rng:value>after</rng:value>
+ <!-- Replace all children with content -->
+ <rng:value>inside</rng:value>
+ <!-- Replace matched element itself with content -->
+ <rng:value>replace</rng:value>
+ </rng:choice>
+ </rng:attribute>
+ <rng:group>
+ <rng:attribute name="position">
+ <!-- Edit element attributes -->
+ <rng:value>attributes</rng:value>
+ </rng:attribute>
+ <rng:oneOrMore>
+ <rng:element name="attribute">
+ <rng:attribute name="name"><rng:text/></rng:attribute>
+ <rng:text />
+ </rng:element>
+ </rng:oneOrMore>
+ </rng:group>
+ </rng:choice>
+ </rng:optional>
+ </rng:define>
+
<rng:define name="form">
<rng:element name="form">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="string"/></rng:optional>
<rng:optional><rng:attribute name="col"/></rng:optional>
<rng:optional><rng:attribute name="editable"/></rng:optional>
<rng:optional><rng:attribute name="type"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="link"/></rng:optional>
<rng:zeroOrMore>
<rng:choice>
<rng:ref name="image"/>
<rng:ref name="form"/>
<rng:ref name="vpaned"/>
- <rng:ref name="attribute"/>
<rng:ref name="filter"/>
<rng:ref name="html"/>
<rng:element name="newline"><rng:empty/></rng:element>
<rng:define name="tree">
<rng:element name="tree">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="string"/></rng:optional>
<rng:optional><rng:attribute name="colors"/></rng:optional>
<rng:optional><rng:attribute name="color"/></rng:optional>
<rng:optional><rng:attribute name="editable"/></rng:optional>
<rng:optional><rng:attribute name="toolbar"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="link"/></rng:optional>
<rng:optional><rng:attribute name="type"/></rng:optional>
<rng:optional><rng:attribute name="limit"/></rng:optional>
<rng:ref name="tree"/>
<rng:ref name="group"/>
<rng:ref name="button"/>
- <rng:ref name="attribute"/>
<rng:ref name="filter"/>
<rng:ref name="html"/>
<rng:element name="newline"><rng:empty/></rng:element>
<rng:define name="search">
<rng:element name="search">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="string"/></rng:optional>
<rng:optional><rng:attribute name="col"/></rng:optional>
<rng:optional><rng:attribute name="type"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="link"/></rng:optional>
<rng:zeroOrMore>
<rng:choice>
<rng:define name="label">
<rng:element name="label">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="align"/></rng:optional>
<rng:optional><rng:attribute name="nolabel"/></rng:optional>
<rng:optional><rng:attribute name="colspan"/></rng:optional>
<rng:optional><rng:attribute name="string"/></rng:optional>
<rng:optional><rng:attribute name="angle"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="fill"/></rng:optional>
<rng:optional><rng:attribute name="help"/></rng:optional>
<rng:optional><rng:attribute name="width"/></rng:optional>
<rng:define name="hpaned">
<rng:element name="hpaned">
- <rng:optional><rng:attribute name="position"/></rng:optional>
+ <rng:optional>
+ <rng:attribute name="position">
+ <rng:data type="int"/>
+ </rng:attribute>
+ </rng:optional>
<rng:zeroOrMore>
<rng:ref name="any" />
<rng:optional><rng:ref name="html"/></rng:optional>
<rng:define name="vpaned">
<rng:element name="vpaned">
- <rng:optional><rng:attribute name="position"/></rng:optional>
+ <rng:optional>
+ <rng:attribute name="position">
+ <rng:data type="int"/>
+ </rng:attribute>
+ </rng:optional>
<rng:zeroOrMore>
<rng:optional><rng:ref name="any"/></rng:optional>
<rng:optional><rng:ref name="html"/></rng:optional>
<rng:define name="page">
<rng:element name="page">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="string"/></rng:optional>
<rng:optional><rng:attribute name="groups"/></rng:optional>
<rng:optional><rng:attribute name="attrs"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:zeroOrMore>
<rng:choice>
<rng:element name="newline"><rng:empty/></rng:element>
<rng:element name="properties"><rng:empty/></rng:element>
- <rng:ref name="attribute" />
<rng:ref name="label" />
<rng:ref name="field"/>
<rng:ref name="shortcut"/>
<rng:define name="notebook">
<rng:element name="notebook">
- <rng:optional><rng:attribute name="position"/></rng:optional>
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="colspan"/></rng:optional>
<rng:optional><rng:attribute name="tabpos"/></rng:optional>
<rng:oneOrMore>
<rng:define name="separator">
<rng:element name="separator">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="colspan"/></rng:optional>
<rng:optional><rng:attribute name="rowspan"/></rng:optional>
<rng:optional><rng:attribute name="string"/></rng:optional>
<rng:optional><rng:attribute name="col"/></rng:optional>
<rng:optional><rng:attribute name="select"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="orientation"/></rng:optional>
<rng:zeroOrMore>
<rng:choice>
- <rng:ref name="attribute"/>
<rng:ref name="separator"/>
<rng:ref name="button"/>
<rng:ref name="field"/>
<rng:define name="xpath">
<rng:element name="xpath">
<rng:optional><rng:attribute name="expr"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
+ <rng:ref name="overload"/>
<rng:zeroOrMore>
<rng:choice>
<rng:ref name="any"/>
</rng:element>
</rng:define>
- <rng:define name="attribute">
- <rng:element name="attribute">
- <rng:attribute name="name" />
- <rng:zeroOrMore>
- <rng:text />
- </rng:zeroOrMore>
- </rng:element>
- </rng:define>
-
-
<rng:define name="field">
<rng:element name="field">
<rng:attribute name="name" />
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="editable"/></rng:optional>
<rng:optional><rng:attribute name="attrs"/></rng:optional>
<rng:optional><rng:attribute name="string"/></rng:optional>
<rng:optional><rng:attribute name="context"/></rng:optional>
<rng:optional><rng:attribute name="groups"/></rng:optional>
<rng:optional><rng:attribute name="states"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="digits"/></rng:optional>
<rng:optional><rng:attribute name="icon"/></rng:optional>
<rng:optional><rng:attribute name="mode"/></rng:optional>
<rng:zeroOrMore>
<rng:choice>
<rng:ref name="diagram"/>
- <rng:ref name="attribute" />
<rng:ref name="form"/>
<rng:ref name="data"/>
<rng:ref name="tree"/>
<rng:define name="group">
<rng:element name="group">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="attrs"/></rng:optional>
<rng:optional><rng:attribute name="col"/></rng:optional>
<rng:optional><rng:attribute name="colspan"/></rng:optional>
<rng:optional><rng:attribute name="rowspan"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="expand"/></rng:optional>
<rng:optional><rng:attribute name="states"/></rng:optional>
<rng:optional><rng:attribute name="groups"/></rng:optional>
<rng:optional><rng:attribute name="color" /></rng:optional>
<rng:zeroOrMore>
<rng:choice>
- <rng:ref name="attribute"/>
<rng:ref name="separator"/>
<rng:ref name="button"/>
<rng:ref name="field"/>
<rng:define name="button">
<rng:element name="button">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="attrs"/></rng:optional>
<rng:optional><rng:attribute name="invisible"/></rng:optional>
<rng:optional><rng:attribute name="name" /></rng:optional>
<rng:optional><rng:attribute name="groups"/></rng:optional>
<rng:optional><rng:attribute name="target"/></rng:optional>
<rng:optional><rng:attribute name="readonly"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="context"/></rng:optional>
<rng:optional><rng:attribute name="confirm"/></rng:optional>
<rng:optional><rng:attribute name="help"/></rng:optional>
<rng:optional><rng:attribute name="default_focus"/></rng:optional>
<rng:zeroOrMore>
<rng:choice>
- <rng:ref name="attribute" />
<rng:ref name="form" />
<rng:ref name="field" />
<rng:ref name="tree" />
<rng:define name="filter">
<rng:element name="filter">
+ <rng:ref name="overload"/>
<rng:optional><rng:attribute name="attrs"/></rng:optional>
<rng:optional><rng:attribute name="name" /></rng:optional>
<rng:optional><rng:attribute name="separator" /></rng:optional>
<rng:optional><rng:attribute name="colspan"/></rng:optional>
<rng:optional><rng:attribute name="groups"/></rng:optional>
<rng:optional><rng:attribute name="readonly"/></rng:optional>
- <rng:optional><rng:attribute name="position"/></rng:optional>
<rng:optional><rng:attribute name="context"/></rng:optional>
<rng:optional><rng:attribute name="help"/></rng:optional>
<rng:optional><rng:attribute name="domain"/></rng:optional>