<?xml version="1.0" encoding="UTF-8"?>

<!--
   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.    
-->

<!-- set the basedir value to point to the top level of the project -->

<project name="Apache UIMA Sandbox Documentation" default="all" basedir=".">
  
  <property name="styles.dir" value="${basedir}/../SandboxDocs/src/styles"/>
  <property name="src.dir" value="${basedir}"/>
  <property name="docbook.src.dir" value="${src.dir}/docbook"/>
  <property name="olink.dir" value="${basedir}/../SandboxDocs/src/olink"/>
  <property name="target.dir" value="${basedir}/target"/>
  <property name="styles.dir" value="${basedir}/../SandboxDocs/src/styles"/>
  <property name="skip.html-chunked" value="true"/>	
  <property name="doc.target.dir" value="${basedir}/target/assembly-bin/${artifactId}/docs"/>
  
  <import file="${basedir}/../uima-docbook-tool/build/build-docbook.xml"/>  
  
	<target name="copyDocs" depends="all">
    					
		<!-- copy HTML documentation -->
		<copy todir="${doc.target.dir}/html">
			<fileset dir="${target.dir}/" includes="images/**,${book_name}/**" excludes="**/*.pdf*"/>
		</copy>

		<!-- copy PDF documentation -->
		<copy todir="${doc.target.dir}/pdf">
			<fileset dir="${target.dir}/${book_name}" includes="*.pdf"/>
		</copy>
    
    <!-- copy to source dir to save for website use -->
    <!-- note: the form where the todir is just the basedir, and the
               fileset dir is one dir level higher and
               there is an include="docs/**" seems to fail to
               copy the some files.  The form below seems to work better. 
               Don't know why, but I think there's some interaction with SVN. -->
    <copy todir="${basedir}/docs">
      <fileset dir="${doc.target.dir}"/>
    </copy>
    
    <!-- copy to pear -->
    <!-- pear convention is that the dir is named doc, not docs -->
    <copy todir="${basedir}/target/pearPackaging/doc">
      <fileset dir="${doc.target.dir}"/>
    </copy>
    
	</target>

</project>
