org.eclipse.jface.text.formatter |
Package-level Javadoc
Provides a content formatter add-on for an ITextViewer.
A content formatter changes the formatting of a document region while
preserving and correctly updating the positions of the document.
Package Specification
IContentFormatter defines the concept of a text formatter. It
collaborates with content type specific formatting stratgies (IFormattingStrategy)
which for a given document region format the subregion with the
matching
content type. The package contains a default implementation of IContentFormatter
(ContentFormatter).
Additionally, an implementation of IContentFormatterExtension
is provided
for text edit based formatting strategies. This implementation only
accepts formatting strategies
implementing the extension interface IFormattingStrategyExtension.
These formatting strategies are required to handle the position
updating of the document. To facilitate the work with these text edit
based formatting strategies, a default implementation called ContextBasedFormattingStrategy
is provided. Formatting strategies inheriting from this class are text
edit based and behave context dependent. Depending on the formatting
context that is passed
to the content formatter, different preferences and modes can be used
to format different parts of a document.
To set up a proper working text edit based content formatter, the
following steps are needed:
- Create an instance of IFormattingContext. The default
implementation FormattingContext already
provides support for the conversion of preferences from a preference
store to a map and vice versa. The method getPreferenceKeys
usually has to be overridden to return the appropriate keys of the
preferences used during the formatting process. Then register a map of
preferences
with the formatting context by calling setProperty(String, Object)
with the property identifier FormattingContextProperties.CONTEXT_PREFERENCES.
- Create an instance of the text edit based content formatter class
MultiPassContentFormatter. The document partitioning and
its associated
default content type have to be passed to the constructor. This
information is needed since the content formatter is able to format
documents
according to arbitrary partitionings and default content types.
- Register the formatting strategies for the content types that
have to be formatted. If a formatting strategy is
registered as master strategy, it is automatically associated with the
default content type of the specified partitioning.
If the formatting strategy is registered as slave strategy, it is
associated with the indicated content type during the registration.
Note that the master strategy can also be registered as a slave
strategy for a content type other than the default content type.
- Specify the proper formatting mode (see
FormattingContextProperties):
- For whole document formatting set the property CONTEXT_DOCUMENT
of the created formatting context to true. This is
equivalent to setting
CONTEXT_REGION with a region
spanning the whole document.
- For multiple region formatting set the property
CONTEXT_REGION
of the formatting context. Note that the content formatter
automatically aligns the offset of a region to a line start for the
master formatting strategy, it also completes eventual partitions
covered only partially by the region for the slave formatting
strategies.
- For explicit formatting of a partition with the formatting
strategy registered for a certain content type use the
property CONTEXT_PARTITION. Note that the region denoted by
this property must correspond to a partition relative to the specified
partitioning in the document to be formatted. The content type of this
property overrides the content type of the partition
in the document.
- Call the method MultiPassContentFormatter#format(IDocument,
IFormattingContext) with the created formatting context
and the document to be formatted.
|
Java Source File Name | Type | Comment |
ContentFormatter.java | Class | Standard implementation of IContentFormatter .
The formatter supports two operation modes: partition aware and
partition unaware. |
ContextBasedFormattingStrategy.java | Class | Formatting strategy for context based content formatting. |
FormattingContext.java | Class | Default implementation of IFormattingContext . |
FormattingContextProperties.java | Class | Keys used by IFormattingContext objects to register specific
properties needed during the formatting process of a content formatter
implementing IContentFormatterExtension . |
IContentFormatter.java | Interface | The interface of a document content formatter. |
IContentFormatterExtension.java | Interface | Extension interface for
IContentFormatter .
Updates the content formatter to be able to pass
IFormattingContext context objects to
IFormattingStrategyExtension objects
operating in context based mode.
Clients using context based formatting call the method
format(IDocument, IFormattingContext) with a properly
initialized formatting context.
The formatting context must be set up according to the desired formatting mode:
Depending on the registered formatting strategies, more context information must
be passed in the formatting context, like e.g. |
IFormattingContext.java | Interface | Formatting context used in formatting strategies implementing interface
IFormattingStrategyExtension . |
IFormattingStrategy.java | Interface | A formatting strategy is assumed to be specialized on formatting text
of a particular content type. |
IFormattingStrategyExtension.java | Interface | Extension interface for IFormattingStrategy .
Updates formatting strategies to be able to receive a more general IFormattingContext
object from its associated content formatters.
Each formatting process calls the strategy's methods in the following
sequence:
formatterStarts
format
formatterStops
Note that multiple calls to formatterStarts can be issued to
a strategy before launching the formatting process with format .
This interface must be implemented by clients. |
MultiPassContentFormatter.java | Class | Content formatter for edit-based formatting strategies.
Two kinds of formatting strategies can be registered with this formatter:
- one master formatting strategy for the default content type
- one formatting strategy for each non-default content type
The master formatting strategy always formats the whole region to be
formatted in the first pass. |