@Nullable @Override public BracePair findPair(boolean left, HighlighterIterator iterator, CharSequence fileText, FileType fileType) { BracePair pair = super.findPair(left, iterator, fileText, fileType); if (pair == Paired.DO_END || pair == Paired.FN_END) { iterator.advance(); if (!iterator.atEnd()) { IElementType tokenType = iterator.getTokenType(); if (tokenType == ElixirTypes.KEYWORD_PAIR_COLON) { pair = null; } } iterator.retreat(); } return pair; } }
@Nullable @Override public CharSequence getClosingQuote(HighlighterIterator highlighterIterator, int offset) { CharSequence closingQuote = null; if (highlighterIterator.getStart() > 0) { highlighterIterator.retreat(); try { IElementType tokenType = highlighterIterator.getTokenType(); if (CLOSING_QUOTE_BY_OPENING_QUOTE.get(tokenType) != null) { Document document = highlighterIterator.getDocument(); if (document != null) { String promoter = document.getText( new TextRange(highlighterIterator.getStart(), highlighterIterator.getEnd()) ); String terminator = StackFrame.TERMINATOR_BY_PROMOTER.get(promoter); if (terminator != null) { if (terminator.length() >= 3) { closingQuote = "\n" + terminator; } else { closingQuote = terminator; } } } } } finally { highlighterIterator.advance(); } } return closingQuote; }
/** * Iterates back until atEnd or non-space token */ @NotNull public static HighlighterIterator moveToPreviousMeaningfulToken(@NotNull HighlighterIterator iterator) { while (!iterator.atEnd()) { IElementType tokenType = iterator.getTokenType(); if (tokenType != TokenType.WHITE_SPACE) { break; } iterator.retreat(); } return iterator; }
@Nullable private IElementType getNonWhitespaceElementType(final HighlighterIterator iterator, int curLineStart, final int prevLineStartOffset) { while (!iterator.atEnd() && iterator.getEnd() >= curLineStart && iterator.getStart() >= prevLineStartOffset) { final IElementType tokenType = iterator.getTokenType(); if (!MathematicaElementTypes.WHITE_SPACE_OR_COMMENTS.contains(tokenType)) { return tokenType; } iterator.retreat(); } return null; }
@Nullable private IElementType getNonWhitespaceElementType(final HighlighterIterator iterator, int curLineStart, final int prevLineStartOffset) { while (!iterator.atEnd() && iterator.getEnd() >= curLineStart && iterator.getStart() >= prevLineStartOffset) { final IElementType tokenType = iterator.getTokenType(); if (!MathematicaElementTypes.WHITE_SPACE_OR_COMMENTS.contains(tokenType)) { return tokenType; } iterator.retreat(); } return null; }
@Nullable @Contract("null -> null") public static IElementType getLastOpenMarker(@Nullable Editor editor) { if (editor == null) { return null; } int offset = editor.getCaretModel().getOffset(); HighlighterIterator iterator = ((EditorEx)editor).getHighlighter().createIterator(offset); while (!iterator.atEnd()) { IElementType tokenType = iterator.getTokenType(); if (TemplateToolkitSyntaxElements.OPEN_TAGS.contains(tokenType)) { return tokenType; } iterator.retreat(); } return null; } }
int initOffset = iterator.atEnd() ? -1 : iterator.getStart(); Stack<IElementType> braceStack = new Stack<>(); for (; !iterator.atEnd(); iterator.retreat()) { final IElementType tokenType = iterator.getTokenType();