You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2022/05/18 21:12:39 UTC

[maven-doxia] 01/01: [DOXIA-590] Either provided element class or default class gets ignored

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

michaelo pushed a commit to branch DOXIA-590-1.x
in repository https://gitbox.apache.org/repos/asf/maven-doxia.git

commit ee7862f6a2d52b0f4bb58f4412c3ce537f719cae
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Wed May 18 23:12:22 2022 +0200

    [DOXIA-590] Either provided element class or default class gets ignored
---
 .../maven/doxia/sink/impl/Xhtml5BaseSink.java      | 86 ++++++++++------------
 .../maven/doxia/sink/impl/XhtmlBaseSink.java       | 86 ++++++++++------------
 .../maven/doxia/sink/impl/Xhtml5BaseSinkTest.java  |  4 +-
 .../maven/doxia/sink/impl/XhtmlBaseSinkTest.java   |  4 +-
 4 files changed, 78 insertions(+), 102 deletions(-)

diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSink.java b/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSink.java
index 45d726ff..f30403ec 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSink.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSink.java
@@ -1567,21 +1567,24 @@ public class Xhtml5BaseSink
     @Override
     public void tableRow( SinkEventAttributes attributes )
     {
-        MutableAttributeSet att = new SinkEventAttributeSet();
+        MutableAttributeSet atts = SinkUtils.filterAttributes(
+                attributes, SinkUtils.SINK_TR_ATTRIBUTES );
 
-        if ( evenTableRow )
+        if ( atts == null )
         {
-            att.addAttribute( Attribute.CLASS, "a" );
+            atts = new SinkEventAttributeSet();
         }
-        else
+
+        String rowClass = evenTableRow ? "a" : "b";
+        if ( atts.isDefined( Attribute.CLASS.toString() ) )
         {
-            att.addAttribute( Attribute.CLASS, "b" );
+            String givenRowClass = (String) atts.getAttribute( Attribute.CLASS.toString() );
+            rowClass = givenRowClass + " " + rowClass;
         }
 
-        att.addAttributes( SinkUtils.filterAttributes(
-                attributes, SinkUtils.SINK_TR_ATTRIBUTES  ) );
+        atts.addAttribute( Attribute.CLASS, rowClass );
 
-        writeStartTag( HtmlMarkup.TR, att );
+        writeStartTag( HtmlMarkup.TR, atts );
 
         evenTableRow = !evenTableRow;
 
@@ -1833,44 +1836,28 @@ public class Xhtml5BaseSink
         }
     }
 
-    /** {@inheritDoc} */
+    /**
+     * The default style class for external link is <code>externalLink</code>.
+     *
+     * {@inheritDoc}
+     * @see javax.swing.text.html.HTML.Tag#A
+     **/
     @Override
     public void link( String name )
     {
         link( name, null );
     }
 
-    /** {@inheritDoc} */
-    @Override
-    public void link( String name, SinkEventAttributes attributes )
-    {
-        if ( attributes == null )
-        {
-            link( name, null, null );
-        }
-        else
-        {
-            String target = (String) attributes.getAttribute( Attribute.TARGET.toString() );
-            MutableAttributeSet atts = SinkUtils.filterAttributes(
-                    attributes, SinkUtils.SINK_LINK_ATTRIBUTES  );
-
-            link( name, target, atts );
-        }
-    }
-
     /**
-     * Adds a link with an optional target.
      * The default style class for external link is <code>externalLink</code>.
      *
-     * @param href the link href.
-     * @param target the link target, may be null.
-     * @param attributes an AttributeSet, may be null.
-     *      This is supposed to be filtered already.
+     * {@inheritDoc}
      * @see javax.swing.text.html.HTML.Tag#A
-     */
-    private void link( String href, String target, MutableAttributeSet attributes )
+     **/
+    @Override
+    public void link( String name, SinkEventAttributes attributes )
     {
-        if ( href == null )
+        if ( name == null )
         {
             throw new NullPointerException( "Link name cannot be null!" );
         }
@@ -1880,28 +1867,29 @@ public class Xhtml5BaseSink
             return;
         }
 
-        MutableAttributeSet att = new SinkEventAttributeSet();
+        MutableAttributeSet atts = SinkUtils.filterAttributes(
+                attributes, SinkUtils.SINK_LINK_ATTRIBUTES );
 
-        if ( DoxiaUtils.isExternalLink( href  ) )
+        if ( atts == null )
         {
-            att.addAttribute( Attribute.CLASS, "externalLink" );
+            atts = new SinkEventAttributeSet();
         }
 
-        att.addAttribute( Attribute.HREF, HtmlTools.escapeHTML( href  ) );
-
-        if ( target != null )
+        if ( DoxiaUtils.isExternalLink( name ) )
         {
-            att.addAttribute( Attribute.TARGET, target );
-        }
+            String hrefClass = "externalLink";
+            if ( atts.isDefined( Attribute.CLASS.toString() ) )
+             {
+                 String givenClass = (String) atts.getAttribute( Attribute.CLASS.toString() );
+                 hrefClass = givenClass + " " + hrefClass;
+             }
 
-        if ( attributes != null )
-        {
-            attributes.removeAttribute( Attribute.HREF.toString() );
-            attributes.removeAttribute( Attribute.TARGET.toString() );
-            att.addAttributes( attributes );
+             atts.addAttribute( Attribute.CLASS, hrefClass );
         }
 
-        writeStartTag( HtmlMarkup.A, att );
+        atts.addAttribute( Attribute.HREF, HtmlTools.escapeHTML( name ) );
+
+        writeStartTag( HtmlMarkup.A, atts );
     }
 
     /**
diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSink.java b/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSink.java
index 10d08ec7..d019f666 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSink.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSink.java
@@ -1444,21 +1444,24 @@ public class XhtmlBaseSink
     @Override
     public void tableRow( SinkEventAttributes attributes )
     {
-        MutableAttributeSet att = new SinkEventAttributeSet();
+        MutableAttributeSet atts = SinkUtils.filterAttributes(
+                attributes, SinkUtils.SINK_TR_ATTRIBUTES );
 
-        if ( evenTableRow )
+        if ( atts == null )
         {
-            att.addAttribute( Attribute.CLASS, "a" );
+            atts = new SinkEventAttributeSet();
         }
-        else
+
+        String rowClass = evenTableRow ? "a" : "b";
+        if ( atts.isDefined( Attribute.CLASS.toString() ) )
         {
-            att.addAttribute( Attribute.CLASS, "b" );
+            String givenRowClass = (String) atts.getAttribute( Attribute.CLASS.toString() );
+            rowClass = givenRowClass + " " + rowClass;
         }
 
-        att.addAttributes( SinkUtils.filterAttributes(
-                attributes, SinkUtils.SINK_TR_ATTRIBUTES  ) );
+        atts.addAttribute( Attribute.CLASS, rowClass );
 
-        writeStartTag( HtmlMarkup.TR, att );
+        writeStartTag( HtmlMarkup.TR, atts );
 
         evenTableRow = !evenTableRow;
 
@@ -1710,44 +1713,28 @@ public class XhtmlBaseSink
         }
     }
 
-    /** {@inheritDoc} */
+    /**
+     * The default style class for external link is <code>externalLink</code>.
+     *
+     * {@inheritDoc}
+     * @see javax.swing.text.html.HTML.Tag#A
+     **/
     @Override
     public void link( String name )
     {
         link( name, null );
     }
 
-    /** {@inheritDoc} */
-    @Override
-    public void link( String name, SinkEventAttributes attributes )
-    {
-        if ( attributes == null )
-        {
-            link( name, null, null );
-        }
-        else
-        {
-            String target = (String) attributes.getAttribute( Attribute.TARGET.toString() );
-            MutableAttributeSet atts = SinkUtils.filterAttributes(
-                    attributes, SinkUtils.SINK_LINK_ATTRIBUTES  );
-
-            link( name, target, atts );
-        }
-    }
-
     /**
-     * Adds a link with an optional target.
      * The default style class for external link is <code>externalLink</code>.
      *
-     * @param href the link href.
-     * @param target the link target, may be null.
-     * @param attributes an AttributeSet, may be null.
-     *      This is supposed to be filtered already.
+     * {@inheritDoc}
      * @see javax.swing.text.html.HTML.Tag#A
-     */
-    private void link( String href, String target, MutableAttributeSet attributes )
+     **/
+    @Override
+    public void link( String name, SinkEventAttributes attributes )
     {
-        if ( href == null )
+        if ( name == null )
         {
             throw new NullPointerException( "Link name cannot be null!" );
         }
@@ -1757,28 +1744,29 @@ public class XhtmlBaseSink
             return;
         }
 
-        MutableAttributeSet att = new SinkEventAttributeSet();
+        MutableAttributeSet atts = SinkUtils.filterAttributes(
+                attributes, SinkUtils.SINK_LINK_ATTRIBUTES );
 
-        if ( DoxiaUtils.isExternalLink( href  ) )
+        if ( atts == null )
         {
-            att.addAttribute( Attribute.CLASS, "externalLink" );
+            atts = new SinkEventAttributeSet();
         }
 
-        att.addAttribute( Attribute.HREF, HtmlTools.escapeHTML( href  ) );
-
-        if ( target != null )
+        if ( DoxiaUtils.isExternalLink( name ) )
         {
-            att.addAttribute( Attribute.TARGET, target );
-        }
+            String hrefClass = "externalLink";
+            if ( atts.isDefined( Attribute.CLASS.toString() ) )
+             {
+                 String givenClass = (String) atts.getAttribute( Attribute.CLASS.toString() );
+                 hrefClass = givenClass + " " + hrefClass;
+             }
 
-        if ( attributes != null )
-        {
-            attributes.removeAttribute( Attribute.HREF.toString() );
-            attributes.removeAttribute( Attribute.TARGET.toString() );
-            att.addAttributes( attributes );
+             atts.addAttribute( Attribute.CLASS, hrefClass );
         }
 
-        writeStartTag( HtmlMarkup.A, att );
+        atts.addAttribute( Attribute.HREF, HtmlTools.escapeHTML( name ) );
+
+        writeStartTag( HtmlMarkup.A, atts );
     }
 
     /**
diff --git a/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSinkTest.java b/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSinkTest.java
index 6e1652e6..098a8826 100644
--- a/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSinkTest.java
+++ b/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/Xhtml5BaseSinkTest.java
@@ -1094,7 +1094,7 @@ public class Xhtml5BaseSinkTest
             sink.close();
         }
 
-        assertEquals( "<tr class=\"a\" style=\"bold\"></tr>", writer.toString() );
+        assertEquals( "<tr style=\"bold\" class=\"a\"></tr>", writer.toString() );
     }
 
     /**
@@ -1208,7 +1208,7 @@ public class Xhtml5BaseSinkTest
             sink.close();
         }
 
-        assertEquals( "<a href=\"link.html\" style=\"bold\"></a>", writer.toString() );
+        assertEquals( "<a style=\"bold\" href=\"link.html\"></a>", writer.toString() );
     }
 
     /**
diff --git a/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSinkTest.java b/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSinkTest.java
index 9e498e25..a3c6d597 100644
--- a/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSinkTest.java
+++ b/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/XhtmlBaseSinkTest.java
@@ -712,7 +712,7 @@ public class XhtmlBaseSinkTest
             sink.close();
         }
 
-        assertEquals( "<tr class=\"a\" style=\"bold\"></tr>", writer.toString() );
+        assertEquals( "<tr style=\"bold\" class=\"a\"></tr>", writer.toString() );
     }
 
     /**
@@ -826,7 +826,7 @@ public class XhtmlBaseSinkTest
             sink.close();
         }
 
-        assertEquals( "<a href=\"link.html\" style=\"bold\"></a>", writer.toString() );
+        assertEquals( "<a style=\"bold\" href=\"link.html\"></a>", writer.toString() );
     }
 
     /**