You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by Vincent Hennebert <vh...@gmail.com> on 2012/09/04 12:13:03 UTC

Re: svn commit: r1376923 - in /xmlgraphics/fop/trunk: ./ src/java/org/apache/fop/accessibility/fo/ src/java/org/apache/fop/fo/ src/java/org/apache/fop/fo/pagination/ src/java/org/apache/fop/pdf/ src/java/org/apache/fop/render/pdf/ test/java/org/apach

On 28/08/12 16:16, mehdi houshmand wrote:
> I think this commit flags a find-bugs warning. Could you take a look at it
> Vincent? It's low priority, so it shouldn't be too time consuming (he says).

Thanks for pointing that out, I had forgotten to run FindBugs. It
actually reveals a bug in that a custom structure type set by using the
role property will be ignored.

I’ll put this on my todo list and will fix it soon.

Thanks,
Vincent


> Thanks
> 
> Mehdi
> 
> On 24 August 2012 15:10, <vh...@apache.org> wrote:
> 
>> Author: vhennebert
>> Date: Fri Aug 24 14:10:39 2012
>> New Revision: 1376923
>>
>> URL: http://svn.apache.org/viewvc?rev=1376923&view=rev
>> Log:
>> Bugzilla 53778: When PDF accessibility is enabled, the contents for the
>> different regions must appear in the proper order in the structure tree.
>>
>> Added:
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StructureHierarchyMember.java
>>   (with props)
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PageSequenceStructElem.java
>>   (with props)
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/TableStructElem.java
>>   (with props)
>>
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/LayoutMasterSetTestCase.java
>>   (with props)
>>     xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/
>> side-regions.fo   (with props)
>>     xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/side-regions.pdf
>> (with props)
>>     xmlgraphics/fop/trunk/test/pdf/accessibility/side-regions.fo   (with
>> props)
>> Removed:
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/FOEventRecorder.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/FOToPDFRoleMap.java
>>
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/wrapCompleteDocumentInTableFooter.xsl
>> Modified:
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/StructureTreeEventTrigger.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/DelegatingFOEventHandler.java
>>     xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java
>>     xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
>>     xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/Flow.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/LayoutMasterSet.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/StaticContent.java
>>     xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java
>>     xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructTreeRoot.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StandardStructureTypes.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFEventProducer.java
>>
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFStructureTreeBuilder.java
>>     xmlgraphics/fop/trunk/status.xml
>>
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java
>>
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/fo2StructureTree.xsl
>>
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/TableHeaderScopeTestCase.java
>>     xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/role.pdf
>>     xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/role_non-standard.pdf
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverter.java
>> Fri Aug 24 14:10:39 2012
>> @@ -72,8 +72,6 @@ public class FO2StructureTreeConverter e
>>
>>      private final Stack<FOEventHandler> converters = new
>> Stack<FOEventHandler>();
>>
>> -    private final Stack<FOEventRecorder> tableFooterRecorders = new
>> Stack<FOEventRecorder>();
>> -
>>      private final FOEventHandler structureTreeEventTrigger;
>>
>>      /** The descendants of some elements like fo:leader must be ignored.
>> */
>> @@ -166,6 +164,20 @@ public class FO2StructureTreeConverter e
>>      }
>>
>>      @Override
>> +    public void startStatic(StaticContent staticContent) {
>> +        handleStartArtifact(staticContent);
>> +        converter.startStatic(staticContent);
>> +        super.startStatic(staticContent);
>> +    }
>> +
>> +    @Override
>> +    public void endStatic(StaticContent staticContent) {
>> +        converter.endStatic(staticContent);
>> +        handleEndArtifact(staticContent);
>> +        super.endStatic(staticContent);
>> +    }
>> +
>> +    @Override
>>      public void startFlow(Flow fl) {
>>          converter.startFlow(fl);
>>          super.startFlow(fl);
>> @@ -216,16 +228,11 @@ public class FO2StructureTreeConverter e
>>      @Override
>>      public void startTable(Table tbl) {
>>          converter.startTable(tbl);
>> -        tableFooterRecorders.push(null);
>>          super.startTable(tbl);
>>      }
>>
>>      @Override
>>      public void endTable(Table tbl) {
>> -        FOEventRecorder tableFooterRecorder = tableFooterRecorders.pop();
>> -        if (tableFooterRecorder != null) {
>> -            tableFooterRecorder.replay(converter);
>> -        }
>>          converter.endTable(tbl);
>>          super.endTable(tbl);
>>      }
>> @@ -256,8 +263,6 @@ public class FO2StructureTreeConverter e
>>
>>      @Override
>>      public void startFooter(TableFooter footer) {
>> -        converters.push(converter);
>> -        converter = new FOEventRecorder();
>>          converter.startFooter(footer);
>>          super.startFooter(footer);
>>      }
>> @@ -265,10 +270,6 @@ public class FO2StructureTreeConverter e
>>      @Override
>>      public void endFooter(TableFooter footer) {
>>          converter.endFooter(footer);
>> -        /* Replace the dummy table footer with the real one. */
>> -        tableFooterRecorders.pop();
>> -        tableFooterRecorders.push((FOEventRecorder) converter);
>> -        converter = converters.pop();
>>          super.endFooter(footer);
>>      }
>>
>> @@ -357,20 +358,6 @@ public class FO2StructureTreeConverter e
>>      }
>>
>>      @Override
>> -    public void startStatic(StaticContent staticContent) {
>> -        handleStartArtifact(staticContent);
>> -        converter.startStatic(staticContent);
>> -        super.startStatic(staticContent);
>> -    }
>> -
>> -    @Override
>> -    public void endStatic(StaticContent statisContent) {
>> -        converter.endStatic(statisContent);
>> -        handleEndArtifact(statisContent);
>> -        super.endStatic(statisContent);
>> -    }
>> -
>> -    @Override
>>      public void startMarkup() {
>>          converter.startMarkup();
>>          super.startMarkup();
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/StructureTreeEventTrigger.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/StructureTreeEventTrigger.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/StructureTreeEventTrigger.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/accessibility/fo/StructureTreeEventTrigger.java
>> Fri Aug 24 14:10:39 2012
>> @@ -55,6 +55,7 @@ import org.apache.fop.fo.flow.table.Tabl
>>  import org.apache.fop.fo.flow.table.TableHeader;
>>  import org.apache.fop.fo.flow.table.TableRow;
>>  import org.apache.fop.fo.pagination.Flow;
>> +import org.apache.fop.fo.pagination.LayoutMasterSet;
>>  import org.apache.fop.fo.pagination.PageSequence;
>>  import org.apache.fop.fo.pagination.StaticContent;
>>  import org.apache.fop.fo.properties.CommonAccessibilityHolder;
>> @@ -67,6 +68,8 @@ class StructureTreeEventTrigger extends
>>
>>      private StructureTreeEventHandler structureTreeEventHandler;
>>
>> +    private LayoutMasterSet layoutMasterSet;
>> +
>>      public StructureTreeEventTrigger(StructureTreeEventHandler
>> structureTreeEventHandler) {
>>          this.structureTreeEventHandler = structureTreeEventHandler;
>>      }
>> @@ -81,6 +84,9 @@ class StructureTreeEventTrigger extends
>>
>>      @Override
>>      public void startPageSequence(PageSequence pageSeq) {
>> +        if (layoutMasterSet == null) {
>> +            layoutMasterSet = pageSeq.getRoot().getLayoutMasterSet();
>> +        }
>>          Locale locale = null;
>>          if (pageSeq.getLanguage() != null) {
>>              if (pageSeq.getCountry() != null) {
>> @@ -129,8 +135,27 @@ class StructureTreeEventTrigger extends
>>      }
>>
>>      @Override
>> +    public void startStatic(StaticContent staticContent) {
>> +        AttributesImpl flowName =
>> createFlowNameAttribute(staticContent.getFlowName());
>> +        startElement(staticContent, flowName);
>> +    }
>> +
>> +    private AttributesImpl createFlowNameAttribute(String flowName) {
>> +        String regionName =
>> layoutMasterSet.getDefaultRegionNameFor(flowName);
>> +        AttributesImpl attribute = new AttributesImpl();
>> +        addNoNamespaceAttribute(attribute, Flow.FLOW_NAME, regionName);
>> +        return attribute;
>> +    }
>> +
>> +    @Override
>> +    public void endStatic(StaticContent staticContent) {
>> +        endElement(staticContent);
>> +    }
>> +
>> +    @Override
>>      public void startFlow(Flow fl) {
>> -        startElement(fl);
>> +        AttributesImpl flowName =
>> createFlowNameAttribute(fl.getFlowName());
>> +        startElement(fl, flowName);
>>      }
>>
>>      @Override
>> @@ -278,16 +303,6 @@ class StructureTreeEventTrigger extends
>>      }
>>
>>      @Override
>> -    public void startStatic(StaticContent staticContent) {
>> -        startElement(staticContent);
>> -    }
>> -
>> -    @Override
>> -    public void endStatic(StaticContent statisContent) {
>> -        endElement(statisContent);
>> -    }
>> -
>> -    @Override
>>      public void startLink(BasicLink basicLink) {
>>          startElementWithID(basicLink);
>>      }
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/DelegatingFOEventHandler.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/DelegatingFOEventHandler.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/DelegatingFOEventHandler.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/DelegatingFOEventHandler.java
>> Fri Aug 24 14:10:39 2012
>> @@ -143,6 +143,16 @@ public abstract class DelegatingFOEventH
>>      }
>>
>>      @Override
>> +    public void startStatic(StaticContent staticContent) {
>> +        delegate.startStatic(staticContent);
>> +    }
>> +
>> +    @Override
>> +    public void endStatic(StaticContent statisContent) {
>> +        delegate.endStatic(statisContent);
>> +    }
>> +
>> +    @Override
>>      public void startFlow(Flow fl) {
>>          delegate.startFlow(fl);
>>      }
>> @@ -293,16 +303,6 @@ public abstract class DelegatingFOEventH
>>      }
>>
>>      @Override
>> -    public void startStatic(StaticContent staticContent) {
>> -        delegate.startStatic(staticContent);
>> -    }
>> -
>> -    @Override
>> -    public void endStatic(StaticContent statisContent) {
>> -        delegate.endStatic(statisContent);
>> -    }
>> -
>> -    @Override
>>      public void startMarkup() {
>>          delegate.startMarkup();
>>      }
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> --- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java
>> (original)
>> +++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java
>> Fri Aug 24 14:10:39 2012
>> @@ -193,6 +193,20 @@ public abstract class FOEventHandler {
>>      }
>>
>>      /**
>> +     * Process start of a Static.
>> +     * @param staticContent StaticContent that is starting
>> +     */
>> +    public void startStatic(StaticContent staticContent) {
>> +    }
>> +
>> +    /**
>> +     * Process end of a Static.
>> +     * @param staticContent StaticContent that is ending
>> +     */
>> +    public void endStatic(StaticContent staticContent) {
>> +    }
>> +
>> +    /**
>>       * This method is called to indicate the start of a new fo:flow
>>       * or fo:static-content.
>>       * This method also handles fo:static-content tags, because the
>> @@ -409,22 +423,6 @@ public abstract class FOEventHandler {
>>      public void endListBody(ListItemBody listItemBody) {
>>      }
>>
>> -    // Static Regions
>> -    /**
>> -     * Process start of a Static.
>> -     * @param staticContent StaticContent that is starting
>> -     */
>> -    public void startStatic(StaticContent staticContent) {
>> -    }
>> -
>> -    /**
>> -     * Process end of a Static.
>> -     * @param staticContent StaticContent that is ending
>> -     */
>> -    public void endStatic(StaticContent staticContent) {
>> -    }
>> -
>> -
>>      /**
>>       * Process start of a Markup.
>>       */
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java Fri
>> Aug 24 14:10:39 2012
>> @@ -26,6 +26,7 @@ import org.apache.fop.apps.FOUserAgent;
>>  import org.apache.fop.datatypes.LengthBase;
>>  import org.apache.fop.fo.expr.PropertyException;
>>  import org.apache.fop.fo.flow.table.TableFObj.ColumnNumberPropertyMaker;
>> +import org.apache.fop.fo.pagination.Flow;
>>  import org.apache.fop.fo.properties.BackgroundPositionShorthand;
>>  import org.apache.fop.fo.properties.BorderSpacingShorthandParser;
>>  import org.apache.fop.fo.properties.BorderWidthPropertyMaker;
>> @@ -2267,7 +2268,7 @@ public final class FOPropertyMapping imp
>>          m  = new StringProperty.Maker(PR_FLOW_NAME);
>>          m.setInherited(false);
>>          m.setDefault("");
>> -        addPropertyMaker("flow-name", m);
>> +        addPropertyMaker(Flow.FLOW_NAME, m);
>>
>>          // force-page-count
>>          m  = new EnumProperty.Maker(PR_FORCE_PAGE_COUNT);
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/Flow.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/Flow.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> --- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/Flow.java
>> (original)
>> +++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/Flow.java
>> Fri Aug 24 14:10:39 2012
>> @@ -36,6 +36,9 @@ import org.apache.fop.fo.properties.Comm
>>   */
>>  public class Flow extends FObj implements CommonAccessibilityHolder {
>>
>> +    /** The "flow-name" property name. */
>> +    public static final String FLOW_NAME = "flow-name";
>> +
>>      private String flowName;
>>
>>      private CommonAccessibility commonAccessibility;
>> @@ -61,7 +64,7 @@ public class Flow extends FObj implement
>>      /** {@inheritDoc} */
>>      protected void startOfNode() throws FOPException {
>>          if (flowName == null || flowName.equals("")) {
>> -            missingPropertyError("flow-name");
>> +            missingPropertyError(FLOW_NAME);
>>          }
>>
>>          // according to communication from Paul Grosso (XSL-List,
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/LayoutMasterSet.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/LayoutMasterSet.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/LayoutMasterSet.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/pagination/LayoutMasterSet.java
>> Fri Aug 24 14:10:39 2012
>> @@ -217,5 +217,24 @@ public class LayoutMasterSet extends FOb
>>      public int getNameId() {
>>          return FO_LAYOUT_MASTER_SET;
>>      }
>> +
>> +    /**
>> +     * Returns the default name of the region to which the flow or
>> static-content having
>> +     * the given flow-name is assigned.
>> +     *
>> +     * @param flowName the value of the flow-name property
>> +     * @return the default region name ("xsl-region-body",
>> "xsl-region-before", etc.)
>> +     */
>> +    public String getDefaultRegionNameFor(String flowName) {
>> +        for (SimplePageMaster spm : simplePageMasters.values()) {
>> +            for (Region region : spm.getRegions().values()) {
>> +                if (region.getRegionName().equals(flowName)) {
>> +                    return region.getDefaultRegionName();
>> +                }
>> +            }
>> +        }
>> +        assert flowName.equals("xsl-before-float-separator") ||
>> flowName.equals("xsl-footnote-separator");
>> +        return flowName;
>> +    }
>>  }
>>
>>
>> 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=1376923&r1=1376922&r2=1376923&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
>> Fri Aug 24 14:10:39 2012
>> @@ -42,7 +42,7 @@ public class StaticContent extends Flow
>>      /** {@inheritDoc} */
>>      protected void startOfNode() throws FOPException {
>>          if (getFlowName() == null || getFlowName().equals("")) {
>> -            missingPropertyError("flow-name");
>> +            missingPropertyError(FLOW_NAME);
>>          }
>>          getFOEventHandler().startStatic(this);
>>      }
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> --- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java
>> (original)
>> +++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java Fri
>> Aug 24 14:10:39 2012
>> @@ -355,36 +355,20 @@ public class PDFDocument {
>>      }
>>
>>      /**
>> -     * Creates and returns a structure element.
>> -     *
>> -     * @param structureType the structure type of the new element (value
>> for the
>> -     * S entry)
>> -     * @param parent the parent of the new structure element in the
>> structure
>> -     * hierarchy
>> -     * @return a dictionary of type StructElem
>> +     * Adds the given element to the structure tree.
>>       */
>> -    public PDFStructElem makeStructureElement(StructureType
>> structureType, PDFObject parent) {
>> -        PDFStructElem structElem = new PDFStructElem(parent,
>> structureType);
>> +    public void registerStructureElement(PDFStructElem structElem) {
>>          assignObjectNumber(structElem);
>>          structureTreeElements.add(structElem);
>> -        return structElem;
>>      }
>>
>>      /**
>> -     * Creates and returns a structure element.
>> -     *
>> -     * @param structureType the structure type of the new element (value
>> for the
>> -     * S entry)
>> -     * @param parent the parent of the new structure element in the
>> structure
>> -     * hierarchy
>> -     * @param scope the scope of the given table header element
>> -     * @return a dictionary of type StructElem
>> +     * Assigns the given scope to the given element and adds it to the
>> structure tree. The
>> +     * scope may not be added if it's not compatible with this document's
>> PDF version.
>>       */
>> -    public PDFStructElem makeStructureElement(StructureType
>> structureType, PDFObject parent,
>> -            Scope scope) {
>> -        PDFStructElem structElem = makeStructureElement(structureType,
>> parent);
>> +    public void registerStructureElement(PDFStructElem structElem, Scope
>> scope) {
>> +        registerStructureElement(structElem);
>>          versionController.addTableHeaderScopeAttribute(structElem, scope);
>> -        return structElem;
>>      }
>>
>>      /**
>>
>> 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=1376923&r1=1376922&r2=1376923&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
>> Fri Aug 24 14:10:39 2012
>> @@ -32,7 +32,8 @@ import org.apache.fop.util.LanguageTags;
>>  /**
>>   * Class representing a PDF Structure Element.
>>   */
>> -public class PDFStructElem extends PDFDictionary implements
>> StructureTreeElement, CompressedObject {
>> +public class PDFStructElem extends StructureHierarchyMember
>> +        implements StructureTreeElement, CompressedObject {
>>
>>      private StructureType structureType;
>>
>> @@ -51,7 +52,7 @@ public class PDFStructElem extends PDFDi
>>       * @param parent parent of this element
>>       * @param structureType the structure type of this element
>>       */
>> -    PDFStructElem(PDFObject parent, StructureType structureType) {
>> +    public PDFStructElem(PDFObject parent, StructureType structureType) {
>>          this(parent);
>>          this.structureType = structureType;
>>          put("S", structureType.getName());
>> @@ -86,6 +87,7 @@ public class PDFStructElem extends PDFDi
>>       *
>>       * @param kid element to be added
>>       */
>> +    @Override
>>      public void addKid(PDFObject kid) {
>>          if (kids == null) {
>>              kids = new ArrayList<PDFObject>();
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructTreeRoot.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructTreeRoot.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructTreeRoot.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructTreeRoot.java
>> Fri Aug 24 14:10:39 2012
>> @@ -22,7 +22,7 @@ package org.apache.fop.pdf;
>>  /**
>>   * Class representing a PDF /StructTreeRoot dictionary.
>>   */
>> -public class PDFStructTreeRoot extends PDFDictionary {
>> +public class PDFStructTreeRoot extends StructureHierarchyMember {
>>
>>      /**
>>       * Creates a new /StructTreeRoot dictionary.
>> @@ -49,6 +49,7 @@ public class PDFStructTreeRoot extends P
>>       *
>>       * @param kid an object to be added to the K entry
>>       */
>> +    @Override
>>      public void addKid(PDFObject kid) {
>>          getKids().add(kid);
>>      }
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StandardStructureTypes.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StandardStructureTypes.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StandardStructureTypes.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StandardStructureTypes.java
>> Fri Aug 24 14:10:39 2012
>> @@ -111,6 +111,11 @@ public final class StandardStructureType
>>              return name;
>>          }
>>
>> +        @Override
>> +        public String toString() {
>> +            return name.toString().substring(1);
>> +        }
>> +
>>      }
>>
>>      private static final Map<String, StructureType> STRUCTURE_TYPES = new
>> HashMap<String, StructureType>();
>>
>> Added:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StructureHierarchyMember.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StructureHierarchyMember.java?rev=1376923&view=auto
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StructureHierarchyMember.java
>> (added)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StructureHierarchyMember.java
>> Fri Aug 24 14:10:39 2012
>> @@ -0,0 +1,37 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *      http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +
>> +/* $Id$ */
>> +
>> +package org.apache.fop.pdf;
>> +
>> +/**
>> + * An element in the document's structure tree. This can be either the
>> structure tree root
>> + * or a structure element.
>> + *
>> + * @see "Section 10.6, <q>Logical Structure</q> of the PDF Reference, 4th
>> edition (PDF 1.5)"
>> + */
>> +public abstract class StructureHierarchyMember extends PDFDictionary {
>> +
>> +    /**
>> +     * Adds the given object to the array of kids.
>> +     *
>> +     * @param kid an object to be added to the K entry
>> +     */
>> +    public abstract void addKid(PDFObject kid);
>> +
>> +}
>>
>> Propchange:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StructureHierarchyMember.java
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/StructureHierarchyMember.java
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Revision Id
>>
>> Modified:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFEventProducer.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFEventProducer.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFEventProducer.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFEventProducer.java
>> Fri Aug 24 14:10:39 2012
>> @@ -59,12 +59,11 @@ public interface PDFEventProducer extend
>>       * Custom structure type is not standard as per the PDF reference.
>>       *
>>       * @param source the event source
>> -     * @param fo the local name of the formatting object having the
>> custom type
>>       * @param type custom structure type
>>       * @param fallback default structure type used as a fallback
>>       * @event.severity WARN
>>       */
>> -    void nonStandardStructureType(Object source, String fo, String type,
>> String fallback);
>> +    void nonStandardStructureType(Object source, String type, String
>> fallback);
>>
>>      /**
>>       * The encryption length must be a multiple of 8 between 40 and 128.
>>
>> 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=1376923&r1=1376922&r2=1376923&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
>> Fri Aug 24 14:10:39 2012
>> @@ -21,24 +21,271 @@ package org.apache.fop.render.pdf;
>>
>>  import java.util.LinkedList;
>>  import java.util.Locale;
>> +import java.util.Map;
>>
>>  import org.xml.sax.Attributes;
>> +import org.xml.sax.helpers.AttributesImpl;
>>
>>  import org.apache.fop.accessibility.StructureTreeElement;
>>  import org.apache.fop.accessibility.StructureTreeEventHandler;
>>  import org.apache.fop.events.EventBroadcaster;
>>  import org.apache.fop.fo.extensions.ExtensionElementMapping;
>> +import org.apache.fop.fo.pagination.Flow;
>>  import org.apache.fop.pdf.PDFFactory;
>> -import org.apache.fop.pdf.PDFObject;
>>  import org.apache.fop.pdf.PDFParentTree;
>>  import org.apache.fop.pdf.PDFStructElem;
>>  import org.apache.fop.pdf.PDFStructTreeRoot;
>>  import org.apache.fop.pdf.StandardStructureAttributes.Table.Scope;
>> +import org.apache.fop.pdf.StandardStructureTypes;
>> +import org.apache.fop.pdf.StandardStructureTypes.Grouping;
>>  import org.apache.fop.pdf.StandardStructureTypes.Table;
>> +import org.apache.fop.pdf.StructureHierarchyMember;
>>  import org.apache.fop.pdf.StructureType;
>> +import org.apache.fop.util.XMLUtil;
>>
>>  class PDFStructureTreeBuilder implements StructureTreeEventHandler {
>>
>> +    private static final String ROLE = "role";
>> +
>> +    private static final Map<String, StructureElementBuilder> BUILDERS
>> +            = new java.util.HashMap<String, StructureElementBuilder>();
>> +
>> +    private static final StructureElementBuilder DEFAULT_BUILDER
>> +            = new DefaultStructureElementBuilder(Grouping.NON_STRUCT);
>> +
>> +    static {
>> +        // Declarations and Pagination and Layout Formatting Objects
>> +        StructureElementBuilder regionBuilder = new RegionBuilder();
>> +        addBuilder("root",
>>  StandardStructureTypes.Grouping.DOCUMENT);
>> +        addBuilder("page-sequence",             new
>> PageSequenceBuilder());
>> +        addBuilder("static-content",            regionBuilder);
>> +        addBuilder("flow",                      regionBuilder);
>> +        // Block-level Formatting Objects
>> +        addBuilder("block",
>> StandardStructureTypes.Paragraphlike.P);
>> +        addBuilder("block-container",
>> StandardStructureTypes.Grouping.DIV);
>> +        // Inline-level Formatting Objects
>> +        addBuilder("character",
>> StandardStructureTypes.InlineLevelStructure.SPAN);
>> +        addBuilder("external-graphic",          new ImageBuilder());
>> +        addBuilder("instream-foreign-object",   new ImageBuilder());
>> +        addBuilder("inline",
>>  StandardStructureTypes.InlineLevelStructure.SPAN);
>> +        addBuilder("inline-container",
>>  StandardStructureTypes.Grouping.DIV);
>> +        addBuilder("page-number",
>> StandardStructureTypes.InlineLevelStructure.QUOTE);
>> +        addBuilder("page-number-citation",
>>  StandardStructureTypes.InlineLevelStructure.QUOTE);
>> +        addBuilder("page-number-citation-last",
>> StandardStructureTypes.InlineLevelStructure.QUOTE);
>> +        // Formatting Objects for Tables
>> +        addBuilder("table-and-caption",
>> StandardStructureTypes.Grouping.DIV);
>> +        addBuilder("table",                     new TableBuilder());
>> +        addBuilder("table-caption",
>> StandardStructureTypes.Grouping.CAPTION);
>> +        addBuilder("table-header",
>>  StandardStructureTypes.Table.THEAD);
>> +        addBuilder("table-footer",              new TableFooterBuilder());
>> +        addBuilder("table-body",
>>  StandardStructureTypes.Table.TBODY);
>> +        addBuilder("table-row",
>> StandardStructureTypes.Table.TR);
>> +        addBuilder("table-cell",                new TableCellBuilder());
>> +        // Formatting Objects for Lists
>> +        addBuilder("list-block",
>>  StandardStructureTypes.List.L);
>> +        addBuilder("list-item",
>> StandardStructureTypes.List.LI);
>> +        addBuilder("list-item-body",
>>  StandardStructureTypes.List.LBODY);
>> +        addBuilder("list-item-label",
>> StandardStructureTypes.List.LBL);
>> +        // Dynamic Effects: Link and Multi Formatting Objects
>> +        addBuilder("basic-link",
>>  StandardStructureTypes.InlineLevelStructure.LINK);
>> +        // Out-of-Line Formatting Objects
>> +        addBuilder("float",
>> StandardStructureTypes.Grouping.DIV);
>> +        addBuilder("footnote",
>>  StandardStructureTypes.InlineLevelStructure.NOTE);
>> +        addBuilder("footnote-body",
>> StandardStructureTypes.Grouping.SECT);
>> +        addBuilder("wrapper",
>> StandardStructureTypes.InlineLevelStructure.SPAN);
>> +        addBuilder("marker",
>>  StandardStructureTypes.Grouping.PRIVATE);
>> +
>> +        addBuilder("#PCDATA", new PlaceholderBuilder());
>> +    }
>> +
>> +    private static void addBuilder(String fo, StructureType
>> structureType) {
>> +        addBuilder(fo, new DefaultStructureElementBuilder(structureType));
>> +    }
>> +
>> +    private static void addBuilder(String fo, StructureElementBuilder
>> mapper) {
>> +        BUILDERS.put(fo, mapper);
>> +    }
>> +
>> +    private interface StructureElementBuilder {
>> +
>> +        PDFStructElem build(StructureHierarchyMember parent, Attributes
>> attributes, PDFFactory pdfFactory,
>> +                EventBroadcaster eventBroadcaster);
>> +
>> +    }
>> +
>> +    private static class DefaultStructureElementBuilder implements
>> StructureElementBuilder {
>> +
>> +        private final StructureType defaultStructureType;
>> +
>> +        DefaultStructureElementBuilder(StructureType structureType) {
>> +            this.defaultStructureType = structureType;
>> +        }
>> +
>> +        public final PDFStructElem build(StructureHierarchyMember parent,
>> Attributes attributes,
>> +                PDFFactory pdfFactory, EventBroadcaster eventBroadcaster)
>> {
>> +            String role = attributes.getValue(ROLE);
>> +            StructureType structureType;
>> +            if (role == null) {
>> +                structureType = defaultStructureType;
>> +            } else {
>> +                structureType = StandardStructureTypes.get(role);
>> +                if (structureType == null) {
>> +                    structureType = defaultStructureType;
>> +
>>  PDFEventProducer.Provider.get(eventBroadcaster).nonStandardStructureType(role,
>> role,
>> +                            structureType.toString());
>> +                }
>> +            }
>> +            PDFStructElem structElem = createStructureElement(parent,
>> structureType);
>> +            setAttributes(structElem, attributes);
>> +            addKidToParent(structElem, parent, attributes);
>> +            registerStructureElement(structElem, pdfFactory);
>> +            return structElem;
>> +        }
>> +
>> +        protected PDFStructElem
>> createStructureElement(StructureHierarchyMember parent,
>> +                StructureType structureType) {
>> +            return new PDFStructElem(parent, structureType);
>> +        }
>> +
>> +        protected void setAttributes(PDFStructElem structElem, Attributes
>> attributes) {
>> +        }
>> +
>> +        protected void addKidToParent(PDFStructElem kid,
>> StructureHierarchyMember parent,
>> +                Attributes attributes) {
>> +            parent.addKid(kid);
>> +        }
>> +
>> +        protected void registerStructureElement(PDFStructElem
>> structureElement, PDFFactory pdfFactory) {
>> +
>>  pdfFactory.getDocument().registerStructureElement(structureElement);
>> +        }
>> +
>> +    }
>> +
>> +    private static class PageSequenceBuilder extends
>> DefaultStructureElementBuilder {
>> +
>> +        PageSequenceBuilder() {
>> +            super(StandardStructureTypes.Grouping.PART);
>> +        }
>> +
>> +        @Override
>> +        protected PDFStructElem
>> createStructureElement(StructureHierarchyMember parent,
>> +                StructureType structureType) {
>> +            return new PageSequenceStructElem(parent, structureType);
>> +        }
>> +
>> +    }
>> +
>> +    private static class RegionBuilder extends
>> DefaultStructureElementBuilder {
>> +
>> +        RegionBuilder() {
>> +            super(StandardStructureTypes.Grouping.SECT);
>> +        }
>> +
>> +        @Override
>> +        protected void addKidToParent(PDFStructElem kid,
>> StructureHierarchyMember parent,
>> +                Attributes attributes) {
>> +            String flowName = attributes.getValue(Flow.FLOW_NAME);
>> +            ((PageSequenceStructElem) parent).addContent(flowName, kid);
>> +        }
>> +
>> +    }
>> +
>> +    private static class ImageBuilder extends
>> DefaultStructureElementBuilder {
>> +
>> +        ImageBuilder() {
>> +            super(StandardStructureTypes.Illustration.FIGURE);
>> +        }
>> +
>> +        @Override
>> +        protected void setAttributes(PDFStructElem structElem, Attributes
>> attributes) {
>> +            String altTextNode =
>> attributes.getValue(ExtensionElementMapping.URI, "alt-text");
>> +            if (altTextNode == null) {
>> +                altTextNode = "No alternate text specified";
>> +            }
>> +            structElem.put("Alt", altTextNode);
>> +        }
>> +
>> +    }
>> +
>> +    private static class TableBuilder extends
>> DefaultStructureElementBuilder {
>> +
>> +        TableBuilder() {
>> +            super(StandardStructureTypes.Table.TABLE);
>> +        }
>> +
>> +        @Override
>> +        protected PDFStructElem
>> createStructureElement(StructureHierarchyMember parent,
>> +                StructureType structureType) {
>> +            return new TableStructElem(parent, structureType);
>> +        }
>> +    }
>> +
>> +    private static class TableFooterBuilder extends
>> DefaultStructureElementBuilder {
>> +
>> +        public TableFooterBuilder() {
>> +            super(StandardStructureTypes.Table.TFOOT);
>> +        }
>> +
>> +        @Override
>> +        protected void addKidToParent(PDFStructElem kid,
>> StructureHierarchyMember parent,
>> +                Attributes attributes) {
>> +            ((TableStructElem) parent).addTableFooter(kid);
>> +        }
>> +    }
>> +
>> +    private static class TableCellBuilder extends
>> DefaultStructureElementBuilder {
>> +
>> +        TableCellBuilder() {
>> +            super(StandardStructureTypes.Table.TD);
>> +        }
>> +
>> +        @Override
>> +        protected PDFStructElem
>> createStructureElement(StructureHierarchyMember parent,
>> +                StructureType structureType) {
>> +            PDFStructElem grandParent = ((PDFStructElem)
>> parent).getParentStructElem();
>> +            //TODO What to do with cells from table-footer? Currently
>> they are mapped on TD.
>> +            if (grandParent.getStructureType() ==
>> StandardStructureTypes.Table.THEAD) {
>> +                structureType = StandardStructureTypes.Table.TH;
>> +            } else {
>> +                structureType = StandardStructureTypes.Table.TD;
>> +            }
>> +            return super.createStructureElement(parent, structureType);
>> +        }
>> +
>> +        @Override
>> +        protected void registerStructureElement(PDFStructElem
>> structureElement, PDFFactory pdfFactory) {
>> +            if (structureElement.getStructureType() == Table.TH) {
>> +
>>  pdfFactory.getDocument().registerStructureElement(structureElement,
>> Scope.COLUMN);
>> +            } else {
>> +
>>  pdfFactory.getDocument().registerStructureElement(structureElement);
>> +            }
>> +        }
>> +
>> +        @Override
>> +        protected void setAttributes(PDFStructElem structElem, Attributes
>> attributes) {
>> +            String columnSpan =
>> attributes.getValue("number-columns-spanned");
>> +            if (columnSpan != null) {
>> +
>>  structElem.setTableAttributeColSpan(Integer.parseInt(columnSpan));
>> +            }
>> +            String rowSpan = attributes.getValue("number-rows-spanned");
>> +            if (rowSpan != null) {
>> +
>>  structElem.setTableAttributeRowSpan(Integer.parseInt(rowSpan));
>> +            }
>> +        }
>> +
>> +    }
>> +
>> +    private static class PlaceholderBuilder implements
>> StructureElementBuilder {
>> +
>> +        public PDFStructElem build(StructureHierarchyMember parent,
>> Attributes attributes,
>> +                PDFFactory pdfFactory, EventBroadcaster eventBroadcaster)
>> {
>> +            PDFStructElem elem = new PDFStructElem.Placeholder(parent);
>> +            parent.addKid(elem);
>> +            return elem;
>> +        }
>> +
>> +    }
>> +
>>      private PDFFactory pdfFactory;
>>
>>      private EventBroadcaster eventBroadcaster;
>> @@ -51,6 +298,10 @@ class PDFStructureTreeBuilder implements
>>          this.pdfFactory = pdfFactory;
>>      }
>>
>> +    void setEventBroadcaster(EventBroadcaster eventBroadcaster) {
>> +        this.eventBroadcaster = eventBroadcaster;
>> +    }
>> +
>>      void setLogicalStructureHandler(PDFLogicalStructureHandler
>> logicalStructureHandler) {
>>          createRootStructureElement(logicalStructureHandler);
>>      }
>> @@ -59,93 +310,53 @@ class PDFStructureTreeBuilder implements
>>          assert rootStructureElement == null;
>>          PDFParentTree parentTree =
>> logicalStructureHandler.getParentTree();
>>          PDFStructTreeRoot structTreeRoot =
>> pdfFactory.getDocument().makeStructTreeRoot(parentTree);
>> -        rootStructureElement = createStructureElement("root",
>> structTreeRoot, null);
>> -        structTreeRoot.addKid(rootStructureElement);
>> +        rootStructureElement = createStructureElement("root",
>> structTreeRoot,
>> +                new AttributesImpl(), pdfFactory, eventBroadcaster);
>>      }
>>
>> -    void setEventBroadcaster(EventBroadcaster eventBroadcaster) {
>> -        this.eventBroadcaster = eventBroadcaster;
>> -    }
>> +    private static PDFStructElem createStructureElement(String name,
>> StructureHierarchyMember parent,
>> +                Attributes attributes, PDFFactory pdfFactory,
>> EventBroadcaster eventBroadcaster) {
>> +            StructureElementBuilder builder = BUILDERS.get(name);
>> +            if (builder == null) {
>> +                // TODO is a fallback really necessary?
>> +                builder = DEFAULT_BUILDER;
>> +            }
>> +            return builder.build(parent, attributes, pdfFactory,
>> eventBroadcaster);
>> +        }
>>
>>      public void startPageSequence(Locale language, String role) {
>>          ancestors = new LinkedList<PDFStructElem>();
>> -        PDFStructElem structElem =
>> createStructureElement("page-sequence", rootStructureElement, role);
>> +        AttributesImpl attributes = new AttributesImpl();
>> +        attributes.addAttribute("", ROLE, ROLE, XMLUtil.CDATA, role);
>> +        PDFStructElem structElem = createStructureElement("page-sequence",
>> +                rootStructureElement, attributes, pdfFactory,
>> eventBroadcaster);
>>          if (language != null) {
>>              structElem.setLanguage(language);
>>          }
>> -        rootStructureElement.addKid(structElem);
>>          ancestors.add(structElem);
>>      }
>>
>> -    private PDFStructElem createStructureElement(String name, PDFObject
>> parent, String role) {
>> -        StructureType structureType =
>> FOToPDFRoleMap.mapFormattingObject(name, role, parent,
>> -                eventBroadcaster);
>> -        if (structureType == Table.TH) {
>> -            return
>> pdfFactory.getDocument().makeStructureElement(structureType, parent,
>> Scope.COLUMN);
>> -        } else {
>> -            return
>> pdfFactory.getDocument().makeStructureElement(structureType, parent);
>> -        }
>> -    }
>> -
>>      public void endPageSequence() {
>>      }
>>
>>      public StructureTreeElement startNode(String name, Attributes
>> attributes) {
>>          PDFStructElem parent = ancestors.getFirst();
>> -        String role = attributes.getValue("role");
>> -        PDFStructElem structElem = createStructureElement(name, parent,
>> role);
>> -        setSpanAttributes(structElem, attributes);
>> -        parent.addKid(structElem);
>> +        PDFStructElem structElem = createStructureElement(name, parent,
>> attributes,
>> +                pdfFactory, eventBroadcaster);
>>          ancestors.addFirst(structElem);
>>          return structElem;
>>      }
>>
>> -    private void setSpanAttributes(PDFStructElem structElem, Attributes
>> attributes) {
>> -        String columnSpan = attributes.getValue("number-columns-spanned");
>> -        if (columnSpan != null) {
>> -
>>  structElem.setTableAttributeColSpan(Integer.parseInt(columnSpan));
>> -        }
>> -        String rowSpan = attributes.getValue("number-rows-spanned");
>> -        if (rowSpan != null) {
>> -
>>  structElem.setTableAttributeRowSpan(Integer.parseInt(rowSpan));
>> -        }
>> -    }
>> -
>>      public void endNode(String name) {
>> -        removeFirstAncestor();
>> -    }
>> -
>> -    private void removeFirstAncestor() {
>>          ancestors.removeFirst();
>>      }
>>
>>      public StructureTreeElement startImageNode(String name, Attributes
>> attributes) {
>> -        PDFStructElem parent = ancestors.getFirst();
>> -        String role = attributes.getValue("role");
>> -        PDFStructElem structElem = createStructureElement(name, parent,
>> role);
>> -        parent.addKid(structElem);
>> -        String altTextNode =
>> attributes.getValue(ExtensionElementMapping.URI, "alt-text");
>> -        if (altTextNode != null) {
>> -            structElem.put("Alt", altTextNode);
>> -        } else {
>> -            structElem.put("Alt", "No alternate text specified");
>> -        }
>> -        ancestors.addFirst(structElem);
>> -        return structElem;
>> +        return startNode(name, attributes);
>>      }
>>
>>      public StructureTreeElement startReferencedNode(String name,
>> Attributes attributes) {
>> -        PDFStructElem parent = ancestors.getFirst();
>> -        String role = attributes.getValue("role");
>> -        PDFStructElem structElem;
>> -        if ("#PCDATA".equals(name)) {
>> -            structElem = new PDFStructElem.Placeholder(parent);
>> -        } else {
>> -            structElem = createStructureElement(name, parent, role);
>> -        }
>> -        parent.addKid(structElem);
>> -        ancestors.addFirst(structElem);
>> -        return structElem;
>> +        return startNode(name, attributes);
>>      }
>>
>>  }
>>
>> Added:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PageSequenceStructElem.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PageSequenceStructElem.java?rev=1376923&view=auto
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PageSequenceStructElem.java
>> (added)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PageSequenceStructElem.java
>> Fri Aug 24 14:10:39 2012
>> @@ -0,0 +1,79 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *      http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +
>> +/* $Id$ */
>> +
>> +package org.apache.fop.render.pdf;
>> +
>> +import java.util.ArrayList;
>> +import java.util.List;
>> +
>> +import org.apache.fop.pdf.PDFArray;
>> +import org.apache.fop.pdf.PDFObject;
>> +import org.apache.fop.pdf.PDFStructElem;
>> +import org.apache.fop.pdf.StructureType;
>> +
>> +class PageSequenceStructElem extends PDFStructElem {
>> +
>> +    private List<PDFStructElem> regionBefores = new
>> ArrayList<PDFStructElem>();
>> +
>> +    private List<PDFStructElem> regionAfters = new
>> ArrayList<PDFStructElem>();
>> +
>> +    private List<PDFStructElem> regionStarts = new
>> ArrayList<PDFStructElem>();
>> +
>> +    private List<PDFStructElem> regionEnds = new
>> ArrayList<PDFStructElem>();
>> +
>> +    PageSequenceStructElem(PDFObject parent, StructureType structureType)
>> {
>> +        super(parent, structureType);
>> +    }
>> +
>> +    void addContent(String flowName, PDFStructElem content) {
>> +        if (flowName.equals("xsl-region-before")) {
>> +            regionBefores.add(content);
>> +        } else if (flowName.equals("xsl-region-after")) {
>> +            regionAfters.add(content);
>> +        } else if (flowName.equals("xsl-region-start")) {
>> +            regionStarts.add(content);
>> +        } else if (flowName.equals("xsl-region-end")) {
>> +            regionEnds.add(content);
>> +        } else {
>> +            addKid(content);
>> +        }
>> +    }
>> +
>> +    @Override
>> +    protected boolean attachKids() {
>> +        assert !kids.isEmpty();
>> +        PDFArray k = new PDFArray();
>> +        addRegions(k, regionBefores);
>> +        addRegions(k, regionStarts);
>> +        addRegions(k, kids);
>> +        addRegions(k, regionEnds);
>> +        addRegions(k, regionAfters);
>> +        put("K", k);
>> +        return true;
>> +    }
>> +
>> +    private void addRegions(PDFArray k, List<? extends PDFObject>
>> regions) {
>> +        if (!regions.isEmpty()) {
>> +            for (PDFObject kid : regions) {
>> +                k.add(kid);
>> +            }
>> +        }
>> +    }
>> +
>> +}
>>
>> Propchange:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PageSequenceStructElem.java
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PageSequenceStructElem.java
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Revision Id
>>
>> Added:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/TableStructElem.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/TableStructElem.java?rev=1376923&view=auto
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/TableStructElem.java
>> (added)
>> +++
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/TableStructElem.java
>> Fri Aug 24 14:10:39 2012
>> @@ -0,0 +1,48 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *      http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +
>> +/* $Id$ */
>> +
>> +package org.apache.fop.render.pdf;
>> +
>> +import org.apache.fop.pdf.PDFObject;
>> +import org.apache.fop.pdf.PDFStructElem;
>> +import org.apache.fop.pdf.StructureType;
>> +
>> +class TableStructElem extends PDFStructElem {
>> +
>> +    private PDFStructElem tableFooter;
>> +
>> +    public TableStructElem(PDFObject parent, StructureType structureType)
>> {
>> +        super(parent, structureType);
>> +    }
>> +
>> +    void addTableFooter(PDFStructElem footer) {
>> +        assert tableFooter == null;
>> +        tableFooter = footer;
>> +    }
>> +
>> +    @Override
>> +    protected boolean attachKids() {
>> +        assert !kids.isEmpty();
>> +        if (tableFooter != null) {
>> +            kids.add(tableFooter);
>> +        }
>> +        return super.attachKids();
>> +    }
>> +
>> +}
>>
>> Propchange:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/TableStructElem.java
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange:
>> xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/TableStructElem.java
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Revision Id
>>
>> Modified: xmlgraphics/fop/trunk/status.xml
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> --- xmlgraphics/fop/trunk/status.xml (original)
>> +++ xmlgraphics/fop/trunk/status.xml Fri Aug 24 14:10:39 2012
>> @@ -62,6 +62,10 @@
>>        documents. Example: the fix of marks layering will be such a case
>> when it's done.
>>      -->
>>      <release version="FOP Trunk" date="TBD">
>> +      <action context="Renderers" dev="VH" type="fix" fixes-bug="53778">
>> +        When PDF accessibility is enabled, the contents for the different
>> regions must appear in the
>> +        proper order in the structure tree.
>> +      </action>
>>        <action context="Renderers" dev="MH" type="fix" fixes-bug="53766"
>> due-to="Robert Meyer">
>>          Remove StandardEncoding as the encoding type from fonts used in
>> the PDF renderer
>>        </action>
>>
>> Modified:
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/FO2StructureTreeConverterTestCase.java
>> Fri Aug 24 14:10:39 2012
>> @@ -19,8 +19,6 @@
>>
>>  package org.apache.fop.accessibility.fo;
>>
>> -import java.io.ByteArrayInputStream;
>> -import java.io.ByteArrayOutputStream;
>>  import java.io.IOException;
>>  import java.io.InputStream;
>>
>> @@ -34,7 +32,6 @@ import javax.xml.transform.TransformerFa
>>  import javax.xml.transform.dom.DOMResult;
>>  import javax.xml.transform.sax.SAXTransformerFactory;
>>  import javax.xml.transform.sax.TransformerHandler;
>> -import javax.xml.transform.stream.StreamResult;
>>  import javax.xml.transform.stream.StreamSource;
>>
>>  import org.custommonkey.xmlunit.Diff;
>> @@ -57,9 +54,17 @@ import org.apache.fop.fotreetest.DummyFO
>>
>>  public class FO2StructureTreeConverterTestCase {
>>
>> -    private interface FOLoader {
>> +    private static class FOLoader {
>>
>> -        InputStream getFoInputStream();
>> +        private final String resourceName;
>> +
>> +        FOLoader(String resourceName) {
>> +            this.resourceName = resourceName;
>> +        }
>> +
>> +        public InputStream getFoInputStream() {
>> +            return getResource(resourceName);
>> +        }
>>      }
>>
>>      private static final String STRUCTURE_TREE_SEQUENCE_NAME =
>> "structure-tree-sequence";
>> @@ -68,62 +73,30 @@ public class FO2StructureTreeConverterTe
>>
>>      @Test
>>      public void testCompleteDocument() throws Exception {
>> -        foLoader = new FOLoader() {
>> -            public InputStream getFoInputStream() {
>> -                return getResource("/org/apache/fop/fo/
>> complete_document.fo");
>> -            }
>> -        };
>> -        testConverter();
>> +        testConverter("/org/apache/fop/fo/complete_document.fo");
>>      }
>>
>>      @Test
>>      public void testTableFooters() throws Exception {
>> -        foLoader = new FOLoader() {
>> -            public InputStream getFoInputStream() {
>> -                return getResource("table-footers.fo");
>> -            }
>> -        };
>> -        testConverter();
>> -    }
>> -
>> -    @Test
>> -    public void testCompleteContentWrappedInTableFooter() throws
>> Exception {
>> -        Source xslt = new
>> StreamSource(getResource("wrapCompleteDocumentInTableFooter.xsl"));
>> -        Transformer transformer = createTransformer(xslt);
>> -        InputStream originalFO = getResource("/org/apache/fop/fo/
>> complete_document.fo");
>> -        ByteArrayOutputStream transformedFoOutput = new
>> ByteArrayOutputStream();
>> -        transformer.transform(new StreamSource(originalFO), new
>> StreamResult(transformedFoOutput));
>> -        final byte[] transformedFoOutputBytes =
>> transformedFoOutput.toByteArray();
>> -        foLoader = new FOLoader() {
>> -            public InputStream getFoInputStream() {
>> -                return new ByteArrayInputStream(transformedFoOutputBytes);
>> -            }
>> -        };
>> -        testConverter();
>> +        testConverter("table-footers.fo");
>>      }
>>
>>      @Test
>>      public void testArtifact() throws Exception {
>> -        foLoader = new FOLoader() {
>> -
>> -            public InputStream getFoInputStream() {
>> -                return getResource("artifact.fo");
>> -            }
>> -        };
>> -        testConverter();
>> +        testConverter("artifact.fo");
>>      }
>>
>> -    private Transformer createTransformer(Source xslt) throws
>> TransformerFactoryConfigurationError,
>> -            TransformerConfigurationException {
>> -        TransformerFactory transformerFactory =
>> TransformerFactory.newInstance();
>> -        return transformerFactory.newTransformer(xslt);
>> +    @Test
>> +    public void testSideRegions() throws Exception {
>> +        testConverter("/org/apache/fop/fo/pagination/side-regions.fo");
>>      }
>>
>>      private static InputStream getResource(String name) {
>>          return
>> FO2StructureTreeConverterTestCase.class.getResourceAsStream(name);
>>      }
>>
>> -    private void testConverter() throws Exception {
>> +    private void testConverter(String foResourceName) throws Exception {
>> +        foLoader = new FOLoader(foResourceName);
>>          DOMResult expectedStructureTree = loadExpectedStructureTree();
>>          DOMResult actualStructureTree = buildActualStructureTree();
>>          final Diff diff = createDiff(expectedStructureTree,
>> actualStructureTree);
>>
>> Modified:
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/fo2StructureTree.xsl
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/fo2StructureTree.xsl?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/fo2StructureTree.xsl
>> (original)
>> +++
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/accessibility/fo/fo2StructureTree.xsl
>> Fri Aug 24 14:10:39 2012
>> @@ -50,6 +50,25 @@
>>      <xsl:call-template name="copy"/>
>>    </xsl:template>
>>
>> +  <xsl:template match="fo:static-content/@flow-name|fo:flow/@flow-name">
>> +    <xsl:choose>
>> +      <xsl:when test=". = 'xsl-region-body' or
>> +        . = 'xsl-region-before' or
>> +        . = 'xsl-region-after' or
>> +        . = 'xsl-region-start' or
>> +        . = 'xsl-region-end' or
>> +        . = 'xsl-before-float-separator' or
>> +        . = 'xsl-footnote-separator'">
>> +        <xsl:copy/>
>> +      </xsl:when>
>> +      <xsl:otherwise>
>> +        <xsl:attribute name="{local-name()}">
>> +          <xsl:value-of select="concat('xsl-',
>> local-name(//*[@region-name = current()]))"/>
>> +        </xsl:attribute>
>> +      </xsl:otherwise>
>> +    </xsl:choose>
>> +  </xsl:template>
>> +
>>    <!-- Block-level Formatting Objects -->
>>    <xsl:template match="fo:block|fo:block-container">
>>      <xsl:call-template name="copy"/>
>> @@ -73,15 +92,7 @@
>>      <xsl:call-template name="copy"/>
>>    </xsl:template>
>>
>> -  <xsl:template match="fo:table">
>> -    <xsl:copy>
>> -      <xsl:apply-templates select="@*"/>
>> -      <xsl:apply-templates select="*[name() != 'fo:table-footer']"/>
>> -      <xsl:apply-templates select="fo:table-footer"/>
>> -    </xsl:copy>
>> -  </xsl:template>
>> -
>> -  <xsl:template
>> match="fo:table-header|fo:table-footer|fo:table-body|fo:table-row|fo:table-cell">
>> +  <xsl:template
>> match="fo:table|fo:table-header|fo:table-footer|fo:table-body|fo:table-row|fo:table-cell">
>>      <xsl:call-template name="copy"/>
>>    </xsl:template>
>>
>>
>> Added:
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/LayoutMasterSetTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/LayoutMasterSetTestCase.java?rev=1376923&view=auto
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/LayoutMasterSetTestCase.java
>> (added)
>> +++
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/LayoutMasterSetTestCase.java
>> Fri Aug 24 14:10:39 2012
>> @@ -0,0 +1,95 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *      http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +
>> +/* $Id$ */
>> +
>> +package org.apache.fop.fo.pagination;
>> +
>> +import org.junit.Test;
>> +
>> +import static org.junit.Assert.assertEquals;
>> +
>> +import org.apache.fop.apps.FOUserAgent;
>> +import org.apache.fop.fo.FODocumentParser;
>> +import org.apache.fop.fo.FODocumentParser.FOEventHandlerFactory;
>> +import org.apache.fop.fo.FOEventHandler;
>> +
>> +public class LayoutMasterSetTestCase {
>> +
>> +    private static class FlowMappingTester extends FOEventHandler {
>> +
>> +        private static final String[][] FLOW_MAPPINGS = {
>> +
>> +            {"first-page-before", "xsl-region-before"},
>> +            {"first-page-after", "xsl-region-after"},
>> +            {"first-page-start", "xsl-region-start"},
>> +            {"first-page-end", "xsl-region-end"},
>> +
>> +            {"odd-page-before", "xsl-region-before"},
>> +            {"odd-page-after", "xsl-region-after"},
>> +            {"odd-page-start", "xsl-region-start"},
>> +            {"odd-page-end", "xsl-region-end"},
>> +
>> +            {"odd-page-before", "xsl-region-before"},
>> +            {"odd-page-after", "xsl-region-after"},
>> +            {"odd-page-start", "xsl-region-start"},
>> +            {"odd-page-end", "xsl-region-end"},
>> +
>> +            {"blank-page-before", "xsl-region-before"},
>> +            {"blank-page-after", "xsl-region-after"},
>> +            {"blank-page-start", "xsl-region-start"},
>> +            {"blank-page-end", "xsl-region-end"},
>> +
>> +            {"last-page-before", "xsl-region-before"},
>> +            {"last-page-after", "xsl-region-after"},
>> +            {"last-page-start", "xsl-region-start"},
>> +            {"last-page-end", "xsl-region-end"},
>> +
>> +            {"xsl-footnote-separator", "xsl-footnote-separator"}
>> +
>> +        };
>> +
>> +        FlowMappingTester(FOUserAgent userAgent) {
>> +            super(userAgent);
>> +        }
>> +
>> +        @Override
>> +        public void startPageSequence(PageSequence pageSeq) {
>> +            super.startPageSequence(pageSeq);
>> +            LayoutMasterSet layoutMasterSet =
>> pageSeq.getRoot().getLayoutMasterSet();
>> +            for (String[] mapping : FLOW_MAPPINGS) {
>> +                assertEquals(mapping[1],
>> layoutMasterSet.getDefaultRegionNameFor(mapping[0]));
>> +            }
>> +        }
>> +
>> +    }
>> +
>> +    /**
>> +     * Tests the {@link LayoutMasterSet#getDefaultRegionNameFor(String)}
>> method.
>> +     */
>> +    @Test
>> +    public void testFlowMapping() throws Exception {
>> +        FODocumentParser foDocumentParser =
>> FODocumentParser.newInstance(new FOEventHandlerFactory() {
>> +
>> +            public FOEventHandler newFOEventHandler(FOUserAgent
>> foUserAgent) {
>> +                return new FlowMappingTester(foUserAgent);
>> +            }
>> +        });
>> +        foDocumentParser.parse(getClass().getResourceAsStream("
>> side-regions.fo"));
>> +    }
>> +
>> +}
>>
>> Propchange:
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/LayoutMasterSetTestCase.java
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange:
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/LayoutMasterSetTestCase.java
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Revision Id
>>
>> Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/
>> side-regions.fo
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/side-regions.fo?rev=1376923&view=auto
>>
>> ==============================================================================
>> --- xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/
>> side-regions.fo (added)
>> +++ xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/
>> side-regions.fo Fri Aug 24 14:10:39 2012
>> @@ -0,0 +1,181 @@
>> +<?xml version="1.0" standalone="no"?>
>> +<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
>> +  <fo:layout-master-set>
>> +    <fo:simple-page-master master-name="first-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#FFF0F0"/>
>> +      <fo:region-before region-name="first-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="first-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="first-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="first-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="odd-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#FFFFF0"/>
>> +      <fo:region-before region-name="odd-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="odd-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="odd-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="odd-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="even-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#F0FFF0"/>
>> +      <fo:region-before region-name="even-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="even-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="even-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="even-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="blank-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#F0F0F0"/>
>> +      <fo:region-before region-name="blank-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="blank-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="blank-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="blank-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="last-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="45pt 12pt" display-align="center"
>> background-color="#F0F0FF"/>
>> +      <fo:region-before region-name="last-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="last-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="last-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="last-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:page-sequence-master master-name="pages">
>> +      <fo:repeatable-page-master-alternatives>
>> +        <fo:conditional-page-master-reference page-position="first"
>> master-reference="first-page"/>
>> +        <fo:conditional-page-master-reference page-position="last"
>> master-reference="last-page"/>
>> +        <fo:conditional-page-master-reference blank-or-not-blank="blank"
>> +          master-reference="blank-page"/>
>> +        <fo:conditional-page-master-reference odd-or-even="odd"
>> master-reference="odd-page"/>
>> +        <fo:conditional-page-master-reference odd-or-even="even"
>> master-reference="even-page"/>
>> +      </fo:repeatable-page-master-alternatives>
>> +    </fo:page-sequence-master>
>> +  </fo:layout-master-set>
>> +  <fo:page-sequence master-reference="pages" force-page-count="even"
>> font-size="4pt"
>> +    text-align="center">
>> +
>> +    <fo:static-content flow-name="first-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid red"
>> +        padding-bottom="0.5pt">First Page Before.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="first-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid red"
>> +        padding-top="0.5pt">First Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="first-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid red"
>> +        padding-bottom="0.5pt">First Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="first-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid red"
>> +        padding-bottom="0.5pt">First Page End.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="odd-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid orange"
>> +        padding-top="0.5pt">Odd Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="odd-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid orange"
>> +        padding-bottom="0.5pt">Odd Page End.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="odd-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid orange"
>> +        padding-bottom="0.5pt">Odd Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="odd-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid orange"
>> +        padding-bottom="0.5pt">Odd Page Before.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="even-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid green"
>> +        padding-bottom="0.5pt">Even Page End.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="even-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid green"
>> +        padding-bottom="0.5pt">Even Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="even-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid green"
>> +        padding-top="0.5pt">Even Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="even-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid green"
>> +        padding-bottom="0.5pt">Even Page Before.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="blank-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid black"
>> +        padding-bottom="0.5pt">Blank Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="blank-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid black"
>> +        padding-top="0.5pt">Blank Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="blank-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid black"
>> +        padding-bottom="0.5pt">Blank Page Before.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="blank-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid black"
>> +        padding-bottom="0.5pt">Blank Page End.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="last-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid blue"
>> +        padding-bottom="0.5pt">Last Page Before.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="last-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid blue"
>> +        padding-bottom="0.5pt">Last Page End.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="last-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid blue"
>> +        padding-top="0.5pt">Last Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="last-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid blue"
>> +        padding-bottom="0.5pt">Last Page Start.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="xsl-footnote-separator">
>> +      <fo:block>
>> +        <fo:leader leader-pattern="rule" leader-length="40%"
>> rule-thickness="0.5pt"/>
>> +      </fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:flow flow-name="xsl-region-body" font-size="8pt"
>> line-height="10pt">
>> +      <fo:block>Apacheâ„¢ FOP (Formatting Objects Processor) is a print
>> formatter driven by XSL
>> +        formatting objects (XSL-FO) and an output independent
>> formatter.</fo:block>
>> +      <fo:block break-before="page">It is an
>> application<fo:footnote><fo:inline>*</fo:inline>
>> +          <fo:footnote-body><fo:block font-size="80%">* written in
>> +              Java</fo:block></fo:footnote-body></fo:footnote> that reads
>> a formatting object (FO)
>> +        tree and renders the resulting pages to a specified
>> output.</fo:block>
>> +      <fo:block break-before="page">The FOP project is part of the Apache
>> Software Foundation, which
>> +        is a wider community of users and developers of open source
>> projects.</fo:block>
>> +      <fo:block break-before="page">Apacheâ„¢ FOP (Formatting Objects
>> Processor) is a print formatter
>> +        driven by XSL formatting objects (XSL-FO) and an output
>> independent formatter.</fo:block>
>> +      <fo:block break-before="page">It is a Java application that reads a
>> formatting object (FO)
>> +        tree and renders the resulting pages to a specified
>> output.</fo:block>
>> +      <fo:block break-before="page">The FOP project is part of the Apache
>> Software Foundation, which
>> +        is a wider community of users and developers of open source
>> projects.</fo:block>
>> +    </fo:flow>
>> +  </fo:page-sequence>
>> +</fo:root>
>>
>> Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/
>> side-regions.fo
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/fo/pagination/
>> side-regions.fo
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Id
>>
>> Modified:
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/TableHeaderScopeTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/TableHeaderScopeTestCase.java?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> ---
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/TableHeaderScopeTestCase.java
>> (original)
>> +++
>> xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/TableHeaderScopeTestCase.java
>> Fri Aug 24 14:10:39 2012
>> @@ -52,7 +52,8 @@ public class TableHeaderScopeTestCase {
>>          VersionController controller = mock(VersionController.class);
>>          PDFDocument document = new PDFDocument("Test", controller);
>>          document.makeStructTreeRoot(null);
>> -        document.makeStructureElement(Table.TH, null, scope);
>> +        PDFStructElem th = new PDFStructElem(null, Table.TH);
>> +        document.registerStructureElement(th, scope);
>>
>>  verify(controller).addTableHeaderScopeAttribute(any(PDFStructElem.class),
>> eq(scope));
>>      }
>>
>>
>> Modified: xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/role.pdf
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/role.pdf?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> Binary files - no diff available.
>>
>> Modified:
>> xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/role_non-standard.pdf
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/role_non-standard.pdf?rev=1376923&r1=1376922&r2=1376923&view=diff
>>
>> ==============================================================================
>> Binary files - no diff available.
>>
>> Added: xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/side-regions.pdf
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/side-regions.pdf?rev=1376923&view=auto
>>
>> ==============================================================================
>> Binary file - no diff available.
>>
>> Propchange:
>> xmlgraphics/fop/trunk/test/pdf/accessibility/pdf/side-regions.pdf
>>
>> ------------------------------------------------------------------------------
>>     svn:mime-type = application/octet-stream
>>
>> Added: xmlgraphics/fop/trunk/test/pdf/accessibility/side-regions.fo
>> URL:
>> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/pdf/accessibility/side-regions.fo?rev=1376923&view=auto
>>
>> ==============================================================================
>> --- xmlgraphics/fop/trunk/test/pdf/accessibility/side-regions.fo (added)
>> +++ xmlgraphics/fop/trunk/test/pdf/accessibility/side-regions.fo Fri Aug
>> 24 14:10:39 2012
>> @@ -0,0 +1,181 @@
>> +<?xml version="1.0" standalone="no"?>
>> +<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
>> +  <fo:layout-master-set>
>> +    <fo:simple-page-master master-name="first-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#FFF0F0"/>
>> +      <fo:region-before region-name="first-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="first-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="first-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="first-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="odd-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#FFFFF0"/>
>> +      <fo:region-before region-name="odd-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="odd-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="odd-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="odd-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="even-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#F0FFF0"/>
>> +      <fo:region-before region-name="even-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="even-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="even-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="even-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="blank-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="12pt" display-align="center"
>> background-color="#F0F0F0"/>
>> +      <fo:region-before region-name="blank-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="blank-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="blank-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="blank-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:simple-page-master master-name="last-page"
>> +      page-height="100pt" page-width="150pt">
>> +      <fo:region-body margin="45pt 12pt" display-align="center"
>> background-color="#F0F0FF"/>
>> +      <fo:region-before region-name="last-page-before" extent="10pt"
>> precedence="true"
>> +        display-align="after"/>
>> +      <fo:region-after region-name="last-page-after" extent="10pt"
>> precedence="true"/>
>> +      <fo:region-start region-name="last-page-start" extent="10pt"
>> reference-orientation="90"
>> +        display-align="after"/>
>> +      <fo:region-end region-name="last-page-end" extent="10pt"
>> reference-orientation="-90"
>> +        display-align="after"/>
>> +    </fo:simple-page-master>
>> +    <fo:page-sequence-master master-name="pages">
>> +      <fo:repeatable-page-master-alternatives>
>> +        <fo:conditional-page-master-reference page-position="first"
>> master-reference="first-page"/>
>> +        <fo:conditional-page-master-reference page-position="last"
>> master-reference="last-page"/>
>> +        <fo:conditional-page-master-reference blank-or-not-blank="blank"
>> +          master-reference="blank-page"/>
>> +        <fo:conditional-page-master-reference odd-or-even="odd"
>> master-reference="odd-page"/>
>> +        <fo:conditional-page-master-reference odd-or-even="even"
>> master-reference="even-page"/>
>> +      </fo:repeatable-page-master-alternatives>
>> +    </fo:page-sequence-master>
>> +  </fo:layout-master-set>
>> +  <fo:page-sequence master-reference="pages" force-page-count="even"
>> font-size="4pt"
>> +    text-align="center">
>> +
>> +    <fo:static-content flow-name="first-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid red"
>> +        padding-bottom="0.5pt">First Page Before.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="first-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid red"
>> +        padding-top="0.5pt">First Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="first-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid red"
>> +        padding-bottom="0.5pt">First Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="first-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid red"
>> +        padding-bottom="0.5pt">First Page End.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="odd-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid orange"
>> +        padding-top="0.5pt">Odd Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="odd-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid orange"
>> +        padding-bottom="0.5pt">Odd Page End.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="odd-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid orange"
>> +        padding-bottom="0.5pt">Odd Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="odd-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid orange"
>> +        padding-bottom="0.5pt">Odd Page Before.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="even-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid green"
>> +        padding-bottom="0.5pt">Even Page End.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="even-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid green"
>> +        padding-bottom="0.5pt">Even Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="even-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid green"
>> +        padding-top="0.5pt">Even Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="even-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid green"
>> +        padding-bottom="0.5pt">Even Page Before.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="blank-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid black"
>> +        padding-bottom="0.5pt">Blank Page Start.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="blank-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid black"
>> +        padding-top="0.5pt">Blank Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="blank-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid black"
>> +        padding-bottom="0.5pt">Blank Page Before.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="blank-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid black"
>> +        padding-bottom="0.5pt">Blank Page End.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="last-page-before">
>> +      <fo:block start-indent="12pt" end-indent="12pt"
>> border-bottom="0.5pt solid blue"
>> +        padding-bottom="0.5pt">Last Page Before.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="last-page-end">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid blue"
>> +        padding-bottom="0.5pt">Last Page End.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="last-page-after">
>> +      <fo:block start-indent="12pt" end-indent="12pt" border-top="0.5pt
>> solid blue"
>> +        padding-top="0.5pt">Last Page After.</fo:block>
>> +    </fo:static-content>
>> +    <fo:static-content flow-name="last-page-start">
>> +      <fo:block start-indent="2pt" end-indent="2pt" border-bottom="0.5pt
>> solid blue"
>> +        padding-bottom="0.5pt">Last Page Start.</fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:static-content flow-name="xsl-footnote-separator">
>> +      <fo:block>
>> +        <fo:leader leader-pattern="rule" leader-length="40%"
>> rule-thickness="0.5pt"/>
>> +      </fo:block>
>> +    </fo:static-content>
>> +
>> +    <fo:flow flow-name="xsl-region-body" font-size="8pt"
>> line-height="10pt">
>> +      <fo:block>Apacheâ„¢ FOP (Formatting Objects Processor) is a print
>> formatter driven by XSL
>> +        formatting objects (XSL-FO) and an output independent
>> formatter.</fo:block>
>> +      <fo:block break-before="page">It is an
>> application<fo:footnote><fo:inline>*</fo:inline>
>> +          <fo:footnote-body><fo:block font-size="80%">* written in
>> +              Java</fo:block></fo:footnote-body></fo:footnote> that reads
>> a formatting object (FO)
>> +        tree and renders the resulting pages to a specified
>> output.</fo:block>
>> +      <fo:block break-before="page">The FOP project is part of the Apache
>> Software Foundation, which
>> +        is a wider community of users and developers of open source
>> projects.</fo:block>
>> +      <fo:block break-before="page">Apacheâ„¢ FOP (Formatting Objects
>> Processor) is a print formatter
>> +        driven by XSL formatting objects (XSL-FO) and an output
>> independent formatter.</fo:block>
>> +      <fo:block break-before="page">It is a Java application that reads a
>> formatting object (FO)
>> +        tree and renders the resulting pages to a specified
>> output.</fo:block>
>> +      <fo:block break-before="page">The FOP project is part of the Apache
>> Software Foundation, which
>> +        is a wider community of users and developers of open source
>> projects.</fo:block>
>> +    </fo:flow>
>> +  </fo:page-sequence>
>> +</fo:root>
>>
>> Propchange: xmlgraphics/fop/trunk/test/pdf/accessibility/side-regions.fo
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange: xmlgraphics/fop/trunk/test/pdf/accessibility/side-regions.fo
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Id
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
>> For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org
>>
>>
>