<?xml version="1.0" encoding="UTF-8"?>
<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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.devonfw.tools</groupId>
  <artifactId>devon-docgen</artifactId>
  <version>4.1.0</version>
  <packaging>pom</packaging>
  <name>${project.artifactId}</name>
  <description>Documentation generator that can generate a complete and self-contained documentation as PDF, ePub and HTML from Asciidoc wiki pages.</description>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <github.project>devonfw/devon-docgen</github.project>
    <docgen.wiki.page>README</docgen.wiki.page>
    <docgen.asciidoc.source>${basedir}</docgen.asciidoc.source>
    <docgen.asciidoc.target>${basedir}/target/asciidoc/</docgen.asciidoc.target>
    <docgen.generated.docs>${basedir}/target/generated-docs/</docgen.generated.docs>
    <docgen.images.dir>images</docgen.images.dir>
    <buildtime>${maven.build.timestamp}</buildtime>
    <maven.build.timestamp.format>yyyy-MM-dd_HH.mm.ss</maven.build.timestamp.format>
    <asciidoctor.maven.plugin.version>1.6.0</asciidoctor.maven.plugin.version>
    <asciidoctorj.pdf.version>1.5.0-alpha.18</asciidoctorj.pdf.version>
    <asciidoctor.skip>false</asciidoctor.skip>
    <!-- You have to define the target format by a console parameter: -Doutput.format=pdf / -Doutput.format=html -->
  </properties>

  <url>https://github.com/${github.project}</url>
  <issueManagement>
    <system>GitHub</system>
    <url>https://github.com/${github.project}/issues</url>
  </issueManagement>

  <scm>
    <connection>scm:git:git@github.com:${github.project}.git</connection>
    <developerConnection>scm:git:git@github.com:${github.project}.git</developerConnection>
    <url>git@github.com:${github.project}.git</url>
  </scm>

  <developers>
    <developer>
      <name>Malte Brunnlieb</name>
      <organization>Capgemini</organization>
    </developer>
    <developer>
      <name>Jörg Hohwillr</name>
      <organization>Capgemini</organization>
    </developer>
    <developer>
      <name>Jaime Diaz Gonzalez</name>
      <organization>Capgemini</organization>
    </developer>
    <developer>
      <name>Jorge Dacal Cantos</name>
      <organization>Capgemini</organization>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Simon Röger</name>
      <organization>Capgemini</organization>
    </contributor>
  </contributors>

  <organization>
    <name>DevonFw</name>
    <url>http://devonfw.com/</url>
  </organization>

  <licenses>
    <license>
      <name>Apache Software License, Version 2.0</name>
      <url>https://github.com/devonfw/devon-docgen/blob/master/LICENSE</url>
      <distribution>repo</distribution>
      <comments/>
    </license>
  </licenses>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.7.1</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.2</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>3.0.0</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.doxia</groupId>
            <artifactId>doxia-site-renderer</artifactId>
            <version>1.8.1</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.8</version>
        <dependencies>
          <dependency>
            <groupId>ant-contrib</groupId>
            <artifactId>ant-contrib</artifactId>
            <version>1.0b3</version>
            <exclusions>
              <exclusion>
                <groupId>ant</groupId>
                <artifactId>ant</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-nodeps</artifactId>
            <version>1.8.1</version>
          </dependency>
          <dependency>
            <groupId>org.beanshell</groupId>
            <artifactId>bsh</artifactId>
            <version>2.0b5</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>pre-process-asciidoc</id>
            <phase>process-resources</phase>
            <configuration>
              <skip>${asciidoctor.skip}</skip>
              <target>
                <taskdef resource="net/sf/antcontrib/antlib.xml"/>

                <for param="asciidoc-file">
                  <path>
                    <fileset dir="${docgen.asciidoc.source}" casesensitive="yes">
                      <include name="**/*.asciidoc"/>
                    </fileset>
                  </path>
                  <sequential>

                    <!-- unset variable to ensure it is properly updated in next property and dirname tasks -->
                    <var name="path_to_copy_to" unset="true"/>
                    <var name="file_path" unset="true"/>


                    <property name="path_to_copy_to" value=""/>
                    <dirname property="file_path" file="@{asciidoc-file}"/>

                    <!-- Remove the path from the root directory until current sourceDirectory to obtain a relative path -->
                    <script language="javascript" classpathref="maven.plugin.classpath">
                      // overwrite existing property.
                      project.setProperty(
                      'path_to_copy_to',
                      project.getProperty('file_path').replace(
                      project.getProperty('basedir'),
                      ''
                      ).replace(/\\/g,
                      '/').replace('/', ''));
                    </script>

                    <!-- unset variable to ensure it is properly updated in next basename task -->
                    <var name="filename" unset="true"/>
                    <!--<basename property="filename" file="@{asciidoc-file}" suffix=".asciidoc"/> -->
                    <basename property="filename" file="@{asciidoc-file}"/>
                    <copy file="@{asciidoc-file}" todir="${docgen.asciidoc.target}${path_to_copy_to}"
                      encoding="${project.build.sourceEncoding}" outputencoding="${project.reporting.outputEncoding}"
                      verbose="true">
                      <filterchain>
                        <tokenfilter>
                          <linetokenizer/>
                          <!-- make anchors unique by prefixing with filename -->
                          <replaceregex pattern="\[\[" replace="[[${filename}_" flags="g"/>
                          <!-- automatically generate anchors for sections -->
                          <replaceregex pattern="^(==+) (.*)"
                            replace="[[${filename}_\2]]${line.separator}\1 \2" flags="g"/>

                          <!-- fix includes to contain asciidoc suffix (what is omitted on github wiki) -->
                          <replaceregex pattern="include\:\:(.*)\[" replace="include::\1.asciidoc["
                            flags="g"/>
                          <replaceregex
                            pattern="include\:\:(.*)((\.adoc)|(\.asc)|(\.asciidoc))(\.asciidoc)\["
                            replace="include::\1\2[" flags="g"/>

                          <!-- fix xrefs with default linktext to also include filename prefix -->
                          <replaceregex pattern="xref:([^\[]*)\[\]" replace="xref:${filename}_\1[\1]"
                            flags="g"/>
                          <!-- fix xrefs to also include filename prefix -->
                          <replaceregex pattern="xref:([^\[]*)\[" replace="xref:${filename}_\1[" flags="g"/>
                          <!-- fix links without linktext -->
                          <replaceregex pattern="link:([^#:]*)\[\]" replace="link:\1[\1]" flags="g"/>
                          <!-- fix links to contain .asciidoc suffix if omitted (wiki) -->
                          <replaceregex pattern="link:([^#:.\[]*)(#|\[)" replace="xref:\1.asciidoc\2"
                            flags="g"/>
                          <!-- fix links to entire asciidoc file (wiki page) by converting into xref inter document ref -->
                          <replaceregex pattern="link:([^#:]*)\[" replace="xref:\1[" flags="g"/>
                          <!-- fix links to anchor in other file (wik page) with default linktext by converting into xref
                            inter document ref -->
                          <replaceregex pattern="link:([^#:]*)#([^\[]*)\[\]" replace="xref:\1_\2[\1#\2]"
                            flags="g"/>
                          <!-- fix links to anchor in other file (wik page) by converting into xref inter document ref -->
                          <replaceregex pattern="link:([^#:]*)#([^\[]*)\[" replace="xref:\1_\2[" flags="g"/>
                          <scriptfilter language="beanshell" byline="true" setbeans="true"><![CDATA[
                            String text = self.getToken();
                            if (text.startsWith("[[")) {
                              int end = text.indexOf("]]");
                              if (end > 0) {
                                String content = text.substring(2, end).trim().toLowerCase().replaceAll("[?¿!¡':()&/“”`\"\\[\\]#]", "").replace(' ', '-');
                                self.setToken("[[" + content + "]]" + text.substring(end + 2));
                              }
                            }
                          ]]></scriptfilter>
                          <!-- insert top-level anchor for file so links to this enire file work after being resolved as
                            xref -->
                          <replaceregex pattern="^(=) " replace="[[${filename}]]${line.separator}\1 "
                            flags="g"/>
                          <!-- resolve maven variables -->
                          <replaceregex pattern="\$\{project\.version\}" replace="${project.version}"
                            flags="g"/>
                          <replaceregex pattern="\$\{project\.artifactId\}" replace="${project.artifactId}"
                            flags="g"/>
                          <replaceregex pattern="\$\{buildtime\}" replace="${buildtime}" flags="g"/>
                        </tokenfilter>
                      </filterchain>
                    </copy>
                  </sequential>
                </for>

                <!-- Copy images and further resources of the wiki -->
                <copy todir="${docgen.asciidoc.target}" encoding="${project.build.sourceEncoding}">
                  <path>
                    <fileset dir="${docgen.asciidoc.source}">
                      <exclude name="**/*.asciidoc"/>
                      <exclude name="**/target/**"/>
                      <exclude name="**/${docgen.images.dir}/**/*"/>
                      <!-- exclude local m2 repository in Jenkins builds -->
                      <exclude name="**/.repository/**"/>
                    </fileset>
                  </path>
                </copy>

                <!-- Check all the directories with images (list received as argument) -->
                <for list="${docgen.images.dir}" param="receiveddir">
                  <sequential>
                    <!-- For each directory check its subfolders and copy them -->
                    <for param="imagesdir">
                      <path>
                        <dirset dir="${docgen.asciidoc.source}" casesensitive="yes">
                          <include name="**/@{receiveddir}/**"/>
                        </dirset>
                      </path>
                      <sequential>
                        <!-- Copy the resources -->
                        <copy todir="${docgen.asciidoc.target}/@{receiveddir}">
                          <path>
                            <fileset dir="@{imagesdir}">
                              <include name="**/*"/>
                            </fileset>
                          </path>
                        </copy>
                      </sequential>
                    </for>
                  </sequential>
                </for>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.asciidoctor</groupId>
        <artifactId>asciidoctor-maven-plugin</artifactId>
        <version>${asciidoctor.maven.plugin.version}</version>
        <dependencies>
          <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-pdf</artifactId>
            <version>${asciidoctorj.pdf.version}</version>
          </dependency>
          <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-epub3</artifactId>
            <version>1.5.0-alpha.9</version>
          </dependency>
        </dependencies>
        <configuration>
          <sourceDirectory>${docgen.asciidoc.target}</sourceDirectory>
          <imagesDir>${docgen.generated.docs}</imagesDir>
          <headerFooter>true</headerFooter>
          <attributes>
            <allow-uri-read/>
          </attributes>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>generate-pdf</id>
      <activation>
        <property>
          <name>output.format</name>
          <value>pdf</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
              <execution>
                <id>attach-pdf</id>
                <goals>
                  <goal>attach-artifact</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                  <skip>${asciidoctor.skip}</skip>
                  <artifacts>
                    <artifact>
                      <file>${docgen.generated.docs}/${docgen.wiki.page}.pdf</file>
                      <type>pdf</type>
                    </artifact>
                  </artifacts>
                  <archive>
                    <addMavenDescriptor>true</addMavenDescriptor>
                  </archive>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>oss</id>
      <build>
        <plugins>
          <!-- Sign artifacts with PGP -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>1.6</version>
            <configuration>
              <keyname>${gpg.keyname}</keyname>
            </configuration>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <distributionManagement>
        <snapshotRepository>
          <id>ossrh</id>
          <url>https://oss.sonatype.org/content/repositories/releases</url>
        </snapshotRepository>
        <repository>
          <id>ossrh</id>
          <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
      </distributionManagement>
    </profile>
    <profile>
      <id>default-style</id>
      <activation>
        <property>
          <name>output.format</name>
          <value>pdf</value>
        </property>
        <file>
          <missing>./theme/custom-theme.yml</missing>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-pdf-doc</id>
                <phase>compile</phase>
                <goals>
                  <goal>process-asciidoc</goal>
                </goals>
                <configuration>
                  <skip>${asciidoctor.skip}</skip>
                  <sourceDocumentName>${docgen.wiki.page}.asciidoc</sourceDocumentName>
                  <backend>pdf</backend>
                  <sourceHighlighter>coderay</sourceHighlighter>
                  <attributes>
                    <icons>font</icons>
                    <pagenums/>
                    <toc/>
                    <idprefix/>
                    <idseparator>-</idseparator>
                  </attributes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>custom-style</id>
      <activation>
        <property>
          <name>output.format</name>
          <value>pdf</value>
        </property>
        <file>
          <exists>./theme/custom-theme.yml</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-pdf-doc</id>
                <phase>compile</phase>
                <goals>
                  <goal>process-asciidoc</goal>
                </goals>
                <configuration>
                  <skip>${asciidoctor.skip}</skip>
                  <sourceDocumentName>${docgen.wiki.page}.asciidoc</sourceDocumentName>
                  <backend>pdf</backend>
                  <sourceHighlighter>coderay</sourceHighlighter>
                  <attributes>
                    <pdf-stylesdir>${basedir}/theme</pdf-stylesdir>
                    <pdf-style>custom</pdf-style>
                    <icons>font</icons>
                    <pagenums/>
                    <toc/>
                    <idprefix/>
                    <idseparator>-</idseparator>
                  </attributes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>generate-html-docs</id>
      <activation>
        <property>
          <name>output.format</name>
          <value>html</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-html-doc</id>
                <phase>compile</phase>
                <goals>
                  <goal>process-asciidoc</goal>
                </goals>
                <configuration>
                  <skip>${asciidoctor.skip}</skip>
                  <preserveDirectories>true</preserveDirectories>
                  <imagesDir>${docgen.generated.docs}</imagesDir>
                  <sourceDirectory>${docgen.asciidoc.target}</sourceDirectory>
                  <outputDirectory>${docgen.generated.docs}</outputDirectory>
                  <backend>html5</backend>
                  <sourceHighlighter>highlightjs</sourceHighlighter>
                  <eruby>erb</eruby>
                  <attributes>
                    <icons>font</icons>
                    <experimental/>
                    <toc>right</toc>
                    <pagenums/>
                    <idprefix/>
                    <idseparator>-</idseparator>
                    <baseDir>./</baseDir>
                    <linkcss>true</linkcss>
                  </attributes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
