// 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.IOException; import javax.xml.parsers.*; import org.xml.sax.*; /** * This is a simpler adapter class that allows using SAX1 interface on top * of basic SAX2 implementation, such as TagSoup. * * @author Tatu Saloranta (cowtowncoder@yahoo.com) * @deprecated */ public class SAX1ParserAdapter implements org.xml.sax.Parser { final XMLReader xmlReader; public SAX1ParserAdapter(XMLReader xr) { xmlReader = xr; } // Sax1 API impl public void parse(InputSource source) throws SAXException { try { xmlReader.parse(source); } catch (IOException ioe) { throw new SAXException(ioe); } } public void parse(String systemId) throws SAXException { try { xmlReader.parse(systemId); } catch (IOException ioe) { throw new SAXException(ioe); } } /** * @deprecated */ public void setDocumentHandler(DocumentHandler h) { xmlReader.setContentHandler(new DocHandlerWrapper(h)); } public void setDTDHandler(DTDHandler h) { xmlReader.setDTDHandler(h); } public void setEntityResolver(EntityResolver r) { xmlReader.setEntityResolver(r); } public void setErrorHandler(ErrorHandler h) { xmlReader.setErrorHandler(h); } public void setLocale(java.util.Locale locale) throws SAXException { /* I have no idea what this is supposed to do... so let's * throw an exception */ throw new SAXNotSupportedException("TagSoup does not implement setLocale() method"); } // Helper classes: /** * We need another helper class to deal with differences between * Sax2 handler (content handler), and Sax1 handler (document handler) * @deprecated */ final static class DocHandlerWrapper implements ContentHandler { final DocumentHandler docHandler; final AttributesWrapper mAttrWrapper = new AttributesWrapper(); /** * @deprecated */ DocHandlerWrapper(DocumentHandler h) { docHandler = h; } public void characters(char[] ch, int start, int length) throws SAXException { docHandler.characters(ch, start, length); } public void endDocument() throws SAXException { docHandler.endDocument(); } public void endElement(String uri, String localName, String qName) throws SAXException { if (qName == null) { qName = localName; } docHandler.endElement(qName); } public void endPrefixMapping(String prefix) { // no equivalent in SAX1, ignore } public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { docHandler.ignorableWhitespace(ch, start, length); } public void processingInstruction(String target, String data) throws SAXException { docHandler.processingInstruction(target, data); } public void setDocumentLocator(Locator locator) { docHandler.setDocumentLocator(locator); } public void skippedEntity(String name) { // no equivalent in SAX1, ignore } public void startDocument() throws SAXException { docHandler.startDocument(); } public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { if (qName == null) { qName = localName; } // Also, need to wrap Attributes to look like AttributeLost mAttrWrapper.setAttributes(attrs); docHandler.startElement(qName, mAttrWrapper); } public void startPrefixMapping(String prefix, String uri) { // no equivalent in SAX1, ignore } } /** * And one more helper to deal with attribute access differences * @deprecated */ final static class AttributesWrapper implements AttributeList { Attributes attrs; public AttributesWrapper() { } public void setAttributes(Attributes a) { attrs = a; } public int getLength() { return attrs.getLength(); } public String getName(int i) { String n = attrs.getQName(i); return (n == null) ? attrs.getLocalName(i) : n; } public String getType(int i) { return attrs.getType(i); } public String getType(String name) { return attrs.getType(name); } public String getValue(int i) { return attrs.getValue(i); } public String getValue(String name) { return attrs.getValue(name); } } }