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.*; 17 import java.util.*; 18 import javax.xml.parsers.*; 19 20 import org.xml.sax.*; 21 22 import org.ccil.cowan.tagsoup.Parser; 23 24 /** 25 * This is a simple implementation of JAXP {@link SAXParser}, 26 * to allow easier integration of TagSoup with the default JDK 27 * xml processing stack. 28 * 29 * @author Tatu Saloranta (cowtowncoder@yahoo.com) 30 */ 31 public class SAXParserImpl 32 extends SAXParser 33 { 34 final org.ccil.cowan.tagsoup.Parser parser; 35 SAXParserImpl()36 protected SAXParserImpl() // used by factory, for prototypes 37 { 38 super(); 39 parser = new org.ccil.cowan.tagsoup.Parser(); 40 } 41 newInstance(Map features)42 public static SAXParserImpl newInstance(Map features) 43 throws SAXException 44 { 45 SAXParserImpl parser = new SAXParserImpl(); 46 if (features != null) { 47 Iterator it = features.entrySet().iterator(); 48 while (it.hasNext()) { 49 Map.Entry entry = (Map.Entry) it.next(); 50 parser.setFeature((String) entry.getKey(), ((Boolean) entry.getValue()).booleanValue()); 51 } 52 } 53 return parser; 54 } 55 56 // // // JAXP API implementation: 57 58 /** 59 * To support SAX1 interface, we'll need to use an adapter. 60 * @deprecated 61 */ getParser()62 public org.xml.sax.Parser getParser() 63 throws SAXException 64 { 65 return new SAX1ParserAdapter(parser); 66 } 67 getXMLReader()68 public XMLReader getXMLReader() { return parser; } 69 isNamespaceAware()70 public boolean isNamespaceAware() 71 { 72 try { 73 return parser.getFeature(Parser.namespacesFeature); 74 } catch (SAXException sex) { // should never happen... so: 75 throw new RuntimeException(sex.getMessage()); 76 } 77 } 78 isValidating()79 public boolean isValidating() 80 { 81 try { 82 return parser.getFeature(Parser.validationFeature); 83 } catch (SAXException sex) { // should never happen... so: 84 throw new RuntimeException(sex.getMessage()); 85 } 86 } 87 setProperty(String name, Object value)88 public void setProperty(String name, Object value) 89 throws SAXNotRecognizedException, SAXNotSupportedException 90 { 91 parser.setProperty(name, value); 92 } 93 getProperty(String name)94 public Object getProperty(String name) 95 throws SAXNotRecognizedException, SAXNotSupportedException 96 { 97 return parser.getProperty(name); 98 } 99 100 // // // Additional convenience methods 101 setFeature(String name, boolean value)102 public void setFeature(String name, boolean value) 103 throws SAXNotRecognizedException, SAXNotSupportedException 104 { 105 parser.setFeature(name, value); 106 } 107 getFeature(String name)108 public boolean getFeature(String name) 109 throws SAXNotRecognizedException, SAXNotSupportedException 110 { 111 return parser.getFeature(name); 112 } 113 } 114