diff options
author | Simon Steiner <ssteiner@apache.org> | 2025-01-23 14:28:09 +0000 |
---|---|---|
committer | Simon Steiner <ssteiner@apache.org> | 2025-01-23 14:28:09 +0000 |
commit | 52f63fea95d0feef5fe0367811d21940f772f147 (patch) | |
tree | cf96578a923ef7fd2c16d7a65188c0e3b3f7ff20 | |
parent | ebd103e1e1728bcca3e0e45a76066efd4541be70 (diff) | |
download | xmlgraphics-fop-52f63fea95d0feef5fe0367811d21940f772f147.tar.gz xmlgraphics-fop-52f63fea95d0feef5fe0367811d21940f772f147.zip |
FOP-3232: Allow instream-foreign-object role as artifact
2 files changed, 34 insertions, 7 deletions
diff --git a/fop-core/src/main/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java b/fop-core/src/main/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java index 4e2690b1c..d20e4d37a 100644 --- a/fop-core/src/main/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java +++ b/fop-core/src/main/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java @@ -626,6 +626,7 @@ public class FO2StructureTreeConverter extends DelegatingFOEventHandler { @Override public void startInstreamForeignObject(final InstreamForeignObject ifo) { + handleStartArtifact(ifo); startContent(new Event(this) { public void run() { eventHandler.startInstreamForeignObject(ifo); @@ -641,6 +642,7 @@ public class FO2StructureTreeConverter extends DelegatingFOEventHandler { eventHandler.endInstreamForeignObject(ifo); } }); + handleEndArtifact(ifo); super.endInstreamForeignObject(ifo); } diff --git a/fop-core/src/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java b/fop-core/src/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java index bc01abd51..57443e15d 100644 --- a/fop-core/src/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java +++ b/fop-core/src/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java @@ -42,12 +42,13 @@ import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.XMLAssert; +import org.custommonkey.xmlunit.XMLUnit; import org.junit.Test; import org.w3c.dom.Document; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -163,8 +164,7 @@ public class FO2StructureTreeConverterTestCase { + " </fo:flow>\n" + " </fo:page-sequence>\n" + "</fo:root>\n", - "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" - + "<structure-tree-sequence>\n" + "<structure-tree-sequence>\n" + "<structure-tree xmlns=\"http://xmlgraphics.apache.org/fop/intermediate\" " + "xmlns:foi=\"http://xmlgraphics.apache.org/fop/internal\" " + "xmlns:fox=\"http://xmlgraphics.apache.org/fop/extensions\">\n" @@ -184,8 +184,7 @@ public class FO2StructureTreeConverterTestCase { public void testRemoveTableHeader() throws Exception { keepEmptyTags = false; String fo = IOUtils.toString(getResource("table-artifact.fo"), "utf8").replace("role=\"artifact\"", ""); - compare(fo, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" - + "<structure-tree-sequence>\n" + compare(fo, "<structure-tree-sequence>\n" + "<structure-tree xmlns=\"http://xmlgraphics.apache.org/fop/intermediate\" " + "xmlns:foi=\"http://xmlgraphics.apache.org/fop/internal\" " + "xmlns:fox=\"http://xmlgraphics.apache.org/fop/extensions\">\n" @@ -224,7 +223,7 @@ public class FO2StructureTreeConverterTestCase { + "</fo:block></fo:flow>\n" + " </fo:page-sequence>\n" + "</fo:root>\n"; - compare(fo, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><structure-tree-sequence>" + compare(fo, "<structure-tree-sequence>" + "<structure-tree xmlns=\"http://xmlgraphics.apache.org/fop/intermediate\" " + "xmlns:foi=\"http://xmlgraphics.apache.org/fop/internal\" " + "xmlns:fox=\"http://xmlgraphics.apache.org/fop/extensions\">" @@ -232,6 +231,31 @@ public class FO2StructureTreeConverterTestCase { + "<fo:block/></fo:flow></structure-tree></structure-tree-sequence>"); } + @Test + public void testSVGArtifact() throws Exception { + String fo = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\" xmlns:svg=\"http://www.w3.org/2000/svg\">" + + " <fo:layout-master-set>\n" + + " <fo:simple-page-master page-width=\"8.5in\" page-height=\"11in\" master-name=\"Page\">\n" + + " <fo:region-body region-name=\"Body\"/>\n" + + " </fo:simple-page-master>\n" + + " </fo:layout-master-set>\n" + + " <fo:page-sequence master-reference=\"Page\">\n" + + " <fo:flow flow-name=\"Body\">\n" + + " <fo:block>\n" + + " <fo:instream-foreign-object role=\"artifact\">\n" + + " <svg:svg width=\"12cm\" height=\"12cm\">\n" + + " </svg:svg>\n" + + " </fo:instream-foreign-object>\n" + + " </fo:block>\n" + + " </fo:flow>\n" + + " </fo:page-sequence>\n" + + "</fo:root>"; + compare(fo, "<structure-tree-sequence><structure-tree xmlns=\"http://xmlgraphics.apache.org/fop/intermediate\">" + + "<fo:flow xmlns:fo=\"http://www.w3.org/1999/XSL/Format\" flow-name=\"xsl-region-body\">" + + "<fo:block><marked-content/><marked-content/></fo:block></fo:flow></structure-tree>" + + "</structure-tree-sequence>"); + } + private void compare(final String fo, String tree) throws Exception { foLoader = new FOLoader("") { public InputStream getFoInputStream() { @@ -244,7 +268,8 @@ public class FO2StructureTreeConverterTestCase { TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.transform(new DOMSource(doc), new StreamResult(sw)); - assertEquals(tree.replace("\n", ""), sw.toString().replace("\n", "")); + XMLUnit.setIgnoreWhitespace(true); + XMLAssert.assertXMLEqual(tree, sw.toString()); } private void testConverter(String foResourceName) throws Exception { |