You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2006/01/25 14:48:38 UTC

svn commit: r372214 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/render/rtf/RTFHandler.java status.xml

Author: jeremias
Date: Wed Jan 25 05:48:32 2006
New Revision: 372214

URL: http://svn.apache.org/viewcvs?rev=372214&view=rev
Log:
Bugfix: Regions with non-standard names got ignored in RTF output leading to missing headers and footers.

Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/rtf/RTFHandler.java
    xmlgraphics/fop/trunk/status.xml

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/rtf/RTFHandler.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/rtf/RTFHandler.java?rev=372214&r1=372213&r2=372214&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/rtf/RTFHandler.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/rtf/RTFHandler.java Wed Jan 25 05:48:32 2006
@@ -32,6 +32,9 @@
 // FOP
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.datatypes.LengthBase;
+import org.apache.fop.datatypes.PercentBaseContext;
+import org.apache.fop.datatypes.SimplePercentBaseContext;
 import org.apache.fop.fo.FOEventHandler;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.flow.BasicLink;
@@ -57,6 +60,7 @@
 import org.apache.fop.fo.flow.TableRow;
 import org.apache.fop.fo.pagination.Flow;
 import org.apache.fop.fo.pagination.PageSequence;
+import org.apache.fop.fo.pagination.Region;
 import org.apache.fop.fo.pagination.SimplePageMaster;
 import org.apache.fop.fo.pagination.StaticContent;
 import org.apache.fop.fo.Constants;
@@ -121,6 +125,7 @@
                                                //in current page-sequence
     private BuilderContext builderContext = new BuilderContext(null);
 
+    private SimplePageMaster pagemaster;
 
     /**
      * Creates a new RTF structure handler.
@@ -179,7 +184,7 @@
 
             String reference = pageSeq.getMasterReference();
 
-            SimplePageMaster pagemaster
+            this.pagemaster
                     = pageSeq.getRoot().getLayoutMasterSet().getSimplePageMaster(reference);
 
             //only simple-page-master supported, so pagemaster may be null
@@ -232,7 +237,11 @@
 
         try {
             log.debug("starting flow: " + fl.getFlowName());
-            if (fl.getFlowName().equals("xsl-region-body")) {
+            boolean handled = false;
+            Region regionBody = pagemaster.getRegion(Constants.FO_REGION_BODY);
+            Region regionBefore = pagemaster.getRegion(Constants.FO_REGION_BEFORE);
+            Region regionAfter = pagemaster.getRegion(Constants.FO_REGION_AFTER);
+            if (fl.getFlowName().equals(regionBody.getRegionName())) {
                 // if there is no header in current page-sequence but there has been
                 // a header in a previous page-sequence, insert an empty header.
                 if (bPrevHeaderSpecified && !bHeaderSpecified) {
@@ -256,8 +265,9 @@
                                 (IRtfAfterContainer.class, true, this);
                     contAfter.newAfter(attr);
                 }
-
-            } else if (fl.getFlowName().equals("xsl-region-before")) {
+                handled = true;
+            } else if (regionBefore != null 
+                    && fl.getFlowName().equals(regionBefore.getRegionName())) {
                 bHeaderSpecified = true;
                 bPrevHeaderSpecified = true;
 
@@ -274,7 +284,9 @@
 
                 RtfBefore before = c.newBefore(beforeAttributes);
                 builderContext.pushContainer(before);
-            } else if (fl.getFlowName().equals("xsl-region-after")) {
+                handled = true;
+            } else if (regionAfter != null 
+                    && fl.getFlowName().equals(regionAfter.getRegionName())) {
                 bFooterSpecified = true;
                 bPrevFooterSpecified = true;
 
@@ -292,6 +304,10 @@
 
                 RtfAfter after = c.newAfter(afterAttributes);
                 builderContext.pushContainer(after);
+                handled = true;
+            }
+            if (!handled) {
+                log.warn("A " + fl.getLocalName() + " has been skipped: " + fl.getFlowName());
             }
         } catch (IOException ioe) {
             log.error("startFlow: " + ioe.getMessage());
@@ -312,11 +328,16 @@
         }
 
         try {
-            if (fl.getFlowName().equals("xsl-region-body")) {
+            Region regionBody = pagemaster.getRegion(Constants.FO_REGION_BODY);
+            Region regionBefore = pagemaster.getRegion(Constants.FO_REGION_BEFORE);
+            Region regionAfter = pagemaster.getRegion(Constants.FO_REGION_AFTER);
+            if (fl.getFlowName().equals(regionBody.getRegionName())) {
                 //just do nothing
-            } else if (fl.getFlowName().equals("xsl-region-before")) {
+            } else if (regionBefore != null 
+                    && fl.getFlowName().equals(regionBefore.getRegionName())) {
                 builderContext.popContainer();
-            } else if (fl.getFlowName().equals("xsl-region-after")) {
+            } else if (regionAfter != null 
+                    && fl.getFlowName().equals(regionAfter.getRegionName())) {
                 builderContext.popContainer();
             }
         } catch (Exception e) {
@@ -1421,16 +1442,23 @@
         if (foNode instanceof PageSequence) {
             PageSequence pageSequence = (PageSequence) foNode;
 
-            FONode regionBefore = (FONode) pageSequence.flowMap.get("xsl-region-before");
-            FONode regionAfter  = (FONode) pageSequence.flowMap.get("xsl-region-after");
-
+            Region regionBefore = pagemaster.getRegion(Constants.FO_REGION_BEFORE);
             if (regionBefore != null) {
-                recurseFONode(regionBefore);
+                FONode staticBefore = (FONode) pageSequence.flowMap.get(
+                        regionBefore.getRegionName());
+                if (staticBefore != null) {
+                    recurseFONode(staticBefore);
+                }
             }
-
+            Region regionAfter = pagemaster.getRegion(Constants.FO_REGION_AFTER);
             if (regionAfter != null) {
-                recurseFONode(regionAfter);
+                FONode staticAfter = (FONode) pageSequence.flowMap.get(
+                        regionAfter.getRegionName());
+                if (staticAfter != null) {
+                    recurseFONode(staticAfter);
+                }
             }
+
 
             recurseFONode( pageSequence.getMainFlow() );
         } else if (foNode instanceof Table) {

Modified: xmlgraphics/fop/trunk/status.xml
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/status.xml?rev=372214&r1=372213&r2=372214&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Wed Jan 25 05:48:32 2006
@@ -28,6 +28,10 @@
   <changes>
     <release version="FOP Trunk">
       <action context="Code" dev="JM" type="fix">
+        Bugfix: Regions with non-standard names got ignored in RTF output leading to 
+        missing headers and footers.
+      </action>
+      <action context="Code" dev="JM" type="fix">
         The RTF output now properly generates the "\landscape" flag for documents in 
         landscape orientation.
       </action>



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