| /******************************************************************************* |
| * Copyright (c) 2001, 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 |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.dtd.core.internal.text; |
| |
| import java.util.NoSuchElementException; |
| |
| import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; |
| import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; |
| import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; |
| |
| |
| public class RegionIterator { |
| |
| private int currentIndex; |
| |
| // private IStructuredDocumentRegion flatNode; |
| private ITextRegionList regions; |
| // private int startOffset, endOffset; |
| private ITextRegion startRegion, endRegion; |
| |
| public RegionIterator(IStructuredDocumentRegion node) { |
| this(node, node.getStart(), node.getEnd()); |
| } |
| |
| public RegionIterator(IStructuredDocumentRegion node, int startOffset, int endOffset) { |
| regions = node.getRegions(); |
| startRegion = node.getRegionAtCharacterOffset(startOffset); |
| endRegion = node.getRegionAtCharacterOffset(endOffset - 1); |
| |
| for (int i = 0; i < regions.size(); i++) { |
| ITextRegion region = regions.get(i); |
| if (startRegion == region) { |
| currentIndex = i; |
| break; |
| } |
| } |
| } |
| |
| public RegionIterator(ITextRegionList regions) { |
| this.regions = regions; |
| startRegion = regions.get(0); |
| endRegion = regions.get(regions.size() - 1); |
| currentIndex = 0; |
| // this(node, node.getStart(), node.getEnd()); |
| } |
| |
| public boolean hasNext() { |
| if (currentIndex < regions.size()) { |
| return currentIndex <= regions.indexOf(endRegion); |
| } |
| return false; |
| } |
| |
| public boolean hasPrevious() { |
| if (currentIndex >= 0) { |
| return currentIndex >= regions.indexOf(startRegion); |
| } |
| return false; |
| } |
| |
| public ITextRegion next() { |
| if (hasNext()) { |
| return regions.get(currentIndex++); |
| } |
| throw new NoSuchElementException(); |
| } |
| |
| public ITextRegion previous() { |
| if (hasPrevious()) { |
| return regions.get(--currentIndex); |
| } |
| throw new NoSuchElementException(); |
| } |
| } |