gmazza 2004/08/09 22:33:16
Modified: src/java/org/apache/fop/fo FObj.java
src/java/org/apache/fop/fo/flow Block.java
PageNumberCitation.java RetrieveMarker.java
src/java/org/apache/fop/layoutmgr AddLMVisitor.java
Added: src/java/org/apache/fop/layoutmgr
PageNumberCitationLayoutManager.java
Log:
1.) fo:retrieve marker layout initialization moved from AddLMVisitor to
RetrieveMarker class.
2.) New PageNumberCitationLayoutManager class created, layout logic imported from
fo.flow.PageNumberCitation to this new class.
3.) validateChildNode() implemented for fo:block.
Revision Changes Path
1.64 +9 -5 xml-fop/src/java/org/apache/fop/fo/FObj.java
Index: FObj.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObj.java,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -r1.63 -r1.64
--- FObj.java 8 Aug 2004 19:04:48 -0000 1.63
+++ FObj.java 10 Aug 2004 05:33:15 -0000 1.64
@@ -443,10 +443,6 @@
}
*/
- public String getName() {
- return null;
- }
-
/**
* Convenience method for validity checking. Checks if the
* incoming node is a member of the "%block;" parameter entity
@@ -541,8 +537,16 @@
}
/**
+ * Returns the name of this FO (e.g., "fo:root");
+ * @return the name of the FO
+ */
+ public String getName() {
+ return null;
+ }
+
+ /**
* Returns the Constants class integer value of this formatting object
- * @return the integer enumeration of this FO
+ * @return the integer enumeration of this FO (e.g., FO_ROOT)
*/
public int getNameId() {
return FO_UNKNOWN;
1.32 +36 -8 xml-fop/src/java/org/apache/fop/fo/flow/Block.java
Index: Block.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Block.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- Block.java 8 Aug 2004 19:04:49 -0000 1.31
+++ Block.java 10 Aug 2004 05:33:15 -0000 1.32
@@ -23,7 +23,7 @@
// XML
import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
+import org.xml.sax.Locator;
import org.xml.sax.SAXParseException;
// FOP
@@ -35,13 +35,6 @@
import org.apache.fop.fo.RecursiveCharIterator;
import org.apache.fop.layoutmgr.BlockLayoutManager;
import org.apache.fop.fo.Constants;
-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.CommonHyphenation;
-import org.apache.fop.fo.properties.CommonMarginBlock;
-import org.apache.fop.fo.properties.CommonRelativePosition;
import org.apache.fop.util.CharUtilities;
/*
@@ -63,6 +56,10 @@
*/
public class Block extends FObjMixed {
+ // used for FO validation
+ private boolean blockOrInlineItemFound = false;
+ private boolean initialPropertySetFound = false;
+
private int align;
private int alignLast;
private int breakAfter;
@@ -139,6 +136,37 @@
this.propertyList.get(PR_ORPHANS).getNumber().intValue();
getFOInputHandler().startBlock(this);
+ }
+
+ /**
+ * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
+ * XSL Content Model: marker* initial-property-set? (#PCDATA|%inline;|%block;)*
+ * Additionally: "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."
+ */
+ protected void validateChildNode(Locator loc, String nsURI, String localName)
+ throws SAXParseException {
+ if (nsURI == FO_URI && localName.equals("marker")) {
+ if (blockOrInlineItemFound || initialPropertySetFound) {
+ nodesOutOfOrderError(loc, "fo:marker",
+ "initial-property-set? (#PCDATA|%inline;|%block;)");
+ }
+ } else if (nsURI == FO_URI && localName.equals("initial-property-set")) {
+ if (initialPropertySetFound) {
+ tooManyNodesError(loc, "fo:initial-property-set");
+ } else if (blockOrInlineItemFound) {
+ nodesOutOfOrderError(loc, "fo:initial-property-set",
+ "(#PCDATA|%inline;|%block;)");
+ } else {
+ initialPropertySetFound = true;
+ }
+ } else if (isBlockOrInlineItem(nsURI, localName)) {
+ blockOrInlineItemFound = true;
+ } else {
+ invalidChildError(loc, nsURI, localName);
+ }
}
/**
1.31 +12 -112 xml-fop/src/java/org/apache/fop/fo/flow/PageNumberCitation.java
Index: PageNumberCitation.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/PageNumberCitation.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- PageNumberCitation.java 8 Aug 2004 18:39:23 -0000 1.30
+++ PageNumberCitation.java 10 Aug 2004 05:33:15 -0000 1.31
@@ -26,26 +26,12 @@
import org.xml.sax.Locator;
import org.xml.sax.SAXParseException;
+// FOP
import org.apache.fop.datatypes.ColorType;
import org.apache.fop.fo.FONode;
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.CommonMarginInline;
-import org.apache.fop.fo.properties.CommonRelativePosition;
import org.apache.fop.fonts.Font;
-import org.apache.fop.layoutmgr.LayoutContext;
-import org.apache.fop.layoutmgr.LayoutManager;
-import org.apache.fop.layoutmgr.LeafNodeLayoutManager;
-import org.apache.fop.layoutmgr.PositionIterator;
-import org.apache.fop.area.PageViewport;
-import org.apache.fop.area.Resolveable;
-import org.apache.fop.area.Trait;
-import org.apache.fop.area.inline.InlineArea;
-import org.apache.fop.area.inline.UnresolvedPageNumber;
-import org.apache.fop.area.inline.TextArea;
+import org.apache.fop.layoutmgr.PageNumberCitationLayoutManager;
/**
* Class modelling the fo:page-number-citation object. See Sec. 6.6.11 of the
@@ -83,39 +69,12 @@
}
/**
- * @param str string to be measured
- * @return width (in millipoints ??) of the string
+ * @todo switch this method to addProperties()
*/
- public int getStringWidth(String str) {
- int width = 0;
- for (int count = 0; count < str.length(); count++) {
- width += fontState.getCharWidth(str.charAt(count));
- }
- return width;
- }
-
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 Font Properties
this.fontState = propMgr.getFontState(getFOInputHandler().getFontInfo());
- // Common Margin Properties-Inline
- CommonMarginInline mProps = propMgr.getMarginInlineProps();
-
- // Common Relative Position Properties
- CommonRelativePosition mRelProps =
- propMgr.getRelativePositionProps();
-
setupID();
ColorType c = this.propertyList.get(PR_COLOR).getColorType();
@@ -148,82 +107,23 @@
return fontState;
}
- public String getName() {
- return "fo:page-number-citation";
- }
-
/**
* @see org.apache.fop.fo.FObj#addLayoutManager(List)
- * @todo create a subclass for LeafNodeLayoutManager, moving the formatting
- * logic to the layoutmgr package
*/
public void addLayoutManager(List list) {
setup();
- LayoutManager lm;
- lm = new LeafNodeLayoutManager(this) {
- public InlineArea get(LayoutContext context) {
- curArea = getPageNumberCitationInlineArea(parentLM);
- return curArea;
- }
-
- public void addAreas(PositionIterator posIter,
- LayoutContext context) {
- super.addAreas(posIter, context);
- if (getUnresolved()) {
- parentLM.addUnresolvedArea(getRefId(),
- (Resolveable) curArea);
- }
- }
-
- protected void offsetArea(LayoutContext context) {
- curArea.setOffset(context.getBaseline());
- }
- };
+ PageNumberCitationLayoutManager lm =
+ new PageNumberCitationLayoutManager(this);
list.add(lm);
}
-
- // if id can be resolved then simply return a word, otherwise
- // return a resolveable area
- public InlineArea getPageNumberCitationInlineArea(LayoutManager parentLM) {
- if (getRefId().equals("")) {
- getLogger().error("page-number-citation must contain \"ref-id\"");
- return null;
- }
- PageViewport page = parentLM.resolveRefID(getRefId());
- InlineArea inline = null;
- if (page != null) {
- String str = page.getPageNumber();
- // get page string from parent, build area
- TextArea text = new TextArea();
- inline = text;
- int width = getStringWidth(str);
- text.setTextArea(str);
- inline.setIPD(width);
- inline.setHeight(getFontState().getAscender()
- - getFontState().getDescender());
- inline.setOffset(getFontState().getAscender());
-
- inline.addTrait(Trait.FONT_NAME, getFontState().getFontName());
- inline.addTrait(Trait.FONT_SIZE,
- new Integer(getFontState().getFontSize()));
- setUnresolved(false);
- } else {
- setUnresolved(true);
- inline = new UnresolvedPageNumber(getRefId());
- String str = "MMM"; // reserve three spaces for page number
- int width = getStringWidth(str);
- inline.setIPD(width);
- inline.setHeight(getFontState().getAscender()
- - getFontState().getDescender());
- inline.setOffset(getFontState().getAscender());
-
- inline.addTrait(Trait.FONT_NAME, getFontState().getFontName());
- inline.addTrait(Trait.FONT_SIZE,
- new Integer(getFontState().getFontSize()));
- }
- return inline;
- }
+ /**
+ * @see org.apache.fop.fo.FObj#getName()
+ */
+ public String getName() {
+ return "fo:page-number-citation";
+ }
+
/**
* @see org.apache.fop.fo.FObj#getNameId()
*/
1.15 +21 -18 xml-fop/src/java/org/apache/fop/fo/flow/RetrieveMarker.java
Index: RetrieveMarker.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/RetrieveMarker.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- RetrieveMarker.java 8 Aug 2004 18:39:23 -0000 1.14
+++ RetrieveMarker.java 10 Aug 2004 05:33:15 -0000 1.15
@@ -18,6 +18,9 @@
package org.apache.fop.fo.flow;
+// Java
+import java.util.List;
+
// XML
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
@@ -26,8 +29,7 @@
// FOP
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FObjMixed;
-import org.apache.fop.layoutmgr.AddLMVisitor;
-import org.apache.fop.fo.LMVisited;
+import org.apache.fop.layoutmgr.RetrieveMarkerLayoutManager;
/**
@@ -35,7 +37,7 @@
* This will create a layout manager that will retrieve
* a marker based on the information.
*/
-public class RetrieveMarker extends FObjMixed implements LMVisited {
+public class RetrieveMarker extends FObjMixed {
private String retrieveClassName;
private int retrievePosition;
@@ -51,15 +53,6 @@
}
/**
- * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
- * XSL Content Model: empty
- */
- protected void validateChildNode(Locator loc, String nsURI, String localName)
- throws SAXParseException {
- invalidChildError(loc, nsURI, localName);
- }
-
- /**
* @see org.apache.fop.fo.FObj#addProperties
*/
protected void addProperties(Attributes attlist) throws SAXParseException {
@@ -72,6 +65,15 @@
this.propertyList.get(PR_RETRIEVE_BOUNDARY).getEnum();
}
+ /**
+ * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
+ * XSL Content Model: empty
+ */
+ protected void validateChildNode(Locator loc, String nsURI, String localName)
+ throws SAXParseException {
+ invalidChildError(loc, nsURI, localName);
+ }
+
public String getRetrieveClassName() {
return retrieveClassName;
}
@@ -85,14 +87,16 @@
}
/**
- * This is a hook for the AddLMVisitor class to be able to access
- * this object.
- * @param aLMV the AddLMVisitor object that can access this object.
+ * @see org.apache.fop.fo.FObj#addLayoutManager(List)
*/
- public void acceptVisitor(AddLMVisitor aLMV) {
- aLMV.serveRetrieveMarker(this);
+ public void addLayoutManager(List list) {
+ RetrieveMarkerLayoutManager lm = new RetrieveMarkerLayoutManager(this);
+ list.add(lm);
}
+ /**
+ * @see org.apache.fop.fo.FObj#getName()
+ */
public String getName() {
return "fo:retrieve-marker";
}
@@ -103,5 +107,4 @@
public int getNameId() {
return FO_RETRIEVE_MARKER;
}
-
}
1.52 +1 -8 xml-fop/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
Index: AddLMVisitor.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- AddLMVisitor.java 8 Aug 2004 17:52:35 -0000 1.51
+++ AddLMVisitor.java 10 Aug 2004 05:33:15 -0000 1.52
@@ -44,7 +44,6 @@
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.RetrieveMarker;
import org.apache.fop.fo.flow.Table;
import org.apache.fop.fo.flow.TableAndCaption;
import org.apache.fop.fo.flow.TableBody;
@@ -227,12 +226,6 @@
leaderArea = fa;
}
return leaderArea;
- }
-
- public void serveRetrieveMarker(RetrieveMarker node) {
- RetrieveMarkerLayoutManager rmlm;
- rmlm = new RetrieveMarkerLayoutManager(node);
- currentLMList.add(rmlm);
}
public void serveCharacter(Character node) {
1.1
xml-fop/src/java/org/apache/fop/layoutmgr/PageNumberCitationLayoutManager.java
Index: PageNumberCitationLayoutManager.java
===================================================================
/*
* 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: PageNumberCitationLayoutManager.java,v 1.1 2004/08/10 05:33:15 gmazza Exp $
*/
package org.apache.fop.layoutmgr;
import org.apache.fop.fo.flow.PageNumberCitation;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.Resolveable;
import org.apache.fop.area.Trait;
import org.apache.fop.area.inline.InlineArea;
import org.apache.fop.area.inline.UnresolvedPageNumber;
import org.apache.fop.area.inline.TextArea;
import org.apache.fop.fonts.Font;
/**
* LayoutManager for the fo:basic-link formatting object
*/
public class PageNumberCitationLayoutManager extends LeafNodeLayoutManager {
PageNumberCitation pncNode;
Font font = null;
/**
* Constructor
*
* @param node the formatting object that creates this area
* @todo better null checking of node, font
* @todo see if cleaner way to remove redundant pncNode variable (already
* being stored as an FObj in base class)
*/
public PageNumberCitationLayoutManager(PageNumberCitation node) {
super(node);
font = node.getFontState();
pncNode = node;
}
public InlineArea get(LayoutContext context) {
curArea = getPageNumberCitationInlineArea(parentLM);
return curArea;
}
public void addAreas(PositionIterator posIter, LayoutContext context) {
super.addAreas(posIter, context);
if (pncNode.getUnresolved()) {
parentLM.addUnresolvedArea(pncNode.getRefId(),
(Resolveable) curArea);
}
}
protected void offsetArea(LayoutContext context) {
curArea.setOffset(context.getBaseline());
}
/**
* if id can be resolved then simply return a word, otherwise
* return a resolveable area
* @todo move ref-id validation check to the FO class' addProperties().
*/
private InlineArea getPageNumberCitationInlineArea(LayoutManager parentLM) {
if (pncNode.getRefId().equals("")) {
fobj.getLogger().error("page-number-citation must contain \"ref-id\"");
return null;
}
PageViewport page = parentLM.resolveRefID(pncNode.getRefId());
InlineArea inline = null;
if (page != null) {
String str = page.getPageNumber();
// get page string from parent, build area
TextArea text = new TextArea();
inline = text;
int width = getStringWidth(str);
text.setTextArea(str);
inline.setIPD(width);
inline.setHeight(font.getAscender() - font.getDescender());
inline.setOffset(font.getAscender());
inline.addTrait(Trait.FONT_NAME, font.getFontName());
inline.addTrait(Trait.FONT_SIZE,
new Integer(font.getFontSize()));
pncNode.setUnresolved(false);
} else {
pncNode.setUnresolved(true);
inline = new UnresolvedPageNumber(pncNode.getRefId());
String str = "MMM"; // reserve three spaces for page number
int width = getStringWidth(str);
inline.setIPD(width);
inline.setHeight(font.getAscender() - font.getDescender());
inline.setOffset(font.getAscender());
inline.addTrait(Trait.FONT_NAME, font.getFontName());
inline.addTrait(Trait.FONT_SIZE, new Integer(font.getFontSize()));
}
return inline;
}
/**
* @param str string to be measured
* @return width (in millipoints ??) of the string
*/
private int getStringWidth(String str) {
int width = 0;
for (int count = 0; count < str.length(); count++) {
width += font.getCharWidth(str.charAt(count));
}
return width;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]