<?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>

  <properties>
    <author email="dev@commons.apache.org">commons-dev</author>
    <title>Examples</title>
  </properties>

  <body>
    <section name="Overview">
      <p>
        The examples section aims to show how a variety of applications and 
        tools could be modelled using CLI2.  We make no claim that these tools 
        use CLI2 in their implementation but simply use their interfaces to 
        demonstrate commonly needed features.  Some examples will make 
        simplifications to keep the documentation consise.
      </p>
      <p>
        Many aspects of the API are touched upon but few are described in 
        great detail.  If more information is required then the reader is 
        encouraged to review the API documentation and look at the unit tests 
        for inspiration.  Failing that, further advice and discussion can be 
        found on the <code>user@commons.apache.org</code> mailing list.
      </p>
    </section>

    <section name="Examples">
      <ul>
        <li><a href="ant.html">ant</a></li>
      </ul>
    </section>
  </body>
</document>
