• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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