[ 
https://issues.apache.org/jira/browse/DOXIASITETOOLS-320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17790700#comment-17790700
 ] 

ASF GitHub Bot commented on DOXIASITETOOLS-320:
-----------------------------------------------

kwin commented on code in PR #180:
URL: https://github.com/apache/maven-doxia/pull/180#discussion_r1408134053


##########
doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/NamesForIndexEntriesSinkWrapper.java:
##########
@@ -0,0 +1,136 @@
+/*
+ * 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.sink.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.doxia.index.IndexEntry;
+import org.apache.maven.doxia.index.SectionLocation;
+import org.apache.maven.doxia.macro.toc.TocMacro;
+import org.apache.maven.doxia.parser.SinkWrapper;
+import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.doxia.sink.SinkEventAttributes;
+
+/**
+ * Sink wrapper which emits anchors for each section represented by the given 
{@link IndexEntry}.
+ * @see TocMacro
+ */
+public class NamesForIndexEntriesSinkWrapper extends SinkWrapper {
+
+    private final Map<SectionLocation, IndexEntry> entryByLocation;
+    private SectionLocation currentLocation;
+
+    public NamesForIndexEntriesSinkWrapper(Sink delegate, IndexEntry index) {
+        super(delegate);
+        entryByLocation = new HashMap<>();
+        populateMap(entryByLocation, index);
+        this.currentLocation = new SectionLocation();
+    }
+
+    private static void populateMap(Map<SectionLocation, IndexEntry> 
entryByLocation, IndexEntry entry) {
+        entryByLocation.put(entry.getLocation(), entry);
+        entry.getChildEntries().forEach(e -> populateMap(entryByLocation, e));
+    }
+
+    @Override
+    public void section(int level, SinkEventAttributes attributes) {
+        onStartSection(level);
+        super.section(level, attributes);
+    }
+
+    @Override
+    public void section_(int level) {
+        super.section_(level);
+        onEndSection();
+    }
+
+    @Override
+    public void section1() {
+        super.section1();
+        onStartSection(1);
+    }
+
+    @Override
+    public void section1_() {
+        super.section1_();
+        onEndSection();
+    }
+
+    @Override
+    public void section2() {
+        super.section2();
+        onStartSection(2);
+    }
+
+    @Override
+    public void section2_() {
+        super.section2_();
+        onEndSection();
+    }
+
+    @Override
+    public void section3() {
+        super.section3();
+        onStartSection(3);
+    }
+
+    @Override
+    public void section3_() {
+        super.section3_();
+        onEndSection();
+    }
+
+    @Override
+    public void section4() {
+        super.section4();
+        onStartSection(4);
+    }
+
+    @Override
+    public void section4_() {
+        super.section4_();
+        onEndSection();
+    }
+
+    @Override
+    public void section5() {
+        super.section5();
+        onStartSection(5);
+    }
+
+    @Override
+    public void section5_() {
+        super.section5_();
+        onEndSection();
+    }
+
+    private void onStartSection(int level) {
+        currentLocation = currentLocation.createChildSection(level);
+        IndexEntry entry = entryByLocation.get(currentLocation);
+        if (entry != null) {

Review Comment:
   Probably a guard similar to 
https://github.com/apache/maven-doxia-sitetools/pull/58/files#diff-dabe16ceeba5dc7cb0a15e30dcb7c204a78f4763346f016ab7639ab2f59e78d4L250
 needs to be introduced to at least prevent double anchors for APT format.





> Inconsistent anchors between toc macro and headers
> --------------------------------------------------
>
>                 Key: DOXIASITETOOLS-320
>                 URL: https://issues.apache.org/jira/browse/DOXIASITETOOLS-320
>             Project: Maven Doxia Sitetools
>          Issue Type: Bug
>          Components: Site renderer
>            Reporter: Slawomir Jaranowski
>            Assignee: Konrad Windszus
>            Priority: Critical
>
> In markdown document add:
> {code:java}
> <!-- MACRO{toc|fromDepth=2} -->
> {code}
> Then anchors generated by toc macro looks like: {{#Your_First_Mojo}}
> and anchors generated by skin looks like: {{#your-first-plugin}}
> - Doxia Site Renderer 2.0.0-M4
> - Fluido Skin 1.11.1
> Tested on Maven main site without more investigate.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to