Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLDocumentContentValidator.java')
-rw-r--r--bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLDocumentContentValidator.java196
1 files changed, 0 insertions, 196 deletions
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLDocumentContentValidator.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLDocumentContentValidator.java
deleted file mode 100644
index 39328d3e3c..0000000000
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLDocumentContentValidator.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.html.core.internal.validate;
-
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
-import org.eclipse.wst.xml.core.internal.document.DocumentTypeAdapter;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMText;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class HTMLDocumentContentValidator extends PrimeValidator {
-
-
- private final static class Division {
- private Vector explicitHtmls = new Vector();
- private Vector rest = new Vector();
-
- public Division(Document document, NodeList children) {
- String rootTagName = getRootTagName(document);
- for (int i = 0; i < children.getLength(); i++) {
- Node child = children.item(i);
- if (isHtmlTag(child, rootTagName)) {
- explicitHtmls.add(child);
- }
- else {
- rest.add(child);
- }
- }
- }
-
- public boolean hasExplicitHtmls() {
- return explicitHtmls.size() > 0;
- }
-
- public List getExplicitHtmls() {
- return explicitHtmls;
- }
-
- public Iterator getRestNodes() {
- return rest.iterator();
- }
-
- /* utilities */
- private static boolean isHtmlTag(Node node, String tagName) {
- if (node.getNodeType() != Node.ELEMENT_NODE)
- return false;
- return ((Element) node).getTagName().equalsIgnoreCase(tagName);
- }
-
- private static String getRootTagName(Document document) {
- DocumentTypeAdapter adapter = (DocumentTypeAdapter) ((IDOMDocument) document).getAdapterFor(DocumentTypeAdapter.class);
- if (adapter != null) {
- DocumentType docType = adapter.getDocumentType();
- if (docType != null) {
- return docType.getName();
- }
- }
-
- return HTML40Namespace.ElementName.HTML;
- }
- }
-
- /**
- * HTMLDocumentContentValidator constructor comment.
- */
- public HTMLDocumentContentValidator() {
- super();
- }
-
- /**
- * Allowing the INodeAdapter to compare itself against the type allows it
- * to return true in more than one case.
- */
- public boolean isAdapterForType(Object type) {
- return ((type == HTMLDocumentContentValidator.class) || super.isAdapterForType(type));
- }
-
- /**
- */
- public void validate(IndexedRegion node) {
- // isFragment check should be more intelligent.
- boolean isFragment = true;
-
- Document target = (Document) node;
- NodeList children = target.getChildNodes();
- if (children == null)
- return;
-
- Division division = new Division(target, children);
- if (division.hasExplicitHtmls()) {
- isFragment = false;
-
- List explicits = division.getExplicitHtmls();
- if (explicits.size() > 1) {
- for (int i = 1; i < explicits.size(); i++) {
- Element html = (Element) explicits.get(i);
- // report error (duplicate)
- Segment errorSeg = FMUtil.getSegment((IDOMNode) html, FMUtil.SEG_START_TAG);
- if (errorSeg != null)
- reporter.report(MessageFactory.createMessage(new ErrorInfoImpl(ErrorState.DUPLICATE_ERROR, errorSeg, html)));
- }
- }
- }
- validateContent(division.getRestNodes(), isFragment);
- }
-
- /*
- * This methods validate nodes other than HTML elements.
- */
- private void validateContent(Iterator children, boolean isFragment) {
- boolean foundDoctype = false;
- while (children.hasNext()) {
- IDOMNode child = (IDOMNode) children.next();
-
- int error = ErrorState.NONE_ERROR;
- int segType = FMUtil.SEG_WHOLE_TAG;
-
- switch (child.getNodeType()) {
- case Node.ELEMENT_NODE :
- if (!isFragment) {
- Element childElem = (Element) child;
- CMElementDeclaration ced = CMUtil.getDeclaration(childElem);
- // Undefined element is valid.
- if (ced == null)
- continue;
- // JSP (includes custom tags) and SSI are valid.
- if (CMUtil.isForeign(childElem) || CMUtil.isSSI(ced))
- continue; // Defect 186774
-
- // report error (invalid content)
- error = ErrorState.INVALID_CONTENT_ERROR;
- // mark the whole start tag as error.
- segType = FMUtil.SEG_START_TAG;
- }
- break;
- case Node.TEXT_NODE :
- if (!isFragment) {
- // TEXT node is valid when it contains white space
- // characters only.
- // Otherwise, it is invalid content.
- if (((IDOMText) child).isElementContentWhitespace())
- continue;
- error = ErrorState.INVALID_CONTENT_ERROR;
- segType = FMUtil.SEG_WHOLE_TAG;
- }
- break;
- case Node.DOCUMENT_TYPE_NODE :
- // DOCTYPE is also valid when it appears once and only
- // once.
- if (!foundDoctype) {
- foundDoctype = true;
- continue;
- }
- error = ErrorState.DUPLICATE_ERROR;
- segType = FMUtil.SEG_WHOLE_TAG;
- break;
- case Node.COMMENT_NODE :
- // always valid.
- case Node.PROCESSING_INSTRUCTION_NODE :
- continue;
- default :
- if (!isFragment) {
- error = ErrorState.INVALID_CONTENT_ERROR;
- segType = FMUtil.SEG_WHOLE_TAG;
- }
- break;
- }
- if (error != ErrorState.NONE_ERROR) {
- Segment errorSeg = FMUtil.getSegment(child, segType);
- if (errorSeg != null)
- reporter.report(MessageFactory.createMessage(new ErrorInfoImpl(error, errorSeg, child)));
- }
- }
- }
-
-}

Back to the top