@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; } }
/** * @return previous non-space token type */ @Nullable public static IElementType getPreviousTokenType(@NotNull HighlighterIterator iterator) { moveToPreviousMeaningfulToken(iterator); return iterator.atEnd() ? null : iterator.getTokenType(); }
/** * @return next non-space token type; NB: current token is skipped */ @Nullable public static IElementType getNextTokenType(@NotNull HighlighterIterator iterator) { moveToNextMeaningfulToken(iterator); return iterator.atEnd() ? null : iterator.getTokenType(); }
/** * 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; }
/** * Iterates forward until atEnd or non-space token */ @NotNull public static HighlighterIterator moveToNextMeaningfulToken(@NotNull HighlighterIterator iterator) { iterator.advance(); while (!iterator.atEnd()) { IElementType tokenType = iterator.getTokenType(); if (tokenType != TokenType.WHITE_SPACE) { break; } iterator.advance(); } 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; }
HighlighterIterator highlighterIterator = editor.getHighlighter().createIterator(0); int level = 0; while (!highlighterIterator.atEnd()) { IElementType tokenType = highlighterIterator.getTokenType(); if (tokenType == leftType) {
@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; } }
if (highlighterIterator.atEnd()) { return Result.Continue;
if (highlighterIterator.atEnd() || StringUtil.containsLineBreak(documentChars.subSequence(highlighterIterator.getStart(), currentOffset))) { return Result.Continue; if (highlighterIterator.atEnd() || StringUtil.containsLineBreak(documentChars.subSequence(currentOffset, highlighterIterator.getEnd()))) { return Result.Continue;
IElementType nextTokenType = iterator.atEnd() ? null : iterator.getTokenType(); char nextChar = currentOffset == documentSequence.length() ? 0 : documentSequence.charAt(currentOffset); if (c == '<' && nextTokenType == QUOTE_DOUBLE_CLOSE && nextChar == '>' &&
char closeChar = PerlBaseLexer.getQuoteCloseChar(openChar); iterator.advance(); IElementType possibleCloseQuoteType = iterator.atEnd() ? null : iterator.getTokenType(); if (QUOTE_CLOSE_FIRST_ANY.contains(possibleCloseQuoteType) && closeChar == text.charAt(iterator.getStart())) { if (COMPLEX_QUOTE_OPENERS.contains(quotePrefixType) && StringUtil.containsChar(HANDLED_BY_BRACE_MATCHER, openChar)) { iterator.advance(); if (iterator.atEnd() || !QUOTE_OPEN_ANY.contains(iterator.getTokenType())) { EditorModificationUtil.insertStringAtCaret(editor, Character.toString(closeChar) + openChar, false, false);
IElementType tokenToDelete = iterator.atEnd() ? null : iterator.getTokenType(); if (QUOTE_OPEN_ANY.contains(tokenToDelete)) { PerlEditorUtil.moveToNextMeaningfulToken(iterator); if (iterator.atEnd()) { return; HighlighterIterator preQuoteIterator = PerlEditorUtil.moveToPreviousMeaningfulToken(highlighter.createIterator(currentOffset - 1)); if (!preQuoteIterator.atEnd() && QUOTE_OPEN_ANY.contains(preQuoteIterator.getTokenType())) { startOffsetToDelete = preQuoteIterator.getEnd(); caretModel.moveToOffset(preQuoteIterator.getEnd());
protected void doLexerHighlightingTest(String fileContent, IElementType targetElementType) { BashSyntaxHighlighter syntaxHighlighter = new BashSyntaxHighlighter(); TextAttributesKey[] keys = syntaxHighlighter.getTokenHighlights(targetElementType); Assert.assertEquals("Expected one key", 1, keys.length); TextAttributesKey attributesKey = keys[0]; Assert.assertNotNull(attributesKey); EditorColorsManager manager = EditorColorsManager.getInstance(); EditorColorsScheme scheme = (EditorColorsScheme) manager.getGlobalScheme().clone(); manager.addColorsScheme(scheme); EditorColorsManager.getInstance().setGlobalScheme(scheme); TextAttributes targetAttributes = new TextAttributes(JBColor.RED, JBColor.BLUE, JBColor.GRAY, EffectType.BOXED, Font.BOLD); scheme.setAttributes(attributesKey, targetAttributes); myFixture.configureByText(BashFileType.BASH_FILE_TYPE, fileContent); TextAttributes actualAttributes = null; HighlighterIterator iterator = ((EditorImpl) myFixture.getEditor()).getHighlighter().createIterator(0); while (!iterator.atEnd()) { if (iterator.getTokenType() == targetElementType) { actualAttributes = iterator.getTextAttributes(); break; } iterator.advance(); } Assert.assertEquals("Expected text attributes for " + attributesKey, targetAttributes, actualAttributes); }