141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. 241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// 341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// TagSoup is licensed under the Apache License, 441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// Version 2.0. You may obtain a copy of this license at 541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// http://www.apache.org/licenses/LICENSE-2.0 . You may also have 641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// additional legal rights not granted by this license. 741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// 841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// TagSoup is distributed in the hope that it will be useful, but 941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// unless required by applicable law or agreed to in writing, TagSoup 1041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 1141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// OF ANY KIND, either express or implied; not even the implied warranty 1241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 1441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Projectpackage org.ccil.cowan.tagsoup.jaxp; 1541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 1641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Projectimport java.io.*; 1741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Projectimport java.util.*; 1841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Projectimport javax.xml.parsers.*; 1941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 2041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Projectimport org.xml.sax.*; 2141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 2241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Projectimport org.ccil.cowan.tagsoup.Parser; 2341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 2441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project/** 2541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project * This is a simple implementation of JAXP {@link SAXParser}, 2641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project * to allow easier integration of TagSoup with the default JDK 2741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project * xml processing stack. 2841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project * 2941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project * @author Tatu Saloranta (cowtowncoder@yahoo.com) 3041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project */ 3141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Projectpublic class SAXParserImpl 3241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project extends SAXParser 3341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project{ 3441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project final org.ccil.cowan.tagsoup.Parser parser; 3541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 3641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project protected SAXParserImpl() // used by factory, for prototypes 3741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 3841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project super(); 3941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project parser = new org.ccil.cowan.tagsoup.Parser(); 4041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 4141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 4241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public static SAXParserImpl newInstance(Map features) 4341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throws SAXException 4441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 4541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project SAXParserImpl parser = new SAXParserImpl(); 4641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project if (features != null) { 4741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project Iterator it = features.entrySet().iterator(); 4841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project while (it.hasNext()) { 4941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project Map.Entry entry = (Map.Entry) it.next(); 5041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project parser.setFeature((String) entry.getKey(), ((Boolean) entry.getValue()).booleanValue()); 5141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 5241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 5341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project return parser; 5441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 5541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 5641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project // // // JAXP API implementation: 5741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 5841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project /** 5941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project * To support SAX1 interface, we'll need to use an adapter. 6041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project * @deprecated 6141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project */ 6241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public org.xml.sax.Parser getParser() 6341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throws SAXException 6441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 6541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project return new SAX1ParserAdapter(parser); 6641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 6741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 6841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public XMLReader getXMLReader() { return parser; } 6941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 7041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public boolean isNamespaceAware() 7141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 7241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project try { 7341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project return parser.getFeature(Parser.namespacesFeature); 7441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } catch (SAXException sex) { // should never happen... so: 7541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throw new RuntimeException(sex.getMessage()); 7641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 7741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 7841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 7941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public boolean isValidating() 8041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 8141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project try { 8241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project return parser.getFeature(Parser.validationFeature); 8341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } catch (SAXException sex) { // should never happen... so: 8441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throw new RuntimeException(sex.getMessage()); 8541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 8641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 8741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 8841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public void setProperty(String name, Object value) 8941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 9041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 9141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project parser.setProperty(name, value); 9241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 9341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 9441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public Object getProperty(String name) 9541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 9641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 9741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project return parser.getProperty(name); 9841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 9941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 10041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project // // // Additional convenience methods 10141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 10241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public void setFeature(String name, boolean value) 10341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 10441cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 10541cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project parser.setFeature(name, value); 10641cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 10741cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project 10841cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project public boolean getFeature(String name) 10941cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException 11041cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project { 11141cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project return parser.getFeature(name); 11241cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project } 11341cdf40d933f4029c37cf844f8cf3314114e4e0aThe Android Open Source Project} 114