tohtmlsaxhandler.java
来自「JAVA 所有包」· Java 代码 · 共 744 行 · 第 1/2 页
JAVA
744 行
/** * Does nothing. * @see org.xml.sax.ext.LexicalHandler#endCDATA() */ public void endCDATA() throws SAXException { return; } /** * Does nothing. * @see org.xml.sax.ext.LexicalHandler#endDTD() */ public void endDTD() throws SAXException { } /** * Does nothing. * @see org.xml.sax.ext.LexicalHandler#startCDATA() */ public void startCDATA() throws SAXException { } /** * Does nothing. * @see org.xml.sax.ext.LexicalHandler#startEntity(String) */ public void startEntity(String arg0) throws SAXException { } /** * Receive notification of the end of a document. * * <p>The SAX parser will invoke this method only once, and it will * be the last method invoked during the parse. The parser shall * not invoke this method until it has either abandoned parsing * (because of an unrecoverable error) or reached the end of * input.</p> * * @throws org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * * @throws org.xml.sax.SAXException * * */ public void endDocument() throws SAXException { flushPending(); // Close output document m_saxHandler.endDocument(); if (m_tracer != null) super.fireEndDoc(); } /** * This method is called when all the data needed for a call to the * SAX handler's startElement() method has been gathered. */ protected void closeStartTag() throws SAXException { m_elemContext.m_startTagOpen = false; // Now is time to send the startElement event m_saxHandler.startElement( EMPTYSTRING, m_elemContext.m_elementName, m_elemContext.m_elementName, m_attributes); m_attributes.clear(); } /** * Do nothing. * @see SerializationHandler#close() */ public void close() { return; } /** * Receive notification of character data. * * @param chars The string of characters to process. * * @throws org.xml.sax.SAXException * * @see ExtendedContentHandler#characters(String) */ public void characters(final String chars) throws SAXException { final int length = chars.length(); if (length > m_charsBuff.length) { m_charsBuff = new char[length * 2 + 1]; } chars.getChars(0, length, m_charsBuff, 0); this.characters(m_charsBuff, 0, length); } /** * A constructor * @param handler the wrapped SAX content handler * @param encoding the encoding of the output HTML document */ public ToHTMLSAXHandler(ContentHandler handler, String encoding) { super(handler,encoding); } /** * A constructor. * @param handler the wrapped SAX content handler * @param lex the wrapped lexical handler * @param encoding the encoding of the output HTML document */ public ToHTMLSAXHandler( ContentHandler handler, LexicalHandler lex, String encoding) { super(handler,lex,encoding); } /** * An element starts, but attributes are not fully known yet. * * @param elementNamespaceURI the URI of the namespace of the element * (optional) * @param elementLocalName the element name, but without prefix * (optional) * @param elementName the element name, with prefix, if any (required) * * @see ExtendedContentHandler#startElement(String) */ public void startElement( String elementNamespaceURI, String elementLocalName, String elementName) throws SAXException { super.startElement(elementNamespaceURI, elementLocalName, elementName); flushPending(); // Handle document type declaration (for first element only) if (!m_dtdHandled) { String doctypeSystem = getDoctypeSystem(); String doctypePublic = getDoctypePublic(); if ((doctypeSystem != null) || (doctypePublic != null)) { if (m_lexHandler != null) m_lexHandler.startDTD( elementName, doctypePublic, doctypeSystem); } m_dtdHandled = true; } m_elemContext = m_elemContext.push(elementNamespaceURI, elementLocalName, elementName); } /** * An element starts, but attributes are not fully known yet. * * @param elementName the element name, with prefix, if any * * @see ExtendedContentHandler#startElement(String) */ public void startElement(String elementName) throws SAXException { this.startElement(null,null, elementName); } /** * Receive notification of the end of an element. * @param elementName The element type name * @throws org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * * @see ExtendedContentHandler#endElement(String) */ public void endElement(String elementName) throws SAXException { flushPending(); m_saxHandler.endElement(EMPTYSTRING, elementName, elementName); // time to fire off endElement event if (m_tracer != null) super.fireEndElem(elementName); } /** * Receive notification of character data. * * <p>The Parser will call this method to report each chunk of * character data. SAX parsers may return all contiguous character * data in a single chunk, or they may split it into several * chunks; however, all of the characters in any single event * must come from the same external entity, so that the Locator * provides useful information.</p> * * <p>The application must not attempt to read from the array * outside of the specified range.</p> * * <p>Note that some parsers will report whitespace using the * ignorableWhitespace() method rather than this one (validating * parsers must do so).</p> * * @param ch The characters from the XML document. * @param off The start position in the array. * @param len The number of characters to read from the array. * @throws org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see #ignorableWhitespace * @see org.xml.sax.Locator * * @throws org.xml.sax.SAXException * * @see org.xml.sax.ContentHandler#characters(char[], int, int) */ public void characters(char[] ch, int off, int len) throws SAXException { flushPending(); m_saxHandler.characters(ch, off, len); // time to fire off characters event if (m_tracer != null) super.fireCharEvent(ch, off, len); } /** * This method flushes any pending events, which can be startDocument() * closing the opening tag of an element, or closing an open CDATA section. */ public void flushPending() throws SAXException { if (m_needToCallStartDocument) { startDocumentInternal(); m_needToCallStartDocument = false; } // Close any open element if (m_elemContext.m_startTagOpen) { closeStartTag(); m_elemContext.m_startTagOpen = false; } } /** * Handle a prefix/uri mapping, which is associated with a startElement() * that is soon to follow. Need to close any open start tag to make * sure than any name space attributes due to this event are associated wih * the up comming element, not the current one. * @see ExtendedContentHandler#startPrefixMapping * * @param prefix The Namespace prefix being declared. * @param uri The Namespace URI the prefix is mapped to. * @param shouldFlush true if any open tags need to be closed first, this * will impact which element the mapping applies to (open parent, or its up * comming child) * @return returns true if the call made a change to the current * namespace information, false if it did not change anything, e.g. if the * prefix/namespace mapping was already in scope from before. * * @throws org.xml.sax.SAXException The client may throw * an exception during processing. */ public boolean startPrefixMapping( String prefix, String uri, boolean shouldFlush) throws SAXException { // no namespace support for HTML if (shouldFlush) flushPending(); m_saxHandler.startPrefixMapping(prefix,uri); return false; } /** * Begin the scope of a prefix-URI Namespace mapping * just before another element is about to start. * This call will close any open tags so that the prefix mapping * will not apply to the current element, but the up comming child. * * @see org.xml.sax.ContentHandler#startPrefixMapping * * @param prefix The Namespace prefix being declared. * @param uri The Namespace URI the prefix is mapped to. * * @throws org.xml.sax.SAXException The client may throw * an exception during processing. * */ public void startPrefixMapping(String prefix, String uri) throws org.xml.sax.SAXException { startPrefixMapping(prefix,uri,true); } /** * This method is used when a prefix/uri namespace mapping * is indicated after the element was started with a * startElement() and before and endElement(). * startPrefixMapping(prefix,uri) would be used before the * startElement() call. * @param prefix the prefix associated with the given URI. * @param uri the URI of the namespace * * @see ExtendedContentHandler#namespaceAfterStartElement(String, String) */ public void namespaceAfterStartElement( final String prefix, final String uri) throws SAXException { // hack for XSLTC with finding URI for default namespace if (m_elemContext.m_elementURI == null) { String prefix1 = getPrefixPart(m_elemContext.m_elementName); if (prefix1 == null && EMPTYSTRING.equals(prefix)) { // the elements URI is not known yet, and it // doesn't have a prefix, and we are currently // setting the uri for prefix "", so we have // the uri for the element... lets remember it m_elemContext.m_elementURI = uri; } } startPrefixMapping(prefix,uri,false); } /** * Try's to reset the super class and reset this class for * re-use, so that you don't need to create a new serializer * (mostly for performance reasons). * * @return true if the class was successfuly reset. * @see Serializer#reset() */ public boolean reset() { boolean wasReset = false; if (super.reset()) { resetToHTMLSAXHandler(); wasReset = true; } return wasReset; } /** * Reset all of the fields owned by ToHTMLSAXHandler class * */ private void resetToHTMLSAXHandler() { this.m_escapeSetting = false; } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?