blob: 883a3e779536e6a8fb97afef4300fafef6fb193f [file] [log] [blame]
// 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);
}
}
}