You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2005/01/05 22:08:27 UTC
cvs commit: xml-fop/src/java/org/apache/fop/render/xml XMLXMLHandler.java XMLRenderer.java
jeremias 2005/01/05 13:08:27
Modified: src/java/org/apache/fop/render/xml XMLXMLHandler.java
XMLRenderer.java
Log:
Refactored Area Tree XML Renderer to write XML to a TransformerHandler instead of to a Writer.
Revision Changes Path
1.3 +42 -53 xml-fop/src/java/org/apache/fop/render/xml/XMLXMLHandler.java
Index: XMLXMLHandler.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/xml/XMLXMLHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XMLXMLHandler.java 27 Feb 2004 17:55:12 -0000 1.2
+++ XMLXMLHandler.java 5 Jan 2005 21:08:27 -0000 1.3
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,117 +21,106 @@
import org.apache.fop.render.XMLHandler;
import org.apache.fop.render.RendererContext;
-import org.apache.batik.dom.util.DOMUtilities;
-
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Attr;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
-import java.io.Writer;
-import java.io.IOException;
+import javax.xml.transform.sax.TransformerHandler;
/**
* XML handler for the XML renderer.
*/
public class XMLXMLHandler implements XMLHandler {
- /** Key for getting the Writer from the RendererContext */
- public static final String WRITER = "writer";
+ /** Key for getting the TransformerHandler from the RendererContext */
+ public static final String HANDLER = "handler";
+ private AttributesImpl atts = new AttributesImpl();
+
/**
* @see org.apache.fop.render.XMLHandler#handleXML(RendererContext, Document, String)
*/
public void handleXML(RendererContext context, Document doc,
String ns) throws Exception {
- Writer writer = (Writer) context.getProperty(WRITER);
+ TransformerHandler handler = (TransformerHandler) context.getProperty(HANDLER);
- String svg = "http://www.w3.org/2000/svg";
- // actually both do the same thing but one requires
- // batik
- if (svg.equals(ns)) {
- DOMUtilities.writeDocument(doc, writer);
- } else {
- writeDocument(doc, writer);
- }
- writer.write("\n");
+ //String svg = "http://www.w3.org/2000/svg";
+ writeDocument(doc, handler);
}
/**
- * Writes the given document using the given writer.
+ * Writes the given document using the given TransformerHandler.
* @param doc DOM document
- * @param writer Writer to write to
- * @throws IOException In case of an I/O problem
+ * @param handler TransformerHandler to write to
+ * @throws SAXException In case of a problem while writing XML
*/
- public static void writeDocument(Document doc,
- Writer writer) throws IOException {
+ public void writeDocument(Document doc,
+ TransformerHandler handler) throws SAXException {
for (Node n = doc.getFirstChild(); n != null;
n = n.getNextSibling()) {
- writeNode(n, writer);
+ writeNode(n, handler);
}
}
/**
* Writes a node using the given writer.
* @param node node to serialize
- * @param writer Writer to write to
- * @throws IOException In case of an I/O problem
+ * @param handler TransformerHandler to write to
+ * @throws SAXException In case of a problem while writing XML
*/
- public static void writeNode(Node node, Writer writer) throws IOException {
+ public void writeNode(Node node, TransformerHandler handler) throws SAXException {
+ char[] ca;
switch (node.getNodeType()) {
case Node.ELEMENT_NODE:
- writer.write("<");
- writer.write(node.getNodeName());
+ atts.clear();
if (node.hasAttributes()) {
NamedNodeMap attr = node.getAttributes();
int len = attr.getLength();
for (int i = 0; i < len; i++) {
Attr a = (Attr) attr.item(i);
- writer.write(" ");
- writer.write(a.getNodeName());
- writer.write("=\"");
- writer.write(contentToString(a.getNodeValue()));
- writer.write("\"");
+ atts.addAttribute("", a.getNodeName(), a.getNodeName(),
+ "CDATA", a.getNodeValue());
}
}
+ handler.startElement(node.getNamespaceURI(),
+ node.getLocalName(), node.getLocalName(), atts);
Node c = node.getFirstChild();
if (c != null) {
- writer.write(">");
for (; c != null; c = c.getNextSibling()) {
- writeNode(c, writer);
+ writeNode(c, handler);
}
- writer.write("</");
- writer.write(node.getNodeName());
- writer.write(">");
- } else {
- writer.write("/>");
}
+ handler.endElement(node.getNamespaceURI(), node.getNodeName(), node.getNodeName());
break;
case Node.TEXT_NODE:
- writer.write(contentToString(node.getNodeValue()));
+ ca = node.getNodeValue().toCharArray();
+ handler.characters(ca, 0, ca.length);
break;
case Node.CDATA_SECTION_NODE:
- writer.write("<![CDATA[");
- writer.write(node.getNodeValue());
- writer.write("]]>");
+ ca = node.getNodeValue().toCharArray();
+ handler.startCDATA();
+ handler.characters(ca, 0, ca.length);
+ handler.endCDATA();
break;
case Node.ENTITY_REFERENCE_NODE:
+ System.out.println("Ignoring ENTITY_REFERENCE_NODE. NYI");
+ /*
writer.write("&");
- writer.write(node.getNodeName());
+ writer.write();
writer.write(";");
+ */
break;
case Node.PROCESSING_INSTRUCTION_NODE:
- writer.write("<?");
- writer.write(node.getNodeName());
- writer.write(node.getNodeValue());
- writer.write("?>");
+ handler.processingInstruction(node.getNodeName(), node.getNodeValue());
break;
case Node.COMMENT_NODE:
- writer.write("<!--");
- writer.write(node.getNodeValue());
- writer.write("-->");
+ ca = node.getNodeValue().toCharArray();
+ handler.comment(ca, 0, ca.length);
break;
case Node.DOCUMENT_TYPE_NODE:
break;
@@ -147,7 +136,7 @@
* @param s content value
* @return encoded value
*/
- public static String contentToString(String s) {
+ private static String contentToString(String s) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
1.31 +260 -150 xml-fop/src/java/org/apache/fop/render/xml/XMLRenderer.java
Index: XMLRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/xml/XMLRenderer.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- XMLRenderer.java 24 Nov 2004 21:07:31 -0000 1.30
+++ XMLRenderer.java 5 Jan 2005 21:08:27 -0000 1.31
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,14 +20,21 @@
// Java
import java.io.IOException;
-import java.io.PrintWriter;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.Iterator;
import java.awt.geom.Rectangle2D;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
import org.w3c.dom.Document;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
// FOP
import org.apache.fop.render.AbstractRenderer;
@@ -35,6 +42,7 @@
import org.apache.fop.render.XMLHandler;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.FOPException;
+import org.apache.fop.area.Area;
import org.apache.fop.area.BeforeFloat;
import org.apache.fop.area.Block;
import org.apache.fop.area.BodyRegion;
@@ -69,31 +77,29 @@
public class XMLRenderer extends AbstractRenderer {
/** XML MIME type */
- public static final String XML_MIME_TYPE = "text/xml";
+ public static final String XML_MIME_TYPE = "application/x-fop-areatree";
+ /** Main namespace in use. */
+ public static final String NS = "";
+
+ /** CDATA type */
+ public static final String CDATA = "CDATA";
+
+ /** An empty Attributes object used when no attributes are needed. */
+ public static final Attributes EMPTY_ATTS = new AttributesImpl();
+
private boolean startedSequence = false;
private RendererContext context;
- /**
- * indentation to use for pretty-printing the XML
- */
- protected int indent = 0;
-
- /**
- * the application producing the XML
- */
- protected String producer;
-
- /**
- * the writer used to output the XML
- */
- protected PrintWriter writer;
-
- /**
- * options
- */
- private boolean consistentOutput = false;
-
+ /** TransformerHandler that the generated XML is written to */
+ protected TransformerHandler handler;
+
+ /** AttributesImpl instance that can be used during XML generation. */
+ protected AttributesImpl atts = new AttributesImpl();
+
+ /** The OutputStream to write the generated XML to. */
+ protected OutputStream out;
+
/**
* Creates a new XML renderer.
*/
@@ -116,70 +122,133 @@
}
/**
- * write out spaces to make indent
+ * Sets an outside TransformerHandler to use instead of the default one
+ * create in this class in startRenderer().
+ * @param handler Overriding TransformerHandler
*/
- protected void writeIndent() {
- StringBuffer s = new StringBuffer();
- for (int i = 0; i < this.indent; i++) {
- s = s.append(" ");
- }
- this.writer.write(s.toString());
+ public void setTransformerHandler(TransformerHandler handler) {
+ this.handler = handler;
}
/**
- * write out an element
+ * set up the font info
*
- * @param element the full text of the element including tags
+ * @param fontInfo the font info object to set up
*/
- protected void writeElement(String element) {
- writeIndent();
- this.writer.write(element + "\n");
+ public void setupFontInfo(FontInfo fontInfo) {
+ FontSetup.setup(fontInfo, null);
+ }
+
+ private boolean isCoarseXml() {
+ return ((Boolean)
+ userAgent.getRendererOptions().get("fineDetail")).booleanValue();
}
/**
- * write out an empty-element-tag
- *
- * @param tag the text of the tag
+ * Handles SAXExceptions.
+ * @param saxe the SAXException to handle
*/
- protected void writeEmptyElementTag(String tag) {
- writeIndent();
- this.writer.write(tag + "\n");
+ protected void handleSAXException(SAXException saxe) {
+ throw new RuntimeException(saxe.getMessage());
}
-
+
/**
- * write out an end tag
- *
- * @param tag the text of the tag
+ * Writes a comment to the generated XML.
+ * @param comment the comment
*/
- protected void writeEndTag(String tag) {
- this.indent--;
- writeIndent();
- this.writer.write(tag + "\n");
+ protected void comment(String comment) {
+ try {
+ handler.comment(comment.toCharArray(), 0, comment.length());
+ } catch (SAXException saxe) {
+ handleSAXException(saxe);
+ }
}
-
+
/**
- * write out a start tag
- *
- * @param tag the text of the tag
+ * Starts a new element (without attributes).
+ * @param tagName tag name of the element
*/
- protected void writeStartTag(String tag) {
- writeIndent();
- this.writer.write(tag + "\n");
- this.indent++;
+ protected void startElement(String tagName) {
+ startElement(tagName, EMPTY_ATTS);
}
-
+
/**
- * set up the font info
- *
- * @param fontInfo the font info object to set up
+ * Starts a new element.
+ * @param tagName tag name of the element
+ * @param atts attributes to add
*/
- public void setupFontInfo(FontInfo fontInfo) {
- FontSetup.setup(fontInfo, null);
+ protected void startElement(String tagName, Attributes atts) {
+ try {
+ handler.startElement(NS, tagName, tagName, atts);
+ } catch (SAXException saxe) {
+ handleSAXException(saxe);
+ }
}
-
- private boolean isCoarseXml() {
- return ((Boolean)
- userAgent.getRendererOptions().get("fineDetail")).booleanValue();
+
+ /**
+ * Ends an element.
+ * @param tagName tag name of the element
+ */
+ protected void endElement(String tagName) {
+ try {
+ handler.endElement(NS, tagName, tagName);
+ } catch (SAXException saxe) {
+ handleSAXException(saxe);
+ }
+ }
+
+ /**
+ * Sends plain text to the XML
+ * @param text the text
+ */
+ protected void characters(String text) {
+ try {
+ char[] ca = text.toCharArray();
+ handler.characters(ca, 0, ca.length);
+ } catch (SAXException saxe) {
+ handleSAXException(saxe);
+ }
+ }
+
+ /**
+ * Adds a new attribute to the protected member variable "atts".
+ * @param name name of the attribute
+ * @param value value of the attribute
+ */
+ protected void addAttribute(String name, String value) {
+ atts.addAttribute(NS, name, name, CDATA, value);
+ }
+
+ /**
+ * Adds a new attribute to the protected member variable "atts".
+ * @param name name of the attribute
+ * @param value value of the attribute
+ */
+ protected void addAttribute(String name, int value) {
+ addAttribute(name, Integer.toString(value));
+ }
+
+ /**
+ * Adds a new attribute to the protected member variable "atts".
+ * @param name name of the attribute
+ * @param rect a Rectangle2D to format and use as attribute value
+ */
+ protected void addAttribute(String name, Rectangle2D rect) {
+ addAttribute(name, createString(rect));
+ }
+
+ /**
+ * Adds the general Area attributes.
+ * @param area Area to extract attributes from
+ */
+ protected void addAreaAttributes(Area area) {
+ addAttribute("ipd", area.getIPD());
+ addAttribute("bpd", area.getBPD());
+ }
+
+ private String createString(Rectangle2D rect) {
+ return "" + (int) rect.getX() + " " + (int) rect.getY() + " "
+ + (int) rect.getWidth() + " " + (int) rect.getHeight();
}
/**
@@ -187,38 +256,60 @@
*/
public void startRenderer(OutputStream outputStream)
throws IOException {
- getLogger().debug("rendering areas to XML");
- this.writer = new PrintWriter(outputStream);
- this.writer.write("<?xml version=\"1.0\"?>\n"
- + "<!-- produced by " + this.producer + " -->\n");
- writeStartTag("<areaTree>");
+ getLogger().debug("Rendering areas to Area Tree XML");
+
+ if (this.handler == null) {
+ SAXTransformerFactory factory
+ = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+ try {
+ this.handler = factory.newTransformerHandler();
+ StreamResult res = new StreamResult(outputStream);
+ handler.setResult(res);
+ } catch (TransformerConfigurationException tce) {
+ throw new RuntimeException(tce.getMessage());
+ }
+
+ this.out = outputStream;
+ }
+
+ try {
+ handler.startDocument();
+ } catch (SAXException saxe) {
+ handleSAXException(saxe);
+ }
+ comment("Produced by "
+ + (userAgent.getProducer() != null ? userAgent.getProducer() : ""));
+ startElement("areaTree");
}
/**
* @see org.apache.fop.render.Renderer#stopRenderer()
*/
public void stopRenderer() throws IOException {
- writeEndTag("</pageSequence>");
- writeEndTag("</areaTree>");
- this.writer.flush();
- getLogger().debug("written out XML");
+ endElement("pageSequence");
+ endElement("areaTree");
+ try {
+ handler.endDocument();
+ } catch (SAXException saxe) {
+ handleSAXException(saxe);
+ }
+ if (this.out != null) {
+ this.out.flush();
+ }
+ getLogger().debug("Written out Area Tree XML");
}
/**
* @see org.apache.fop.render.Renderer#renderPage(PageViewport)
*/
public void renderPage(PageViewport page) throws IOException, FOPException {
- writeStartTag("<pageViewport bounds=\""
- + createString(page.getViewArea()) + "\">");
- writeStartTag("<page>");
+ atts.clear();
+ addAttribute("bounds", page.getViewArea());
+ startElement("pageViewport", atts);
+ startElement("page");
super.renderPage(page);
- writeEndTag("</page>");
- writeEndTag("</pageViewport>");
- }
-
- private String createString(Rectangle2D rect) {
- return "" + (int) rect.getX() + " " + (int) rect.getY() + " "
- + (int) rect.getWidth() + " " + (int) rect.getHeight();
+ endElement("page");
+ endElement("pageViewport");
}
/**
@@ -226,12 +317,12 @@
*/
public void startPageSequence(LineArea seqTitle) {
if (startedSequence) {
- writeEndTag("</pageSequence>");
+ endElement("pageSequence");
}
startedSequence = true;
- writeStartTag("<pageSequence>");
+ startElement("pageSequence");
if (seqTitle != null) {
- writeStartTag("<title>");
+ startElement("title");
List children = seqTitle.getInlineAreas();
for (int count = 0; count < children.size(); count++) {
@@ -239,7 +330,7 @@
renderInlineArea(inline);
}
- writeEndTag("</title>");
+ endElement("title");
}
}
@@ -248,31 +339,32 @@
*/
protected void renderRegionViewport(RegionViewport port) {
if (port != null) {
- writeStartTag("<regionViewport rect=\""
- + createString(port.getViewArea()) + "\">");
+ atts.clear();
+ addAttribute("rect", port.getViewArea());
+ startElement("regionViewport", atts);
RegionReference region = port.getRegion();
if (region.getRegionClass() == FO_REGION_BEFORE) {
- writeStartTag("<regionBefore>");
+ startElement("regionBefore");
renderRegion(region);
- writeEndTag("</regionBefore>");
+ endElement("regionBefore");
} else if (region.getRegionClass() == FO_REGION_START) {
- writeStartTag("<regionStart>");
+ startElement("regionStart");
renderRegion(region);
- writeEndTag("</regionStart>");
+ endElement("regionStart");
} else if (region.getRegionClass() == FO_REGION_BODY) {
- writeStartTag("<regionBody>");
+ startElement("regionBody");
renderBodyRegion((BodyRegion) region);
- writeEndTag("</regionBody>");
+ endElement("regionBody");
} else if (region.getRegionClass() == FO_REGION_END) {
- writeStartTag("<regionEnd>");
+ startElement("regionEnd");
renderRegion(region);
- writeEndTag("</regionEnd>");
+ endElement("regionEnd");
} else if (region.getRegionClass() == FO_REGION_AFTER) {
- writeStartTag("<regionAfter>");
+ startElement("regionAfter");
renderRegion(region);
- writeEndTag("</regionAfter>");
+ endElement("regionAfter");
}
- writeEndTag("</regionViewport>");
+ endElement("regionViewport");
}
}
@@ -280,40 +372,42 @@
* @see org.apache.fop.render.AbstractRenderer#renderBeforeFloat(BeforeFloat)
*/
protected void renderBeforeFloat(BeforeFloat bf) {
- writeStartTag("<beforeFloat>");
+ startElement("<beforeFloat>");
super.renderBeforeFloat(bf);
- writeEndTag("</beforeFloat>");
+ endElement("beforeFloat");
}
/**
* @see org.apache.fop.render.AbstractRenderer#renderFootnote(Footnote)
*/
protected void renderFootnote(Footnote footnote) {
- writeStartTag("<footnote>");
+ startElement("footnote");
super.renderFootnote(footnote);
- writeEndTag("</footnote>");
+ endElement("footnote");
}
/**
* @see org.apache.fop.render.AbstractRenderer#renderMainReference(MainReference)
*/
protected void renderMainReference(MainReference mr) {
- writeStartTag("<mainReference columnGap=\""
- + mr.getColumnGap() + "\" width=\"" + mr.getWidth() + "\">");
+ atts.clear();
+ addAttribute("columnGap", mr.getColumnGap());
+ addAttribute("width", mr.getWidth());
+ startElement("mainReference", atts);
Span span = null;
List spans = mr.getSpans();
for (int count = 0; count < spans.size(); count++) {
span = (Span) spans.get(count);
- writeStartTag("<span>");
+ startElement("span");
for (int c = 0; c < span.getColumnCount(); c++) {
Flow flow = (Flow) span.getFlow(c);
renderFlow(flow);
}
- writeEndTag("</span>");
+ endElement("span");
}
- writeEndTag("</mainReference>");
+ endElement("mainReference");
}
/**
@@ -321,48 +415,48 @@
*/
protected void renderFlow(Flow flow) {
// the normal flow reference area contains stacked blocks
- writeStartTag("<flow>");
+ startElement("flow");
super.renderFlow(flow);
- writeEndTag("</flow>");
+ endElement("flow");
}
/**
* @see org.apache.fop.render.AbstractRenderer#renderBlock(Block)
*/
protected void renderBlock(Block block) {
- String prop = " ipd=\"" + block.getIPD() +
- "\" bpd=\"" + block.getBPD() + "\"";
+ atts.clear();
+ addAreaAttributes(block);
Map map = block.getTraits();
if (map != null) {
- prop = prop + " props=\"" + getPropString(map) + "\"";
+ addAttribute("props", getPropString(map));
}
- writeStartTag("<block" + prop + ">");
+ startElement("block", atts);
super.renderBlock(block);
- writeEndTag("</block>");
+ endElement("block");
}
/**
* @see org.apache.fop.render.AbstractRenderer#renderLineArea(LineArea)
*/
protected void renderLineArea(LineArea line) {
- String prop = "";
+ atts.clear();
+ addAreaAttributes(line);
Map map = line.getTraits();
if (map != null) {
- prop = " props=\"" + getPropString(map) + "\"";
+ addAttribute("props", getPropString(map));
}
- writeStartTag("<lineArea bpd=\"" + line.getBPD() + "\""
- + prop + ">");
+ startElement("lineArea", atts);
super.renderLineArea(line);
- writeEndTag("</lineArea>");
+ endElement("lineArea");
}
/**
* @see org.apache.fop.render.Renderer#renderViewport(Viewport)
*/
protected void renderViewport(Viewport viewport) {
- writeStartTag("<viewport>");
+ startElement("viewport");
super.renderViewport(viewport);
- writeEndTag("</viewport>");
+ endElement("viewport");
}
/**
@@ -370,17 +464,20 @@
* @param image the image
*/
public void renderImage(Image image) {
- writeElement("<image url=\"" + image.getURL() + "\"/>");
+ atts.clear();
+ addAreaAttributes(image);
+ addAttribute("url", image.getURL());
+ startElement("image", atts);
+ endElement("image");
}
/**
* @see org.apache.fop.render.Renderer#renderContainer(Container)
*/
public void renderContainer(Container cont) {
- writeStartTag("<container>");
-
+ startElement("container");
super.renderContainer(cont);
- writeEndTag("</container>");
+ endElement("container");
}
/**
@@ -388,45 +485,54 @@
* @param fo the foreign object
*/
public void renderForeignObject(ForeignObject fo) {
- writeStartTag("<foreignObject>");
+ atts.clear();
+ addAreaAttributes(fo);
+ startElement("foreignObject", atts);
Document doc = fo.getDocument();
String ns = fo.getNameSpace();
- context.setProperty(XMLXMLHandler.WRITER, writer);
+ context.setProperty(XMLXMLHandler.HANDLER, handler);
renderXML(userAgent, context, doc, ns);
- writeEndTag("</foreignObject>");
+ endElement("foreignObject");
}
/**
* @see org.apache.fop.render.Renderer#renderCharacter(Character)
*/
protected void renderCharacter(org.apache.fop.area.inline.Character ch) {
- String prop = "";
+ atts.clear();
Map map = ch.getTraits();
if (map != null) {
- prop = " props=\"" + getPropString(map) + "\"";
+ addAttribute("props", getPropString(map));
}
- writeElement("<char" + prop + ">" + ch.getChar() + "</char>");
+ startElement("char", atts);
+ characters(ch.getChar());
+ endElement("char");
}
/**
* @see org.apache.fop.render.Renderer#renderInlineSpace(Space)
*/
protected void renderInlineSpace(Space space) {
- writeElement("<space ipd=\"" + space.getIPD() + "\"/>");
+ atts.clear();
+ addAreaAttributes(space);
+ startElement("space", atts);
+ endElement("space");
}
/**
* @see org.apache.fop.render.Renderer#renderText(TextArea)
*/
protected void renderText(TextArea text) {
- String prop = "";
+ atts.clear();
+ addAttribute("twsadjust", text.getTextWordSpaceAdjust());
+ addAttribute("tlsadjust", text.getTextLetterSpaceAdjust());
Map map = text.getTraits();
if (map != null) {
- prop = " props=\"" + getPropString(map) + "\"";
+ addAttribute("props", getPropString(map));
}
- writeElement("<text twsadjust=\"" + text.getTextWordSpaceAdjust() + "\""
- + " tlsadjust=\"" + text.getTextLetterSpaceAdjust() + "\""
- + prop + ">" + text.getTextArea() + "</text>");
+ startElement("text", atts);
+ characters(text.getTextArea());
+ endElement("text");
super.renderText(text);
}
@@ -434,14 +540,14 @@
* @see org.apache.fop.render.Renderer#renderInlineParent(InlineParent)
*/
protected void renderInlineParent(InlineParent ip) {
- String prop = "";
+ atts.clear();
Map map = ip.getTraits();
if (map != null) {
- prop = " props=\"" + getPropString(map) + "\"";
+ addAttribute("props", getPropString(map));
}
- writeStartTag("<inlineparent" + prop + ">");
+ startElement("inlineparent", atts);
super.renderInlineParent(ip);
- writeEndTag("</inlineparent>");
+ endElement("inlineparent");
}
/**
@@ -467,11 +573,15 @@
case EN_RIDGE:
style = "ridge";
break;
+ default:
+ style = "--NYI--";
}
- writeElement("<leader ipd=\"" + area.getIPD()
- + "\" ruleStyle=\"" + style
- + "\" ruleThickness=\"" + area.getRuleThickness()
- + "\"/>");
+ atts.clear();
+ addAreaAttributes(area);
+ addAttribute("ruleStyle", style);
+ addAttribute("ruleThickness", area.getRuleThickness());
+ startElement("leader", atts);
+ endElement("leader");
super.renderLeader(area);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org