<!--
// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
//
// TagSoup is licensed under the Apache License,
// Version 2.0.  You may obtain a copy of this license at
// http://www.apache.org/licenses/LICENSE-2.0 .  You may also have
// additional legal rights not granted by this license.
//
// TagSoup is distributed in the hope that it will be useful, but
// unless required by applicable law or agreed to in writing, TagSoup
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
// OF ANY KIND, either express or implied; not even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-->

<project name="tagsoup" default="dist">

  <!-- generic properties -->
  <property file="etc/build/build.properties"/>
  <!-- additional tasks -->
  <taskdef file="etc/build/taskdefs.txt" classpath="bin"/>

  <available property="transformer.factory"
     classname="com.icl.saxon.TransformerFactoryImpl"
     value="com.icl.saxon.TransformerFactoryImpl"/>
  <available property="transformer.factory"
     classname="net.sf.saxon.TransformerFactoryImpl"
     value="net.sf.saxon.TransformerFactoryImpl"/>
  <available property="transformer.factory"
     classname="org.apache.xalan.processor.TransformerFactoryImpl"
     value="org.apache.xalan.processor.TransformerFactoryImpl"/>
  <available property="transformer.factory"
     classname="com.sun.org.apache.xalan.processor.TransformerFactoryImpl"
     value="com.sun.org.apache.xalan.processor.TransformerFactoryImpl"/>

  <!-- some folder settings -->
  <property name="bin" value="bin"/>
  <property name="src" value="src"/>
  <property name="build" value="build"/>
  <property name="dist"  value="dist"/>
  <property name="docs" value="docs"/>
  <property name="tmp" value="tmp"/>


  <!-- initialize project -->
  <target name="init" description="Init project.">
    <tstamp/>
  </target>


  <!-- ensure needed folders are available -->
  <target name="prepare" description="Set up folders.">
    <mkdir dir="${build}"/>
    <mkdir dir="${tmp}"/>
  </target>

  <!-- Build a distribution jar file -->
  <target name="dist" depends="init,compile"
	  description="Build a binary distribution file.">
    <antcall target="jar-release">
      <param name="buildDir" value="build"/>
      <param name="version" value="${tagsoup.version}"/>
    </antcall>
  </target>


	<target name="jar-release" depends="init"
			description="Build a release jar file.">
	  <mkdir dir="${dist}/lib" />
	  <jar jarfile="${dist}/lib/tagsoup-${tagsoup.version}.jar" basedir="${buildDir}">
      <manifest>
        <attribute name="Version" value="${tagsoup.version}"/>
        <attribute name="Main-Class" value="org.ccil.cowan.tagsoup.CommandLine"/>
      </manifest>
    </jar>
  </target>


  <!-- compile java sources -->
  <target name="compile" depends="init,prepare,build-parser"
	  description="Compile java classes.">
    <javac source="1.4" target="1.4" srcdir="${src}/java" destdir="${build}" deprecation="on" verbose="off" debug="on">
      <src path="${src}/java"/>
	  <src path="${tmp}/src"/>
	</javac>
  </target>

<!-- prepare generation of the parser classes based on the definition files -->
   <target depends="init,prepare" description="Prepare generation of parser classes." name="prepare-parser"> 

     <echo>
       Using ${transformer.factory} as the TransformerFactory
     </echo>

     <xslt in="${src}/definitions/html.tssl" out="${tmp}/HTMLModels.i" 
style="tssl/tssl-models.xslt">
       <factory name="${transformer.factory}"/>
     </xslt>
     <xslt in="${src}/definitions/html.tssl" out="${tmp}/HTMLSchema.i" 
style="tssl/tssl.xslt">
       <factory name="${transformer.factory}"/>
     </xslt>
     <xslt in="${src}/definitions/html.stml" out="${tmp}/HTMLScanner.i" 
style="stml/stml.xslt">
       <factory name="${transformer.factory}"/>
     </xslt>
   </target>



  <!-- patch the parser class files -->
  <target name="build-parser" depends="prepare-parser"
	  description="Generate parser class files.">
	<property name="parser.pkg-path" value="org/ccil/cowan/tagsoup"/>
	<mkdir dir="${tmp}/src/${parser.pkg-path}"/>
	<antcall target="patch-file">
      <param name="file-pref" value="HTMLModels"/>
      <param name="token" value="MODEL_DEFINITIONS"/>
	</antcall>
	<antcall target="patch-file">
      <param name="file-pref" value="HTMLSchema"/>
      <param name="token" value="SCHEMA_CALLS"/>
	</antcall>
	<antcall target="patch-file">
      <param name="file-pref" value="HTMLScanner"/>
      <param name="token" value="STATE_TABLE"/>
	</antcall>
  </target>


  <!-- patch one parser class file -->
  <target name="patch-file" depends="" description="Patch a parser class file.">
	<copy file="${src}/templates/${parser.pkg-path}/${file-pref}.java" toDir="${tmp}/src/${parser.pkg-path}"/>
    <loadfile property="patch" srcFile="${tmp}/${file-pref}.i"/>
	<replace file="${tmp}/src/${parser.pkg-path}/${file-pref}.java" token="@@${token}@@" value="${patch}"/>
  </target>

  <!-- clean up the mess -->
  <target name="clean" description="Clean up folders.">
    <delete dir="${build}"/>
    <delete dir="${tmp}"/>
    <delete dir="${docs}"/>
    <delete dir="${dist}"/>
  </target>


  <!-- generate javadoc for the java classes -->
  <target name="docs-api" depends="init"
	  description="Generate javadoc documentation.">
	<mkdir dir="${docs}/api"/>
	<javadoc packagenames="org.*"
		sourcepath="${src}/java" destdir="${docs}/api"
		use="true"
		windowtitle="TagSoup ${tagsoup.version} API">
      <doctitle><![CDATA[<h1>TagSoup Package Documentation</h1>]]></doctitle>
	  <bottom><![CDATA[<em>Licence</em>: <strong>Academic Free License 3.0</strong> and/or <strong>GPL 2.0</strong>]]></bottom>
    </javadoc>
  </target>

</project>
