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
>>
>>
>