aboutsummaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java')
-rw-r--r--src/java/org/apache/fop/fo/FONode.java13
-rw-r--r--src/java/org/apache/fop/fo/FOTreeBuilder.java15
-rw-r--r--src/java/org/apache/fop/fo/FObj.java15
-rw-r--r--src/java/org/apache/fop/fo/FObjMixed.java8
-rw-r--r--src/java/org/apache/fop/fo/UnknownXMLObj.java7
-rw-r--r--src/java/org/apache/fop/fo/XMLObj.java5
-rw-r--r--src/java/org/apache/fop/fo/extensions/Label.java6
7 files changed, 62 insertions, 7 deletions
diff --git a/src/java/org/apache/fop/fo/FONode.java b/src/java/org/apache/fop/fo/FONode.java
index fd118c1e1..0d9681a1c 100644
--- a/src/java/org/apache/fop/fo/FONode.java
+++ b/src/java/org/apache/fop/fo/FONode.java
@@ -55,6 +55,7 @@ import java.util.ListIterator;
// XML
import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
// Avalon
import org.apache.avalon.framework.logger.Logger;
@@ -91,6 +92,14 @@ public abstract class FONode {
}
/**
+ * Sets the name of the node.
+ * @param str the name
+ */
+ public void setLocation(Locator locator) {
+ // do nothing by default
+ }
+
+ /**
* Returns the logger for the node.
* @return the logger
*/
@@ -127,8 +136,10 @@ public abstract class FONode {
* @param data text
* @param start start position
* @param length length of the text
+ * @param locator location in fo source file.
*/
- protected void addCharacters(char data[], int start, int length) {
+ protected void addCharacters(char data[], int start, int length,
+ Locator locator) {
// ignore
}
diff --git a/src/java/org/apache/fop/fo/FOTreeBuilder.java b/src/java/org/apache/fop/fo/FOTreeBuilder.java
index 1152ac416..a3e4f993f 100644
--- a/src/java/org/apache/fop/fo/FOTreeBuilder.java
+++ b/src/java/org/apache/fop/fo/FOTreeBuilder.java
@@ -67,6 +67,7 @@ import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.fo.ElementMapping.Maker;
import org.apache.fop.fo.pagination.Root;
import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
@@ -110,6 +111,9 @@ public class FOTreeBuilder extends DefaultHandler {
/** The FOTreeControl object managing the FO Tree that is being built */
public FOTreeControl foTreeControl;
+ /** The SAX locator object maneging the line and column counters */
+ private Locator locator;
+
/**
* Default constructor
*/
@@ -205,12 +209,20 @@ public class FOTreeBuilder extends DefaultHandler {
}
/**
+ * SAX Handler for locator
+ * @see org.xml.sax.ContentHandler#setDocumentLocator(Locator)
+ */
+ public void setDocumentLocator(Locator locator) {
+ this.locator = locator;
+ }
+
+ /**
* SAX Handler for characters
* @see org.xml.sax.ContentHandler#characters(char[], int, int)
*/
public void characters(char data[], int start, int length) {
if (currentFObj != null) {
- currentFObj.addCharacters(data, start, start + length);
+ currentFObj.addCharacters(data, start, start + length, locator);
}
}
@@ -264,6 +276,7 @@ public class FOTreeBuilder extends DefaultHandler {
try {
fobj = fobjMaker.make(currentFObj);
fobj.setName(localName);
+ fobj.setLocation(locator);
fobj.handleAttrs(attlist);
} catch (FOPException e) {
throw new SAXException(e);
diff --git a/src/java/org/apache/fop/fo/FObj.java b/src/java/org/apache/fop/fo/FObj.java
index 79a6fdcd0..8066ff138 100644
--- a/src/java/org/apache/fop/fo/FObj.java
+++ b/src/java/org/apache/fop/fo/FObj.java
@@ -61,6 +61,7 @@ import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.flow.Marker;
import org.apache.fop.fo.properties.FOPropertyMapping;
import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
/**
* Base class for representation of formatting objects and their processing.
@@ -130,6 +131,12 @@ public class FObj extends FONode {
name = "fo:" + str;
}
+ public void setLocation(Locator locator) {
+ line = locator.getLineNumber();
+ column = locator.getColumnNumber();
+ systemId = locator.getSystemId();
+ }
+
/**
* Handle the attributes for this element.
* The attributes must be used immediately as the sax attributes
@@ -420,5 +427,13 @@ public class FObj extends FONode {
public void acceptVisitor(FOTreeVisitor fotv) {
fotv.serveFObj(this);
}
+
+ /**
+ * Return a string representation of the fo element.
+ */
+ public String toString() {
+ return getName() + " at line " + line + ":" + column;
+ }
+
}
diff --git a/src/java/org/apache/fop/fo/FObjMixed.java b/src/java/org/apache/fop/fo/FObjMixed.java
index 2bae957d7..17b3e7abd 100644
--- a/src/java/org/apache/fop/fo/FObjMixed.java
+++ b/src/java/org/apache/fop/fo/FObjMixed.java
@@ -50,6 +50,8 @@
*/
package org.apache.fop.fo;
+import org.xml.sax.Locator;
+
/**
* Base class for representation of mixed content formatting objects
* and their processing
@@ -69,8 +71,10 @@ public class FObjMixed extends FObj {
* @param data array of characters containing text to be added
* @param start starting array element to add
* @param length number of characters to add
+ * @param locator location in fo source file.
*/
- protected void addCharacters(char data[], int start, int length) {
+ protected void addCharacters(char data[], int start, int length,
+ Locator locator) {
if (textInfo == null) {
// Really only need one of these, but need to get fontInfo
// stored in propMgr for later use.
@@ -79,6 +83,8 @@ public class FObjMixed extends FObj {
}
FOText ft = new FOText(data, start, length, textInfo, this);
+ ft.setLocation(locator);
+ ft.setName("text");
/* characters() processing empty for FOTreeHandler, not empty for RTF & MIFHandlers */
getFOTreeControl().getFOInputHandler().characters(ft.ca, ft.start, ft.length);
diff --git a/src/java/org/apache/fop/fo/UnknownXMLObj.java b/src/java/org/apache/fop/fo/UnknownXMLObj.java
index fb353f181..5a8865b34 100644
--- a/src/java/org/apache/fop/fo/UnknownXMLObj.java
+++ b/src/java/org/apache/fop/fo/UnknownXMLObj.java
@@ -50,6 +50,8 @@
*/
package org.apache.fop.fo;
+import org.xml.sax.Locator;
+
/**
* Class for handling generic XML from a namespace not recognized by FOP
*/
@@ -111,11 +113,12 @@ public class UnknownXMLObj extends XMLObj {
/**
* @see XMLObj#addCharacters
*/
- protected void addCharacters(char data[], int start, int length) {
+ protected void addCharacters(char data[], int start, int length,
+ Locator locator) {
if (doc == null) {
createBasicDocument();
}
- super.addCharacters(data, start, length);
+ super.addCharacters(data, start, length, locator);
}
/**
diff --git a/src/java/org/apache/fop/fo/XMLObj.java b/src/java/org/apache/fop/fo/XMLObj.java
index 613fca806..783d43ad0 100644
--- a/src/java/org/apache/fop/fo/XMLObj.java
+++ b/src/java/org/apache/fop/fo/XMLObj.java
@@ -57,6 +57,7 @@ import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
import javax.xml.parsers.DocumentBuilderFactory;
// FOP
@@ -224,8 +225,10 @@ public abstract class XMLObj extends FONode {
* @param data array of characters contaning the text to add
* @param start starting array element to add
* @param length number of characters from the array to add
+ * @param locator location in fo source file.
*/
- protected void addCharacters(char data[], int start, int length) {
+ protected void addCharacters(char data[], int start, int length,
+ Locator locator) {
String str = new String(data, start, length - start);
org.w3c.dom.Text text = doc.createTextNode(str);
element.appendChild(text);
diff --git a/src/java/org/apache/fop/fo/extensions/Label.java b/src/java/org/apache/fop/fo/extensions/Label.java
index 914309203..15b3491b0 100644
--- a/src/java/org/apache/fop/fo/extensions/Label.java
+++ b/src/java/org/apache/fop/fo/extensions/Label.java
@@ -50,6 +50,8 @@
*/
package org.apache.fop.fo.extensions;
+import org.xml.sax.Locator;
+
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FOTreeVisitor;
@@ -77,8 +79,10 @@ public class Label extends ExtensionObj {
* @param data the character data
* @param start the start position in the data array
* @param end the end position in the character array
+ * @param locator location in fo source file.
*/
- protected void addCharacters(char data[], int start, int end) {
+ protected void addCharacters(char data[], int start, int end,
+ Locator locator) {
label += new String(data, start, end - start);
}