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 mehdi houshmand <me...@gmail.com> on 2012/08/28 17:16:25 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
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
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
>
>
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
Posted by Vincent Hennebert <vh...@gmail.com>.
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
>>
>>
>