/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.codeigniter.netbeans.navigator;
import com.codeigniter.netbeans.shared.PHPDocumentParser;
import java.util.EnumSet;
import java.util.Set;
import javax.swing.text.Document;
import org.netbeans.api.lexer.Token;
import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.modules.php.editor.lexer.PHPTokenId;
import org.netbeans.lib.editor.hyperlink.spi.HyperlinkProviderExt;
import org.netbeans.lib.editor.hyperlink.spi.HyperlinkType;
/**
*
* @author Tamaki_Sakura
*/
public abstract class CiHyperlinkProviderBase implements HyperlinkProviderExt {
private int targetStart;
private int targetEnd;
@Override
public Set<HyperlinkType> getSupportedHyperlinkTypes() {
return EnumSet.of(HyperlinkType.GO_TO_DECLARATION);
}
@Override
public int[] getHyperlinkSpan(Document doc, int offset, HyperlinkType ht) {
if ((targetStart != 0) && (targetEnd != 0)) {
return new int[]{targetStart, targetEnd};
}
return null;
}
/**
* Get the String of the current Token
*
* @param doc document
* @param offset offset in document
* @return target
*/
protected String getStringTokenString(Document doc, int offset) {
TokenSequence<PHPTokenId> tokens = PHPDocumentParser.getTokenSequence(doc);
if (tokens == null) {
return null;
}
resetLengthValue();
tokens.move(offset);
tokens.moveNext();
int newOffset = tokens.offset();
Token<PHPTokenId> token = tokens.token();
String target = token.text().toString();
PHPTokenId id = token.id();
if (id == PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING) {
if (target.length() > 2) {
target = target.substring(1, target.length() - 1);
targetStart = newOffset + 1;
targetEnd = targetStart + target.length();
} else {
target = null;
}
} else {
target = null;
}
return target;
}
/**
* Rest the targetStart/End value
*/
private void resetLengthValue() {
targetStart = 0;
targetEnd = 0;
}
}