/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.nbstudio.syntax.cls;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.netbeans.api.lexer.Token;
import org.netbeans.api.lexer.TokenHierarchy;
import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.modules.parsing.api.Embedding;
import org.netbeans.modules.parsing.api.Snapshot;
import org.netbeans.modules.parsing.spi.EmbeddingProvider;
import org.netbeans.modules.parsing.spi.SchedulerTask;
import org.netbeans.modules.parsing.spi.TaskFactory;
/**
*
* @author daimor
*/
public class clsEmbeddingProvider extends EmbeddingProvider {
@Override
public List<Embedding> getEmbeddings(Snapshot snapshot) {
TokenHierarchy<?> tokenHierarchy = snapshot.getTokenHierarchy();
TokenSequence<?> tokenSequence = tokenHierarchy.tokenSequence();
if (tokenSequence == null) {
return Collections.emptyList();
}
List<Embedding> embeddings = new ArrayList<>();
while (tokenSequence.moveNext()) {
Token<?> token = tokenSequence.token();
if (token.id().name().contains("MethodDeclaration")) {
int offset = token.offset(tokenHierarchy) + 2;
int length = token.length() - 4;
Embedding embedding = snapshot.create(offset, length, "text/isc-mac");
embeddings.add(embedding);
} else if (token.id().name().contains("XDataDeclaration")) {
int offset = token.offset(tokenHierarchy) + 2;
int length = token.length() - 4;
Embedding embedding = snapshot.create(offset, length, "text/isc-xdata");
embeddings.add(embedding);
}
}
return embeddings;
}
@Override
public int getPriority() {
return 100;
}
@Override
public void cancel() {
}
public static final class Factory extends TaskFactory {
@Override
public Collection<SchedulerTask> create(final Snapshot snapshot) {
return Collections.<SchedulerTask>singletonList(new clsEmbeddingProvider());
}
}
}