<project default="all" basedir="..">
  <path id="lib.path">
    <fileset dir="util/java" includes="*.jar"/>
  </path>
  <taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
      <pathelement location="util/java/ant-contrib-1.0b3.jar"/>
    </classpath>
  </taskdef>
  <taskdef resource="svntask.properties" classpathref="lib.path"/>
  <target name="all" description="Executes all-pack, all-docs, and all-setalltypes targets.">
    <foreach param="LIBLOC" target="pack">
      <path>
        <dirset dir="${basedir}" includes="*" excludes="util"/>
      </path>
    </foreach>
    <foreach param="LIBLOC" target="docs">
      <path>
        <dirset dir="${basedir}" includes="*" excludes="util"/>
      </path>
    </foreach>
    <foreach param="LIBLOC" target="setalltypes">
      <path>
        <dirset dir="${basedir}" includes="*" excludes="util"/>
      </path>
    </foreach>
  </target>
  <target name="all-pack" description="Pack (compress) all non-packed JS files.">
    <foreach param="LIBLOC" target="pack">
      <path>
        <dirset dir="${basedir}" includes="*" excludes="util"/>
      </path>
    </foreach>
  </target>
  <target name="all-docs" description="Generate HTML documentation from all non-packed JS files.">
    <foreach param="LIBLOC" target="docs">
      <path>
        <dirset dir="${basedir}" includes="*" excludes="util"/>
      </path>
    </foreach>
  </target>
  <target name="all-setalltypes" description="Set correct MIME types in SVN for CSS, JS, XML, and HTML files.">
    <foreach param="LIBLOC" target="setalltypes">
      <path>
        <dirset dir="${basedir}" includes="*" excludes="util"/>
      </path>
    </foreach>
  </target>
  <target name="docs" description="Generates reference documentation.">
    <fileset id="LIBRARY" dir="${LIBLOC}" includes="src/*.js" excludes="src/*_packed.js"/>
    <property name="LIBRARY" refid="LIBRARY"></property>
    <java failonerror="true" jar="${basedir}/util/docs/jsdoc-toolkit/jsrun.jar" fork="true">
      <arg value="${basedir}/util/docs/jsdoc-toolkit/app/run.js"/>
      <arg value="--allfunctions"/>
      <arg value="--verbose"/>
      <arg value="--suppress"/>
      <arg value="--template=${basedir}/util/docs/template/"/>
      <arg value="--directory=${LIBLOC}/docs/"/>
      <arg value="${LIBLOC}/${LIBRARY}"/>
    </java>
  </target>
  <target name="setalltypes" description="Sets svn mime-types.">
    <!-- html -->
    <foreach param="FILE" target="propset">
      <path>
        <fileset dir="${LIBLOC}" includes="**/*.html"/>
      </path>
      <param name="MIMETYPE" value="text/html"/>
    </foreach>
    <!-- css -->
    <foreach param="FILE" target="propset">
      <path>
        <fileset dir="${LIBLOC}" includes="**/*.css"/>
      </path>
      <param name="MIMETYPE" value="text/css"/>
    </foreach>
    <!-- js -->
    <foreach param="FILE" target="propset">
      <path>
        <fileset dir="${LIBLOC}" includes="**/*.js"/>
      </path>
      <param name="MIMETYPE" value="text/javascript"/>
    </foreach>
    <!-- xml -->
    <foreach param="FILE" target="propset">
      <path>
        <fileset dir="${LIBLOC}" includes="**/*.xml"/>
      </path>
      <param name="MIMETYPE" value="text/xml"/>
    </foreach>
    <!-- png -->
    <foreach param="FILE" target="propset">
      <path>
        <fileset dir="${LIBLOC}" includes="**/*.png"/>
      </path>
      <param name="MIMETYPE" value="image/png"/>
    </foreach>
    <!-- gif -->
    <foreach param="FILE" target="propset">
      <path>
        <fileset dir="${LIBLOC}" includes="**/*.gif"/>
      </path>
      <param name="MIMETYPE" value="image/gif"/>
    </foreach>
    <!-- jpg -->
    <foreach param="FILE" target="propset">
      <path>
        <fileset dir="${LIBLOC}" includes="**/*.jpg"/>
      </path>
      <param name="MIMETYPE" value="image/jpeg"/>
    </foreach>
  </target>
  <target name="propset" description="Runs svn propset svn:mime-type.">
    <svn javahl="false">
      <propset path="${FILE}" name="svn:mime-type" value="${MIMETYPE}"/>
    </svn>
  </target>
  <target name="lint" description="Checks code style and syntax.">
    <fileset id="LIBRARY" dir="${LIBLOC}" includes="src/*.js" excludes="src/*_packed.js"/>
    <property name="LIBRARY" refid="LIBRARY"/>
    <java failonerror="true" jar="${basedir}/util/java/js.jar" fork="true">
      <arg value="${basedir}/util/lint/lint.js"/>
      <arg value="${LIBLOC}/${LIBRARY}"/>
    </java>
  </target>
  <target name="pack" depends="lint" description="Creates packed versions of libraries.">
    <fileset id="LIBRARY" dir="${LIBLOC}" includes="src/*.js" excludes="src/*_packed.js"/>
    <property name="LIBRARY" refid="LIBRARY"/>
    <java failonerror="true" jar="${basedir}/util/java/js.jar" fork="true">
      <arg value="${basedir}/util/pack/pack.js"/>
      <arg value="${LIBLOC}"/>
      <arg value="${LIBRARY}"/>
    </java>
  </target>
</project>
