package org.jetbrains.plugins.clojure.editor;
import com.intellij.codeInsight.editorActions.QuoteHandler;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.plugins.clojure.lexer.ClojureTokenTypes;
/**
* @author ilyas
*/
public class ClojureQuoteHandler implements QuoteHandler {
public boolean isClosingQuote(HighlighterIterator iterator, int offset) {
final IElementType tokenType = iterator.getTokenType();
if (tokenType == ClojureTokenTypes.STRING_LITERAL) {
int start = iterator.getStart();
int end = iterator.getEnd();
return end - start >= 1 && offset == end - 1;
}
return false;
}
public boolean isOpeningQuote(HighlighterIterator iterator, int offset) {
final IElementType tokenType = iterator.getTokenType();
if (tokenType == ClojureTokenTypes.WRONG_STRING_LITERAL ||
tokenType == ClojureTokenTypes.STRING_LITERAL) {
int start = iterator.getStart();
return offset == start;
}
return false;
}
public boolean hasNonClosedLiteral(Editor editor, HighlighterIterator iterator, int offset) {
return true;
}
public boolean isInsideLiteral(HighlighterIterator iterator) {
final IElementType tokenType = iterator.getTokenType();
return tokenType == ClojureTokenTypes.STRING_LITERAL;
}
}