org.eclipse.cdt.internal.ui.text
Class CIndenter

java.lang.Object
  extended by org.eclipse.cdt.internal.ui.text.CIndenter

public final class CIndenter
extends java.lang.Object

Uses the CHeuristicScanner to get the indentation level for a certain position in a document.

An instance holds some internal position in the document and is therefore not threadsafe.


Constructor Summary
CIndenter(org.eclipse.jface.text.IDocument document, CHeuristicScanner scanner)
          Creates a new instance.
CIndenter(org.eclipse.jface.text.IDocument document, CHeuristicScanner scanner, org.eclipse.cdt.core.model.ICProject project)
          Creates a new instance.
 
Method Summary
 java.lang.StringBuffer computeContinuationLineIndentation(int offset)
          Computes the indentation for a continuation line at offset.
 java.lang.StringBuffer computeIndentation(int offset)
          Computes the indentation at offset.
 java.lang.StringBuffer computeIndentation(int offset, boolean assumeOpeningBrace)
          Computes the indentation at offset.
 java.lang.StringBuffer createReusingIndent(java.lang.StringBuffer buffer, int additional)
          Creates a string with a visual length of the given indentationSize.
 int findReferencePosition(int offset)
          Returns the reference position regarding to indentation for offset, or NOT_FOUND.
 int findReferencePosition(int offset, boolean danglingElse, boolean matchBrace, boolean matchParen, boolean matchCase, boolean matchAccessSpecifier)
          Returns the reference position regarding to indentation for position, or NOT_FOUND.
 int findReferencePosition(int offset, int nextToken)
          Returns the reference position regarding to indentation for position, or NOT_FOUND.
 java.lang.StringBuffer getReferenceIndentation(int offset)
          Computes the indentation at the reference point of position.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CIndenter

public CIndenter(org.eclipse.jface.text.IDocument document,
                 CHeuristicScanner scanner)
Creates a new instance.

Parameters:
document - the document to scan
scanner - the CHeuristicScanner to be used for scanning the document. It must be installed on the same IDocument.

CIndenter

public CIndenter(org.eclipse.jface.text.IDocument document,
                 CHeuristicScanner scanner,
                 org.eclipse.cdt.core.model.ICProject project)
Creates a new instance.

Parameters:
document - the document to scan
scanner - the CHeuristicScanner to be used for scanning the document. It must be installed on the same IDocument.
project - the C/C++ project to get the formatter preferences from, or null to use the workspace settings
Method Detail

getReferenceIndentation

public java.lang.StringBuffer getReferenceIndentation(int offset)
Computes the indentation at the reference point of position.

Parameters:
offset - the offset in the document
Returns:
a String which reflects the indentation at the line in which the reference position to offset resides, or null if it cannot be determined

computeIndentation

public java.lang.StringBuffer computeIndentation(int offset)
Computes the indentation at offset.

Parameters:
offset - the offset in the document
Returns:
a String which reflects the correct indentation for the line in which offset resides, or null if it cannot be determined

computeIndentation

public java.lang.StringBuffer computeIndentation(int offset,
                                                 boolean assumeOpeningBrace)
Computes the indentation at offset.

Parameters:
offset - the offset in the document
assumeOpeningBrace - true if an opening brace should be assumed
Returns:
a String which reflects the correct indentation for the line in which offset resides, or null if it cannot be determined

computeContinuationLineIndentation

public java.lang.StringBuffer computeContinuationLineIndentation(int offset)
                                                          throws org.eclipse.jface.text.BadLocationException
Computes the indentation for a continuation line at offset.

Parameters:
offset - the offset in the document
Returns:
a StringBuffer which reflects the correct indentation for the line in which offset resides, or null if it cannot be determined.
Throws:
org.eclipse.jface.text.BadLocationException

createReusingIndent

public java.lang.StringBuffer createReusingIndent(java.lang.StringBuffer buffer,
                                                  int additional)
Creates a string with a visual length of the given indentationSize.

Parameters:
buffer - the original indent to reuse if possible
additional - the additional indentation units to add or subtract to reference
Returns:
the modified buffer reflecting the indentation adapted to additional

findReferencePosition

public int findReferencePosition(int offset)
Returns the reference position regarding to indentation for offset, or NOT_FOUND. This method calls findReferencePosition(offset, nextChar) where nextChar is the next character after offset.

Parameters:
offset - the offset for which the reference is computed
Returns:
the reference statement relative to which offset should be indented, or CHeuristicScanner.NOT_FOUND

findReferencePosition

public int findReferencePosition(int offset,
                                 int nextToken)
Returns the reference position regarding to indentation for position, or NOT_FOUND.

If peekNextChar is true, the next token after offset is read and taken into account when computing the indentation. Currently, if the next token is the first token on the line (i.e. only preceded by whitespace), the following tokens are specially handled:

Parameters:
offset - the offset for which the reference is computed
nextToken - the next token to assume in the document
Returns:
the reference statement relative to which offset should be indented, or CHeuristicScanner.NOT_FOUND

findReferencePosition

public int findReferencePosition(int offset,
                                 boolean danglingElse,
                                 boolean matchBrace,
                                 boolean matchParen,
                                 boolean matchCase,
                                 boolean matchAccessSpecifier)
Returns the reference position regarding to indentation for position, or NOT_FOUND.fIndent will contain the relative indentation (in indentation units, not characters) after the call. If there is a special alignment (e.g. for a method declaration where parameters should be aligned), fAlign will contain the absolute position of the alignment reference in fDocument, otherwise fAlign is set to CHeuristicScanner.NOT_FOUND.

Parameters:
offset - the offset for which the reference is computed
danglingElse - whether a dangling else should be assumed at position
matchBrace - whether the position of the matching brace should be returned instead of doing code analysis
matchParen - whether the position of the matching parenthesis should be returned instead of doing code analysis
matchCase - whether the position of a switch statement reference should be returned (either an earlier case statement or the switch block brace)
matchAccessSpecifier - whether the position of a class body reference should be returned (either an earlier public/protected/private or the class body brace)
Returns:
the reference statement relative to which position should be indented, or CHeuristicScanner.NOT_FOUND