git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193259 13f79535-47bb-0310-9956-ffa450edef68pull/42/head
@@ -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: | |||
@@ -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> | |||
@@ -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; | |||
} |
@@ -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) { |
@@ -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()); |
@@ -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()); | |||
} | |||
} |
@@ -17,6 +17,7 @@ SOURCES=Block.java \ | |||
ListItemBody.java \ | |||
ListItemLabel.java \ | |||
PageNumber.java \ | |||
SimpleLink.java \ | |||
StaticContent.java \ | |||
Table.java \ | |||
TableBody.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); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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); | |||
} |