private boolean testCreateAnnotation(TokenHierarchy hi, TokenSequence ts, ASTItem item, LanguagesAnnotation la) throws BadLocationException { if (ts.language () == null) throw new NullPointerException ("ts.language()==null"); if (ts.language ().mimeType () == null) throw new NullPointerException ("TokenSequence.mimeType==null"); if (ts.language().mimeType().equals(item.getMimeType())) { Token t = ts.token(); if (t == null) throw new NullPointerException (); Position position = doc.createPosition(t.offset(hi)); la.setPosition (position); doc.addAnnotation(position, t.length(), la); return true; } else { ts = ts.embedded(); if(ts == null) { return false; } else { return ts.moveNext() ? testCreateAnnotation(hi, ts, item, la) : false; } } }
private void indentAfter(TokenSequence<CppTokenId> prep, Token<CppTokenId> next, int spaces) { if (next.id() == WHITESPACE) { if (!Diff.equals(next.text().toString(), 0, spaces, false, context.expandTabToSpaces, context.tabSize)){ diffs.addFirst(prep.offset() + prep.token().length(), prep.offset() + prep.token().length() + next.length(), 0, spaces, false); } } else { if (spaces > 0) { diffs.addFirst(prep.offset()+ prep.token().length(), prep.offset()+ prep.token().length(), 0, spaces, false); } } }
private void skip(TokenSequence seq) { CodeBlockData previous = getLastCodeBlock(); if (previous != null) { previous.sourceEnd = seq.offset() + seq.token().length(); } else { CodeBlockData data = new CodeBlockData(seq.offset(), seq.offset() + seq.token().length(), 0, 0, false); codeBlocks.add(data); } }
/*package local*/ Diff replaceNext(Token<FortranTokenId> current, Token<FortranTokenId> next, int newLines, int spaces, boolean isIndent){ String old = next.text().toString(); if (!Diff.equals(old, newLines, spaces, isIndent, expandTabToSpaces, tabSize)){ return diffs.addFirst(ts.offset()+current.length(), ts.offset()+current.length()+next.length(), newLines, spaces, isIndent); } return null; }
@Override protected LanguageEmbedding<?> embedding( Token<JspTokenId> token, LanguagePath languagePath, InputAttributes inputAttributes) { switch(token.id()) { case TEXT: return LanguageEmbedding.create(HTMLTokenId.language(), 0, 0, true); case EL: //lexer infrastructure workaround - need to adjust skiplenghts in case of short token int startSkipLength = token.length() > 2 ? 2 : token.length(); int endSkipLength = token.length() > 2 ? 1 : 0; return LanguageEmbedding.create(ELTokenId.language(), startSkipLength, endSkipLength); case SCRIPTLET: return LanguageEmbedding.create(JavaTokenId.language(), 0, 0, false); default: return null; } }
private void indentAfter(TokenSequence<CppTokenId> prep, Token<CppTokenId> next, int spaces) { if (next.id() == WHITESPACE) { if (!Diff.equals(next.text().toString(), 0, spaces, false, context.expandTabToSpaces, context.tabSize)){ diffs.addFirst(prep.offset() + prep.token().length(), prep.offset() + prep.token().length() + next.length(), 0, spaces, false); } } else { if (spaces > 0) { diffs.addFirst(prep.offset()+ prep.token().length(), prep.offset()+ prep.token().length(), 0, spaces, false); } } }
private void addCodeBlock(TokenSequence seq, String generatedString, StringBuffer buf) { int generatedStart = buf.length(); int sourceStart = seq.offset(); int sourceEnd = sourceStart + seq.token().length(); int generatedEnd = generatedString.length() + generatedStart; CodeBlockData data = new CodeBlockData(sourceStart, sourceEnd, generatedStart, generatedEnd, generatedString.equals(SQLCompletion.UNKNOWN_TAG)); codeBlocks.add(data); buf.append(generatedString); }
/*package local*/ Diff replaceNext(Token<CppTokenId> current, Token<CppTokenId> next, int newLines, int spaces, boolean isIndent){ String old = next.text().toString(); if (!Diff.equals(old, newLines, spaces, isIndent, expandTabToSpaces, tabSize)){ return diffs.addFirst(ts.offset()+current.length(), ts.offset()+current.length()+next.length(), newLines, spaces, isIndent); } return null; }
private static boolean moveTheSequence(TokenSequence<?> seq, boolean backward, int offsetLimit) { if (backward) { if (seq.movePrevious()) { int e = seq.offset() + seq.token().length(); return offsetLimit == -1 ? true : e > offsetLimit; } } else { if (seq.moveNext()) { int s = seq.offset(); return offsetLimit == -1 ? true : s < offsetLimit; } } return false; }
/*package local*/ Diff replaceCurrent(Token<FortranTokenId> current, int newLines, int spaces, boolean isIndent){ String old = current.text().toString(); if (!Diff.equals(old, newLines, spaces, isIndent, expandTabToSpaces, tabSize)){ return diffs.addFirst(ts.offset(), ts.offset() + current.length(), newLines, spaces, isIndent); } return null; }
/** Search forwards in the token sequence until a token of type <code>down</code> is found */ public static OffsetRange findFwd(BaseDocument doc, TokenSequence<?extends RubyTokenId> ts, TokenId up, TokenId down) { int balance = 0; while (ts.moveNext()) { Token<?extends RubyTokenId> token = ts.token(); TokenId id = token.id(); if (id == up) { balance++; } else if (id == down) { if (balance == 0) { return new OffsetRange(ts.offset(), ts.offset() + token.length()); } balance--; } } return OffsetRange.NONE; }