Subject: [PATCH 05/20] Implement mapping functions of FO objects to structure tree

---
 .../org/apache/fop/fo/flow/AbstractGraphics.java   |   11 +++++++++++
 .../apache/fop/fo/flow/AbstractListItemPart.java   |    9 +++++++++
 .../fop/fo/flow/AbstractPageNumberCitation.java    |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/Block.java         |   10 ++++++++++
 .../org/apache/fop/fo/flow/BlockContainer.java     |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/Character.java     |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/Float.java         |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/Footnote.java      |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/FootnoteBody.java  |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/Inline.java        |   10 ++++++++++
 .../org/apache/fop/fo/flow/InlineContainer.java    |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/ListBlock.java     |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/ListItem.java      |   14 ++++++++++++++
 src/java/org/apache/fop/fo/flow/Marker.java        |    9 +++++++++
 src/java/org/apache/fop/fo/flow/PageNumber.java    |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/Wrapper.java       |   10 ++++++++++
 src/java/org/apache/fop/fo/flow/table/Table.java   |   16 ++++++++++++++++
 .../apache/fop/fo/flow/table/TableAndCaption.java  |   10 ++++++++++
 .../org/apache/fop/fo/flow/table/TableCaption.java |    9 +++++++++
 .../org/apache/fop/fo/flow/table/TableFObj.java    |   10 ++++++++++
 src/java/org/apache/fop/fo/pagination/Flow.java    |    8 ++++++++
 21 files changed, 216 insertions(+), 0 deletions(-)

diff --git a/src/java/org/apache/fop/fo/flow/AbstractGraphics.java b/src/java/org/apache/fop/fo/flow/AbstractGraphics.java
index 045ee81..ba7cf67 100644
--- a/src/java/org/apache/fop/fo/flow/AbstractGraphics.java
+++ b/src/java/org/apache/fop/fo/flow/AbstractGraphics.java
@@ -19,6 +19,7 @@
 
 package org.apache.fop.fo.flow;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.FONode;
@@ -221,6 +222,16 @@ public abstract class AbstractGraphics extends FObj
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        structure.setAltText(altText);
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getPtr() {
         return ptr;
     }
diff --git a/src/java/org/apache/fop/fo/flow/AbstractListItemPart.java b/src/java/org/apache/fop/fo/flow/AbstractListItemPart.java
index 60c47d5..db1a092 100644
--- a/src/java/org/apache/fop/fo/flow/AbstractListItemPart.java
+++ b/src/java/org/apache/fop/fo/flow/AbstractListItemPart.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.flow;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
@@ -92,5 +93,13 @@ public abstract class AbstractListItemPart extends FObj {
     public KeepProperty getKeepTogether() {
         return keepTogether;
     }
+
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
 }
 
diff --git a/src/java/org/apache/fop/fo/flow/AbstractPageNumberCitation.java b/src/java/org/apache/fop/fo/flow/AbstractPageNumberCitation.java
index 50c8479..78b6ccd 100644
--- a/src/java/org/apache/fop/fo/flow/AbstractPageNumberCitation.java
+++ b/src/java/org/apache/fop/fo/flow/AbstractPageNumberCitation.java
@@ -24,6 +24,7 @@ import java.awt.Color;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.Constants;
@@ -147,6 +148,15 @@ public abstract class AbstractPageNumberCitation extends FObj
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getPtr() {
         return ptr;
     }
diff --git a/src/java/org/apache/fop/fo/flow/Block.java b/src/java/org/apache/fop/fo/flow/Block.java
index a3b6110..39e870e 100644
--- a/src/java/org/apache/fop/fo/flow/Block.java
+++ b/src/java/org/apache/fop/fo/flow/Block.java
@@ -23,6 +23,7 @@ import java.awt.Color;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.datatypes.Numeric;
@@ -178,6 +179,15 @@ public class Block extends FObjMixed implements BreakPropertySet, StructurePoint
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getPtr() {
         return ptr;
     }
diff --git a/src/java/org/apache/fop/fo/flow/BlockContainer.java b/src/java/org/apache/fop/fo/flow/BlockContainer.java
index 04bf937..a78eb91 100644
--- a/src/java/org/apache/fop/fo/flow/BlockContainer.java
+++ b/src/java/org/apache/fop/fo/flow/BlockContainer.java
@@ -19,6 +19,7 @@
 
 package org.apache.fop.fo.flow;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Numeric;
 import org.apache.fop.fo.FONode;
@@ -235,6 +236,15 @@ public class BlockContainer extends FObj implements BreakPropertySet {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "block-container";
     }
diff --git a/src/java/org/apache/fop/fo/flow/Character.java b/src/java/org/apache/fop/fo/flow/Character.java
index 817894b..89bcc42 100644
--- a/src/java/org/apache/fop/fo/flow/Character.java
+++ b/src/java/org/apache/fop/fo/flow/Character.java
@@ -24,6 +24,7 @@ import java.util.NoSuchElementException;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.CharIterator;
@@ -213,6 +214,15 @@ public class Character extends FObj implements StructurePointerPropertySet {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getPtr() {
         return ptr;
     }
diff --git a/src/java/org/apache/fop/fo/flow/Float.java b/src/java/org/apache/fop/fo/flow/Float.java
index bb51332..62b2113 100644
--- a/src/java/org/apache/fop/fo/flow/Float.java
+++ b/src/java/org/apache/fop/fo/flow/Float.java
@@ -22,6 +22,7 @@ package org.apache.fop.fo.flow;
 // XML
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
@@ -82,6 +83,15 @@ public class Float extends FObj {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "float";
     }
diff --git a/src/java/org/apache/fop/fo/flow/Footnote.java b/src/java/org/apache/fop/fo/flow/Footnote.java
index 2f28f2f..db158e7 100644
--- a/src/java/org/apache/fop/fo/flow/Footnote.java
+++ b/src/java/org/apache/fop/fo/flow/Footnote.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.flow;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
@@ -130,6 +131,15 @@ public class Footnote extends FObj {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "footnote";
     }
diff --git a/src/java/org/apache/fop/fo/flow/FootnoteBody.java b/src/java/org/apache/fop/fo/flow/FootnoteBody.java
index a2b3f39..a7da10c 100644
--- a/src/java/org/apache/fop/fo/flow/FootnoteBody.java
+++ b/src/java/org/apache/fop/fo/flow/FootnoteBody.java
@@ -22,6 +22,7 @@ package org.apache.fop.fo.flow;
 // XML
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
@@ -84,6 +85,15 @@ public class FootnoteBody extends FObj {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "footnote-body";
     }
diff --git a/src/java/org/apache/fop/fo/flow/Inline.java b/src/java/org/apache/fop/fo/flow/Inline.java
index c06ed1b..26ee607 100644
--- a/src/java/org/apache/fop/fo/flow/Inline.java
+++ b/src/java/org/apache/fop/fo/flow/Inline.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.flow;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.FONode;
@@ -151,6 +152,15 @@ public class Inline extends InlineLevel implements StructurePointerPropertySet {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getPtr() {
         return ptr;
     }
diff --git a/src/java/org/apache/fop/fo/flow/InlineContainer.java b/src/java/org/apache/fop/fo/flow/InlineContainer.java
index fd65047..b94b66e 100644
--- a/src/java/org/apache/fop/fo/flow/InlineContainer.java
+++ b/src/java/org/apache/fop/fo/flow/InlineContainer.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.flow;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.datatypes.Numeric;
@@ -194,6 +195,15 @@ public class InlineContainer extends FObj {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "inline-container";
     }
diff --git a/src/java/org/apache/fop/fo/flow/ListBlock.java b/src/java/org/apache/fop/fo/flow/ListBlock.java
index 6d7ab3f..591ed86 100644
--- a/src/java/org/apache/fop/fo/flow/ListBlock.java
+++ b/src/java/org/apache/fop/fo/flow/ListBlock.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.flow;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.FONode;
@@ -171,6 +172,15 @@ public class ListBlock extends FObj implements BreakPropertySet {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "list-block";
     }
diff --git a/src/java/org/apache/fop/fo/flow/ListItem.java b/src/java/org/apache/fop/fo/flow/ListItem.java
index 8192b97..80b98c9 100644
--- a/src/java/org/apache/fop/fo/flow/ListItem.java
+++ b/src/java/org/apache/fop/fo/flow/ListItem.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.flow;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
@@ -184,6 +185,19 @@ public class ListItem extends FObj implements BreakPropertySet {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+        if (label != null)
+            label.addStructureElements(structure);
+        if (body != null)
+            body.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "list-item";
     }
diff --git a/src/java/org/apache/fop/fo/flow/Marker.java b/src/java/org/apache/fop/fo/flow/Marker.java
index 71596b7..eabb183 100644
--- a/src/java/org/apache/fop/fo/flow/Marker.java
+++ b/src/java/org/apache/fop/fo/flow/Marker.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FOTreeBuilderContext;
@@ -133,6 +134,14 @@ public class Marker extends FObjMixed {
         return markerClassName;
     }
 
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
     /** {@inheritDoc} */
     public String getLocalName() {
         return "marker";
diff --git a/src/java/org/apache/fop/fo/flow/PageNumber.java b/src/java/org/apache/fop/fo/flow/PageNumber.java
index eb59e68..fd287d4 100644
--- a/src/java/org/apache/fop/fo/flow/PageNumber.java
+++ b/src/java/org/apache/fop/fo/flow/PageNumber.java
@@ -23,6 +23,7 @@ import java.awt.Color;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.Constants;
@@ -171,6 +172,15 @@ public class PageNumber extends FObj implements StructurePointerPropertySet {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getPtr() {
         return ptr;
     }
diff --git a/src/java/org/apache/fop/fo/flow/Wrapper.java b/src/java/org/apache/fop/fo/flow/Wrapper.java
index 2adae9c..119a76e 100644
--- a/src/java/org/apache/fop/fo/flow/Wrapper.java
+++ b/src/java/org/apache/fop/fo/flow/Wrapper.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.flow;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.Constants;
 import org.apache.fop.fo.FONode;
@@ -119,6 +120,15 @@ public class Wrapper extends FObjMixed {
         }
     }
 
+
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
     /** {@inheritDoc} */
     public String getLocalName() {
         return "wrapper";
diff --git a/src/java/org/apache/fop/fo/flow/table/Table.java b/src/java/org/apache/fop/fo/flow/table/Table.java
index 3b71e91..125df93 100644
--- a/src/java/org/apache/fop/fo/flow/table/Table.java
+++ b/src/java/org/apache/fop/fo/flow/table/Table.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.datatypes.ValidationPercentBaseContext;
@@ -511,6 +512,21 @@ public class Table extends TableFObj implements ColumnNumberManagerHolder, Break
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        parent.addChild(structure);
+        if (tableHeader != null)
+            tableHeader.addStructureElements(structure);
+
+        addChildStructureElements(structure);
+
+        if (tableFooter != null)
+            tableFooter.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "table";
     }
diff --git a/src/java/org/apache/fop/fo/flow/table/TableAndCaption.java b/src/java/org/apache/fop/fo/flow/table/TableAndCaption.java
index e5bdbb5..2cb98d9 100644
--- a/src/java/org/apache/fop/fo/flow/table/TableAndCaption.java
+++ b/src/java/org/apache/fop/fo/flow/table/TableAndCaption.java
@@ -22,6 +22,7 @@ package org.apache.fop.fo.flow.table;
 // XML
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
@@ -125,6 +126,15 @@ public class TableAndCaption extends FObj /*implements BreakPropertySet*/ {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "table-and-caption";
     }
diff --git a/src/java/org/apache/fop/fo/flow/table/TableCaption.java b/src/java/org/apache/fop/fo/flow/table/TableCaption.java
index 0ae9241..d47e7f5 100644
--- a/src/java/org/apache/fop/fo/flow/table/TableCaption.java
+++ b/src/java/org/apache/fop/fo/flow/table/TableCaption.java
@@ -101,6 +101,15 @@ public class TableCaption extends FObj {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(newPtrId());
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "table-caption";
     }
diff --git a/src/java/org/apache/fop/fo/flow/table/TableFObj.java b/src/java/org/apache/fop/fo/flow/table/TableFObj.java
index d6c9185..3949e9e 100644
--- a/src/java/org/apache/fop/fo/flow/table/TableFObj.java
+++ b/src/java/org/apache/fop/fo/flow/table/TableFObj.java
@@ -22,6 +22,7 @@ package org.apache.fop.fo.flow.table;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Numeric;
 import org.apache.fop.datatypes.ValidationPercentBaseContext;
@@ -244,6 +245,15 @@ public abstract class TableFObj extends FObj implements StructurePointerProperty
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        structure.setRole(role);
+        structure.setPtr(ptr);
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getPtr() {
         return ptr;
     }
diff --git a/src/java/org/apache/fop/fo/pagination/Flow.java b/src/java/org/apache/fop/fo/pagination/Flow.java
index 5b4be56..e340469 100644
--- a/src/java/org/apache/fop/fo/pagination/Flow.java
+++ b/src/java/org/apache/fop/fo/pagination/Flow.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.pagination;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.accessibility.StructureElement;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
@@ -121,6 +122,13 @@ public class Flow extends FObj {
     }
 
     /** {@inheritDoc} */
+    public void addStructureElements(StructureElement parent) {
+        StructureElement structure = createStructureElement();
+        parent.addChild(structure);
+        super.addStructureElements(structure);
+    }
+
+    /** {@inheritDoc} */
     public String getLocalName() {
         return "flow";
     }
-- 
1.6.4.2

