/** Empty element. */ public void emptyElement(final QName element, XMLAttributes attrs, Augmentations augs) throws XNIException { startElement(element, attrs, augs); // browser ignore the closing indication for non empty tags like <form .../> but not for unknown element final HTMLElements.Element elem = getElement(element); if (elem.isEmpty() || elem.code == HTMLElements.UNKNOWN) { endElement(element, augs); } } // emptyElement(QName,XMLAttributes,Augmentations)
/** Ignorable whitespace. */ public void ignorableWhitespace(XMLString text, Augmentations augs) throws XNIException { characters(text, augs); } // ignorableWhitespace(XMLString,Augmentations)
notifyDiscardedStartElement(elem, attrs, augs); return; final HTMLElements.Element element = getElement(elem); final short elementCode = element.code; notifyDiscardedStartElement(elem, attrs, augs); return; notifyDiscardedStartElement(elem, attrs, augs); return; consumeBufferedEndElements(); // </head> (if any) has been buffered final QName head = createQName("head"); forceStartElement(head, null, synthesizedAugs()); endElement(head, synthesizedAugs()); consumeBufferedEndElements(); // </head> (if any) has been buffered notifyDiscardedStartElement(elem, attrs, augs); return; notifyDiscardedStartElement(elem, attrs, augs); return; consumeBufferedEndElements(); if (!fSeenRootElement && !fDocumentFragment) {
/** * Generates a missing <body> (which creates missing <head> when needed) */ private void forceStartBody() { final QName body = createQName("body"); if (fReportErrors) { fErrorReporter.reportWarning("HTML2006", new Object[]{body.localpart}); } forceStartElement(body, null, synthesizedAugs()); }
consumeBufferedEndElements(); forceStartBody(); // will force <html> and <head></head> final String body = modifyName("body", fNamesElems); fQName.setValues(null, body, body, null); callEndElement(fQName, synthesizedAugs()); final String ename = modifyName("html", fNamesElems); fQName.setValues(null, ename, ename, null); callEndElement(fQName, synthesizedAugs()); callEndElement(info.qname, synthesizedAugs());
notifyDiscardedEndElement(element, augs); return; HTMLElements.Element elem = getElement(element); int depth = getElementDepth(elem); if (depth == -1) { if (elem.code == HTMLElements.P) { forceStartElement(element, emptyAttributes(), synthesizedAugs()); endElement(element, augs); notifyDiscardedEndElement(element, augs); String ename = modifyName(element.rawname, fNamesElems); String iname = info.qname.rawname; fErrorReporter.reportWarning("HTML2007", new Object[]{ename,iname}); callEndElement(info.qname, i < depth - 1 ? synthesizedAugs() : augs); fErrorReporter.reportWarning("HTML2008", new Object[]{iname}); forceStartElement(info.qname, attributes, synthesizedAugs());
if (info.element.code == HTMLElements.HEAD || info.element.code == HTMLElements.HTML) { String hname = modifyName("head", fNamesElems); String bname = modifyName("body", fNamesElems); if (fReportErrors) { fErrorReporter.reportWarning("HTML2009", new Object[]{hname,bname}); endElement(fQName, synthesizedAugs()); insertBody = true; forceStartBody();
/** * Forces an element start, taking care to set the information to allow startElement to "see" that's * the element has been forced. * @return <code>true</code> if creation could be done (TABLE's creation for instance can't be forced) */ private boolean forceStartElement(final QName elem, XMLAttributes attrs, final Augmentations augs) throws XNIException { forcedStartElement_ = true; startElement(elem, attrs, augs); return fElementStack.top > 0 && elem.equals(fElementStack.peek().qname); }
/** Processing instruction. */ public void processingInstruction(String target, XMLString data, Augmentations augs) throws XNIException { fSeenAnything = true; consumeEarlyTextIfNeeded(); if (fDocumentHandler != null) { fDocumentHandler.processingInstruction(target, data, augs); } } // processingInstruction(String,XMLString,Augmentations)
/** * Consume elements that have been buffered, like </body></html> that are first consumed * at the end of document */ private void consumeBufferedEndElements() { final List toConsume = new ArrayList(endElementsBuffer_); endElementsBuffer_.clear(); for (int i=0; i<toConsume.size(); ++i) { final ElementEntry entry = (ElementEntry) toConsume.get(i); forcedEndElement_ = true; endElement(entry.name_, entry.augs_); } endElementsBuffer_.clear(); }
@Override protected HTMLElements.Element getElement(QName elementName) { HTMLElements.Element osmlElement = OSML_ELEMENTS.get(elementName.localpart); if (osmlElement != null) { return osmlElement; } return super.getElement(elementName); } }
notifyDiscardedEndElement(element, augs); return; HTMLElements.Element elem = getElement(element); int depth = getElementDepth(elem); if (depth == -1) { if (elem.code == HTMLElements.P) { forceStartElement(element, emptyAttributes(), synthesizedAugs()); endElement(element, augs); notifyDiscardedEndElement(element, augs); String ename = modifyName(element.rawname, fNamesElems); String iname = info.qname.rawname; fErrorReporter.reportWarning("HTML2007", new Object[]{ename,iname}); callEndElement(info.qname, i < depth - 1 ? synthesizedAugs() : augs); fErrorReporter.reportWarning("HTML2008", new Object[]{iname}); forceStartElement(info.qname, attributes, synthesizedAugs());
consumeBufferedEndElements(); forceStartBody(); // will force <html> and <head></head> final String body = modifyName("body", fNamesElems); fQName.setValues(null, body, body, null); callEndElement(fQName, synthesizedAugs()); final String ename = modifyName("html", fNamesElems); fQName.setValues(null, ename, ename, null); callEndElement(fQName, synthesizedAugs()); callEndElement(info.qname, synthesizedAugs());
if (info.element.code == HTMLElements.HEAD || info.element.code == HTMLElements.HTML) { String hname = modifyName("head", fNamesElems); String bname = modifyName("body", fNamesElems); if (fReportErrors) { fErrorReporter.reportWarning("HTML2009", new Object[]{hname,bname}); endElement(fQName, synthesizedAugs()); insertBody = true; forceStartBody();
/** * Generates a missing <body> (which creates missing <head> when needed) */ private void forceStartBody() { final QName body = createQName("body"); if (fReportErrors) { fErrorReporter.reportWarning("HTML2006", new Object[]{body.localpart}); } forceStartElement(body, null, synthesizedAugs()); }
@Override public void startElement(QName elem, XMLAttributes attrs, Augmentations augs) throws XNIException { // Normalize the case of forced-elements to lowercase for backward compatability if (!fSeenRootElement && elem.rawname.equalsIgnoreCase("html")) { elem.localpart = "html"; elem.rawname = "html"; } else if (!fSeenHeadElement && elem.rawname.equalsIgnoreCase("head")) { elem.localpart = "head"; elem.rawname = "head"; } else if (!fSeenBodyElement && elem.rawname.equalsIgnoreCase("body")) { elem.localpart = "body"; elem.rawname = "body"; } super.startElement(elem, attrs, augs); }
/** Comment. */ public void comment(XMLString text, Augmentations augs) throws XNIException { fSeenAnything = true; consumeEarlyTextIfNeeded(); if (fDocumentHandler != null) { fDocumentHandler.comment(text, augs); } } // comment(XMLString,Augmentations)
/** * Consume elements that have been buffered, like </body></html> that are first consumed * at the end of document */ private void consumeBufferedEndElements() { final List toConsume = new ArrayList(endElementsBuffer_); endElementsBuffer_.clear(); for (int i=0; i<toConsume.size(); ++i) { final ElementEntry entry = (ElementEntry) toConsume.get(i); forcedEndElement_ = true; endElement(entry.name_, entry.augs_); } endElementsBuffer_.clear(); }
@Override protected HTMLElements.Element getElement(QName elementName) { HTMLElements.Element osmlElement = OSML_ELEMENTS.get(elementName.localpart); if (osmlElement != null) { return osmlElement; } return super.getElement(elementName); } }
notifyDiscardedStartElement(elem, attrs, augs); return; final HTMLElements.Element element = getElement(elem); final short elementCode = element.code; notifyDiscardedStartElement(elem, attrs, augs); return; notifyDiscardedStartElement(elem, attrs, augs); return; notifyDiscardedStartElement(elem, attrs, augs); return; final QName head = createQName("head"); forceStartElement(head, null, synthesizedAugs()); endElement(head, synthesizedAugs()); consumeBufferedEndElements(); // </head> (if any) has been buffered fSeenFramesetElement = true; final QName head = createQName("head"); forceStartElement(head, null, synthesizedAugs()); endElement(head, synthesizedAugs()); consumeBufferedEndElements(); // </head> (if any) has been buffered notifyDiscardedStartElement(elem, attrs, augs);