<?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.    
-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
	<groupId>org.apache.opennlp</groupId>
	<artifactId>opennlp</artifactId>
	<version>1.8.1</version>
    <relativePath>../pom.xml</relativePath>
  </parent>
  
  <artifactId>opennlp-docs</artifactId>
  <packaging>pom</packaging>
  <name>Apache OpenNLP Documentation</name>
  
  <build>
    <plugins>
	<plugin>
		<groupId>com.agilejava.docbkx</groupId>
		<artifactId>docbkx-maven-plugin</artifactId>
		<version>2.0.11</version>
		<executions>
          <execution>
            <goals>
              <goal>generate-html</goal>
            </goals>
            <phase>package</phase>
          </execution>
        </executions>
		<dependencies>
			<dependency>
			  <groupId>org.docbook</groupId>
			  <artifactId>docbook-xml</artifactId>
			  <version>4.4</version>
			</dependency>
       	</dependencies>
		<configuration>
			<xincludeSupported>true</xincludeSupported>
			<includes>opennlp.xml</includes>
			<htmlStylesheet>css/opennlp-docs.css</htmlStylesheet>
			<highlightSource>1</highlightSource>
			<htmlCustomization>${project.basedir}/src/main/resources/xsl/html.xsl</htmlCustomization> 
			<postProcess>
				<copy todir="${project.build.directory}/docbkx/html">
					<fileset dir="${project.basedir}/src/docbkx">
						<include name="**/*.css" />
						<include name="**/*.png" />
						<include name="**/*.gif" />
						<include name="**/*.jpg" />
					</fileset>
				</copy>
			</postProcess>
		</configuration>
	</plugin>
    </plugins>
  </build>
</project>
