]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
1. new FONode.invalidChildError method added that will takes a "ruleViolated" string...
authorGlen Mazza <gmazza@apache.org>
Sat, 7 Aug 2004 13:01:17 +0000 (13:01 +0000)
committerGlen Mazza <gmazza@apache.org>
Sat, 7 Aug 2004 13:01:17 +0000 (13:01 +0000)
2.  FO_URI added to FONode to decrease the number of imports of FOElementMapping within the FONode subclasses.

3.  Layout logic moved from fo.flow.BasicLink to a new BasicLinkLayoutManager class.

4.  BidiLayoutManager constructor modified, now needs the flow.BidiOverride object.

5.  ListItemLayoutManager setup moved from AddLMManager to flow.Listitem and layoutmgr.list.ListItemLayoutManager.

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

18 files changed:
src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/flow/BasicLink.java
src/java/org/apache/fop/fo/flow/BidiOverride.java
src/java/org/apache/fop/fo/flow/Block.java
src/java/org/apache/fop/fo/flow/InstreamForeignObject.java
src/java/org/apache/fop/fo/flow/ListItem.java
src/java/org/apache/fop/fo/pagination/Declarations.java
src/java/org/apache/fop/fo/pagination/Flow.java
src/java/org/apache/fop/fo/pagination/LayoutMasterSet.java
src/java/org/apache/fop/fo/pagination/PageSequence.java
src/java/org/apache/fop/fo/pagination/PageSequenceMaster.java
src/java/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java
src/java/org/apache/fop/fo/pagination/Root.java
src/java/org/apache/fop/fo/pagination/StaticContent.java
src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
src/java/org/apache/fop/layoutmgr/BasicLinkLayoutManager.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/BidiLayoutManager.java
src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java

index 7288b97b31957c27ec44bbb08e63e3b72fbb6fe8..73204f27d505fdcfad144da81f107376227c37a6 100644 (file)
@@ -40,6 +40,8 @@ import org.apache.fop.fo.extensions.svg.SVGElementMapping;
  */
 public abstract class FONode {
 
+    protected static String FO_URI = FOElementMapping.URI;
+
     /** Parent FO node */
     protected FONode parent;
 
@@ -277,10 +279,25 @@ public abstract class FONode {
      */
     protected void invalidChildError(Locator loc, String nsURI, String lName) 
         throws SAXParseException {
-        throw new SAXParseException (errorText(loc) + getNodeString(nsURI, lName) + 
-            " is not a valid child element of " + getName() + ".", loc);
+        invalidChildError(loc, nsURI, lName, null);
     }
     
+    /**
+     * Helper function to return "invalid child" exceptions with more
+     * complex validation rules (i.e., needing more explanation of the problem)
+     * @param loc org.xml.sax.Locator object of the error (*not* parent node)
+     * @param nsURI namespace URI of incoming invalid node
+     * @param lName local name (i.e., no prefix) of incoming node
+     * @param ruleViolated text explanation of problem
+     */
+    protected void invalidChildError(Locator loc, String nsURI, String lName,
+        String ruleViolated)
+        throws SAXParseException {
+        throw new SAXParseException (errorText(loc) + getNodeString(nsURI, lName) + 
+            " is not a valid child element of " + getName() 
+            + ((ruleViolated != null) ? ": " + ruleViolated : "."), loc);
+    }
+
     /**
      * Helper function to return missing child element errors
      * (e.g., fo:layout-master-set not having any page-master child element)
index 1f2501644304f185bd5a2d24772eae03c5a008c9..e26eb348439aa25369ffb2b733d3ad0777a049f7 100644 (file)
@@ -27,33 +27,25 @@ import org.xml.sax.Locator;
 import org.xml.sax.SAXParseException;
 
 // FOP
-import org.apache.fop.area.inline.InlineArea;
-import org.apache.fop.area.inline.InlineParent;
-import org.apache.fop.area.LinkResolver;
-import org.apache.fop.area.PageViewport;
-import org.apache.fop.area.Trait;
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.fo.FONode;
-import org.apache.fop.layoutmgr.LayoutManager;
-import org.apache.fop.layoutmgr.LMiter;
-import org.apache.fop.layoutmgr.InlineStackingLayoutManager;
-import org.apache.fop.fo.properties.CommonAccessibility;
-import org.apache.fop.fo.properties.CommonAural;
-import org.apache.fop.fo.properties.CommonBorderAndPadding;
-import org.apache.fop.fo.properties.CommonBackground;
-import org.apache.fop.fo.properties.CommonMarginInline;
-import org.apache.fop.fo.properties.CommonRelativePosition;
+import org.apache.fop.layoutmgr.BasicLinkLayoutManager;
 
 /**
- * The basic link.
- * This sets the basic link trait on the inline parent areas
- * that are created by the fo element.
+ * The fo:basic-link formatting object.
+ *
+ * This class contains the logic to determine the link represented by this FO,
+ * and whether that link is external (uses a URI) or internal (an id 
+ * reference).
  */
 public class BasicLink extends Inline {
+
+    // link represented by this FO
     private String link = null;
-    private boolean external = false;
+    
+    // indicator of whether link is internal or external
+    private boolean isExternalLink = false;
 
-    // used for FO validation
+    // used only for FO validation
     private boolean blockOrInlineItemFound = false;
 
     /**
@@ -68,17 +60,18 @@ public class BasicLink extends Inline {
      */
     protected void addProperties(Attributes attlist) throws SAXParseException {
         super.addProperties(attlist);
-
         setupID();
+        
+        // This logic is for determining the link represented by this FO.
         String ext =  propertyList.get(PR_EXTERNAL_DESTINATION).getString();
         String internal = propertyList.get(PR_INTERNAL_DESTINATION).getString();
 
-        // per spec, internal takes precedence if both specified
-        if (internal.length() > 0) {
+        // per spec, internal takes precedence if both specified        
+        if (internal.length() > 0) { 
             link = internal;
         } else if (ext.length() > 0) {
             link = ext;
-            external = true;
+            isExternalLink = true;
         } else {
             // slightly stronger than spec "should be specified"
             attributeError("Missing attribute:  Either external-destination or " +
@@ -94,7 +87,7 @@ public class BasicLink extends Inline {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI && localName.equals("marker")) {
+        if (nsURI == FO_URI && localName.equals("marker")) {
             if (blockOrInlineItemFound) {
                nodesOutOfOrderError(loc, "fo:marker", "(#PCDATA|%inline;|%block;)");
             }
@@ -113,50 +106,40 @@ public class BasicLink extends Inline {
         getFOInputHandler().endLink();
     }
 
-    /**
-     * @return true (BasicLink can contain Markers)
-    */
-    protected boolean containsMarkers() {
-        return true;
-    }
-
     /**
      * @see org.apache.fop.fo.FObj#addLayoutManager(List)
-     * @todo create a subclass for InlineStackingLayoutManager, moving the formatting
-     *  logic to the layoutmgr package
-    */
+     */
     public void addLayoutManager(List list) {   
-        InlineStackingLayoutManager lm;
-        lm = new InlineStackingLayoutManager(this) {
-            protected InlineParent createArea() {
-                InlineParent area = super.createArea();
-                setupBasicLinkArea(parentLM, area);
-                return area;
-            }
-        };
-        lm.setLMiter(new LMiter(lm, getChildNodes()));
+        BasicLinkLayoutManager lm = new BasicLinkLayoutManager(this);
         list.add(lm);
     }
-     
-    protected void setupBasicLinkArea(LayoutManager parentLM,
-                                      InlineParent area) {
-         if (link == null) {
-             return;
-         }
-         if (external) {
-             area.addTrait(Trait.EXTERNAL_LINK, link);
-         } else {
-             PageViewport page = parentLM.resolveRefID(link);
-             if (page != null) {
-                 area.addTrait(Trait.INTERNAL_LINK, page.getKey());
-             } else {
-                 LinkResolver res = new LinkResolver(link, area);
-                 parentLM.addUnresolvedArea(link, res);
-             }
-         }
-     }
-     
+
+    /**
+     * @return link represented by this fo:basic-link
+     */
+    public String getLink() {
+        return link;
+    }
+    /**
+     * @return true if link is external, false if internal
+     */
+    public boolean isExternalLink() {
+        return isExternalLink;
+    }
+
+    /**
+     * @see org.apache.fop.fo.FObj#getName()
+     */
     public String getName() {
         return "fo:basic-link";
     }
+    
+    /**
+     * @return true (BasicLink can contain Markers)
+     * @todo see if can remove in favor of a BitSet for all FO's
+     */
+    protected boolean containsMarkers() {
+        return true;
+    }
 }
index 52eb0451fa556ea7e2490464cfb9e9e30ce3b791..ebd29f34fdb5f5d564b0a8bbcb331f96741bd758 100644 (file)
@@ -28,15 +28,11 @@ import org.xml.sax.Locator;
 import org.xml.sax.SAXParseException;
 
 // FOP
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
 import org.apache.fop.layoutmgr.BidiLayoutManager;
 import org.apache.fop.layoutmgr.InlineStackingLayoutManager;
 import org.apache.fop.layoutmgr.LayoutManager;
-import org.apache.fop.fo.properties.CommonAural;
-import org.apache.fop.fo.properties.CommonRelativePosition;
-
 
 /**
  * fo:bidi-override element.
@@ -77,6 +73,8 @@ public class BidiOverride extends FObjMixed {
 
     /**
      * @see org.apache.fop.fo.FObj#addProperties
+     * @todo see if can use a BitSet to determine if an FO should
+     * have its ID setup; then move setupID() instances to FObj.
      */
     protected void addProperties(Attributes attlist) throws SAXParseException {
         super.addProperties(attlist);
@@ -93,7 +91,7 @@ public class BidiOverride extends FObjMixed {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI && localName.equals("marker")) {
+        if (nsURI == FO_URI && localName.equals("marker")) {
             if (blockOrInlineItemFound) {
                nodesOutOfOrderError(loc, "fo:marker", 
                     "(#PCDATA|%inline;|%block;)");
@@ -101,25 +99,20 @@ public class BidiOverride extends FObjMixed {
         } else if (!isBlockOrInlineItem(nsURI, localName)) {
             invalidChildError(loc, nsURI, localName);
         } else if (!canHaveBlockLevelChildren && isBlockItem(nsURI, localName)) {
-            invalidChildError(loc, nsURI, localName);
+            String ruleViolated = "An fo:bidi-override" +
+                " that is a descendant of an fo:leader or of the fo:inline child" +
+                " of an fo:footnote may not have block-level children, unless it" +
+                " has a nearer ancestor that is an fo:inline-container.";
+            invalidChildError(loc, nsURI, localName, ruleViolated);
         } else {
             blockOrInlineItemFound = true;
         }
     }
     
-    public String getName() {
-        return "fo:bidi-override";
-    }
-
-    /**
-     * @return true (BidiOverride can contain Markers)
-     */
-    protected boolean containsMarkers() {
-        return true;
-    }
-
     /**
      * @see org.apache.fop.fo.FObj#addLayoutManager(List)
+     * @todo see if can/should move the child iteration logic 
+     *      to BidiLayoutManager
      */
     public void addLayoutManager(List list) {   
         if (false) {
@@ -130,8 +123,8 @@ public class BidiOverride extends FObjMixed {
             for (int count = childList.size() - 1; count >= 0; count--) {
                 LayoutManager lm = (LayoutManager) childList.get(count);
                 if (lm.generatesInlineAreas()) {
-                    LayoutManager blm = new BidiLayoutManager((InlineStackingLayoutManager) lm);
-                    blm.setFObj(this);
+                    LayoutManager blm = new BidiLayoutManager(this,
+                        (InlineStackingLayoutManager) lm);
                     list.add(blm);
                 } else {
                     list.add(lm);
@@ -140,5 +133,17 @@ public class BidiOverride extends FObjMixed {
         }
     }
 
-    
+    /**
+     * @see org.apache.fop.fo.FObj#getName()
+     */
+    public String getName() {
+        return "fo:bidi-override";
+    }
+
+    /**
+     * @return true (BidiOverride can contain Markers)
+     */
+    protected boolean containsMarkers() {
+        return true;
+    }
 }
index 2e35396e3bc2efbab21b94c902f1ec0f0fe9a1da..bdcf7c61dab51ba85e598dddd65900b267ecdf9b 100644 (file)
@@ -141,13 +141,6 @@ public class Block extends FObjMixed {
         getFOInputHandler().startBlock(this);
     }
 
-    /**
-     * @return true (Block can contain Markers)
-     */
-    protected boolean containsMarkers() {
-        return true;
-    }
-
     /**
      * @return span for this Block, in millipoints (??)
      */
@@ -347,8 +340,14 @@ public class Block extends FObjMixed {
         list.add(blm);
     }
      
-   public String getName() {
+    public String getName() {
         return "fo:block";
     }
 
+    /**
+     * @return true (Block can contain Markers)
+     */
+    protected boolean containsMarkers() {
+        return true;
+    }
 }
index 5b977cbf48cb112dbecdf4d48e13ac32c66fd5f6..1a763844d4688fc7e79d8b331f30698698e7f00f 100644 (file)
@@ -26,7 +26,6 @@ import org.xml.sax.SAXParseException;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.LMVisited;
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.layoutmgr.AddLMVisitor;
 import org.apache.fop.fo.FObj;
 
@@ -54,7 +53,7 @@ public class InstreamForeignObject extends FObj implements LMVisited {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI) {
+        if (nsURI == FO_URI) {
             invalidChildError(loc, nsURI, localName);
         } else if (hasNonXSLNamespaceElement) {
             tooManyNodesError(loc, "child element");
index cd4c2127b53f42421d0b1d9a2d048f2aa2d86c0a..4ccde913aec8f6b0695cde4a6c1e12e63567b032 100644 (file)
 
 package org.apache.fop.fo.flow;
 
+// Java
+import java.util.List;
+
 // XML
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXParseException;
 
 // FOP
-import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
-import org.apache.fop.layoutmgr.AddLMVisitor;
 import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.properties.CommonAccessibility;
-import org.apache.fop.fo.properties.CommonAural;
-import org.apache.fop.fo.properties.CommonBackground;
-import org.apache.fop.fo.properties.CommonBorderAndPadding;
-import org.apache.fop.fo.properties.CommonMarginBlock;
-import org.apache.fop.fo.properties.CommonRelativePosition;
-import org.apache.fop.fo.LMVisited;
+import org.apache.fop.layoutmgr.list.ListItemLayoutManager;
 
 /**
  * Class modelling the fo:list-item object. See Sec. 6.8.3 of the XSL-FO
  * Standard.
  */
-public class ListItem extends FObj implements LMVisited {
+public class ListItem extends FObj {
 
     private ListItemLabel label = null;
     private ListItemBody body = null;
@@ -70,31 +65,7 @@ public class ListItem extends FObj implements LMVisited {
     }
 
     private void setup() {
-
-        // Common Accessibility Properties
-        CommonAccessibility mAccProps = propMgr.getAccessibilityProps();
-
-        // Common Aural Properties
-        CommonAural mAurProps = propMgr.getAuralProps();
-
-        // Common Border, Padding, and Background Properties
-        CommonBorderAndPadding bap = propMgr.getBorderAndPadding();
-        CommonBackground bProps = propMgr.getBackgroundProps();
-
-        // Common Margin Properties-Block
-        CommonMarginBlock mProps = propMgr.getMarginProps();
-
-        // Common Relative Position Properties
-        CommonRelativePosition mRelProps = propMgr.getRelativePositionProps();
-
-        // this.propertyList.get("break-after");
-        // this.propertyList.get("break-before");
         setupID();
-        // this.propertyList.get("keep-together");
-        // this.propertyList.get("keep-with-next");
-        // this.propertyList.get("keep-with-previous");
-        // this.propertyList.get("relative-align");
-
         this.align = this.propertyList.get(PR_TEXT_ALIGN).getEnum();
         this.alignLast = this.propertyList.get(PR_TEXT_ALIGN_LAST).getEnum();
         this.lineHeight =
@@ -103,7 +74,6 @@ public class ListItem extends FObj implements LMVisited {
             this.propertyList.get(PR_SPACE_BEFORE | CP_OPTIMUM).getLength().getValue();
         this.spaceAfter =
             this.propertyList.get(PR_SPACE_AFTER | CP_OPTIMUM).getLength().getValue();
-
     }
 
     /**
@@ -135,6 +105,19 @@ public class ListItem extends FObj implements LMVisited {
         return true;
     }
 
+    /**
+     * @see org.apache.fop.fo.FObj#addLayoutManager(List)
+     * @todo remove checks for non-nulls after validateChildNode() added
+     */
+    public void addLayoutManager(List list) {   
+        if (label != null && body != null) {
+            ListItemLayoutManager blm = new ListItemLayoutManager(this);
+            list.add(blm);
+        } else {
+            getLogger().error("list-item requires list-item-label and list-item-body");
+        }
+    }
+
     public ListItemLabel getLabel() {
         return label;
     }
@@ -143,10 +126,6 @@ public class ListItem extends FObj implements LMVisited {
         return body;
     }
 
-    public void acceptVisitor(AddLMVisitor aLMV) {
-        aLMV.serveListItem(this);
-    }
-
     protected void endOfNode() throws SAXParseException {
         super.endOfNode();
         getFOInputHandler().endListItem(this);
index f16b4fb823b956a37528e94dccade5658a5d8ffa..7cc553385e8067c26664e91fbe26a2483369c97b 100644 (file)
@@ -29,7 +29,6 @@ import org.xml.sax.Locator;
 import org.xml.sax.SAXParseException;
 
 // FOP
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.XMLObj;
@@ -62,7 +61,7 @@ public class Declarations extends FObj {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI) {
+        if (nsURI == FO_URI) {
             if (!localName.equals("color-profile")) {   
                 invalidChildError(loc, nsURI, localName);
             }
index 9c38cdd570f29f3b04c9d72ebe07496332ae9a97..88d4f1d8bdfc29be7341bde6c3fe93defea51afa 100644 (file)
@@ -30,7 +30,6 @@ import org.xml.sax.SAXParseException;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.layoutmgr.FlowLayoutManager;
 
 /**
@@ -74,7 +73,7 @@ public class Flow extends FObj {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI && localName.equals("marker")) {
+        if (nsURI == FO_URI && localName.equals("marker")) {
             if (blockItemFound) {
                nodesOutOfOrderError(loc, "fo:marker", "(%block;)");
             }
index 21e2b123cc69de79473f8bdc61c5b325297226a9..ec5c5fff73bd527b2c22d703091bb198a5515a1d 100644 (file)
@@ -30,7 +30,6 @@ import org.xml.sax.SAXParseException;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.apps.FOPException;
 
 /**
@@ -60,7 +59,7 @@ public class LayoutMasterSet extends FObj {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI) {
+        if (nsURI == FO_URI) {
             if (!localName.equals("simple-page-master") 
                 && !localName.equals("page-sequence-master")) {   
                     invalidChildError(loc, nsURI, localName);
index 8e26a2dbb5b67554319ce36190a8351d09f645b7..7802a63c76fad7ad150896773084208c4641564b 100644 (file)
@@ -30,8 +30,6 @@ import org.xml.sax.SAXParseException;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.FOElementMapping;
-import org.apache.fop.apps.FOPException;
 
 /**
  * This provides pagination of flows onto pages. Much of the
@@ -139,7 +137,7 @@ public class PageSequence extends FObj {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI) {
+        if (nsURI == FO_URI) {
             if (localName.equals("title")) {
                 if (titleFO != null) {
                     tooManyNodesError(loc, "fo:title");
index 7e2ee40df6398209d7953584f8b5440157a0b029..6d87d5315cab9d7024348cd342f7930b363d3c46 100644 (file)
@@ -30,7 +30,6 @@ import org.xml.sax.SAXParseException;
 import org.apache.fop.fo.Constants;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FONode;
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.apps.FOPException;
 
 /**
@@ -69,7 +68,7 @@ public class PageSequenceMaster extends FObj {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI) {
+        if (nsURI == FO_URI) {
             if (!localName.equals("single-page-master-reference") 
                 && !localName.equals("repeatable-page-master-reference")
                 && !localName.equals("repeatable-page-master-alternatives")) {   
index cc929aec928f173f556482e6be5827ef7eb2ca1c..f7f37757baf9360e0b714b4838ce2fde5d8c4388 100644 (file)
@@ -27,7 +27,6 @@ import org.xml.sax.Locator;
 import org.xml.sax.SAXParseException;
 
 // FOP
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 
@@ -64,7 +63,7 @@ public class RepeatablePageMasterAlternatives extends FObj
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (!(nsURI == FOElementMapping.URI &&
+        if (!(nsURI == FO_URI &&
             localName.equals("conditional-page-master-reference"))) {
                 invalidChildError(loc, nsURI, localName);
         }
index 5b02c41362d85f63fcfbd024b5b66398091be146..5b7d0b5b9158db50b4d0f673f1083f07046c4022 100644 (file)
@@ -28,7 +28,6 @@ import org.xml.sax.SAXParseException;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.fo.extensions.ExtensionElementMapping;
 import org.apache.fop.fo.extensions.Bookmarks;
 import org.apache.fop.fo.FOInputHandler;
@@ -75,7 +74,7 @@ public class Root extends FObj {
      */
     protected void validateChildNode(Locator loc, String nsURI, String localName) 
         throws SAXParseException {
-        if (nsURI == FOElementMapping.URI) {
+        if (nsURI == FO_URI) {
             if (localName.equals("layout-master-set")) {   
                 if (layoutMasterSet != null) {
                     tooManyNodesError(loc, "fo:layout-master-set");
index 59f24818b6ff1bf53cc5749f059edb3bc65ed014..06ab42bc99d200f4b57c80e8bba42a7a5ec28e13 100644 (file)
@@ -24,7 +24,6 @@ import org.xml.sax.Locator;
 import org.xml.sax.SAXParseException;
 
 // FOP
-import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.fo.FONode;
 
 /**
index 3634fe5177f6a14870ca534188cebf764327af25..5411a4d189365651045965cee2fef72082fcef9a 100644 (file)
@@ -45,9 +45,6 @@ import org.apache.fop.fo.flow.Character;
 import org.apache.fop.fo.flow.Inline;
 import org.apache.fop.fo.flow.InstreamForeignObject;
 import org.apache.fop.fo.flow.Leader;
-import org.apache.fop.fo.flow.ListItem;
-import org.apache.fop.fo.flow.ListItemBody;
-import org.apache.fop.fo.flow.ListItemLabel;
 import org.apache.fop.fo.flow.PageNumber;
 import org.apache.fop.fo.flow.RetrieveMarker;
 import org.apache.fop.fo.flow.Table;
@@ -62,8 +59,6 @@ import org.apache.fop.fo.flow.Wrapper;
 import org.apache.fop.fo.pagination.Title;
 import org.apache.fop.fo.properties.CommonBackground;
 import org.apache.fop.fo.properties.CommonBorderAndPadding;
-import org.apache.fop.layoutmgr.list.Item;
-import org.apache.fop.layoutmgr.list.ListItemLayoutManager;
 import org.apache.fop.layoutmgr.table.Body;
 import org.apache.fop.layoutmgr.table.Column;
 import org.apache.fop.layoutmgr.table.TableLayoutManager;
@@ -422,33 +417,6 @@ public class AddLMVisitor {
          return areaCurrent;
      }
 
-     public void serveListItem(ListItem node) {
-         if (node.getLabel() != null && node.getBody() != null) {
-             ListItemLayoutManager blm = new ListItemLayoutManager(node);
-             blm.setLabel(getListItemLabelLayoutManager(node.getLabel()));
-             blm.setBody(getListItemBodyLayoutManager(node.getBody()));
-             currentLMList.add(blm);
-         } else {
-             node.getLogger().error("list-item requires list-item-label and list-item-body");
-         }
-     }
-
-     /**
-      * @return this object's Item layout manager
-      */
-     public Item getListItemLabelLayoutManager(ListItemLabel node) {
-         Item itemLabel = new Item(node);
-         return itemLabel;
-     }
-
-     /**
-      * @return Item layout manager
-      */
-     public Item getListItemBodyLayoutManager(ListItemBody node) {
-         Item item = new Item(node);
-         return item;
-     }
-
      /**
       * Overridden from FObj
       * @param lms the list to which the layout manager(s) should be added
diff --git a/src/java/org/apache/fop/layoutmgr/BasicLinkLayoutManager.java b/src/java/org/apache/fop/layoutmgr/BasicLinkLayoutManager.java
new file mode 100644 (file)
index 0000000..154332e
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ * 
+ * Licensed 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.layoutmgr;
+
+import org.apache.fop.fo.flow.BasicLink;
+import org.apache.fop.area.inline.InlineParent;
+import org.apache.fop.area.Trait;
+import org.apache.fop.area.LinkResolver;
+import org.apache.fop.area.PageViewport;
+
+/**
+ * LayoutManager for the fo:basic-link formatting object
+ */
+public class BasicLinkLayoutManager extends InlineStackingLayoutManager {
+
+    private String link;
+    private boolean isExternalLink = false;
+    
+    /**
+     * Create an fo:basic-link layout manager.
+     *
+     * @param node the formatting object that creates the area
+     */
+    public BasicLinkLayoutManager(BasicLink node) {
+        super(node);
+        setLMiter(new LMiter(this, node.getChildNodes()));
+        link = node.getLink();
+        isExternalLink = node.isExternalLink();
+    }
+
+    protected InlineParent createArea() {
+        InlineParent area = super.createArea();
+        setupBasicLinkArea(parentLM, area);
+        return area;
+    }
+    
+    private void setupBasicLinkArea(LayoutManager parentLM,
+                                      InlineParent area) {
+         if (isExternalLink) {
+             area.addTrait(Trait.EXTERNAL_LINK, link);
+         } else {
+             PageViewport page = parentLM.resolveRefID(link);
+             if (page != null) {
+                 area.addTrait(Trait.INTERNAL_LINK, page.getKey());
+             } else {
+                 LinkResolver res = new LinkResolver(link, area);
+                 parentLM.addUnresolvedArea(link, res);
+             }
+         }
+     }
+}
+
index 46d9b74d8ef0ec08509f0bab113bc3f127e349c8..05a9d9fb887ed1aed67b59107d15e47460977608 100644 (file)
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.fop.area.inline.InlineArea;
+import org.apache.fop.fo.flow.BidiOverride;
 
 
 /**
@@ -33,8 +34,9 @@ public class BidiLayoutManager extends LeafNodeLayoutManager {
 
     private List children;
 
-    public BidiLayoutManager(InlineStackingLayoutManager cLM) {
+    public BidiLayoutManager(BidiOverride node, InlineStackingLayoutManager cLM) {
         children = new ArrayList();
+        setFObj(node);
 /*
         for (int count = cLM.size() - 1; count >= 0; count--) {
             InlineArea ia = cLM.get(count);
index 0af9e7b45564d64d7fe74490e37151df6766da0a..90f9b03218a5ce3ed6acde8ac169e492e2d6d112 100644 (file)
@@ -19,6 +19,9 @@
 package org.apache.fop.layoutmgr.list;
 
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.flow.ListItem;
+import org.apache.fop.fo.flow.ListItemBody;
+import org.apache.fop.fo.flow.ListItemLabel;
 import org.apache.fop.fo.PropertyManager;
 import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
 import org.apache.fop.layoutmgr.LayoutManager;
@@ -65,8 +68,10 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
      * Create a new list item layout manager.
      *
      */
-    public ListItemLayoutManager(FObj node) {
+    public ListItemLayoutManager(ListItem node) {
         super(node);
+        setLabel(node.getLabel());
+        setBody(node.getBody());
     }
 
     /**
@@ -79,20 +84,20 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
     }
 
     /**
-     * Sets the label of the list item
-     * @param item the label item
+     * Create a LM for the fo:list-item-label object
+     * @param node the fo:list-item-label FO
      */
-    public void setLabel(Item item) {
-        label = item;
+    public void setLabel(ListItemLabel node) {
+        label = new Item(node);
         label.setParent(this);
     }
 
     /**
-     * Sets the body of the list item
-     * @param item the body item
+     * Create a LM for the fo:list-item-body object
+     * @param node the fo:list-item-body FO
      */
-    public void setBody(Item item) {
-        body = item;
+    public void setBody(ListItemBody node) {
+        body = new Item(node); 
         body.setParent(this);
     }