123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602 |
- /*-- $Id$ --
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Fop" and "Apache Software Foundation" must not be used to
- endorse or promote products derived from this software without prior
- written permission. For written permission, please contact
- apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation and was originally created by
- James Tauber <jtauber@jtauber.com>. For more information on the Apache
- Software Foundation, please see <http://www.apache.org/>.
-
- */
- package org.apache.fop.render.xml;
-
-
-
- // FOP
-
- import org.apache.fop.svg.*;
-
- import org.apache.fop.render.Renderer;
-
- import org.apache.fop.image.ImageArea;
-
- import org.apache.fop.layout.*;
-
- import org.apache.fop.pdf.*;
-
-
-
- // Java
-
- import java.io.IOException;
-
- import java.io.PrintWriter;
-
- import java.util.Enumeration;
-
-
-
- /**
-
- * Renderer that renders areas to XML for debugging purposes.
-
- */
-
- public class XMLRenderer implements Renderer {
-
-
-
- /** 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;
-
-
-
- /**
-
- * set the document's producer
-
- *
-
- * @param producer string indicating application producing the XML
-
- */
-
- public void setProducer(String producer) {
-
- this.producer = producer;
-
- }
-
-
-
- /**
-
- * render the areas into XML
-
- *
-
- * @param areaTree the laid-out area tree
-
- * @param writer the PrintWriter to give the XML to
-
- */
-
- public void render(AreaTree areaTree, PrintWriter writer)
-
- throws IOException {
-
- System.err.println("rendering areas to XML");
-
- this.writer = writer;
-
- this.writer.write("<?xml version=\"1.0\"?>\n<!-- produced by "
-
- + this.producer + " -->\n");
-
- writeStartTag("<AreaTree>");
-
- Enumeration e = areaTree.getPages().elements();
-
- while (e.hasMoreElements()) {
-
- this.renderPage((Page) e.nextElement());
-
- }
-
- writeEndTag("</AreaTree>");
-
- this.writer.flush();
-
- System.err.println("written out XML");
-
- }
-
-
-
- /**
-
- * write out spaces to make indent
-
- */
-
- protected void writeIndent() {
-
- StringBuffer s = new StringBuffer();
-
- for (int i= 0; i<this.indent; i++) {
-
- s = s.append(" ");
-
- }
-
- this.writer.write(s.toString());
-
- }
-
-
-
- /**
-
- * write out an element
-
- *
-
- * @param element the full text of the element including tags
-
- */
-
- protected void writeElement(String element) {
-
- writeIndent();
-
- this.writer.write(element+"\n");
-
- }
-
-
-
- /**
-
- * write out an empty-element-tag
-
- *
-
- * @param tag the text of the tag
-
- */
-
- protected void writeEmptyElementTag(String tag) {
-
- writeIndent();
-
- this.writer.write(tag + "\n");
-
- }
-
-
-
- /**
-
- * write out an end tag
-
- *
-
- * @param tag the text of the tag
-
- */
-
- protected void writeEndTag(String tag) {
-
- this.indent--;
-
- writeIndent();
-
- this.writer.write(tag + "\n");
-
- }
-
-
-
- /**
-
- * write out a start tag
-
- *
-
- * @param tag the text of the tag
-
- */
-
- protected void writeStartTag(String tag) {
-
- writeIndent();
-
- this.writer.write(tag + "\n");
-
- this.indent++;
-
- }
-
-
-
- /**
-
- * set up the font info
-
- *
-
- * @param fontInfo the font info object to set up
-
- */
-
- public void setupFontInfo(FontInfo fontInfo) {
-
-
-
- /* use PDF's font setup to get PDF metrics */
-
- org.apache.fop.render.pdf.FontSetup.setup(fontInfo);
-
- }
-
-
-
- /**
-
- * render an area container to XML
-
- *
-
- * @param area the area container to render
-
- */
-
- public void renderAreaContainer(AreaContainer area) {
-
- writeStartTag("<AreaContainer>");
-
- Enumeration e = area.getChildren().elements();
-
- while (e.hasMoreElements()) {
-
- Box b = (Box) e.nextElement();
-
- b.render(this);
-
- }
-
- writeEndTag("</AreaContainer>");
-
- }
-
-
-
- /**
-
- * render a block area to XML
-
- *
-
- * @param area the block area to render
-
- */
-
- public void renderBlockArea(BlockArea area) {
-
- writeStartTag("<BlockArea start-indent=\""
-
- + area.getStartIndent()
-
- + "\" end-indent=\""
-
- + area.getEndIndent() + "\">");
-
- Enumeration e = area.getChildren().elements();
-
- while (e.hasMoreElements()) {
-
- Box b = (Box) e.nextElement();
-
- b.render(this);
-
- }
-
- writeEndTag("</BlockArea>");
-
- }
-
-
-
- /**
-
- * render a display space to XML
-
- *
-
- * @param space the space to render
-
- */
-
- public void renderDisplaySpace(DisplaySpace space) {
-
- writeEmptyElementTag("<DisplaySpace size=\""
-
- + space.getSize() +"\"/>");
-
- }
-
-
-
- /**
-
- * render an SVG area to XML
-
- *
-
- * @param area the area to render
-
- */
-
- public void renderSVGArea(SVGArea area) {
-
- writeEmptyElementTag("<SVG/>");
-
- }
-
-
-
- /**
-
- * render an image area to XML
-
- *
-
- * @param area the area to render
-
- */
-
- public void renderImageArea(ImageArea area) {
-
- writeEmptyElementTag("<ImageArea/>");
-
- }
-
-
-
- /**
-
- * render an inline area to XML
-
- *
-
- * @param area the area to render
-
- */
-
- public void renderInlineArea(InlineArea area) {
-
- String fontWeight = area.getFontState().getFontWeight();
-
- StringBuffer sb = new StringBuffer();
-
- String s = area.getText();
-
- int l = s.length();
-
- for (int i=0; i < l; i++) {
-
- char ch = s.charAt(i);
-
- if (ch>127)
-
- sb = sb.append("&#"+(int)ch+";");
-
- else
-
- sb = sb.append(ch);
-
- }
-
- writeElement("<InlineArea font-weight=\""
-
- + fontWeight + "\" red=\""
-
- + area.getRed() + "\" green=\""
-
- + area.getGreen() + "\" blue = \""
-
- + area.getBlue() + " width = \""
-
- + area.getContentWidth() + "\">" + sb.toString()
-
- + "</InlineArea>");
-
- }
-
-
-
- /**
-
- * render an inline space to XML
-
- *
-
- * @param space the space to render
-
- */
-
- public void renderInlineSpace(InlineSpace space) {
-
- writeEmptyElementTag("<InlineSpace size=\""
-
- + space.getSize() +"\"/>");
-
- }
-
-
-
- /**
-
- * render a line area to XML
-
- *
-
- * @param area the area to render
-
- */
-
- public void renderLineArea(LineArea area) {
-
- String fontWeight = area.getFontState().getFontWeight();
-
- writeStartTag("<LineArea font-weight=\""
-
- + fontWeight + "\">");
-
- Enumeration e = area.getChildren().elements();
-
- while (e.hasMoreElements()) {
-
- Box b = (Box)e.nextElement();
-
- b.render(this);
-
- }
-
- writeEndTag("</LineArea>");
-
- }
-
-
-
- /**
-
- * render a page to XML
-
- *
-
- * @param page the page to render
-
- */
-
- public void renderPage(Page page) {
-
- AreaContainer body, before, after;
-
- writeStartTag("<Page>");
-
- body = page.getBody();
-
- before = page.getBefore();
-
- after = page.getAfter();
-
- if (before != null) {
-
- renderAreaContainer(before);
-
- }
-
- renderAreaContainer(body);
-
- if (after != null) {
-
- renderAreaContainer(after);
-
- }
-
- writeEndTag("</Page>");
-
- }
-
-
-
- /**
-
- * render a rule area to XML
-
- *
-
- * @param area the area to render
-
- */
-
- public void renderRuleArea(RuleArea area) {
-
- writeEmptyElementTag("<Rule start-indent=\""
-
- + area.getStartIndent()
-
- + "\" end-indent=\""
-
- + area.getEndIndent()
-
- + "\" rule-thickness=\""
-
- + area.getRuleThickness()
-
- + "\" red=\"" + area.getRed()
-
- + "\" green=\"" + area.getGreen()
-
- + "\" blue = \"" + area.getBlue()
-
- + "\"/>");
-
- }
-
- }
|