1 // This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. 2 // 3 // TagSoup is licensed under the Apache License, 4 // Version 2.0. You may obtain a copy of this license at 5 // http://www.apache.org/licenses/LICENSE-2.0 . You may also have 6 // additional legal rights not granted by this license. 7 // 8 // TagSoup is distributed in the hope that it will be useful, but 9 // unless required by applicable law or agreed to in writing, TagSoup 10 // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 11 // OF ANY KIND, either express or implied; not even the implied warranty 12 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13 14 package org.ccil.cowan.tagsoup.jaxp; 15 16 import java.io.IOException; 17 import javax.xml.parsers.*; 18 19 import org.xml.sax.*; 20 21 /** 22 * This is a simpler adapter class that allows using SAX1 interface on top 23 * of basic SAX2 implementation, such as TagSoup. 24 * 25 * @author Tatu Saloranta (cowtowncoder@yahoo.com) 26 * @deprecated 27 */ 28 public class SAX1ParserAdapter 29 implements org.xml.sax.Parser 30 { 31 final XMLReader xmlReader; 32 SAX1ParserAdapter(XMLReader xr)33 public SAX1ParserAdapter(XMLReader xr) 34 { 35 xmlReader = xr; 36 } 37 38 // Sax1 API impl 39 parse(InputSource source)40 public void parse(InputSource source) 41 throws SAXException 42 { 43 try { 44 xmlReader.parse(source); 45 } catch (IOException ioe) { 46 throw new SAXException(ioe); 47 } 48 } 49 parse(String systemId)50 public void parse(String systemId) 51 throws SAXException 52 { 53 try { 54 xmlReader.parse(systemId); 55 } catch (IOException ioe) { 56 throw new SAXException(ioe); 57 } 58 } 59 60 /** 61 * @deprecated 62 */ setDocumentHandler(DocumentHandler h)63 public void setDocumentHandler(DocumentHandler h) 64 { 65 xmlReader.setContentHandler(new DocHandlerWrapper(h)); 66 } 67 setDTDHandler(DTDHandler h)68 public void setDTDHandler(DTDHandler h) 69 { 70 xmlReader.setDTDHandler(h); 71 } 72 setEntityResolver(EntityResolver r)73 public void setEntityResolver(EntityResolver r) 74 { 75 xmlReader.setEntityResolver(r); 76 } 77 setErrorHandler(ErrorHandler h)78 public void setErrorHandler(ErrorHandler h) 79 { 80 xmlReader.setErrorHandler(h); 81 } 82 setLocale(java.util.Locale locale)83 public void setLocale(java.util.Locale locale) 84 throws SAXException 85 { 86 /* I have no idea what this is supposed to do... so let's 87 * throw an exception 88 */ 89 throw new SAXNotSupportedException("TagSoup does not implement setLocale() method"); 90 } 91 92 // Helper classes: 93 94 /** 95 * We need another helper class to deal with differences between 96 * Sax2 handler (content handler), and Sax1 handler (document handler) 97 * @deprecated 98 */ 99 final static class DocHandlerWrapper 100 implements ContentHandler 101 { 102 final DocumentHandler docHandler; 103 104 final AttributesWrapper mAttrWrapper = new AttributesWrapper(); 105 106 /** 107 * @deprecated 108 */ DocHandlerWrapper(DocumentHandler h)109 DocHandlerWrapper(DocumentHandler h) 110 { 111 docHandler = h; 112 } 113 characters(char[] ch, int start, int length)114 public void characters(char[] ch, int start, int length) 115 throws SAXException 116 { 117 docHandler.characters(ch, start, length); 118 } 119 endDocument()120 public void endDocument() 121 throws SAXException 122 { 123 docHandler.endDocument(); 124 } 125 endElement(String uri, String localName, String qName)126 public void endElement(String uri, String localName, String qName) 127 throws SAXException 128 { 129 if (qName == null) { 130 qName = localName; 131 } 132 docHandler.endElement(qName); 133 } 134 endPrefixMapping(String prefix)135 public void endPrefixMapping(String prefix) 136 { 137 // no equivalent in SAX1, ignore 138 } 139 ignorableWhitespace(char[] ch, int start, int length)140 public void ignorableWhitespace(char[] ch, int start, int length) 141 throws SAXException 142 { 143 docHandler.ignorableWhitespace(ch, start, length); 144 } 145 processingInstruction(String target, String data)146 public void processingInstruction(String target, String data) 147 throws SAXException 148 { 149 docHandler.processingInstruction(target, data); 150 } 151 setDocumentLocator(Locator locator)152 public void setDocumentLocator(Locator locator) 153 { 154 docHandler.setDocumentLocator(locator); 155 } 156 skippedEntity(String name)157 public void skippedEntity(String name) 158 { 159 // no equivalent in SAX1, ignore 160 } 161 startDocument()162 public void startDocument() 163 throws SAXException 164 { 165 docHandler.startDocument(); 166 } 167 startElement(String uri, String localName, String qName, Attributes attrs)168 public void startElement(String uri, String localName, String qName, 169 Attributes attrs) 170 throws SAXException 171 { 172 if (qName == null) { 173 qName = localName; 174 } 175 // Also, need to wrap Attributes to look like AttributeLost 176 mAttrWrapper.setAttributes(attrs); 177 docHandler.startElement(qName, mAttrWrapper); 178 } 179 startPrefixMapping(String prefix, String uri)180 public void startPrefixMapping(String prefix, String uri) 181 { 182 // no equivalent in SAX1, ignore 183 } 184 } 185 186 /** 187 * And one more helper to deal with attribute access differences 188 * @deprecated 189 */ 190 final static class AttributesWrapper 191 implements AttributeList 192 { 193 Attributes attrs; 194 AttributesWrapper()195 public AttributesWrapper() { } 196 setAttributes(Attributes a)197 public void setAttributes(Attributes a) { 198 attrs = a; 199 } 200 getLength()201 public int getLength() 202 { 203 return attrs.getLength(); 204 } 205 getName(int i)206 public String getName(int i) 207 { 208 String n = attrs.getQName(i); 209 return (n == null) ? attrs.getLocalName(i) : n; 210 } 211 getType(int i)212 public String getType(int i) 213 { 214 return attrs.getType(i); 215 } 216 getType(String name)217 public String getType(String name) 218 { 219 return attrs.getType(name); 220 } 221 getValue(int i)222 public String getValue(int i) 223 { 224 return attrs.getValue(i); 225 } 226 getValue(String name)227 public String getValue(String name) 228 { 229 return attrs.getValue(name); 230 } 231 } 232 } 233