001 /*
002 * TextConsumer.java
003 * Copyright (C) 1999,2000,2001 The Free Software Foundation
004 * Portions Copyright 2005 Marko Karppinen & Co. LLC
005 *
006 * This file is part of GNU JAXP, a library.
007 * This version has been modified from the original GNU JAXP distribution
008 * on 2005-02-11 by Henri Sivonen working as an employee of Marko
009 * Karppinen & Co. LLC.
010 *
011 * GNU JAXP is free software; you can redistribute it and/or modify
012 * it under the terms of the GNU General Public License as published by
013 * the Free Software Foundation; either version 2 of the License, or
014 * (at your option) any later version.
015 *
016 * GNU JAXP is distributed in the hope that it will be useful,
017 * but WITHOUT ANY WARRANTY; without even the implied warranty of
018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
019 * GNU General Public License for more details.
020 *
021 * You should have received a copy of the GNU General Public License
022 * along with this program; if not, write to the Free Software
023 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024 *
025 * Linking this library statically or dynamically with other modules is
026 * making a combined work based on this library. Thus, the terms and
027 * conditions of the GNU General Public License cover the whole
028 * combination.
029 *
030 * As a special exception, the copyright holders of this library give you
031 * permission to link this library with independent modules to produce an
032 * executable, regardless of the license terms of these independent
033 * modules, and to copy and distribute the resulting executable under
034 * terms of your choice, provided that you also meet, for each linked
035 * independent module, the terms and conditions of the license of that
036 * module. An independent module is a module which is not derived from
037 * or based on this library. If you modify this library, you may extend
038 * this exception to your version of the library, but you are not
039 * obliged to do so. If you do not wish to do so, delete this
040 * exception statement from your version.
041 */
042
043 // Package renamed -- 2005-02-11 hsivonen
044 package fi.karppinen.gnu.xml.pipeline;
045
046 import fi.karppinen.gnu.xml.util.XMLWriter;
047 import gnu.xml.pipeline.EventConsumer;
048 import gnu.xml.pipeline.EventFilter;
049 import gnu.xml.pipeline.NSFilter;
050 import gnu.xml.pipeline.WellFormednessFilter;
051
052 import java.io.IOException;
053 import java.io.OutputStream;
054 import java.io.OutputStreamWriter;
055 import java.io.Writer;
056
057 import org.xml.sax.ContentHandler;
058 import org.xml.sax.DTDHandler;
059 import org.xml.sax.SAXNotRecognizedException;
060
061 /**
062 * Terminates a pipeline, consuming events to print them as well formed XML (or
063 * XHTML) text.
064 *
065 * <p>
066 * Input must be well formed, and must include XML names (e.g. the prefixes and
067 * prefix declarations must be present), or the output of this class is
068 * undefined.
069 *
070 * @see NSFilter
071 * @see WellFormednessFilter
072 *
073 * @author David Brownell
074 * @author Henri Sivonen
075 */
076 public class TextConsumer extends XMLWriter implements EventConsumer {
077 // edited doc -- 2005-02-11 hsivonen
078 /**
079 * Constructs an event consumer which echoes its input as text, optionally
080 * adhering to some basic XHTML formatting options which increase
081 * interoperability with old (v3) browsers.
082 */
083 public TextConsumer(Writer w, boolean isXhtml) throws IOException {
084 // Removed encoding-related code -- 2005-02-11 hsivonen
085 super(w);
086 setXhtml(isXhtml);
087 }
088
089 /**
090 * Constructs a consumer that writes its input as XML text. XHTML rules are
091 * not followed.
092 */
093 public TextConsumer(Writer w) throws IOException {
094 this(w, false);
095 }
096
097 /**
098 * Constructs a consumer that writes its input as XML text, encoded in
099 * UTF-8. XHTML rules are not followed.
100 */
101 public TextConsumer(OutputStream out) throws IOException {
102 this(new OutputStreamWriter(out, "UTF8"), false);
103 }
104
105 /** <b>EventConsumer </b> Returns the document handler being used. */
106 public ContentHandler getContentHandler() {
107 return this;
108 }
109
110 /** <b>EventConsumer </b> Returns the dtd handler being used. */
111 public DTDHandler getDTDHandler() {
112 return this;
113 }
114
115 /** <b>XMLReader </b>Retrieves a property (lexical and decl handlers) */
116 public Object getProperty(String propertyId)
117 throws SAXNotRecognizedException {
118 if (EventFilter.LEXICAL_HANDLER.equals(propertyId))
119 return this;
120 if (EventFilter.DECL_HANDLER.equals(propertyId))
121 return this;
122 throw new SAXNotRecognizedException(propertyId);
123 }
124 }