<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE grammar SYSTEM "../relaxng.dtd">
<grammar ns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
         xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:html="http://www.w3.org/1999/xhtml"
         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0">

  <a:documentation>
    An experimental RELAX NG schema for XUL, based on
    http://xulplanet.com/references/elemref/ (as of 2003-03-27)
    This is quite incomplete, a lot of guesswork is involved.
  </a:documentation>

  <start>
    <choice>
      <ref name="XUL.allwidgets"/>
      <ref name="html.script"/>
      <ref name="window"/>
    </choice>
  </start>

  <define name="XUL.crop.attrib">
    <optional>
      <attribute name="crop" a:defaultValue="none">
        <choice>
          <value>start</value>
          <value>end</value>
          <value>center</value>
          <value>none</value>
          <value>left</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="XUL.validate.attrib">
    <optional>
      <attribute name="validate">
        <choice>
          <value>always</value>
          <value>never</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="XUL.modifiers.attrib">
    <optional>
      <attribute name="modifiers">
        <choice>
          <value>shift</value>
          <value>alt</value>
          <value>meta</value>
          <value>control</value>
          <value>accel</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="XUL.position.attrib">
    <optional>
      <attribute name="position">
        <choice>
          <value>after_start</value>
          <value>after_end</value>
          <value>before_start</value>
          <value>before_end</value>
          <value>end_after</value>
          <value>end_before</value>
          <value>start_after</value>
          <value>start_before</value>
          <value>overlap</value>
          <value>at_pointer</value>
          <value>after_pointer</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="XUL.src.attrib">
    <optional>
      <attribute name="src">
        <data type="anyURI"/>
      </attribute>
    </optional>
  </define>

  <define name="XUL.image.attrib">
    <optional>
      <attribute name="image">
        <data type="anyURI"/>
      </attribute>
    </optional>
  </define>

  <define name="XUL.Common.attrib">
    <optional>
      <attribute name="align" a:defaultValue="stretch">
        <choice>
          <value>start</value>
          <value>center</value>
          <value>end</value>
          <value>baseline</value>
          <value>stretch</value>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="allowevents">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="allownegativeassertions" a:defaultValue="true">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="class">
        <data type="NMTOKENS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="coalesceduplicatearcs" a:defaultValue="true">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="collapsed">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="container">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="containment"/>
    </optional>
    <optional>
      <attribute name="context"/>
    </optional>
    <optional>
      <attribute name="contextmenu"/>
    </optional>
    <optional>
      <attribute name="datasources"/>
    </optional>
    <optional>
      <attribute name="debug">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="dir">
        <choice>
          <value>ltr</value>
          <value>rtl</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="empty">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="equalsize" a:defaultValue="never">
        <choice>
          <value>always</value>
          <value>never</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="flags">
        <choice>
          <value>dont-test-empty</value>
          <value>dont-build-content</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="flex"/>
    </optional>
    <optional>
      <attribute name="flexgroup"/>
    </optional>
    <optional>
      <attribute name="height"/>
    </optional>
    <optional>
      <attribute name="hidden">
        <choice>
          <value>hidden</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="insertafter"/>
    </optional>
    <optional>
      <attribute name="insertbefore"/>
    </optional>
    <optional>
      <attribute name="left"/>
    </optional>
    <optional>
      <attribute name="maxheight"/>
    </optional>
    <optional>
      <attribute name="maxwidth"/>
    </optional>
    <optional>
      <attribute name="menu"/>
    </optional>
    <optional>
      <attribute name="minheight"/>
    </optional>
    <optional>
      <attribute name="minwidth"/>
    </optional>
    <optional>
      <attribute name="observes">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="ordinal"/>
    </optional>
    <optional>
      <attribute name="orient">
        <choice>
          <value>horizontal</value>
          <value>vertical</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="pack" a:defaultValue="start">
        <choice>
          <value>start</value>
          <value>center</value>
          <value>end</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="persist">
        <data type="NMTOKENS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="popup">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="position"/>
    </optional>
    <optional>
      <attribute name="ref"/>
    </optional>
    <optional>
      <attribute name="removeelement"/>
    </optional>
    <optional>
      <attribute name="statustext"/>
    </optional>
    <optional>
      <attribute name="style"/>
    </optional>
    <optional>
      <attribute name="template"/>
    </optional>
    <optional>
      <attribute name="tooltip">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="tooltiptext"/>
    </optional>
    <optional>
      <attribute name="top"/>
    </optional>
    <optional>
      <attribute name="uri"/>
    </optional>
    <optional>
      <attribute name="width"/>
    </optional>
  </define>

  <define name="XUL.allwidgets">
    <choice>
      <ref name="arrowscrollbox"/>
      <ref name="autorepeatbutton"/>
      <ref name="box"/>
      <ref name="broadcasterset"/>
      <ref name="button"/>
      <ref name="browser"/>
      <ref name="checkbox"/>
      <ref name="colorpicker"/>
      <ref name="deck"/>
      <ref name="description"/>
      <ref name="dialog"/>
      <ref name="editor"/>
      <ref name="grid"/>
      <ref name="grippy"/>
      <ref name="groupbox"/>
      <ref name="hbox"/>
      <ref name="iframe"/>
      <ref name="image"/>
      <ref name="keyset"/>
      <ref name="label"/>
      <ref name="listbox"/>
      <ref name="menu"/>
      <ref name="menubar"/>
      <ref name="menulist"/>
      <ref name="menupopup"/>
      <ref name="observes"/>
      <ref name="overlay"/>
      <ref name="page"/>
      <ref name="popup"/>
      <ref name="popupset"/>
      <ref name="progressmeter"/>
      <ref name="radio"/>
      <ref name="radiogroup"/>
      <ref name="scrollbox"/>
      <ref name="resizer"/>
      <ref name="resourcebundle"/>
      <ref name="rule"/>
      <ref name="script"/>
      <ref name="scrollbar"/>
      <ref name="scrollbarbutton"/>
      <ref name="scrollbox"/>
      <ref name="separator"/>
      <ref name="slider"/>
      <ref name="spacer"/>
      <ref name="splitter"/>
      <ref name="stack"/>
      <ref name="statusbar"/>
      <ref name="statusbarpanel"/>
      <ref name="stringbundleset"/>
      <ref name="tabbox"/>
      <ref name="tabbrowser"/>
      <ref name="tabpanels"/>
      <ref name="template"/>
      <ref name="textnode"/>
      <ref name="textbox"/>
      <ref name="thumb"/>
      <ref name="titlebar"/>
      <ref name="toolbar"/>
      <ref name="toolbarbutton"/>
      <ref name="toolbargrippy"/>
      <ref name="toolbarset"/>
      <ref name="toolbox"/>
      <ref name="tooltip"/>
      <ref name="tree"/>
      <ref name="vbox"/>
      <ref name="wizard"/>
    </choice>
  </define>

  <!-- ??? -->
  <define name="action">
    <element name="action">
      <ref name="attlist.action"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.action" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <!-- ??? -->
  <define name="arrowscrollbox">
    <element name="arrowscrollbox">
      <ref name="attlist.arrowscrollbox"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.arrowscrollbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <!-- ??? -->
  <define name="autorepeatbutton">
    <element name="autorepeatbutton">
      <ref name="attlist.autorepeatbutton"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.autorepeatbutton" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="binding">
    <element name="binding">
      <ref name="attlist.binding"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.binding" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="object"/>
    </optional>
    <optional>
      <attribute name="predicate"/>
    </optional>
    <optional>
      <attribute name="subject"/>
    </optional>
  </define>

  <define name="bindings">
    <element name="bindings">
      <ref name="attlist.bindings"/>
      <oneOrMore>
        <ref name="binding"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.bindings" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="box">
    <element name="box">
      <ref name="attlist.box"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.box" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="broadcaster">
    <element name="broadcaster">
      <ref name="attlist.broadcaster"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.broadcaster" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="broadcasterset">
    <element name="broadcasterset">
      <ref name="attlist.broadcasterset"/>
      <oneOrMore>
        <ref name="broadcaster"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.broadcasterset" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="button">
    <element name="button">
      <ref name="attlist.button"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.button" combine="interleave">
    <optional>
      <attribute name="orient" a:defaultValue="horizontal">
        <choice>
          <value>horizontal</value>
          <value>vertical</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="align" a:defaultValue="stretch">
        <choice>
          <value>start</value>
          <value>center</value>
          <value>end</value>
          <value>baseline</value>
          <value>stretch</value>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="allowevents">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="allownegativeassertions" a:defaultValue="true">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="class">
        <data type="NMTOKENS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="coalesceduplicatearcs" a:defaultValue="true">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="collapsed">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="container">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="containment"/>
    </optional>
    <optional>
      <attribute name="context"/>
    </optional>
    <optional>
      <attribute name="contextmenu"/>
    </optional>
    <optional>
      <attribute name="datasources"/>
    </optional>
    <optional>
      <attribute name="debug">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="dir">
        <choice>
          <value>ltr</value>
          <value>rtl</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="empty">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="equalsize" a:defaultValue="never">
        <choice>
          <value>always</value>
          <value>never</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="flags">
        <choice>
          <value>dont-test-empty</value>
          <value>dont-build-content</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="flex"/>
    </optional>
    <optional>
      <attribute name="flexgroup"/>
    </optional>
    <optional>
      <attribute name="height"/>
    </optional>
    <optional>
      <attribute name="hidden">
        <choice>
          <value>hidden</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="insertafter"/>
    </optional>
    <optional>
      <attribute name="insertbefore"/>
    </optional>
    <optional>
      <attribute name="left"/>
    </optional>
    <optional>
      <attribute name="maxheight"/>
    </optional>
    <optional>
      <attribute name="maxwidth"/>
    </optional>
    <optional>
      <attribute name="menu"/>
    </optional>
    <optional>
      <attribute name="minheight"/>
    </optional>
    <optional>
      <attribute name="minwidth"/>
    </optional>
    <optional>
      <attribute name="observes">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="ordinal"/>
    </optional>
    <optional>
      <attribute name="pack" a:defaultValue="start">
        <choice>
          <value>start</value>
          <value>center</value>
          <value>end</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="persist">
        <data type="NMTOKENS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="popup">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="position"/>
    </optional>
    <optional>
      <attribute name="ref"/>
    </optional>
    <optional>
      <attribute name="removeelement"/>
    </optional>
    <optional>
      <attribute name="statustext"/>
    </optional>
    <optional>
      <attribute name="style"/>
    </optional>
    <optional>
      <attribute name="template"/>
    </optional>
    <optional>
      <attribute name="tooltip">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="tooltiptext"/>
    </optional>
    <optional>
      <attribute name="top"/>
    </optional>
    <optional>
      <attribute name="uri"/>
    </optional>
    <optional>
      <attribute name="width"/>
    </optional>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="autoCheck"/>
    </optional>
    <optional>
      <attribute name="checkState"/>
    </optional>
    <optional>
      <attribute name="checked">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="dlgType">
        <choice>
          <value>accept</value>
          <value>cance</value>
          <value>help</value>
          <value>disclosure</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="group"/>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="open"/>
    </optional>
    <optional>
      <attribute name="tabindex"/>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>checkbox</value>
          <value>menu</value>
          <value>menu-button</value>
          <value>radio</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="browser">
    <element name="browser">
      <ref name="attlist.browser"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="XUL.allwidgets"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.browser" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.src.attrib"/>
  </define>

  <define name="checkbox">
    <element name="checkbox">
      <ref name="attlist.checkbox"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.checkbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="checked">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="tabindex"/>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="caption">
    <element name="caption">
      <ref name="attlist.caption"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.caption" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
  </define>

  <define name="colorpicker">
    <element name="colorpicker">
      <ref name="attlist.colorpicker"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.colorpicker" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="color"/>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>button</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="column">
    <element name="column">
      <ref name="attlist.column"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.column" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="columns">
    <element name="columns">
      <ref name="attlist.columns"/>
      <oneOrMore>
        <ref name="column"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.columns" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <!-- ??? -->
  <define name="commands">
    <element name="commands">
      <ref name="attlist.commands"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.commands" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="commandset">
    <element name="commandset">
      <ref name="attlist.commandset"/>
      <oneOrMore>
        <ref name="command"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.commandset" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="commandupdater">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="events"/>
    </optional>
    <optional>
      <attribute name="oncommandupdate"/>
    </optional>
  </define>

  <define name="command">
    <element name="command">
      <ref name="attlist.command"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.command" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="oncommand"/>
    </optional>
  </define>

  <define name="conditions">
    <element name="conditions">
      <ref name="attlist.conditions"/>
      <ref name="content"/>
      <ref name="member"/>
      <zeroOrMore>
        <ref name="triple"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.conditions" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

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

  <define name="attlist.content" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="deck">
    <element name="deck">
      <ref name="attlist.deck"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.deck" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="selectedIndex"/>
    </optional>
  </define>

  <define name="description">
    <element name="description">
      <ref name="attlist.description"/>
      <text/>
    </element>
  </define>

  <define name="attlist.description" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="dialog">
    <element name="dialog">
      <ref name="attlist.dialog"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.dialog" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="buttonalign"/>
    </optional>
    <optional>
      <attribute name="buttondir">
        <choice>
          <value>rtl</value>
          <value>ltr</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="buttonorient" a:defaultValue="horizontal">
        <choice>
          <value>horizontal</value>
          <value>vertical</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="buttonpack"/>
    </optional>
    <optional>
      <attribute name="buttons"/>
    </optional>
    <optional>
      <attribute name="ondialogaccept"/>
    </optional>
    <optional>
      <attribute name="ondialogcancel"/>
    </optional>
    <optional>
      <attribute name="ondialogdisclosure"/>
    </optional>
    <optional>
      <attribute name="ondialoghelp"/>
    </optional>
    <optional>
      <attribute name="title"/>
    </optional>
  </define>

  <define name="editor">
    <element name="editor">
      <ref name="attlist.editor"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="XUL.allwidgets"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.editor" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.src.attrib"/>
  </define>

  <define name="grid">
    <element name="grid">
      <ref name="attlist.grid"/>
      <choice>
        <group>
          <ref name="columns"/>
          <ref name="rows"/>
        </group>
        <group>
          <ref name="rows"/>
          <ref name="columns"/>
        </group>
      </choice>
    </element>
  </define>

  <define name="attlist.grid" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="grippy">
    <element name="grippy">
      <ref name="attlist.grippy"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.grippy" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="groupbox">
    <element name="groupbox">
      <ref name="attlist.groupbox"/>
      <ref name="caption"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.groupbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="hbox">
    <element name="hbox">
      <ref name="attlist.hbox"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.hbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="html.script">
    <element name="html:script">
      <ref name="attlist.html.script"/>
      <text/>
    </element>
  </define>

  <define name="attlist.html.script" combine="interleave">
    <optional>
      <attribute name="charset"/>
    </optional>
    <attribute name="type"/>
    <ref name="XUL.src.attrib"/>
    <optional>
      <attribute name="defer">
        <choice>
          <value>defer</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space" a:defaultValue="preserve">
        <value>preserve</value>
      </attribute>
    </optional>
  </define>

  <!-- The children of the iframe are ignored. -->
  <define name="iframe">
    <element name="iframe">
      <ref name="attlist.iframe"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="XUL.allwidgets"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.iframe" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.src.attrib"/>
  </define>

  <define name="image">
    <element name="image">
      <ref name="attlist.image"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.image" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="onerror"/>
    </optional>
    <optional>
      <attribute name="onload"/>
    </optional>
    <ref name="XUL.src.attrib"/>
    <ref name="XUL.validate.attrib"/>
  </define>

  <define name="key">
    <element name="key">
      <ref name="attlist.key"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.key" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="cancel">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="charcode"/>
    </optional>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="keycode"/>
    </optional>
    <ref name="XUL.modifiers.attrib"/>
  </define>

  <define name="keyset">
    <element name="keyset">
      <ref name="attlist.keyset"/>
      <oneOrMore>
        <ref name="key"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.keyset" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="label">
    <element name="label">
      <ref name="attlist.label"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.label" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="control">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="listbox">
    <element name="listbox">
      <ref name="attlist.listbox"/>
      <optional>
        <ref name="listhead"/>
      </optional>
      <optional>
        <ref name="listcol"/>
      </optional>
      <oneOrMore>
        <ref name="listitem"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.listbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="rows"/>
    </optional>
    <optional>
      <attribute name="seltype">
        <choice>
          <value>single</value>
          <value>multiple</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="suppressonselect"/>
    </optional>
  </define>

  <define name="listcol">
    <element name="listcol">
      <ref name="attlist.listcol"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.listcol" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="listcols">
    <element name="listcols">
      <ref name="attlist.listcols"/>
      <oneOrMore>
        <ref name="listcol"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.listcols" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="listhead">
    <element name="listhead">
      <ref name="attlist.listhead"/>
      <oneOrMore>
        <ref name="listheader"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.listhead" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="listheader">
    <element name="listheader">
      <ref name="attlist.listheader"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.listheader" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
  </define>

  <define name="listitem">
    <element name="listitem">
      <ref name="attlist.listitem"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.listitem" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="checked">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="current">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="tabindex"/>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>checkbox</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="member">
    <element name="member">
      <ref name="attlist.member"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.member" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="child"/>
    </optional>
  </define>

  <define name="menu">
    <element name="menu">
      <ref name="attlist.menu"/>
      <oneOrMore>
        <ref name="menupopup"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.menu" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
  </define>

  <define name="menubar">
    <element name="menubar">
      <ref name="attlist.menubar"/>
      <oneOrMore>
        <ref name="menu"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.menubar" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <!-- ??? -->
  <define name="menuitem">
    <element name="menuitem">
      <ref name="attlist.menuitem"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.menuitem" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="checked">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="key">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="label"/>
    </optional>
    <ref name="XUL.modifiers.attrib"/>
    <optional>
      <attribute name="name"/>
    </optional>
    <optional>
      <attribute name="selected"/>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>checkbox</value>
          <value>radio</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.validate.attrib"/>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="menulist">
    <element name="menulist">
      <ref name="attlist.menulist"/>
      <ref name="menupopup"/>
    </element>
  </define>

  <define name="attlist.menulist" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="editable">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="menupopup">
    <element name="menupopup">
      <ref name="attlist.menupopup"/>
      <oneOrMore>
        <choice>
          <ref name="menuitem"/>
          <ref name="menuseparator"/>
        </choice>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.menupopup" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="oncontextmenu"/>
    </optional>
    <optional>
      <attribute name="onpopuphidden"/>
    </optional>
    <optional>
      <attribute name="onpopuphiding"/>
    </optional>
    <optional>
      <attribute name="onpopupshowing"/>
    </optional>
    <optional>
      <attribute name="onpopupshown"/>
    </optional>
  </define>

  <define name="menuseparator">
    <element name="menuseparator">
      <ref name="attlist.menuseparator"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.menuseparator" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="observes">
    <element name="observes">
      <ref name="attlist.observes"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.observes" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="attribute"/>
    </optional>
    <optional>
      <attribute name="element">
        <data type="IDREF"/>
      </attribute>
    </optional>
  </define>

  <define name="overlay">
    <element name="overlay">
      <ref name="attlist.overlay"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.overlay" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="page">
    <element name="page">
      <ref name="attlist.page"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.page" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="popup">
    <element name="popup">
      <ref name="attlist.popup"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.popup" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="onpopuphidden"/>
    </optional>
    <optional>
      <attribute name="onpopuphiding"/>
    </optional>
    <optional>
      <attribute name="onpopupshowing"/>
    </optional>
    <optional>
      <attribute name="onpopupshown"/>
    </optional>
  </define>

  <define name="popupset">
    <element name="popupset">
      <ref name="attlist.popupset"/>
      <oneOrMore>
        <ref name="popup"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.popupset" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="progressmeter">
    <element name="progressmeter">
      <ref name="attlist.progressmeter"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.progressmeter" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="mode" a:defaultValue="determined">
        <choice>
          <value>determined</value>
          <value>undetermined</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="radio">
    <element name="radio">
      <ref name="attlist.radio"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.radio" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="focused">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="selected"/>
    </optional>
    <optional>
      <attribute name="tabindex"/>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="radiogroup">
    <element name="radiogroup">
      <ref name="attlist.radiogroup"/>
      <ref name="caption"/>
      <zeroOrMore>
        <ref name="radio"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.radiogroup" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="resizer">
    <element name="resizer">
      <ref name="attlist.resizer"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.resizer" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="resizerdirection">
        <choice>
          <value>topleft</value>
          <value>top</value>
          <value>topright</value>
          <value>left</value>
          <value>right</value>
          <value>bottomleft</value>
          <value>bottomright</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="resourcebundle">
    <element name="resourcebundle">
      <ref name="attlist.resourcebundle"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.resourcebundle" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="row">
    <element name="row">
      <ref name="attlist.row"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.row" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="rows">
    <element name="rows">
      <ref name="attlist.rows"/>
      <oneOrMore>
        <ref name="row"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.rows" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="rule">
    <element name="rule">
      <ref name="attlist.rule"/>
      <ref name="conditions"/>
      <ref name="action"/>
      <optional>
        <ref name="bindings"/>
      </optional>
    </element>
  </define>

  <define name="attlist.rule" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="iscontainer">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="isempty">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="parent">
        <data type="IDREF"/>
      </attribute>
    </optional>
  </define>

  <define name="script">
    <element name="script">
      <ref name="attlist.script"/>
      <text/>
    </element>
  </define>

  <define name="attlist.script" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.src.attrib"/>
    <optional>
      <attribute name="type"/>
    </optional>
  </define>

  <define name="scrollbar">
    <element name="scrollbar">
      <ref name="attlist.scrollbar"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.scrollbar" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="curpos" a:defaultValue="0"/>
    </optional>
    <optional>
      <attribute name="increment" a:defaultValue="1"/>
    </optional>
    <optional>
      <attribute name="maxpos" a:defaultValue="100"/>
    </optional>
    <optional>
      <attribute name="pageincrement" a:defaultValue="10"/>
    </optional>
  </define>

  <define name="scrollbarbutton">
    <element name="scrollbarbutton">
      <ref name="attlist.scrollbarbutton"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.scrollbarbutton" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>decrement</value>
          <value>increment</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="scrollbox">
    <element name="scrollbox">
      <ref name="attlist.scrollbox"/>
      <oneOrMore>
        <ref name="scrollbar"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.scrollbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="separator">
    <element name="separator">
      <ref name="attlist.separator"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.separator" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="slider">
    <element name="slider">
      <ref name="attlist.slider"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.slider" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="curpos" a:defaultValue="0"/>
    </optional>
    <optional>
      <attribute name="increment" a:defaultValue="1"/>
    </optional>
    <optional>
      <attribute name="maxpos" a:defaultValue="100"/>
    </optional>
    <optional>
      <attribute name="pageincrement" a:defaultValue="10"/>
    </optional>
  </define>

  <define name="spacer">
    <element name="spacer">
      <ref name="attlist.spacer"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.spacer" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="splitter">
    <element name="splitter">
      <ref name="attlist.splitter"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.splitter" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="collapse" a:defaultValue="none">
        <choice>
          <value>none</value>
          <value>before</value>
          <value>after</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="resizeafter" a:defaultValue="closest">
        <choice>
          <value>closest</value>
          <value>farthest</value>
          <value>grow</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="resizebefore" a:defaultValue="closest">
        <choice>
          <value>closest</value>
          <value>farthest</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="stack">
    <element name="stack">
      <ref name="attlist.stack"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.stack" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="statusbar">
    <element name="statusbar">
      <ref name="attlist.statusbar"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.statusbar" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="statusbarpanel">
    <element name="statusbarpanel">
      <ref name="attlist.statusbarpanel"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.statusbarpanel" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="tabindex"/>
    </optional>
    <optional>
      <attribute name="type"/>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <define name="stringbundle">
    <element name="stringbundle">
      <ref name="attlist.stringbundle"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.stringbundle" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.src.attrib"/>
  </define>

  <define name="stringbundleset">
    <element name="stringbundleset">
      <ref name="attlist.stringbundleset"/>
      <oneOrMore>
        <ref name="stringbundle"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.stringbundleset" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="tab">
    <element name="tab">
      <ref name="attlist.tab"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.tab" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="afterselected">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="beforeselected">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="selected"/>
    </optional>
  </define>

  <define name="tabbrowser">
    <element name="tabbrowser">
      <ref name="attlist.tabbrowser"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.tabbrowser" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="contextcontextmenu"/>
    </optional>
    <optional>
      <attribute name="contenttooltip"/>
    </optional>
  </define>

  <define name="tabbox">
    <element name="tabbox">
      <ref name="attlist.tabbox"/>
      <ref name="tabs"/>
      <ref name="tabpanels"/>
    </element>
  </define>

  <define name="attlist.tabbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="selectedIndex"/>
    </optional>
    <optional>
      <attribute name="selectedPanel"/>
    </optional>
    <optional>
      <attribute name="selectedTab"/>
    </optional>
  </define>

  <define name="tabpanel">
    <element name="tabpanel">
      <ref name="attlist.tabpanel"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.tabpanel" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="tabpanels">
    <element name="tabpanels">
      <ref name="attlist.tabpanels"/>
      <oneOrMore>
        <ref name="tabpanel"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.tabpanels" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="selectedIndex"/>
    </optional>
  </define>

  <define name="tabs">
    <element name="tabs">
      <ref name="attlist.tabs"/>
      <oneOrMore>
        <ref name="tab"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.tabs" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="template">
    <element name="template">
      <ref name="attlist.template"/>
      <ref name="rule"/>
    </element>
  </define>

  <define name="attlist.template" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="textnode">
    <element name="textnode">
      <ref name="attlist.textnode"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.textnode" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <!-- ??? -->
  <define name="textbox">
    <element name="textbox">
      <ref name="attlist.textbox"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.textbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="focused">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="multiline">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="oninput"/>
    </optional>
    <optional>
      <attribute name="readonly">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="size"/>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>password</value>
          <value>autocomplete</value>
          <value>text</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
    <optional>
      <attribute name="wrap"/>
    </optional>
  </define>

  <define name="thumb">
    <element name="thumb">
      <ref name="attlist.thumb"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.thumb" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="titlebar">
    <element name="titlebar">
      <ref name="attlist.titlebar"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.titlebar" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <!-- ??? -->
  <define name="toolbar">
    <element name="toolbar">
      <ref name="attlist.toolbar"/>
      <oneOrMore>
        <ref name="toolbarbutton"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.toolbar" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="currentset"/>
    </optional>
    <optional>
      <attribute name="customindex"/>
    </optional>
    <optional>
      <attribute name="customizable">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="defaultset"/>
    </optional>
    <optional>
      <attribute name="grippyhidden" a:defaultValue="false">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="iconsize">
        <choice>
          <value>small</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mode">
        <choice>
          <value>icons</value>
          <value>text</value>
          <value>full</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="toolbarname"/>
    </optional>
  </define>

  <define name="toolbarbutton">
    <element name="toolbarbutton">
      <ref name="attlist.toolbarbutton"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.toolbarbutton" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="accesskey"/>
    </optional>
    <optional>
      <attribute name="command">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>true</value>
        </choice>
      </attribute>
    </optional>
    <ref name="XUL.image.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="tabindex"/>
    </optional>
    <optional>
      <attribute name="type"/>
    </optional>
    <ref name="XUL.validate.attrib"/>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>

  <!-- ??? -->
  <define name="toolbargrippy">
    <element name="toolbargrippy">
      <ref name="attlist.toolbargrippy"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.toolbargrippy" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <!-- ??? -->
  <define name="toolbaritem">
    <element name="toolbaritem">
      <ref name="attlist.toolbaritem"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.toolbaritem" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <!-- ??? -->
  <define name="toolbarpalette">
    <element name="toolbarpalette">
      <ref name="attlist.toolbarpalette"/>
      <zeroOrMore>
        <choice>
          <ref name="toolbarbutton"/>
          <ref name="toolbaritem"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.toolbarpalette" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="toolbarseparator">
    <element name="toolbarseparator">
      <ref name="attlist.toolbarseparator"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.toolbarseparator" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
  </define>

  <!-- ??? -->
  <define name="toolbarset">
    <element name="toolbarset">
      <ref name="attlist.toolbarset"/>
      <oneOrMore>
        <ref name="toolbar"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.toolbarset" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="toolbox">
    <element name="toolbox">
      <ref name="attlist.toolbox"/>
      <oneOrMore>
        <ref name="toolbar"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.toolbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="iconsize">
        <choice>
          <value>small</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mode">
        <choice>
          <value>icons</value>
          <value>text</value>
          <value>full</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="tooltip">
    <element name="tooltip">
      <ref name="attlist.tooltip"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.tooltip" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="default">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="onpopuphidden"/>
    </optional>
    <optional>
      <attribute name="onpopuphiding"/>
    </optional>
    <optional>
      <attribute name="onpopupshowing"/>
    </optional>
    <optional>
      <attribute name="onpopupshown"/>
    </optional>
  </define>

  <define name="tree">
    <element name="tree">
      <ref name="attlist.tree"/>
      <ref name="treecols"/>
      <ref name="treechildren"/>
    </element>
  </define>

  <define name="attlist.tree" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="enableColumnDrag">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="hidecolumnpicker" a:defaultValue="false">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="onselect"/>
    </optional>
    <optional>
      <attribute name="seltype">
        <choice>
          <value>single</value>
          <value>multiple</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="treecell">
    <element name="treecell">
      <ref name="attlist.treecell"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.treecell" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="properties"/>
    </optional>
  </define>

  <define name="treechildren">
    <element name="treechildren">
      <ref name="attlist.treechildren"/>
      <oneOrMore>
        <ref name="treeitem"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.treechildren" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="treecol">
    <element name="treecol">
      <ref name="attlist.treecol"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.treecol" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <ref name="XUL.crop.attrib"/>
    <optional>
      <attribute name="cycler">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="fixed">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="primary">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="sort"/>
    </optional>
    <optional>
      <attribute name="sortActive">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="sortDirection" a:defaultValue="ascending">
        <choice>
          <value>ascending</value>
          <value>descending</value>
          <value>natural</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="treecols">
    <element name="treecols">
      <ref name="attlist.treecols"/>
      <oneOrMore>
        <ref name="treecol"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.treecols" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="treeitem">
    <element name="treeitem">
      <ref name="attlist.treeitem"/>
      <oneOrMore>
        <ref name="treerow"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.treeitem" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="open">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="treerow">
    <element name="treerow">
      <ref name="attlist.treerow"/>
      <oneOrMore>
        <ref name="treecell"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.treerow" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="treeseparator">
    <element name="treeseparator">
      <ref name="attlist.treeseparator"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.treeseparator" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="triple">
    <element name="triple">
      <ref name="attlist.triple"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.triple" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="object"/>
    </optional>
    <optional>
      <attribute name="predicate"/>
    </optional>
    <optional>
      <attribute name="subject"/>
    </optional>
  </define>

  <define name="vbox">
    <element name="vbox">
      <ref name="attlist.vbox"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.vbox" combine="interleave">
    <ref name="XUL.Common.attrib"/>
  </define>

  <define name="window">
    <element name="window">
      <ref name="attlist.window"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.window" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="screenX"/>
    </optional>
    <optional>
      <attribute name="screenY"/>
    </optional>
    <optional>
      <attribute name="sizemode" a:defaultValue="normal">
        <choice>
          <value>maximized</value>
          <value>minimized</value>
          <value>normal</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="title"/>
    </optional>
    <optional>
      <attribute name="windowtype"/>
    </optional>
  </define>

  <define name="wizard">
    <element name="wizard">
      <ref name="attlist.wizard"/>
      <oneOrMore>
        <ref name="wizardpage"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.wizard" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="onwizardback"/>
    </optional>
    <optional>
      <attribute name="onwizardcancel"/>
    </optional>
    <optional>
      <attribute name="onwizardfinish"/>
    </optional>
    <optional>
      <attribute name="onwizardnext"/>
    </optional>
    <optional>
      <attribute name="onwizardhelp"/>
    </optional>
    <optional>
      <attribute name="title"/>
    </optional>
  </define>

  <define name="wizardpage">
    <element name="wizardpage">
      <ref name="attlist.wizardpage"/>
      <zeroOrMore>
        <ref name="XUL.allwidgets"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.wizardpage" combine="interleave">
    <ref name="XUL.Common.attrib"/>
    <optional>
      <attribute name="description"/>
    </optional>
    <optional>
      <attribute name="label"/>
    </optional>
    <optional>
      <attribute name="next"/>
    </optional>
    <optional>
      <attribute name="onpageadvanced"/>
    </optional>
    <optional>
      <attribute name="onpagehide"/>
    </optional>
    <optional>
      <attribute name="onpagerewound"/>
    </optional>
    <optional>
      <attribute name="onpageshow"/>
    </optional>
    <optional>
      <attribute name="pageid"/>
    </optional>
  </define>

</grammar>
