<?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>
  <parent>
    <groupId>com.devonfw</groupId>
    <artifactId>maven-parent</artifactId>
    <version>5</version>
  </parent>
  <groupId>com.devonfw.tools</groupId>
  <artifactId>devonfw-docgen</artifactId>
  <version>5.0.2</version>
  <packaging>pom</packaging>
  <name>${project.artifactId}</name>
  <description>Generates documentation as PDF, ePub or HTML from AsciiDoc wiki pages.</description>

  <properties>
    <github.repository>devon-docgen</github.repository>
    <docgen.asciidoc.page>documentation/master</docgen.asciidoc.page>
    <docgen.asciidoc.source>${basedir}</docgen.asciidoc.source>
    <docgen.asciidoc.target>${basedir}/target/asciidoc</docgen.asciidoc.target>
    <docgen.asciidoc.extension>asciidoc</docgen.asciidoc.extension>
    <docgen.generated.docs>${basedir}/target/generated-docs</docgen.generated.docs>
    <docgen.docsource>${docgen.asciidoc.page}.${docgen.asciidoc.extension}</docgen.docsource>
    <docgen.images.dir>images</docgen.images.dir>
    <docgen.highlighter>coderay</docgen.highlighter>
    <docgen.headerFooter>true</docgen.headerFooter>
    <docgen.preserveDirectories>true</docgen.preserveDirectories>
    <docgen.linkcss>true</docgen.linkcss>
    <docgen.toc>right</docgen.toc>
    <docgen.icons>font</docgen.icons>
    <docgen.idseparator>-</docgen.idseparator>
    <docgen.highlighter>coderay</docgen.highlighter>
    <docgen.backend>pdf</docgen.backend>
    <docgen.output.format>pdf</docgen.output.format>
    <docgen.eruby>erb</docgen.eruby>
    <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>
    <asciidoctorj.epub.version>1.5.0-alpha.9</asciidoctorj.epub.version>
    <jruby.version>9.2.6.0</jruby.version>
    <asciidoctor.skip>false</asciidoctor.skip>
  </properties>

  <modules>
    <module>init</module>
    <module>pdf</module>
    <module>html</module>
    <module>all</module>
  </modules>

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

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <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">
                      <exclude name="**/target/**" />
                      <include name="**/*.${docgen.asciidoc.extension}" />
                    </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="beanshell"><![CDATA[
                      String path = project.getProperty("file_path").replace("\\", "/");
                      String source = project.getProperty("docgen.asciidoc.source").replace("\\", "/");
                      path = path.replace(source, "");
                      project.setProperty("path_to_copy_to", path);
                    ]]></script>

                    <!-- unset variable to ensure it is properly updated in next basename task -->
                    <var name="filename" unset="true" />
                    <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="**/*.${docgen.asciidoc.extension}" />
                      <exclude name="**/target/**" />
                      <exclude name="**/pom.xml" />
                      <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>${asciidoctorj.epub.version}</version>
          </dependency>
          <dependency>
            <groupId>org.jruby</groupId>
            <artifactId>jruby-complete</artifactId>
            <version>${jruby.version}</version>
          </dependency>
        </dependencies>
        <configuration>
          <skip>${asciidoctor.skip}</skip>
          <sourceDirectory>${docgen.asciidoc.target}</sourceDirectory>
          <sourceDocumentName>${docgen.docsource}</sourceDocumentName>
          <imagesDir>${docgen.generated.docs}</imagesDir>
          <backend>${docgen.backend}</backend>
          <outputDirectory>${docgen.generated.docs}</outputDirectory>
          <sourceHighlighter>${docgen.highlighter}</sourceHighlighter>
          <headerFooter>${docgen.headerFooter}</headerFooter>
          <preserveDirectories>${docgen.preserveDirectories}</preserveDirectories>
          <eruby>${docgen.eruby}</eruby>
          <attributes>
            <allow-uri-read />
            <icons>${docgen.icons}</icons>
            <pagenums />
            <experimental />
            <toc>${docgen.toc}</toc>
            <baseDir>./</baseDir>
            <linkcss>${docgen.linkcss}</linkcss>
            <idprefix />
            <idseparator>${docgen.idseparator}</idseparator>
          </attributes>
        </configuration>
        <executions>
          <execution>
            <id>generate-doc</id>
            <phase>compile</phase>
            <goals>
              <goal>process-asciidoc</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <!-- should actually be moved to maven-parent -->
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <profiles>
    <profile>
      <id>custom-style</id>
      <activation>
        <file>
          <exists>./theme/custom-theme.yml</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <configuration>
              <attributes>
                <pdf-stylesdir>${basedir}/theme</pdf-stylesdir>
                <pdf-style>custom</pdf-style>
              </attributes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!--
    <profile>
      <id>documentation-folder</id>
      <activation>
        <file>
          <exists>./documentation</exists>
        </file>
      </activation>
      <properties>
        <docgen.asciidoc.source>./documentation</docgen.asciidoc.source>
      </properties>
    </profile>
      -->
  </profiles>
</project>
