From 58b1bacffb2df443297752812203d775d60ecd35 Mon Sep 17 00:00:00 2001 From: Naimdjon Takhirov Date: Fri, 12 Mar 2021 08:23:53 +0100 Subject: [PATCH 1/2] Support for li/@value override. --- .gitignore | 4 +++ .../docx4j/convert/in/xhtml/ListHelper.java | 10 ++++-- .../convert/in/xhtml/NumberingTest.java | 31 +++++++++++++++++-- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index df6b463..8b0bd65 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ /bin-testOutput/ /openhtmltopdf_2021.txt + +#IntelliJ IDEA files +.idea +*.iml diff --git a/src/main/java/org/docx4j/convert/in/xhtml/ListHelper.java b/src/main/java/org/docx4j/convert/in/xhtml/ListHelper.java index 980f0ac..4483892 100644 --- a/src/main/java/org/docx4j/convert/in/xhtml/ListHelper.java +++ b/src/main/java/org/docx4j/convert/in/xhtml/ListHelper.java @@ -72,6 +72,9 @@ import org.w3c.dom.css.CSSPrimitiveValue; import org.w3c.dom.css.CSSValue; + +import static org.docx4j.com.google.common.base.Strings.isNullOrEmpty; + public class ListHelper { public static Logger log = LoggerFactory.getLogger(ListHelper.class); @@ -548,10 +551,11 @@ void addNumbering(P p, Element e, Map cssMap) { NumberFormat specified = getNumberFormatFromCSSListStyleType( cssMap.get("list-style-type" ).getCssText()); - + final String valueAttribute = e.getAttribute("value"); if (peekListItemStateStack().isFirstItem // and level already exists, || numfmtExisting ==null - || numfmtExisting.getVal()!=specified ) { + || numfmtExisting.getVal()!=specified + || !isNullOrEmpty(valueAttribute)) { // can't re-use.. @@ -600,7 +604,7 @@ void addNumbering(P p, Element e, Map cssMap) { int ilvl = lvl.getIlvl().intValue(); log.debug("concrete list points at abstract " + getConcreteList().getAbstractNumId().getVal().longValue()); long newNumId = ndp.restart(getConcreteList().getNumId().longValue(), ilvl, - /* restart at */ 1); + /* restart at */ isNullOrEmpty(valueAttribute)?1:Integer.parseInt(valueAttribute)); // retrieve it ListNumberingDefinition listDef = ndp.getInstanceListDefinitions().get(""+newNumId); diff --git a/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java b/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java index f033a7d..49f998e 100644 --- a/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java +++ b/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java @@ -58,6 +58,9 @@ import org.junit.Ignore; import org.junit.Test; + +import static org.junit.Assert.assertEquals; + public class NumberingTest { private WordprocessingMLPackage wordMLPackage; @@ -475,7 +478,32 @@ public void testUnorderedCssOnLiToIndent() throws Docx4JException { assertTrue( p.getPPr().getInd()==null); } - + + @Test public void testListItemValueOverridden() throws Docx4JException { + this.addNumberingPart(wordMLPackage.getMainDocumentPart()); + this.addStylesPart(wordMLPackage.getMainDocumentPart()); + String xhtml= "
" + + "
    " + +"
  1. Item 1
  2. " + +"
  3. Second item with 1 as number
  4. " + +"
  5. Item 2
  6. " + +"
  7. Second item with 2 as number
  8. " + +"
"+ + "
"; + List results = convert( xhtml, FormattingOption.CLASS_PLUS_OTHER); + wordMLPackage.getMainDocumentPart().getContent().addAll(results); + System.out.println(XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true)); + final P item1 = (P) results.get(0); + final P secondItem1 = (P) results.get(1); + final P item2 = (P) results.get(2); + final P secondItem2 = (P) results.get(3); + assertEquals(BigInteger.valueOf(2L),item1.getPPr().getNumPr().getNumId().getVal()); + assertEquals(BigInteger.valueOf(3L),secondItem1.getPPr().getNumPr().getNumId().getVal()); + assertEquals(BigInteger.valueOf(3L),item2.getPPr().getNumPr().getNumId().getVal()); + assertEquals(BigInteger.valueOf(4L),secondItem2.getPPr().getNumPr().getNumId().getVal()); + } + + // =============================================================================== // machinery / helpers @@ -929,7 +957,6 @@ public Numbering getNumbering() { return numbering; } - } From 1c7d1159261f42dce3a216b6f4e7f0b74538b4d8 Mon Sep 17 00:00:00 2001 From: Naimdjon Takhirov Date: Fri, 12 Mar 2021 08:39:26 +0100 Subject: [PATCH 2/2] Remove sysout. --- src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java b/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java index 49f998e..210186d 100644 --- a/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java +++ b/src/test/java/org/docx4j/convert/in/xhtml/NumberingTest.java @@ -492,7 +492,6 @@ public void testUnorderedCssOnLiToIndent() throws Docx4JException { ""; List results = convert( xhtml, FormattingOption.CLASS_PLUS_OTHER); wordMLPackage.getMainDocumentPart().getContent().addAll(results); - System.out.println(XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true)); final P item1 = (P) results.get(0); final P secondItem1 = (P) results.get(1); final P item2 = (P) results.get(2);