/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.netbeans.editor.text.impl; import org.antlr.netbeans.editor.text.DocumentSnapshot; import org.antlr.netbeans.editor.text.DocumentVersion; import org.antlr.netbeans.editor.text.OffsetRegion; import org.antlr.netbeans.editor.text.SnapshotPosition; import org.antlr.netbeans.editor.text.SnapshotPositionRegion; import org.antlr.netbeans.editor.text.TrackingFidelity; import org.antlr.netbeans.editor.text.TrackingPositionRegion; import org.antlr.netbeans.editor.text.VersionedDocument; import org.netbeans.api.annotations.common.NonNull; import org.openide.util.Parameters; /** * * @author Sam Harwell */ public class NbTrackingPositionRegion implements TrackingPositionRegion { @NonNull private final NbTrackingPosition trackingStart; @NonNull private final NbTrackingPosition trackingEnd; public NbTrackingPositionRegion(@NonNull NbTrackingPosition trackingStart, @NonNull NbTrackingPosition trackingEnd) { Parameters.notNull("trackingStart", trackingStart); Parameters.notNull("trackingEnd", trackingEnd); if (!trackingStart.getTrackingFidelity().equals(trackingEnd.getTrackingFidelity())) { throw new IllegalArgumentException("Mismatched tracking fidelity."); } this.trackingStart = trackingStart; this.trackingEnd = trackingEnd; } @Override public VersionedDocument getVersionedDocument() { return trackingStart.getVersionedDocument(); } @Override public TrackingFidelity getTrackingFidelity() { return trackingStart.getTrackingFidelity(); } @Override public TrackingPositionRegion.Bias getBias() { return TrackingPositionRegion.Bias.fromPositionBias(trackingStart.getBias(), trackingEnd.getBias()); } @Override public SnapshotPosition getStartPosition(DocumentSnapshot snapshot) { return trackingStart.getPosition(snapshot); } @Override public SnapshotPosition getEndPosition(DocumentSnapshot snapshot) { return trackingEnd.getPosition(snapshot); } @Override public SnapshotPositionRegion getRegion(DocumentSnapshot snapshot) { return new SnapshotPositionRegion(getStartPosition(snapshot), getEndPosition(snapshot)); } @Override public SnapshotPositionRegion getRegion(DocumentVersion version) { Parameters.notNull("version", version); if (!(version instanceof NbDocumentVersion)) { throw new UnsupportedOperationException(); } NbDocumentVersion textVersion = (NbDocumentVersion)version; return getRegion(textVersion.getSnapshot()); } @Override public String getText(DocumentSnapshot snapshot) { return getRegion(snapshot).getText(); } @Override public String toString() { OffsetRegion span = OffsetRegion.fromBounds(trackingStart.getPosition(), trackingEnd.getPosition()); return String.format("V%d %s@%s", trackingStart.getTextVersion().getVersionNumber(), getBias().toString(), span.toString()); } }