<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:meta="http://namespaces.zope.org/meta">

  <include package=".site" file="meta.zcml" />
  <include package=".browser" file="meta.zcml" />
  <include package=".form" file="meta.zcml" />

  <meta:directives namespace="http://namespaces.zope.org/zope">

    <meta:directive
        name="permission"
        schema="zope.app.security.metadirectives.IDefinePermissionDirective"
        handler="zope.app.security.metaconfigure.definePermission"
        />

    <meta:directive
        name="interface"
        schema="zope.app.component.metadirectives.IInterfaceDirective"
        handler="zope.app.component.metaconfigure.interface"
        />

    <meta:directive
        name="view"
        schema="zope.app.component.metadirectives.IViewDirective"
        handler="zope.app.component.metaconfigure.view"
        />

    <meta:directive
        name="adapter"
        schema="zope.app.component.metadirectives.IAdapterDirective"
        handler="zope.app.component.metaconfigure.adapter"
        />

    <meta:directive
        name="subscriber"
        schema="zope.app.component.metadirectives.ISubscriberDirective"
        handler="zope.app.component.metaconfigure.subscriber"
        />

    <meta:directive
        name="utility"
        schema="zope.app.component.metadirectives.IUtilityDirective"
        handler="zope.app.component.metaconfigure.utility"
        />

    <meta:directive
        name="factory"
        schema="zope.app.component.metadirectives.IFactoryDirective"
        handler="zope.app.component.metaconfigure.factory"
        />

    <meta:complexDirective
        name="class"
        schema="zope.app.component.metadirectives.IClassDirective"
        handler=".metaconfigure.ContentDirective"
        >

      <meta:subdirective
          name="implements"
          schema="zope.app.component.metadirectives.IImplementsSubdirective"
          />

      <meta:subdirective
          name="require"
          schema="zope.app.component.metadirectives.IRequireSubdirective"
          />

      <meta:subdirective
          name="allow"
          schema="zope.app.component.metadirectives.IAllowSubdirective"
          />

    </meta:complexDirective>

    <meta:complexDirective
        name="content"
        schema="zope.app.component.metadirectives.IClassDirective"
        handler=".metaconfigure.ContentDirective"
        >

      <meta:subdirective
          name="implements"
          schema="zope.app.component.metadirectives.IImplementsSubdirective"
          />

      <meta:subdirective
          name="require"
          schema="zope.app.component.metadirectives.IRequireSubdirective"
          />

      <meta:subdirective
          name="allow"
          schema="zope.app.component.metadirectives.IAllowSubdirective"
          />

    </meta:complexDirective>

    <meta:directive
        name="vocabulary"
        schema="zope.app.schema.metadirectives.IVocabularyDirective"
        handler="zope.app.schema.metaconfigure.vocabulary"
        />

    <meta:directive
        name="defaultLayer"
        schema="zope.app.component.metadirectives.IDefaultLayerDirective"
        handler="zope.app.component.metaconfigure.defaultLayer"
        />

  </meta:directives>

  <meta:directives namespace="http://namespaces.zope.org/five">

    <!-- specific to Five -->

    <meta:directive
       name="loadProducts"
       schema="zope.interface.Interface"
       handler=".fiveconfigure.loadProducts"
       />

    <meta:directive
       name="loadProductsOverrides"
       schema="zope.interface.Interface"
       handler=".fiveconfigure.loadProductsOverrides"
       />

    <meta:directive
       name="implements"
       schema=".fivedirectives.IImplementsDirective"
       handler=".fiveconfigure.implements"
       />

    <meta:directive
       name="defaultViewable"
       schema=".fivedirectives.IDefaultViewableDirective"
       handler=".fiveconfigure.defaultViewable"
       />

    <meta:directive
       name="traversable"
       schema=".fivedirectives.ITraversableDirective"
       handler=".fiveconfigure.traversable"
       />

    <meta:directive
       name="containerEvents"
       schema=".fivedirectives.IContainerEventsDirective"
       handler=".eventconfigure.containerEvents"
       />

    <meta:directive
       name="deprecatedManageAddDelete"
       schema=".fivedirectives.IDeprecatedManageAddDeleteDirective"
       handler=".eventconfigure.deprecatedManageAddDelete"
       />

    <meta:directive
       name="sizable"
       schema=".fivedirectives.ISizableDirective"
       handler=".sizeconfigure.sizable"
       />

    <meta:directive
        name="pagesFromDirectory"
        schema=".fivedirectives.IPagesFromDirectoryDirective"
        handler=".fiveconfigure.pagesFromDirectory"
        />

    <meta:directive
       name="bridge"
       schema=".fivedirectives.IBridgeDirective"
       handler=".fiveconfigure.bridge"
       />

    <meta:directive
       name="registerClass"
       schema=".fivedirectives.IRegisterClassDirective"
       handler=".fiveconfigure.registerClass"
       />

  </meta:directives>

  <meta:directive
      name="redefinePermission"
      namespace="http://namespaces.zope.org/meta"
      schema="zope.app.security.metadirectives.IRedefinePermission"
      handler="zope.app.security.metaconfigure.redefinePermission"
      />

  <!-- load the zope:modulealias directive -->
  <include package="zope.modulealias" file="meta.zcml" />

  <!-- load the i18n:registerTranslations directive -->
  <include package="zope.app.i18n" file="meta.zcml" />

</configure>
