You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by vh...@apache.org on 2013/04/08 13:51:53 UTC

svn commit: r1465599 [2/2] - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/accessibility/ src/java/org/apache/fop/accessibility/fo/ src/java/org/apache/fop/fo/ src/java/org/apache/fop/fo/extensions/ src/java/org/apache/fop/fo/extensions/destinatio...

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SimplePageMaster.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SimplePageMaster.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SimplePageMaster.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SimplePageMaster.java Mon Apr  8 11:51:52 2013
@@ -89,7 +89,7 @@ public class SimplePageMaster extends FO
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         LayoutMasterSet layoutMasterSet = (LayoutMasterSet) parent;
 
         if (masterName == null) {
@@ -103,7 +103,7 @@ public class SimplePageMaster extends FO
     }
 
     /** {@inheritDoc} */
-    protected void endOfNode() throws FOPException {
+    public void endOfNode() throws FOPException {
         if (!hasRegionBody) {
             missingChildElementError(
                     "(region-body, region-before?, region-after?, region-start?, region-end?)");

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java Mon Apr  8 11:51:52 2013
@@ -71,7 +71,7 @@ public class SinglePageMasterReference e
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         PageSequenceMaster pageSequenceMaster = (PageSequenceMaster) parent;
         pageSequenceMaster.addSubsequenceSpecifier(this);
     }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/StaticContent.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/StaticContent.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/StaticContent.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/StaticContent.java Mon Apr  8 11:51:52 2013
@@ -40,7 +40,7 @@ public class StaticContent extends Flow 
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         if (getFlowName() == null || getFlowName().equals("")) {
             missingPropertyError(FLOW_NAME);
         }
@@ -52,7 +52,7 @@ public class StaticContent extends Flow 
      * FOEventHandler that we are at the end of the flow.
      * {@inheritDoc}
      */
-    protected void endOfNode() throws FOPException {
+    public void endOfNode() throws FOPException {
         if (firstChild == null && getUserAgent().validateStrictly()) {
             missingChildElementError("(%block;)+");
         }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java Mon Apr  8 11:51:52 2013
@@ -102,7 +102,7 @@ public class Bookmark extends FObj imple
     }
 
     /** {@inheritDoc} */
-    protected void endOfNode() throws FOPException {
+    public void endOfNode() throws FOPException {
         if (bookmarkTitle == null) {
            missingChildElementError("(bookmark-title, bookmark*)");
         }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java Mon Apr  8 11:51:52 2013
@@ -56,7 +56,7 @@ public class BookmarkTree extends FObj {
     }
 
     /** {@inheritDoc} */
-        protected void endOfNode() throws FOPException {
+        public void endOfNode() throws FOPException {
         if (bookmarks == null) {
            missingChildElementError("(fo:bookmark+)");
         }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java Mon Apr  8 11:51:52 2013
@@ -37,7 +37,7 @@ public class PDFStructElem extends Struc
 
     private StructureType structureType;
 
-    private PDFStructElem parentElement;
+    protected PDFStructElem parentElement;
 
     /**
      * Elements to be added to the kids array.
@@ -231,6 +231,9 @@ public class PDFStructElem extends Struc
                         textBuffer.append(' ');
                     }
                     Object obj = kids.get(i);
+                    if (obj instanceof PDFStructElem) {
+                        ((PDFStructElem) obj).setParent(parentElement);
+                    }
                     formatObject(obj, out, textBuffer);
                 }
             }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPIncludeFormMapElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPIncludeFormMapElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPIncludeFormMapElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPIncludeFormMapElement.java Mon Apr  8 11:51:52 2013
@@ -54,7 +54,7 @@ public class AFPIncludeFormMapElement ex
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if (parent.getNameId() != Constants.FO_DECLARATIONS) {
             invalidChildError(getLocator(), parent.getName(), getNamespaceURI(), getName(),

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPInvokeMediumMapElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPInvokeMediumMapElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPInvokeMediumMapElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPInvokeMediumMapElement.java Mon Apr  8 11:51:52 2013
@@ -40,7 +40,7 @@ public class AFPInvokeMediumMapElement e
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if (parent.getNameId() != Constants.FO_PAGE_SEQUENCE
                 && parent.getNameId() != Constants.FO_SIMPLE_PAGE_MASTER) {

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java Mon Apr  8 11:51:52 2013
@@ -57,7 +57,7 @@ public class AFPPageOverlayElement exten
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if (AFPElementMapping.INCLUDE_PAGE_OVERLAY.equals(getLocalName())) {
             if (parent.getNameId() != Constants.FO_SIMPLE_PAGE_MASTER

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageSetupElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageSetupElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageSetupElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AFPPageSetupElement.java Mon Apr  8 11:51:52 2013
@@ -54,7 +54,7 @@ public class AFPPageSetupElement extends
 
     /** {@inheritDoc} */
     @Override
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if (AFPElementMapping.TAG_LOGICAL_ELEMENT.equals(getLocalName())) {
             if (parent.getNameId() != Constants.FO_SIMPLE_PAGE_MASTER

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AbstractAFPExtensionObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AbstractAFPExtensionObject.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AbstractAFPExtensionObject.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/extensions/AbstractAFPExtensionObject.java Mon Apr  8 11:51:52 2013
@@ -86,7 +86,7 @@ public abstract class AbstractAFPExtensi
     }
 
     /** {@inheritDoc} */
-    protected void endOfNode() throws FOPException {
+    public void endOfNode() throws FOPException {
         super.endOfNode();
     }
 

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFParser.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFParser.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFParser.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFParser.java Mon Apr  8 11:51:52 2013
@@ -163,25 +163,15 @@ public class IFParser implements IFConst
         private Map<String, StructureTreeElement> structureTreeElements
                 = new HashMap<String, StructureTreeElement>();
 
-        private final class StructureTreeHandler extends DefaultHandler {
+        private class StructureTreeHandler extends DefaultHandler {
 
-            private final Locale pageSequenceLanguage;
-
-            private final StructureTreeEventHandler structureTreeEventHandler;
+            protected final StructureTreeEventHandler structureTreeEventHandler;
 
-            private StructureTreeHandler(StructureTreeEventHandler structureTreeEventHandler,
-                    Locale pageSequenceLanguage) throws SAXException {
-                this.pageSequenceLanguage = pageSequenceLanguage;
+            StructureTreeHandler(StructureTreeEventHandler structureTreeEventHandler) {
                 this.structureTreeEventHandler = structureTreeEventHandler;
             }
 
             void startStructureTree(String type) {
-                structureTreeEventHandler.startPageSequence(pageSequenceLanguage, type);
-            }
-
-            public void endDocument() throws SAXException {
-                startIFElement(EL_PAGE_SEQUENCE, pageSequenceAttributes);
-                pageSequenceAttributes = null;
             }
 
             @Override
@@ -191,18 +181,19 @@ public class IFParser implements IFConst
                     if (localName.equals("marked-content")) {
                         localName = "#PCDATA";
                     }
+                    StructureTreeElement parent = getStructureTreeElement(attributes);
                     String structID = attributes.getValue(InternalElementMapping.URI,
                             InternalElementMapping.STRUCT_ID);
                     if (structID == null) {
-                        structureTreeEventHandler.startNode(localName, attributes);
+                        structureTreeEventHandler.startNode(localName, attributes, parent);
                     } else if (localName.equals("external-graphic")
                             || localName.equals("instream-foreign-object")) {
                         StructureTreeElement structureTreeElement
-                                = structureTreeEventHandler.startImageNode(localName, attributes);
+                                = structureTreeEventHandler.startImageNode(localName, attributes, parent);
                         structureTreeElements.put(structID, structureTreeElement);
                     } else {
                         StructureTreeElement structureTreeElement = structureTreeEventHandler
-                                    .startReferencedNode(localName, attributes);
+                                    .startReferencedNode(localName, attributes, parent);
                         structureTreeElements.put(structID, structureTreeElement);
                     }
                 }
@@ -217,6 +208,28 @@ public class IFParser implements IFConst
             }
         }
 
+        private class MainStructureTreeHandler extends StructureTreeHandler {
+
+            private final Locale pageSequenceLanguage;
+
+            MainStructureTreeHandler(StructureTreeEventHandler structureTreeEventHandler,
+                    Locale pageSequenceLanguage) throws SAXException {
+                super(structureTreeEventHandler);
+                this.pageSequenceLanguage = pageSequenceLanguage;
+            }
+
+            @Override
+            void startStructureTree(String type) {
+                structureTreeEventHandler.startPageSequence(pageSequenceLanguage, type);
+            }
+
+            public void endDocument() throws SAXException {
+                startIFElement(EL_PAGE_SEQUENCE, pageSequenceAttributes);
+                pageSequenceAttributes = null;
+            }
+
+        }
+
         public Handler(IFDocumentHandler documentHandler, FOUserAgent userAgent,
                 ElementMappingRegistry elementMappingRegistry) {
             this.documentHandler = documentHandler;
@@ -264,7 +277,7 @@ public class IFParser implements IFConst
                     if (localName.equals(EL_PAGE_SEQUENCE) && userAgent.isAccessibilityEnabled()) {
                         pageSequenceAttributes = new AttributesImpl(attributes);
                         Locale language = getLanguage(attributes);
-                        structureTreeHandler = new StructureTreeHandler(
+                        structureTreeHandler = new MainStructureTreeHandler(
                                 userAgent.getStructureTreeEventHandler(), language);
 
                     } else if (localName.equals(EL_STRUCTURE_TREE)) {
@@ -520,6 +533,7 @@ public class IFParser implements IFConst
 
             public void startElement(Attributes attributes) throws IFException {
                 documentHandler.startPageHeader();
+                structureTreeHandler = new StructureTreeHandler(userAgent.getStructureTreeEventHandler());
             }
 
             public void endElement() throws IFException {
@@ -842,12 +856,19 @@ public class IFParser implements IFConst
         }
 
         private void establishStructureTreeElement(Attributes attributes) {
-            String structRef = attributes.getValue(InternalElementMapping.URI,
-                    InternalElementMapping.STRUCT_REF);
+            StructureTreeElement element = getStructureTreeElement(attributes);
+            if (element != null) {
+                documentHandler.getContext().setStructureTreeElement(element);
+            }
+        }
+
+        private StructureTreeElement getStructureTreeElement(Attributes attributes) {
+            String structRef = attributes.getValue(InternalElementMapping.URI, InternalElementMapping.STRUCT_REF);
             if (structRef != null && structRef.length() > 0) {
                 assert structureTreeElements.containsKey(structRef);
-                StructureTreeElement structureTreeElement = structureTreeElements.get(structRef);
-                documentHandler.getContext().setStructureTreeElement(structureTreeElement);
+                return structureTreeElements.get(structRef);
+            } else {
+                return null;
             }
         }
 

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFSerializer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFSerializer.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFSerializer.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFSerializer.java Mon Apr  8 11:51:52 2013
@@ -314,6 +314,9 @@ implements IFConstants, IFPainter, IFDoc
     public void startPageHeader() throws IFException {
         try {
             handler.startElement(EL_PAGE_HEADER);
+            if (this.getUserAgent().isAccessibilityEnabled()) {
+                structureTreeBuilder.replayEventsForRetrievedMarkers(handler);
+            }
         } catch (SAXException e) {
             throw new IFException("SAX error in startPageHeader()", e);
         }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFStructureTreeBuilder.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFStructureTreeBuilder.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFStructureTreeBuilder.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/intermediate/IFStructureTreeBuilder.java Mon Apr  8 11:51:52 2013
@@ -33,6 +33,7 @@ import org.apache.fop.accessibility.Stru
 import org.apache.fop.accessibility.StructureTreeElement;
 import org.apache.fop.accessibility.StructureTreeEventHandler;
 import org.apache.fop.fo.extensions.InternalElementMapping;
+import org.apache.fop.util.XMLConstants;
 import org.apache.fop.util.XMLUtil;
 
 /**
@@ -176,6 +177,8 @@ final class IFStructureTreeBuilder imple
     private final List<SAXEventRecorder> pageSequenceEventRecorders
             = new ArrayList<SAXEventRecorder>();
 
+    private SAXEventRecorder retrievedMarkersEventRecorder;
+
     private int idCounter;
 
     /**
@@ -189,6 +192,16 @@ final class IFStructureTreeBuilder imple
         pageSequenceEventRecorders.get(pageSequenceIndex).replay(handler);
     }
 
+    public void replayEventsForRetrievedMarkers(ContentHandler handler) throws SAXException {
+        if (!retrievedMarkersEventRecorder.events.isEmpty()) {
+            delegate = StructureTree2SAXEventAdapter.newInstance(handler);
+            delegate.startPageSequence(null, null);
+            retrievedMarkersEventRecorder.replay(handler);
+            delegate.endPageSequence();
+            prepareRetrievedMarkersEventRecorder();
+        }
+    }
+
     public void startPageSequence(Locale locale, String role) {
         SAXEventRecorder eventRecorder = new SAXEventRecorder();
         pageSequenceEventRecorders.add(eventRecorder);
@@ -198,28 +211,51 @@ final class IFStructureTreeBuilder imple
 
     public void endPageSequence() {
          delegate.endPageSequence();
+         prepareRetrievedMarkersEventRecorder();
+    }
+
+    private void prepareRetrievedMarkersEventRecorder() {
+        SAXEventRecorder eventRecorder = new SAXEventRecorder();
+        retrievedMarkersEventRecorder = eventRecorder;
+        delegate = StructureTree2SAXEventAdapter.newInstance(eventRecorder);
     }
 
-    public StructureTreeElement startNode(String name, Attributes attributes) {
-        delegate.startNode(name, attributes);
+    public StructureTreeElement startNode(String name, Attributes attributes, StructureTreeElement parent) {
+        if (parent != null) {
+            attributes = addParentAttribute(new AttributesImpl(attributes), parent);
+        }
+        delegate.startNode(name, attributes, null);
         return new IFStructureTreeElement();
     }
 
+    private AttributesImpl addParentAttribute(AttributesImpl attributes, StructureTreeElement parent) {
+        if (parent != null) {
+            attributes.addAttribute(InternalElementMapping.URI,
+                    InternalElementMapping.STRUCT_REF,
+                    InternalElementMapping.STANDARD_PREFIX + ":" + InternalElementMapping.STRUCT_REF,
+                    XMLConstants.CDATA,
+                    ((IFStructureTreeElement) parent).getId());
+        }
+        return attributes;
+    }
+
     public void endNode(String name) {
         delegate.endNode(name);
     }
 
-    public StructureTreeElement startImageNode(String name, Attributes attributes) {
+    public StructureTreeElement startImageNode(String name, Attributes attributes, StructureTreeElement parent) {
         String id = getNextID();
         AttributesImpl atts = addIDAttribute(attributes, id);
-        delegate.startImageNode(name, atts);
+        addParentAttribute(atts, parent);
+        delegate.startImageNode(name, atts, null);
         return new IFStructureTreeElement(id);
     }
 
-    public StructureTreeElement startReferencedNode(String name, Attributes attributes) {
+    public StructureTreeElement startReferencedNode(String name, Attributes attributes, StructureTreeElement parent) {
         String id = getNextID();
         AttributesImpl atts = addIDAttribute(attributes, id);
-        delegate.startReferencedNode(name, atts);
+        addParentAttribute(atts, parent);
+        delegate.startReferencedNode(name, atts, null);
         return new IFStructureTreeElement(id);
     }
 

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java Mon Apr  8 11:51:52 2013
@@ -128,9 +128,10 @@ class PDFLogicalStructureHandler {
     }
 
     private MarkedContentInfo addToParentTree(PDFStructElem structureTreeElement) {
-        PDFStructElem parent = (structureTreeElement instanceof PDFStructElem.Placeholder)
-                ? structureTreeElement.getParentStructElem()
-                : structureTreeElement;
+        PDFStructElem parent = structureTreeElement;
+        while (parent instanceof PDFStructElem.Placeholder) {
+            parent = parent.getParentStructElem();
+        }
         pageParentTreeArray.add(parent);
         String type = parent.getStructureType().getName().toString();
         int mcid = pageParentTreeArray.length() - 1;

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFStructureTreeBuilder.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFStructureTreeBuilder.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFStructureTreeBuilder.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFStructureTreeBuilder.java Mon Apr  8 11:51:52 2013
@@ -96,8 +96,11 @@ class PDFStructureTreeBuilder implements
         addBuilder("float",                     StandardStructureTypes.Grouping.DIV);
         addBuilder("footnote",                  StandardStructureTypes.InlineLevelStructure.NOTE);
         addBuilder("footnote-body",             StandardStructureTypes.Grouping.SECT);
+        // Other Formatting Objects
         addBuilder("wrapper",                   StandardStructureTypes.InlineLevelStructure.SPAN);
         addBuilder("marker",                    StandardStructureTypes.Grouping.PRIVATE);
+        addBuilder("retrieve-marker",           new PlaceholderBuilder());
+        addBuilder("retrieve-table-marker",     new PlaceholderBuilder());
 
         addBuilder("#PCDATA", new PlaceholderBuilder());
     }
@@ -354,9 +357,9 @@ class PDFStructureTreeBuilder implements
     public void endPageSequence() {
     }
 
-    public StructureTreeElement startNode(String name, Attributes attributes) {
-        PDFStructElem parent = ancestors.getFirst();
-        PDFStructElem structElem = createStructureElement(name, parent, attributes,
+    public StructureTreeElement startNode(String name, Attributes attributes, StructureTreeElement parent) {
+        PDFStructElem parentElem = parent == null ? ancestors.getFirst() : (PDFStructElem) parent;
+        PDFStructElem structElem = createStructureElement(name, parentElem, attributes,
                 pdfFactory, eventBroadcaster);
         ancestors.addFirst(structElem);
         return structElem;
@@ -366,12 +369,12 @@ class PDFStructureTreeBuilder implements
         ancestors.removeFirst();
     }
 
-    public StructureTreeElement startImageNode(String name, Attributes attributes) {
-        return startNode(name, attributes);
+    public StructureTreeElement startImageNode(String name, Attributes attributes, StructureTreeElement parent) {
+        return startNode(name, attributes, parent);
     }
 
-    public StructureTreeElement startReferencedNode(String name, Attributes attributes) {
-        return startNode(name, attributes);
+    public StructureTreeElement startReferencedNode(String name, Attributes attributes, StructureTreeElement parent) {
+        return startNode(name, attributes, parent);
     }
 
 }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/extensions/PDFEmbeddedFileElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/extensions/PDFEmbeddedFileElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/extensions/PDFEmbeddedFileElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/extensions/PDFEmbeddedFileElement.java Mon Apr  8 11:51:52 2013
@@ -49,7 +49,7 @@ public class PDFEmbeddedFileElement exte
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if (parent.getNameId() != Constants.FO_DECLARATIONS) {
             invalidChildError(getLocator(), parent.getName(), getNamespaceURI(), getName(),

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSCommentElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSCommentElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSCommentElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSCommentElement.java Mon Apr  8 11:51:52 2013
@@ -42,7 +42,7 @@ public abstract class AbstractPSCommentE
      * @throws FOPException if there's a problem during processing
      * @see org.apache.fop.fo.FONode#startOfNode()
      */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         if (parent.getNameId() != Constants.FO_DECLARATIONS
                 && parent.getNameId() != Constants.FO_SIMPLE_PAGE_MASTER) {
             invalidChildError(getLocator(), parent.getName(), getNamespaceURI(), getName(),

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionElement.java Mon Apr  8 11:51:52 2013
@@ -97,7 +97,7 @@ public abstract class AbstractPSExtensio
      * @see org.apache.fop.fo.FONode#endOfNode()
      * @throws FOPException if there's a problem during processing
      */
-    protected void endOfNode() throws FOPException {
+    public void endOfNode() throws FOPException {
         super.endOfNode();
         String s = ((PSExtensionAttachment)getExtensionAttachment()).getContent();
         if (s == null || s.length() == 0) {

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionObject.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionObject.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionObject.java Mon Apr  8 11:51:52 2013
@@ -86,7 +86,7 @@ public abstract class AbstractPSExtensio
     }
 
     /** {@inheritDoc} */
-    protected void endOfNode() throws FOPException {
+    public void endOfNode() throws FOPException {
         super.endOfNode();
         String s = setupCode.getContent();
         if (s == null || s.length() == 0) {

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java Mon Apr  8 11:51:52 2013
@@ -40,7 +40,7 @@ public class PSPageSetupCodeElement exte
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if (parent.getNameId() != Constants.FO_SIMPLE_PAGE_MASTER) {
             invalidChildError(getLocator(), parent.getName(), getNamespaceURI(), getName(),

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java Mon Apr  8 11:51:52 2013
@@ -49,7 +49,7 @@ public class PSSetPageDeviceElement exte
      * @throws FOPException if there's a problem during processing
      * @see org.apache.fop.fo.FONode#startOfNode()
      */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if ( !((parent.getNameId() == Constants.FO_DECLARATIONS)
                 || (parent.getNameId() == Constants.FO_SIMPLE_PAGE_MASTER)) ) {

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java Mon Apr  8 11:51:52 2013
@@ -40,7 +40,7 @@ public class PSSetupCodeElement extends 
     }
 
     /** {@inheritDoc} */
-    protected void startOfNode() throws FOPException {
+    public void startOfNode() throws FOPException {
         super.startOfNode();
         if (parent.getNameId() != Constants.FO_DECLARATIONS) {
             invalidChildError(getLocator(), parent.getName(), getNamespaceURI(), getName(),

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java?rev=1465599&r1=1465598&r2=1465599&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java Mon Apr  8 11:51:52 2013
@@ -90,7 +90,7 @@ public class IFStructureTreeBuilderTestC
         final ContentHandler handler = mock(ContentHandler.class);
 
         sut.startPageSequence(null, null);
-        sut.startNode(nodeName, createSimpleAttributes(attributes));
+        sut.startNode(nodeName, createSimpleAttributes(attributes), null);
         sut.endPageSequence();
 
         sut.replayEventsForPageSequence(handler, 0);

Added: xmlgraphics/fop/trunk/test/pdf/accessibility/markers.fo
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/pdf/accessibility/markers.fo?rev=1465599&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/pdf/accessibility/markers.fo (added)
+++ xmlgraphics/fop/trunk/test/pdf/accessibility/markers.fo Mon Apr  8 11:51:52 2013
@@ -0,0 +1,169 @@
+<?xml version="1.0" standalone="no"?>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
+  xmlns:fox="http://xmlgraphics.apache.org/fop/extensions" xml:lang="en-GB">
+  <fo:layout-master-set>
+    <fo:simple-page-master master-name="page"
+      page-height="200pt" page-width="280pt" margin="10pt">
+      <fo:region-body/>
+      <fo:region-after extent="100pt" display-align="after"/>
+    </fo:simple-page-master>
+  </fo:layout-master-set>
+  <fo:page-sequence master-reference="page">
+    <fo:static-content flow-name="xsl-region-after" line-height="10pt" font-size="8pt">
+      <fo:block>Retrieving the marker:</fo:block>
+      <fo:retrieve-marker retrieve-class-name="marker"/>
+      <fo:block>Marker retrieved.</fo:block>
+    </fo:static-content>
+    <fo:flow flow-name="xsl-region-body">
+      <fo:block><fo:marker marker-class-name="marker">
+          <fo:table width="100%" table-layout="fixed">
+            <fo:table-header>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block-container>
+                    <fo:block>Inside a block-container.</fo:block>
+                  </fo:block-container>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>A character: <fo:character character="c" color="blue"/>.</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block text-align="center"><fo:instream-foreign-object fox:alt-text="Nice 
+                      circles." width="30pt" overflow="hidden" display-align="center" 
+                      content-width="30pt">
+                      <svg xmlns="http://www.w3.org/2000/svg" width="319" height="286.6">
+                        <g style="fill-opacity:0.7; stroke:black; stroke-width:3"
+                          transform="translate(0, 286.6) scale(1, -1) translate(100, 100)">
+                          <circle cx="50"  cy="86.6" r="80" style="fill:red;"/>
+                          <circle cx="0"   cy="0"    r="80" style="fill:green;"/>
+                          <circle cx="100" cy="0"    r="80" style="fill:blue;"/>
+                        </g>
+                      </svg>
+                  </fo:instream-foreign-object></fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block text-align-last="justify">Lead<fo:leader leader-pattern="dots" 
+                      leader-length.minimum="0" leader-length.optimum="100%"/>er.</fo:block>
+                  <fo:block>Page <fo:page-number/>.</fo:block>
+                  <fo:block-container absolute-position="absolute" width="35pt" height="10pt" top="20pt" 
+                    right="2pt" color="purple" text-align="right">
+                    <fo:block>Absolute.</fo:block>
+                  </fo:block-container>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-header>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.2</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.3</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.4</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.2</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.3</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.4</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+      </fo:table></fo:marker>Text in the region-body.</fo:block>
+    </fo:flow>
+  </fo:page-sequence>
+
+  <fo:page-sequence master-reference="page">
+    <fo:static-content flow-name="xsl-region-after" line-height="10pt" font-size="8pt" 
+      role="artifact">
+      <fo:block>This whole page footer should neither appear in the structure tree nor be read out 
+        loud.</fo:block>
+      <fo:block>Retrieving the marker:</fo:block>
+      <fo:retrieve-marker retrieve-class-name="marker"/>
+      <fo:block>Marker retrieved.</fo:block>
+    </fo:static-content>
+    <fo:flow flow-name="xsl-region-body">
+      <fo:block><fo:marker marker-class-name="marker">
+          <fo:table width="100%" table-layout="fixed">
+            <fo:table-header>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block-container>
+                    <fo:block>Inside a block-container.</fo:block>
+                  </fo:block-container>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>A character: <fo:character character="c" color="blue"/>.</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block text-align="center"><fo:instream-foreign-object fox:alt-text="Nice 
+                      circles." width="30pt" overflow="hidden" display-align="center" 
+                      content-width="30pt">
+                      <svg xmlns="http://www.w3.org/2000/svg" width="319" height="286.6">
+                        <g style="fill-opacity:0.7; stroke:black; stroke-width:3"
+                          transform="translate(0, 286.6) scale(1, -1) translate(100, 100)">
+                          <circle cx="50"  cy="86.6" r="80" style="fill:red;"/>
+                          <circle cx="0"   cy="0"    r="80" style="fill:green;"/>
+                          <circle cx="100" cy="0"    r="80" style="fill:blue;"/>
+                        </g>
+                      </svg>
+                  </fo:instream-foreign-object></fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block text-align-last="justify">Lead<fo:leader leader-pattern="dots" 
+                      leader-length.minimum="0" leader-length.optimum="100%"/>er.</fo:block>
+                  <fo:block>Page <fo:page-number/>.</fo:block>
+                  <fo:block-container absolute-position="absolute" width="35pt" height="10pt" top="20pt" 
+                    right="2pt" color="purple" text-align="right">
+                    <fo:block>Absolute.</fo:block>
+                  </fo:block-container>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-header>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.2</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.3</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>1.4</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.2</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.3</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black">
+                  <fo:block>2.4</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+      </fo:table></fo:marker>Text in the region-body.</fo:block>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>

Propchange: xmlgraphics/fop/trunk/test/pdf/accessibility/markers.fo
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/pdf/accessibility/markers.fo
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/markers.pdf
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/markers.pdf?rev=1465599&view=auto
==============================================================================
Binary file - no diff available.

Propchange: xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/markers.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org