170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath<!--
270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath//
470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// TagSoup is licensed under the Apache License,
570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// Version 2.0.  You may obtain a copy of this license at
670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// http://www.apache.org/licenses/LICENSE-2.0 .  You may also have
770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// additional legal rights not granted by this license.
870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath//
970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// TagSoup is distributed in the hope that it will be useful, but
1070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// unless required by applicable law or agreed to in writing, TagSoup
1170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
1270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// OF ANY KIND, either express or implied; not even the implied warranty
1370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath-->
1570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
1670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath<project name="tagsoup" default="dist">
1770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
1870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- generic properties -->
1970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <property file="etc/build/build.properties"/>
2070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- additional tasks -->
2170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <taskdef file="etc/build/taskdefs.txt" classpath="bin"/>
2270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
2370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <available property="transformer.factory"
2470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     classname="com.icl.saxon.TransformerFactoryImpl"
2570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     value="com.icl.saxon.TransformerFactoryImpl"/>
2670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <available property="transformer.factory"
2770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     classname="net.sf.saxon.TransformerFactoryImpl"
2870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     value="net.sf.saxon.TransformerFactoryImpl"/>
2970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <available property="transformer.factory"
3070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     classname="org.apache.xalan.processor.TransformerFactoryImpl"
3170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     value="org.apache.xalan.processor.TransformerFactoryImpl"/>
3270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <available property="transformer.factory"
3370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     classname="com.sun.org.apache.xalan.processor.TransformerFactoryImpl"
3470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     value="com.sun.org.apache.xalan.processor.TransformerFactoryImpl"/>
3570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
3670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- some folder settings -->
3770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <property name="bin" value="bin"/>
3870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <property name="src" value="src"/>
3970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <property name="build" value="build"/>
4070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <property name="dist"  value="dist"/>
4170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <property name="docs" value="docs"/>
4270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <property name="tmp" value="tmp"/>
4370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
4470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
4570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- initialize project -->
4670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="init" description="Init project.">
4770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <tstamp/>
4870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
4970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
5070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
5170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- ensure needed folders are available -->
5270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="prepare" description="Set up folders.">
5370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <mkdir dir="${build}"/>
5470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <mkdir dir="${tmp}"/>
5570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
5670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
5770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- Build a distribution jar file -->
5870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="dist" depends="init,compile"
5970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  description="Build a binary distribution file.">
6070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <antcall target="jar-release">
6170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="buildDir" value="build"/>
6270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="version" value="${tagsoup.version}"/>
6370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    </antcall>
6470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
6570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
6670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
6770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<target name="jar-release" depends="init"
6870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath			description="Build a release jar file.">
6970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  <mkdir dir="${dist}/lib" />
7070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  <jar jarfile="${dist}/lib/tagsoup-${tagsoup.version}.jar" basedir="${buildDir}">
7170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <manifest>
7270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath        <attribute name="Version" value="${tagsoup.version}"/>
7370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath        <attribute name="Main-Class" value="org.ccil.cowan.tagsoup.CommandLine"/>
7470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      </manifest>
7570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    </jar>
7670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
7770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
7870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
7970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- compile java sources -->
8070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="compile" depends="init,prepare,build-parser"
8170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  description="Compile java classes.">
8270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <javac source="1.4" target="1.4" srcdir="${src}/java" destdir="${build}" deprecation="on" verbose="off" debug="on">
8370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <src path="${src}/java"/>
8470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  <src path="${tmp}/src"/>
8570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	</javac>
8670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
8770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
8870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath<!-- prepare generation of the parser classes based on the definition files -->
8970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath   <target depends="init,prepare" description="Prepare generation of parser classes." name="prepare-parser"> 
9070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
9170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     <echo>
9270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath       Using ${transformer.factory} as the TransformerFactory
9370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     </echo>
9470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
9570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     <xslt in="${src}/definitions/html.tssl" out="${tmp}/HTMLModels.i" 
9670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamathstyle="tssl/tssl-models.xslt">
9770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath       <factory name="${transformer.factory}"/>
9870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     </xslt>
9970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     <xslt in="${src}/definitions/html.tssl" out="${tmp}/HTMLSchema.i" 
10070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamathstyle="tssl/tssl.xslt">
10170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath       <factory name="${transformer.factory}"/>
10270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     </xslt>
10370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     <xslt in="${src}/definitions/html.stml" out="${tmp}/HTMLScanner.i" 
10470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamathstyle="stml/stml.xslt">
10570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath       <factory name="${transformer.factory}"/>
10670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath     </xslt>
10770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath   </target>
10870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
10970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
11070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
11170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- patch the parser class files -->
11270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="build-parser" depends="prepare-parser"
11370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  description="Generate parser class files.">
11470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<property name="parser.pkg-path" value="org/ccil/cowan/tagsoup"/>
11570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<mkdir dir="${tmp}/src/${parser.pkg-path}"/>
11670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<antcall target="patch-file">
11770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="file-pref" value="HTMLModels"/>
11870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="token" value="MODEL_DEFINITIONS"/>
11970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	</antcall>
12070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<antcall target="patch-file">
12170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="file-pref" value="HTMLSchema"/>
12270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="token" value="SCHEMA_CALLS"/>
12370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	</antcall>
12470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<antcall target="patch-file">
12570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="file-pref" value="HTMLScanner"/>
12670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <param name="token" value="STATE_TABLE"/>
12770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	</antcall>
12870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
12970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
13070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
13170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- patch one parser class file -->
13270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="patch-file" depends="" description="Patch a parser class file.">
13370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<copy file="${src}/templates/${parser.pkg-path}/${file-pref}.java" toDir="${tmp}/src/${parser.pkg-path}"/>
13470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <loadfile property="patch" srcFile="${tmp}/${file-pref}.i"/>
13570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<replace file="${tmp}/src/${parser.pkg-path}/${file-pref}.java" token="@@${token}@@" value="${patch}"/>
13670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
13770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
13870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- clean up the mess -->
13970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="clean" description="Clean up folders.">
14070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <delete dir="${build}"/>
14170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <delete dir="${tmp}"/>
14270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <delete dir="${docs}"/>
14370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    <delete dir="${dist}"/>
14470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
14570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
14670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
14770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <!-- generate javadoc for the java classes -->
14870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  <target name="docs-api" depends="init"
14970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  description="Generate javadoc documentation.">
15070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<mkdir dir="${docs}/api"/>
15170dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	<javadoc packagenames="org.*"
15270dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath		sourcepath="${src}/java" destdir="${docs}/api"
15370dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath		use="true"
15470dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath		windowtitle="TagSoup ${tagsoup.version} API">
15570dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath      <doctitle><![CDATA[<h1>TagSoup Package Documentation</h1>]]></doctitle>
15670dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath	  <bottom><![CDATA[<em>Licence</em>: <strong>Academic Free License 3.0</strong> and/or <strong>GPL 2.0</strong>]]></bottom>
15770dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath    </javadoc>
15870dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath  </target>
15970dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath
16070dce01b47b7ef16f67b6bd17ee66fca72b42ef1Narayan Kamath</project>
161