+++ /dev/null
-/*
- * $Id$
- * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
- * For details on use and redistribution please refer to the
- * LICENSE file included with these sources.
- */
-
-package org.apache.fop.apps;
-
-// FOP
-import org.apache.fop.fo.XTFOTreeBuilder;
-import org.apache.fop.fo.ElementMapping;
-import org.apache.fop.layout.AreaTree;
-import org.apache.fop.layout.FontInfo;
-import org.apache.fop.render.Renderer;
-import org.apache.fop.messaging.MessageHandler;
-
-// DOM
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Attr;
-
-// SAX
-import org.xml.sax.DocumentHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.Parser;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-// Java
-import java.io.*;
-
-/**
- * <P>Primary class that drives overall FOP process.
- *
- * <P>Once this class is instantiated, methods are called to set the
- * Renderer to use, the (possibly multiple) ElementMapping(s) to
- * use and the PrintWriter to use to output the results of the
- * rendering (where applicable). In the case of the Renderer and
- * ElementMapping(s), the Driver may be supplied either with the
- * object itself, or the name of the class, in which case Driver will
- * instantiate the class itself. The advantage of the latter is it
- * enables runtime determination of Renderer and ElementMapping(s).
- *
- * <P>Once the Driver is set up, the buildFOTree method
- * is called. Depending on whether DOM or SAX is being used, the
- * invocation of the method is either buildFOTree(Document) or
- * buildFOTree(Parser, InputSource) respectively.
- *
- * <P>A third possibility may be used to build the FO Tree, namely
- * calling getDocumentHandler() and firing the SAX events yourself.
- *
- * <P>Once the FO Tree is built, the format() and render() methods may be
- * called in that order.
- *
- * <P>Here is an example use of Driver from CommandLine.java:
- *
- * <PRE>
- * Driver driver = new Driver();
- * driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);
- * driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
- * driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
- * driver.setWriter(new PrintWriter(new FileWriter(args[1])));
- * driver.buildFOTree(parser, fileInputSource(args[0]));
- * driver.format();
- * driver.render();
- * </PRE>
- */
-public class XTDriver {
-
- /**
- * the FO tree builder
- */
- protected XTFOTreeBuilder treeBuilder;
-
- /**
- * the area tree that is the result of formatting the FO tree
- */
- protected AreaTree areaTree;
-
- /**
- * the renderer to use to output the area tree
- */
- protected Renderer renderer;
-
- /**
- * the PrintWriter to use to output the results of the renderer
- */
- protected PrintWriter writer;
-
- /**
- * the stream to use to output the results of the renderer
- */
- protected OutputStream stream;
-
- /**
- * create a new Driver
- */
- public XTDriver() {
- this.treeBuilder = new XTFOTreeBuilder();
- }
-
- /**
- * set the Renderer to use
- */
- public void setRenderer(Renderer renderer) {
- this.renderer = renderer;
- }
-
- /**
- * set the class name of the Renderer to use as well as the
- * producer string for those renderers that can make use of it
- */
- public void setRenderer(String rendererClassName, String producer) {
- this.renderer = createRenderer(rendererClassName);
- this.renderer.setProducer(producer);
- }
-
- /**
- * protected method used by setRenderer(String, String) to
- * instantiate the Renderer class
- */
- protected Renderer createRenderer(String rendererClassName) {
- MessageHandler.logln("using renderer " + rendererClassName);
-
- try {
- return (Renderer)Class.forName(rendererClassName).newInstance();
- } catch (ClassNotFoundException e) {
- MessageHandler.errorln("Could not find " + rendererClassName);
- } catch (InstantiationException e) {
- MessageHandler.errorln("Could not instantiate "
- + rendererClassName);
- } catch (IllegalAccessException e) {
- MessageHandler.errorln("Could not access " + rendererClassName);
- } catch (ClassCastException e) {
- MessageHandler.errorln(rendererClassName + " is not a renderer");
- }
- return null;
- }
-
- /**
- * add the given element mapping.
- *
- * an element mapping maps element names to Java classes
- */
- public void addElementMapping(ElementMapping mapping) {
- mapping.addToBuilder(this.treeBuilder);
- }
-
- /**
- * add the element mapping with the given class name
- */
- public void addElementMapping(String mappingClassName) {
- createElementMapping(mappingClassName).addToBuilder(this.treeBuilder);
- }
-
- /**
- * protected method used by addElementMapping(String) to
- * instantiate element mapping class
- */
- protected ElementMapping createElementMapping(String mappingClassName) {
- MessageHandler.logln("using element mapping " + mappingClassName);
-
- try {
- return (ElementMapping)Class.forName(mappingClassName).newInstance();
- } catch (ClassNotFoundException e) {
- MessageHandler.errorln("Could not find " + mappingClassName);
- } catch (InstantiationException e) {
- MessageHandler.errorln("Could not instantiate "
- + mappingClassName);
- } catch (IllegalAccessException e) {
- MessageHandler.errorln("Could not access " + mappingClassName);
- } catch (ClassCastException e) {
- MessageHandler.errorln(mappingClassName
- + " is not an element mapping");
- }
- return null;
- }
-
- /**
- * return the tree builder (a SAX DocumentHandler).
- *
- * used in situations where SAX is used but not via a FOP-invoked
- * SAX parser. A good example is an XSLT engine that fires SAX
- * events but isn't a SAX Parser itself.
- */
- public DocumentHandler getDocumentHandler() {
- return this.treeBuilder;
- }
-
- /**
- * build the formatting object tree using the given SAX Parser and
- * SAX InputSource
- */
- public void buildFOTree(Parser parser,
- InputSource source) throws FOPException {
-
- parser.setDocumentHandler(this.treeBuilder);
- try {
- parser.parse(source);
- } catch (SAXException e) {
- if (e.getException() instanceof FOPException)
- throw (FOPException)e.getException();
- else
- throw new FOPException(e.getMessage());
- } catch (IOException e) {
- throw new FOPException(e.getMessage());
- }
- }
-
- /**
- * build the formatting object tree using the given DOM Document
- */
- public void buildFOTree(Document document) throws FOPException {
-
- /* most of this code is modified from John Cowan's */
-
- Node currentNode;
- AttributesImpl currentAtts;
-
- /* temporary array for making Strings into character arrays */
- char[] array = null;
-
- currentAtts = new AttributesImpl();
-
- /* start at the document element */
- currentNode = document;
-
- try {
- while (currentNode != null) {
- switch (currentNode.getNodeType()) {
- case Node.DOCUMENT_NODE:
- this.treeBuilder.startDocument();
- break;
- case Node.CDATA_SECTION_NODE:
- case Node.TEXT_NODE:
- String data = currentNode.getNodeValue();
- int datalen = data.length();
- if (array == null || array.length < datalen) {
- /*
- * if the array isn't big enough, make a new
- * one
- */
- array = new char[datalen];
- }
- data.getChars(0, datalen, array, 0);
- this.treeBuilder.characters(array, 0, datalen);
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- this.treeBuilder.processingInstruction(currentNode.getNodeName(),
- currentNode.getNodeValue());
- break;
- case Node.ELEMENT_NODE:
- NamedNodeMap map = currentNode.getAttributes();
- currentAtts.clear();
- for (int i = map.getLength() - 1; i >= 0; i--) {
- Attr att = (Attr)map.item(i);
- currentAtts.addAttribute("", att.getName(), "",
- "CDATA", att.getValue());
- }
- this.treeBuilder.startElement("",
- currentNode.getNodeName(),
- "", currentAtts);
- break;
- }
-
- Node nextNode = currentNode.getFirstChild();
- if (nextNode != null) {
- currentNode = nextNode;
- continue;
- }
-
- while (currentNode != null) {
- switch (currentNode.getNodeType()) {
- case Node.DOCUMENT_NODE:
- this.treeBuilder.endDocument();
- break;
- case Node.ELEMENT_NODE:
- this.treeBuilder.endElement("",
- currentNode.getNodeName(),
- "");
- break;
- }
-
- nextNode = currentNode.getNextSibling();
- if (nextNode != null) {
- currentNode = nextNode;
- break;
- }
-
- currentNode = currentNode.getParentNode();
- }
- }
- } catch (SAXException e) {
- throw new FOPException(e.getMessage());
- }
- }
-
- /**
- * set the PrintWriter to use to output the result of the Renderer
- * (if applicable)
- */
- public void setWriter(PrintWriter writer) {
- this.writer = writer;
- }
-
- /**
- * set the OutputStream to use to output the result of the Renderer
- * (if applicable)
- */
- public void setOutputStream(OutputStream stream) {
- this.stream = stream;
- }
-
- /**
- * format the formatting object tree into an area tree
- */
- public void format() throws FOPException {
- FontInfo fontInfo = new FontInfo();
- this.renderer.setupFontInfo(fontInfo);
-
- //this.areaTree = new AreaTree();
- this.areaTree.setFontInfo(fontInfo);
-
- this.treeBuilder.format(areaTree);
- }
-
- /**
- * render the area tree to the output form
- */
- public void render() throws IOException, FOPException {
- //this.renderer.render(areaTree, this.stream);
- }
-
-}
+++ /dev/null
-/*
- * $Id$
- * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
- * For details on use and redistribution please refer to the
- * LICENSE file included with these sources.
- */
-
-package org.apache.fop.fo;
-
-// FOP
-import org.apache.fop.layout.AreaTree;
-import org.apache.fop.messaging.MessageHandler;
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.fo.pagination.Root;
-
-// SAX
-import org.xml.sax.SAXException;
-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;
-import java.util.Stack;
-import java.io.IOException;
-
-/**
- * SAX Handler that builds the formatting object tree.
- */
-// public class XTFOTreeBuilder extends HandlerBase {
-public class XTFOTreeBuilder extends FOTreeBuilder
- implements DocumentHandler {
-
- // namespace implementation ideas pinched from John Cowan
- 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;
- }
-
- }
-
- protected int level = 0;
- protected String m_uri = null;
- protected String m_localPart = null;
- protected Stack namespaceStack = new Stack();
-
- {
- 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 mapName(String name) throws SAXException {
-
- int colon = name.indexOf(':');
- String prefix = "";
- m_localPart = name;
- if (colon != -1) {
- prefix = name.substring(0, colon);
- m_localPart = name.substring(colon + 1);
- }
- m_uri = findURI(prefix);
- if (m_uri == null) {
- if (prefix.equals("")) {
- return name;
- } else {
- throw new SAXException(new FOPException("Unknown namespace prefix "
- + prefix));
- }
- }
- return m_uri + "^" + m_localPart;
- }
-
- /**
- * 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();
- }
- }
-
- /**
- * SAX1 Handler for the start of an element
- */
- public void startElement(String rawName,
- AttributeList attlist) throws SAXException {
-
- // SAX2 version of AttributeList
- AttributesImpl newAttrs = new AttributesImpl();
-
- level++;
- int length = attlist.getLength();
- for (int i = 0; i < length; i++) {
- String att = attlist.getName(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));
- } else {
- mapName(att);
- newAttrs.addAttribute(m_uri, m_localPart, att,
- attlist.getType(i),
- attlist.getValue(i));
- }
-
- }
-
- mapName(rawName);
- super.startElement(m_uri, m_localPart, rawName, newAttrs);
- }
-
-}
+++ /dev/null
-/*
- * $Id$
- * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
- * For details on use and redistribution please refer to the
- * LICENSE file included with these sources.
- */
-
-package org.apache.fop.tools.xslt;
-
-import org.apache.xalan.xslt.*;
-
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.Hashtable;
-import org.w3c.dom.Document;
-
-/**
- * Handles xslt tranformations via Xalan1 (non-trax)
- */
-
-public class Xalan1Transform {
-
- /**
- * Cache of compiled stylesheets (filename, StylesheetRoot)
- */
- private static Hashtable _stylesheetCache = new Hashtable();
-
- public static StylesheetRoot getStylesheet(String xsltFilename, boolean cache)
- throws org.xml.sax.SAXException {
- if (cache && _stylesheetCache.containsKey(xsltFilename)) {
- return (StylesheetRoot)_stylesheetCache.get(xsltFilename);
- }
-
- // Use XSLTProcessor to instantiate an XSLTProcessor.
- XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
-
- XSLTInputSource xslSheet = new XSLTInputSource(xsltFilename);
-
- // Perform the transformation.
- StylesheetRoot compiledSheet = processor.processStylesheet(xslSheet);
- if (cache) {
- _stylesheetCache.put(xsltFilename, compiledSheet);
- }
- return compiledSheet;
- }
-
- public static void transform(String xmlSource, String xslURL,
- String outputFile) throws java.io.IOException,
- java.net.MalformedURLException,
- org.xml.sax.SAXException {
- try {
- javax.xml.parsers.DocumentBuilder docBuilder =
- javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document doc = docBuilder.parse(new FileInputStream(xmlSource));
- transform(doc, xslURL, outputFile);
- } catch (javax.xml.parsers.ParserConfigurationException ex) {
- throw new org.xml.sax.SAXException(ex);
- }
-
- }
-
- public static void transform(Document xmlSource, String xslURL,
- String outputFile) throws java.io.IOException,
- java.net.MalformedURLException,
- org.xml.sax.SAXException {
-
- XSLTResultTarget xmlResult = new XSLTResultTarget(outputFile);
-
- StylesheetRoot stylesheet = getStylesheet(xslURL, true);
-
- // Perform the transformation.
- stylesheet.process(XSLTProcessorFactory.getProcessor(), xmlSource,
- xmlResult);
- }
-
- public static void transform(String xmlSource, String xslURL,
- java.io.Writer outputFile) throws java.io.IOException,
- java.net.MalformedURLException,
- org.xml.sax.SAXException {
-
- XSLTInputSource source = new XSLTInputSource(xmlSource);
- XSLTResultTarget xmlResult = new XSLTResultTarget(outputFile);
-
- StylesheetRoot stylesheet = getStylesheet(xslURL, true);
-
- // Perform the transformation.
- stylesheet.process(XSLTProcessorFactory.getProcessor(), source,
- xmlResult);
- }
-
- public static void transform(Document xmlSource, InputStream xsl,
- Document outputDoc) throws java.io.IOException,
- java.net.MalformedURLException,
- org.xml.sax.SAXException {
-
- XSLTInputSource source = new XSLTInputSource(xmlSource);
- XSLTInputSource xslSheet = new XSLTInputSource(xsl);
- XSLTResultTarget xmlResult = new XSLTResultTarget(outputDoc);
-
-
- // Perform the transformation.
- XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
-
- processor.process(source, xslSheet, xmlResult);
- }
-
-}