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:
<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>
// FOP
import org.apache.fop.apps.FOPException;
import org.apache.fop.layout.Area;
+import org.apache.fop.layout.LinkSet;
// Java
import java.util.Vector;
protected int forcedStartOffset = 0;
protected int forcedWidth = 0;
+ protected LinkSet linkSet;
+
protected FONode(FObj parent) {
this.parent = parent;
}
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;
}
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) {
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());
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.
Software Foundation, please see <http://www.apache.org/>.
*/
+
package org.apache.fop.fo;
import org.apache.fop.fo.flow.*;
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());
}
}
ListItemBody.java \
ListItemLabel.java \
PageNumber.java \
+ SimpleLink.java \
StaticContent.java \
Table.java \
TableBody.java \
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);
}
}
--- /dev/null
+/*-- $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);
+ }
+}
}
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;
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) {
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;
}
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.
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
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;
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;
// 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
} // 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;
}
this.externalDestination = externalDest;
}
- public void addLinkedRect(Rectangle r) {
+ public void addRect(Rectangle r) {
r.y = yoffset;
rects.addElement(r);
}