/* * 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; import org.netbeans.api.annotations.common.CheckForNull; import org.netbeans.api.annotations.common.NonNull; import org.openide.util.Parameters; /** * * @author Sam Harwell */ public interface TrackingPositionRegion { public @NonNull VersionedDocument getVersionedDocument(); public @NonNull TrackingFidelity getTrackingFidelity(); public @NonNull TrackingPositionRegion.Bias getBias(); public @NonNull SnapshotPosition getStartPosition(@NonNull DocumentSnapshot snapshot); public @NonNull SnapshotPosition getEndPosition(@NonNull DocumentSnapshot snapshot); public @NonNull SnapshotPositionRegion getRegion(@NonNull DocumentSnapshot snapshot); public @NonNull SnapshotPositionRegion getRegion(@NonNull DocumentVersion version); public @NonNull String getText(@NonNull DocumentSnapshot snapshot); public enum Bias { Exclusive, Inclusive, Forward, Backward, Custom, ; public static @NonNull Bias fromPositionBias(@NonNull TrackingPosition.Bias startBias, @NonNull TrackingPosition.Bias endBias) { Parameters.notNull("startBias", startBias); Parameters.notNull("endBias", endBias); if (startBias == TrackingPosition.Bias.Forward) { return (endBias == TrackingPosition.Bias.Forward) ? Forward : Exclusive; } else { return (endBias == TrackingPosition.Bias.Forward) ? Inclusive : Backward; } } public @CheckForNull TrackingPosition.Bias getStartBias() { switch (this) { case Exclusive: case Forward: return TrackingPosition.Bias.Forward; case Inclusive: case Backward: return TrackingPosition.Bias.Backward; case Custom: default: return null; } } public @CheckForNull TrackingPosition.Bias getEndBias() { switch (this) { case Inclusive: case Forward: return TrackingPosition.Bias.Forward; case Exclusive: case Backward: return TrackingPosition.Bias.Backward; case Custom: default: return null; } } @Override public String toString() { switch (this) { case Exclusive: return "→←"; case Inclusive: return "←→"; case Backward: return "←←"; case Forward: return "→→"; case Custom: return "custom"; default: return "???"; } } } }