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

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

Introduction

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

Prototype

public static int insertStringAtCaret(Editor editor, @NotNull String s, boolean toProcessOverwriteMode,
            boolean toMoveCaret, int caretShift) 

Source Link

Usage

From source file:com.perl5.lang.htmlmason.idea.editor.HTMLMasonTypedHandler.java

License:Apache License

@Override
public Result charTyped(char c, Project project, @NotNull Editor editor, @NotNull PsiFile file) {
    if (file.getViewProvider() instanceof HTMLMasonFileViewProvider) {
        if (c == '>') {
            PsiElement element = file.findElementAt(editor.getCaretModel().getOffset() - 2);
            if (HTML_MASON_TEMPLATE_CONTEXT_PATTERN.accepts(element)
                    || HTML_MASON_TEMPLATE_CONTEXT_PATTERN_BROKEN.accepts(element)) {
                assert element != null;
                String elementText = element.getText();
                String closeTag;//from  w  w w .j  a  v  a 2s .co  m
                if (elementText.equals(KEYWORD_FLAGS)) {
                    EditorModificationUtil.insertStringAtCaret(editor,
                            "\ninherit => ''\n" + KEYWORD_FLAGS_CLOSER, false, true, 13);
                } else {
                    if ((closeTag = getCloseTag(project, "<%" + elementText + ">")) != null)
                        EditorModificationUtil.insertStringAtCaret(editor, closeTag, false, false);
                }
            }
        } else if (c == ' ') {
            PsiElement element = file.findElementAt(editor.getCaretModel().getOffset() - 2);
            if (element != null) {
                IElementType elementType = element.getNode().getElementType();
                if (elementType == HTML_MASON_BLOCK_OPENER
                        && !isNextElement(element, HTML_MASON_BLOCK_CLOSER)) {
                    EditorModificationUtil.insertStringAtCaret(editor, " " + KEYWORD_BLOCK_CLOSER, false,
                            false);
                } else if (elementType == HTML_MASON_CALL_OPENER
                        && !isNextElement(element, HTML_MASON_CALL_CLOSER)) {
                    EditorModificationUtil.insertStringAtCaret(editor, " " + KEYWORD_CALL_CLOSER, false, false);
                } else if (elementType == HTML_MASON_CALL_FILTERING_OPENER
                        && !isNextElement(element, HTML_MASON_CALL_CLOSER)) {
                    EditorModificationUtil.insertStringAtCaret(editor,
                            " " + KEYWORD_CALL_CLOSER + KEYWORD_CALL_CLOSE_TAG_START + KEYWORD_TAG_CLOSER,
                            false, false);
                } else if (elementType == HTML_MASON_METHOD_OPENER) {
                    String closeTag = getCloseTag(project, element.getText());
                    if (closeTag != null) {
                        EditorModificationUtil.insertStringAtCaret(editor, ">\n" + closeTag, false, false);
                    }
                } else if (elementType == HTML_MASON_DEF_OPENER) {
                    String closeTag = getCloseTag(project, element.getText());
                    if (closeTag != null) {
                        EditorModificationUtil.insertStringAtCaret(editor, ">\n" + closeTag, false, false);
                    }
                }
            }
        }

    }

    return super.charTyped(c, project, editor, file);
}

From source file:com.perl5.lang.perl.idea.editor.smartkeys.PerlTypedHandler.java

License:Apache License

@Nullable
private Result handleSingleQuote(char typedChar, boolean hasSpace, Editor editor) {
    char closeChar = getRegexCloseChar(typedChar, hasSpace);

    if (closeChar > 0) {

        EditorModificationUtil.insertStringAtCaret(editor, typedChar + "" + closeChar, false, true, 1);
        return Result.STOP;
    }/*from   w w w .j  a  va2 s . c  o  m*/
    return null;
}

From source file:com.perl5.lang.perl.idea.editor.smartkeys.PerlTypedHandler.java

License:Apache License

@Nullable
private Result handleDoubleQuote(char typedChar, boolean hasSpace, Editor editor) {
    char closeChar = getRegexCloseChar(typedChar, hasSpace);

    if (closeChar > 0) {
        String appendix = typedChar + "" + closeChar;

        if (closeChar == typedChar) {
            appendix += closeChar;//from w  w w  . ja  va2s . c o m
        } else {
            appendix += appendix;
        }

        EditorModificationUtil.insertStringAtCaret(editor, appendix, false, true, 1);
        return Result.STOP;
    }
    return null;
}

From source file:com.perl5.lang.pod.idea.editor.PodTypedHandler.java

License:Apache License

@Override
public Result beforeCharTyped(char c, Project project, Editor editor, PsiFile file, FileType fileType) {
    if (file instanceof PodFile) {
        if (c == '<') {
            CaretModel caretModel = editor.getCaretModel();
            int offset = caretModel.getOffset() - 1;
            PsiElement element = file.findElementAt(offset);
            IElementType elementType = element == null ? null : element.getNode().getElementType();
            String text = element == null ? null : element.getText();

            if (elementType == POD_IDENTIFIER && text != null) {

                if (text.length() == 1 && StringUtil.containsChar(POD_COMMANDS, text.charAt(0))) {
                    EditorModificationUtil.insertStringAtCaret(editor, ">", false, false, 0);
                }/*w  w w . ja  v  a  2s. c  o  m*/
            } else if (elementType == POD_ANGLE_LEFT || POD_COMMANDS_TOKENSET.contains(elementType)) {
                //noinspection ConstantConditions
                extendAngles(element.getParent());
                caretModel.moveToOffset(offset + 2);
                return Result.STOP;
            }
        } else if (c == '>') // '>'
        {
            CaretModel caretModel = editor.getCaretModel();
            int offset = caretModel.getOffset();
            PsiElement element = file.findElementAt(offset);
            IElementType elementType = element == null ? null : element.getNode().getElementType();
            int extraOffset = 0;

            if (elementType != POD_ANGLE_RIGHT) {
                offset--;
                element = file.findElementAt(offset);
                elementType = element == null ? null : element.getNode().getElementType();
                extraOffset++;
            }

            if (elementType == POD_ANGLE_RIGHT) {
                //noinspection ConstantConditions
                caretModel.moveToOffset(offset + extendAngles(element.getParent()) + extraOffset);
                return Result.STOP;
            }
        }
    }
    return super.beforeCharTyped(c, project, editor, file, fileType);
}

From source file:com.perl5.lang.tt2.idea.editor.TemplateToolkitTypedHandler.java

License:Apache License

protected Result processChar(char c, Project project, Editor editor, PsiFile file, FileType fileType) {
    FileViewProvider viewProvider = file.getViewProvider();
    if (!(viewProvider instanceof TemplateToolkitFileViewProvider)) {
        return null;
    }/*  w ww  .ja v  a 2 s .c o m*/

    TemplateToolkitSettings settings = TemplateToolkitSettings.getInstance(project);
    String openTag = settings.START_TAG;
    if (StringUtil.isEmpty(openTag) || c != openTag.charAt(openTag.length() - 1)) {
        return null;
    }

    int offset = editor.getCaretModel().getOffset();
    if (offset == 0) {
        return null;
    }

    PsiElement element = viewProvider.findElementAt(offset - 1, TemplateToolkitLanguage.INSTANCE);
    if (element == null) {
        return null;
    }
    IElementType tokenType = element.getNode().getElementType();
    if (tokenType != TT2_HTML) {
        return null;
    }

    String openTagPrefix = openTag.substring(0, openTag.length() - 1);
    if (openTagPrefix.length() == 0) {
        return null;
    }

    int startOffset = offset - openTagPrefix.length();
    if (startOffset < 0) {
        return null;
    }

    if (StringUtil.equals(file.getText().subSequence(startOffset, offset), openTagPrefix)) {
        EditorModificationUtil.insertStringAtCaret(editor, c + "  " + settings.END_TAG, false, true, 2);
        return Result.STOP;
    }
    return null;
}