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

-->
<project name="ASDocs Test Experimental" default="main" basedir=".">
    <property name="FLEX_HOME" value="${basedir}/../.."/>
    <property name="flexlib" location="${FLEX_HOME}/frameworks"/>

    <property file="${FLEX_HOME}/env.properties"/>
    <property environment="env"/>
    <property file="${FLEX_HOME}/build.properties"/>

    <available file="${FLEX_HOME}/../flex-tlf/textLayout"
               type="dir"
               property="TLF_HOME"
               value="${FLEX_HOME}/../flex-tlf"/>

    <available file="${FLEX_HOME}/../tlf/textLayout"
               type="dir"
               property="TLF_HOME"
               value="${FLEX_HOME}/../tlf"/>


    <target name="main" depends="clean,doc" description="Clean build of all ASDocs"/>

    <target name="clean" description="Cleans all ASDocs">
        <delete dir="${FLEX_HOME}/asdoc-output"/>
    </target>

    <target name="doc" description="generate ASDOC for SampleExperimental class">
        <path id="flexTasks.path">
            <fileset dir="${FLEX_HOME}">
                <include name="lib/flexTasks.jar"/>
            </fileset>
        </path>
        <taskdef resource="flexTasks.tasks" classpathref="flexTasks.path"/>
        <asdoc output="${FLEX_HOME}/asdoc-output" lenient="${lenient}" failonerror="true" warnings="false"
               keep-xml="true"
               skip-xsl="false"
               strict="false" locale="en_US" fork="true">
            <doc-classes class="SampleExperimental"/>
            <compiler.source-path path-element="${basedir}/doc_src"/>
        </asdoc>
    </target>
</project>
