Sfoglia il codice sorgente

First batch of changes for preparation for adoption of Avalon patterns. Only changes on logging for now. Mostly usage of LogEnabled contract interface. Separate mail follows.


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195068 13f79535-47bb-0310-9956-ffa450edef68
pull/30/head
Jeremias Maerki 22 anni fa
parent
commit
34baf91a51
42 ha cambiato i file con 379 aggiunte e 412 eliminazioni
  1. 2
    2
      src/org/apache/fop/apps/AWTStarter.java
  2. 1
    1
      src/org/apache/fop/apps/CommandLineOptions.java
  3. 2
    2
      src/org/apache/fop/apps/CommandLineStarter.java
  4. 43
    34
      src/org/apache/fop/apps/Driver.java
  5. 16
    10
      src/org/apache/fop/apps/LayoutHandler.java
  6. 2
    7
      src/org/apache/fop/apps/Starter.java
  7. 5
    7
      src/org/apache/fop/apps/StructureHandler.java
  8. 1
    1
      src/org/apache/fop/extensions/Bookmarks.java
  9. 2
    2
      src/org/apache/fop/extensions/Outline.java
  10. 2
    2
      src/org/apache/fop/fo/ColorProfile.java
  11. 3
    3
      src/org/apache/fop/fo/Declarations.java
  12. 5
    7
      src/org/apache/fop/fo/FONode.java
  13. 6
    8
      src/org/apache/fop/fo/FOTreeBuilder.java
  14. 6
    5
      src/org/apache/fop/fo/FOUserAgent.java
  15. 2
    2
      src/org/apache/fop/fo/FObj.java
  16. 6
    6
      src/org/apache/fop/fo/FObjMixed.java
  17. 4
    12
      src/org/apache/fop/fo/Property.java
  18. 1
    1
      src/org/apache/fop/fo/ToBeImplementedElement.java
  19. 1
    1
      src/org/apache/fop/fo/Unknown.java
  20. 1
    1
      src/org/apache/fop/fo/XMLObj.java
  21. 1
    1
      src/org/apache/fop/fo/flow/Block.java
  22. 3
    3
      src/org/apache/fop/fo/flow/ExternalGraphic.java
  23. 4
    4
      src/org/apache/fop/fo/flow/InstreamForeignObject.java
  24. 1
    1
      src/org/apache/fop/fo/flow/Marker.java
  25. 2
    2
      src/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java
  26. 1
    1
      src/org/apache/fop/fo/pagination/PageMasterReference.java
  27. 4
    10
      src/org/apache/fop/fo/pagination/PageNumberGenerator.java
  28. 102
    106
      src/org/apache/fop/fo/pagination/PageSequence.java
  29. 1
    1
      src/org/apache/fop/fo/pagination/PageSequenceMaster.java
  30. 29
    29
      src/org/apache/fop/fo/pagination/RegionBody.java
  31. 36
    37
      src/org/apache/fop/fo/pagination/SimplePageMaster.java
  32. 9
    14
      src/org/apache/fop/render/AbstractRenderer.java
  33. 3
    8
      src/org/apache/fop/render/Renderer.java
  34. 1
    1
      src/org/apache/fop/render/pcl/PCLRenderer.java
  35. 4
    4
      src/org/apache/fop/render/ps/PSRenderer.java
  36. 1
    1
      src/org/apache/fop/render/svg/SVGRenderer.java
  37. 3
    3
      src/org/apache/fop/render/txt/TXTRenderer.java
  38. 12
    12
      src/org/apache/fop/render/xml/XMLRenderer.java
  39. 3
    3
      src/org/apache/fop/svg/SVGElement.java
  40. 24
    22
      src/org/apache/fop/tools/AreaTreeBuilder.java
  41. 12
    21
      src/org/apache/fop/tools/TestConverter.java
  42. 12
    14
      src/org/apache/fop/tools/anttasks/Fop.java

+ 2
- 2
src/org/apache/fop/apps/AWTStarter.java Vedi File

@@ -94,7 +94,7 @@ public class AWTStarter extends CommandLineStarter {

public void run() throws FOPException {
Driver driver = new Driver();
driver.setLogger(log);
setupLogger(driver);
if (errorDump) {
driver.setErrorDump(true);
}
@@ -160,7 +160,7 @@ public class AWTStarter extends CommandLineStarter {
URL url = getClass().getResource(path);
in = url.openStream();
} catch (Exception ex) {
log.error("Can't find URL to: <" + path + "> "
getLogger().error("Can't find URL to: <" + path + "> "
+ ex.getMessage(), ex);
}
return new SecureResourceBundle(in);

+ 1
- 1
src/org/apache/fop/apps/CommandLineOptions.java Vedi File

@@ -408,7 +408,7 @@ public class CommandLineOptions {
default:
starter = new CommandLineStarter(this);
}
starter.setLogger(log);
starter.enableLogging(log);
return starter;
}


+ 2
- 2
src/org/apache/fop/apps/CommandLineStarter.java Vedi File

@@ -47,13 +47,13 @@ public class CommandLineStarter extends Starter {
public void run() throws FOPException {
String version = Version.getVersion();

log.info(version);
getLogger().info(version);

XMLReader parser = inputHandler.getParser();
setParserFeatures(parser);

Driver driver = new Driver();
driver.setLogger(log);
setupLogger(driver);
driver.initialize();

if (errorDump) {

+ 43
- 34
src/org/apache/fop/apps/Driver.java Vedi File

@@ -22,6 +22,8 @@ import org.apache.fop.render.pdf.PDFRenderer;
// Avalon
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.AbstractLogEnabled;

// DOM
import org.w3c.dom.Document;
@@ -52,6 +54,7 @@ import java.util.*;
* <PRE>
* Driver driver = new Driver(new InputSource (args[0]),
* new FileOutputStream(args[1]));
* driver.enableLogging(myLogger); //optional
* driver.setRenderer(RENDER_PDF);
* driver.run();
* </PRE>
@@ -81,11 +84,12 @@ import java.util.*;
*
* <PRE>
* Driver driver = new Driver();
* driver.enableLogging(myLogger); //optional
* driver.setRenderer(new org.apache.fop.render.awt.AWTRenderer(translator));
* driver.render(parser, fileInputSource(args[0]));
* </PRE>
*/
public class Driver {
public class Driver implements LogEnabled {

/**
* Render to PDF. OutputStream must be set
@@ -144,7 +148,7 @@ public class Driver {

/**
* the structure handler
*/
*/
private StructureHandler structHandler;

/**
@@ -170,11 +174,11 @@ public class Driver {
/**
* the system resources that FOP will use
*/
private Logger log;
private Logger log = null;
private FOUserAgent userAgent = null;

public static final String getParserClassName() {
try {
try {
return javax.xml.parsers.SAXParserFactory.newInstance().newSAXParser().getXMLReader().getClass().getName();
} catch (javax.xml.parsers.ParserConfigurationException e) {
return null;
@@ -198,7 +202,7 @@ public class Driver {

public void initialize() {
_stream = null;
_treeBuilder = new FOTreeBuilder();
_treeBuilder = new FOTreeBuilder();
_treeBuilder.setUserAgent(getUserAgent());
setupDefaultMappings();
}
@@ -210,24 +214,29 @@ public class Driver {
private FOUserAgent getUserAgent() {
if(userAgent == null) {
userAgent = new FOUserAgent();
userAgent.setLogger(getLogger());
userAgent.enableLogging(getLogger());
String base = org.apache.fop.configuration.Configuration.getStringValue("baseDir");
userAgent.setBaseURL(base);
}
return userAgent;
}

public void setLogger(Logger logger) {
log = logger;
public void enableLogging(Logger log) {
if (this.log == null) {
this.log = log;
} else {
getLogger().warn("Logger is already set! Won't use the new logger.");
}
}

private Logger getLogger() {
if(log == null) {
log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
log.error("Logger not set");
}

return log;
protected Logger getLogger() {
if(this.log == null) {
this.log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
this.log.error("Logger not set. Using ConsoleLogger as default.");
}

return this.log;
}

/**
@@ -321,42 +330,40 @@ public class Driver {
public void setRenderer(int renderer) throws IllegalArgumentException {
switch (renderer) {
case RENDER_PDF:
setRenderer(new org.apache.fop.render.pdf.PDFRenderer());
setRenderer("org.apache.fop.render.pdf.PDFRenderer");
break;
case RENDER_AWT:
throw new IllegalArgumentException("Use renderer form of setRenderer() for AWT");
case RENDER_PRINT:
throw new IllegalArgumentException("Use renderer form of setRenderer() for PRINT");
case RENDER_PCL:
setRenderer(new org.apache.fop.render.pcl.PCLRenderer());
setRenderer("org.apache.fop.render.pcl.PCLRenderer");
break;
case RENDER_PS:
setRenderer(new org.apache.fop.render.ps.PSRenderer());
setRenderer("org.apache.fop.render.ps.PSRenderer");
break;
case RENDER_TXT:
setRenderer(new org.apache.fop.render.txt.TXTRenderer());
setRenderer("org.apache.fop.render.txt.TXTRenderer()");
break;
case RENDER_MIF:
//structHandler = new org.apache.fop.mif.MIFHandler(_stream);
break;
case RENDER_XML:
setRenderer(new org.apache.fop.render.xml.XMLRenderer());
setRenderer("org.apache.fop.render.xml.XMLRenderer");
break;
case RENDER_SVG:
setRenderer(new org.apache.fop.render.svg.SVGRenderer());
setRenderer("org.apache.fop.render.svg.SVGRenderer");
break;
default:
throw new IllegalArgumentException("Unknown renderer type");
}

}

/**
* Set the Renderer to use
* @param renderer the renderer instance to use
* Set the Renderer to use.
* @param renderer the renderer instance to use (Note: Logger must be set at this point)
*/
public void setRenderer(Renderer renderer) {
renderer.setLogger(getLogger());
renderer.setUserAgent(getUserAgent());
_renderer = renderer;
}
@@ -387,6 +394,9 @@ public class Driver {
try {
_renderer =
(Renderer)Class.forName(rendererClassName).newInstance();
if (_renderer instanceof LogEnabled) {
((LogEnabled)_renderer).enableLogging(getLogger());
}
_renderer.setProducer(Version.getVersion());
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("Could not find "
@@ -457,8 +467,8 @@ public class Driver {
} else {
structHandler = new org.apache.fop.mif.MIFHandler(_stream);
}
structHandler.setLogger(getLogger());
_treeBuilder.setLogger(getLogger());
structHandler.enableLogging(getLogger());
_treeBuilder.setUserAgent(getUserAgent());
_treeBuilder.setStructHandler(structHandler);

@@ -511,19 +521,18 @@ public class Driver {
*/
public void dumpError(Exception e) {
if (_errorDump) {
Logger log = getLogger();
if (e instanceof SAXException) {
log.error("", e);
getLogger().error("", e);
if (((SAXException)e).getException() != null) {
log.error("", ((SAXException)e).getException());
getLogger().error("", ((SAXException)e).getException());
}
} else if (e instanceof FOPException) {
e.printStackTrace();
if (((FOPException)e).getException() != null) {
log.error("", ((FOPException)e).getException());
getLogger().error("", ((FOPException)e).getException());
}
} else {
log.error("", e);
getLogger().error("", e);
}
}
}
@@ -575,7 +584,7 @@ class Service {
}
String serviceFile = "META-INF/services/" + cls.getName();

// System.out.println("File: " + serviceFile);
// getLogger().debug("File: " + serviceFile);

Vector v = (Vector)providerMap.get(serviceFile);
if (v != null)
@@ -594,7 +603,7 @@ class Service {
while (e.hasMoreElements()) {
try {
java.net.URL u = (java.net.URL)e.nextElement();
// System.out.println("URL: " + u);
//getLogger().debug("URL: " + u);

InputStream is = u.openStream();
Reader r = new InputStreamReader(is, "UTF-8");
@@ -616,7 +625,7 @@ class Service {
line = br.readLine();
continue;
}
// System.out.println("Line: " + line);
// getLogger().debug("Line: " + line);

// Try and load the class
// Object obj = cl.loadClass(line).newInstance();

+ 16
- 10
src/org/apache/fop/apps/LayoutHandler.java Vedi File

@@ -132,20 +132,26 @@ public class LayoutHandler extends StructureHandler {
long memoryNow = runtime.totalMemory() - runtime.freeMemory();
long memoryUsed = (memoryNow - initialMemory) / 1024L;

log.debug("Initial heap size: " + (initialMemory / 1024L) + "Kb");
log.debug("Current heap size: " + (memoryNow / 1024L) + "Kb");
log.debug("Total memory used: " + memoryUsed + "Kb");

if (!MEM_PROFILE_WITH_GC) {
log.debug(" Memory use is indicative; no GC was performed");
log.debug(" These figures should not be used comparatively");
if (getLogger().isDebugEnabled()) {
getLogger().debug("Initial heap size: " + (initialMemory / 1024L) + "Kb");
getLogger().debug("Current heap size: " + (memoryNow / 1024L) + "Kb");
getLogger().debug("Total memory used: " + memoryUsed + "Kb");

if (!MEM_PROFILE_WITH_GC) {
getLogger().debug(" Memory use is indicative; no GC was performed");
getLogger().debug(" These figures should not be used comparatively");
}
}

long timeUsed = System.currentTimeMillis() - startTime;

log.debug("Total time used: " + timeUsed + "ms");
log.debug("Pages rendered: " + pageCount);
//log.debug("Avg render time: " + (timeUsed / pageCount) + "ms/page");
if (getLogger().isDebugEnabled()) {
getLogger().debug("Total time used: " + timeUsed + "ms");
getLogger().debug("Pages rendered: " + pageCount);
if (pageCount > 0) {
getLogger().debug("Avg render time: " + (timeUsed / pageCount) + "ms/page");
}
}
}

public void startPageSequence(PageSequence pageSeq, org.apache.fop.fo.Title seqTitle, LayoutMasterSet lms) {

+ 2
- 7
src/org/apache/fop/apps/Starter.java Vedi File

@@ -8,7 +8,7 @@
package org.apache.fop.apps;

// Avalon
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.AbstractLogEnabled;

// SAX
import org.xml.sax.XMLReader;
@@ -23,20 +23,15 @@ import java.net.URL;
* Creates a SAX Parser (defaulting to Xerces).
*
*/
public abstract class Starter {
public abstract class Starter extends AbstractLogEnabled {

Options options;
InputHandler inputHandler;
protected Logger log;

public Starter() throws FOPException {
options = new Options();
}

public void setLogger(Logger logger) {
log = logger;
}

public void setInputHandler(InputHandler inputHandler) {
this.inputHandler = inputHandler;
}

+ 5
- 7
src/org/apache/fop/apps/StructureHandler.java Vedi File

@@ -10,7 +10,10 @@ package org.apache.fop.apps;
// Java
import java.util.HashSet;

import org.apache.avalon.framework.logger.Logger;
// Avalon
import org.apache.avalon.framework.logger.AbstractLogEnabled;

// FOP
import org.apache.fop.fo.pagination.*;
import org.apache.fop.fo.flow.*;
import org.apache.fop.fo.*;
@@ -23,21 +26,16 @@ import org.xml.sax.SAXException;
* Sub-classes can then implement various methods to handle
* the FO Tree when the SAX events occur.
*/
public class StructureHandler {
public class StructureHandler extends AbstractLogEnabled {
/**
The current set of id's in the FO tree
This is used so we know if the FO tree contains duplicates
*/
private HashSet idReferences = new HashSet();
protected Logger log;

public StructureHandler() {
}

public void setLogger(Logger logger) {
log = logger;
}

public HashSet getIDReferences() {
return idReferences;
}

+ 1
- 1
src/org/apache/fop/extensions/Bookmarks.java Vedi File

@@ -34,7 +34,7 @@ public class Bookmarks extends ExtensionObj {
}

public void end() {
log.debug("adding bookmarks to area tree");
getLogger().debug("adding bookmarks to area tree");
data = new BookmarkData();
for(int count = 0; count < outlines.size(); count++) {
Outline out = (Outline)outlines.get(count);

+ 2
- 2
src/org/apache/fop/extensions/Outline.java Vedi File

@@ -31,11 +31,11 @@ public class Outline extends ExtensionObj {
externalDestination =
attlist.getValue("external-destination");
if (externalDestination != null &&!externalDestination.equals("")) {
log.warn("fox:outline external-destination not supported currently.");
getLogger().warn("fox:outline external-destination not supported currently.");
}

if (internalDestination == null || internalDestination.equals("")) {
log.warn("fox:outline requires an internal-destination.");
getLogger().warn("fox:outline requires an internal-destination.");
}

}

+ 2
- 2
src/org/apache/fop/fo/ColorProfile.java Vedi File

@@ -65,9 +65,9 @@ public class ColorProfile extends FObj {
ICC_Profile iccProfile = ICC_Profile.getInstance(is);
colorSpace = new ICC_ColorSpace(iccProfile);
} catch(IOException ioe) {
log.error("Could not read Color Profile src", ioe);
getLogger().error("Could not read Color Profile src", ioe);
} catch(IllegalArgumentException iae) {
log.error("Color Profile src not an ICC Profile", iae);
getLogger().error("Color Profile src not an ICC Profile", iae);
}
}
}

+ 3
- 3
src/org/apache/fop/fo/Declarations.java Vedi File

@@ -45,11 +45,11 @@ public class Declarations extends FObj {
}
if(colorProfiles.get(cp.getProfileName()) != null) {
// duplicate names
log.warn("Duplicate fo:color-profile profile name : " + cp.getProfileName());
getLogger().warn("Duplicate fo:color-profile profile name : " + cp.getProfileName());
}
colorProfiles.put(cp.getProfileName(), cp);
} else {
log.warn("color-profile-name required for color profile");
getLogger().warn("color-profile-name required for color profile");
}
} else if(node instanceof XMLObj) {
if(external == null) {
@@ -57,7 +57,7 @@ public class Declarations extends FObj {
}
external.add(node);
} else {
log.warn("invalid element " + node.getName() + "inside declarations");
getLogger().warn("invalid element " + node.getName() + "inside declarations");
}
}
children = null;

+ 5
- 7
src/org/apache/fop/fo/FONode.java Vedi File

@@ -29,8 +29,6 @@ abstract public class FONode {
protected FONode parent;
protected String name;

protected Logger log;

protected FONode(FONode parent) {
this.parent = parent;
}
@@ -39,8 +37,8 @@ abstract public class FONode {
name = str;
}

public void setLogger(Logger logger) {
log = logger;
public Logger getLogger() {
return userAgent.getLogger();
}

public void setUserAgent(FOUserAgent ua) {
@@ -97,7 +95,7 @@ abstract public class FONode {
* @return A ListIterator.
*/
public ListIterator getChildren() {
return null;
return null;
}

/**
@@ -108,11 +106,11 @@ abstract public class FONode {
* this FObj.
*/
public ListIterator getChildren(FONode childNode) {
return null;
return null;
}

public CharIterator charIterator() {
return new OneCharIterator(CharUtilities.CODE_EOT);
return new OneCharIterator(CharUtilities.CODE_EOT);
}

}

+ 6
- 8
src/org/apache/fop/fo/FOTreeBuilder.java Vedi File

@@ -30,7 +30,7 @@ import java.io.IOException;

/**
* SAX Handler that builds the formatting object tree.
*
*
* Modified by Mark Lillywhite mark-fop@inomial.com. Now uses
* StreamRenderer to automagically render the document as
* soon as it receives a page-sequence end-tag. Also,
@@ -70,13 +70,12 @@ public class FOTreeBuilder extends DefaultHandler {
* (mark-fop@inomial.com)
*/
private StructureHandler structHandler;
private Logger log;
private FOUserAgent userAgent;

public FOTreeBuilder() {}

public void setLogger(Logger logger) {
log = logger;
public Logger getLogger() {
return userAgent.getLogger();
}

public void setUserAgent(FOUserAgent ua) {
@@ -129,13 +128,13 @@ public class FOTreeBuilder extends DefaultHandler {
public void startDocument()
throws SAXException {
rootFObj = null; // allows FOTreeBuilder to be reused
log.info("building formatting object tree");
getLogger().info("building formatting object tree");
structHandler.startDocument();
}

public void endDocument()
throws SAXException {
log.info("Parsing of document complete, stopping renderer");
getLogger().info("Parsing of document complete, stopping renderer");
structHandler.endDocument();
}

@@ -164,7 +163,7 @@ public class FOTreeBuilder extends DefaultHandler {
String fullName = uri + "^" + localName;
if (!this.unknownFOs.containsKey(fullName)) {
this.unknownFOs.put(fullName, "");
log.warn("Unknown formatting object "
getLogger().warn("Unknown formatting object "
+ fullName);
}
if(namespaces.contains(uri.intern())) {
@@ -179,7 +178,6 @@ public class FOTreeBuilder extends DefaultHandler {
try {
fobj = fobjMaker.make(currentFObj);
fobj.setName(localName);
fobj.setLogger(log);
// set the user agent for resolving user agent values
fobj.setUserAgent(userAgent);
// set the stream renderer so that appropriate

+ 6
- 5
src/org/apache/fop/fo/FOUserAgent.java Vedi File

@@ -10,6 +10,7 @@ package org.apache.fop.fo;
import org.apache.fop.render.XMLHandler;
import org.apache.fop.render.RendererContext;

import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;

import org.w3c.dom.*;
@@ -31,13 +32,13 @@ import java.util.HashMap;
* These areas may contain resolveable areas that will be processed
* with other resolveable areas
*/
public class FOUserAgent {
public class FOUserAgent implements LogEnabled {
HashMap defaults = new HashMap();
HashMap handlers = new HashMap();
Logger log;
String base;

public void setLogger(Logger logger) {
public void enableLogging(Logger logger) {
log = logger;
}

@@ -83,7 +84,7 @@ public class FOUserAgent {
mh.put(ns, handler);
}

/**
/**
* Render the xml document with the given xml namespace.
* The Render Context is by the handle to render into the current
* rendering target.
@@ -104,11 +105,11 @@ public class FOUserAgent {
handler.handleXML(ctx, doc, namespace);
} catch (Throwable t) {
// could not handle document
log.error("Could not render XML", t);
getLogger().error("Could not render XML", t);
}
} else {
// no handler found for document
log.debug("No handler defined for XML: " + namespace);
getLogger().debug("No handler defined for XML: " + namespace);
}
}
}

+ 2
- 2
src/org/apache/fop/fo/FObj.java Vedi File

@@ -153,7 +153,7 @@ public class FObj extends FONode {
id = str;
idrefs.add(id);
} else {
log.warn("duplicate id:" + str + " ignored");
getLogger().warn("duplicate id:" + str + " ignored");
}
}
}
@@ -348,7 +348,7 @@ public class FObj extends FONode {
if (!markers.containsKey(mcname) && children.isEmpty()) {
markers.put(mcname, marker);
} else {
log.error("fo:marker must be an initial child," + "and 'marker-class-name' must be unique for same parent");
getLogger().error("fo:marker must be an initial child," + "and 'marker-class-name' must be unique for same parent");
throw new FOPException(
"fo:marker must be an initial child," + "and 'marker-class-name' must be unique for same parent");
}

+ 6
- 6
src/org/apache/fop/fo/FObjMixed.java Vedi File

@@ -36,7 +36,7 @@ public class FObjMixed extends FObj {

public void addLayoutManager(List lms) {
lms.add(new InlineStackingBPLayoutManager(this,
new LMiter(children.listIterator())));
new LMiter(children.listIterator())));
// set start and end properties for this element, id, etc.
// int numChildren = this.children.size();
// for (int i = 0; i < numChildren; i++) {
@@ -50,14 +50,14 @@ public class FObjMixed extends FObj {

protected void addCharacters(char data[], int start, int length) {
if(textInfo == null) {
// Really only need one of these, but need to get fontInfo
// stored in propMgr for later use.
propMgr.setFontInfo(fontInfo);
textInfo = propMgr.getTextLayoutProps(fontInfo);
// Really only need one of these, but need to get fontInfo
// stored in propMgr for later use.
propMgr.setFontInfo(fontInfo);
textInfo = propMgr.getTextLayoutProps(fontInfo);
}

FOText ft = new FOText(data, start, length, textInfo);
ft.setLogger(log);
ft.setUserAgent(userAgent);
ft.setStructHandler(structHandler);
addChild(ft);
}

+ 4
- 12
src/org/apache/fop/fo/Property.java Vedi File

@@ -15,8 +15,6 @@ import org.apache.fop.fo.expr.PropertyException;
import org.apache.fop.apps.FOPException;
import java.util.Vector;

import org.apache.avalon.framework.logger.Logger;

public class Property {

public static class Maker {
@@ -132,7 +130,7 @@ public class Property {
return setSubprop(baseProp, partName, p);
}
} else {
//log.error("compound property component "
//getLogger().error("compound property component "
// + partName + " unknown.");
}
return baseProp;
@@ -223,10 +221,10 @@ public class Property {
}
} catch (FOPException e) {

//log.error("convertShorthandProperty caught FOPException "
//getLogger().error("convertShorthandProperty caught FOPException "
// + e);
} catch (org.apache.fop.fo.expr.PropertyException propEx) {
//log.error("convertShorthandProperty caught PropertyException "
//getLogger().error("convertShorthandProperty caught PropertyException "
// + propEx);
}
if (pret != null) {
@@ -332,7 +330,7 @@ public class Property {
return make(propertyList, specVal,
propertyList.getParentFObj());
} catch (FOPException e) {
//log.error("Error computing property value for "
//getLogger()error("Error computing property value for "
// + propName + " from "
// + specVal);
return null;
@@ -359,12 +357,6 @@ public class Property {
*/
private String specVal;

protected Logger log;

public void setLogger(Logger logger) {
log = logger;
}

/**
* Set the original value specified for the property attribute.
* @param specVal The specified value.

+ 1
- 1
src/org/apache/fop/fo/ToBeImplementedElement.java Vedi File

@@ -22,7 +22,7 @@ public class ToBeImplementedElement extends FObj {
}

public void setup() {
log.debug("This element \"" + this.name
getLogger().debug("This element \"" + this.name
+ "\" is not yet implemented.");
}


+ 1
- 1
src/org/apache/fop/fo/Unknown.java Vedi File

@@ -33,6 +33,6 @@ public class Unknown extends FONode {
}

public void setup() {
log.debug("Layout Unknown element");
getLogger().debug("Layout Unknown element");
}
}

+ 1
- 1
src/org/apache/fop/fo/XMLObj.java Vedi File

@@ -138,7 +138,7 @@ public abstract class XMLObj extends FONode {
// in theory someone might want to embed some defined
// xml (eg. fo) inside the foreign xml
// they could use a different namespace
log.debug("Invalid element: " + child.getName() + " inside foreign xml markup");
getLogger().debug("Invalid element: " + child.getName() + " inside foreign xml markup");
}
}


+ 1
- 1
src/org/apache/fop/fo/flow/Block.java Vedi File

@@ -221,7 +221,7 @@ public class Block extends FObjMixed {
}

private void handleWhiteSpace() {
log.debug("fo:block: handleWhiteSpace");
getLogger().debug("fo:block: handleWhiteSpace");
if (firstInlineChild != null) {
boolean bInWS = false;
boolean bPrevWasLF = false;

+ 3
- 3
src/org/apache/fop/fo/flow/ExternalGraphic.java Vedi File

@@ -143,7 +143,7 @@ public class ExternalGraphic extends FObj {
cheight = (int)(fopimage.getHeight() * 1000);
}
if(scaling == Scaling.UNIFORM) {
// adjust the larger
// adjust the larger
double rat1 = cwidth / (fopimage.getWidth() * 1000f);
double rat2 = cheight / (fopimage.getHeight() * 1000f);
if(rat1 < rat2) {
@@ -167,7 +167,7 @@ public class ExternalGraphic extends FObj {
if(overflow == Overflow.HIDDEN) {
clip = true;
} else if(overflow == Overflow.ERROR_IF_OVERFLOW) {
log.error("Image: " + url + " overflows the viewport");
getLogger().error("Image: " + url + " overflows the viewport");
clip = true;
}
}
@@ -208,7 +208,7 @@ public class ExternalGraphic extends FObj {
// Common Accessibility Properties
AccessibilityProps mAccProps = propMgr.getAccessibilityProps();

// Common Aural Properties
// Common Aural Properties
AuralProps mAurProps = propMgr.getAuralProps();

// Common Border, Padding, and Background Properties

+ 4
- 4
src/org/apache/fop/fo/flow/InstreamForeignObject.java Vedi File

@@ -157,7 +157,7 @@ public class InstreamForeignObject extends FObj {
}
} else {*/
cheight = len.mvalue();
}
}

Point2D csize = new Point2D.Float(cwidth == -1 ? -1 : cwidth / 1000f, cheight == -1 ? -1 : cheight / 1000f);
Point2D size = child.getDimension(csize);
@@ -197,7 +197,7 @@ public class InstreamForeignObject extends FObj {
if(overflow == Overflow.HIDDEN) {
clip = true;
} else if(overflow == Overflow.ERROR_IF_OVERFLOW) {
log.error("Instream foreign object overflows the viewport");
getLogger().error("Instream foreign object overflows the viewport");
clip = true;
}
}
@@ -262,7 +262,7 @@ public class InstreamForeignObject extends FObj {

// Common Accessibility Properties
AccessibilityProps mAccProps = propMgr.getAccessibilityProps();
// Common Aural Properties
AuralProps mAurProps = propMgr.getAuralProps();

@@ -285,7 +285,7 @@ public class InstreamForeignObject extends FObj {
// this.properties.get("content-width");
// this.properties.get("display-align");
// this.properties.get("dominant-baseline");
// this.properties.get("height");
// this.properties.get("height");
setupID();
// this.properties.get("inline-progression-dimension");
// this.properties.get("keep-with-next");

+ 1
- 1
src/org/apache/fop/fo/flow/Marker.java Vedi File

@@ -36,7 +36,7 @@ public class Marker extends FObjMixed {
try {
((FObj)parent).addMarker(this);
} catch (FOPException fopex) {
log.error("marker cannot be added to '" + parent
getLogger().error("marker cannot be added to '" + parent
+ "'");
}
}

+ 2
- 2
src/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java Vedi File

@@ -75,7 +75,7 @@ public class ConditionalPageMasterReference extends FObj {
break;
case PagePosition.LAST:
// how the hell do you know at this point?
log.debug("LAST PagePosition NYI");
getLogger().warn("LAST PagePosition NYI");
okOnPagePosition = true;
break;
case PagePosition.REST:
@@ -147,7 +147,7 @@ public class ConditionalPageMasterReference extends FObj {
(RepeatablePageMasterAlternatives)parent;

if (getMasterName() == null) {
log.warn("single-page-master-reference"
getLogger().warn("single-page-master-reference"
+ "does not have a master-name and so is being ignored");
} else {
this.repeatablePageMasterAlternatives.addConditionalPageMasterReference(this);

+ 1
- 1
src/org/apache/fop/fo/pagination/PageMasterReference.java Vedi File

@@ -68,7 +68,7 @@ public abstract class PageMasterReference extends FObj
_pageSequenceMaster = (PageSequenceMaster)parent;

if (getMasterName() == null) {
log.warn("" + getName()
getLogger().warn("" + getName()
+ " does not have a master-reference and so is being ignored");
} else {
_pageSequenceMaster.addSubsequenceSpecifier(this);

+ 4
- 10
src/org/apache/fop/fo/pagination/PageNumberGenerator.java Vedi File

@@ -11,7 +11,7 @@ package org.apache.fop.fo.pagination;
import org.apache.fop.fo.properties.*;

// Avalon
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.AbstractLogEnabled;

// Java
import java.util.*;
@@ -21,7 +21,7 @@ import java.util.*;
* and 'letterValue' properties on fo:page-sequence to return a String
* corresponding to the supplied integer page number.
*/
public class PageNumberGenerator {
public class PageNumberGenerator extends AbstractLogEnabled {

private String format;
private char groupingSeparator;
@@ -44,8 +44,6 @@ public class PageNumberGenerator {
"", "0", "00", "000", "0000", "00000"
};

private Logger log;

public PageNumberGenerator(String format, char groupingSeparator,
int groupingSize, int letterValue) {
this.format = format;
@@ -70,7 +68,7 @@ public class PageNumberGenerator {
formatType = UPPERROMAN;
} else {
// token not handled
//log.debug("'format' token not recognized; using '1'");
//getLogger().debug("'format' token not recognized; using '1'");
formatType = DECIMAL;
minPadding = 0;
}
@@ -80,7 +78,7 @@ public class PageNumberGenerator {
// loop
for (int i = 0; i < fmtLen - 1; i++) {
if (format.charAt(i) != '0') {
//log.debug("'format' token not recognized; using '1'");
//getLogger().debug("'format' token not recognized; using '1'");
formatType = DECIMAL;
minPadding = 0;
} else {
@@ -90,10 +88,6 @@ public class PageNumberGenerator {
}
}

public void setLogger(Logger logger) {
log = logger;
}

public String makeFormattedPageNumber(int number) {
String pn = null;
if (formatType == DECIMAL) {

+ 102
- 106
src/org/apache/fop/fo/pagination/PageSequence.java Vedi File

@@ -180,9 +180,9 @@ public class PageSequence extends FObj {


masterName = this.properties.get("master-reference").getString();
// TODO: Add code here to set a reference to the PageSequenceMaster
// if the masterName names a page-sequence-master, else get a
// reference to the SimplePageMaster. Throw an exception if neither?
// TODO: Add code here to set a reference to the PageSequenceMaster
// if the masterName names a page-sequence-master, else get a
// reference to the SimplePageMaster. Throw an exception if neither?

// get the 'format' properties
this.pageNumberGenerator =
@@ -190,6 +190,7 @@ public class PageSequence extends FObj {
this.properties.get("grouping-separator").getCharacter(),
this.properties.get("grouping-size").getNumber().intValue(),
this.properties.get("letter-value").getEnum());
this.pageNumberGenerator.enableLogging(getLogger());

this.forcePageCount =
this.properties.get("force-page-count").getEnum();
@@ -211,7 +212,7 @@ public class PageSequence extends FObj {
throw new FOPException("flow-names must be unique within an fo:page-sequence");
}
if (!this.layoutMasterSet.regionNameExists(flow.getFlowName())) {
log.error("region-name '"
getLogger().error("region-name '"
+ flow.getFlowName()
+ "' doesn't exist in the layout-master-set.");
}
@@ -228,64 +229,59 @@ public class PageSequence extends FObj {
* @param child The flow object child to be added to the PageSequence.
*/
public void addChild(FONode child) {
try {
String childName = child.getName();
if (childName.equals("fo:title")) {
if (this._flowMap.size()>0) {
log.warn("fo:title should be first in page-sequence");
} else {
this.titleFO = (Title)child;
structHandler.startPageSequence(this, titleFO, layoutMasterSet);
sequenceStarted = true;
}
}
else if (childName.equals("fo:flow")) {
if (this.mainFlow != null) {
throw new FOPException("Only a single fo:flow permitted"
+ " per fo:page-sequence");
}
else {
if(!sequenceStarted) {
try {
String childName = child.getName();
if (childName.equals("fo:title")) {
if (this._flowMap.size()>0) {
getLogger().warn("fo:title should be first in page-sequence");
} else {
this.titleFO = (Title)child;
structHandler.startPageSequence(this, titleFO, layoutMasterSet);
sequenceStarted = true;
}
} else if (childName.equals("fo:flow")) {
if (this.mainFlow != null) {
throw new FOPException("Only a single fo:flow permitted"
+ " per fo:page-sequence");
} else {
if(!sequenceStarted) {
structHandler.startPageSequence(this, titleFO, layoutMasterSet);
sequenceStarted = true;
}
this.mainFlow = (Flow)child;
addFlow(mainFlow);
super.addChild(child); // For getChildren
}
}
else if (childName.equals("fo:static-content")) {
if (this.mainFlow != null) {
throw new FOPException(childName +
" must precede fo:flow; ignoring");
}
else {
this.mainFlow = (Flow)child;
addFlow(mainFlow);
super.addChild(child); // For getChildren
}
} else if (childName.equals("fo:static-content")) {
if (this.mainFlow != null) {
throw new FOPException(childName +
" must precede fo:flow; ignoring");
} else {
if(!sequenceStarted) {
structHandler.startPageSequence(this, titleFO, layoutMasterSet);
sequenceStarted = true;
}
addFlow((Flow)child);
}
}
else {
// Ignore it!
log.warn("FO '" + childName +
"' not a legal page-sequence child.");
return;
}
} catch (FOPException fopex) {
log.error("Error in PageSequence.addChild(): " +
fopex.getMessage());
}
addFlow((Flow)child);
}
} else {
// Ignore it!
getLogger().warn("FO '" + childName +
"' not a legal page-sequence child.");
return;
}
} catch (FOPException fopex) {
getLogger().error("Error in PageSequence.addChild(): " +
fopex.getMessage(), fopex);
}
}

public void end() {
try {
this.structHandler.endPageSequence(this);
} catch (FOPException fopex) {
log.error("Error in PageSequence.end(): " +
fopex.getMessage());
}
try {
this.structHandler.endPageSequence(this);
} catch (FOPException fopex) {
getLogger().error("Error in PageSequence.end(): " +
fopex.getMessage(), fopex);
}
}


@@ -315,22 +311,22 @@ public class PageSequence extends FObj {
* Runs the formatting of this page sequence into the given area tree
*/
public void format(AreaTree areaTree) throws FOPException {
// Make a new PageLayoutManager and a FlowLayoutManager
// Run the PLM in a thread
// Wait for them to finish.
// If no main flow, nothing to layout!
if (this.mainFlow == null) return;
// Initialize if already used?
// Make a new PageLayoutManager and a FlowLayoutManager
// Run the PLM in a thread
// Wait for them to finish.
// If no main flow, nothing to layout!
if (this.mainFlow == null) return;
// Initialize if already used?
this.layoutMasterSet.resetPageMasters();

int firstAvailPageNumber = 0;

// This will layout pages and add them to the area tree
PageLayoutManager pageLM = new PageLayoutManager(areaTree, this);
// For now, skip the threading and just call run directly.
pageLM.run();
// This will layout pages and add them to the area tree
PageLayoutManager pageLM = new PageLayoutManager(areaTree, this);
// For now, skip the threading and just call run directly.
pageLM.run();

// Thread layoutThread = new Thread(pageLM);
// layoutThread.start();
@@ -343,30 +339,30 @@ public class PageSequence extends FObj {
// } catch (InterruptedException ie) {
// log.error("PageSequence.format() interrupted waiting on layout");
// }
// Tell the root the last page number we created.
this.root.setRunningPageNumberCounter(this.currentPageNumber);
// Tell the root the last page number we created.
this.root.setRunningPageNumberCounter(this.currentPageNumber);
}

private void initPageNumber() {
this.currentPageNumber = this.root.getRunningPageNumberCounter() + 1;
if (this.pageNumberType == AUTO_ODD) {
// Next page but force odd. May force empty page creation!
// Whose master is used for this??? Assume no.
// Use force-page-count=auto
// on preceding page-sequence to make sure that there is no gap!
if (currentPageNumber % 2 == 0) {
this.currentPageNumber++;
}
} else if (pageNumberType == AUTO_EVEN) {
if (currentPageNumber % 2 == 1) {
this.currentPageNumber++;
}
}
else if (pageNumberType == EXPLICIT) {
this.currentPageNumber = this.explicitFirstNumber;
}
this.firstPageNumber = this.currentPageNumber;
this.currentPageNumber = this.root.getRunningPageNumberCounter() + 1;
if (this.pageNumberType == AUTO_ODD) {
// Next page but force odd. May force empty page creation!
// Whose master is used for this??? Assume no.
// Use force-page-count=auto
// on preceding page-sequence to make sure that there is no gap!
if (currentPageNumber % 2 == 0) {
this.currentPageNumber++;
}
} else if (pageNumberType == AUTO_EVEN) {
if (currentPageNumber % 2 == 1) {
this.currentPageNumber++;
}
}
else if (pageNumberType == EXPLICIT) {
this.currentPageNumber = this.explicitFirstNumber;
}
this.firstPageNumber = this.currentPageNumber;
}

/**
@@ -376,22 +372,22 @@ public class PageSequence extends FObj {
* @param bIsBlank If true, use a master for a blank page.
* @param bIsLast If true, use the master for the last page in the sequence.
*/
public PageViewport createPage(boolean bIsBlank, boolean bIsLast)
throws FOPException
public PageViewport createPage(boolean bIsBlank, boolean bIsLast)
throws FOPException
{

// Set even/odd flag and first flag based on current state
// Should do it this way, but fix it later....
/*boolean bEvenPage = ((this.currentPageNumber %2)==0);
currentPage = makePage(bEvenPage, */
currentPage = makePage(this.currentPageNumber,
this.currentPageNumber==this.firstPageNumber,
bIsLast, bIsBlank);
return currentPage;
// The page will have a viewport/reference area pair defined
// for each region in the master.
// Set up the page itself
// currentPage.setNumber(this.currentPageNumber);
// Set even/odd flag and first flag based on current state
// Should do it this way, but fix it later....
/*boolean bEvenPage = ((this.currentPageNumber %2)==0);
currentPage = makePage(bEvenPage, */
currentPage = makePage(this.currentPageNumber,
this.currentPageNumber==this.firstPageNumber,
bIsLast, bIsBlank);
return currentPage;
// The page will have a viewport/reference area pair defined
// for each region in the master.
// Set up the page itself
// currentPage.setNumber(this.currentPageNumber);
// SKIP ALL THIS FOR NOW!!!
// String formattedPageNumber =
// pageNumberGenerator.makeFormattedPageNumber(this.currentPageNumber);
@@ -412,7 +408,7 @@ public class PageSequence extends FObj {
// this.pageCount++; // used for 'force-page-count' calculations

// handle the 'force-page-count'
//forcePage(areaTree, firstAvailPageNumber);
//forcePage(areaTree, firstAvailPageNumber);
}

/**
@@ -422,13 +418,13 @@ public class PageSequence extends FObj {
* @param isFirstPage true when this is the first page in the sequence
* @param isEmptyPage true if this page will be empty
* (e.g. forced even or odd break)
* @return a Page layout object based on the page master selected
* @return a Page layout object based on the page master selected
* from the params
* TODO: modify the other methods to use even/odd flag and bIsLast
*/
private PageViewport makePage(int firstAvailPageNumber,
boolean isFirstPage, boolean bIsLast,
boolean isEmptyPage) throws FOPException {
boolean isFirstPage, boolean bIsLast,
boolean isEmptyPage) throws FOPException {
// layout this page sequence

// while there is still stuff in the flow, ask the
@@ -441,7 +437,7 @@ public class PageSequence extends FObj {

// a legal alternative is to use the last sub-sequence
// specification which should be handled in getNextSubsequence.
// That's not done here.
// That's not done here.
if (pageMaster == null) {
throw new FOPException("page masters exhausted. Cannot recover.");
}
@@ -587,7 +583,7 @@ public class PageSequence extends FObj {
SubSequenceSpecifier nextSubsequence =
getNextSubsequence(sequenceMaster);
if (nextSubsequence == null) {
log.error("Page subsequences exhausted. Using previous subsequence.");
getLogger().error("Page subsequences exhausted. Using previous subsequence.");
thisIsFirstPage =
true; // this becomes the first page in the new (old really) page master
currentSubsequence.reset();
@@ -679,7 +675,7 @@ public class PageSequence extends FObj {

// } else {

// System.out.println("flow is null. regionClass = '" + regionClass
// getLogger().error("flow is null. regionClass = '" + regionClass
// + "' currentSPM = "
// + getCurrentSimplePageMaster());


+ 1
- 1
src/org/apache/fop/fo/pagination/PageSequenceMaster.java Vedi File

@@ -47,7 +47,7 @@ public class PageSequenceMaster extends FObj {
this.layoutMasterSet = (LayoutMasterSet)parent;
String pm = this.properties.get("master-name").getString();
if (pm == null) {
log.warn("page-sequence-master does not have "
getLogger().warn("page-sequence-master does not have "
+ "a master-name and so is being ignored");
} else {
this.layoutMasterSet.addPageSequenceMaster(pm, this);

+ 29
- 29
src/org/apache/fop/fo/pagination/RegionBody.java Vedi File

@@ -34,20 +34,20 @@ public class RegionBody extends Region {

protected Rectangle getViewportRectangle (FODimension reldims)
{
/*
* Use space-before and space-after which will use corresponding
* absolute margin properties if specified. For indents:
* try to get corresponding absolute margin property using the
* writing-mode on the page (not on the region-body!). If that's not
* set but indent is explicitly set, it will return that.
*/
/*
* Use space-before and space-after which will use corresponding
* absolute margin properties if specified. For indents:
* try to get corresponding absolute margin property using the
* writing-mode on the page (not on the region-body!). If that's not
* set but indent is explicitly set, it will return that.
*/
MarginProps mProps = propMgr.getMarginProps();
int start = getRelMargin(PropertyList.START, "start-indent");
return new Rectangle( start, mProps.spaceBefore,
reldims.ipd - start -
getRelMargin(PropertyList.END, "end-indent"),
reldims.bpd - mProps.spaceBefore -
mProps.spaceAfter);
int start = getRelMargin(PropertyList.START, "start-indent");
return new Rectangle( start, mProps.spaceBefore,
reldims.ipd - start -
getRelMargin(PropertyList.END, "end-indent"),
reldims.bpd - mProps.spaceBefore -
mProps.spaceAfter);
}

/**
@@ -55,18 +55,18 @@ public class RegionBody extends Region {
* writing mode.
*/
private int getRelMargin(int reldir, String sRelPropName) {
FObj parent = (FObj) getParent();
String sPropName = "margin-" +
parent.properties.wmRelToAbs(reldir);
Property prop = properties.getExplicitBaseProp(sPropName);
if (prop == null) {
prop = properties.getExplicitBaseProp(sRelPropName);
}
return ((prop != null)? prop.getLength().mvalue() : 0);
FObj parent = (FObj) getParent();
String sPropName = "margin-" +
parent.properties.wmRelToAbs(reldir);
Property prop = properties.getExplicitBaseProp(sPropName);
if (prop == null) {
prop = properties.getExplicitBaseProp(sRelPropName);
}
return ((prop != null)? prop.getLength().mvalue() : 0);
}

protected void setRegionTraits(RegionReference r, Rectangle2D absRegVPRect) {
super.setRegionTraits(r, absRegVPRect);
super.setRegionTraits(r, absRegVPRect);

// r.setBackgroundColor(backgroundColor);
}
@@ -88,24 +88,24 @@ public class RegionBody extends Region {
* Override the inherited method.
*/
public RegionReference makeRegionReferenceArea(Rectangle2D absRegVPRect) {
// Should set some column stuff here I think, or put it elsewhere
BodyRegion body = new BodyRegion();
setRegionTraits(body, absRegVPRect);
// Should set some column stuff here I think, or put it elsewhere
BodyRegion body = new BodyRegion();
setRegionTraits(body, absRegVPRect);
int columnCount=
this.properties.get("column-count").getNumber().intValue();
if ((columnCount > 1) && (overflow == Overflow.SCROLL)) {
// recover by setting 'column-count' to 1. This is allowed but
// not required by the spec.
log.error("Setting 'column-count' to 1 because "
getLogger().error("Setting 'column-count' to 1 because "
+ "'overflow' is set to 'scroll'");
columnCount = 1;
}
body.setColumnCount(columnCount);
body.setColumnCount(columnCount);

int columnGap =
this.properties.get("column-gap").getLength().mvalue();
body.setColumnGap(columnGap);
return body;
body.setColumnGap(columnGap);
return body;
}

}

+ 36
- 37
src/org/apache/fop/fo/pagination/SimplePageMaster.java Vedi File

@@ -51,7 +51,7 @@ public class SimplePageMaster extends FObj {
LayoutMasterSet layoutMasterSet = (LayoutMasterSet)parent;
masterName = this.properties.get("master-name").getString();
if (masterName == null) {
log.warn("simple-page-master does not have "
getLogger().warn("simple-page-master does not have "
+ "a master-name and so is being ignored");
} else {
layoutMasterSet.addSimplePageMaster(this);
@@ -79,48 +79,48 @@ public class SimplePageMaster extends FObj {
// Get absolute margin properties (top, left, bottom, right)
MarginProps mProps = propMgr.getMarginProps();

/* Create the page reference area rectangle in first quadrant coordinates
* (ie, 0,0 is at bottom,left of the "page media" and y increases
* when moving towards the top of the page.
* The media rectangle itself is (0,0,pageWidth,pageHeight).
*/
Rectangle pageRefRect =
new Rectangle(mProps.marginLeft, mProps.marginTop,
pageWidth - mProps.marginLeft - mProps.marginRight,
pageHeight - mProps.marginTop - mProps.marginBottom);
/* Create the page reference area rectangle in first quadrant coordinates
* (ie, 0,0 is at bottom,left of the "page media" and y increases
* when moving towards the top of the page.
* The media rectangle itself is (0,0,pageWidth,pageHeight).
*/
Rectangle pageRefRect =
new Rectangle(mProps.marginLeft, mProps.marginTop,
pageWidth - mProps.marginLeft - mProps.marginRight,
pageHeight - mProps.marginTop - mProps.marginBottom);

// ??? KL shouldn't this take the viewport too???
Page page = new Page(); // page reference area
// ??? KL shouldn't this take the viewport too???
Page page = new Page(); // page reference area

// Set up the CTM on the page reference area based on writing-mode
// and reference-orientation
FODimension reldims=new FODimension(0,0);
CTM pageCTM = propMgr.getCTMandRelDims(pageRefRect, reldims);
FODimension reldims=new FODimension(0,0);
CTM pageCTM = propMgr.getCTMandRelDims(pageRefRect, reldims);

// Create a RegionViewport/ reference area pair for each page region
// Create a RegionViewport/ reference area pair for each page region

boolean bHasBody=false;
boolean bHasBody=false;

for (Iterator regenum = _regions.values().iterator();
regenum.hasNext(); ) {
Region r = (Region)regenum.next();
RegionViewport rvp = r.makeRegionViewport(reldims, pageCTM);
rvp.setRegion(r.makeRegionReferenceArea(rvp.getViewArea()));
page.setRegion(r.getRegionAreaClass(), rvp);
if (r.getRegionAreaClass() == RegionReference.BODY) {
bHasBody = true;
}
RegionViewport rvp = r.makeRegionViewport(reldims, pageCTM);
rvp.setRegion(r.makeRegionReferenceArea(rvp.getViewArea()));
page.setRegion(r.getRegionAreaClass(), rvp);
if (r.getRegionAreaClass() == RegionReference.BODY) {
bHasBody = true;
}
}

if (!bHasBody) {
log.error("simple-page-master has no region-body");
if (!bHasBody) {
getLogger().error("simple-page-master has no region-body");
}

this.pageMaster = new PageMaster(new PageViewport(page,
new Rectangle(0,0,
pageWidth,pageHeight)));
this.pageMaster = new PageMaster(new PageViewport(page,
new Rectangle(0,0,
pageWidth,pageHeight)));

// _regions = null; // PageSequence access SimplePageMaster....
// _regions = null; // PageSequence access SimplePageMaster....
children = null;
properties = null;
}
@@ -142,19 +142,18 @@ public class SimplePageMaster extends FObj {
}

protected void addChild(FONode child) {
if (child instanceof Region) {
addRegion((Region)child);
}
else {
log.error("SimplePageMaster cannot have child of type " +
child.getName());
}
if (child instanceof Region) {
addRegion((Region)child);
} else {
getLogger().error("SimplePageMaster cannot have child of type " +
child.getName());
}
}

protected void addRegion(Region region) {
String key = region.getRegionClass();
String key = region.getRegionClass();
if (_regions.containsKey(key)) {
log.error("Only one region of class "
getLogger().error("Only one region of class "
+ key
+ " allowed within a simple-page-master.");
// throw new FOPException("Only one region of class "

+ 9
- 14
src/org/apache/fop/render/AbstractRenderer.java Vedi File

@@ -15,7 +15,7 @@ import org.apache.fop.area.inline.Character;
import org.apache.fop.fo.FOUserAgent;

// Avalon
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.AbstractLogEnabled;

// Java
import java.awt.geom.Rectangle2D;
@@ -32,8 +32,7 @@ import java.util.Iterator;
* viewports. This keeps track of the current block and inline
* position.
*/
public abstract class AbstractRenderer implements Renderer {
protected Logger log;
public abstract class AbstractRenderer extends AbstractLogEnabled implements Renderer {
protected FOUserAgent userAgent;
protected HashMap options;

@@ -45,10 +44,6 @@ public abstract class AbstractRenderer implements Renderer {

protected int currentBlockIPPosition = 0;

public void setLogger(Logger logger) {
log = logger;
}

public void setUserAgent(FOUserAgent agent) {
userAgent = agent;
}
@@ -133,21 +128,21 @@ public abstract class AbstractRenderer implements Renderer {
protected void renderRegionViewport(RegionViewport port) {
if (port != null) {
Rectangle2D view = port.getViewArea();
// The CTM will transform coordinates relative to
// this region-reference area into page coords, so
// set origin for the region to 0,0.
// The CTM will transform coordinates relative to
// this region-reference area into page coords, so
// set origin for the region to 0,0.
currentBPPosition = 0; // (int) (view.getY() / 1000);
currentIPPosition = 0; // (int) (view.getX() / 1000);
currentBlockIPPosition = currentIPPosition;

RegionReference region = port.getRegion();
startVParea(region.getCTM());
startVParea(region.getCTM());
if (region.getRegionClass() == RegionReference.BODY) {
renderBodyRegion((BodyRegion) region);
} else {
renderRegion(region);
}
endVParea();
endVParea();
}
}

@@ -310,8 +305,8 @@ public abstract class AbstractRenderer implements Renderer {

public void renderInlineParent(InlineParent ip) {
// currentBlockIPPosition += ip.getWidth();
Iterator iter = ip.getChildAreas().iterator();
while (iter.hasNext()) {
Iterator iter = ip.getChildAreas().iterator();
while (iter.hasNext()) {
((InlineArea)iter.next()).render(this);
}
}

+ 3
- 8
src/org/apache/fop/render/Renderer.java Vedi File

@@ -13,9 +13,6 @@ import org.apache.fop.area.inline.*;
import org.apache.fop.layout.FontInfo;
import org.apache.fop.fo.FOUserAgent;

// Avalon
import org.apache.avalon.framework.logger.Logger;

// Java
import java.io.OutputStream;
import java.io.IOException;
@@ -32,15 +29,13 @@ import java.util.HashMap;
*/
public interface Renderer {

public static final String ROLE = Renderer.class.getName();


public void startRenderer(OutputStream outputStream) throws IOException;

public void stopRenderer() throws IOException;

/**
* Set the logger
*/
public void setLogger(Logger logger);

/**
* Set the User Agent
*/

+ 1
- 1
src/org/apache/fop/render/pcl/PCLRenderer.java Vedi File

@@ -162,7 +162,7 @@ public class PCLRenderer extends PrintRenderer {

public void startRenderer(OutputStream outputStream)
throws IOException {
log.info("rendering areas to PCL");
getLogger().info("rendering areas to PCL");
currentStream = new PCLStream(outputStream);

// Set orientation.

+ 4
- 4
src/org/apache/fop/render/ps/PSRenderer.java Vedi File

@@ -289,7 +289,7 @@ public class PSRenderer extends AbstractRenderer {
*/
public void startRenderer(OutputStream outputStream)
throws IOException {
log.debug("rendering areas to PostScript");
getLogger().debug("rendering areas to PostScript");

this.out = new PSStream(outputStream);
write("%!PS-Adobe-3.0");
@@ -307,7 +307,7 @@ public class PSRenderer extends AbstractRenderer {
/* Write proc for including EPS */
write("%%BeginResource: procset EPSprocs");
write("%%Title: EPS encapsulation procs");
write("/BeginEPSF { %def");
write("/b4_Inc_state save def % Save state for cleanup");
write("/dict_count countdictstack def % Count objects on dict stack");
@@ -324,14 +324,14 @@ public class PSRenderer extends AbstractRenderer {
write("} if");
write("} if");
write("} bind def");
write("/EndEPSF { %def");
write("count op_count sub {pop} repeat % Clean up stacks");
write("countdictstack dict_count sub {end} repeat");
write("b4_Inc_state restore");
write("} bind def");
write("%%EndResource");
write("%%EndSetup");
write("FOPFonts begin");
}

+ 1
- 1
src/org/apache/fop/render/svg/SVGRenderer.java Vedi File

@@ -161,7 +161,7 @@ public class SVGRenderer extends AbstractRenderer implements XMLHandler {
try {
svgT.transcode(input, output);
} catch (TranscoderException e) {
log.error("could not write svg file :" + e.getMessage(), e);
getLogger().error("could not write svg file :" + e.getMessage(), e);
}
ostream.flush();
ostream = null;

+ 3
- 3
src/org/apache/fop/render/txt/TXTRenderer.java Vedi File

@@ -81,7 +81,7 @@ public class TXTRenderer extends PrintRenderer {

void addStr(int row, int col, String str, boolean ischar) {
if (debug)
System.out.println("TXTRenderer.addStr(" + row + ", " + col
getLogger().debug("TXTRenderer.addStr(" + row + ", " + col
+ ", \"" + str + "\", " + ischar + ")");
if (suppressGraphics &&!ischar)
return;
@@ -105,14 +105,14 @@ public class TXTRenderer extends PrintRenderer {
for (int countr = sb.length(); countr < col; countr++)
sb.append(' ');
if (debug)
System.out.println("TXTRenderer.addStr() sb.length()="
getLogger().debug("TXTRenderer.addStr() sb.length()="
+ sb.length());
for (int countr = col; countr < (col + str.length()); countr++) {
if (countr >= sb.length())
sb.append(str.charAt(countr - col));
else {
if (debug)
System.out.println("TXTRenderer.addStr() sb.length()="
getLogger().debug("TXTRenderer.addStr() sb.length()="
+ sb.length() + " countr=" + countr);
sb.setCharAt(countr, str.charAt(countr - col));
}

+ 12
- 12
src/org/apache/fop/render/xml/XMLRenderer.java Vedi File

@@ -159,7 +159,7 @@ public class XMLRenderer extends AbstractRenderer {
*/
public void startRenderer(OutputStream outputStream)
throws IOException {
log.debug("rendering areas to XML");
getLogger().debug("rendering areas to XML");
this.writer = new PrintWriter(outputStream);
this.writer.write( "<?xml version=\"1.0\"?>\n<!-- produced by " +
this.producer + " -->\n");
@@ -172,7 +172,7 @@ public class XMLRenderer extends AbstractRenderer {
writeEndTag("</pageSequence>");
writeEndTag("</areaTree>");
this.writer.flush();
log.debug("written out XML");
getLogger().debug("written out XML");
}

public void renderPage(PageViewport page) throws IOException,
@@ -346,7 +346,7 @@ public class XMLRenderer extends AbstractRenderer {
prop = " props=\"" + getPropString(map) + "\"";
}
writeElement("<word wsadjust=\"" + word.getWSadjust() + "\"" +
prop + ">" + word.getWord() + "</word>");
prop + ">" + word.getWord() + "</word>");
super.renderWord(word);
}

@@ -358,7 +358,7 @@ public class XMLRenderer extends AbstractRenderer {
}
writeStartTag("<inlineparent" + prop + ">");
super.renderInlineParent(ip);
writeEndTag("</inlineparent>");
writeEndTag("</inlineparent>");
}

public void renderLeader(Leader area) {
@@ -389,15 +389,15 @@ public class XMLRenderer extends AbstractRenderer {

protected String getPropString(Map traitMap) {
StringBuffer strbuf = new StringBuffer();
Iterator iter = traitMap.entrySet().iterator();
while (iter.hasNext()) {
Iterator iter = traitMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry traitEntry = (Map.Entry) iter.next();
strbuf.append(Trait.getTraitName(traitEntry.getKey()));
strbuf.append(':');
strbuf.append(traitEntry.getValue().toString());
strbuf.append(';');
}
return strbuf.toString();
strbuf.append(Trait.getTraitName(traitEntry.getKey()));
strbuf.append(':');
strbuf.append(traitEntry.getValue().toString());
strbuf.append(';');
}
return strbuf.toString();
}

}

+ 3
- 3
src/org/apache/fop/svg/SVGElement.java Vedi File

@@ -76,7 +76,7 @@ public class SVGElement extends SVGObj {
((SVGOMDocument)doc).setURLObject(new URL(baseDir));
}
} catch (Exception e) {
log.error("Could not set base URL for svg", e);
getLogger().error("Could not set base URL for svg", e);
}

Element e = ((SVGDocument)doc).getRootElement();
@@ -142,7 +142,7 @@ public class SVGElement extends SVGObj {
str = svgRoot.getAttributeNS(null, SVGConstants.SVG_WIDTH_ATTRIBUTE);
if (str.length() == 0) str = "100%";
float width = UnitProcessor.svgHorizontalLengthToUserSpace
(str, SVGConstants.SVG_WIDTH_ATTRIBUTE, ctx);
(str, SVGConstants.SVG_WIDTH_ATTRIBUTE, ctx);

str = svgRoot.getAttributeNS(null, SVGConstants.SVG_HEIGHT_ATTRIBUTE);
if (str.length() == 0) str = "100%";
@@ -163,7 +163,7 @@ public class SVGElement extends SVGObj {
protected int fontSize;
float pixeltoMM;

public PDFUnitContext(int size, Element e, float ptmm) {
public PDFUnitContext(int size, Element e, float ptmm) {
this.e = e;
this.fontSize = size;
}

+ 24
- 22
src/org/apache/fop/tools/AreaTreeBuilder.java Vedi File

@@ -22,7 +22,7 @@ import org.apache.fop.layout.FontMetric;
import org.apache.fop.fo.FOUserAgent;

import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.AbstractLogEnabled;

import java.io.*;
import java.util.*;
@@ -49,13 +49,13 @@ import org.apache.batik.dom.util.DOMUtilities;
* Tests: different renderers, saving and loading pages with serialization
* out of order rendering
*/
public class AreaTreeBuilder {
private Logger log = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
public class AreaTreeBuilder extends AbstractLogEnabled {

/**
*/
public static void main(String[] args) {
AreaTreeBuilder atb = new AreaTreeBuilder();
atb.enableLogging(new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG));

atb.runTests(args[0], args[1], args[2]);
System.exit(0);
@@ -65,9 +65,9 @@ public class AreaTreeBuilder {
*
*/
protected void runTests(String in, String type, String out) {
log.debug("Starting tests");
getLogger().debug("Starting tests");
runTest(in, type, out);
log.debug("Finished");
getLogger().debug("Finished");
}

/**
@@ -81,9 +81,12 @@ public class AreaTreeBuilder {
} else if ("svg".equals(type)) {
rend = new SVGRenderer();
}
setupLogger(rend);
FontInfo fi = new FontInfo();
rend.setupFontInfo(fi);
rend.setUserAgent(new FOUserAgent());
FOUserAgent ua = new FOUserAgent();
setupLogger(ua);
rend.setUserAgent(ua);

AreaTree.StorePagesModel sm = AreaTree.createStorePagesModel();
TreeLoader tl = new TreeLoader(fi);
@@ -94,7 +97,7 @@ public class AreaTreeBuilder {
tl.buildAreaTree(is);
renderAreaTree(sm, rend, out);
} catch (IOException e) {
log.error("error reading file" + e.getMessage(), e);
getLogger().error("error reading file" + e.getMessage(), e);
}
}

@@ -104,7 +107,6 @@ public class AreaTreeBuilder {
OutputStream os =
new BufferedOutputStream(new FileOutputStream(out));

rend.setLogger(log);
rend.startRenderer(os);

int count = 0;
@@ -124,7 +126,7 @@ public class AreaTreeBuilder {
page.savePage(tempstream);
tempstream.close();
File temp = new File("temp.ser");
log.debug("page serialized to: " + temp.length());
getLogger().debug("page serialized to: " + temp.length());
temp = null;
ObjectInputStream in = new ObjectInputStream(
new BufferedInputStream(
@@ -140,7 +142,7 @@ public class AreaTreeBuilder {
rend.stopRenderer();
os.close();
} catch (Exception e) {
log.error("error rendering output", e);
getLogger().error("error rendering output", e);
}
}

@@ -410,7 +412,7 @@ class TreeLoader {
Node obj = childs.item(i);
if (obj.getNodeName().equals("block")) {
Block block = new Block();
addTraits((Element)obj, block);
addTraits((Element)obj, block);
addBlockChildren(block, (Element) obj);
list.add(block);
}
@@ -436,7 +438,7 @@ class TreeLoader {
// error
}
LineArea line = new LineArea();
addTraits((Element) obj, line);
addTraits((Element) obj, line);
String height = ((Element) obj).getAttribute("height");
int h = Integer.parseInt(height);
line.setHeight(h);
@@ -549,7 +551,7 @@ class TreeLoader {
for (int i = 0; i < childs.getLength(); i++) {
Node obj = childs.item(i);
if (obj instanceof Element) {
//System.out.println(obj.getNodeName());
//getLogger().debug(obj.getNodeName());
Element rootEle = (Element) obj;
String space = rootEle.getAttribute("xmlns");
if (svgNS.equals(space)) {
@@ -649,15 +651,15 @@ class TreeLoader {
String tok = st.nextToken();
int index = tok.indexOf(":");
String id = tok.substring(0, index);
Object traitCode = Trait.getTraitCode(id);
if (traitCode != null) {
area.addTrait(traitCode,
Trait.makeTraitValue(traitCode,
tok.substring(index + 1)));
}
else {
System.err.println("Unknown trait: " + id );
}
Object traitCode = Trait.getTraitCode(id);
if (traitCode != null) {
area.addTrait(traitCode,
Trait.makeTraitValue(traitCode,
tok.substring(index + 1)));
}
else {
System.err.println("Unknown trait: " + id );
}
}
}


+ 12
- 21
src/org/apache/fop/tools/TestConverter.java Vedi File

@@ -11,7 +11,7 @@ import org.apache.fop.apps.*;
import org.apache.fop.configuration.*;

import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.AbstractLogEnabled;

import java.io.*;
import java.util.*;
@@ -37,14 +37,13 @@ import org.xml.sax.SAXParseException;
* Modified by Mark Lillywhite mark-fop@inomial.com to use the new Driver
* interface.
*/
public class TestConverter {
public class TestConverter extends AbstractLogEnabled {
boolean failOnly = false;
boolean outputPDF = false;
File destdir;
File compare = null;
String baseDir = "./";
HashMap differ = new HashMap();
private Logger log;

/**
* This main method can be used to run the test converter from
@@ -61,6 +60,7 @@ public class TestConverter {
System.out.println("test suite file name required");
}
TestConverter tc = new TestConverter();
tc.enableLogging(new ConsoleLogger(ConsoleLogger.LEVEL_ERROR));

String testFile = null;
for (int count = 0; count < args.length; count++) {
@@ -81,14 +81,6 @@ public class TestConverter {
tc.runTests(testFile, "results", null);
}

public TestConverter() {
setupLogging();
}

private void setupLogging() {
log = new ConsoleLogger(ConsoleLogger.LEVEL_ERROR);
}

public void setOutputPDF(boolean pdf) {
outputPDF = pdf;
}
@@ -107,7 +99,7 @@ public class TestConverter {
* The document is read as a dom and each testcase is covered.
*/
public HashMap runTests(String fname, String dest, String compDir) {
log.debug("running tests in file:" + fname);
getLogger().debug("running tests in file:" + fname);
try {
if (compDir != null) {
compare = new File(baseDir + "/" + compDir);
@@ -131,7 +123,7 @@ public class TestConverter {
if (testsuite.hasAttributes()) {
String profile =
testsuite.getAttributes().getNamedItem("profile").getNodeValue();
log.debug("testing test suite:" + profile);
getLogger().debug("testing test suite:" + profile);
}

NodeList testcases = testsuite.getChildNodes();
@@ -142,7 +134,7 @@ public class TestConverter {
}
}
} catch (Exception e) {
e.printStackTrace();
getLogger().error("Error while running tests", e);
}
return differ;
}
@@ -157,7 +149,7 @@ public class TestConverter {
if (tcase.hasAttributes()) {
String profile =
tcase.getAttributes().getNamedItem("profile").getNodeValue();
log.debug("testing profile:" + profile);
getLogger().debug("testing profile:" + profile);
}

NodeList cases = tcase.getChildNodes();
@@ -201,7 +193,7 @@ public class TestConverter {
if (xslNode != null) {
xsl = xslNode.getNodeValue();
}
log.debug("converting xml:" + xml + " and xsl:" +
getLogger().debug("converting xml:" + xml + " and xsl:" +
xsl + " to area tree");

try {
@@ -211,7 +203,7 @@ public class TestConverter {
Configuration.put("baseDir",
xmlFile.getParentFile().toURL().toExternalForm());
} catch (Exception e) {
log.error("Error setting base directory");
getLogger().error("Error setting base directory");
}

InputHandler inputHandler = null;
@@ -226,9 +218,8 @@ public class TestConverter {
XMLReader parser = inputHandler.getParser();
setParserFeatures(parser);

Logger logger = log.getChildLogger("fop");
Driver driver = new Driver();
driver.setLogger(logger);
setupLogger(driver, "fop");
driver.initialize();
if (outputPDF) {
driver.setRenderer(Driver.RENDER_PDF);
@@ -249,7 +240,7 @@ public class TestConverter {
driver.setOutputStream(new BufferedOutputStream(
new FileOutputStream(new File(destdir,
outname + (outputPDF ? ".pdf" : ".at.xml")))));
log.debug("ddir:" + destdir + " on:" + outname + ".pdf");
getLogger().debug("ddir:" + destdir + " on:" + outname + ".pdf");
driver.render(parser, inputHandler.getInputSource());

// check difference
@@ -261,7 +252,7 @@ public class TestConverter {
}
}
} catch (Exception e) {
e.printStackTrace();
getLogger().error("Error while running tests", e);
}
}


+ 12
- 14
src/org/apache/fop/tools/anttasks/Fop.java Vedi File

@@ -177,6 +177,7 @@ public class Fop extends Task {
public void execute() throws BuildException {
try {
Starter starter = new FOPTaskStarter(this);
starter.enableLogging(new ConsoleLogger(ConsoleLogger.LEVEL_INFO));
starter.run();
} catch (FOPException ex) {
throw new BuildException(ex);
@@ -188,12 +189,9 @@ public class Fop extends Task {

class FOPTaskStarter extends Starter {
Fop task;
Logger log;

FOPTaskStarter(Fop task) throws FOPException {
this.task = task;

log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
}

private int determineRenderer(String format) {
@@ -219,7 +217,7 @@ class FOPTaskStarter extends Starter {
return Driver.RENDER_XML;
} else {
String err = "Couldn't determine renderer to use: "+format;
log.error(err);
getLogger().error(err);
throw new BuildException(err);
}
}
@@ -240,7 +238,7 @@ class FOPTaskStarter extends Starter {
return ".xml";
default:
String err = "Unknown renderer: "+renderer;
log.error(err);
getLogger().error(err);
throw new BuildException(err);
}
}
@@ -267,7 +265,7 @@ class FOPTaskStarter extends Starter {
toExternalForm());
}
} catch (Exception e) {
log.error("Error setting base directory",e);
getLogger().error("Error setting base directory", e);
}

task.log("Using base directory: " +
@@ -337,7 +335,7 @@ class FOPTaskStarter extends Starter {
try {
out = new FileOutputStream(outFile);
} catch (Exception ex) {
log.error("Failed to open " + outFile);
getLogger().error("Failed to open " + outFile);
throw new BuildException(ex);
}

@@ -345,18 +343,18 @@ class FOPTaskStarter extends Starter {

try {
Driver driver = new Driver(inputHandler.getInputSource(), out);
driver.setLogger(log);
setupLogger(driver);
driver.setRenderer(renderer);
if (renderer == Driver.RENDER_XML) {
HashMap rendererOptions = new HashMap();
rendererOptions.put("fineDetail", new Boolean(true));
driver.getRenderer().setOptions(rendererOptions);
}
if (renderer == Driver.RENDER_XML) {
HashMap rendererOptions = new HashMap();
rendererOptions.put("fineDetail", new Boolean(true));
driver.getRenderer().setOptions(rendererOptions);
}
driver.setXMLReader(parser);
driver.run();
out.close();
} catch (Exception ex) {
log.error("Couldn't render file: " + ex.getMessage());
getLogger().error("Couldn't render file: " + ex.getMessage());
throw new BuildException(ex);
}
}

Loading…
Annulla
Salva