diff options
Diffstat (limited to 'bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java')
-rw-r--r-- | bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java new file mode 100644 index 0000000000..042a314d52 --- /dev/null +++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2004 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.css.core.util; + + + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; + +import org.eclipse.wst.css.core.document.ICSSImportRule; +import org.eclipse.wst.css.core.document.ICSSMediaRule; +import org.eclipse.wst.css.core.document.ICSSNode; +import org.eclipse.wst.css.core.document.ICSSSelector; +import org.eclipse.wst.css.core.document.ICSSSelectorItem; +import org.eclipse.wst.css.core.document.ICSSSelectorList; +import org.eclipse.wst.css.core.document.ICSSSimpleSelector; +import org.eclipse.wst.css.core.document.ICSSStyleRule; +import org.eclipse.wst.css.core.document.ICSSStyleSheet; + + +/** + * + */ +public class CSSClassTraverser extends AbstractCssTraverser { + + ArrayList fClassNames; + + /** + * + */ + public CSSClassTraverser() { + super(); + } + + /** + * + */ + private void addClassNames(ICSSStyleRule rule) { + ICSSSelectorList selectorList = rule.getSelectors(); + Iterator iSelector = selectorList.getIterator(); + while (iSelector.hasNext()) { + ICSSSelector selector = (ICSSSelector) iSelector.next(); + Iterator iItem = selector.getIterator(); + while (iItem.hasNext()) { + ICSSSelectorItem item = (ICSSSelectorItem) iItem.next(); + if (item.getItemType() == ICSSSelectorItem.SIMPLE) { + ICSSSimpleSelector sel = (ICSSSimpleSelector) item; + int nClasses = sel.getNumOfClasses(); + for (int iClass = 0; iClass < nClasses; iClass++) { + String className = sel.getClass(iClass); + if (!fClassNames.contains(className)) + fClassNames.add(className); + } + } + } + } + } + + /** + * + */ + protected void begin(ICSSNode node) { + if (fClassNames == null) + fClassNames = new ArrayList(); + } + + /** + * + */ + protected void end(ICSSNode node) { + } + + /** + * + */ + public Collection getClassNames() { + return (fClassNames != null) ? fClassNames : Collections.EMPTY_LIST; + } + + /** + * + */ + protected short postNode(ICSSNode node) { + return TRAV_CONT; + } + + /** + * + */ + protected short preNode(ICSSNode node) { + short ret; + if (node instanceof ICSSStyleRule) { + addClassNames((ICSSStyleRule) node); + ret = TRAV_PRUNE; + } + else if (node instanceof ICSSStyleSheet || node instanceof ICSSMediaRule || node instanceof ICSSImportRule) { + ret = TRAV_CONT; + } + else { + ret = TRAV_PRUNE; + } + return ret; + } +}
\ No newline at end of file |