| /******************************************************************************* |
| * 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.internal.util; |
| |
| |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; |
| import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; |
| |
| |
| /** |
| */ |
| public class SelectionCollector extends org.eclipse.wst.css.core.internal.util.AbstractCssTraverser { |
| |
| int start, end; |
| List selectedNodes; |
| |
| /** |
| * SelectionCollector constructor comment. |
| */ |
| public SelectionCollector() { |
| super(); |
| } |
| |
| /** |
| */ |
| protected void begin(ICSSNode node) { |
| selectedNodes = new ArrayList(); |
| } |
| |
| /** |
| */ |
| public List getSelectedNodes() { |
| if (selectedNodes == null) |
| return new ArrayList(); |
| else |
| return new ArrayList(selectedNodes); |
| } |
| |
| /** |
| */ |
| protected short preNode(ICSSNode node) { |
| IndexedRegion iNode = (IndexedRegion) node; |
| if (iNode.getStartOffset() <= end && start < iNode.getEndOffset()) { |
| if (node.getNodeType() != ICSSNode.STYLESHEET_NODE) { |
| IndexedRegion iFirstChild = (IndexedRegion) node.getFirstChild(); |
| IndexedRegion iLastChild = (IndexedRegion) node.getLastChild(); |
| if (iFirstChild == null || start < iFirstChild.getStartOffset() || iLastChild.getEndOffset() <= end) |
| selectedNodes.add(node); |
| } |
| return TRAV_CONT; |
| } |
| if (iNode.getStartOffset() > end) |
| return TRAV_STOP; |
| else |
| return TRAV_PRUNE; |
| } |
| |
| /** |
| */ |
| public void setRegion(int newStart, int newEnd) { |
| start = newStart; |
| end = newEnd; |
| } |
| } |