This is an automated email from the ASF dual-hosted git repository. michaelo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-doxia.git
commit aa73a3c6e8e1372c068edef76c4a46e829398a78 Author: Michael Osipov <micha...@apache.org> AuthorDate: Mon Jun 5 21:05:29 2023 +0200 [DOXIA-704] style and class attributes not merged when user-supplied in XHTML5 sink --- .../maven/doxia/parser/Xhtml5BaseParser.java | 10 +-- .../maven/doxia/sink/impl/Xhtml5BaseSink.java | 74 ++++++++++++---------- .../maven/doxia/sink/impl/Xhtml5BaseSinkTest.java | 19 +++--- .../maven/doxia/module/xdoc/XdocSinkTest.java | 2 +- .../doxia-module-xdoc/src/test/resources/test.xml | 4 +- .../maven/doxia/module/xhtml5/Xhtml5SinkTest.java | 2 +- 6 files changed, 61 insertions(+), 50 deletions(-) diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/parser/Xhtml5BaseParser.java b/doxia-core/src/main/java/org/apache/maven/doxia/parser/Xhtml5BaseParser.java index 6af7143e..2e9108e8 100644 --- a/doxia-core/src/main/java/org/apache/maven/doxia/parser/Xhtml5BaseParser.java +++ b/doxia-core/src/main/java/org/apache/maven/doxia/parser/Xhtml5BaseParser.java @@ -865,19 +865,19 @@ public class Xhtml5BaseParser extends AbstractXmlParser implements HtmlMarkup { if (style != null) { switch (style) { - case "list-style-type: upper-alpha": + case "list-style-type: upper-alpha;": numbering = Sink.NUMBERING_UPPER_ALPHA; break; - case "list-style-type: lower-alpha": + case "list-style-type: lower-alpha;": numbering = Sink.NUMBERING_LOWER_ALPHA; break; - case "list-style-type: upper-roman": + case "list-style-type: upper-roman;": numbering = Sink.NUMBERING_UPPER_ROMAN; break; - case "list-style-type: lower-roman": + case "list-style-type: lower-roman;": numbering = Sink.NUMBERING_LOWER_ROMAN; break; - case "list-style-type: decimal": + case "list-style-type: decimal;": numbering = Sink.NUMBERING_DECIMAL; break; default: 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 565fa743..eca97681 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 @@ -19,7 +19,6 @@ package org.apache.maven.doxia.sink.impl; import javax.swing.text.MutableAttributeSet; -import javax.swing.text.html.HTML.Attribute; import javax.swing.text.html.HTML.Tag; import java.io.PrintWriter; @@ -570,10 +569,13 @@ public class Xhtml5BaseSink extends AbstractXmlSink implements HtmlMarkup { atts = new SinkEventAttributeSet(1); } - if (!atts.isDefined(SinkEventAttributes.CLASS)) { - atts.addAttribute(SinkEventAttributes.CLASS, "content"); + String divClass = "content"; + if (atts.isDefined(SinkEventAttributes.CLASS)) { + divClass += " " + atts.getAttribute(SinkEventAttributes.CLASS).toString(); } + atts.addAttribute(SinkEventAttributes.CLASS, divClass); + writeStartTag(contentStack.push(HtmlMarkup.DIV), atts); } } @@ -703,24 +705,25 @@ public class Xhtml5BaseSink extends AbstractXmlSink implements HtmlMarkup { paragraph_(); } - String style; + String olStyle = "list-style-type: "; switch (numbering) { case NUMBERING_UPPER_ALPHA: - style = "upper-alpha"; + olStyle += "upper-alpha"; break; case NUMBERING_LOWER_ALPHA: - style = "lower-alpha"; + olStyle += "lower-alpha"; break; case NUMBERING_UPPER_ROMAN: - style = "upper-roman"; + olStyle += "upper-roman"; break; case NUMBERING_LOWER_ROMAN: - style = "lower-roman"; + olStyle += "lower-roman"; break; case NUMBERING_DECIMAL: default: - style = "decimal"; + olStyle += "decimal"; } + olStyle += ";"; MutableAttributeSet atts = SinkUtils.filterAttributes(attributes, SinkUtils.SINK_SECTION_ATTRIBUTES); @@ -728,7 +731,11 @@ public class Xhtml5BaseSink extends AbstractXmlSink implements HtmlMarkup { atts = new SinkEventAttributeSet(1); } - atts.addAttribute(Attribute.STYLE, "list-style-type: " + style); + if (atts.isDefined(SinkEventAttributes.STYLE)) { + olStyle += " " + atts.getAttribute(SinkEventAttributes.STYLE).toString(); + } + + atts.addAttribute(SinkEventAttributes.STYLE, olStyle); writeStartTag(HtmlMarkup.OL, atts); } @@ -1266,10 +1273,16 @@ public class Xhtml5BaseSink extends AbstractXmlSink implements HtmlMarkup { MutableAttributeSet att = new SinkEventAttributeSet(); - if (!this.tableAttributes.isDefined(Attribute.CLASS.toString())) { - att.addAttribute(Attribute.CLASS, "bodyTable" + (grid ? " bodyTableBorder" : "")); + String tableClass = "bodyTable" + (grid ? " bodyTableBorder" : ""); + if (this.tableAttributes.isDefined(SinkEventAttributes.CLASS.toString())) { + tableClass += " " + + this.tableAttributes + .getAttribute(SinkEventAttributes.CLASS) + .toString(); } + att.addAttribute(SinkEventAttributes.CLASS, tableClass); + att.addAttributes(this.tableAttributes); this.tableAttributes.removeAttributes(this.tableAttributes); @@ -1324,7 +1337,7 @@ public class Xhtml5BaseSink extends AbstractXmlSink implements HtmlMarkup { if (HIDDEN_CLASS_PATTERN.matcher(givenRowClass).matches()) { hidden = true; } - rowClass = givenRowClass + " " + rowClass; + rowClass += " " + givenRowClass; } attrs.addAttribute(SinkEventAttributes.CLASS, rowClass); @@ -1390,26 +1403,23 @@ public class Xhtml5BaseSink extends AbstractXmlSink implements HtmlMarkup { && !cellJustifStack.isEmpty() && getCellJustif() != null) { int cellCount = getCellCount(); - if (cellCount < getCellJustif().length - && (attributes == null || !attributes.isDefined(Attribute.STYLE.toString()))) { - Map<Integer, MutableAttributeSet> hash = new HashMap<>(); - hash.put( - Sink.JUSTIFY_CENTER, - new SinkEventAttributeSet(SinkEventAttributes.STYLE, "text-align: center;").unmodifiable()); - hash.put( - Sink.JUSTIFY_LEFT, - new SinkEventAttributeSet(SinkEventAttributes.STYLE, "text-align: left;").unmodifiable()); - hash.put( - Sink.JUSTIFY_RIGHT, - new SinkEventAttributeSet(SinkEventAttributes.STYLE, "text-align: right;").unmodifiable()); - MutableAttributeSet atts = hash.get(getCellJustif()[cellCount]); - + int[] cellJustif = getCellJustif(); + if (cellCount < cellJustif.length) { if (attributes == null) { attributes = new SinkEventAttributeSet(); } - if (atts != null) { - attributes.addAttributes(atts); + Map<Integer, String> hash = new HashMap<>(); + hash.put(Sink.JUSTIFY_CENTER, "center"); + hash.put(Sink.JUSTIFY_LEFT, "left"); + hash.put(Sink.JUSTIFY_RIGHT, "right"); + + String tdStyle = "text-align: " + hash.get(cellJustif[cellCount]) + ";"; + if (attributes.isDefined(SinkEventAttributes.STYLE)) { + tdStyle += " " + + attributes.getAttribute(SinkEventAttributes.STYLE).toString(); } + + attributes.addAttribute(SinkEventAttributes.STYLE, tdStyle); } } @@ -1574,9 +1584,9 @@ public class Xhtml5BaseSink extends AbstractXmlSink implements HtmlMarkup { if (DoxiaUtils.isExternalLink(name)) { String linkClass = "externalLink"; - if (atts.isDefined(Attribute.CLASS.toString())) { - String givenLinkClass = (String) atts.getAttribute(Attribute.CLASS.toString()); - linkClass = givenLinkClass + " " + linkClass; + if (atts.isDefined(SinkEventAttributes.CLASS.toString())) { + String givenLinkClass = (String) atts.getAttribute(SinkEventAttributes.CLASS.toString()); + linkClass += " " + givenLinkClass; } atts.addAttribute(SinkEventAttributes.CLASS, linkClass); 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 48705219..0d0bf606 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 @@ -445,7 +445,7 @@ public class Xhtml5BaseSinkTest { sink.numberedList_(); } - assertEquals("<ol style=\"list-style-type: decimal\">" + LS + "<li></li></ol>", writer.toString()); + assertEquals("<ol style=\"list-style-type: decimal;\">" + LS + "<li></li></ol>", writer.toString()); writer = new StringWriter(); @@ -457,7 +457,8 @@ public class Xhtml5BaseSinkTest { } assertEquals( - "<ol style=\"list-style-type: decimal\">" + LS + "<li style=\"bold\"></li></ol>", writer.toString()); + "<ol style=\"list-style-type: decimal; bold\">" + LS + "<li style=\"bold\"></li></ol>", + writer.toString()); } /** @@ -793,13 +794,13 @@ public class Xhtml5BaseSinkTest { StringBuilder expected = new StringBuilder("<table class=\"bodyTable\">"); expected.append(EOL).append("<tr class=\"a\"></tr>").append(EOL); expected.append("<tr style=\"bold\" class=\"b\"></tr>").append(EOL); - expected.append("<tr class=\"hidden xyz abc a\"></tr>").append(EOL); - expected.append("<tr class=\"abc hidden xyz a\"></tr>").append(EOL); + expected.append("<tr class=\"a hidden xyz abc\"></tr>").append(EOL); + expected.append("<tr class=\"a abc hidden xyz\"></tr>").append(EOL); expected.append("<tr class=\"a\"></tr>").append(EOL); - expected.append("<tr class=\"not-hidden xyz b\"></tr>").append(EOL); - expected.append("<tr class=\"xyz not-hidden a\"></tr>").append(EOL); - expected.append("<tr style=\"bold\" class=\"xyz abc hidden b\"></tr>").append(EOL); - expected.append("<tr class=\"xyz hidden-not b\"></tr>").append(EOL); + expected.append("<tr class=\"b not-hidden xyz\"></tr>").append(EOL); + expected.append("<tr class=\"a xyz not-hidden\"></tr>").append(EOL); + expected.append("<tr style=\"bold\" class=\"b xyz abc hidden\"></tr>").append(EOL); + expected.append("<tr class=\"b xyz hidden-not\"></tr>").append(EOL); expected.append("<tr class=\"a\"></tr></table>"); String xmlExpected = expected.toString(); @@ -912,7 +913,7 @@ public class Xhtml5BaseSinkTest { } assertEquals( - "<a style=\"bold\" class=\"cs1 cs2 externalLink\" href=\"https://www.apache.org\"></a>", + "<a style=\"bold\" class=\"externalLink cs1 cs2\" href=\"https://www.apache.org\"></a>", writer.toString()); } diff --git a/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java b/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java index ee951c3b..66b81f17 100644 --- a/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java +++ b/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java @@ -184,7 +184,7 @@ public class XdocSinkTest extends AbstractSinkTest { /** {@inheritDoc} */ protected String getNumberedListBlock(String item) { - return "<ol style=\"list-style-type: lower-roman\">\n<li>" + item + "</li></ol>"; + return "<ol style=\"list-style-type: lower-roman;\">\n<li>" + item + "</li></ol>"; } /** {@inheritDoc} */ diff --git a/doxia-modules/doxia-module-xdoc/src/test/resources/test.xml b/doxia-modules/doxia-module-xdoc/src/test/resources/test.xml index 8acb9059..211b884c 100644 --- a/doxia-modules/doxia-module-xdoc/src/test/resources/test.xml +++ b/doxia-modules/doxia-module-xdoc/src/test/resources/test.xml @@ -53,8 +53,8 @@ <source>Verbatim text not contained in list item 3</source> - <ol style="list-style-type: decimal"> - <li>Numbered item 1. <ol style="list-style-type: upper-alpha"> + <ol style="list-style-type: decimal;"> + <li>Numbered item 1. <ol style="list-style-type: upper-alpha;"> <li>Numbered item A.</li> <li>Numbered item B.</li> </ol> diff --git a/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java b/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java index f1dc2916..f87b9e1d 100644 --- a/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java +++ b/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java @@ -171,7 +171,7 @@ public class Xhtml5SinkTest extends AbstractSinkTest { /** {@inheritDoc} */ protected String getNumberedListBlock(String item) { - return "<ol style=\"list-style-type: lower-roman\">\n<li>" + item + "</li></ol>"; + return "<ol style=\"list-style-type: lower-roman;\">\n<li>" + item + "</li></ol>"; } /** {@inheritDoc} */