<?xml version="1.0"?>
<!--
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/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
  <properties>
    <title>Usage of Apache Doxia Eclipse Editors</title>
    <author email="vsiveton@apache.org">Vincent Siveton</author>
  </properties>

  <body>
    <section name="Usage">
      <p>
        Apache Doxia Eclipse Editors is a set of editors and wizards for Eclipse to support all
        <a href="/doxia/references/index.html">Apache Doxia formats</a>
        i.e. APT, Confluence, Simplified DocBook, FML, TWiki, XDOC and Xhtml.
      </p>
      <subsection name="Edit/view">
         <a href="./images/edit.png">
           <img src="./images/edit.png" alt="Edit" id="edit" style="width:400px;height:300px;border:1px solid black;"/>
         </a>
         <a href="./images/view.png">
           <img src="./images/view.png" alt="view" id="view" style="width:400px;height:300px;border:1px solid black;"/>
         </a>
      </subsection>
      <subsection name="Features">
        <p>
          You can modify the text styles using the menu bar or using the right click button. You can also create Doxia
          files using Wizard.
        </p>
        <ul>
        <li><img src="./images/styles.png" alt="Styles" style="border:1px solid black;"/></li>
        <li><img src="./images/styles-click.png" alt="Styles" style="border:1px solid black;"/></li>
        <li><img src="./images/wizard.png" alt="Wizard" style="border:1px solid black;"/></li>
        </ul>
      </subsection>

      <!-- FancyZoom -->
      <script src="./FancyZoom1.1/js-global/FancyZoom.js" type="text/javascript"></script>
      <script src="./FancyZoom1.1/js-global/FancyZoomHTML.js" type="text/javascript"></script>
      <script type="text/javascript">
      //<![CDATA[
      setupZoom();
      //]]>
      </script>
    </section>
  </body>
</document>
