/*
* 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.CustomTrackToBehavior;
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 NbCustomTrackingPositionRegion implements TrackingPositionRegion {
@NonNull
private final NbDocumentVersion documentVersion;
@NonNull
private final OffsetRegion span;
@NonNull
private final TrackingFidelity fidelity;
@NonNull
private final CustomTrackToBehavior behavior;
public NbCustomTrackingPositionRegion(@NonNull NbDocumentVersion documentVersion, @NonNull OffsetRegion span, @NonNull TrackingFidelity fidelity, @NonNull CustomTrackToBehavior behavior) {
Parameters.notNull("documentVersion", documentVersion);
Parameters.notNull("span", span);
Parameters.notNull("fidelity", fidelity);
Parameters.notNull("behavior", behavior);
this.documentVersion = documentVersion;
this.span = span;
this.fidelity = fidelity;
this.behavior = behavior;
}
@Override
public VersionedDocument getVersionedDocument() {
return documentVersion.getVersionedDocument();
}
@Override
public TrackingFidelity getTrackingFidelity() {
return fidelity;
}
@Override
public TrackingPositionRegion.Bias getBias() {
return TrackingPositionRegion.Bias.Custom;
}
@Override
public SnapshotPosition getStartPosition(DocumentSnapshot snapshot) {
OffsetRegion targetSpan = behavior.trackRegion(this, documentVersion, snapshot.getVersion(), span);
return new SnapshotPosition(snapshot, targetSpan.getStart());
}
@Override
public SnapshotPosition getEndPosition(DocumentSnapshot snapshot) {
OffsetRegion targetSpan = behavior.trackRegion(this, documentVersion, snapshot.getVersion(), span);
return new SnapshotPosition(snapshot, targetSpan.getEnd());
}
@Override
public SnapshotPositionRegion getRegion(DocumentSnapshot snapshot) {
OffsetRegion targetSpan = behavior.trackRegion(this, documentVersion, snapshot.getVersion(), span);
return new SnapshotPositionRegion(snapshot, targetSpan);
}
@Override
public SnapshotPositionRegion getRegion(DocumentVersion version) {
Parameters.notNull("version", version);
if (!(version instanceof NbDocumentVersion)) {
throw new UnsupportedOperationException();
}
OffsetRegion targetSpan = behavior.trackRegion(this, documentVersion, version, span);
return new SnapshotPositionRegion(((NbDocumentVersion)version).getSnapshot(), targetSpan);
}
@Override
public String getText(DocumentSnapshot snapshot) {
return getRegion(snapshot).getText();
}
}