]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Karen Lease's fix to fix FOP's SAX2-ness, and let Cocoon use us. Cool
authorSteve Coffman <gears@apache.org>
Mon, 21 Aug 2000 16:52:09 +0000 (16:52 +0000)
committerSteve Coffman <gears@apache.org>
Mon, 21 Aug 2000 16:52:09 +0000 (16:52 +0000)
beans!

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

src/org/apache/fop/apps/XTDriver.java
src/org/apache/fop/fo/FOTreeBuilder.java
src/org/apache/fop/fo/XTFOTreeBuilder.java

index 25ee265699340333f4dd78dfaec4dbc4f0320e4e..6b16c8ea8b9de9f590faae6541b65e4bedb7f755 100644 (file)
@@ -53,7 +53,7 @@ package org.apache.fop.apps;
 
 // FOP
 import org.apache.fop.fo.XTFOTreeBuilder;
-import org.apache.fop.fo.XTElementMapping;
+import org.apache.fop.fo.ElementMapping;
 import org.apache.fop.fo.PropertyListMapping;
 import org.apache.fop.layout.AreaTree;
 import org.apache.fop.layout.FontInfo;
@@ -174,7 +174,7 @@ public class XTDriver {
      *
      * an element mapping maps element names to Java classes
      */
-    public void addElementMapping(XTElementMapping mapping) {
+    public void addElementMapping(ElementMapping mapping) {
        mapping.addToBuilder(this.treeBuilder);
     }
     
@@ -189,11 +189,11 @@ public class XTDriver {
      * protected method used by addElementMapping(String) to
      * instantiate element mapping class
      */
-    protected XTElementMapping createElementMapping(String mappingClassName) {
+    protected ElementMapping createElementMapping(String mappingClassName) {
     MessageHandler.logln("using element mapping " + mappingClassName);
 
        try {
-           return (XTElementMapping)
+           return (ElementMapping)
                Class.forName(mappingClassName).newInstance();
        } catch (ClassNotFoundException e) {
            MessageHandler.errorln("Could not find " + mappingClassName);
@@ -212,7 +212,7 @@ public class XTDriver {
      * add the element mapping with the given class name
      */
     public void addPropertyList(String listClassName) {
-//     createPropertyList(listClassName).addToBuilder(this.treeBuilder);
+       createPropertyList(listClassName).addToBuilder(this.treeBuilder);
     }
 
     /**
index 51c2941e90971464997a61a7ea708e836308cd30..fd19592b23e6a0d147b46d27930e6bba455164bb 100644 (file)
@@ -99,55 +99,55 @@ public class FOTreeBuilder extends DefaultHandler {
     protected Hashtable unknownFOs = new Hashtable();
 
     // namespace implementation ideas pinched from John Cowan
-    protected static class NSMap {
-       String prefix;
-       String uri;
-       int level;
+//      protected static class NSMap {
+//     String prefix;
+//     String uri;
+//     int level;
 
-       NSMap(String prefix, String uri, int level) {
-           this.prefix = prefix;
-           this.uri = uri;
-           this.level = level;
-       }
-    }
+//     NSMap(String prefix, String uri, int level) {
+//         this.prefix = prefix;
+//         this.uri = uri;
+//         this.level = level;
+//     }
+//      }
 
-    protected int level = 0;
-    protected Stack namespaceStack = new Stack();
+//      protected int level = 0;
+//      protected Stack namespaceStack = new Stack();
 
-    {
-       namespaceStack.push(new NSMap("xml",
-                                     "http://www.w3.org/XML/1998/namespace",
-                                     -1));
-       namespaceStack.push(new NSMap("", "", -1));
-    }
+//      {
+//     namespaceStack.push(new NSMap("xml",
+//                                   "http://www.w3.org/XML/1998/namespace",
+//                                   -1));
+//     namespaceStack.push(new NSMap("", "", -1));
+//      }
 
-    protected String findURI(String prefix) {
-       for (int i = namespaceStack.size() - 1; i >= 0; i--) {
-           NSMap nsMap = (NSMap) (namespaceStack.elementAt(i));
-           if (prefix.equals(nsMap.prefix)) return nsMap.uri;
-       }
-       return null;
-    }
+//      protected String findURI(String prefix) {
+//     for (int i = namespaceStack.size() - 1; i >= 0; i--) {
+//         NSMap nsMap = (NSMap) (namespaceStack.elementAt(i));
+//         if (prefix.equals(nsMap.prefix)) return nsMap.uri;
+//     }
+//     return null;
+//      }
 
-    protected String mapName(String name)
-       throws SAXException {
-       int colon = name.indexOf(':');
-       String prefix = "";
-       String localPart = name;
-       if (colon != -1) {
-           prefix = name.substring(0, colon);
-           localPart = name.substring(colon + 1);
-       }
-       String uri = findURI(prefix);
-       if (uri == null) {
-           if (prefix.equals("")) {
-               return name;
-           } else {
-               throw new SAXException(new FOPException("Unknown namespace prefix " + prefix));
-           }
-       }
-       return uri + "^" + localPart;
-    }
+//      protected String mapName(String name)
+//     throws SAXException {
+//     int colon = name.indexOf(':');
+//     String prefix = "";
+//     String localPart = name;
+//     if (colon != -1) {
+//         prefix = name.substring(0, colon);
+//         localPart = name.substring(colon + 1);
+//     }
+//     String uri = findURI(prefix);
+//     if (uri == null) {
+//         if (prefix.equals("")) {
+//             return name;
+//         } else {
+//             throw new SAXException(new FOPException("Unknown namespace prefix " + prefix));
+//         }
+//     }
+//     return uri + "^" + localPart;
+//      }
 
     /**
      * add a mapping from element name to maker.
@@ -209,10 +209,10 @@ public class FOTreeBuilder extends DefaultHandler {
                String uri, String localName, String rawName) {
        currentFObj.end();
        currentFObj = (FObj) currentFObj.getParent();
-       level--;
-       while (((NSMap) namespaceStack.peek()).level > level) {
-           namespaceStack.pop();
-       }
+//      level--;
+//     while (((NSMap) namespaceStack.peek()).level > level) {
+//         namespaceStack.pop();
+//     }
     }
 
     /** SAX Handler for the start of the document */
@@ -230,25 +230,26 @@ public class FOTreeBuilder extends DefaultHandler {
        /* the maker for the formatting object started */
        FObj.Maker fobjMaker;
 
-       level++;
-       int length = attlist.getLength();
-       for (int i = 0; i < length; i++) {
-           String att = attlist.getQName(i);
-           if (att.equals("xmlns")) {
-               namespaceStack.push( new NSMap("",
-                                              attlist.getValue(i),
-                                              level));
-           } else if (att.startsWith("xmlns:")) {
-               String value = attlist.getValue(i);
-               namespaceStack.push(new NSMap(att.substring(6), value,
-                                             level));
-           }
-       }
-
-       String fullName = mapName(rawName);
+//     level++;
+//     int length = attlist.getLength();
+//     for (int i = 0; i < length; i++) {
+//         String att = attlist.getQName(i);
+//         if (att.equals("xmlns")) {
+//             namespaceStack.push( new NSMap("",
+//                                            attlist.getValue(i),
+//                                            level));
+//         } else if (att.startsWith("xmlns:")) {
+//             String value = attlist.getValue(i);
+//             namespaceStack.push(new NSMap(att.substring(6), value,
+//                                           level));
+//         }
+//     }
 
+       //String fullName = mapName(rawName);
+       String fullName = uri + "^" + localName;
        fobjMaker = (FObj.Maker) fobjTable.get(fullName);
-    PropertyListBuilder currentListBuilder = (PropertyListBuilder)this.propertylistTable.get(uri);
+       PropertyListBuilder currentListBuilder =
+         (PropertyListBuilder)this.propertylistTable.get(uri);
 
        if (fobjMaker == null) {
            if (!this.unknownFOs.containsKey(fullName)) {
@@ -262,8 +263,8 @@ public class FOTreeBuilder extends DefaultHandler {
        try {
                PropertyList list = null;
                if(currentListBuilder != null) {
-                       list = currentListBuilder.makeList(fullName, attlist,  
-                            (currentFObj == null) ? null : currentFObj.properties);
+                 list = currentListBuilder.makeList(fullName, attlist,  
+                       (currentFObj == null) ? null : currentFObj.properties);
                }
            fobj = fobjMaker.make(currentFObj, list);
        } catch (FOPException e) {
index 48ee7220e1fe6945f947064245b5914edfadf0fb..898138eb164aa14fceba9313506dc2adaa1c314f 100644 (file)
@@ -57,10 +57,11 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.pagination.Root;
 
 // SAX
-import org.xml.sax.HandlerBase;
 import org.xml.sax.SAXException;
-import org.xml.sax.InputSource;
 import org.xml.sax.Attributes;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.DocumentHandler;
+import org.xml.sax.AttributeList;
 
 // Java
 import java.util.Hashtable;
@@ -70,35 +71,9 @@ import java.io.IOException;
 /**
  * SAX Handler that builds the formatting object tree.
  */
-public class XTFOTreeBuilder extends HandlerBase {
-
-    /**
-     * table mapping element names to the makers of objects
-     * representing formatting objects
-     */
-    protected Hashtable fobjTable = new Hashtable();
-
-    /**
-     * class that builds a property list for each formatting object
-     */
-    protected Hashtable propertylistTable = new Hashtable();
-//    protected PropertyListBuilder propertyListBuilder = new
-//     PropertyListBuilder(); 
-       
-    /**
-     * current formatting object being handled
-     */
-    protected FObj currentFObj = null;
-
-    /**
-     * the root of the formatting object tree
-     */
-    protected FObj rootFObj = null;
-
-    /**
-     * set of names of formatting objects encountered but unknown
-     */
-    protected Hashtable unknownFOs = new Hashtable();
+//public class XTFOTreeBuilder extends HandlerBase {
+public class XTFOTreeBuilder extends FOTreeBuilder
+  implements DocumentHandler {
 
     // namespace implementation ideas pinched from John Cowan
     protected static class NSMap {
@@ -114,6 +89,8 @@ public class XTFOTreeBuilder extends HandlerBase {
     }
 
     protected int level = 0;
+    protected String m_uri = null;
+    protected String m_localPart = null;
     protected Stack namespaceStack = new Stack();
 
     {
@@ -133,110 +110,46 @@ public class XTFOTreeBuilder extends HandlerBase {
 
     protected String mapName(String name)
        throws SAXException {
+        
        int colon = name.indexOf(':');
        String prefix = "";
-       String localPart = name;
+       m_localPart = name;
        if (colon != -1) {
            prefix = name.substring(0, colon);
-           localPart = name.substring(colon + 1);
+           m_localPart = name.substring(colon + 1);
        }
-       String uri = findURI(prefix);
-       if (uri == null) {
+       m_uri = findURI(prefix);
+       if (m_uri == null) {
            if (prefix.equals("")) {
                return name;
            } else {
                throw new SAXException(new FOPException("Unknown namespace prefix " + prefix));
            }
        }
-       return uri + "^" + localPart;
-    }
-
-    /**
-     * add a mapping from element name to maker.
-     *
-     * @param namespaceURI namespace URI of formatting object element
-     * @param localName local name of formatting object element
-     * @param maker Maker for class representing formatting object
-    */
-    public void addMapping(String namespaceURI, String localName,
-                          FObj.Maker maker) {
-       this.fobjTable.put(namespaceURI + "^" + localName, maker);
-    }
-
-    /**
-     * add a mapping from element name to maker.
-     *
-     * @param namespaceURI namespace URI of formatting object element
-     * @param localName local name of formatting object element
-     * @param maker Maker for class representing formatting object
-    */
-    public void addPropertyList(String namespaceURI, Hashtable list) {
-        PropertyListBuilder plb;
-        plb = (PropertyListBuilder)this.propertylistTable.get(namespaceURI);
-        if(plb == null) {
-            plb = new PropertyListBuilder();
-            plb.addList(list);
-            this.propertylistTable.put(namespaceURI, plb);
-        } else {
-            plb.addList(list);
-        }
-    }
-
-    /**
-     * add a mapping from element name to maker.
-     *
-     * @param namespaceURI namespace URI of formatting object element
-     * @param localName local name of formatting object element
-     * @param maker Maker for class representing formatting object
-    */
-    public void addElementPropertyList(String namespaceURI, String localName, Hashtable list) {
-        PropertyListBuilder plb;
-        plb = (PropertyListBuilder)this.propertylistTable.get(namespaceURI);
-        if(plb == null) {
-            plb = new PropertyListBuilder();
-            plb.addElementList(localName, list);
-            this.propertylistTable.put(namespaceURI, plb);
-        } else {
-            plb.addElementList(localName, list);
-        }
-    }
-
-    /** SAX Handler for characters */
-    public void characters(char data[], int start, int length) {
-       currentFObj.addCharacters(data, start, start + length);
-    }
-
-    /** SAX Handler for the end of an element */
-    public void endElement(
-               String uri, String localName, String rawName) {
-       currentFObj.end();
-       currentFObj = (FObj) currentFObj.getParent();
-       level--;
-       while (((NSMap) namespaceStack.peek()).level > level) {
-           namespaceStack.pop();
-       }
+       return m_uri + "^" + m_localPart;
     }
 
-    /** SAX Handler for the start of the document */
-    public void startDocument() {
-       MessageHandler.logln("building formatting object tree");
+    /** SAX1 Handler for the end of an element */
+    public void endElement(String rawName) throws SAXException {
+      mapName(rawName);
+      super.endElement(m_uri, m_localPart, rawName);
+      level--;
+      while (((NSMap) namespaceStack.peek()).level > level) {
+       namespaceStack.pop();
+      }
     }
 
-    /** SAX Handler for the start of an element */
-    public void startElement(String uri,
-       String localName, String rawName, Attributes attlist)
+    /** SAX1 Handler for the start of an element */
+    public void startElement(String rawName, AttributeList attlist)
        throws SAXException { 
 
-       /* the formatting object started */
-       FObj fobj;
-
-       /* the maker for the formatting object started */
-       FObj.Maker fobjMaker;
+      // SAX2 version of AttributeList
+      AttributesImpl newAttrs = new AttributesImpl();
 
        level++;
        int length = attlist.getLength();
        for (int i = 0; i < length; i++) {
-           String att = attlist.getQName(i);
+           String att = attlist.getName(i);
            if (att.equals("xmlns")) {
                namespaceStack.push( new NSMap("",
                                               attlist.getValue(i),
@@ -245,53 +158,15 @@ public class XTFOTreeBuilder extends HandlerBase {
                String value = attlist.getValue(i);
                namespaceStack.push(new NSMap(att.substring(6), value,
                                              level));
+           } else {
+             mapName(att);
+             newAttrs.addAttribute(m_uri, m_localPart, att,
+                                   attlist.getType(i), attlist.getValue(i));
            }
-       }
-
-       String fullName = mapName(rawName);
-
-       fobjMaker = (FObj.Maker) fobjTable.get(fullName);
-       PropertyListBuilder plBuilder = (PropertyListBuilder)this.propertylistTable.get(uri);
-
-       if (fobjMaker == null) {
-           if (!this.unknownFOs.containsKey(fullName)) {
-               this.unknownFOs.put(fullName, "");
-               MessageHandler.errorln("WARNING: Unknown formatting object "
-                                  + fullName);  
-           }
-           fobjMaker = new FObjMixed.Maker(); // fall back
-       }
-       
-       try {
-               PropertyList list = plBuilder.makeList(fullName, attlist,  
-                    (currentFObj == null) ? null : currentFObj.properties);
-           fobj = fobjMaker.make(currentFObj, list);
-       } catch (FOPException e) {
-               throw new SAXException(e);
-       }
 
-       if (rootFObj == null) {
-           rootFObj = fobj;
-           if (!fobj.getName().equals("fo:root")) {
-               throw new SAXException(new FOPException("Root element must"
-                                                       + " be root, not "
-                                                       + fobj.getName())); 
-           }
-       } else {
-           currentFObj.addChild(fobj);
        }
-       
-       currentFObj = fobj;
-    }
 
-    /**
-     * format this formatting object tree
-     *
-     * @param areaTree the area tree to format into
-     */
-    public void format(AreaTree areaTree)
-       throws FOPException {
-       MessageHandler.logln("formatting FOs into areas");
-       ((Root) this.rootFObj).format(areaTree);
+      mapName(rawName);
+      super.startElement(m_uri, m_localPart, rawName, newAttrs);
     }
 }