/** * Der vorhergehende character, wobei whitespace zeichen uebersprungen werden, entspricht dem * uebergebenen character. * * @param document * @param offset * @param c * @return * @throws BadLocationException */ private boolean previousCharIs(final IDocument document, final int offset, final int c) throws BadLocationException { if (offset <= 0) { return false; } int curOffset = offset; while (curOffset > 0) { char docChar = document.getChar(--curOffset); if (!Character.isWhitespace(docChar)) { return docChar == c; } } return false; }
/** * Ueberspringen von Whitespace-Zeichen, bis Dokumentanfang oder nicht Whitespace gefunden wurde * * @param document * @param offset * @return */ private int skipWhitespace(final IDocument document, final int offset) throws BadLocationException { if (offset <= 0) { return 0; } int curOffset = offset; while (true) { if (!Character.isWhitespace(document.getChar(--curOffset))) { return curOffset + 1; } if (curOffset == 0) { return curOffset; } } }
private boolean isFunctionCallProposal(final IDocument document, final int offset) throws BadLocationException { if (offset <= 0) { return false; } int curOffset = offset; while (true) { char c = document.getChar(--curOffset); if (c == '(') { return true; } if (curOffset == 0 || Character.isWhitespace(c)) { return false; } } }
/** * Berechnet das Wort das vor dem offset liegt. Ist das Zeichen vor dem Wort ein Leerzeichen, (, ) * wird der leere String zurueckgegeben. * * @param document * @param offset * @return */ @Nonnull private String computePreviousWord(final IDocument document, final int offset) throws BadLocationException { if (offset <= 0) { // <= 0, da auf jeden Fall offset -1 vor zugriff return ""; } int curOffset = offset; StringBuilder prefix = new StringBuilder(); while (true) { char c = document.getChar(--curOffset); if (Character.isWhitespace(c) || c == '(' || c == ')' || c == '\'') { return prefix.reverse().toString(); } prefix.append(c); if (curOffset == 0) { return prefix.reverse().toString(); } } }