]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
1.) Some flattening of the Region classes done, with the goal of moving
authorGlen Mazza <gmazza@apache.org>
Mon, 30 Aug 2004 12:00:54 +0000 (12:00 +0000)
committerGlen Mazza <gmazza@apache.org>
Mon, 30 Aug 2004 12:00:54 +0000 (12:00 +0000)
some of its layout logic to PageLayoutManager.

2.)  New helper function getPropEnum() added.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197898 13f79535-47bb-0310-9956-ffa450edef68

25 files changed:
src/java/org/apache/fop/fo/FObj.java
src/java/org/apache/fop/fo/flow/Block.java
src/java/org/apache/fop/fo/flow/BlockContainer.java
src/java/org/apache/fop/fo/flow/InstreamForeignObject.java
src/java/org/apache/fop/fo/flow/Leader.java
src/java/org/apache/fop/fo/flow/PageNumber.java
src/java/org/apache/fop/fo/flow/PageNumberCitation.java
src/java/org/apache/fop/fo/flow/RetrieveMarker.java
src/java/org/apache/fop/fo/flow/Table.java
src/java/org/apache/fop/fo/flow/TableCell.java
src/java/org/apache/fop/fo/flow/TableRow.java
src/java/org/apache/fop/fo/pagination/ColorProfile.java
src/java/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java
src/java/org/apache/fop/fo/pagination/PageSequence.java
src/java/org/apache/fop/fo/pagination/Region.java
src/java/org/apache/fop/fo/pagination/RegionAfter.java
src/java/org/apache/fop/fo/pagination/RegionBA.java
src/java/org/apache/fop/fo/pagination/RegionBefore.java
src/java/org/apache/fop/fo/pagination/RegionEnd.java
src/java/org/apache/fop/fo/pagination/RegionSE.java
src/java/org/apache/fop/fo/pagination/RegionStart.java
src/java/org/apache/fop/layoutmgr/ExternalGraphicLayoutManager.java
src/java/org/apache/fop/layoutmgr/InstreamForeignObjectLM.java
src/java/org/apache/fop/layoutmgr/LeaderLayoutManager.java
src/java/org/apache/fop/render/rtf/TextAttributesConverter.java

index b7c865d9b021e81099d4ba3996ad3d84e1dd595b..9aefe68abae5a96dee28d0d1905512427383a265 100644 (file)
@@ -209,6 +209,17 @@ public class FObj extends FONode implements Constants {
         return propertyList.get(propId).getLength().getValue();
     }
 
+    /**
+     * Convenience method to quickly obtain the Constants class enumeration
+     * value of a property for this FO.  Meaningful only for properties
+     * having an enumeration representation
+     * @param propId - the Constants ID of the desired property to obtain
+     * @return the enumeration value of the property value
+     */
+    public int getPropEnum(int propId) {
+        return propertyList.get(propId).getEnum();
+    }
+
     /**
      * @see org.apache.fop.fo.FONode#addChildNode(FONode)
      */
@@ -362,7 +373,7 @@ public class FObj extends FONode implements Constants {
     protected void setWritingMode() {
         FObj p = findNearestAncestorGeneratingRAs(true, true);
         this.propertyList.setWritingMode(
-          p.getProperty(PR_WRITING_MODE).getEnum());
+          p.getPropEnum(PR_WRITING_MODE));
     }
 
     /**
index f1fe8a3452ac81ed69b068043fd4a674a1376291..1040d2538d7d0c7c1db0a506e0b6982cd74c5495 100644 (file)
@@ -103,28 +103,20 @@ public class Block extends FObjMixed {
      */
     protected void addProperties(Attributes attlist) throws SAXParseException {
         super.addProperties(attlist);
-        this.span = this.propertyList.get(PR_SPAN).getEnum();
-        this.wsTreatment =
-          this.propertyList.get(PR_WHITE_SPACE_TREATMENT).getEnum();
-        this.bWScollapse =
-          (this.propertyList.get(PR_WHITE_SPACE_COLLAPSE).getEnum()
-           == Constants.TRUE);
-        this.lfTreatment =
-          this.propertyList.get(PR_LINEFEED_TREATMENT).getEnum();
-
-        this.align = this.propertyList.get(PR_TEXT_ALIGN).getEnum();
-        this.alignLast =
-          this.propertyList.get(PR_TEXT_ALIGN_LAST).getEnum();
-        this.breakAfter = this.propertyList.get(PR_BREAK_AFTER).getEnum();
+        this.span = getPropEnum(PR_SPAN);
+        this.wsTreatment = getPropEnum(PR_WHITE_SPACE_TREATMENT);
+        this.bWScollapse = (getPropEnum(PR_WHITE_SPACE_COLLAPSE) == Constants.TRUE);
+        this.lfTreatment = getPropEnum(PR_LINEFEED_TREATMENT);
+        this.align = getPropEnum(PR_TEXT_ALIGN);
+        this.alignLast = getPropEnum(PR_TEXT_ALIGN_LAST);
+        this.breakAfter = getPropEnum(PR_BREAK_AFTER);
         this.lineHeight = getPropLength(PR_LINE_HEIGHT);
         this.startIndent = getPropLength(PR_START_INDENT);
         this.endIndent = getPropLength(PR_END_INDENT);
         this.spaceBefore = getPropLength(PR_SPACE_BEFORE | CP_OPTIMUM);
         this.spaceAfter = getPropLength(PR_SPACE_AFTER | CP_OPTIMUM);
         this.textIndent = getPropLength(PR_TEXT_INDENT);
-        this.keepWithNext =
-          this.propertyList.get(PR_KEEP_WITH_NEXT).getEnum();
-
+        this.keepWithNext = getPropEnum(PR_KEEP_WITH_NEXT);
         this.blockWidows =
           this.propertyList.get(PR_WIDOWS).getNumber().intValue();
         this.blockOrphans =
index 2d277fecef696ec020fd09a6b68ca176f7438edb..47965c1bd2e13206d392ab4775814ad7b6954d04 100644 (file)
@@ -60,7 +60,7 @@ public class BlockContainer extends FObj {
      */
     protected void addProperties(Attributes attlist) throws SAXParseException {
         super.addProperties(attlist);
-        this.span = this.propertyList.get(PR_SPAN).getEnum();
+        this.span = getPropEnum(PR_SPAN);
         this.backgroundColor =
             this.propertyList.get(PR_BACKGROUND_COLOR).getColorType();
 
@@ -87,7 +87,7 @@ public class BlockContainer extends FObj {
      */
     public void addLayoutManager(List list) {   
         BlockContainerLayoutManager blm = new BlockContainerLayoutManager(this);
-        blm.setOverflow(getProperty(PR_OVERFLOW).getEnum());
+        blm.setOverflow(getPropEnum(PR_OVERFLOW));
         list.add(blm);
     }
 
index 0da8d71ffe2da62b97bc467fc75c8156646a3c6c..ba87618e10c239bb0a8ef7b47d2b095624ce9436 100644 (file)
@@ -77,7 +77,7 @@ public class InstreamForeignObject extends FObj {
 
     public int computeXOffset (int ipd, int cwidth) {
         int xoffset = 0;
-        int ta = propertyList.get(PR_TEXT_ALIGN).getEnum();
+        int ta = getPropEnum(PR_TEXT_ALIGN);
         switch (ta) {
             case TextAlign.CENTER:
                 xoffset = (ipd - cwidth) / 2;
@@ -96,7 +96,7 @@ public class InstreamForeignObject extends FObj {
 
     public int computeYOffset(int bpd, int cheight) {
         int yoffset = 0;
-        int da = propertyList.get(PR_DISPLAY_ALIGN).getEnum();
+        int da = getPropEnum(PR_DISPLAY_ALIGN);
         switch (da) {
             case DisplayAlign.BEFORE:
                 break;
index ca92fcb6ff20871d30cb8a6a1c66d6020eb00213..6582c3672c87a634e9257b87a0d4fe27fdf52693 100644 (file)
@@ -67,7 +67,7 @@ public class Leader extends FObjMixed {
 
         // fo:leader specific properties
         // determines the pattern of leader; allowed values: space, rule,dots, use-content
-        leaderPattern = this.propertyList.get(PR_LEADER_PATTERN).getEnum();
+        leaderPattern = getPropEnum(PR_LEADER_PATTERN);
         switch(leaderPattern) {
             case LeaderPattern.SPACE:
                 // use Space
@@ -76,7 +76,7 @@ public class Leader extends FObjMixed {
                 // the following properties only apply
                 // for leader-pattern = "rule"
                 ruleThickness = getPropLength(PR_RULE_THICKNESS);
-                ruleStyle = propertyList.get(PR_RULE_STYLE).getEnum();
+                ruleStyle = getPropEnum(PR_RULE_STYLE);
             break;
             case LeaderPattern.DOTS:
             break;
index d4585cdb2f1b867dcfebdd50ce6d1cf53bd691d8..13d1d43c00f311818a2a7f77e7f7ead0addc1c82 100644 (file)
@@ -75,8 +75,7 @@ public class PageNumber extends FObj {
         this.green = c.getGreen();
         this.blue = c.getBlue();
 
-        this.wrapOption = this.propertyList.get(PR_WRAP_OPTION).getEnum();
-
+        this.wrapOption = getPropEnum(PR_WRAP_OPTION);
         getFOInputHandler().startPageNumber(this);
     }
 
index 73257626d13cea045ee22b56477566b555261f3c..c8e25eeda1f22e51bd5e9e2628b312eff2037504 100644 (file)
@@ -79,7 +79,7 @@ public class PageNumberCitation extends FObj {
         this.green = c.getGreen();
         this.blue = c.getBlue();
 
-        this.wrapOption = this.propertyList.get(PR_WRAP_OPTION).getEnum();
+        this.wrapOption = getPropEnum(PR_WRAP_OPTION);
         this.refId = getPropString(PR_REF_ID);
 
         if (this.refId.equals("")) {
index 30526a7ac8712baa009853d43f5ea95166f7a2b5..55d739cc559ac971ee3bff1ee9acf68195f0eb5a 100644 (file)
@@ -58,10 +58,8 @@ public class RetrieveMarker extends FObjMixed {
     protected void addProperties(Attributes attlist) throws SAXParseException {
         super.addProperties(attlist);
         this.retrieveClassName = getPropString(PR_RETRIEVE_CLASS_NAME);
-        this.retrievePosition =
-            this.propertyList.get(PR_RETRIEVE_POSITION).getEnum();
-        this.retrieveBoundary =
-            this.propertyList.get(PR_RETRIEVE_BOUNDARY).getEnum();
+        this.retrievePosition = getPropEnum(PR_RETRIEVE_POSITION);
+        this.retrieveBoundary = getPropEnum(PR_RETRIEVE_BOUNDARY);
     }
 
     /**
index 4c532f67fd29b9e25e96649d7523fa080b5c64c0..c5df32f8bf6cbcf52402ddad3d86d2f1957d58c0 100644 (file)
@@ -84,8 +84,8 @@ public class Table extends FObj {
      */
     protected void addProperties(Attributes attlist) throws SAXParseException {
         super.addProperties(attlist);
-        this.breakBefore = this.propertyList.get(PR_BREAK_BEFORE).getEnum();
-        this.breakAfter = this.propertyList.get(PR_BREAK_AFTER).getEnum();
+        this.breakBefore = getPropEnum(PR_BREAK_BEFORE);
+        this.breakAfter = getPropEnum(PR_BREAK_AFTER);
         this.spaceBefore = getPropLength(PR_SPACE_BEFORE | CP_OPTIMUM);
         this.spaceAfter = getPropLength(PR_SPACE_AFTER | CP_OPTIMUM);
         this.backgroundColor =
@@ -93,15 +93,12 @@ public class Table extends FObj {
         this.ipd = this.propertyList.get(
                      PR_INLINE_PROGRESSION_DIMENSION).getLengthRange();
         this.height = getPropLength(PR_HEIGHT);
-        this.bAutoLayout = (this.propertyList.get(
-                PR_TABLE_LAYOUT).getEnum() == TableLayout.AUTO);
-
-        this.omitHeaderAtBreak = this.propertyList.get(
-                PR_TABLE_OMIT_HEADER_AT_BREAK).getEnum()
-                                            == TableOmitHeaderAtBreak.TRUE;
-        this.omitFooterAtBreak = this.propertyList.get(
-                PR_TABLE_OMIT_FOOTER_AT_BREAK).getEnum()
-                                            == TableOmitFooterAtBreak.TRUE;
+        this.bAutoLayout = (getPropEnum(PR_TABLE_LAYOUT) == TableLayout.AUTO);
+
+        this.omitHeaderAtBreak = getPropEnum(PR_TABLE_OMIT_HEADER_AT_BREAK)
+            == TableOmitHeaderAtBreak.TRUE;
+        this.omitFooterAtBreak = getPropEnum(PR_TABLE_OMIT_FOOTER_AT_BREAK)
+            == TableOmitFooterAtBreak.TRUE;
         getFOInputHandler().startTable(this);
     }
 
index 1f8d46a713b8a5e731e1a797c1a21d6c8768be1e..ed2caa5570dd7d8e7e41815663a0a557cce0577a 100644 (file)
@@ -187,17 +187,16 @@ public class TableCell extends FObj {
         this.backgroundColor =
             this.propertyList.get(PR_BACKGROUND_COLOR).getColorType();
 
-        bSepBorders = (this.propertyList.get(PR_BORDER_COLLAPSE).getEnum()
-                       == BorderCollapse.SEPARATE);
+        bSepBorders = (getPropEnum(PR_BORDER_COLLAPSE) == BorderCollapse.SEPARATE);
 
         calcBorders(propMgr.getBorderAndPadding());
 
         // Vertical cell alignment
-        verticalAlign = this.propertyList.get(PR_DISPLAY_ALIGN).getEnum();
+        verticalAlign = getPropEnum(PR_DISPLAY_ALIGN);
         if (verticalAlign == DisplayAlign.AUTO) {
             // Depends on all cells starting in row
             bRelativeAlign = true;
-            verticalAlign = this.propertyList.get(PR_RELATIVE_ALIGN).getEnum();
+            verticalAlign = getPropEnum(PR_RELATIVE_ALIGN);
         } else {
             bRelativeAlign = false;    // Align on a per-cell basis
         }
index f4e3b448e0b77561e25ce0a5ab640f576e9feb87..3e6f1700f2c92b3e5b49dac8a0a76510a2752e35 100644 (file)
@@ -80,7 +80,7 @@ public class TableRow extends FObj {
     }
 
     private void doSetup() {
-        this.breakAfter = this.propertyList.get(PR_BREAK_AFTER).getEnum();
+        this.breakAfter = getPropEnum(PR_BREAK_AFTER);
         this.backgroundColor =
             this.propertyList.get(PR_BACKGROUND_COLOR).getColorType();
 
index eedfabc3231707fdb595f03a799f455fc3b0869f..6a483bf49f506bc1bbd50df41a26bb997dac4d03 100644 (file)
@@ -66,9 +66,9 @@ public class ColorProfile extends FObj {
      * object.
      */
     protected void endOfNode() throws SAXParseException {
-        src = this.propertyList.get(PR_SRC).getString();
-        profileName = this.propertyList.get(PR_COLOR_PROFILE_NAME).getString();
-        intent = this.propertyList.get(PR_RENDERING_INTENT).getEnum();
+        src = getPropString(PR_SRC);
+        profileName = getPropString(PR_COLOR_PROFILE_NAME);
+        intent = getPropEnum(PR_RENDERING_INTENT);
         this.propertyList = null;
     }
 
index 322d3df25af4b9184d156b52f26fcfbf6044304a..18018eb5844aac4bdbf1c09a2dc636918a1233e8 100644 (file)
@@ -72,9 +72,9 @@ public class ConditionalPageMasterReference extends FObj {
 
         validateParent(parent);
 
-        this.pagePosition = this.propertyList.get(PR_PAGE_POSITION).getEnum();
-        this.oddOrEven = this.propertyList.get(PR_ODD_OR_EVEN).getEnum();
-        this.blankOrNotBlank = this.propertyList.get(PR_BLANK_OR_NOT_BLANK).getEnum();
+        this.pagePosition = getPropEnum(PR_PAGE_POSITION);
+        this.oddOrEven = getPropEnum(PR_ODD_OR_EVEN);
+        this.blankOrNotBlank = getPropEnum(PR_BLANK_OR_NOT_BLANK);
     }
 
     /**
index 04738468a4d08fbb2fa896e58787f6f7eca03047..57eff5ccd6464384b200523c84f9501772f2b3d7 100644 (file)
@@ -276,13 +276,12 @@ public class PageSequence extends FObj {
 
         // get the 'format' properties
         this.pageNumberGenerator =
-            new PageNumberGenerator(this.propertyList.get(PR_FORMAT).getString(),
+            new PageNumberGenerator(getPropString(PR_FORMAT),
                                     this.propertyList.get(PR_GROUPING_SEPARATOR).getCharacter(),
                                     this.propertyList.get(PR_GROUPING_SIZE).getNumber().intValue(),
-                                    this.propertyList.get(PR_LETTER_VALUE).getEnum());
+                                    getPropEnum(PR_LETTER_VALUE));
 
-        this.forcePageCount =
-            this.propertyList.get(PR_FORCE_PAGE_COUNT).getEnum();
+        this.forcePageCount = getPropEnum(PR_FORCE_PAGE_COUNT);
 
         // this.propertyList.get("country");
         // this.propertyList.get("language");
index 974c71cf8cfbb600dde2d7f49bbb3012eb68c934..95a0ec5e28f75d5f7c8a10269c08750761a4f854 100644 (file)
@@ -43,13 +43,12 @@ public abstract class Region extends FObj {
     /** Holds the writing mode */
     protected int wm;
 
-    protected int extent = 0;
-
     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
      */
     protected Region(FONode parent) {
         super(parent);
+        layoutMaster = (SimplePageMaster) parent;
     }
 
     /**
@@ -61,31 +60,21 @@ public abstract class Region extends FObj {
         // regions may have name, or default
         if (null == this.propertyList.get(PR_REGION_NAME)) {
             setRegionName(getDefaultRegionName());
-        } else if (this.propertyList.get(PR_REGION_NAME).getString().equals("")) {
+        } else if (getPropString(PR_REGION_NAME).equals("")) {
             setRegionName(getDefaultRegionName());
         } else {
-            setRegionName(this.propertyList.get(PR_REGION_NAME).getString());
+            setRegionName(getPropString(PR_REGION_NAME));
             // check that name is OK. Not very pretty.
             if (isReserved(getRegionName())
                     && !getRegionName().equals(getDefaultRegionName())) {
                 throw new SAXParseException("region-name '" + regionName
                         + "' for " + this.getName()
-                        + " not permitted.", locator);
+                        + " is not permitted.", locator);
             }
         }
 
-        if (parent instanceof SimplePageMaster) {
-            layoutMaster = (SimplePageMaster)parent;
-        } else {
-            throw new SAXParseException(this.getName() + " must be child "
-                    + "of simple-page-master, not "
-                    + parent.getName(), locator);
-        }
-        this.wm = this.propertyList.get(PR_WRITING_MODE).getEnum();
-
-        // this.propertyList.get("clip");
-        // this.propertyList.get("display-align");
-        this.overflow = this.propertyList.get(PR_OVERFLOW).getEnum();
+        this.wm = getPropEnum(PR_WRITING_MODE);
+        this.overflow = getPropEnum(PR_OVERFLOW);
     }
 
     /**
@@ -122,14 +111,6 @@ public abstract class Region extends FObj {
         this.regionName = name;
     }
 
-    /**
-     * Returns the page master associated with this region.
-     * @return a simple-page-master
-     */
-    protected SimplePageMaster getPageMaster() {
-        return this.layoutMaster;
-    }
-
     /**
      * Checks to see if a given region name is one of the reserved names
      *
@@ -159,18 +140,6 @@ public abstract class Region extends FObj {
      */
     protected Region getSiblingRegion(int regionId) {
         // Ask parent for region
-        return  layoutMaster.getRegion(regionId);
-    }
-
-    /**
-     * Indicates if this region gets precedence.
-     * @return True if it gets precedence
-     */
-    public boolean getPrecedence() {
-        return false;
-    }
-
-    public int getExtent() {
-        return extent;
+        return layoutMaster.getRegion(regionId);
     }
 }
index 55dadce6e1fb0a52b3257817868ee1de31d97116..199c2c0dc62e9c47c296ef8b0249ce301e6efdf5 100644 (file)
@@ -21,6 +21,10 @@ package org.apache.fop.fo.pagination;
 // Java
 import java.awt.Rectangle;
 
+// XML
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXParseException;
+
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.datatypes.FODimension;
@@ -30,6 +34,9 @@ import org.apache.fop.datatypes.FODimension;
  */
 public class RegionAfter extends RegionBA {
 
+    private int extent = 0;
+    private boolean precedence = false;
+
     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
      */
@@ -37,6 +44,23 @@ public class RegionAfter extends RegionBA {
         super(parent);
     }
 
+    /**
+     * @see org.apache.fop.fo.FObj#addProperties
+     */
+    protected void addProperties(Attributes attlist) throws SAXParseException {
+        super.addProperties(attlist);
+        extent = getPropLength(PR_EXTENT);
+        precedence = (getPropEnum(PR_PRECEDENCE) == Precedence.TRUE);
+    }
+
+    /**
+     * Indicates if this region gets precedence.
+     * @return True if it gets precedence
+     */
+    public boolean getPrecedence() {
+        return precedence;
+    }
+
     /**
      * @see org.apache.fop.fo.pagination.Region#getViewportRectangle(FODimension)
      */
@@ -44,11 +68,11 @@ public class RegionAfter extends RegionBA {
         // Depends on extent, precedence ans writing mode
         Rectangle vpRect;
         if (this.wm == WritingMode.LR_TB || this.wm == WritingMode.RL_TB) {
-            vpRect = new Rectangle(0, reldims.bpd - getExtent(), reldims.ipd, getExtent());
+            vpRect = new Rectangle(0, reldims.bpd - extent, reldims.ipd, extent);
         } else {
-            vpRect = new Rectangle(0, reldims.bpd - getExtent(), getExtent(), reldims.ipd);
+            vpRect = new Rectangle(0, reldims.bpd - extent, extent, reldims.ipd);
         }
-        if (getPrecedence() == false) {
+        if (precedence == false) {
             adjustIPD(vpRect, this.wm);
         }
         return vpRect;
index 0e670d59c3beba8a8948d9d6aad490b4efc8211f..57273828fc4419d668f6450bf5cfd10f56b130e9 100644 (file)
@@ -33,8 +33,6 @@ import org.apache.fop.fo.FONode;
  */
 public abstract class RegionBA extends Region {
 
-    private boolean bPrecedence;
-
     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
      */
@@ -42,20 +40,11 @@ public abstract class RegionBA extends Region {
         super(parent);
     }
 
-    protected void addProperties(Attributes attlist) throws SAXParseException {
-        super.addProperties(attlist);
-        
-        bPrecedence =
-            (this.propertyList.get(PR_PRECEDENCE).getEnum() == Precedence.TRUE);
-
-        this.extent = getPropLength(PR_EXTENT);
-    }
-
     /**
-     * @see org.apache.fop.fo.pagination.Region#getPrecedence()
+     * @see org.apache.fop.fo.FObj#addProperties
      */
-    public boolean getPrecedence() {
-        return bPrecedence;
+    protected void addProperties(Attributes attlist) throws SAXParseException {
+        super.addProperties(attlist);
     }
 
     /**
@@ -71,12 +60,12 @@ public abstract class RegionBA extends Region {
         int offset = 0;
         Region start = getSiblingRegion(FO_REGION_START);
         if (start != null) {
-            offset = start.getExtent();
+            offset = start.getPropLength(PR_EXTENT);
             vpRefRect.translate(offset, 0);
         }
         Region end = getSiblingRegion(FO_REGION_END);
         if (end != null) {
-            offset += end.getExtent();
+            offset += end.getPropLength(PR_EXTENT);
         }
         if (offset > 0) {
             if (wm == WritingMode.LR_TB || wm == WritingMode.RL_TB) {
index 222e0fbace017416be521c77ef4bf21366d7a499..1315c2c048e4cc2087cd550f9dbe90f1be4c4403 100644 (file)
@@ -21,6 +21,10 @@ package org.apache.fop.fo.pagination;
 // Java
 import java.awt.Rectangle;
 
+// XML
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXParseException;
+
 // FOP
 import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.fo.FONode;
@@ -30,6 +34,9 @@ import org.apache.fop.fo.FONode;
  */
 public class RegionBefore extends RegionBA {
 
+    private int extent = 0;
+    private boolean precedence = false;
+
     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
      */
@@ -37,6 +44,23 @@ public class RegionBefore extends RegionBA {
         super(parent);
     }
 
+    /**
+     * @see org.apache.fop.fo.FObj#addProperties
+     */
+    protected void addProperties(Attributes attlist) throws SAXParseException {
+        super.addProperties(attlist);
+        extent = getPropLength(PR_EXTENT);
+        precedence = (getPropEnum(PR_PRECEDENCE) == Precedence.TRUE);
+    }
+
+    /**
+     * Indicates if this region gets precedence.
+     * @return True if it gets precedence
+     */
+    public boolean getPrecedence() {
+        return precedence;
+    }
+
     /**
      * @see org.apache.fop.fo.pagination.Region#getDefaultRegionName()
      */
@@ -56,11 +80,11 @@ public class RegionBefore extends RegionBA {
         // ipd depends on precedence, bpd=extent
         Rectangle vpRect;
         if (this.wm == WritingMode.LR_TB || this.wm == WritingMode.RL_TB) {
-            vpRect = new Rectangle(0, 0, reldims.ipd, getExtent());
+            vpRect = new Rectangle(0, 0, reldims.ipd, extent);
         } else {
-            vpRect = new Rectangle(0, 0, getExtent(), reldims.ipd);
+            vpRect = new Rectangle(0, 0, extent, reldims.ipd);
         }
-        if (getPrecedence() == false) {
+        if (precedence == false) {
             adjustIPD(vpRect, this.wm);
         }
         return vpRect;
index 25eb9384343495f29b591e7662d5b16f805a5bc5..3636dfc7ae0dfa85a4c309d60e461047109737a8 100644 (file)
@@ -21,6 +21,10 @@ package org.apache.fop.fo.pagination;
 // Java
 import java.awt.Rectangle;
 
+// XML
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXParseException;
+
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.datatypes.FODimension;
@@ -30,6 +34,7 @@ import org.apache.fop.datatypes.FODimension;
  */
 public class RegionEnd extends RegionSE {
 
+    private int extent = 0;
 
     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
@@ -38,6 +43,14 @@ public class RegionEnd extends RegionSE {
         super(parent);
     }
 
+    /**
+     * @see org.apache.fop.fo.FObj#addProperties
+     */
+    protected void addProperties(Attributes attlist) throws SAXParseException {
+        super.addProperties(attlist);
+        extent = getPropLength(PR_EXTENT);
+    }
+
     /**
      * @see org.apache.fop.fo.pagination.Region#getViewportRectangle(FODimension)
      */
@@ -45,11 +58,11 @@ public class RegionEnd extends RegionSE {
         // Depends on extent, precedence and writing mode
         Rectangle vpRect;
         if (this.wm == WritingMode.LR_TB || this.wm == WritingMode.RL_TB) {
-            vpRect = new Rectangle(reldims.ipd - getExtent(), 0,
-                    getExtent(), reldims.bpd);
+            vpRect = new Rectangle(reldims.ipd - extent, 0,
+                    extent, reldims.bpd);
         } else {
-            vpRect = new Rectangle(reldims.ipd - getExtent(), 0,
-                    reldims.bpd, getExtent());
+            vpRect = new Rectangle(reldims.ipd - extent, 0,
+                    reldims.bpd, extent);
         }
         adjustIPD(vpRect, this.wm);
         return vpRect;
index 98b8b71f16c04c7041bbf18153737ab0b050d251..21fa704ac740fc89e6559fe99c7617ad3d44bf3f 100644 (file)
@@ -40,10 +40,11 @@ public abstract class RegionSE extends Region {
         super(parent);
     }
 
+    /**
+     * @see org.apache.fop.fo.FObj#addProperties
+     */
     protected void addProperties(Attributes attlist) throws SAXParseException {
         super.addProperties(attlist);
-        
-        this.extent = getPropLength(PR_EXTENT);
     }
 
     /**
@@ -58,14 +59,14 @@ public abstract class RegionSE extends Region {
      */
     protected void adjustIPD(Rectangle vpRefRect, int wm) {
         int offset = 0;
-        Region before = getSiblingRegion(FO_REGION_BEFORE);
+        RegionBefore before = (RegionBefore) getSiblingRegion(FO_REGION_BEFORE);
         if (before != null && before.getPrecedence()) {
-            offset = before.getExtent();
+            offset = before.getPropLength(PR_EXTENT);
             vpRefRect.translate(0, offset);
         }
-        Region after = getSiblingRegion(FO_REGION_AFTER);
+        RegionAfter after = (RegionAfter) getSiblingRegion(FO_REGION_AFTER);
         if (after != null && after.getPrecedence()) {
-            offset += after.getExtent();
+            offset += after.getPropLength(PR_EXTENT);
         }
         if (offset > 0) {
             if (wm == WritingMode.LR_TB || wm == WritingMode.RL_TB) {
index 66523e657b50c0a6e908c23ddff3dfe1901f33f4..f00414934d936575415df76b95378101b39b48c2 100644 (file)
@@ -21,6 +21,10 @@ package org.apache.fop.fo.pagination;
 // Java
 import java.awt.Rectangle;
 
+// XML
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXParseException;
+
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.datatypes.FODimension;
@@ -30,6 +34,8 @@ import org.apache.fop.datatypes.FODimension;
  */
 public class RegionStart extends RegionSE {
 
+    private int extent = 0;
+
     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
      */
@@ -37,6 +43,14 @@ public class RegionStart extends RegionSE {
         super(parent);
     }
 
+    /**
+     * @see org.apache.fop.fo.FObj#addProperties
+     */
+    protected void addProperties(Attributes attlist) throws SAXParseException {
+        super.addProperties(attlist);
+        extent = getPropLength(PR_EXTENT);
+    }
+
     /**
      * @see org.apache.fop.fo.pagination.Region#getViewportRectangle(FODimension)
      */
@@ -46,9 +60,9 @@ public class RegionStart extends RegionSE {
         // writing-mode relative coordinates
         Rectangle vpRect;
         if (this.wm == WritingMode.LR_TB || this.wm == WritingMode.RL_TB) {
-            vpRect = new Rectangle(0, 0, getExtent(), reldims.bpd);
+            vpRect = new Rectangle(0, 0, extent, reldims.bpd);
         } else {
-            vpRect = new Rectangle(0, 0, reldims.bpd, getExtent());
+            vpRect = new Rectangle(0, 0, reldims.bpd, extent);
         }
         adjustIPD(vpRect, this.wm);
         return vpRect;
index d60ec040c84a69586433e2867ae5c1fac9babcc8..0c1bda78de0a2e3ef4d7b3c963507512a95eac1c 100644 (file)
@@ -64,7 +64,7 @@ public class ExternalGraphicLayoutManager extends LeafNodeLayoutManager {
         setup();
         InlineArea area = getExternalGraphicInlineArea();
         setCurrentArea(area);
-        setAlignment(graphic.getProperty(PR_VERTICAL_ALIGN).getEnum());
+        setAlignment(graphic.getPropEnum(PR_VERTICAL_ALIGN));
         setLead(viewHeight);
     }
 
@@ -121,7 +121,7 @@ public class ExternalGraphicLayoutManager extends LeafNodeLayoutManager {
             cwidth = cw.getValue();
         }
 
-        int scaling = graphic.getPropertyList().get(PR_SCALING).getEnum();
+        int scaling = graphic.getPropEnum(PR_SCALING);
         if ((scaling == Scaling.UNIFORM) || (cwidth == -1) || cheight == -1) {
             ImageFactory fact = ImageFactory.getInstance();
             fopimage = fact.getImage(url, graphic.getUserAgent());
@@ -164,7 +164,7 @@ public class ExternalGraphicLayoutManager extends LeafNodeLayoutManager {
         }
 
         if (cwidth > viewWidth || cheight > viewHeight) {
-            int overflow = graphic.getPropertyList().get(PR_OVERFLOW).getEnum();
+            int overflow = graphic.getPropEnum(PR_OVERFLOW);
             if (overflow == Overflow.HIDDEN) {
                 clip = true;
             } else if (overflow == Overflow.ERROR_IF_OVERFLOW) {
@@ -176,7 +176,7 @@ public class ExternalGraphicLayoutManager extends LeafNodeLayoutManager {
 
         int xoffset = 0;
         int yoffset = 0;
-        int da = graphic.getPropertyList().get(PR_DISPLAY_ALIGN).getEnum();
+        int da = graphic.getPropEnum(PR_DISPLAY_ALIGN);
         switch(da) {
             case DisplayAlign.BEFORE:
             break;
@@ -191,7 +191,7 @@ public class ExternalGraphicLayoutManager extends LeafNodeLayoutManager {
             break;
         }
 
-        int ta = graphic.getPropertyList().get(PR_TEXT_ALIGN).getEnum();
+        int ta = graphic.getPropEnum(PR_TEXT_ALIGN);
         switch(ta) {
             case TextAlign.CENTER:
                 xoffset = (viewWidth - cwidth) / 2;
index 6abc1a60ebc5f20265c5659f9859575ad7a6f1fb..2b2ca22699e57d5ede3658368da6b6222fcc1571 100644 (file)
@@ -46,7 +46,7 @@ public class InstreamForeignObjectLM extends LeafNodeLayoutManager {
         ifoNode = node;
         Viewport areaCurrent = getInlineArea();
         setCurrentArea(areaCurrent);
-        setAlignment(node.getProperty(PR_VERTICAL_ALIGN).getEnum());
+        setAlignment(node.getPropEnum(PR_VERTICAL_ALIGN));
         setLead(areaCurrent.getHeight());
     }
 
@@ -135,7 +135,7 @@ public class InstreamForeignObjectLM extends LeafNodeLayoutManager {
         if (cheight == -1) {
             cheight = (int)size.getY() * 1000;
         }
-        int scaling = ifoNode.getProperty(PR_SCALING).getEnum();
+        int scaling = ifoNode.getPropEnum(PR_SCALING);
         if (scaling == Scaling.UNIFORM) {
             // adjust the larger
             double rat1 = cwidth / (size.getX() * 1000f);
@@ -157,7 +157,7 @@ public class InstreamForeignObjectLM extends LeafNodeLayoutManager {
 
         boolean clip = false;
         if (cwidth > ipd || cheight > bpd) {
-            int overflow = ifoNode.getProperty(PR_OVERFLOW).getEnum();
+            int overflow = ifoNode.getPropEnum(PR_OVERFLOW);
             if (overflow == Overflow.HIDDEN) {
                 clip = true;
             } else if (overflow == Overflow.ERROR_IF_OVERFLOW) {
index 94c7f638be8a7245fc68e237326256439ada3caf..8bcbb74de70ce3518d2e68e7a083e0fdacda9e62 100644 (file)
@@ -48,7 +48,7 @@ public class LeaderLayoutManager extends LeafNodeLayoutManager {
         super(node);
         ldrNode = node;
         font = node.getFontState();
-        setAlignment(node.getProperty(PR_LEADER_ALIGNMENT).getEnum());
+        setAlignment(node.getPropEnum(PR_LEADER_ALIGNMENT));
     }
 
     public InlineArea get(LayoutContext context) {
index a33e4bb9d39ab2d4209332fcaa87a5c1b252d57a..a7a3c30f7aff65303307764c6890fa020702bcc0 100644 (file)
@@ -229,7 +229,7 @@ class TextAttributesConverter {
 
 
     private static void attrBlockTextAlign(FObj fobj, RtfAttributes rtfAttr) {
-        int fopValue = fobj.getProperty(Constants.PR_TEXT_ALIGN).getEnum();
+        int fopValue = fobj.getPropEnum(Constants.PR_TEXT_ALIGN);
         String rtfValue = null;
         switch (fopValue) {
             case Constants.CENTER: