@NotNull private Token mergeLongClassNames(Token prev, Token current, boolean annotation) { int offset = current.getOffset(); if (annotation) { offset++; } JavaNode javaNode = codeArea.getJavaNodeAtOffset(jCls, offset); if (javaNode instanceof JavaClass) { String name = javaNode.getName(); String lexeme = current.getLexeme(); if (annotation && lexeme.length() > 1) { lexeme = lexeme.substring(1); } if (!lexeme.equals(name) && javaNode.getFullName().startsWith(lexeme)) { // try to replace long class name with one token Token replace = concatTokensUntil(current, name); if (replace != null && prev instanceof TokenImpl) { TokenImpl impl = ((TokenImpl) prev); impl.setNextToken(replace); current = replace; } } } return current; }
@Nullable private Token concatTokensUntil(Token start, String endText) { StringBuilder sb = new StringBuilder(); Token current = start; while (current != null && current.getType() != TokenTypes.NULL) { String text = current.getLexeme(); if (text != null) { sb.append(text); if (text.equals(endText)) { char[] line = sb.toString().toCharArray(); TokenImpl token = new TokenImpl(line, 0, line.length - 1, start.getOffset(), start.getType(), start.getLanguageIndex()); token.setNextToken(current.getNextToken()); return token; } } current = current.getNextToken(); } return null; } }
@Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { node = null; Point pos = codeArea.getMousePosition(); if (pos != null) { Token token = codeArea.viewToToken(pos); if (token != null) { node = codeArea.getJavaNodeAtOffset(jCls, token.getOffset()); } } setEnabled(node != null); }
/** * Returns the foreground color to use when painting a token. * * @param t The token. * @return The foreground color to use for that token. This * value is never <code>null</code>. * @see #getBackgroundForToken(Token) */ public Color getForegroundForToken(Token t) { if (getHyperlinksEnabled() && hoveredOverLinkOffset==t.getOffset() && (t.isHyperlink() || linkGeneratorResult!=null)) { return hyperlinkFG; } return getForegroundForTokenType(t.getType()); }
currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); folds.add(currentFold); currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); currentFold.setEndOffset(t.getOffset()); Fold parentFold = currentFold.getParent(); currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); folds.add(currentFold); currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); currentFold.setEndOffset(t.getOffset()); Fold parentFold = currentFold.getParent();
/** * Returns whether the specified token should be underlined. * A token is underlined if its syntax style includes underlining, * or if it is a hyperlink and hyperlinks are enabled. * * @param t The token. * @return Whether the specified token should be underlined. */ public boolean getUnderlineForToken(Token t) { return (getHyperlinksEnabled() && (t.isHyperlink() || (linkGeneratorResult!=null && linkGeneratorResult.getSourceOffset()==t.getOffset()))) || syntaxScheme.getStyle(t.getType()).underline; }
mlcStart = t.getOffset(); currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); folds.add(currentFold); currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); folds.add(currentFold); currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); foundEndKeyword(KEYWORD_FUNCTION_END, t, endWordStack)) { if (currentFold!=null) { currentFold.setEndOffset(t.getOffset()); Fold parentFold = currentFold.getParent(); endWordStack.pop();
@Override public boolean equals(Object obj) { if (obj==this) { return true; } if (!(obj instanceof Token)) { return false; } Token t2 = (Token)obj; return offset==t2.getOffset() && type==t2.getType() && languageIndex==t2.getLanguageIndex() && hyperlink==t2.isHyperlink() && ((getLexeme()==null && t2.getLexeme()==null) || (getLexeme()!=null && getLexeme().equals(t2.getLexeme()))); }
if (temp!=null && temp.getType()==Token.RESERVED_WORD) { if (currentFold==null) { currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); folds.add(currentFold); currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); if (expectedStack.peek().equals(value)) { expectedStack.pop(); currentFold.setEndOffset(t.getOffset()); Fold parentFold = currentFold.getParent();
for (Token t=tokenList; t!=null&&t.isPaintable(); t=t.getNextToken()) { if (t.containsPosition(upTo)) { return width + t.getWidthUpTo(upTo-t.getOffset(), textArea, e, x0+width);
if (t.isComment()) { offs = t.getOffset(); text = t.getLexeme();
/** * Makes one token point to the same text segment, and have the same value * as another token. * * @param t2 The token from which to copy. */ public void copyFrom(Token t2) { text = t2.getTextArray(); textOffset = t2.getTextOffset(); textCount = t2.length(); setOffset(t2.getOffset()); setType(t2.getType()); hyperlink = t2.isHyperlink(); languageIndex = t2.getLanguageIndex(); nextToken = t2.getNextToken(); }
if (selStart>token.getOffset()) { tempToken.copyFrom(token); tempToken.textCount = selStart - tempToken.getOffset(); int selCount = Math.min(tokenLen, selEnd-token.getOffset()); if (selCount==tokenLen) { nextX = painter.paintSelected(token, g, nextX,y, host, this, clipStart, useSTC); tempToken.textCount = token.length(); tempToken.makeStartAt(token.getOffset() + selCount); token = tempToken; nextX = painter.paint(token, g, nextX,y, host, this, else if (token.getOffset()>=selStart && token.getEndOffset()<=selEnd) { nextX = painter.paintSelected(token, g, nextX,y, host, this,
/** * Highlights all instances of tokens identical to <code>t</code> in the * specified document. * * @param doc The document. * @param t The document whose relevant occurrences should be marked. * @param h The highlighter to add the highlights to. * @param p The painter for the highlights. */ public static final void markOccurrencesOfToken(RSyntaxDocument doc, Token t, RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { char[] lexeme = t.getLexeme().toCharArray(); int type = t.getType(); int lineCount = doc.getDefaultRootElement().getElementCount(); for (int i=0; i<lineCount; i++) { Token temp = doc.getTokenListForLine(i); while (temp!=null && temp.isPaintable()) { if (temp.is(type, lexeme)) { try { int end = temp.getEndOffset(); h.addMarkedOccurrenceHighlight(temp.getOffset(),end,p); } catch (BadLocationException ble) { ble.printStackTrace(); // Never happens } } temp = temp.getNextToken(); } } }