@Override public boolean isInsideLiteral(HighlighterIterator highlighterIterator) { return LITERALS.contains(highlighterIterator.getTokenType()); }
@Override public boolean isOpeningQuote(HighlighterIterator highlighterIterator, int offset) { boolean isOpeningQuote = false; if (OPENING_QUOTES.contains(highlighterIterator.getTokenType())){ int start = highlighterIterator.getStart(); isOpeningQuote = offset == start; } return isOpeningQuote; } }
@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; } }
/** * * @param highlighterIterator * @param offset the current offset in the file of the {@code highlighterIterator} * @return {@code true} if {@link HighlighterIterator#getTokenType()} is one of {@link #CLOSING_QUOTES} and * {@code offset} is {@link HighlighterIterator#getStart()} */ @Override public boolean isClosingQuote(HighlighterIterator highlighterIterator, int offset) { boolean isClosingQuote = false; if (CLOSING_QUOTES.contains(highlighterIterator.getTokenType())) { int start = highlighterIterator.getStart(); int end = highlighterIterator.getEnd(); isClosingQuote = end - start >= 1 && offset == end - 1; } return isClosingQuote; }
@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; }
final EditorHighlighter highlighter = ((EditorEx)editor).getHighlighter(); HighlighterIterator iterator = highlighter.createIterator(caret - 2); IElementType tokenType = iterator.getTokenType(); final EditorHighlighter highlighter = ((EditorEx)editor).getHighlighter(); HighlighterIterator iterator = highlighter.createIterator(caret - 1); IElementType tokenType = iterator.getTokenType(); HighlighterIterator iterator = highlighter.createIterator(caret - 2); if (iterator.getTokenType() == ElixirTypes.OPENING_BIT) { editor.getDocument().insertString(caret, ">>"); result = Result.STOP; final EditorHighlighter highlighter = ((EditorEx)editor).getHighlighter(); HighlighterIterator iterator = highlighter.createIterator(caret - 1); IElementType tokenType = iterator.getTokenType(); final EditorHighlighter highlighter = ((EditorEx) editor).getHighlighter(); HighlighterIterator iterator = highlighter.createIterator(caret - 1); IElementType tokenType = iterator.getTokenType();
/** * Should return true, when you are inside a string literal. * * @param iterator * the iterator to move through the token stream. Here, only used to get the token type * @return true, if the iterator is currently inside a string */ @Override public boolean isInsideLiteral(HighlighterIterator iterator) { return iterator.getTokenType().equals(STRING_LITERAL); }
@Override public boolean isOpeningQuote(HighlighterIterator iterator, int offset) { return TemplateToolkitParserUtil.OPEN_QUOTES.contains(iterator.getTokenType()); } }
@Override public boolean isClosingQuote(HighlighterIterator iterator, int offset) { return TemplateToolkitParserUtil.CLOSE_QUOTES.contains(iterator.getTokenType()); }
/** * @return previous non-space token type */ @Nullable public static IElementType getPreviousTokenType(@NotNull HighlighterIterator iterator) { moveToPreviousMeaningfulToken(iterator); return iterator.atEnd() ? null : iterator.getTokenType(); }
/** * Finds out whether the current offset is an opening quote element. * * @param iterator * the iterator to move through the token stream. Here, only used to get the current token type * @param offset * current character offset * @return true, if the current offset is an opening quote */ @Override public boolean isOpeningQuote(HighlighterIterator iterator, int offset) { if (iterator.getTokenType().equals(STRING_LITERAL_BEGIN)) { int start = iterator.getStart(); return offset == start; } return false; }
/** * @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; }
/** * Should return true if the current offset is the closing quote of the string. Unfortunately, I'm not quite sure * anymore why I had to make the calculations but I remember that something with the removal of an empty string did * not work. * * @param iterator * the iterator to move through the token stream. Here, only used to get the current token type * @param offset * current character offset * @return true, if the current offset is a closing quote */ @Override public boolean isClosingQuote(HighlighterIterator iterator, int offset) { final IElementType tokenType = iterator.getTokenType(); if (tokenType.equals(STRING_LITERAL_END)) { int start = iterator.getStart(); int end = iterator.getEnd(); return end - start >= 1 && offset == end - 1; } return false; }
@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; } }
public BracePair findClosetBracePairInStringSymbols(int offset) { if (offset < 0 || this.fileText == null || this.fileText.length() == 0) return EMPTY_BRACE_PAIR; EditorHighlighter editorHighlighter = ((EditorEx) editor).getHighlighter(); HighlighterIterator iterator = editorHighlighter.createIterator(offset); IElementType type = iterator.getTokenType(); boolean isBlockCaret = this.isBlockCaret(); if (!BraceMatchingUtilAdapter.isStringToken(type)) return EMPTY_BRACE_PAIR; int leftOffset = iterator.getStart(); int rightOffset = iterator.getEnd() - 1; if (!isBlockCaret && leftOffset == offset) return EMPTY_BRACE_PAIR; return new BracePair.BracePairBuilder(). leftType(DOUBLE_QUOTE). rightType(DOUBLE_QUOTE). leftOffset(leftOffset). rightOffset(rightOffset).build(); }
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); }