package org.fandev.lang.fan.editor; import com.intellij.codeInsight.editorActions.QuoteHandler; import com.intellij.openapi.editor.highlighter.HighlighterIterator; import com.intellij.openapi.editor.Editor; import com.intellij.psi.tree.IElementType; import org.fandev.lang.fan.FanTokenTypes; /** * Created by IntelliJ IDEA. * User: Dror * Date: Mar 13, 2009 * Time: 9:45:40 AM */ public class FanQuoteHandler implements QuoteHandler { public boolean isClosingQuote(final HighlighterIterator iterator, final int offset) { final IElementType tokenType = iterator.getTokenType(); if (tokenType == FanTokenTypes.STRING_LITERAL) { final int start = iterator.getStart(); final int end = iterator.getEnd(); return end - start >= 1 && offset == end - 1; } return false; } public boolean isOpeningQuote(final HighlighterIterator iterator, final int offset) { final IElementType tokenType = iterator.getTokenType(); //TODO use a more fine grained token type if (tokenType == FanTokenTypes.BAD_CHARACTER) { final int start = iterator.getStart(); return offset == start; } return false; } public boolean hasNonClosedLiteral(final Editor editor, final HighlighterIterator iterator, final int offset) { return true; } public boolean isInsideLiteral(final HighlighterIterator iterator) { final IElementType tokenType = iterator.getTokenType(); return tokenType == FanTokenTypes.STRING_LITERAL; } }