This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/configure-with-plexus-configurator
in repository https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git

commit 0c1d1a90ab0c2a09d374dba4dc83c0ee9ee479c8
Author: Konrad Windszus <k...@apache.org>
AuthorDate: Wed Mar 20 17:07:35 2024 +0100

    [MSITE-1000] Allow parametrisation of parsers
    
    Introduce interface ParserConfigurator which can be passed to
    SiteRenderingContext
---
 .../doxia/siterenderer/DefaultSiteRenderer.java    | 14 ++++++--
 .../doxia/siterenderer/ParserConfigurator.java     | 38 ++++++++++++++++++++++
 .../doxia/siterenderer/SiteRenderingContext.java   | 20 ++++++++++++
 3 files changed, 69 insertions(+), 3 deletions(-)

diff --git 
a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
 
b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
index c37562e..8db7382 100644
--- 
a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
+++ 
b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
@@ -33,6 +33,7 @@ import java.io.StringWriter;
 import java.io.Writer;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -320,9 +321,16 @@ public class DefaultSiteRenderer implements Renderer {
             String resource = doc.getAbsolutePath();
 
             Parser parser = doxia.getParser(docRenderingContext.getParserId());
-            // DOXIASITETOOLS-146 don't render comments from source markup
-            parser.setEmitComments(false);
-            parser.setEmitAnchorsForIndexableEntries(true);
+            ParserConfigurator configurator = 
siteContext.getParserConfigurator();
+            boolean isConfigured = false;
+            if (configurator != null) {
+                isConfigured = 
configurator.configure(docRenderingContext.getParserId(), doc.toPath(), parser);
+            }
+            if (!isConfigured) {
+                // DOXIASITETOOLS-146 don't render comments from source markup
+                parser.setEmitComments(false);
+                parser.setEmitAnchorsForIndexableEntries(true);
+            }
 
             // TODO: DOXIA-111: the filter used here must be checked generally.
             if (docRenderingContext.getAttribute("velocity") != null) {
diff --git 
a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/ParserConfigurator.java
 
b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/ParserConfigurator.java
new file mode 100644
index 0000000..d7ac268
--- /dev/null
+++ 
b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/ParserConfigurator.java
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+package org.apache.maven.doxia.siterenderer;
+
+import java.nio.file.Path;
+
+import org.apache.maven.doxia.parser.Parser;
+
+/**
+ * Interface which allows to configure a particular {@link Parser} before it 
is being used.
+ */
+public interface ParserConfigurator {
+
+    /**
+     * Configures the given parser, which is afterwards used to parse the 
given source file.
+     * @param parserId the parser id
+     * @param filePath the absolute path of the file to parse
+     * @param parser the parser to configure
+     * @return {@code true} if the parser has been configured, otherwise 
{@code false}
+     */
+    boolean configure(String parserId, Path filePath, Parser parser);
+}
diff --git 
a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
 
b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
index 12733d0..73561a3 100644
--- 
a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
+++ 
b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
@@ -72,6 +72,8 @@ public class SiteRenderingContext {
 
     private File processedContentOutput;
 
+    private ParserConfigurator parserConfigurator;
+
     /**
      * If input documents should be validated before parsing.
      * By default no validation is performed.
@@ -388,4 +390,22 @@ public class SiteRenderingContext {
     public void setRootDirectory(File rootDirectory) {
         this.rootDirectory = rootDirectory;
     }
+
+    /**
+     * Return the configurator for {@link Parser} objects.
+     * @return the parser configurator (may be {@code null}) in which case the 
default configuration is applied
+     * @since 4.0
+     */
+    public ParserConfigurator getParserConfigurator() {
+        return parserConfigurator;
+    }
+
+    /**
+     * Set the configurator to use for parsers.
+     * @param parserConfigurator
+     * @since 4.0
+     */
+    public void setParserConfigurator(ParserConfigurator parserConfigurator) {
+        this.parserConfigurator = parserConfigurator;
+    }
 }

Reply via email to