aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjtauber <jtauber@unknown>1999-12-03 08:12:59 +0000
committerjtauber <jtauber@unknown>1999-12-03 08:12:59 +0000
commitff886e3d91f9acffee6c8f0607012acac6601b20 (patch)
tree9fbe26785cadb4668fd6ef39a717ae981978fa3b
parentb85a365bfee0a45ad0f5914ad7211addcfca747b (diff)
downloadxmlgraphics-fop-ff886e3d91f9acffee6c8f0607012acac6601b20.tar.gz
xmlgraphics-fop-ff886e3d91f9acffee6c8f0607012acac6601b20.zip
incorporated rest of Arved Sandstrom's simple-link implementation: the FO and layout class modifications
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193259 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--STATUS3
-rw-r--r--src/codegen/properties.xml7
-rw-r--r--src/org/apache/fop/fo/FONode.java11
-rw-r--r--src/org/apache/fop/fo/FOText.java1
-rw-r--r--src/org/apache/fop/fo/PropertyListBuilder.java2
-rw-r--r--src/org/apache/fop/fo/StandardElementMapping.java4
-rw-r--r--src/org/apache/fop/fo/flow/Makefile1
-rw-r--r--src/org/apache/fop/fo/flow/PageNumber.java7
-rw-r--r--src/org/apache/fop/fo/flow/SimpleLink.java131
-rw-r--r--src/org/apache/fop/layout/BlockArea.java15
-rw-r--r--src/org/apache/fop/layout/LineArea.java51
-rw-r--r--src/org/apache/fop/layout/LinkSet.java2
12 files changed, 217 insertions, 18 deletions
diff --git a/STATUS b/STATUS
index 633b04609..ae3c4dd81 100644
--- a/STATUS
+++ b/STATUS
@@ -6,13 +6,14 @@ Things to do:
Get images working
[PARTIAL] Get padding working
-[PARTIAL] Incorporate Arved Sandstrom's simple-link implementation
+[DONE] Incorporate Arved Sandstrom's simple-link implementation
[PARTIAL] Implement basic keeps
[PARTIAL] Incorporate Eric Schaeffer's further table fixes
Other Bugs to fix:
colour not continued onto subsequent pages if coloured block goes over page
+simple-link doesn't seem to work (I think I, JKT, broke it)
Todo's and problems with AWT Previewer:
diff --git a/src/codegen/properties.xml b/src/codegen/properties.xml
index df9e36c51..e23bcd41e 100644
--- a/src/codegen/properties.xml
+++ b/src/codegen/properties.xml
@@ -358,5 +358,12 @@
<datatype>Length</datatype>
<default>0pt</default>
</property>
+ <property>
+ <name>external-destination</name>
+ <class-name>ExternalDestination</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
</property-list>
diff --git a/src/org/apache/fop/fo/FONode.java b/src/org/apache/fop/fo/FONode.java
index 9e04e66bc..0c7fa6b04 100644
--- a/src/org/apache/fop/fo/FONode.java
+++ b/src/org/apache/fop/fo/FONode.java
@@ -54,6 +54,7 @@ package org.apache.fop.fo;
// FOP
import org.apache.fop.apps.FOPException;
import org.apache.fop.layout.Area;
+import org.apache.fop.layout.LinkSet;
// Java
import java.util.Vector;
@@ -90,6 +91,8 @@ abstract public class FONode {
protected int forcedStartOffset = 0;
protected int forcedWidth = 0;
+ protected LinkSet linkSet;
+
protected FONode(FObj parent) {
this.parent = parent;
}
@@ -146,6 +149,14 @@ abstract public class FONode {
return this.parent;
}
+ public void setLinkSet(LinkSet linkSet) {
+ this.linkSet = linkSet;
+ }
+
+ public LinkSet getLinkSet() {
+ return this.linkSet;
+ }
+
abstract public Status layout(Area area)
throws FOPException;
}
diff --git a/src/org/apache/fop/fo/FOText.java b/src/org/apache/fop/fo/FOText.java
index ad6703f51..a35b16486 100644
--- a/src/org/apache/fop/fo/FOText.java
+++ b/src/org/apache/fop/fo/FOText.java
@@ -118,6 +118,7 @@ public class FOText extends FONode {
int orig_start = this.marker;
this.marker = ((BlockArea) area).addText(fs, red, green, blue,
wrapOption,
+ this.getLinkSet(),
whiteSpaceTreatment,
ca, this.marker, length);
if (this.marker == -1) {
diff --git a/src/org/apache/fop/fo/PropertyListBuilder.java b/src/org/apache/fop/fo/PropertyListBuilder.java
index bffb5d3e9..ebec11f1c 100644
--- a/src/org/apache/fop/fo/PropertyListBuilder.java
+++ b/src/org/apache/fop/fo/PropertyListBuilder.java
@@ -109,7 +109,7 @@ public class PropertyListBuilder {
propertyTable.put("padding-bottom",PaddingBottom.maker());
propertyTable.put("padding-left",PaddingLeft.maker());
propertyTable.put("padding-right",PaddingRight.maker());
-
+ propertyTable.put("external-destination",ExternalDestination.maker());
propertyTable.put("height",SVGLength.maker());
propertyTable.put("width",SVGLength.maker());
propertyTable.put("x",SVGLength.maker());
diff --git a/src/org/apache/fop/fo/StandardElementMapping.java b/src/org/apache/fop/fo/StandardElementMapping.java
index 006c3bd4e..515c96ab9 100644
--- a/src/org/apache/fop/fo/StandardElementMapping.java
+++ b/src/org/apache/fop/fo/StandardElementMapping.java
@@ -22,7 +22,7 @@
Alternately, this acknowledgment may appear in the software itself, if
and wherever such third-party acknowledgments normally appear.
- 4. The names "Fop" and "Apache Software Foundation" must not be used to
+ 4. The names "FOP" and "Apache Software Foundation" must not be used to
endorse or promote products derived from this software without prior
written permission. For written permission, please contact
apache@apache.org.
@@ -48,6 +48,7 @@
Software Foundation, please see <http://www.apache.org/>.
*/
+
package org.apache.fop.fo;
import org.apache.fop.fo.flow.*;
@@ -98,5 +99,6 @@ public class StandardElementMapping implements ElementMapping {
builder.addMapping(uri, "table-body", TableBody.maker());
builder.addMapping(uri, "table-row", TableRow.maker());
builder.addMapping(uri, "table-cell", TableCell.maker());
+ builder.addMapping(uri, "simple-link", SimpleLink.maker());
}
}
diff --git a/src/org/apache/fop/fo/flow/Makefile b/src/org/apache/fop/fo/flow/Makefile
index 974d43270..8615c2ef5 100644
--- a/src/org/apache/fop/fo/flow/Makefile
+++ b/src/org/apache/fop/fo/flow/Makefile
@@ -17,6 +17,7 @@ SOURCES=Block.java \
ListItemBody.java \
ListItemLabel.java \
PageNumber.java \
+ SimpleLink.java \
StaticContent.java \
Table.java \
TableBody.java \
diff --git a/src/org/apache/fop/fo/flow/PageNumber.java b/src/org/apache/fop/fo/flow/PageNumber.java
index 2844b5d98..7a5c53ffa 100644
--- a/src/org/apache/fop/fo/flow/PageNumber.java
+++ b/src/org/apache/fop/fo/flow/PageNumber.java
@@ -111,7 +111,12 @@ public class PageNumber extends FObj {
this.marker = 0;
}
String p = Integer.toString(area.getPage().getNumber());
- this.marker = ((BlockArea) area).addText(fs, red, green, blue, wrapOption, whiteSpaceTreatment, p.toCharArray(), 0, p.length());
+ this.marker = ((BlockArea) area).addText(fs, red, green, blue,
+ wrapOption,
+ null,
+ whiteSpaceTreatment,
+ p.toCharArray(), 0,
+ p.length());
return new Status(Status.OK);
}
}
diff --git a/src/org/apache/fop/fo/flow/SimpleLink.java b/src/org/apache/fop/fo/flow/SimpleLink.java
new file mode 100644
index 000000000..370a66b5a
--- /dev/null
+++ b/src/org/apache/fop/fo/flow/SimpleLink.java
@@ -0,0 +1,131 @@
+/*-- $Id$ --
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ endorse or promote products derived from this software without prior
+ written permission. For written permission, please contact
+ apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation and was originally created by
+ James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+/* this class contributed by Arved Sandstrom with minor modifications
+ by James Tauber */
+
+package org.apache.fop.fo.flow;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.layout.*;
+import org.apache.fop.datatypes.ColorType;
+
+// Java
+import java.util.Enumeration;
+import java.awt.Rectangle;
+
+public class SimpleLink extends FObjMixed {
+
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new SimpleLink(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new SimpleLink.Maker();
+ }
+
+ public SimpleLink(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:simple-link";
+
+ if (parent.getName().equals("fo:flow")) {
+ throw new FOPException("simple-link can't be directly"
+ + " under flow");
+ }
+ }
+
+ public Status layout(Area area) throws FOPException {
+
+ String externalDest =
+ this.properties.get("external-destination").getString();
+
+ if (this.marker == START) {
+ this.marker = 0;
+ }
+
+ // new LinkedArea to gather up inlines
+ LinkSet ls = new LinkSet(externalDest);
+
+ Page p = area.getPage();
+
+ // assumption - AS
+ // should be able to retrieve this from somewhere - JT
+ AreaContainer ac = p.getBody();
+
+ int numChildren = this.children.size();
+ for (int i = this.marker; i < numChildren; i++) {
+ FONode fo = (FONode) children.elementAt(i);
+ fo.setLinkSet(ls);
+
+ Status status;
+ if ((status = fo.layout(area)).isIncomplete()) {
+ this.marker = i;
+ return status;
+ }
+ }
+
+ ls.applyAreaContainerOffsets(ac);
+
+ // comment this out to see individual words linked
+ ls.mergeLinks();
+
+ p.addLinkSet(ls);
+
+ return new Status(Status.OK);
+ }
+}
diff --git a/src/org/apache/fop/layout/BlockArea.java b/src/org/apache/fop/layout/BlockArea.java
index a9242bbbb..2532e9567 100644
--- a/src/org/apache/fop/layout/BlockArea.java
+++ b/src/org/apache/fop/layout/BlockArea.java
@@ -113,7 +113,7 @@ public class BlockArea extends Area {
}
public int addText(FontState fontState, float red, float green,
- float blue, int wrapOption,
+ float blue, int wrapOption, LinkSet ls,
int whiteSpaceTreatment, char data[],
int start, int end) {
int ts, te;
@@ -131,7 +131,12 @@ public class BlockArea extends Area {
this.currentLineArea.changeColor(red, green, blue);
this.currentLineArea.changeWrapOption(wrapOption);
this.currentLineArea.changeWhiteSpaceTreatment(whiteSpaceTreatment);
- ts = this.currentLineArea.addText(ca, ts, te);
+
+ if (ls != null) {
+ ls.setYOffset(currentHeight);
+ }
+
+ ts = this.currentLineArea.addText(ca, ts, te, ls);
this.hasLines = true;
while (ts != -1) {
@@ -148,7 +153,11 @@ public class BlockArea extends Area {
this.currentLineArea.changeColor(red, green, blue);
this.currentLineArea.changeWrapOption(wrapOption);
this.currentLineArea.changeWhiteSpaceTreatment(whiteSpaceTreatment);
- ts = this.currentLineArea.addText(ca, ts, te);
+ if (ls != null) {
+ ls.setYOffset(currentHeight);
+ }
+
+ ts = this.currentLineArea.addText(ca, ts, te, ls);
}
return -1;
}
diff --git a/src/org/apache/fop/layout/LineArea.java b/src/org/apache/fop/layout/LineArea.java
index c2993f38e..64b8c21a0 100644
--- a/src/org/apache/fop/layout/LineArea.java
+++ b/src/org/apache/fop/layout/LineArea.java
@@ -22,7 +22,7 @@
Alternately, this acknowledgment may appear in the software itself, if
and wherever such third-party acknowledgments normally appear.
- 4. The names "Fop" and "Apache Software Foundation" must not be used to
+ 4. The names "FOP" and "Apache Software Foundation" must not be used to
endorse or promote products derived from this software without prior
written permission. For written permission, please contact
apache@apache.org.
@@ -48,12 +48,14 @@
Software Foundation, please see <http://www.apache.org/>.
*/
+
package org.apache.fop.layout;
import org.apache.fop.render.Renderer;
import java.util.Vector;
import java.util.Enumeration;
+import java.awt.Rectangle;
import org.apache.fop.fo.properties.WrapOption; // for enumerated
// values
@@ -143,7 +145,7 @@ public class LineArea extends Area {
renderer.renderLineArea(this);
}
- public int addText(char data[], int start, int end) {
+ public int addText(char data[], int start, int end, LinkSet ls) {
boolean overrun = false;
wordStart = start;
@@ -212,6 +214,16 @@ public class LineArea extends Area {
Enumeration e = pendingAreas.elements();
while (e.hasMoreElements()) {
InlineArea inlineArea = (InlineArea) e.nextElement();
+ if (ls != null) {
+ Rectangle lr =
+ new Rectangle(startIndent +
+ finalWidth,
+ 0,
+ inlineArea.getContentWidth(),
+ lineHeight);
+ ls.addRect(lr);
+ }
+
addChild(inlineArea);
}
finalWidth += pendingWidth;
@@ -223,12 +235,22 @@ public class LineArea extends Area {
// add the current word
if (wordLength > 0) {
- addChild(new InlineArea(currentFontState,
- this.red, this.green,
- this.blue, new
- String(data, wordStart,
- wordLength),
- wordWidth));
+ InlineArea ia = new InlineArea(currentFontState,
+ this.red, this.green,
+ this.blue, new
+ String(data, wordStart,
+ wordLength),
+ wordWidth);
+ addChild(ia);
+ if (ls != null) {
+ Rectangle lr =
+ new Rectangle(startIndent +
+ finalWidth,
+ 0,
+ ia.getContentWidth(),
+ lineHeight);
+ ls.addRect(lr);
+ }
finalWidth += wordWidth;
// reset word width
@@ -318,10 +340,19 @@ public class LineArea extends Area {
} // end of iteration over text
if (prev == TEXT) {
- pendingAreas.addElement(new InlineArea(currentFontState, this.red,
+ InlineArea pia = new InlineArea(currentFontState, this.red,
this.green, this.blue, new
String(data, wordStart,
- wordLength), wordWidth));
+ wordLength), wordWidth);
+ if (ls != null) {
+ Rectangle lr =
+ new Rectangle(startIndent + finalWidth,
+ spaceWidth,
+ pia.getContentWidth(),
+ lineHeight);
+ ls.addRect(lr);
+ }
+ pendingAreas.addElement(pia);
pendingWidth += wordWidth;
wordWidth = 0;
}
diff --git a/src/org/apache/fop/layout/LinkSet.java b/src/org/apache/fop/layout/LinkSet.java
index 9f2b66309..66e614149 100644
--- a/src/org/apache/fop/layout/LinkSet.java
+++ b/src/org/apache/fop/layout/LinkSet.java
@@ -79,7 +79,7 @@ public class LinkSet {
this.externalDestination = externalDest;
}
- public void addLinkedRect(Rectangle r) {
+ public void addRect(Rectangle r) {
r.y = yoffset;
rects.addElement(r);
}