1 package hotsax.html.sax; 2 3 import org.xml.sax.*; 4 import org.xml.sax.helpers.*; 5 import org.xml.sax.ext.*; 6 7 import java.io.*; 8 import java.util.*; 9 10 11 12 16 17 22 public class ParserDelegate { 23 24 private HtmlParser parser = null; 25 private XMLReader reader = null; 26 private ContentHandler contentHandler = null; 27 private LexicalHandler lexicalHandler = null; 29 private org.xml.sax.helpers.AttributesImpl attrList; 31 32 public ParserDelegate(HtmlParser HtmlParser) { 33 this.parser = parser; 34 attrList = new org.xml.sax.helpers.AttributesImpl (); 35 } 36 37 38 41 46 public void startDocument() 47 { 48 try { 49 if (contentHandler != null) 50 contentHandler.startDocument(); 51 52 } 53 catch (SAXException ex) 54 { 55 parser.yyerror(ex.getMessage()); 56 } 57 } 58 59 60 66 public void processingInstruction(HtmlParserVal lval) 67 { 68 try { 69 if (contentHandler != null) { 70 StringTokenizer stok = new StringTokenizer(lval.sval); 72 if (stok.hasMoreElements()) 73 { 74 String target = stok.nextToken(); 75 String data; 76 if (stok.hasMoreElements()) 77 data = stok.nextToken(); 78 else 79 data = ""; 80 if (!target.equals("xml")) 81 contentHandler.processingInstruction(target, data); 82 } 83 } 84 } 85 catch (SAXException ex) 86 { 87 parser.yyerror(ex.getMessage()); 88 } 89 } 90 91 95 public void startElement() 96 { 97 attrList.clear(); 98 } 99 100 104 public void addAttribute(HtmlParserVal lval) 105 { 106 if (lval instanceof hotsax.html.sax.Attribute) 107 { 108 Attribute attr = (Attribute)lval; 109 attrList.addAttribute("", "", attr.getName().toLowerCase(), "NMTOKEN", attr.getValue()); 110 } 111 else 112 { 113 System.err.println("Parser passed " + lval.getClass().getName() + " to delegate expecting Attribute"); 114 } 115 } 116 117 121 public void startElement(HtmlParserVal lval) 122 { 123 try { 124 if (contentHandler != null) 125 { 126 contentHandler.startElement("", lval.sval, "", attrList); 127 } 128 } 129 catch (SAXException ex) 130 { 131 parser.yyerror(ex.getMessage()); 132 } 133 } 134 135 136 145 public void characters(HtmlParserVal lval) 146 { 147 try { 148 if (contentHandler != null) { 150 char ch[] = lval.sval.toCharArray(); 151 contentHandler.characters(ch, 0, lval.sval.length()); 152 } 153 } 154 catch (SAXException ex) 155 { 156 parser.yyerror(ex.getMessage()); 157 } 158 } 159 160 161 165 public void endElement(HtmlParserVal lval) 166 { 167 try { 168 if (contentHandler != null) 169 contentHandler.endElement("", lval.sval, ""); 170 } 171 catch (SAXException ex) 172 { 173 parser.yyerror(ex.getMessage()); 174 } 175 } 176 177 180 public void endDocument() 181 { 182 try { 183 if (contentHandler != null) 184 contentHandler.endDocument(); 185 } 186 catch (SAXException ex) 187 { 188 parser.yyerror(ex.getMessage()); 189 } 190 } 191 192 194 200 public void comment(HtmlParserVal lval) { 201 try { 202 if (lexicalHandler != null) 203 { 204 char ch[] = lval.sval.toCharArray(); 205 lexicalHandler.comment(ch, 0, lval.sval.length()); 206 } 207 } 208 catch (SAXException ex) 209 { 210 parser.yyerror(ex.getMessage()); 211 } 212 } 213 214 215 220 public void startCDATA() { 221 try { 222 if (lexicalHandler != null) 223 { 224 lexicalHandler.startCDATA(); 225 } 226 } 227 catch (SAXException ex) 228 { 229 parser.yyerror(ex.getMessage()); 230 } 231 } 232 233 238 public void endCDATA() { 239 try { 240 if (lexicalHandler != null) 241 { 242 lexicalHandler.endCDATA(); 243 } 244 } 245 catch (SAXException ex) 246 { 247 parser.yyerror(ex.getMessage()); 248 } 249 } 250 251 255 public void startDTD(HtmlParserVal lval) { 256 try { 257 if (lexicalHandler != null) 258 { 259 StringTokenizer stok = new StringTokenizer(lval.sval); 261 if (stok.hasMoreElements()) 262 { 263 String target = stok.nextToken(); 264 String data; 265 if (stok.hasMoreElements()) 266 data = stok.nextToken(); 267 else 268 data = ""; 269 270 lexicalHandler.startDTD(target, data, null); 271 } 272 } 273 } 274 catch (SAXException ex) 275 { 276 parser.yyerror(ex.getMessage()); 277 } 278 } 279 280 283 public void endDTD() { 284 try { 285 if (lexicalHandler != null) 286 lexicalHandler.endDTD(); 287 } 288 catch (SAXException ex) 289 { 290 parser.yyerror(ex.getMessage()); 291 } 292 } 293 294 295 296 297 298 301 public void setSaxParser(XMLReader reader) { 302 this.reader = reader; 303 304 try { 305 if (reader != null) 306 { 307 contentHandler = reader.getContentHandler(); lexicalHandler = (LexicalHandler)reader.getProperty("http://xml.org/sax/properties/lexical-handler"); 309 } 310 } 311 catch (SAXNotRecognizedException ex) 312 { 313 System.err.println("no lexical handler installed"); 314 } 315 catch (SAXNotSupportedException ex) 316 { 317 System.err.println("no lexical handler installed"); 318 } 319 320 } 321 322 } 323 | Popular Tags |