<?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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cayenne-asciidoc-parent</artifactId>
        <groupId>org.apache.cayenne.docs</groupId>
        <version>4.0.2</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>getting-started-guide</artifactId>

    <packaging>jar</packaging>
    <name>getting-started-guide: AsciiDoc - Getting Started with Cayenne</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctor-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.cayenne.docs</groupId>
                        <artifactId>cayenne-asciidoc-extension</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                </dependencies>

                <executions>
                    <!-- generate "embeddable" html content with front matter and without header/footer/styles -->
                    <execution>
                        <id>asciidoctor-html-web</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>html5</backend>
                            <headerFooter>false</headerFooter> <!-- do not generate header and footer -->
                            <outputDirectory>${project.build.directory}/tmp/</outputDirectory>
                            <extensions>
                                <extension>
                                    <className>org.apache.cayenne.asciidoc.CayennePostProcessor</className>
                                </extension>
                            </extensions>
                            <attributes>
                                <toc>auto</toc>
                            </attributes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>assembly</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.asciidoctor</groupId>
                        <artifactId>asciidoctor-maven-plugin</artifactId>
                        <executions>
                            <!-- generate standalone html help -->
                            <execution>
                                <id>asciidoctor-html-standalone</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>process-asciidoc</goal>
                                </goals>
                                <configuration>
                                    <backend>html5</backend>
                                    <sourceHighlighter>coderay</sourceHighlighter>
                                    <embedAssets>true</embedAssets>
                                    <attributes>
                                        <toc>left</toc>
                                    </attributes>
                                </configuration>
                            </execution>

                            <!-- generate PDF -->
                            <execution>
                                <id>generate-pdf-doc</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>process-asciidoc</goal>
                                </goals>
                                <configuration>
                                    <backend>pdf</backend>
                                    <sourceHighlighter>coderay</sourceHighlighter>
                                    <attributes>
                                        <pagenums />
                                        <toc />
                                    </attributes>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>