]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
----------------------------------------------------------------------
authorGlen Mazza <gmazza@apache.org>
Fri, 26 Dec 2003 22:11:17 +0000 (22:11 +0000)
committerGlen Mazza <gmazza@apache.org>
Fri, 26 Dec 2003 22:11:17 +0000 (22:11 +0000)
Bug #25646 (Patch by Finn Bock):  setting SAX Locator (line and column
index of input fo stream) for debugging and better error feedback.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197054 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/FOTreeBuilder.java
src/java/org/apache/fop/fo/FObj.java
src/java/org/apache/fop/fo/FObjMixed.java
src/java/org/apache/fop/fo/UnknownXMLObj.java
src/java/org/apache/fop/fo/XMLObj.java
src/java/org/apache/fop/fo/extensions/Label.java

index fd118c1e1b0eb43a6fba97d49df11f32beab1380..0d9681a1c8da94b226ae0ec395b79ea19770889c 100644 (file)
@@ -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;
@@ -90,6 +91,14 @@ public abstract class FONode {
         name = str;
     }
 
+    /**
+     * 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
     }
 
index 1152ac416204f5e775edf190e1f4b64c3d1661d2..a3e4f993f023e5c30280cf599cd44cf1bc502515 100644 (file)
@@ -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
      */
@@ -204,13 +208,21 @@ 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);
index 79a6fdcd075be81c67b32618d93a995d8261edd2..8066ff13852cbc4540ae29f543afe9c15cb9fe0b 100644 (file)
@@ -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;
+    }
+    
 }
 
index 2bae957d71fd504eea29ac57e6c6425512d97140..17b3e7abd91ca322ad0da8ca0a5495f6d7cdebf1 100644 (file)
@@ -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);
index fb353f18164129b05ab73ba6311324fd0cd12a10..5a8865b345bfb8376eaef2ae6521b939f35d39a1 100644 (file)
@@ -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);
     }
 
     /**
index 613fca80697a457ccb4607c476e85b668575b544..783d43ad0588a91d66b50e15a63015fe1af95fc5 100644 (file)
@@ -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);
index 91430920319e5283e35d7d7d6e69e2819853e457..15b3491b0527a1310b76e7757d924dab9651cd96 100644 (file)
@@ -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);
     }