// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. // // TagSoup is licensed under the Apache License, // Version 2.0. You may obtain a copy of this license at // http://www.apache.org/licenses/LICENSE-2.0 . You may also have // additional legal rights not granted by this license. // // TagSoup is distributed in the hope that it will be useful, but // unless required by applicable law or agreed to in writing, TagSoup // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS // OF ANY KIND, either express or implied; not even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. package org.ccil.cowan.tagsoup.jaxp; import java.io.*; import java.util.*; import javax.xml.parsers.*; import org.xml.sax.*; import org.ccil.cowan.tagsoup.Parser; /** * This is a simple implementation of JAXP {@link SAXParser}, * to allow easier integration of TagSoup with the default JDK * xml processing stack. * * @author Tatu Saloranta (cowtowncoder@yahoo.com) */ public class SAXParserImpl extends SAXParser { final org.ccil.cowan.tagsoup.Parser parser; protected SAXParserImpl() // used by factory, for prototypes { super(); parser = new org.ccil.cowan.tagsoup.Parser(); } public static SAXParserImpl newInstance(Map features) throws SAXException { SAXParserImpl parser = new SAXParserImpl(); if (features != null) { Iterator it = features.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); parser.setFeature((String) entry.getKey(), ((Boolean) entry.getValue()).booleanValue()); } } return parser; } // // // JAXP API implementation: /** * To support SAX1 interface, we'll need to use an adapter. * @deprecated */ public org.xml.sax.Parser getParser() throws SAXException { return new SAX1ParserAdapter(parser); } public XMLReader getXMLReader() { return parser; } public boolean isNamespaceAware() { try { return parser.getFeature(Parser.namespacesFeature); } catch (SAXException sex) { // should never happen... so: throw new RuntimeException(sex.getMessage()); } } public boolean isValidating() { try { return parser.getFeature(Parser.validationFeature); } catch (SAXException sex) { // should never happen... so: throw new RuntimeException(sex.getMessage()); } } public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException { parser.setProperty(name, value); } public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException { return parser.getProperty(name); } // // // Additional convenience methods public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException { parser.setFeature(name, value); } public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException { return parser.getFeature(name); } }