<?xml version="1.0"?>
<project name="Build" default="build" basedir=".">
	<includepath classpath="${project.basedir}/ext" />

	<tstamp />

	<taskdef name="revision" classname="RevisionTask" />
	<taskdef name="packer" classname="PackerTask" />
	<taskdef name="readfile" classname="ReadFileTask" />

	<property file="${project.basedir}/properties/build.properties" />
	<revision hgpath="${hg}" workingcopy="${sh.dir}" propertyname="version.revision"/>
	<property file="${version.file}" />

	<!-- Creates properties for 'licenses', 'headers' and 'about' -->
	<target name="read_license">
		<property name="tmp.dir" value="${project.basedir}/tmp" />

		<copy todir="${tmp.dir}">
			<fileset dir="${includes.dir}">
				<include name="*.html" />
				<include name="*.txt" />
			</fileset>
			<filterchain>
				<replacetokens begintoken="@" endtoken="@">
					<token key="VERSION" value="${version}" />
					<token key="DATE" value="${TODAY}" />
				</replacetokens>
			</filterchain>
		</copy>

		<readfile file="${tmp.dir}/about.html" returnProperty="about" flatLines="true" stripTabs="true" />
		<readfile file="${tmp.dir}/header.txt" returnProperty="header" />

		<delete dir="${tmp.dir}" />
	</target>

	<!-- Cleans the main output folder -->
	<target name="clean">
		<echo>Cleaning build folder.</echo>
		<delete dir="${output.dir}" />
	</target>

	<!-- Copies files from the development project folder to the output folder -->
	<target name="copy">
		<echo>Copying distro scripts.</echo>

		<copy todir="${output.bin.scripts.dir}">
			<fileset dir="${sh.scripts.dir}">
				<include name="sh*.js" />
				<exclude name="shCore.js" />
			</fileset>
		</copy>

		<append destFile="${output.bin.scripts.dir}/shCore.js" file="${sh.scripts.dir}/XRegExp.js" />
		<append destFile="${output.bin.scripts.dir}/shCore.js" file="${sh.scripts.dir}/shCore.js" />

		<copy todir="${output.src.scripts.dir}">
			<fileset dir="${sh.scripts.dir}">
				<include name="sh*.js" />
				<exclude name="shBrush*.js" />
			</fileset>
		</copy>

		<echo>Copying distro styles.</echo>
		<copy todir="${output.styles.dir}">
			<fileset dir="${sh.styles.dir}">
				<include name="sh*.css" />
			</fileset>
		</copy>

		<copy todir="${output.dir}">
			<fileset dir="${sh.dir}">
				<include name="demoes/**" />
				<include name="tests/**" />
				<include name="compass/**" />
				<include name="*-LICENSE" />
			</fileset>
		</copy>

		<delete dir="${output.dir}/compass/.sass-cache" />
	</target>

	<!-- Replace VERSION and ABOUT tokens in the JS and CSS files -->
	<target name="apply_variables">
		<echo>Applying variables.</echo>
		<reflexive>
			<fileset dir="${output.dir}">
				<include name="**/*.js" />
				<include name="**/*.css" />
			</fileset>
			<filterchain>
				<replacetokens>
					<token key="VERSION" value="${version}" />
					<token key="ABOUT" value="${about}" />
				</replacetokens>
			</filterchain>
		</reflexive>
	</target>

	<!-- Add license headers to all files -->
	<target name="apply_header">
		<echo>Applying header.</echo>
		<reflexive>
			<fileset dir="${output.dir}">
				<include name="**/sh*.js" />
				<include name="**/*.css" />
			</fileset>
			<filterchain>
				<replaceregexp>
					<regexp pattern="^" replace="${header}"/>
				</replaceregexp>
			</filterchain>
		</reflexive>
	</target>

	<!-- Packs JS files -->
	<target name="pack">
		<echo>Packing distro scripts.</echo>
		<packer>
			<fileset dir="${output.bin.scripts.dir}">
				<include name="**/sh*.js" />
				<exclude name="**/shBrush*.js" />
			</fileset>
		</packer>
	</target>

	<target name="build" depends="clean, read_license, copy, apply_variables, pack, apply_header">
		<echo>Building SyntaxHighlighter ${version}</echo>
		<exec command="start firefox file://${output.dir}/test.html" dir="${output.dir}" />
	</target>
</project>
