Example usage for com.intellij.openapi.editor EditorModificationUtil moveAllCaretsRelatively

List of usage examples for com.intellij.openapi.editor EditorModificationUtil moveAllCaretsRelatively

Introduction

In this page you can find the example usage for com.intellij.openapi.editor EditorModificationUtil moveAllCaretsRelatively.

Prototype

public static void moveAllCaretsRelatively(@NotNull Editor editor, final int caretShift) 

Source Link

Usage

From source file:com.intellij.coldFusion.UI.editorActions.typedHandlers.CfmlTypedHandler.java

License:Apache License

public Result beforeCharTyped(final char c, final Project project, final Editor editor, final PsiFile file,
        final FileType fileType) {
    PsiFile cfmlFile = file.getViewProvider().getPsi(CfmlLanguage.INSTANCE);

    if (isNotCfmlFile(cfmlFile, editor)) {
        return Result.CONTINUE;
    }//from w w w . jav  a2 s . c om
    int offset = editor.getCaretModel().getOffset();

    if (c == '{') {
        CfmlBraceMatcher braceMatcher = new CfmlBraceMatcher();
        HighlighterIterator iterator = ((EditorEx) editor).getHighlighter().createIterator(offset);
        if (!braceMatcher.isLBraceToken(iterator, editor.getDocument().getCharsSequence(), fileType)) {
            EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, "}", true, 0);
            // return Result.STOP;
        }
        return Result.CONTINUE;
    }
    if (c == '#') {
        if (CfmlEditorUtil.countSharpsBalance(editor) == 0) {
            char charAtOffset = DocumentUtils.getCharAt(editor.getDocument(), offset);
            if (charAtOffset == '#') {
                EditorModificationUtil.moveAllCaretsRelatively(editor, 1);
                return Result.STOP;
            }
            EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, "#", true, 0);
        }
    } else if (c == '>') {
        if (((EditorEx) editor).getHighlighter().createIterator(editor.getCaretModel().getOffset())
                .getTokenType() == CfmlTokenTypes.COMMENT
                || ((EditorEx) editor).getHighlighter().createIterator(editor.getCaretModel().getOffset())
                        .getTokenType().getLanguage() != CfmlLanguage.INSTANCE) {
            return Result.CONTINUE;
        }
        insertCloseTagIfNeeded(editor, cfmlFile, project);
        return Result.STOP;
    }
    return Result.CONTINUE;
}

From source file:com.intellij.coldFusion.UI.editorActions.typedHandlers.CfmlTypedHandler.java

License:Apache License

public static boolean insertCloseTagIfNeeded(Editor editor, PsiFile file, Project project) {
    final Document document = editor.getDocument();
    final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);

    int offset = editor.getCaretModel().getOffset();
    documentManager.commitDocument(document);
    char charAtOffset = DocumentUtils.getCharAt(document, offset);

    if (charAtOffset != '>') {
        EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, ">", true, 0);
    }//from   ww  w .jav  a2s.  c o  m
    EditorModificationUtil.moveAllCaretsRelatively(editor, 1);
    ++offset;
    if (DocumentUtils.getCharAt(document, offset - 2) == '/') {
        return false;
    }
    HighlighterIterator iterator = ((EditorEx) editor).getHighlighter().createIterator(offset - 2);

    while (!iterator.atEnd() && !iterator.getTokenType().equals(CfmlTokenTypes.CF_TAG_NAME)) {
        if (CfmlUtil.isControlToken(iterator.getTokenType())) {
            return false;
        }
        iterator.retreat();
    }
    if (!iterator.atEnd()) {
        iterator.retreat();
        if (!iterator.atEnd() && iterator.getTokenType().equals(CfmlTokenTypes.LSLASH_ANGLEBRACKET)) {
            return false;
        }
        iterator.advance();
    }
    if (iterator.atEnd()) {
        return false;
    }
    String tagName = document.getCharsSequence().subSequence(iterator.getStart(), iterator.getEnd()).toString();
    if (CfmlUtil.isSingleCfmlTag(tagName, project) || CfmlUtil.isUserDefined(tagName)) {
        return false;
    }
    PsiElement tagElement = file.findElementAt(iterator.getStart());
    while (tagElement != null && !(tagElement instanceof CfmlTag)) {
        tagElement = tagElement.getParent();
    }
    if (tagElement == null) {
        return false;
    }
    boolean doInsertion = false;
    if (tagElement.getLastChild() instanceof PsiErrorElement) {
        doInsertion = true;
    } else {
        iterator = ((EditorEx) editor).getHighlighter().createIterator(0);
        while (!iterator.atEnd() && iterator.getStart() < offset) {
            if (iterator.getTokenType() == CfmlTokenTypes.CF_TAG_NAME) {
                String currentTagName = document.getCharsSequence()
                        .subSequence(iterator.getStart(), iterator.getEnd()).toString();
                if (tagName.equals(currentTagName)) {
                    PsiElement currentTagElement = file.findElementAt(iterator.getStart());
                    currentTagElement = PsiTreeUtil.getParentOfType(currentTagElement, CfmlTag.class);
                    if (currentTagElement.getLastChild() instanceof PsiErrorElement) {
                        doInsertion = true;
                        break;
                    }
                }
            }
            iterator.advance();
        }
    }
    if (doInsertion && CfmlUtil.isEndTagRequired(((CfmlTag) tagElement).getTagName(), project)) {
        EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor,
                "</" + ((CfmlTag) tagElement).getTagName() + ">", true, 0);
        return true;
    }
    return false;
}