<?xml version="1.0" encoding="UTF-8"?>

<!--
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
 -->
<document xmlns="http://maven.apache.org/DOCUMENT/1.0.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DOCUMENT/1.0.1 ../../../doxia/doxia-core/target/generated-site/xsd/document-1.0.1.xsd"
  outputName="doxia-${doxiaVersion}">

  <meta>
    <title>Apache Maven Doxia</title>
    <author>The Apache Maven Project</author>
    <keyWords>
      <keyWord>Content generation framework</keyWord>
      <keyWord>Lightweight markup language</keyWord>
      <keyWord>APT</keyWord>
      <keyWord>FML</keyWord>
      <keyWord>XDOC</keyWord>
    </keyWords>
  </meta>

  <toc name="Table of Contents">
    <item name="What is Doxia?" ref="index.html"/>
    <item name="Overview" ref="overview.html"/>
    <item name="FAQ" ref="faq.html"/>
    <item name="What's new in 1.1" ref="whatsnew-1.1.html"/>
    <item name="References" ref="references/index.html"/>
    <item name="Apt Format" ref="references/apt-format.html"/>
    <item name="Doxia Apt Enhancements" ref="references/doxia-apt.html"/>
    <item name="FML Format" ref="references/fml-format.html"/>
    <item name="Xdoc Format" ref="references/xdoc-format.html"/>
    <item name="Doxia Modules Guide" ref="modules/index.html"/>
    <item name="Doxia Macros Guide" ref="macros/index.html"/>
    <item name="Writing Books" ref="book/index.html"/>
    <item name="Developer Centre" ref="developers/index.html"/>
    <item name="Create a Doxia Module" ref="developers/modules.html"/>
    <item name="Create a Doxia Macro" ref="developers/macros.html"/>
    <item name="Using the Sink API" ref="developers/sink.html"/>
    <item name="Integration With Maven" ref="developers/maven-integration.html"/>
      <!-- MSITE-333: remove double-amp when fixed -->
      <item name="Issues &amp;amp; Gotchas" ref="issues/index.html"/>
    <item name="External Resources" ref="resources.html"/>
  </toc>

  <cover>
    <coverTitle>Apache Maven Doxia</coverTitle>
    <coverSubTitle>v. ${doxiaVersion}</coverSubTitle>
    <coverType>User Guide</coverType>
    <companyName>The Apache Software Foundation</companyName>
    <projectLogo>./images/doxia-logo.png</projectLogo>
  </cover>
</document>
