diff --git a/ICSharpCode.AvalonEdit/Editing/TextArea.cs b/ICSharpCode.AvalonEdit/Editing/TextArea.cs index 5ede9a16..1b70f719 100644 --- a/ICSharpCode.AvalonEdit/Editing/TextArea.cs +++ b/ICSharpCode.AvalonEdit/Editing/TextArea.cs @@ -857,6 +857,11 @@ protected virtual void OnTextEntered(TextCompositionEventArgs e) if (TextEntered != null) { TextEntered(this, e); } + + if (this.IndentationStrategy is ILineChangedListener) { + DocumentLine line = this.Document.GetLineByNumber(this.Caret.Line); + ((ILineChangedListener)this.IndentationStrategy).OnLineChanged(this.Document, line, e.Text); + } } /// diff --git a/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.xml b/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.xml new file mode 100644 index 00000000..36bb8b12 --- /dev/null +++ b/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.xml @@ -0,0 +1,11256 @@ + + + + ICSharpCode.AvalonEdit + + + + + Custom commands for AvalonEdit. + + + + + Toggles Overstrike mode + The default shortcut is Ins. + + + + + Deletes the current line. + The default shortcut is Ctrl+D. + + + + + Removes leading whitespace from the selected lines (or the whole document if the selection is empty). + + + + + Removes trailing whitespace from the selected lines (or the whole document if the selection is empty). + + + + + Converts the selected text to upper case. + + + + + Converts the selected text to lower case. + + + + + Converts the selected text to title case. + + + + + Inverts the case of the selected text. + + + + + Converts tabs to spaces in the selected text. + + + + + Converts spaces to tabs in the selected text. + + + + + Converts leading tabs to spaces in the selected lines (or the whole document if the selection is empty). + + + + + Converts leading spaces to tabs in the selected lines (or the whole document if the selection is empty). + + + + + Runs the IIndentationStrategy on the selected lines (or the whole document if the selection is empty). + + + + + The listbox used inside the CompletionWindow, contains CompletionListBox. + + + + + If true, the CompletionList is filtered to show only matching items. Also enables search by substring. + If false, enables the old behavior: no filtering, search by string.StartsWith. + + + + + Dependency property for . + + + + + Content of EmptyTemplate will be shown when CompletionList contains no items. + If EmptyTemplate is null, nothing will be shown. + + + + + Is raised when the completion list indicates that the user has chosen + an entry to be completed. + + + + + Raises the InsertionRequested event. + + + + + + + + Gets the list box. + + + + + Gets the scroll viewer used in this list box. + + + + + Gets the list to which completion data can be added. + + + + + + + + Handles a key press. Used to let the completion list handle key presses while the + focus is still on the text editor. + + + + + + + + Gets/Sets the selected item. + + + The setter of this property does not scroll to the selected item. + You might want to also call . + + + + + Scrolls the specified item into view. + + + + + Occurs when the SelectedItem property changes. + + + + + Selects the best match, and filter the items if turned on using . + + + + + Filters CompletionList items to show only those matching given query, and selects the best match. + + + + + Selects the item that starts with the specified query. + + + + + The list box used inside the CompletionList. + + + + + + + + Gets the number of the first visible item. + + + + + Gets the number of visible items. + + + + + Removes the selection. + + + + + Selects the item with the specified index and scrolls it into view. + + + + + Centers the view on the item with the specified index. + + + + + The code completion window. + + + + + Gets the completion list used in this completion window. + + + + + Creates a new code completion window. + + + + + + + + + + + + + + Gets/Sets whether the completion window should close automatically. + The default value is true. + + + + + + + + When this flag is set, code completion closes if the caret moves to the + beginning of the allowed range. This is useful in Ctrl+Space and "complete when typing", + but not in dot-completion. + Has no effect if CloseAutomatically is false. + + + + + Base class for completion windows. Handles positioning the window at the caret. + + + + + Gets the parent TextArea. + + + + + Gets/Sets the start of the text range in which the completion window stays open. + This text portion is used to determine the text used to select an entry in the completion list by typing. + + + + + Gets/Sets the end of the text range in which the completion window stays open. + This text portion is used to determine the text used to select an entry in the completion list by typing. + + + + + Gets whether the window was opened above the current line. + + + + + Creates a new CompletionWindowBase. + + + + + Detaches events from the text area. + + + + + A dummy input handler (that justs invokes the default input handler). + This is used to ensure the completion window closes when any other input handler + becomes active. + + + + + + + + Raises a tunnel/bubble event pair for a WPF control. + + The WPF control for which the event should be raised. + The tunneling event. + The bubbling event. + The event args to use. + The value of the event args. + + + + Activates the parent window. + + + + + Gets whether the completion window should automatically close when the text editor looses focus. + + + + + + + + + + + + + + Positions the completion window at the specified position. + + + + + Updates the position of the CompletionWindow based on the parent TextView position and the screen working area. + It ensures that the CompletionWindow is completely visible on the screen. + + + + + + + + Gets/sets whether the completion window should expect text insertion at the start offset, + which not go into the completion region, but before it. + + This property allows only a single insertion, it is reset to false + when that insertion has occurred. + + + + Describes an entry in the . + + + Note that the CompletionList uses WPF data binding against the properties in this interface. + Thus, your implementation of the interface must use public properties; not explicit interface implementation. + + + + + Gets the image. + + + + + Gets the text. This property is used to filter the list of visible elements. + + + + + The displayed content. This can be the same as 'Text', or a WPF UIElement if + you want to display rich content. + + + + + Gets the description. + + + + + Gets the priority. This property is used in the selection logic. You can use it to prefer selecting those items + which the user is accessing most frequently. + + + + + Perform the completion. + + The text area on which completion is performed. + The text segment that was used by the completion window if + the user types (segment between CompletionWindow.StartOffset and CompletionWindow.EndOffset). + The EventArgs used for the insertion request. + These can be TextCompositionEventArgs, KeyEventArgs, MouseEventArgs, depending on how + the insertion was triggered. + + + + A popup-like window that is attached to a text segment. + + + + + Creates a new InsightWindow. + + + + + + + + Gets/Sets whether the insight window should close automatically. + The default value is true. + + + + + + + + + + + TemplateSelector for InsightWindow to replace plain string content by a TextBlock with TextWrapping. + + + + + Provides the items for the OverloadViewer. + + + + + Gets/Sets the selected index. + + + + + Gets the number of overloads. + + + + + Gets the text 'SelectedIndex of Count'. + + + + + Gets the current header. + + + + + Gets the current content. + + + + + Insight window that shows an OverloadViewer. + + + + + Creates a new OverloadInsightWindow. + + + + + Gets/Sets the item provider. + + + + + + + + Represents a text between "Up" and "Down" buttons. + + + + + The text property. + + + + + Gets/Sets the text between the Up and Down buttons. + + + + + + + + The ItemProvider property. + + + + + Gets/Sets the item provider. + + + + + Changes the selected index. + + The relative index change - usual values are +1 or -1. + + + + Describes a change of the document text. + This class is thread-safe. + + + + + Gets the OffsetChangeMap associated with this document change. + + The OffsetChangeMap instance is guaranteed to be frozen and thus thread-safe. + + + + Gets the OffsetChangeMap, or null if the default offset map (=single replacement) is being used. + + + + + Gets the new offset where the specified offset moves after this document change. + + + + + Creates a new DocumentChangeEventArgs object. + + + + + Creates a new DocumentChangeEventArgs object. + + + + + Creates a new DocumentChangeEventArgs object. + + + + + + + + Describes a change to a TextDocument. + + + + + Represents a line inside a . + + + + The collection contains one DocumentLine instance + for every line in the document. This collection is read-only to user code and is automatically + updated to reflect the current document content. + + + Internally, the DocumentLine instances are arranged in a binary tree that allows for both efficient updates and lookup. + Converting between offset and line number is possible in O(lg N) time, + and the data structure also updates all offsets in O(lg N) whenever a line is inserted or removed. + + + + + + Gets if this line was deleted from the document. + + + + + Gets the number of this line. + Runtime: O(log n) + + The line was deleted. + + + + Gets the starting offset of the line in the document's text. + Runtime: O(log n) + + The line was deleted. + + + + Gets the end offset of the line in the document's text (the offset before the line delimiter). + Runtime: O(log n) + + The line was deleted. + EndOffset = + . + + + + Gets the length of this line. The length does not include the line delimiter. O(1) + + This property is still available even if the line was deleted; + in that case, it contains the line's length before the deletion. + + + + Gets the length of this line, including the line delimiter. O(1) + + This property is still available even if the line was deleted; + in that case, it contains the line's length before the deletion. + + + + Gets the length of the line delimiter. + The value is 1 for single "\r" or "\n", 2 for the "\r\n" sequence; + and 0 for the last line in the document. + + This property is still available even if the line was deleted; + in that case, it contains the line delimiter's length before the deletion. + + + + Gets the next line in the document. + + The line following this line, or null if this is the last line. + + + + Gets the previous line in the document. + + The line before this line, or null if this is the first line. + + + + Gets a string with debug output showing the line number and offset. + Does not include the line's text. + + + + + Resets the line to enable its reuse after a document rebuild. + + + + + The number of lines in this node and its child nodes. + Invariant: + nodeTotalCount = 1 + left.nodeTotalCount + right.nodeTotalCount + + + + + The total text length of this node and its child nodes. + Invariant: + nodeTotalLength = left.nodeTotalLength + documentLine.TotalLength + right.nodeTotalLength + + + + + Data structure for efficient management of the document lines (most operations are O(lg n)). + This implements an augmented red-black tree. + See for the augmented data. + + NOTE: The tree is never empty, initially it contains an empty line. + + + + + Rebuild the tree, in O(n). + + + + + build a tree from a list of nodes + + + + + A TextWriter implementation that directly inserts into a document. + + + + + Creates a new DocumentTextWriter that inserts into document, starting at insertionOffset. + + + + + Gets/Sets the current insertion offset. + + + + + + + + + + + + + + + + + A document representing a source code file for refactoring. + Line and column counting starts at 1. + Offset counting starts at 0. + + + + + Gets/Sets the text of the whole document.. + + + + + This event is called directly before a change is applied to the document. + + + It is invalid to modify the document within this event handler. + Aborting the change (by throwing an exception) is likely to cause corruption of data structures + that listen to the Changing and Changed events. + + + + + This event is called directly after a change is applied to the document. + + + It is invalid to modify the document within this event handler. + Aborting the event handler (by throwing an exception) is likely to cause corruption of data structures + that listen to the Changing and Changed events. + + + + + This event is called after a group of changes is completed. + + + + + + Gets the number of lines in the document. + + + + + Gets the document line with the specified number. + + The number of the line to retrieve. The first line has number 1. + + + + Gets the document line that contains the specified offset. + + + + + Gets the offset from a text location. + + + + + + Gets the offset from a text location. + + + + + + Gets the location from an offset. + + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to their movement type. + For AnchorMovementType.Default, they will move behind the inserted text. + The caret will also move behind the inserted text. + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to their movement type. + For AnchorMovementType.Default, they will move behind the inserted text. + The caret will also move behind the inserted text. + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to the anchor's movement type. + For AnchorMovementType.Default, they will move according to the movement type specified by this parameter. + The caret will also move according to the parameter. + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to the anchor's movement type. + For AnchorMovementType.Default, they will move according to the movement type specified by this parameter. + The caret will also move according to the parameter. + + + + + Removes text. + + Starting offset of the text to be removed. + Length of the text to be removed. + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + + + + Make the document combine the following actions into a single + action for undo purposes. + + + + + Ends the undoable action started with . + + + + + Creates an undo group. Dispose the returned value to close the undo group. + + An object that closes the undo group when Dispose() is called. + + + + Creates a new at the specified offset. + + + + + + Gets the name of the file the document is stored in. + Could also be a non-existent dummy file name or null if no name has been set. + + + + + Fired when the file name of the document changes. + + + + + A line inside a . + + + + + Gets the length of this line, including the line delimiter. + + + + + Gets the length of the line terminator. + Returns 1 or 2; or 0 at the end of the document. + + + + + Gets the number of this line. + The first line has the number 1. + + + + + Gets the previous line. Returns null if this is the first line in the document. + + + + + Gets the next line. Returns null if this is the last line in the document. + + + + + Gets whether the line was deleted. + + + + + Describes a change of the document text. + This class is thread-safe. + + + + + The offset at which the change occurs. + + + + + The text that was removed. + + + + + The number of characters removed. + + + + + The text that was inserted. + + + + + The number of characters inserted. + + + + + Creates a new TextChangeEventArgs object. + + + + + Creates a new TextChangeEventArgs object. + + + + + Gets the new offset where the specified offset moves after this document change. + + + + + Creates TextChangeEventArgs for the reverse change. + + + + + Allows for low-level line tracking. + + + The methods on this interface are called by the TextDocument's LineManager immediately after the document + has changed, *while* the DocumentLineTree is updating. + Thus, the DocumentLineTree may be in an invalid state when these methods are called. + This interface should only be used to update per-line data structures like the HeightTree. + Line trackers must not cause any events to be raised during an update to prevent other code from seeing + the invalid state. + Line trackers may be called while the TextDocument has taken a lock. + You must be careful not to dead-lock inside ILineTracker callbacks. + + + + + Is called immediately before a document line is removed. + + + + + Is called immediately before a document line changes length. + This method will be called whenever the line is changed, even when the length stays as it is. + The method might be called multiple times for a single line because + a replacement is internally handled as removal followed by insertion. + + + + + Is called immediately after a line was inserted. + + The new line + The existing line before the new line + + + + Indicates that there were changes to the document that the line tracker was not notified of. + The document is in a consistent state (but the line trackers aren't), and line trackers should + throw away their data and rebuild the document. + + + + + Notifies the line tracker that a document change (a single change, not a change group) has completed. + This method gets called after the change has been performed, but before the event + is raised. + + + + + The TextAnchor class references an offset (a position between two characters). + It automatically updates the offset when text is inserted/removed in front of the anchor. + + + Use the property to get the offset from a text anchor. + Use the method to create an anchor from an offset. + + + The document will automatically update all text anchors; and because it uses weak references to do so, + the garbage collector can simply collect the anchor object when you don't need it anymore. + + Moreover, the document is able to efficiently update a large number of anchors without having to look + at each anchor object individually. Updating the offsets of all anchors usually only takes time logarithmic + to the number of anchors. Retrieving the property also runs in O(lg N). + + + Usage: + TextAnchor anchor = document.CreateAnchor(offset); + ChangeMyDocument(); + int newOffset = anchor.Offset; + + + + + + Gets the text location of this anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + Gets the offset of the text anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + Controls how the anchor moves. + + Anchor movement is ambiguous if text is inserted exactly at the anchor's location. + Does the anchor stay before the inserted text, or does it move after it? + The property will be used to determine which of these two options the anchor will choose. + The default value is . + + + + + Specifies whether the anchor survives deletion of the text containing it. + + false: The anchor is deleted when the a selection that includes the anchor is deleted. + true: The anchor is not deleted. + + + + + + + Gets whether the anchor was deleted. + + + When a piece of text containing an anchor is removed, then that anchor will be deleted. + First, the property is set to true on all deleted anchors, + then the events are raised. + You cannot retrieve the offset from an anchor that has been deleted. + This deletion behavior might be useful when using anchors for building a bookmark feature, + but in other cases you want to still be able to use the anchor. For those cases, set = true. + + + + + Occurs after the anchor was deleted. + + + + Due to the 'weak reference' nature of text anchors, you will receive + the Deleted event only while your code holds a reference to the TextAnchor object. + + + + + + Gets the line number of the anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + Gets the column number of this anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + Defines how a text anchor moves. + + + + + When text is inserted at the anchor position, the type of the insertion + determines where the caret moves to. For normal insertions, the anchor will move + after the inserted text. + + + + + Behaves like a start marker - when text is inserted at the anchor position, the anchor will stay + before the inserted text. + + + + + Behave like an end marker - when text is insered at the anchor position, the anchor will move + after the inserted text. + + + + + A read-only view on a (potentially mutable) text source. + The IDocument interface derives from this interface. + + + + + Gets a version identifier for this text source. + Returns null for unversioned text sources. + + + + + Creates an immutable snapshot of this text source. + Unlike all other methods in this interface, this method is thread-safe. + + + + + Creates an immutable snapshot of a part of this text source. + Unlike all other methods in this interface, this method is thread-safe. + + + + + Creates a new TextReader to read from this text source. + + + + + Creates a new TextReader to read from this text source. + + + + + Gets the total text length. + + The length of the text, in characters. + This is the same as Text.Length, but is more efficient because + it doesn't require creating a String object. + + + + Gets the whole text as string. + + + + + Gets a character at the specified position in the document. + + The index of the character to get. + Offset is outside the valid range (0 to TextLength-1). + The character at the specified position. + This is the same as Text[offset], but is more efficient because + it doesn't require creating a String object. + + + + Retrieves the text for a portion of the document. + + offset or length is outside the valid range. + This is the same as Text.Substring, but is more efficient because + it doesn't require creating a String object for the whole document. + + + + Retrieves the text for a portion of the document. + + offset or length is outside the valid range. + + + + Writes the text from this document into the TextWriter. + + + + + Writes the text from this document into the TextWriter. + + + + + Gets the index of the first occurrence of the character in the specified array. + + Character to search for + Start index of the area to search. + Length of the area to search. + The first index where the character was found; or -1 if no occurrence was found. + + + + Gets the index of the first occurrence of any character in the specified array. + + Characters to search for + Start index of the area to search. + Length of the area to search. + The first index where any character was found; or -1 if no occurrence was found. + + + + Gets the index of the first occurrence of the specified search text in this text source. + + The search text + Start index of the area to search. + Length of the area to search. + String comparison to use. + The first index where the search term was found; or -1 if no occurrence was found. + + + + Gets the index of the last occurrence of the specified character in this text source. + + The search character + Start index of the area to search. + Length of the area to search. + The last index where the search term was found; or -1 if no occurrence was found. + The search proceeds backwards from (startIndex+count) to startIndex. + This is different than the meaning of the parameters on string.LastIndexOf! + + + + Gets the index of the last occurrence of the specified search text in this text source. + + The search text + Start index of the area to search. + Length of the area to search. + String comparison to use. + The last index where the search term was found; or -1 if no occurrence was found. + The search proceeds backwards from (startIndex+count) to startIndex. + This is different than the meaning of the parameters on string.LastIndexOf! + + + + Represents a version identifier for a text source. + + + Verions can be used to efficiently detect whether a document has changed and needs reparsing; + or even to implement incremental parsers. + It is a separate class from ITextSource to allow the GC to collect the text source while + the version checkpoint is still in use. + + + + + Gets whether this checkpoint belongs to the same document as the other checkpoint. + + + Returns false when given null. + + + + + Compares the age of this checkpoint to the other checkpoint. + + This method is thread-safe. + Raised if 'other' belongs to a different document than this version. + -1 if this version is older than . + 0 if this version instance represents the same version as . + 1 if this version is newer than . + + + + Gets the changes from this checkpoint to the other checkpoint. + If 'other' is older than this checkpoint, reverse changes are calculated. + + This method is thread-safe. + Raised if 'other' belongs to a different document than this checkpoint. + + + + Calculates where the offset has moved in the other buffer version. + + Raised if 'other' belongs to a different document than this checkpoint. + + + + Implements the ITextSource interface using a string. + + + + + Gets a text source containing the empty string. + + + + + Creates a new StringTextSource with the given text. + + + + + Creates a new StringTextSource with the given text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Interface describes a the basic Undo/Redo operation + all Undo Operations must implement this interface. + + + + + Undo the last operation + + + + + Redo the last operation + + + + + Creates/Deletes lines when text is inserted/removed. + + + + + A copy of the line trackers. We need a copy so that line trackers may remove themselves + while being notified (used e.g. by WeakLineTracker) + + + + + Sets the total line length and checks the delimiter. + This method can cause line to be deleted when it contains a single '\n' character + and the previous line ends with '\r'. + + Usually returns , but if line was deleted due to + the "\r\n" merge, returns the previous line. + + + + Gets the location of the next new line character, or SimpleSegment.Invalid + if none is found. + + + + + Gets the location of the next new line character, or SimpleSegment.Invalid + if none is found. + + + + + Static helper methods for working with text. + + + + + Finds the next new line character starting at offset. + + The text source to search in. + The starting offset for the search. + The string representing the new line that was found, or null if no new line was found. + The position of the first new line starting at or after , + or -1 if no new line was found. + + + + Gets whether the specified string is a newline sequence. + + + + + Normalizes all new lines in to be . + + + + + Gets the newline sequence used in the document at the specified line. + + + + + Gets the name of the control character. + For unknown characters, the unicode codepoint is returned as 4-digit hexadecimal value. + + + + + Gets all whitespace (' ' and '\t', but no newlines) after offset. + + The text source. + The offset where the whitespace starts. + The segment containing the whitespace. + + + + Gets all whitespace (' ' and '\t', but no newlines) before offset. + + The text source. + The offset where the whitespace ends. + The segment containing the whitespace. + + + + Gets the leading whitespace segment on the document line. + + + + + Gets the trailing whitespace segment on the document line. + + + + + Gets a single indentation segment starting at - at most one tab + or spaces. + + The text source. + The offset where the indentation segment starts. + The size of an indentation unit. See . + The indentation segment. + If there is no indentation character at the specified , + an empty segment is returned. + + + + Gets whether the character is whitespace, part of an identifier, or line terminator. + + + + + Gets the next caret position. + + The text source. + The start offset inside the text source. + The search direction (forwards or backwards). + The mode for caret positioning. + The offset of the next caret position, or -1 if there is no further caret position + in the text source. + + This method is NOT equivalent to the actual caret movement when using VisualLine.GetNextCaretPosition. + In real caret movement, there are additional caret stops at line starts and ends. This method + treats linefeeds as simple whitespace. + + + + + Contains predefined offset change mapping types. + + + + + Normal replace. + Anchors in front of the replaced region will stay in front, anchors after the replaced region will stay after. + Anchors in the middle of the removed region will be deleted. If they survive deletion, + they move depending on their AnchorMovementType. + + + This is the default implementation of DocumentChangeEventArgs when OffsetChangeMap is null, + so using this option usually works without creating an OffsetChangeMap instance. + This is equivalent to an OffsetChangeMap with a single entry describing the replace operation. + + + + + First the old text is removed, then the new text is inserted. + Anchors immediately in front (or after) the replaced region may move to the other side of the insertion, + depending on the AnchorMovementType. + + + This is implemented as an OffsetChangeMap with two entries: the removal, and the insertion. + + + + + The text is replaced character-by-character. + Anchors keep their position inside the replaced text. + Anchors after the replaced region will move accordingly if the replacement text has a different length than the replaced text. + If the new text is shorter than the old text, anchors inside the old text that would end up behind the replacement text + will be moved so that they point to the end of the replacement text. + + + On the OffsetChangeMap level, growing text is implemented by replacing the last character in the replaced text + with itself and the additional text segment. A simple insertion of the additional text would have the undesired + effect of moving anchors immediately after the replaced text into the replacement text if they used + AnchorMovementStyle.BeforeInsertion. + Shrinking text is implemented by removing the text segment that's too long; but in a special mode that + causes anchors to always survive irrespective of their setting. + If the text keeps its old size, this is implemented as OffsetChangeMap.Empty. + + + + + Like 'Normal', but anchors with = Default will stay in front of the + insertion instead of being moved behind it. + + + + + Describes a series of offset changes. + + + + + Immutable OffsetChangeMap that is empty. + + + + + Creates a new OffsetChangeMap with a single element. + + The entry. + Returns a frozen OffsetChangeMap with a single entry. + + + + Creates a new OffsetChangeMap instance. + + + + + Gets the new offset where the specified offset moves after this document change. + + + + + Gets whether this OffsetChangeMap is a valid explanation for the specified document change. + + + + + Calculates the inverted OffsetChangeMap (used for the undo operation). + + + + + + + + + + + + + + + + + Gets if this instance is frozen. Frozen instances are immutable and thus thread-safe. + + + + + Freezes this instance. + + + + + An entry in the OffsetChangeMap. + This represents the offset of a document change (either insertion or removal, not both at once). + + + + + The offset at which the change occurs. + + + + + The number of characters inserted. + Returns 0 if this entry represents a removal. + + + + + The number of characters removed. + Returns 0 if this entry represents an insertion. + + + + + Gets whether the removal should not cause any anchor deletions. + + + + + Gets whether default anchor movement causes the anchor to stay in front of the caret. + + + + + Gets the new offset where the specified offset moves after this document change. + + + + + Creates a new OffsetChangeMapEntry instance. + + + + + Creates a new OffsetChangeMapEntry instance. + + + + + + + + + + + + + + Tests the two entries for equality. + + + + + Tests the two entries for inequality. + + + + + Implements the ITextSource interface using a rope. + + + + + Creates a new RopeTextSource. + + + + + Creates a new RopeTextSource. + + + + + Returns a clone of the rope used for this text source. + + + RopeTextSource only publishes a copy of the contained rope to ensure that the underlying rope cannot be modified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a simple segment (Offset,Length pair) that is not automatically updated + on document changes. + + + + + Gets the overlapping portion of the segments. + Returns SimpleSegment.Invalid if the segments don't overlap. + + + + + + + + A segment using s as start and end positions. + + + + For the constructors creating new anchors, the start position will be AfterInsertion and the end position will be BeforeInsertion. + Should the end position move before the start position, the segment will have length 0. + + + + + + + + + + + + + + + + + Creates a new AnchorSegment using the specified anchors. + The anchors must have set to true. + + + + + Creates a new AnchorSegment that creates new anchors. + + + + + Creates a new AnchorSegment that creates new anchors. + + + + + + + + The TextAnchor class references an offset (a position between two characters). + It automatically updates the offset when text is inserted/removed in front of the anchor. + + + Use the property to get the offset from a text anchor. + Use the method to create an anchor from an offset. + + + The document will automatically update all text anchors; and because it uses weak references to do so, + the garbage collector can simply collect the anchor object when you don't need it anymore. + + Moreover, the document is able to efficiently update a large number of anchors without having to look + at each anchor object individually. Updating the offsets of all anchors usually only takes time logarithmic + to the number of anchors. Retrieving the property also runs in O(lg N). + + + If you want to track a segment, you can use the class which + implements using two text anchors. + + + Usage: + TextAnchor anchor = document.CreateAnchor(offset); + ChangeMyDocument(); + int newOffset = anchor.Offset; + + + + + + Gets the document owning the anchor. + + + + + + + + + + + + + + + + + Gets the offset of the text anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + Gets the line number of the anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + Gets the column number of this anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + Gets the text location of this anchor. + + Thrown when trying to get the Offset from a deleted anchor. + + + + + + + A TextAnchorNode is placed in the TextAnchorTree. + It describes a section of text with a text anchor at the end of the section. + A weak reference is used to refer to the TextAnchor. (to save memory, we derive from WeakReference instead of referencing it) + + + + + Gets the inorder successor of the node. + + + + + Gets the inorder predecessor of the node. + + + + + A tree of TextAnchorNodes. + + + + + Swaps the anchors stored in the two nodes. + + + + + Finds the node at the specified offset. + After the method has run, offset is relative to the beginning of the returned node. + + + + + This class is the main class of the text model. Basically, it is a with events. + + + Thread safety: + + However, there is a single method that is thread-safe: (and its overloads). + + + + + Verifies that the current thread is the documents owner thread. + Throws an if the wrong thread accesses the TextDocument. + + + The TextDocument class is not thread-safe. A document instance expects to have a single owner thread + and will throw an when accessed from another thread. + It is possible to change the owner thread using the method. + + + + + Transfers ownership of the document to another thread. This method can be used to load + a file into a TextDocument on a background thread and then transfer ownership to the UI thread + for displaying the document. + + + + + The owner can be set to null, which means that no thread can access the document. But, if the document + has no owner thread, any thread may take ownership by calling . + + + + + + Create an empty text document. + + + + + Create a new text document with the specified initial text. + + + + + Create a new text document with the specified initial text. + + + + + + + + Retrieves the text for a portion of the document. + + + + + + + + + + + + + + + + + + + + + + + Gets/Sets the text of the whole document. + + + + + This event is called after a group of changes is completed. + + + + + + + + + Is raised when one of the properties , , , + changes. + + + + + + Is raised before the document changes. + + + Here is the order in which events are raised during a document update: + + BeginUpdate() + + Start of change group (on undo stack) + event is raised + + Insert() / Remove() / Replace() + + event is raised + The document is changed + TextAnchor.Deleted event is raised if anchors were + in the deleted text portion + event is raised + + EndUpdate() + + event is raised + event is raised (for the Text, TextLength, LineCount properties, in that order) + End of change group (on undo stack) + event is raised + + + + If the insert/remove/replace methods are called without a call to BeginUpdate(), + they will call BeginUpdate() and EndUpdate() to ensure no change happens outside of UpdateStarted/UpdateFinished. + + There can be multiple document changes between the BeginUpdate() and EndUpdate() calls. + In this case, the events associated with EndUpdate will be raised only once after the whole document update is done. + + The listens to the UpdateStarted and UpdateFinished events to group all changes into a single undo step. + + + + + + Is raised after the document has changed. + + + + + + Creates a snapshot of the current text. + + + This method returns an immutable snapshot of the document, and may be safely called even when + the document's owner thread is concurrently modifying the document. + + This special thread-safety guarantee is valid only for TextDocument.CreateSnapshot(), not necessarily for other + classes implementing ITextSource.CreateSnapshot(). + + + + + + + Creates a snapshot of a part of the current text. + + + + + + + + + + + + + + + + + + + + + Gets if an update is running. + + + + + + Immediately calls , + and returns an IDisposable that calls . + + + + + + Begins a group of document changes. + Some events are suspended until EndUpdate is called, and the will + group all changes into a single action. + Calling BeginUpdate several times increments a counter, only after the appropriate number + of EndUpdate calls the events resume their work. + + + + + + Ends a group of document changes. + + + + + + Occurs when a document change starts. + + + + + + Occurs when a document change is finished. + + + + + + Fires TextChanged, TextLengthChanged, LineCountChanged if required. + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to their movement type. + For AnchorMovementType.Default, they will move behind the inserted text. + The caret will also move behind the inserted text. + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to their movement type. + For AnchorMovementType.Default, they will move behind the inserted text. + The caret will also move behind the inserted text. + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to the anchor's movement type. + For AnchorMovementType.Default, they will move according to the movement type specified by this parameter. + The caret will also move according to the parameter. + + + + + Inserts text. + + The offset at which the text is inserted. + The new text. + + Anchors positioned exactly at the insertion offset will move according to the anchor's movement type. + For AnchorMovementType.Default, they will move according to the movement type specified by this parameter. + The caret will also move according to the parameter. + + + + + Removes text. + + + + + Removes text. + + Starting offset of the text to be removed. + Length of the text to be removed. + + + + Replaces text. + + + + + Replaces text. + + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + The offsetChangeMappingType determines how offsets inside the old text are mapped to the new text. + This affects how the anchors and segments inside the replaced region behave. + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + The offsetChangeMappingType determines how offsets inside the old text are mapped to the new text. + This affects how the anchors and segments inside the replaced region behave. + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + The offsetChangeMap determines how offsets inside the old text are mapped to the new text. + This affects how the anchors and segments inside the replaced region behave. + If you pass null (the default when using one of the other overloads), the offsets are changed as + in OffsetChangeMappingType.Normal mode. + If you pass OffsetChangeMap.Empty, then everything will stay in its old place (OffsetChangeMappingType.CharacterReplace mode). + The offsetChangeMap must be a valid 'explanation' for the document change. See . + Passing an OffsetChangeMap to the Replace method will automatically freeze it to ensure the thread safety of the resulting + DocumentChangeEventArgs instance. + + + + + Replaces text. + + The starting offset of the text to be replaced. + The length of the text to be replaced. + The new text. + The offsetChangeMap determines how offsets inside the old text are mapped to the new text. + This affects how the anchors and segments inside the replaced region behave. + If you pass null (the default when using one of the other overloads), the offsets are changed as + in OffsetChangeMappingType.Normal mode. + If you pass OffsetChangeMap.Empty, then everything will stay in its old place (OffsetChangeMappingType.CharacterReplace mode). + The offsetChangeMap must be a valid 'explanation' for the document change. See . + Passing an OffsetChangeMap to the Replace method will automatically freeze it to ensure the thread safety of the resulting + DocumentChangeEventArgs instance. + + + + + Gets a read-only list of lines. + + + + + + Gets a line by the line number: O(log n) + + + + + Gets a document lines by offset. + Runtime: O(log n) + + + + + Gets the offset from a text location. + + + + + + Gets the offset from a text location. + + + + + + Gets the location from an offset. + + + + + + Gets the list of s attached to this document. + You can add custom line trackers to this list. + + + + + Gets the of the document. + + This property can also be used to set the undo stack, e.g. for sharing a common undo stack between multiple documents. + + + + Creates a new at the specified offset. + + + + + + Gets the total number of lines in the document. + Runtime: O(1). + + + + + Gets the document lines tree in string form. + + + + + Gets the text anchor tree in string form. + + + + + Gets/Sets the service provider associated with this document. + By default, every TextDocument has its own ServiceContainer; and has the document itself + registered as and . + + + + + + + + + + + Contains weak event managers for the TextDocument events. + + + + + Weak event manager for the event. + + + + + + + + + + + Weak event manager for the event. + + + + + + + + + + + Weak event manager for the event. + + + + + + + + + + + Weak event manager for the event. + + + + + + + + + + + Weak event manager for the event. + + + + + + + + + + + A line/column position. + Text editor lines/columns are counted started from one. + + + The document provides the methods and + to convert between offsets and TextLocations. + + + + + Represents no text location (0, 0). + + + + + Creates a TextLocation instance. + + + + + Gets the line number. + + + + + Gets the column number. + + + + + Gets whether the TextLocation instance is empty. + + + + + Gets a string representation for debugging purposes. + + + + + Gets a hash code. + + + + + Equality test. + + + + + Equality test. + + + + + Equality test. + + + + + Inequality test. + + + + + Compares two text locations. + + + + + Compares two text locations. + + + + + Compares two text locations. + + + + + Compares two text locations. + + + + + Compares two text locations. + + + + + Converts strings of the form '0+[;,]0+' to a . + + + + + + + + + + + + + + + + + An (Offset,Length)-pair. + + + + + Gets the start offset of the segment. + + + + + Gets the length of the segment. + + For line segments (IDocumentLine), the length does not include the line delimeter. + + + + Gets the end offset of the segment. + + EndOffset = Offset + Length; + + + + Extension methods for . + + + + + Gets whether fully contains the specified segment. + + + Use segment.Contains(offset, 0) to detect whether a segment (end inclusive) contains offset; + use segment.Contains(offset, 1) to detect whether a segment (end exclusive) contains offset. + + + + + Gets whether fully contains the specified segment. + + + + + A segment that can be put into a . + + + + A can be stand-alone or part of a . + If the segment is stored inside a TextSegmentCollection, its Offset and Length will be updated by that collection. + + + When the document changes, the offsets of all text segments in the TextSegmentCollection will be adjusted accordingly. + Start offsets move like AnchorMovementType.AfterInsertion, + end offsets move like AnchorMovementType.BeforeInsertion + (i.e. the segment will always stay as small as possible). + + If a document change causes a segment to be deleted completely, it will be reduced to length 0, but segments are + never automatically removed from the collection. + Segments with length 0 will never expand due to document changes, and they move as AfterInsertion. + + + Thread-safety: a TextSegmentCollection that is connected to a may only be used on that document's owner thread. + A disconnected TextSegmentCollection is safe for concurrent reads, but concurrent access is not safe when there are writes. + Keep in mind that reading the Offset properties of a text segment inside the collection is a read access on the + collection; and setting an Offset property of a text segment is a write access on the collection. + + + + + + + + + The color of the segment in the red/black tree. + + + + + The "length" of the node (distance to previous node) + + + + + The total "length" of this subtree. + + + + + The length of the segment (do not confuse with nodeLength). + + + + + distanceToMaxEnd = Max(segmentLength, + left.distanceToMaxEnd + left.Offset - Offset, + left.distanceToMaxEnd + right.Offset - Offset) + + + + + Gets whether this segment is connected to a TextSegmentCollection and will automatically + update its offsets. + + + + + Gets/Sets the start offset of the segment. + + + When setting the start offset, the end offset will change, too: the Length of the segment will stay constant. + + + + + Gets/Sets the end offset of the segment. + + + Setting the end offset will change the length, the start offset will stay constant. + + + + + Gets/Sets the length of the segment. + + + Setting the length will change the end offset, the start offset will stay constant. + + + + + This method gets called when the StartOffset/Length/EndOffset properties are set. + It is not called when StartOffset/Length/EndOffset change due to document changes + + + + + Gets the inorder successor of the node. + + + + + Gets the inorder predecessor of the node. + + + + + + + + Interface to allow TextSegments to access the TextSegmentCollection - we cannot use a direct reference + because TextSegmentCollection is generic. + + + + + + A collection of text segments that supports efficient lookup of segments + intersecting with another segment. + + + + + + + + Creates a new TextSegmentCollection that needs manual calls to . + + + + + Creates a new TextSegmentCollection that updates the offsets automatically. + + The document to which the text segments + that will be added to the tree belong. When the document changes, the + position of the text segments will be updated accordingly. + + + + Updates the start and end offsets of all segments stored in this collection. + + DocumentChangeEventArgs instance describing the change to the document. + + + + Updates the start and end offsets of all segments stored in this collection. + + OffsetChangeMapEntry instance describing the change to the document. + + + + Adds the specified segment to the tree. This will cause the segment to update when the + document changes. + + + + + Gets the next segment after the specified segment. + Segments are sorted by their start offset. + Returns null if segment is the last segment. + + + + + Gets the previous segment before the specified segment. + Segments are sorted by their start offset. + Returns null if segment is the first segment. + + + + + Returns the first segment in the collection or null, if the collection is empty. + + + + + Returns the last segment in the collection or null, if the collection is empty. + + + + + Gets the first segment with a start offset greater or equal to . + Returns null if no such segment is found. + + + + + Finds the node at the specified offset. + After the method has run, offset is relative to the beginning of the returned node. + + + + + Finds all segments that contain the given offset. + (StartOffset <= offset <= EndOffset) + Segments are returned in the order given by GetNextSegment/GetPreviousSegment. + + Returns a new collection containing the results of the query. + This means it is safe to modify the TextSegmentCollection while iterating through the result collection. + + + + Finds all segments that overlap with the given segment (including touching segments). + + Returns a new collection containing the results of the query. + This means it is safe to modify the TextSegmentCollection while iterating through the result collection. + + + + Finds all segments that overlap with the given segment (including touching segments). + Segments are returned in the order given by GetNextSegment/GetPreviousSegment. + + Returns a new collection containing the results of the query. + This means it is safe to modify the TextSegmentCollection while iterating through the result collection. + + + + Removes the specified segment from the tree. This will cause the segment to not update + anymore when the document changes. + + + + + Removes all segments from the tree. + + + + + Gets the number of segments in the tree. + + + + + Gets whether this tree contains the specified item. + + + + + Copies all segments in this SegmentTree to the specified array. + + + + + Gets an enumerator to enumerate the segments. + + + + + Provides ITextSourceVersion instances. + + + + + Creates a new TextSourceVersionProvider instance. + + + + + Gets the current version. + + + + + Replaces the current version with a new version. + + Change from current version to new version + + + + Specifies the mode for getting the next caret position. + + + + + Normal positioning (stop after every grapheme) + + + + + Stop only on word borders. + + + + + Stop only at the beginning of words. This is used for Ctrl+Left/Ctrl+Right. + + + + + Stop only at the beginning of words, and anywhere in the middle of symbols. + + + + + Stop only on word borders, and anywhere in the middle of symbols. + + + + + Stop between every Unicode codepoint, even within the same grapheme. + This is used to implement deleting the previous grapheme when Backspace is pressed. + + + + + Classifies a character as whitespace, line terminator, part of an identifier, or other. + + + + + The character is not whitespace, line terminator or part of an identifier. + + + + + The character is whitespace (but not line terminator). + + + + + The character can be part of an identifier (Letter, digit or underscore). + + + + + The character is line terminator (\r or \n). + + + + + The character is a unicode combining mark that modifies the previous character. + Corresponds to the Unicode designations "Mn", "Mc" and "Me". + + + + + This class stacks the last x operations from the undostack and makes + one undo/redo operation from it. + + + + + Undo stack implementation. + + + + undo stack is listening for changes + + + undo stack is reverting/repeating a set of changes + + + state is used for checking that noone but the UndoStack performs changes + during Undo events + + + + Number of times undo must be executed until the original state is reached. + Negative: number of times redo must be executed until the original state is reached. + Special case: int.MinValue == original state is unreachable + + + + + Gets whether the document is currently in its original state (no modifications). + + + + + Marks the current state as original. Discards any previous "original" markers. + + + + + Discards the current "original" marker. + + + + + Gets if the undo stack currently accepts changes. + Is false while an undo action is running. + + + + + Gets if there are actions on the undo stack. + Use the PropertyChanged event to listen to changes of this property. + + + + + Gets if there are actions on the redo stack. + Use the PropertyChanged event to listen to changes of this property. + + + + + Gets/Sets the limit on the number of items on the undo stack. + + The size limit is enforced only on the number of stored top-level undo groups. + Elements within undo groups do not count towards the size limit. + + + + If an undo group is open, gets the group descriptor of the current top-level + undo group. + If no undo group is open, gets the group descriptor from the previous undo group. + + The group descriptor can be used to join adjacent undo groups: + use a group descriptor to mark your changes, and on the second action, + compare LastGroupDescriptor and use if you + want to join the undo groups. + + + + Starts grouping changes. + Maintains a counter so that nested calls are possible. + + + + + Starts grouping changes. + Maintains a counter so that nested calls are possible. + + An object that is stored with the undo group. + If this is not a top-level undo group, the parameter is ignored. + + + + Starts grouping changes, continuing with the previously closed undo group if possible. + Maintains a counter so that nested calls are possible. + If the call to StartContinuedUndoGroup is a nested call, it behaves exactly + as , only top-level calls can continue existing undo groups. + + An object that is stored with the undo group. + If this is not a top-level undo group, the parameter is ignored. + + + + Stops grouping changes. + + + + + Throws an InvalidOperationException if an undo group is current open. + + + + + Call this method to undo the last operation on the stack + + + + + Call this method to redo the last undone operation + + + + + Call this method to push an UndoableOperation on the undostack. + The redostack will be cleared if you use this method. + + + + + Call this method to push an UndoableOperation on the undostack. + However, the operation will be only stored if the undo group contains a + non-optional operation. + Use this method to store the caret position/selection on the undo stack to + prevent having only actions that affect only the caret and not the document. + + + + + Call this method, if you want to clear the redo stack + + + + + Clears both the undo and redo stack. + + + + + Is raised when a property (CanUndo, CanRedo) changed. + + + + + Allows registering a line tracker on a TextDocument using a weak reference from the document to the line tracker. + + + + + Registers the as line tracker for the . + A weak reference to the target tracker will be used, and the WeakLineTracker will deregister itself + when the target tracker is garbage collected. + + + + + Deregisters the weak line tracker. + + + + + Base class for margins. + Margins don't have to derive from this class, it just helps maintaining a reference to the TextView + and the TextDocument. + AbstractMargin derives from FrameworkElement, so if you don't want to handle visual children and rendering + on your own, choose another base class for your margin! + + + + + TextView property. + + + + + Gets/sets the text view for which line numbers are displayed. + + Adding a margin to will automatically set this property to the text area's TextView. + + + + Gets the document associated with the margin. + + + + + Called when the is changing. + + + + + Called when the is changing. + + + + + Helper class with caret-related methods. + + + + + Gets/Sets the position of the caret. + Retrieving this property will validate the visual column (which can be expensive). + Use the property instead if you don't need the visual column. + + + + + Gets the caret position without validating it. + + + + + Gets/Sets the location of the caret. + The getter of this property is faster than because it doesn't have + to validate the visual column. + + + + + Gets/Sets the caret line. + + + + + Gets/Sets the caret column. + + + + + Gets/Sets the caret visual column. + + + + + Gets whether the caret is in virtual space. + + + + + Gets/Sets the caret offset. + Setting the caret offset has the side effect of setting the to NaN. + + + + + Gets/Sets the desired x-position of the caret, in device-independent pixels. + This property is NaN if the caret has no desired position. + + + + + Event raised when the caret position has changed. + If the caret position is changed inside a document update (between BeginUpdate/EndUpdate calls), + the PositionChanged event is raised only once at the end of the document update. + + + + + Validates the visual column of the caret using the specified visual line. + The visual line must contain the caret offset. + + + + + Returns the caret rectangle. The coordinate system is in device-independent pixels from the top of the document. + + + + + Minimum distance of the caret to the view border. + + + + + Scrolls the text view so that the caret is visible. + + + + + Makes the caret visible and updates its on-screen position. + + + + + Makes the caret invisible. + + + + + Gets/Sets the color of the caret. + + + + + Creates a new for the text area. + + + + + Contains classes for handling weak events on the Caret class. + + + + + Handles the Caret.PositionChanged event. + + + + + + + + + + + Margin for use with the text area. + A vertical dotted line to separate the line numbers from the text view. + + + + + Creates a vertical dotted line to separate the line numbers from the text view. + + + + + Gets whether the specified UIElement is the result of a DottedLineMargin.Create call. + + + + + Wraps exceptions that occur during drag'n'drop. + Exceptions during drag'n'drop might + get swallowed by WPF/COM, so AvalonEdit catches them and re-throws them later + wrapped in a DragDropException. + + + + + Creates a new DragDropException. + + + + + Creates a new DragDropException. + + + + + Creates a new DragDropException. + + + + + Deserializes a DragDropException. + + + + + We re-use the CommandBinding and InputBinding instances between multiple text areas, + so this class is static. + + + + + Creates a new for the text area. + + + + + Calls transformLine on all lines in the selected range. + transformLine needs to handle read-only segments! + + + + + Calls transformLine on all writable segment in the selected range. + + + + + Native API required for IME support. + + + + + Determines whether the document can be modified. + + + + + Gets whether insertion is possible at the specified offset. + + + + + Gets the deletable segments inside the given segment. + + + All segments in the result must be within the given segment, and they must be returned in order + (e.g. if two segments are returned, EndOffset of first segment must be less than StartOffset of second segment). + + For replacements, the last segment being returned will be replaced with the new text. If an empty list is returned, + no replacement will be done. + + + + + Margin showing line numbers. + + + + + The typeface used for rendering the line number margin. + This field is calculated in MeasureOverride() based on the FontFamily etc. properties. + + + + + The font size used for rendering the line number margin. + This field is calculated in MeasureOverride() based on the FontFamily etc. properties. + + + + + + + + + + + + + + + + + + + + Maximum length of a line number, in characters + + + + + + + + + + + + + + + + + Enumeration of possible states of mouse selection. + + + + + no selection (no mouse button down) + + + + + left mouse button down on selection, might be normal click + or might be drag'n'drop + + + + + dragging text + + + + + normal selection (click+drag) + + + + + whole-word selection (double click+drag or ctrl+click+drag) + + + + + whole-line selection (triple click+drag) + + + + + rectangular selection (alt+click+drag) + + + + + that has no read-only sections; all text is editable. + + + + + that completely disables editing. + + + + + Rectangular selection ("box selection"). + + + + + Expands the selection left by one character, creating a rectangular selection. + Key gesture: Alt+Shift+Left + + + + + Expands the selection right by one character, creating a rectangular selection. + Key gesture: Alt+Shift+Right + + + + + Expands the selection left by one word, creating a rectangular selection. + Key gesture: Ctrl+Alt+Shift+Left + + + + + Expands the selection left by one word, creating a rectangular selection. + Key gesture: Ctrl+Alt+Shift+Right + + + + + Expands the selection up by one line, creating a rectangular selection. + Key gesture: Alt+Shift+Up + + + + + Expands the selection up by one line, creating a rectangular selection. + Key gesture: Alt+Shift+Down + + + + + Expands the selection to the start of the line, creating a rectangular selection. + Key gesture: Alt+Shift+Home + + + + + Expands the selection to the end of the line, creating a rectangular selection. + Key gesture: Alt+Shift+End + + + + + Creates a new rectangular selection. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Performs a rectangular paste operation. + + + + + Gets the name of the entry in the DataObject that signals rectangle selections. + + + + + + + + + + + Base class for selections. + + + + + Creates a new simple selection that selects the text from startOffset to endOffset. + + + + + Creates a new simple selection that selects the text in the specified segment. + + + + + Constructor for Selection. + + + + + Gets the start position of the selection. + + + + + Gets the end position of the selection. + + + + + Gets the selected text segments. + + + + + Gets the smallest segment that contains all segments in this selection. + May return null if the selection is empty. + + + + + Replaces the selection with the specified text. + + + + + Updates the selection when the document changes. + + + + + Gets whether the selection is empty. + + + + + Gets whether virtual space is enabled for this selection. + + + + + Gets the selection length. + + + + + Returns a new selection with the changed end point. + + Cannot set endpoint for empty selection + + + + If this selection is empty, starts a new selection from to + , otherwise, changes the endpoint of this selection. + + + + + Gets whether the selection is multi-line. + + + + + Gets the selected text. + + + + + Creates a HTML fragment for the selected text. + + + + + + + + + + + Gets whether the specified offset is included in the selection. + + True, if the selection contains the offset (selection borders inclusive); + otherwise, false. + + + + Creates a data object containing the selection's text. + + + + + Handles selection of text using the mouse. + + + + + Represents a selected segment. + + + + + Creates a SelectionSegment from two offsets. + + + + + Creates a SelectionSegment from two offsets and visual columns. + + + + + Gets the start offset. + + + + + Gets the end offset. + + + + + Gets the start visual column. + + + + + Gets the end visual column. + + + + + + + + + + + + + + A simple selection. + + + + + Creates a new SimpleSelection instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Control that wraps a TextView and adds support for user input and the caret. + + + + + Creates a new TextArea instance. + + + + + Creates a new TextArea instance. + + + + + Gets the default input handler. + + + + + + Gets/Sets the active input handler. + This property does not return currently active stacked input handlers. Setting this property detached all stacked input handlers. + + + + + + Occurs when the ActiveInputHandler property changes. + + + + + Gets the list of currently active stacked input handlers. + + + + + + Pushes an input handler onto the list of stacked input handlers. + + + + + + Pops the stacked input handler (and all input handlers above it). + If is not found in the currently stacked input handlers, or is null, this method + does nothing. + + + + + + Document property. + + + + + Gets/Sets the document displayed by the text editor. + + + + + + + + Options property. + + + + + Gets/Sets the document displayed by the text editor. + + + + + Occurs when a text editor option has changed. + + + + + Raises the event. + + + + + + + + Gets the text view used to display text in this text area. + + + + + + + + Occurs when the selection has changed. + + + + + Gets/Sets the selection in this text area. + + + + + Clears the current selection. + + + + + The property. + + + + + Gets/Sets the background brush used for the selection. + + + + + The property. + + + + + Gets/Sets the foreground brush used for selected text. + + + + + The property. + + + + + Gets/Sets the pen used for the border of the selection. + + + + + The property. + + + + + Gets/Sets the corner radius of the selection. + + + + + Gets/Sets the active mouse selection mode. + + Setting this property to MouseSelectionMode.None will cancel mouse selection + and release mouse capture. + + Setting this property to another value will acquire mouse capture and + activate the mouse selection mode. + If mouse capture cannot be acquired, MouseSelectionMode will stay unchanged. + + Currently, the setter only supports the values None, Normal + and Rectangular. + + + + + Code that updates only the caret but not the selection can cause confusion when + keys like 'Delete' delete the (possibly invisible) selected text and not the + text around the caret. + + So we'll ensure that the caret is inside the selection. + (when the caret is not in the selection, we'll clear the selection) + + This method is invoked using the Dispatcher so that code may temporarily violate this rule + (e.g. most 'extend selection' methods work by first setting the caret, then the selection), + it's sufficient to fix it after any event handlers have run. + + + + + Temporarily allows positioning the caret outside the selection. + Dispose the returned IDisposable to revert the allowance. + + + The text area only forces the caret to be inside the selection when other events + have finished running (using the dispatcher), so you don't have to use this method + for temporarily positioning the caret in event handlers. + This method is only necessary if you want to run the WPF dispatcher, e.g. if you + perform a drag'n'drop operation. + + + + + Gets the Caret used for this text area. + + + + + Gets the collection of margins displayed to the left of the text view. + + + + + Gets/Sets an object that provides read-only sections for the text area. + + + + + + + + + + + + + + Occurs when the TextArea receives text input. + This is like the event, + but occurs immediately before the TextArea handles the TextInput event. + + + + + Occurs when the TextArea receives text input. + This is like the event, + but occurs immediately after the TextArea handles the TextInput event. + + + + + Raises the TextEntering event. + + + + + Raises the TextEntered event. + + + + + + + + Performs text input. + This raises the event, replaces the selection with the text, + and then raises the event. + + + + + Performs text input. + This raises the event, replaces the selection with the text, + and then raises the event. + + + + + IndentationStrategy property. + + + + + Gets/Sets the indentation strategy used when inserting new lines. + + + + + + + + + + + + + + + + + The dependency property. + + + + + Gets/Sets whether overstrike mode is active. + + + + + + + + + + + + + + Gets the requested service. + + Returns the requested service instance, or null if the service cannot be found. + + + + Occurs when text inside the TextArea was copied. + + + + + EventArgs with text. + + + + + Gets the text. + + + + + Creates a new TextEventArgs instance. + + + + + Contains the predefined input handlers. + + + + + Gets the caret navigation input handler. + + + + + Gets the editing input handler. + + + + + Gets the mouse selection input handler. + + + + + Creates a new TextAreaDefaultInputHandler instance. + + + + + A set of input bindings and event handlers for the text area. + + + + There is one active input handler per text area (), plus + a number of active stacked input handlers. + + + The text area also stores a reference to a default input handler, but that is not necessarily active. + + + Stacked input handlers work in addition to the set of currently active handlers (without detaching them). + They are detached in the reverse order of being attached. + + + + + + Gets the text area that the input handler belongs to. + + + + + Attaches an input handler to the text area. + + + + + Detaches the input handler from the text area. + + + + + Stacked input handler. + Uses OnEvent-methods instead of registering event handlers to ensure that the events are handled in the correct order. + + + + + + + + Creates a new TextAreaInputHandler. + + + + + + + + + + + Called for the PreviewKeyDown event. + + + + + Called for the PreviewKeyUp event. + + + + + Default-implementation of . + + + + + + Creates a new TextAreaInputHandler. + + + + + + + + Gets whether the input handler is currently attached to the text area. + + + + + Gets the command bindings of this input handler. + + + + + Gets the input bindings of this input handler. + + + + + Adds a command and input binding. + + The command ID. + The modifiers of the keyboard shortcut. + The key of the keyboard shortcut. + The event handler to run when the command is executed. + + + + Gets the collection of nested input handlers. NestedInputHandlers are activated and deactivated + together with this input handler. + + + + + + + + + + + Implementation for that stores the segments + in a . + + + + + Gets the collection storing the read-only segments. + + + + + Creates a new TextSegmentReadOnlySectionProvider instance for the specified document. + + + + + Creates a new TextSegmentReadOnlySectionProvider instance using the specified TextSegmentCollection. + + + + + Gets whether insertion is possible at the specified offset. + + + + + Gets the deletable segments inside the given segment. + + + + + A that produces line elements for folded s. + + + + + Gets/Sets the folding manager from which the foldings should be shown. + + + + + + + + + + + + + + Default brush for folding element text. Value: Brushes.Gray + + + + + Gets/sets the brush used for folding element text. + + + + + Stores a list of foldings for a specific TextView and TextDocument. + + + + + Creates a new FoldingManager instance. + + + + + + + + Creates a folding for the specified text section. + + + + + Removes a folding section from this manager. + + + + + Removes all folding sections. + + + + + Gets all foldings in this manager. + The foldings are returned sorted by start offset; + for multiple foldings at the same offset the order is undefined. + + + + + Gets the first offset greater or equal to where a folded folding starts. + Returns -1 if there are no foldings after . + + + + + Gets the first folding with a greater or equal to + . + Returns null if there are no foldings after . + + + + + Gets all foldings that start exactly at . + + + + + Gets all foldings that contain . + + + + + Updates the foldings in this using the given new foldings. + This method will try to detect which new foldings correspond to which existing foldings; and will keep the state + () for existing foldings. + + The new set of foldings. These must be sorted by starting offset. + The first position of a parse error. Existing foldings starting after + this offset will be kept even if they don't appear in . + Use -1 for this parameter if there were no parse errors. + + + + Adds Folding support to the specified text area. + Warning: The folding manager is only valid for the text area's current document. The folding manager + must be uninstalled before the text area is bound to a different document. + + The that manages the list of foldings inside the text area. + + + + Uninstalls the folding manager. + + The specified manager was not created using . + + + + A margin that shows markers for foldings and allows to expand/collapse the foldings. + + + + + Gets/Sets the folding manager from which the foldings should be shown. + + + + + FoldingMarkerBrush dependency property. + + + + + Gets/sets the Brush used for displaying the lines of folding markers. + + + + + FoldingMarkerBackgroundBrush dependency property. + + + + + Gets/sets the Brush used for displaying the background of folding markers. + + + + + SelectedFoldingMarkerBrush dependency property. + + + + + Gets/sets the Brush used for displaying the lines of selected folding markers. + + + + + SelectedFoldingMarkerBackgroundBrush dependency property. + + + + + Gets/sets the Brush used for displaying the background of selected folding markers. + + + + + + + + + + + + + + + + + + + + + + + Calculates fold lines for all folding sections that start in front of the current view + and run into the current view. + + + + + Calculates fold lines for all folding sections that start inside the current view + + + + + Draws the lines for the folding sections (vertical line with 'color', horizontal lines with 'endMarker') + Each entry in the input arrays corresponds to one TextLine. + + + + + A section that can be folded. + + + + + Gets/sets if the section is folded. + + + + + + + + Gets/Sets the text used to display the collapsed version of the folding section. + + + + + Gets the content of the collapsed lines as text. + + + + + Gets/Sets an additional object associated with this folding section. + + + + + Helper class used for . + + + + + Gets/Sets the start offset. + + + + + Gets/Sets the end offset. + + + + + Gets/Sets the name displayed for the folding. + + + + + Gets/Sets whether the folding is closed by default. + + + + + Gets/Sets whether the folding is considered to be a definition. + This has an effect on the 'Show Definitions only' command. + + + + + Creates a new NewFolding instance. + + + + + Creates a new NewFolding instance. + + + + + Holds information about the start of a fold in an xml string. + + + + + Determines folds for an xml string in the editor. + + + + + Flag indicating whether attributes should be displayed on folded + elements. + + + + + Create s for the specified document and updates the folding manager with them. + + + + + Create s for the specified document. + + + + + Create s for the specified document. + + + + + Creates a comment fold if the comment spans more than one line. + + The text displayed when the comment is folded is the first + line of the comment. + + + + Creates an XmlFoldStart for the start tag of an element. + + + + + Create an element fold if the start and end tag are on + different lines. + + + + + Gets the element's attributes as a string on one line that will + be displayed when the element is folded. + + + Currently this puts all attributes from an element on the same + line of the start tag. It does not cater for elements where attributes + are not on the same line as the start tag. + + + + + Xml encode the attribute string since the string returned from + the XmlTextReader is the plain unencoded string and .NET + does not provide us with an xml encode method. + + + + + This class can syntax-highlight a document. + It automatically manages invalidating the highlighting when the document changes. + + + + + Stores the span state at the end of each line. + storedSpanStacks[0] = state at beginning of document + storedSpanStacks[i] = state after line i + + + + + Gets the document that this DocumentHighlighter is highlighting. + + + + + Creates a new DocumentHighlighter instance. + + + + + Disposes the document highlighter. + + + + + Gets/sets the the initial span stack of the document. Default value is . + + + + + Invalidates all stored highlighting info. + When the document changes, the highlighting is invalidated automatically, this method + needs to be called only when there are changes to the highlighting rule set. + + + + + Invalidates stored highlighting info, but does not raise the HighlightingStateChanged event. + + + + + + + + Gets the span stack at the end of the specified line. + -> GetSpanStack(1) returns the spans at the start of the second line. + + + GetSpanStack(0) is valid and will return . + The elements are returned in inside-out order (first element of result enumerable is the color of the innermost span). + + + + + + + + + + + Sets the engine's CurrentSpanStack to the end of the target line. + Updates the span stack for all lines up to (and including) the target line, if necessary. + + + + + + + + Is called when the highlighting state at the end of the specified line has changed. + + This callback must not call HighlightLine or InvalidateHighlighting. + It may call GetSpanStack, but only for the changed line and lines above. + This method must not modify the document. + + + + + + + + + + + + + + + + Takes a series of highlighting commands and stores them. + Later, it can build inline objects (for use with WPF TextBlock) from the commands. + + + This class is not used in AvalonEdit - but it is useful for someone who wants to put a HighlightedLine + into a TextBlock. + In SharpDevelop, we use it to provide syntax highlighting inside the search results pad. + + + + + Creates a new HighlightedInlineBuilder instance. + + + + + Creates a new HighlightedInlineBuilder instance. + + + + + Gets the text. + + + + + Applies the properties from the HighlightingColor to the specified text segment. + + + + + Sets the foreground brush on the specified text segment. + + + + + Sets the background brush on the specified text segment. + + + + + Sets the font weight on the specified text segment. + + + + + Sets the font style on the specified text segment. + + + + + Creates WPF Run instances that can be used for TextBlock.Inlines. + + + + + Creates a RichText instance. + + + + + Clones this HighlightedInlineBuilder. + + + + + Represents a highlighted document line. + + + + + Creates a new HighlightedLine instance. + + + + + Gets the document associated with this HighlightedLine. + + + + + Gets the document line associated with this HighlightedLine. + + + + + Gets the highlighted sections. + The sections are not overlapping, but they may be nested. + In that case, outer sections come in the list before inner sections. + The sections are sorted by start offset. + + + + + Validates that the sections are sorted correctly, and that they are not overlapping. + + + + + + Merges the additional line into this line. + + + + + Writes the highlighted line to the RichTextWriter. + + + + + Writes a part of the highlighted line to the RichTextWriter. + + + + + Produces HTML code for the line, with <span class="colorName"> tags. + + + + + Produces HTML code for a section of the line, with <span class="colorName"> tags. + + + + + + + + Creates a that stores the text and highlighting of this line. + + + + + Creates a that stores the highlighting of this line. + + + + + Creates a that stores the text and highlighting of this line. + + + + + A text section with syntax highlighting information. + + + + + Gets/sets the document offset of the section. + + + + + Gets/sets the length of the section. + + + + + Gets the highlighting color associated with the highlighted section. + + + + + + + + A brush used for syntax highlighting. Can retrieve a real brush on-demand. + + + + + Gets the real brush. + + The construction context. context can be null! + + + + Gets the color of the brush. + + The construction context. context can be null! + + + + Highlighting brush implementation that takes a frozen brush. + + + + + Creates a new HighlightingBrush with the specified color. + + + + + + + + + + + + + + + + + HighlightingBrush implementation that finds a brush using a resource. + + + + + A highlighting color is a set of font properties and foreground and background color. + + + + + Gets/Sets the name of the color. + + + + + Gets/sets the font family. Null if the highlighting color does not change the font style. + + + + + Gets/sets the font size. Null if the highlighting color does not change the font style. + + + + + Gets/sets the font weight. Null if the highlighting color does not change the font weight. + + + + + Gets/sets the font style. Null if the highlighting color does not change the font style. + + + + + Gets/sets the underline flag. Null if the underline status does not change the font style. + + + + + Gets/sets the strikethrough flag. Null if the strikethrough status does not change the font style. + + + + + Gets/sets the foreground color applied by the highlighting. + + + + + Gets/sets the background color applied by the highlighting. + + + + + Creates a new HighlightingColor instance. + + + + + Deserializes a HighlightingColor. + + + + + Serializes this HighlightingColor instance. + + + + + Gets CSS code for the color. + + + + + + + + Prevent further changes to this highlighting color. + + + + + Gets whether this HighlightingColor instance is frozen. + + + + + Clones this highlighting color. + If this color is frozen, the clone will be unfrozen. + + + + + + + + + + + + + + Overwrites the properties in this HighlightingColor with those from the given color; + but maintains the current values where the properties of the given color return null. + + + + + A colorizes that interprets a highlighting rule set and colors the document accordingly. + + + + + Creates a new HighlightingColorizer instance. + + The highlighting definition. + + + + Creates a new HighlightingColorizer instance that uses a fixed highlighter instance. + The colorizer can only be used with text views that show the document for which + the highlighter was created. + + The highlighter to be used. + + + + Creates a new HighlightingColorizer instance. + Derived classes using this constructor must override the method. + + + + + This method is called when a text view is removed from this HighlightingColorizer, + and also when the TextDocument on any associated text view changes. + + + + + This method is called when a new text view is added to this HighlightingColorizer, + and also when the TextDocument on any associated text view changes. + + + + + Creates the IHighlighter instance for the specified text document. + + + + + + + + + + + + + + + + + Gets whether the color is empty (has no effect on a VisualLineTextElement). + For example, the C# "Punctuation" is an empty color. + + + + + Applies a highlighting color to a visual line element. + + + + + This method is responsible for telling the TextView to redraw lines when the highlighting state has changed. + + + Creation of a VisualLine triggers the syntax highlighter (which works on-demand), so it says: + Hey, the user typed "/*". Don't just recreate that line, but also the next one + because my highlighting state (at end of line) changed! + + + + + Indicates that the highlighting definition that was tried to load was invalid. + + + + + Creates a new HighlightingDefinitionInvalidException instance. + + + + + Creates a new HighlightingDefinitionInvalidException instance. + + + + + Creates a new HighlightingDefinitionInvalidException instance. + + + + + Creates a new HighlightingDefinitionInvalidException instance. + + + + + Converts between strings and by treating the string as the definition name + and calling HighlightingManager.Instance.GetDefinition(name). + + + + + + + + + + + + + + + + + Regex-based highlighting engine. + + + + + Creates a new HighlightingEngine instance. + + + + + Gets/sets the current span stack. + + + + + the HighlightedLine where highlighting output is being written to. + if this variable is null, nothing is highlighted and only the span state is updated + + + + + Highlights the specified line in the specified document. + + Before calling this method, must be set to the proper + state for the beginning of this line. After highlighting has completed, + will be updated to represent the state after the line. + + + + + Updates for the specified line in the specified document. + + Before calling this method, must be set to the proper + state for the beginning of this line. After highlighting has completed, + will be updated to represent the state after the line. + + + + + Returns the first match from the array or endSpanMatch. + + + + + Manages a list of syntax highlighting definitions. + + + All memers on this class (including instance members) are thread-safe. + + + + + Gets a highlighting definition by name. + Returns null if the definition is not found. + + + + + Gets a copy of all highlightings. + + + + + Gets a highlighting definition by extension. + Returns null if the definition is not found. + + + + + Registers a highlighting definition. + + The name to register the definition with. + The file extensions to register the definition for. + The highlighting definition. + + + + Registers a highlighting definition. + + The name to register the definition with. + The file extensions to register the definition for. + A function that loads the highlighting definition. + + + + Gets the default HighlightingManager instance. + The default HighlightingManager comes with built-in highlightings. + + + + + A highlighting rule. + + + + + Gets/Sets the regular expression for the rule. + + + + + Gets/Sets the highlighting color. + + + + + + + + A highlighting rule set describes a set of spans that are valid at a given code location. + + + + + Creates a new RuleSet instance. + + + + + Gets/Sets the name of the rule set. + + + + + Gets the list of spans. + + + + + Gets the list of rules. + + + + + + + + A highlighting span is a region with start+end expression that has a different RuleSet inside + and colors the region. + + + + + Gets/Sets the start expression. + + + + + Gets/Sets the end expression. + + + + + Gets/Sets the rule set that applies inside this span. + + + + + Gets the color used for the text matching the start expression. + + + + + Gets the color used for the text between start and end. + + + + + Gets the color used for the text matching the end expression. + + + + + Gets/Sets whether the span color includes the start. + The default is false. + + + + + Gets/Sets whether the span color includes the end. + The default is false. + + + + + + + + Allows copying HTML text to the clipboard. + + + + + Builds a header for the CF_HTML clipboard format. + + + + + Sets the TextDataFormat.Html on the data object to the specified html fragment. + This helper methods takes care of creating the necessary CF_HTML header. + + + + + Creates a HTML fragment from a part of a document. + + The document to create HTML from. + The highlighter used to highlight the document. null is valid and will create HTML without any highlighting. + The part of the document to create HTML for. You can pass null to create HTML for the whole document. + The options for the HTML creation. + HTML code for the document part. + + + + Holds options for converting text to HTML. + + + + + Creates a default HtmlOptions instance. + + + + + Creates a new HtmlOptions instance that copies applicable options from the . + + + + + The amount of spaces a tab gets converted to. + + + + + Writes the HTML attribute for the style to the text writer. + + + + + Gets whether the color needs to be written out to HTML. + + + + + RichTextWriter implementation that produces HTML. + + + + + Creates a new HtmlRichTextWriter instance. + + + The text writer where the raw HTML is written to. + The HtmlRichTextWriter does not take ownership of the htmlWriter; + disposing the HtmlRichTextWriter will not dispose the underlying htmlWriter! + + Options that control the HTML output. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a highlighted document. + + This interface is used by the to register the highlighter as a TextView service. + + + + Gets the underlying text document. + + + + + Gets the stack of active colors (the colors associated with the active spans) at the end of the specified line. + -> GetColorStack(1) returns the colors at the start of the second line. + + + GetColorStack(0) is valid and will return the empty stack. + The elements are returned in inside-out order (first element of result enumerable is the color of the innermost span). + + + + + Highlights the specified document line. + + The line to highlight. + A line object that represents the highlighted sections. + + + + Enforces a highlighting state update (triggering the HighlightingStateChanged event if necessary) + for all lines up to (and inclusive) the specified line number. + + + + + Notification when the highlighter detects that the highlighting state at the + beginning of the specified lines has changed. + fromLineNumber and toLineNumber are both inclusive; + the common case of a single-line change is represented by fromLineNumber == toLineNumber. + + During highlighting, the highlighting of line X will cause this event to be raised + for line X+1 if the highlighting state at the end of line X has changed from its previous state. + This event may also be raised outside of the highlighting process to signalize that + changes to external data (not the document text; but e.g. semantic information) + require a re-highlighting of the specified lines. + + + For implementers: there is the requirement that, during highlighting, + if there was no state changed reported for the beginning of line X, + and there were no document changes between the start of line X and the start of line Y (with Y > X), + then this event must not be raised for any line between X and Y (inclusive). + + Equal input state + unchanged line = Equal output state. + + See the comment in the HighlightingColorizer.OnHighlightStateChanged implementation + for details about the requirements for a correct custom IHighlighter. + + Outside of the highlighting process, this event can be raised without such restrictions. + + + + + Opens a group of calls. + It is not necessary to call this method before calling , + however, doing so can make the highlighting much more performant in some cases + (e.g. the C# semantic highlighter in SharpDevelop will re-use the resolver within a highlighting group). + + + The group is closed by either a or a call. + Nested groups are not allowed. + + + + + Closes the currently opened group of calls. + + . + + + + Retrieves the HighlightingColor with the specified name. Returns null if no color matching the name is found. + + + + + Gets the default text color. + + + + + Event handler for + + + + + A highlighting definition. + + + + + Gets the name of the highlighting definition. + + + + + Gets the main rule set. + + + + + Gets a rule set by name. + + The rule set, or null if it is not found. + + + + Gets a named highlighting color. + + The highlighting color, or null if it is not found. + + + + Gets the list of named highlighting colors. + + + + + Gets the list of properties. + + + + + Interface for resolvers that can solve cross-definition references. + + + + + Gets the highlighting definition by name, or null if it is not found. + + + + + Represents a immutable piece text with highlighting information. + + + + + The empty string without any formatting information. + + + + + Creates a RichText instance with the given text and RichTextModel. + + + The text to use in this RichText instance. + + + The model that contains the formatting to use for this RichText instance. + model.DocumentLength should correspond to text.Length. + This parameter may be null, in which case the RichText instance just holds plain text. + + + + + Gets the text. + + + + + Gets the text length. + + + + + Gets the HighlightingColor for the specified offset. + + + + + Retrieves the highlighted sections in the specified range. + The highlighted sections will be sorted by offset, and there will not be any nested or overlapping sections. + + + + + Creates a new RichTextModel with the formatting from this RichText. + + + + + Gets the text. + + + + + Creates WPF Run instances that can be used for TextBlock.Inlines. + + + + + Produces HTML code for the line, with <span style="..."> tags. + + + + + Produces HTML code for a section of the line, with <span style="..."> tags. + + + + + Creates a substring of this rich text. + + + + + Concatenates the specified rich texts. + + + + + Concatenates the specified rich texts. + + + + + Implicit conversion from string to RichText. + + + + + A colorizer that applies the highlighting from a to the editor. + + + + + Creates a new RichTextColorizer instance. + + + + + + + + Stores rich-text formatting. + + + + + Creates a new RichTextModel. + + + + + Creates a RichTextModel from a CONTIGUOUS list of HighlightedSections. + + + + + Updates the start and end offsets of all segments stored in this collection. + + TextChangeEventArgs instance describing the change to the document. + + + + Updates the start and end offsets of all segments stored in this collection. + + OffsetChangeMap instance describing the change to the document. + + + + Updates the start and end offsets of all segments stored in this collection. + + OffsetChangeMapEntry instance describing the change to the document. + + + + Appends another RichTextModel after this one. + + + + + Gets a copy of the HighlightingColor for the specified offset. + + + + + Applies the HighlightingColor to the specified range of text. + If the color specifies null for some properties, existing highlighting is preserved. + + + + + Sets the HighlightingColor for the specified range of text, + completely replacing the existing highlighting in that area. + + + + + Sets the foreground brush on the specified text segment. + + + + + Sets the background brush on the specified text segment. + + + + + Sets the font weight on the specified text segment. + + + + + Sets the font style on the specified text segment. + + + + + Retrieves the highlighted sections in the specified range. + The highlighted sections will be sorted by offset, and there will not be any nested or overlapping sections. + + + + + Creates WPF Run instances that can be used for TextBlock.Inlines. + + The text source that holds the text for this RichTextModel. + + + + A RichTextWriter that writes into a document and RichTextModel. + + + + + Creates a new RichTextModelWriter that inserts into document, starting at insertionOffset. + + + + + Gets/Sets the current insertion offset. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Static class with helper methods to load XSHD highlighting files. + + + + + Lodas a syntax definition from the xml reader. + + + + + Creates a highlighting definition from the XSHD file. + + + + + Creates a highlighting definition from the XSHD file. + + + + + A visitor over the XSHD element tree. + + + + Visit method for XshdRuleSet + + + Visit method for XshdColor + + + Visit method for XshdKeywords + + + Visit method for XshdSpan + + + Visit method for XshdImport + + + Visit method for XshdRule + + + + Xshd visitor implementation that saves an .xshd file as XML. + + + + + XML namespace for XSHD. + + + + + Creates a new SaveXshdVisitor instance. + + + + + Writes the specified syntax definition. + + + + + Loads .xshd files, version 1.0. + + + + + Loads .xshd files, version 2.0. + Version 2.0 files are recognized by the namespace. + + + + + Sets the element's position to the XmlReader's position. + + + + + A color in an Xshd file. + + + + + Gets/sets the name. + + + + + Gets/sets the font family + + + + + Gets/sets the font size. + + + + + Gets/sets the foreground brush. + + + + + Gets/sets the background brush. + + + + + Gets/sets the font weight. + + + + + Gets/sets the underline flag + + + + + Gets/sets the strikethrough flag + + + + + Gets/sets the font style. + + + + + Gets/Sets the example text that demonstrates where the color is used. + + + + + Creates a new XshdColor instance. + + + + + Deserializes an XshdColor. + + + + + Serializes this XshdColor instance. + + + + + + + + An element in a XSHD rule set. + + + + + Gets the line number in the .xshd file. + + + + + Gets the column number in the .xshd file. + + + + + Applies the visitor to this element. + + + + + <Import> element. + + + + + Gets/sets the referenced rule set. + + + + + + + + A list of keywords. + + + + + The color. + + + + + Gets the list of key words. + + + + + + + + A property in an Xshd file. + + + + + Gets/sets the name. + + + + + Gets/sets the value. + + + + + Creates a new XshdColor instance. + + + + + + + + A reference to an xshd color, or an inline xshd color. + + + + + Gets the reference. + + + + + Gets the reference. + + + + + Gets the inline element. + + + + + Creates a new XshdReference instance. + + + + + Creates a new XshdReference instance. + + + + + Applies the visitor to the inline element, if there is any. + + + + + + + + Equality operator. + + + + + + + + Equality operator. + + + + + Inequality operator. + + + + + <Rule> element. + + + + + Gets/sets the rule regex. + + + + + Gets/sets the rule regex type. + + + + + Gets/sets the color reference. + + + + + + + + A rule set in a XSHD file. + + + + + Gets/Sets the name of the rule set. + + + + + Gets/sets whether the case is ignored in expressions inside this rule set. + + + + + Gets the collection of elements. + + + + + Applies the visitor to all elements. + + + + + + + + Specifies the type of the regex. + + + + + Normal regex. Used when the regex was specified as attribute. + + + + + Ignore pattern whitespace / allow regex comments. Used when the regex was specified as text element. + + + + + <Span> element. + + + + + Gets/sets the begin regex. + + + + + Gets/sets the begin regex type. + + + + + Gets/sets the end regex. + + + + + Gets/sets the end regex type. + + + + + Gets/sets whether the span is multiline. + + + + + Gets/sets the rule set reference. + + + + + Gets/sets the span color. + + + + + Gets/sets the span begin color. + + + + + Gets/sets the span end color. + + + + + + + + A <SyntaxDefinition> element. + + + + + Creates a new XshdSyntaxDefinition object. + + + + + Gets/sets the definition name + + + + + Gets the associated extensions. + + + + + Gets the collection of elements. + + + + + Applies the visitor to all elements. + + + + + Smart indentation for C#. + + + + + Creates a new CSharpIndentationStrategy. + + + + + Creates a new CSharpIndentationStrategy and initializes the settings using the text editor options. + + + + + Gets/Sets the indentation string. + + + + + Performs indentation using the specified document accessor. + + Object used for accessing the document line-by-line + Specifies whether empty lines should be kept + + + + + + + + + + + + + Interface used for the indentation class to access the document. + + + + Gets if the current line is read only (because it is not in the + selected text region) + + + Gets the number of the current line. + + + Gets/Sets the text of the current line. + + + Advances to the next line. + + + + Adapter IDocumentAccessor -> TextDocument + + + + + Creates a new TextDocumentAccessor. + + + + + Creates a new TextDocumentAccessor that indents only a part of the document. + + + + + + + + + + + + + + + + Leave empty lines empty. + + + + An indentation block. Tracks the state of the indentation. + + + + + The indentation outside of the block. + + + + + The indentation inside the block. + + + + + The last word that was seen inside this block. + Because parenthesis open a sub-block and thus don't change their parent's LastWord, + this property can be used to identify the type of block statement (if, while, switch) + at the position of the '{'. + + + + + The type of bracket that opened this block (, [ or { + + + + + Gets whether there's currently a line continuation going on inside this block. + + + + + Gets whether there's currently a 'one-line-block' going on. 'one-line-blocks' occur + with if statements that don't use '{}'. They are not represented by a Block instance on + the stack, but are instead handled similar to line continuations. + This property is an integer because there might be multiple nested one-line-blocks. + As soon as there is a finished statement, OneLineBlock is reset to 0. + + + + + The previous value of one-line-block before it was reset. + Used to restore the indentation of 'else' to the correct level. + + + + + Gets the line number where this block started. + + + + + Handles indentation by copying the indentation from the previous line. + Does not support indenting multiple lines. + + + + + + + + Does nothing: indenting multiple lines is useless without a smart indentation strategy. + + + + + Strategy how the text editor handles indentation when new lines are inserted. + + + + + Sets the indentation for the specified line. + Usually this is constructed from the indentation of the previous line. + + + + + Reindents a set of lines. + + + + + Allows the indentation strategy to listen to Line changes + + + + + Allows the indentation strategy to act based upon the user entering new text. + + + + + Helper for creating a PathGeometry. + + + + + Gets/sets the radius of the rounded corners. + + + + + Gets/Sets whether to align to whole pixels. + + If BorderThickness is set to 0, the geometry is aligned to whole pixels. + If BorderThickness is set to a non-zero value, the outer edge of the border is aligned + to whole pixels. + + The default value is false. + + + + + Gets/sets the border thickness. + + This property only has an effect if AlignToWholePixels is enabled. + When using the resulting geometry to paint a border, set this property to the border thickness. + Otherwise, leave the property set to the default value 0. + + + + + Gets/Sets whether to extend the rectangles to full width at line end. + + + + + Creates a new BackgroundGeometryBuilder instance. + + + + + Adds the specified segment to the geometry. + + + + + Adds a rectangle to the geometry. + + + This overload will align the coordinates according to + . + Use the -overload instead if the coordinates should not be aligned. + + + + + Calculates the list of rectangle where the segment in shown. + This method usually returns one rectangle for each line inside the segment + (but potentially more, e.g. when bidirectional text is involved). + + + + + Calculates the rectangles for the visual column segment. + This returns one rectangle for each line inside the segment. + + + + + Adds a rectangle to the geometry. + + + This overload assumes that the coordinates are aligned properly + (see ). + Use the -overload instead if the coordinates are not yet aligned. + + + + + Closes the current figure. + + + + + Creates the geometry. + Returns null when the geometry is empty! + + + + + Represents a collapsed line section. + Use the Uncollapse() method to uncollapse the section. + + + + + Gets if the document line is collapsed. + This property initially is true and turns to false when uncollapsing the section. + + + + + Gets the start line of the section. + When the section is uncollapsed or the text containing it is deleted, + this property returns null. + + + + + Gets the end line of the section. + When the section is uncollapsed or the text containing it is deleted, + this property returns null. + + + + + Uncollapses the section. + This causes the Start and End properties to be set to null! + Does nothing if the section is already uncollapsed. + + + + + Gets a string representation of the collapsed section. + + + + + Base class for that helps + splitting visual elements so that colors (and other text properties) can be easily assigned + to individual words/characters. + + + + + Gets the list of elements currently being transformed. + + + + + implementation. + Sets and calls . + + + + + Performs the colorization. + + + + + Changes visual element properties. + This method accesses , so it must be called only during + a call. + This method splits s as necessary to ensure that the region + can be colored by setting the of whole elements, + and then calls the on all elements in the region. + + Start visual column of the region to change + End visual column of the region to change + Action that changes an individual . + + + + Called when added to a text view. + + + + + Called when removed from a text view. + + + + + Renders a ruler at a certain column. + + + + + Default implementation for TextRunTypographyProperties. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base class for that helps + colorizing the document. Derived classes can work with document lines + and text offsets and this class takes care of the visual lines and visual columns. + + + + + Gets the current ITextRunConstructionContext. + + + + + + + + Override this method to colorize an individual document line. + + + + + Changes a part of the current document line. + + Start offset of the region to change + End offset of the region to change + Action that changes an individual . + + + + Formatted text (not normal document text). + This is used as base class for various VisualLineElements that are displayed using a + FormattedText, for example newline markers or collapsed folding sections. + + + + + Creates a new FormattedTextElement that displays the specified text + and occupies the specified length in the document. + + + + + Creates a new FormattedTextElement that displays the specified text + and occupies the specified length in the document. + + + + + Creates a new FormattedTextElement that displays the specified text + and occupies the specified length in the document. + + + + + Gets/sets the line break condition before the element. + The default is 'BreakPossible'. + + + + + Gets/sets the line break condition after the element. + The default is 'BreakPossible'. + + + + + + + + Constructs a TextLine from a simple text. + + + + + This is the TextRun implementation used by the class. + + + + + Creates a new FormattedTextRun. + + + + + Gets the element for which the FormattedTextRun was created. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Red-black tree similar to DocumentLineTree, augmented with collapsing and height data. + + + + + Rebuild the tree, in O(n). + + + + + build a tree from a list of nodes + + + + + Collapses the specified text section. + Runtime: O(log n) + + + + + Checks that all elements in list1 are contained in list2. + + + + + Returns 0 if the line is directly collapsed, otherwise, returns . + + + + + A node in the text view's height tree. + + + + + Gets the inorder successor of the node. + + + + + The number of lines in this node and its child nodes. + Invariant: + totalCount = 1 + left.totalCount + right.totalCount + + + + + The total height of this node and its child nodes, excluding directly collapsed nodes. + Invariant: + totalHeight = left.IsDirectlyCollapsed ? 0 : left.totalHeight + + lineNode.IsDirectlyCollapsed ? 0 : lineNode.Height + + right.IsDirectlyCollapsed ? 0 : right.totalHeight + + + + + List of the sections that hold this node collapsed. + Invariant 1: + For each document line in the range described by a CollapsedSection, exactly one ancestor + contains that CollapsedSection. + Invariant 2: + A CollapsedSection is contained either in left+middle or middle+right or just middle. + Invariant 3: + Start and end of a CollapsedSection always contain the collapsedSection in their + documentLine (middle node). + + + + + Background renderers draw in the background of a known layer. + You can use background renderers to draw non-interactive elements on the TextView + without introducing new UIElements. + + + + + Gets the layer on which this background renderer should draw. + + + + + Causes the background renderer to draw. + + + + + A inline UIElement in the document. + + + + + Gets the inline element that is displayed. + + + + + Creates a new InlineObjectElement. + + The length of the element in the document. Must be non-negative. + The element to display. + + + + + + + A text run with an embedded UIElement. + + + + + Creates a new InlineObjectRun instance. + + The length of the TextRun. + The to use. + The to display. + + + + Gets the element displayed by the InlineObjectRun. + + + + + Gets the VisualLine that contains this object. This property is only available after the object + was added to the text view. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains information relevant for text run creation. + + + + + Gets the text document. + + + + + Gets the text view for which the construction runs. + + + + + Gets the visual line that is currently being constructed. + + + + + Gets the global text run properties. + + + + + Gets a piece of text from the document. + + + This method is allowed to return a larger string than requested. + It does this by returning a that describes the requested segment within the returned string. + This method should be the preferred text access method in the text transformation pipeline, as it can avoid repeatedly allocating string instances + for text within the same line. + + + + + Allows s, s and + s to be notified when they are added or removed from a text view. + + + + + Called when added to a text view. + + + + + Called when removed from a text view. + + + + + Allows transforming visual line elements. + + + + + Applies the transformation to the specified list of visual line elements. + + + + + Base class for known layers. + + + + + An enumeration of well-known layers. + + + + + This layer is in the background. + There is no UIElement to represent this layer, it is directly drawn in the TextView. + It is not possible to replace the background layer or insert new layers below it. + + This layer is below the Selection layer. + + + + This layer contains the selection rectangle. + + This layer is between the Background and the Text layers. + + + + This layer contains the text and inline UI elements. + + This layer is between the Selection and the Caret layers. + + + + This layer contains the blinking caret. + + This layer is above the Text layer. + + + + Specifies where a new layer is inserted, in relation to an old layer. + + + + + The new layer is inserted below the specified layer. + + + + + The new layer replaces the specified layer. The old layer is removed + from the collection. + + + + + The new layer is inserted above the specified layer. + + + + + Detects hyperlinks and makes them clickable. + + + This element generator can be easily enabled and configured using the + . + + + + + Gets/Sets whether the user needs to press Control to click the link. + The default value is true. + + + + + Creates a new LinkElementGenerator. + + + + + Creates a new LinkElementGenerator using the specified regex. + + + + + + + + + + + Constructs a VisualLineElement that replaces the matched text. + The default implementation will create a + based on the URI provided by . + + + + + Fetches the URI from the regex match. Returns null if the URI format is invalid. + + + + + Detects e-mail addresses and makes them clickable. + + + This element generator can be easily enabled and configured using the + . + + + + + Creates a new MailLinkElementGenerator. + + + + + Encapsulates and adds MouseHover support to UIElements. + + + + + Creates a new instance and attaches itself to the UIElement. + + + + + Occurs when the mouse starts hovering over a certain location. + + + + + Raises the event. + + + + + Occurs when the mouse stops hovering over a certain location. + + + + + Raises the event. + + + + + Removes the MouseHover support from the target UIElement. + + + + + Element generator that displays · for spaces and » for tabs and a box for control characters. + + + This element generator is present in every TextView by default; the enabled features can be configured using the + . + + + + + Gets/Sets whether to show · for spaces. + + + + + Gets/Sets whether to show » for tabs. + + + + + Gets/Sets whether to show a box with the hex code for control characters. + + + + + Creates a new SingleCharacterElementGenerator instance. + + + + + The control that contains the text. + + This control is used to allow other UIElements to be placed inside the TextView but + behind the text. + The text rendering process (VisualLine creation) is controlled by the TextView, this + class simply displays the created Visual Lines. + + + This class does not contain any input handling and is invisible to hit testing. Input + is handled by the TextView. + This allows UIElements that are displayed behind the text, but still can react to mouse input. + + + + + the index of the text layer in the layers collection + + + + + A virtualizing panel producing+showing s for a . + + This is the heart of the text editor, this class controls the text rendering process. + + Taken as a standalone control, it's a text viewer without any editing capability. + + + + + Creates a new TextView instance. + + + + + Document property. + + + + + Gets/Sets the document displayed by the text editor. + + + + + Occurs when the document property has changed. + + + + + Recreates the text formatter that is used internally + by calling . + + + + + + + + Options property. + + + + + Gets/Sets the options used by the text editor. + + + + + Occurs when a text editor option has changed. + + + + + Raises the event. + + + + + Gets a collection where element generators can be registered. + + + + + Gets a collection where line transformers can be registered. + + + + + Gets the list of layers displayed in the text view. + + + + + Inserts a new layer at a position specified relative to an existing layer. + + The new layer to insert. + The existing layer + Specifies whether the layer is inserted above,below, or replaces the referenced layer + + + + + + + + + + + + + Adds a new inline object. + + + + + Remove the inline objects that were marked for removal. + + + + + NonPrintableCharacterBrush dependency property. + + + + + Gets/sets the Brush used for displaying non-printable characters. + + + + + LinkTextForegroundBrush dependency property. + + + + + Gets/sets the Brush used for displaying link texts. + + + + + LinkTextBackgroundBrush dependency property. + + + + + Gets/sets the Brush used for the background of link texts. + + + + + LinkTextUnderlinedBrush dependency property. + + + + + Gets/sets whether to underline link texts. + + + Note that when setting this property to false, link text remains clickable and the LinkTextForegroundBrush (if any) is still applied. + Set TextEditorOptions.EnableHyperlinks and EnableEmailHyperlinks to false to disable links completely. + + + + + Causes the text editor to regenerate all visual lines. + + + + + Causes the text editor to regenerate all visual lines. + + + + + Causes the text editor to regenerate the specified visual line. + + + + + Causes the text editor to redraw all lines overlapping with the specified segment. + + + + + Causes a known layer to redraw. + This method does not invalidate visual lines; + use the method to do that. + + + + + Causes a known layer to redraw. + This method does not invalidate visual lines; + use the method to do that. + + + + + Causes the text editor to redraw all lines overlapping with the specified segment. + Does nothing if segment is null. + + + + + Invalidates all visual lines. + The caller of ClearVisualLines() must also call InvalidateMeasure() to ensure + that the visual lines will be recreated. + + + + + Gets the visual line that contains the document line with the specified number. + Returns null if the document line is outside the visible range. + + + + + Gets the visual line that contains the document line with the specified number. + If that line is outside the visible range, a new VisualLine for that document line is constructed. + + + + + Gets the currently visible visual lines. + + + Gets thrown if there are invalid visual lines when this property is accessed. + You can use the property to check for this case, + or use the method to force creating the visual lines + when they are invalid. + + + + + Gets whether the visual lines are valid. + Will return false after a call to Redraw(). + Accessing the visual lines property will cause a + if this property is false. + + + + + Occurs when the TextView is about to be measured and will regenerate its visual lines. + This event may be used to mark visual lines as invalid that would otherwise be reused. + + + + + Occurs when the TextView was measured and changed its visual lines. + + + + + If the visual lines are invalid, creates new visual lines for the visible part + of the document. + If all visual lines are valid, this method does nothing. + + The visual line build process is already running. + It is not allowed to call this method during the construction of a visual line. + + + + Additonal amount that allows horizontal scrolling past the end of the longest line. + This is necessary to ensure the caret always is visible, even when it is at the end of the longest line. + + + + + + + + Build all VisualLines in the visible range. + + Width the longest line + + + + Arrange implementation. + + + + + Gets the list of background renderers. + + + + + + + + + + + Size of the document, in pixels. + + + + + Offset of the scroll position. + + + + + Size of the viewport. + + + + + Gets the horizontal scroll offset. + + + + + Gets the vertical scroll offset. + + + + + Gets the scroll offset; + + + + + Occurs when the scroll offset has changed. + + + + + Gets the width of a 'wide space' (the space width used for calculating the tab size). + + + This is the width of an 'x' in the current font. + We do not measure the width of an actual space as that would lead to tiny tabs in + some proportional fonts. + For monospaced fonts, this property will return the expected value, as 'x' and ' ' have the same width. + + + + + Gets the default line height. This is the height of an empty line or a line containing regular text. + Lines that include formatted text or custom UI elements may have a different line height. + + + + + Gets the default baseline position. This is the difference between + and for a line containing regular text. + Lines that include formatted text or custom UI elements may have a different baseline. + + + + + Scrolls the text view so that the specified rectangle gets visible. + + + + + + + + Updates the mouse cursor by calling , but with background priority. + + + + + + + + + + + + + + Gets the visual line at the specified document position (relative to start of document). + Returns null if there is no visual line for the position (e.g. the position is outside the visible + text area). + + + + + Gets the visual top position (relative to start of document) from a document line number. + + + + + Gets the visual position from a text view position. + + The text view position. + The mode how to retrieve the Y position. + The position in WPF device-independent pixels relative + to the top left corner of the document. + + + + Gets the text view position from the specified visual position. + If the position is within a character, it is rounded to the next character boundary. + + The position in WPF device-independent pixels relative + to the top left corner of the document. + The logical position, or null if the position is outside the document. + + + + Gets the text view position from the specified visual position. + If the position is inside a character, the position in front of the character is returned. + + The position in WPF device-independent pixels relative + to the top left corner of the document. + The logical position, or null if the position is outside the document. + + + + Gets a service container used to associate services with the text view. + + + This container does not provide document services - + use TextView.GetService() instead of TextView.Services.GetService() to ensure + that document services can be found as well. + + + + + Retrieves a service from the text view. + If the service is not found in the container, + this method will also look for it in the current document's service provider. + + + + + The PreviewMouseHover event. + + + + + The MouseHover event. + + + + + The PreviewMouseHoverStopped event. + + + + + The MouseHoverStopped event. + + + + + Occurs when the mouse has hovered over a fixed location for some time. + + + + + Occurs when the mouse has hovered over a fixed location for some time. + + + + + Occurs when the mouse had previously hovered but now started moving again. + + + + + Occurs when the mouse had previously hovered but now started moving again. + + + + + Collapses lines for the purpose of scrolling. s marked as collapsed will be hidden + and not used to start the generation of a . + + + This method is meant for s that cause s to span + multiple s. Do not call it without providing a corresponding + . + If you want to create collapsible text sections, see . + + Note that if you want a VisualLineElement to span from line N to line M, then you need to collapse only the lines + N+1 to M. Do not collapse line N itself. + + When you no longer need the section to be collapsed, call on the + returned from this method. + + + + + Gets the height of the document. + + + + + Gets the document line at the specified visual position. + + + + + + + + The pen used to draw the column ruler. + + + + + + Gets/Sets the pen used to draw the column ruler. + + + + + + The property. + + + + + Gets/Sets the background brush used by current line highlighter. + + + + + The property. + + + + + Gets/Sets the background brush used for the current line. + + + + + Gets/Sets highlighted line number. + + + + + Empty line selection width. + + + + + Contains weak event managers for the TextView events. + + + + + Weak event manager for the event. + + + + + + + + + + + Weak event manager for the event. + + + + + + + + + + + Weak event manager for the event. + + + + + + + + + + + Represents a visual line in the document. + A visual line usually corresponds to one DocumentLine, but it can span multiple lines if + all but the first are collapsed. + + + + + Gets the document to which this VisualLine belongs. + + + + + Gets the first document line displayed by this visual line. + + + + + Gets the last document line displayed by this visual line. + + + + + Gets a read-only collection of line elements. + + + + + Gets a read-only collection of text lines. + + + + + Gets the start offset of the VisualLine inside the document. + This is equivalent to FirstDocumentLine.Offset. + + + + + Length in visual line coordinates. + + + + + Length in visual line coordinates including the end of line marker, if TextEditorOptions.ShowEndOfLine is enabled. + + + + + Gets the height of the visual line in device-independent pixels. + + + + + Gets the Y position of the line. This is measured in device-independent pixels relative to the start of the document. + + + + + Replaces the single element at with the specified elements. + The replacement operation must preserve the document length, but may change the visual length. + + + This method may only be called by line transformers. + + + + + Replaces elements starting at with the specified elements. + The replacement operation must preserve the document length, but may change the visual length. + + + This method may only be called by line transformers. + + + + + Gets the visual column from a document offset relative to the first line start. + + + + + Gets the document offset (relative to the first line start) from a visual column. + + + + + Gets the text line containing the specified visual column. + + + + + Gets the text line containing the specified visual column. + + + + + Gets the visual top from the specified text line. + + Distance in device-independent pixels + from the top of the document to the top of the specified text line. + + + + Gets the start visual column from the specified text line. + + + + + Gets a TextLine by the visual position. + + + + + Gets the visual position from the specified visualColumn. + + Position in device-independent pixels + relative to the top left of the document. + + + + Gets the distance to the left border of the text area of the specified visual column. + The visual column must belong to the specified text line. + + + + + Gets the visual column from a document position (relative to top left of the document). + If the user clicks between two visual columns, rounds to the nearest column. + + + + + Gets the visual column from a document position (relative to top left of the document). + If the user clicks between two visual columns, rounds to the nearest column. + + + + + Gets the visual column from a document position (relative to top left of the document). + If the user clicks between two visual columns, rounds to the nearest column. + + + + + Validates the visual column and returns the correct one. + + + + + Validates the visual column and returns the correct one. + + + + + Gets the visual column from a document position (relative to top left of the document). + If the user clicks between two visual columns, returns the first of those columns. + + + + + Gets the visual column from a document position (relative to top left of the document). + If the user clicks between two visual columns, returns the first of those columns. + + + + + Gets the text view position from the specified visual column. + + + + + Gets the text view position from the specified visual position. + If the position is within a character, it is rounded to the next character boundary. + + The position in WPF device-independent pixels relative + to the top left corner of the document. + Controls whether positions in virtual space may be returned. + + + + Gets the text view position from the specified visual position. + If the position is inside a character, the position in front of the character is returned. + + The position in WPF device-independent pixels relative + to the top left corner of the document. + Controls whether positions in virtual space may be returned. + + + + Gets whether the visual line was disposed. + + + + + Gets the next possible caret position after visualColumn, or -1 if there is no caret position. + + + + + EventArgs for the event. + + + + + Gets/Sets the first line that is visible in the TextView. + + + + + Creates a new VisualLineConstructionStartEventArgs instance. + + + + + Represents a visual element in the document. + + + + + Creates a new VisualLineElement. + + The length of the element in VisualLine coordinates. Must be positive. + The length of the element in the document. Must be non-negative. + + + + Gets the length of this element in visual columns. + + + + + Gets the length of this element in the text document. + + + + + Gets the visual column where this element starts. + + + + + Gets the text offset where this element starts, relative to the start text offset of the visual line. + + + + + Gets the text run properties. + A unique instance is used for each + ; colorizing code may assume that modifying the + will affect only this + . + + + + + Gets/sets the brush used for the background of this . + + + + + Creates the TextRun for this line element. + + + The visual column from which the run should be constructed. + Normally the same value as the property is used to construct the full run; + but when word-wrapping is active, partial runs might be created. + + + Context object that contains information relevant for text run creation. + + + + + Retrieves the text span immediately before the visual column. + + This method is used for word-wrapping in bidirectional text. + + + + Gets if this VisualLineElement can be split. + + + + + Splits the element. + + Position inside this element at which it should be broken + The collection of line elements + The index at which this element is in the elements list. + + + + Helper method for splitting this line element into two, correctly updating the + , , + and properties. + + The element before the split position. + The element after the split position. + The split position as visual column. + The split position as text offset. + + + + Gets the visual column of a text location inside this element. + The text offset is given relative to the visual line start. + + + + + Gets the text offset of a visual column inside this element. + + A text offset relative to the visual line start. + + + + Gets the next caret position inside this element. + + The visual column from which the search should be started. + The search direction (forwards or backwards). + Whether to stop only at word borders. + The visual column of the next caret position, or -1 if there is no next caret position. + + In the space between two line elements, it is sufficient that one of them contains a caret position; + though in many cases, both of them contain one. + + + + + Gets whether the specified offset in this element is considered whitespace. + + + + + Gets whether the implementation handles line borders. + If this property returns false, the caller of GetNextCaretPosition should handle the line + borders (i.e. place caret stops at the start and end of the line). + This property has an effect only for VisualLineElements that are at the start or end of a + . + + + + + Queries the cursor over the visual line element. + + + + + Allows the visual line element to handle a mouse event. + + + + + Allows the visual line element to handle a mouse event. + + + + + Abstract base class for generators that produce new visual line elements. + + + + + Gets the text run construction context. + + + + + Initializes the generator for the + + + + + De-initializes the generator. + + + + + Should only be used by VisualLine.ConstructVisualElements. + + + + + Gets the first offset >= startOffset where the generator wants to construct an element. + Return -1 to signal no interest. + + + + + Constructs an element at the specified offset. + May return null if no element should be constructed. + + + Avoid signalling interest and then building no element by returning null - doing so + causes the generated elements to be unnecessarily split + at the position where you signalled interest. + + + + + implementation that allows changing the properties. + A instance usually is assigned to a single + . + + + + + Creates a new VisualLineElementTextRunProperties instance that copies its values + from the specified . + For the and collections, deep copies + are created if those collections are not frozen. + + + + + Creates a copy of this instance. + + + + + + + + Sets the . + + + + + + + + Sets the . + + + + + + + + Sets the . + + + + + + + + Sets the . + + + + + + + + Sets the . + + + + + + + + Sets the . + + + + + + + + Sets the . + + + + + Gets the text decorations. The value may be null, a frozen + or an unfrozen . + If the value is an unfrozen , you may assume that the + collection instance is only used for this instance and it is safe + to add s. + + + + + Sets the . + + + + + Gets the text effects. The value may be null, a frozen + or an unfrozen . + If the value is an unfrozen , you may assume that the + collection instance is only used for this instance and it is safe + to add s. + + + + + Sets the . + + + + + Gets the typography properties for the text run. + + + + + Sets the . + + + + + Gets the number substitution settings for the text run. + + + + + Sets the . + + + + + VisualLineElement that represents a piece of text and is a clickable link. + + + + + Gets/Sets the URL that is navigated to when the link is clicked. + + + + + Gets/Sets the window name where the URL will be opened. + + + + + Gets/Sets whether the user needs to press Control to click the link. + The default value is true. + + + + + Creates a visual line text element with the specified length. + It uses the and its + to find the actual text string. + + + + + + + + Gets whether the link is currently clickable. + + Returns true when control is pressed; or when + is disabled. + + + + + + + + + + + + + A VisualLinesInvalidException indicates that you accessed the property + of the while the visual lines were invalid. + + + + + Creates a new VisualLinesInvalidException instance. + + + + + Creates a new VisualLinesInvalidException instance. + + + + + Creates a new VisualLinesInvalidException instance. + + + + + Creates a new VisualLinesInvalidException instance. + + + + + VisualLineElement that represents a piece of text. + + + + + Gets the parent visual line. + + + + + Creates a visual line text element with the specified length. + It uses the and its + to find the actual text string. + + + + + Override this method to control the type of new VisualLineText instances when + the visual line is split due to syntax highlighting. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WPF TextSource implementation that creates TextRuns for a VisualLine. + + + + + An enum that specifies the possible Y positions that can be returned by VisualLine.GetVisualPosition. + + + + + Returns the top of the TextLine. + + + + + Returns the top of the text. + If the line contains inline UI elements larger than the text, TextTop may be below LineTop. + For a line containing regular text (all in the editor's main font), this will be equal to LineTop. + + + + + Returns the bottom of the TextLine. + + + + + The middle between LineTop and LineBottom. + + + + + Returns the bottom of the text. + If the line contains inline UI elements larger than the text, TextBottom might be above LineBottom. + For a line containing regular text (all in the editor's main font), this will be equal to LineBottom. + + + + + The middle between TextTop and TextBottom. + + + + + Returns the baseline of the text. + + + + + A button that opens a drop-down menu when clicked. + + + + + Identifies the  dependency property. + + + + + The key that identifies the  dependency property. + + + + + Identifies the  dependency property. + + + + + Gets/Sets the popup that is used as drop-down content. + + + + + Gets whether the drop-down is opened. + + + + + + + + Basic interface for search algorithms. + + + + + Finds all matches in the given ITextSource and the given range. + + + This method must be implemented thread-safe. + All segments in the result must be within the given range, and they must be returned in order + (e.g. if two results are returned, EndOffset of first result must be less than or equal StartOffset of second result). + + + + + Finds the next match in the given ITextSource and the given range. + + This method must be implemented thread-safe. + + + + Represents a search result. + + + + + Replaces parts of the replacement string with parts from the match. (e.g. $1) + + + + + Defines supported search modes. + + + + + Standard search + + + + + RegEx search + + + + + Wildcard search + + + + + + + + + + + + + + + + + + + + Holds default texts for buttons and labels in the SearchPanel. Override properties to add other languages. + + + + + Default: 'Match case' + + + + + Default: 'Match whole words' + + + + + Default: 'Use regular expressions' + + + + + Default: 'Find next (F3)' + + + + + Default: 'Find previous (Shift+F3)' + + + + + Default: 'Error: ' + + + + + Default: 'No matches found!' + + + + + Search commands for AvalonEdit. + + + + + Finds the next occurrence in the file. + + + + + Finds the previous occurrence in the file. + + + + + Closes the SearchPanel. + + + + + TextAreaInputHandler that registers all search-related commands. + + + + + Fired when SearchOptions are modified inside the SearchPanel. + + + + + Provides search functionality for AvalonEdit. It is displayed in the top-right corner of the TextArea. + + + + + Dependency property for . + + + + + Gets/sets whether the search pattern should be interpreted as regular expression. + + + + + Dependency property for . + + + + + Gets/sets whether the search pattern should be interpreted case-sensitive. + + + + + Dependency property for . + + + + + Gets/sets whether the search pattern should only match whole words. + + + + + Dependency property for . + + + + + Gets/sets the search pattern. + + + + + Dependency property for . + + + + + Gets/sets the Brush used for marking search results in the TextView. + + + + + Dependency property for . + + + + + Gets/sets the localization for the SearchPanel. + + + + + Creates a new SearchPanel. + + + + + Creates a SearchPanel and installs it to the TextEditor's TextArea. + + This is a convenience wrapper. + + + + Creates a SearchPanel and installs it to the TextArea. + + + + + Adds the commands used by SearchPanel to the given CommandBindingCollection. + + + + + Removes the SearchPanel from the TextArea. + + + + + + + + Reactivates the SearchPanel by setting the focus on the search box and selecting all text. + + + + + Moves to the next occurrence in the file. + + + + + Moves to the previous occurrence in the file. + + + + + Gets whether the Panel is already closed. + + + + + Closes the SearchPanel. + + + + + Opens the an existing search panel. + + + + + Fired when SearchOptions are changed inside the SearchPanel. + + + + + Raises the event. + + + + + EventArgs for event. + + + + + Gets the search pattern. + + + + + Gets whether the search pattern should be interpreted case-sensitive. + + + + + Gets whether the search pattern should be interpreted as regular expression. + + + + + Gets whether the search pattern should only match whole words. + + + + + Creates a new SearchOptionsChangedEventArgs instance. + + + + + Provides factory methods for ISearchStrategies. + + + + + Creates a default ISearchStrategy with the given parameters. + + + + + Represents an active element that allows the snippet to stay interactive after insertion. + + + + + Called when the all snippet elements have been inserted. + + + + + Called when the interactive mode is deactivated. + + + + + Gets whether this element is editable (the user will be able to select it with Tab). + + + + + Gets the segment associated with this element. May be null. + + + + + Represents the context of a snippet insertion. + + + + + Creates a new InsertionContext instance. + + + + + Gets the text area. + + + + + Gets the text document. + + + + + Gets the text that was selected before the insertion of the snippet. + + + + + Gets the indentation at the insertion position. + + + + + Gets the indentation string for a single indentation level. + + + + + Gets the line terminator at the insertion position. + + + + + Gets/Sets the insertion position. + + + + + Gets the start position of the snippet insertion. + + + + + Inserts text at the insertion position and advances the insertion position. + This method will add the current indentation to every line in and will + replace newlines with the expected newline for the document. + + + + + Registers an active element. Elements should be registered during insertion and will be called back + when insertion has completed. + + The snippet element that created the active element. + The active element. + + + + Returns the active element belonging to the specified snippet element, or null if no such active element is found. + + + + + Gets the list of active elements. + + + + + Calls the method on all registered active elements + and raises the event. + + The EventArgs to use + + + + Occurs when the all snippet elements have been inserted. + + + + + Calls the method on all registered active elements. + + The EventArgs to use + + + + Occurs when the interactive mode is deactivated. + + + + + + + + Adds existing segments as snippet elements. + + + + + A code snippet that can be inserted into the text editor. + + + + + Inserts the snippet into the text area. + + + + + Creates a named anchor that can be accessed by other SnippetElements. + + + + + Gets or sets the name of the anchor. + + + + + Creates a SnippetAnchorElement with the supplied name. + + + + + + + + AnchorElement created by SnippetAnchorElement. + + + + + + + + + + + Creates a new AnchorElement. + + + + + Gets or sets the text at the anchor. + + + + + Gets or sets the name of the anchor. + + + + + + + + + + + An element that binds to a and displays the same text. + + + + + Gets/Sets the target element. + + + + + Converts the text before copying it. + + + + + + + + + + + Sets the caret position after interactive mode has finished. + + + + + Creates a new SnippetCaretElement. + + + + + Creates a new SnippetCaretElement. + + + If set to true, the caret is set only when some text was selected. + This is useful when both SnippetCaretElement and SnippetSelectionElement are used in the same snippet. + + + + + + + + A snippet element that has sub-elements. + + + + + Gets the list of child elements. + + + + + + + + + + + An element inside a snippet. + + + + + Performs insertion of the snippet. + + + + + Converts the snippet to text, with replaceable fields in italic. + + + + + Provides information about the event that occured during use of snippets. + + + + + Gets the reason for deactivation. + + + + + Creates a new SnippetEventArgs object, with a DeactivateReason. + + + + + Describes the reason for deactivation of a . + + + + + Unknown reason. + + + + + Snippet was deleted. + + + + + There are no active elements in the snippet. + + + + + The SnippetInputHandler was detached. + + + + + Return was pressed by the user. + + + + + Escape was pressed by the user. + + + + + Text element that is supposed to be replaced by the user. + Will register an . + + + + + + + + + + + Interface for active element registered by . + + + + + Gets the current text inside the element. + + + + + Occurs when the text inside the element changes. + + + + + Inserts the previously selected text at the selection marker. + + + + + Gets/Sets the new indentation of the selected text. + + + + + + + + Represents a text element in a snippet. + + + + + The text to be inserted. + + + + + + + + + + + The text editor control. + Contains a scrollable TextArea. + + + + + Creates a new TextEditor instance. + + + + + Creates a new TextEditor instance. + + + + + + + Forward focus to TextArea. + + + + + Document property. + + + + + Gets/Sets the document displayed by the text editor. + This is a dependency property. + + + + + Occurs when the document property has changed. + + + + + Raises the event. + + + + + Options property. + + + + + Gets/Sets the options currently used by the text editor. + + + + + Occurs when a text editor option has changed. + + + + + Raises the event. + + + + + + + + Gets/Sets the text of the current document. + + + + + Occurs when the Text property changes. + + + + + Raises the event. + + + + + Is called after the template was applied. + + + + + Gets the text area. + + + + + Gets the scroll viewer used by the text editor. + This property can return null if the template has not been applied / does not contain a scroll viewer. + + + + + The property. + + + + + Gets/sets the syntax highlighting definition used to colorize the text. + + + + + Creates the highlighting colorizer for the specified highlighting definition. + Allows derived classes to provide custom colorizer implementations for special highlighting definitions. + + + + + + Word wrap dependency property. + + + + + Specifies whether the text editor uses word wrapping. + + + Setting WordWrap=true has the same effect as setting HorizontalScrollBarVisibility=Disabled and will override the + HorizontalScrollBarVisibility setting. + + + + + IsReadOnly dependency property. + + + + + Specifies whether the user can change the text editor content. + Setting this property will replace the + TextArea.ReadOnlySectionProvider. + + + + + Dependency property for + + + + + Gets/Sets the 'modified' flag. + + + + + ShowLineNumbers dependency property. + + + + + Specifies whether line numbers are shown on the left to the text view. + + + + + LineNumbersForeground dependency property. + + + + + Gets/sets the Brush used for displaying the foreground color of line numbers. + + + + + Appends text to the end of the document. + + + + + Begins a group of document changes. + + + + + Copies the current selection to the clipboard. + + + + + Removes the current selection and copies it to the clipboard. + + + + + Begins a group of document changes and returns an object that ends the group of document + changes when it is disposed. + + + + + Removes the current selection without copying it to the clipboard. + + + + + Ends the current group of document changes. + + + + + Scrolls one line down. + + + + + Scrolls to the left. + + + + + Scrolls to the right. + + + + + Scrolls one line up. + + + + + Scrolls one page down. + + + + + Scrolls one page up. + + + + + Scrolls one page left. + + + + + Scrolls one page right. + + + + + Pastes the clipboard content. + + + + + Redoes the most recent undone command. + + True is the redo operation was successful, false is the redo stack is empty. + + + + Scrolls to the end of the document. + + + + + Scrolls to the start of the document. + + + + + Scrolls to the specified position in the document. + + + + + Scrolls to the specified position in the document. + + + + + Selects the entire text. + + + + + Undoes the most recent command. + + True is the undo operation was successful, false is the undo stack is empty. + + + + Gets if the most recent undone command can be redone. + + + + + Gets if the most recent command can be undone. + + + + + Gets the vertical size of the document. + + + + + Gets the horizontal size of the current document region. + + + + + Gets the horizontal size of the viewport. + + + + + Gets the horizontal size of the viewport. + + + + + Gets the vertical scroll position. + + + + + Gets the horizontal scroll position. + + + + + Gets/Sets the selected text. + + + + + Gets/sets the caret position. + + + + + Gets/sets the start position of the selection. + + + + + Gets/sets the length of the selection. + + + + + Selects the specified text section. + + + + + Gets the number of lines in the document. + + + + + Clears the text. + + + + + Loads the text from the stream, auto-detecting the encoding. + + + This method sets to false. + + + + + Loads the text from the stream, auto-detecting the encoding. + + + + + Encoding dependency property. + + + + + Gets/sets the encoding used when the file is saved. + + + The method autodetects the encoding of the file and sets this property accordingly. + The method uses the encoding specified in this property. + + + + + Saves the text to the stream. + + + This method sets to false. + + + + + Saves the text to the file. + + + + + The PreviewMouseHover event. + + + + + The MouseHover event. + + + + + The PreviewMouseHoverStopped event. + + + + + The MouseHoverStopped event. + + + + + Occurs when the mouse has hovered over a fixed location for some time. + + + + + Occurs when the mouse has hovered over a fixed location for some time. + + + + + Occurs when the mouse had previously hovered but now started moving again. + + + + + Occurs when the mouse had previously hovered but now started moving again. + + + + + Dependency property for + + + + + Gets/Sets the horizontal scroll bar visibility. + + + + + Dependency property for + + + + + Gets/Sets the vertical scroll bar visibility. + + + + + Gets the text view position from a point inside the editor. + + The position, relative to top left + corner of TextEditor control + The text view position, or null if the point is outside the document. + + + + Scrolls to the specified line. + This method requires that the TextEditor was already assigned a size (WPF layout must have run prior). + + + + + Scrolls to the specified line/column. + This method requires that the TextEditor was already assigned a size (WPF layout must have run prior). + + + + + Exposes to automation. + + + + + Creates a new TextEditorAutomationPeer instance. + + + + + + + + + + + Represents a text editor control (, + or ). + + + + + Gets the document being edited. + + + + + Occurs when the Document property changes (when the text editor is connected to another + document - not when the document content changes). + + + + + Gets the options of the text editor. + + + + + Occurs when the Options property changes, or when an option inside the current option list + changes. + + + + + A container for the text editor options. + + + + + Initializes an empty instance of TextEditorOptions. + + + + + Initializes a new instance of TextEditorOptions by copying all values + from to the new instance. + + + + + + + + Raises the PropertyChanged event. + + The name of the changed property. + + + + Raises the PropertyChanged event. + + + + + Gets/Sets whether to show · for spaces. + + The default value is false. + + + + Gets/Sets whether to show » for tabs. + + The default value is false. + + + + Gets/Sets whether to show ¶ at the end of lines. + + The default value is false. + + + + Gets/Sets whether to show a box with the hex code for control characters. + + The default value is true. + + + + Gets/Sets whether to enable clickable hyperlinks in the editor. + + The default value is true. + + + + Gets/Sets whether to enable clickable hyperlinks for e-mail addresses in the editor. + + The default value is true. + + + + Gets/Sets whether the user needs to press Control to click hyperlinks. + The default value is true. + + The default value is true. + + + + Gets/Sets the width of one indentation unit. + + The default value is 4. + + + + Gets/Sets whether to use spaces for indentation instead of tabs. + + The default value is false. + + + + Gets the text used for indentation. + + + + + Gets text required to indent from the specified to the next indentation level. + + + + + Gets/Sets whether copying without a selection copies the whole current line. + + + + + Gets/Sets whether the user can scroll below the bottom of the document. + The default value is false; but it a good idea to set this property to true when using folding. + + + + + Gets/Sets the indentation used for all lines except the first when word-wrapping. + The default value is 0. + + + + + Gets/Sets whether the indentation is inherited from the first line when word-wrapping. + The default value is true. + + When combined with , the inherited indentation is added to the word wrap indentation. + + + + Enables rectangular selection (press ALT and select a rectangle) + + + + + Enable dragging text within the text area. + + + + + Gets/Sets whether the user can set the caret behind the line ending + (into "virtual space"). + Note that virtual space is always used (independent from this setting) + when doing rectangle selections. + + + + + Gets/Sets whether the support for Input Method Editors (IME) + for non-alphanumeric scripts (Chinese, Japanese, Korean, ...) is enabled. + + + + + Gets/Sets whether the column ruler should be shown. + + + + + Gets/Sets where the column ruler should be shown. + + + + + Gets/Sets if current line should be shown. + + + + + Gets/Sets if mouse cursor should be hidden while user is typing. + + + + + Gets/Sets if the user is allowed to enable/disable overstrike mode. + + + + + Contains weak event managers for . + + + + + Weak event manager for the event. + + + + + + + + + + + Weak event manager for the event. + + + + + + + + + + + Represents a text location with a visual column. + + + + + Gets/Sets Location. + + + + + Gets/Sets the line number. + + + + + Gets/Sets the (text) column number. + + + + + Gets/Sets the visual column number. + Can be -1 (meaning unknown visual column). + + + + + When word-wrap is enabled and a line is wrapped at a position where there is no space character; + then both the end of the first TextLine and the beginning of the second TextLine + refer to the same position in the document, and also have the same visual column. + In this case, the IsAtEndOfLine property is used to distinguish between the two cases: + the value true indicates that the position refers to the end of the previous TextLine; + the value false indicates that the position refers to the beginning of the next TextLine. + + If this position is not at such a wrapping position, the value of this property has no effect. + + + + + Creates a new TextViewPosition instance. + + + + + Creates a new TextViewPosition instance. + + + + + Creates a new TextViewPosition instance. + + + + + Creates a new TextViewPosition instance. + + + + + + + + + + + + + + Equality test. + + + + + Equality test. + + + + + Inequality test. + + + + + + + + Reuse the same instances for boxed booleans. + + + + + Invokes an action when it is disposed. + + + This class ensures the callback is invoked at most once, + even when Dispose is called on multiple threads. + + + + + This class is used to prevent stack overflows by representing a 'busy' flag + that prevents reentrance when another call is running. + However, using a simple 'bool busy' is not thread-safe, so we use a + thread-static BusyManager. + + + + + Poor man's template specialization: extension methods for Rope<char>. + + + + + Creates a new rope from the specified text. + + + + + Retrieves the text for a portion of the rope. + Runs in O(lg N + M), where M=. + + offset or length is outside the valid range. + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Retrieves the text for a portion of the rope and writes it to the specified text writer. + Runs in O(lg N + M), where M=. + + offset or length is outside the valid range. + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Appends text to this rope. + Runs in O(lg N + M). + + newElements is null. + + + + Inserts text into this rope. + Runs in O(lg N + M). + + newElements is null. + index or length is outside the valid range. + + + + Gets the index of the first occurrence of any element in the specified array. + + The target rope. + Array of characters being searched. + Start index of the search. + Length of the area to search. + The first index where any character was found; or -1 if no occurrence was found. + + + + Gets the index of the first occurrence of the search text. + + + + + Gets the index of the last occurrence of the search text. + + + + + A IList{T} implementation that has efficient insertion and removal (in O(lg n) time) + and that saves memory by allocating only one node when a value is repeated in adjacent indices. + Based on this "compression", it also supports efficient InsertRange/SetRange/RemoveRange operations. + + + Current memory usage: 5*IntPtr.Size + 12 + sizeof(T) per node. + Use this class only if lots of adjacent values are identical (can share one node). + + + + + Gets the inorder predecessor of the node. + + + + + Gets the inorder successor of the node. + + + + + Creates a new CompressingTreeList instance. + + The equality comparer used for comparing consequtive values. + A single node may be used to store the multiple values that are considered equal. + + + + Creates a new CompressingTreeList instance. + + A function that checks two values for equality. If this + function returns true, a single node may be used to store the two values. + + + + Inserts times at position + . + + + + + Removes items starting at position + . + + + + + Sets indices starting at to + + + + + + Gets or sets an item by index. + + + + + Gets the number of items in the list. + + + + + Gets the index of the specified . + + + + + Gets the the first index so that all values from the result index to + are equal. + + + + + Gets the first index after so that the value at the result index is not + equal to the value at . + That is, this method returns the exclusive end index of the run of equal values. + + + + + Applies the conversion function to all elements in this CompressingTreeList. + + + + + Applies the conversion function to the elements in the specified range. + + + + + Inserts the specified at + + + + + Removes one item at + + + + + Adds the specified to the end of the list. + + + + + Removes all items from this list. + + + + + Gets whether this list contains the specified item. + + + + + Copies all items in this list to the specified array. + + + + + Removes the specified item from this list. + + + + + Gets an enumerator for this list. + + + + + Multiply with this constant to convert from points to device-independent pixels. + + + + + Maintains a list of delayed events to raise. + + + + + Double-ended queue. + + + + + + + + + + + Gets/Sets an element inside the deque. + + + + + Adds an element to the end of the deque. + + + + + Pops an element from the end of the deque. + + + + + Adds an element to the front of the deque. + + + + + Pops an element from the end of the deque. + + + + + + + + + + + + + + Helps printing documents. + + + + + Converts an IDocument to a Block and applies the provided highlighter. + + + + + Converts an IDocument to a RichText and applies the provided highlighter. + + + + + Creates a flow document from the editor's contents. + + + + + Provides immutable empty list instances. + + + + + Epsilon used for IsClose() implementations. + We can use up quite a few digits in front of the decimal point (due to visual positions being relative to document origin), + and there's no need to be too accurate (we're dealing with pixels here), + so we will use the value 0.01. + Previosly we used 1e-8 but that was causing issues: + http://community.sharpdevelop.net/forums/t/16048.aspx + + + + + Returns true if the doubles are close (difference smaller than 0.01). + + + + + Returns true if the doubles are close (difference smaller than 0.01). + + + + + Returns true if the doubles are close (difference smaller than 0.01). + + + + + Forces the value to stay between mininum and maximum. + + minimum, if value is less than minimum. + Maximum, if value is greater than maximum. + Otherwise, value. + + + + Forces the value to stay between mininum and maximum. + + minimum, if value is less than minimum. + Maximum, if value is greater than maximum. + Otherwise, value. + + + + Creates typeface from the framework element. + + + + + Creates an IEnumerable with a single value. + + + + + Gets the value of the attribute, or null if the attribute does not exist. + + + + + Gets the value of the attribute as boolean, or null if the attribute does not exist. + + + + + Gets the value of the attribute as boolean, or null if the attribute does not exist. + + + + + Class that can open text files with auto-detection of the encoding. + + + + + Gets if the given encoding is a Unicode encoding (UTF). + + + Returns true for UTF-7, UTF-8, UTF-16 LE, UTF-16 BE, UTF-32 LE and UTF-32 BE. + Returns false for all other encodings. + + + + + Reads the content of the given stream. + + The stream to read. + The stream must support seeking and must be positioned at its beginning. + The encoding to use if the encoding cannot be auto-detected. + The file content as string. + + + + Reads the content of the file. + + The file name. + The encoding to use if the encoding cannot be auto-detected. + The file content as string. + + + + Opens the specified file for reading. + + The file to open. + The encoding to use if the encoding cannot be auto-detected. + Returns a StreamReader that reads from the stream. Use + to get the encoding that was used. + + + + Opens the specified stream for reading. + + The stream to open. + The encoding to use if the encoding cannot be auto-detected. + Returns a StreamReader that reads from the stream. Use + to get the encoding that was used. + + + + Gets if this instance is frozen. Frozen instances are immutable and thus thread-safe. + + + + + Freezes this instance. + + + + + If the item is not frozen, this method creates and returns a frozen clone. + If the item is already frozen, it is returned without creating a clone. + + + + + Gets if this instance is frozen. Frozen instances are immutable and thus thread-safe. + + + + + Freezes this instance. + + + + + An immutable stack. + + Using 'foreach' on the stack will return the items from top to bottom (in the order they would be popped). + + + + + Gets the empty stack instance. + + + + + Pushes an item on the stack. This does not modify the stack itself, but returns a new + one with the value pushed. + + + + + Gets the item on the top of the stack. + + The stack is empty. + + + + Gets the item on the top of the stack. + Returns default(T) if the stack is empty. + + + + + Gets the stack with the top item removed. + + The stack is empty. + + + + Gets if this stack is empty. + + + + + Gets an enumerator that iterates through the stack top-to-bottom. + + + + + + + + A collection that cannot contain null values. + + + + + + + + + + + A collection where adding and removing items causes a callback. + It is valid for the onAdd callback to throw an exception - this will prevent the new item from + being added to the collection. + + + + + Creates a new ObserveAddRemoveCollection using the specified callbacks. + + + + + + + + + + + + + + + + + Contains static helper methods for aligning stuff on a whole number of pixels. + + + + + Gets the pixel size on the screen containing visual. + This method does not take transforms on visual into account. + + + + + Aligns on the next middle of a pixel. + + The value that should be aligned + The size of one pixel + + + + Aligns the borders of rect on the middles of pixels. + + + + + Rounds to whole number of pixels. + + + + + Rounds val to whole number of pixels. + + + + + Rounds to a whole number of pixels. + + + + + Rounds to an whole odd number of pixels. + + + + + RichTextWriter implementation that writes plain text only + and ignores all formatted spans. + + + + + The text writer that was passed to the PlainRichTextWriter constructor. + + + + + Creates a new PlainRichTextWriter instance that writes the text to the specified text writer. + + + + + Gets/Sets the string used to indent by one level. + + + + + + + + + + + Writes the indentation, if necessary. + + + + + Is called after a write operation. + + + + + + + + + + + + + + + + + + + + + + + WeakEventManager for INotifyPropertyChanged.PropertyChanged. + + + + + + + + + + + A text writer that supports creating spans of highlighted text. + + + + + Gets called by the RichTextWriter base class when a BeginSpan() method + that is not overwritten gets called. + + + + + Writes the RichText instance. + + + + + Writes the RichText instance. + + + + + Begin a colored span. + + + + + Begin a span with modified font weight. + + + + + Begin a span with modified font style. + + + + + Begin a span with modified font family. + + + + + Begin a highlighted span. + + + + + Begin a span that links to the specified URI. + + + + + Marks the end of the current span. + + + + + Increases the indentation level. + + + + + Decreases the indentation level. + + + + + A kind of List<T>, but more efficient for random insertions/removal. + Also has cheap Clone() and SubRope() implementations. + + + This class is not thread-safe: multiple concurrent write operations or writes concurrent to reads have undefined behaviour. + Concurrent reads, however, are safe. + However, clones of a rope are safe to use on other threads even though they share data with the original rope. + + + + + Creates a new rope representing the empty string. + + + + + Creates a rope from the specified input. + This operation runs in O(N). + + input is null. + + + + Creates a rope from a part of the array. + This operation runs in O(N). + + input is null. + + + + Creates a new rope that lazily initalizes its content. + + The length of the rope that will be lazily loaded. + + The callback that provides the content for this rope. + will be called exactly once when the content of this rope is first requested. + It must return a rope with the specified length. + Because the initializer function is not called when a rope is cloned, and such clones may be used on another threads, + it is possible for the initializer callback to occur on any thread. + + + Any modifications inside the rope will also cause the content to be initialized. + However, insertions at the beginning and the end, as well as inserting this rope into another or + using the method, allows constructions of larger ropes where parts are + lazily loaded. + However, even methods like Concat may sometimes cause the initializer function to be called, e.g. when + two short ropes are concatenated. + + + + + Clones the rope. + This operation runs in linear time to the number of rope nodes touched since the last clone was created. + If you count the per-node cost to the operation modifying the rope (doing this doesn't increase the complexity of the modification operations); + the remainder of Clone() runs in O(1). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Resets the rope to an empty list. + Runs in O(1). + + + + + Gets the length of the rope. + Runs in O(1). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Gets the length of the rope. + Runs in O(1). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Inserts another rope into this rope. + Runs in O(lg N + lg M), plus a per-node cost as if newElements.Clone() was called. + + newElements is null. + index or length is outside the valid range. + + + + Inserts new elemetns into this rope. + Runs in O(lg N + M), where N is the length of this rope and M is the number of new elements. + + newElements is null. + index or length is outside the valid range. + + + + Inserts new elements into this rope. + Runs in O(lg N + M), where N is the length of this rope and M is the number of new elements. + + newElements is null. + index or length is outside the valid range. + + + + Appends multiple elements to the end of this rope. + Runs in O(lg N + M), where N is the length of this rope and M is the number of new elements. + + newElements is null. + + + + Appends another rope to the end of this rope. + Runs in O(lg N + lg M), plus a per-node cost as if newElements.Clone() was called. + + newElements is null. + + + + Appends new elements to the end of this rope. + Runs in O(lg N + M), where N is the length of this rope and M is the number of new elements. + + array is null. + + + + Removes a range of elements from the rope. + Runs in O(lg N). + + offset or length is outside the valid range. + + + + Copies a range of the specified array into the rope, overwriting existing elements. + Runs in O(lg N + M). + + + + + Creates a new rope and initializes it with a part of this rope. + Runs in O(lg N) plus a per-node cost as if this.Clone() was called. + + offset or length is outside the valid range. + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Concatenates two ropes. The input ropes are not modified. + Runs in O(lg N + lg M). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Concatenates multiple ropes. The input ropes are not modified. + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Gets/Sets a single character. + Runs in O(lg N) for random access. Sequential read-only access benefits from a special optimization and runs in amortized O(1). + + Offset is outside the valid range (0 to Length-1). + + The getter counts as a read access and may be called concurrently to other read accesses. + + + + + Creates a string from the rope. Runs in O(N). + + A string consisting of all elements in the rope as comma-separated list in {}. + As a special case, Rope<char> will return its contents as string without any additional separators or braces, + so it can be used like StringBuilder.ToString(). + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Finds the first occurance of item. + Runs in O(N). + + The index of the first occurance of item, or -1 if it cannot be found. + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Gets the index of the first occurrence the specified item. + + Item to search for. + Start index of the search. + Length of the area to search. + The first index where the item was found; or -1 if no occurrence was found. + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Gets the index of the last occurrence of the specified item in this rope. + + + + + Gets the index of the last occurrence of the specified item in this rope. + + The search item + Start index of the area to search. + Length of the area to search. + The last index where the item was found; or -1 if no occurrence was found. + The search proceeds backwards from (startIndex+count) to startIndex. + This is different than the meaning of the parameters on Array.LastIndexOf! + + + + Inserts the item at the specified index in the rope. + Runs in O(lg N). + + + + + Removes a single item from the rope. + Runs in O(lg N). + + + + + Appends the item at the end of the rope. + Runs in O(lg N). + + + + + Searches the item in the rope. + Runs in O(N). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Copies the whole content of the rope into the specified array. + Runs in O(N). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Copies the a part of the rope into the specified array. + Runs in O(lg N + M). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Removes the first occurance of an item from the rope. + Runs in O(N). + + + + + Retrieves an enumerator to iterate through the rope. + The enumerator will reflect the state of the rope from the GetEnumerator() call, further modifications + to the rope will not be visible to the enumerator. + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Creates an array and copies the contents of the rope into it. + Runs in O(N). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Creates an array and copies the contents of the rope into it. + Runs in O(N). + + + This method counts as a read access and may be called concurrently to other read accesses. + + + + + Balances this node and recomputes the 'height' field. + This method assumes that the children of this node are already balanced and have an up-to-date 'height' value. + + + + + Copies from the array to this node. + + + + + Copies from this node to the array. + + + + + Splits this leaf node at offset and returns a new node with the part of the text after offset. + + + + + Gets the root node of the subtree from a lazily evaluated function node. + Such nodes are always marked as shared. + GetContentNode() will return either a Concat or Leaf node, never another FunctionNode. + + + + + TextReader implementation that reads text from a rope. + + + + + Creates a new RopeTextReader. + Internally, this method creates a Clone of the rope; so the text reader will always read through the old + version of the rope if it is modified. + + + + + + + + + + + + + + Represents a string with a segment. + Similar to System.ArraySegment<T>, but for strings instead of arrays. + + + + + Creates a new StringSegment. + + + + + Creates a new StringSegment. + + + + + Gets the string used for this segment. + + + + + Gets the start offset of the segment with the text. + + + + + Gets the length of the segment. + + + + + + + + + + + + + + Equality operator. + + + + + Inequality operator. + + + + + Creates TextFormatter instances that with the correct TextFormattingMode, if running on .NET 4.0. + + + + + Creates a using the formatting mode used by the specified owner object. + + + + + Returns whether the specified dependency property affects the text formatter creation. + Controls should re-create their text formatter for such property changes. + + + + + Creates formatted text. + + The owner element. The text formatter setting are read from this element. + The text. + The typeface to use. If this parameter is null, the typeface of the will be used. + The font size. If this parameter is null, the font size of the will be used. + The foreground color. If this parameter is null, the foreground of the will be used. + A FormattedText object using the specified settings. + + + + Contains exception-throwing helper methods. + + + + + Throws an ArgumentNullException if is null; otherwise + returns val. + + + Use this method to throw an ArgumentNullException when using parameters for base + constructor calls. + + public VisualLineText(string text) : base(ThrowUtil.CheckNotNull(text, "text").Length) + + + + + + WeakEventManager with AddListener/RemoveListener and CurrentManager implementation. + Helps implementing the WeakEventManager pattern with less code. + + + + + Creates a new WeakEventManagerBase instance. + + + + + Adds a weak event listener. + + + + + Removes a weak event listener. + + + + + + + + + + + Attaches the event handler. + + + + + Detaches the event handler. + + + + + Gets the current manager. + + + + + Wrapper around Win32 functions. + + + + + Gets the caret blink time. + + + + + Creates an invisible Win32 caret for the specified Visual with the specified size (coordinates local to the owner visual). + + + + + Sets the position of the caret previously created using . position is relative to the owner visual. + + + + + Destroys the caret previously created using . + + + + + GeneratedInternalTypeHelper + + + + + CreateInstance + + + + + GetPropertyValue + + + + + SetPropertyValue + + + + + CreateDelegate + + + + + AddEventHandler + + + + diff --git a/ICSharpCode.AvalonEdit/Indentation/CSharp/CSharpIndentationStrategy.cs b/ICSharpCode.AvalonEdit/Indentation/CSharp/CSharpIndentationStrategy.cs index 41288b86..67b9ce07 100644 --- a/ICSharpCode.AvalonEdit/Indentation/CSharp/CSharpIndentationStrategy.cs +++ b/ICSharpCode.AvalonEdit/Indentation/CSharp/CSharpIndentationStrategy.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.AvalonEdit.Indentation.CSharp /// /// Smart indentation for C#. /// - public class CSharpIndentationStrategy : DefaultIndentationStrategy + public class CSharpIndentationStrategy : DefaultIndentationStrategy, ILineChangedListener { /// /// Creates a new CSharpIndentationStrategy. @@ -92,5 +92,14 @@ public override void IndentLines(TextDocument document, int beginLine, int endLi { Indent(new TextDocumentAccessor(document, beginLine, endLine), true); } + + /// + public void OnLineChanged(TextDocument document, DocumentLine line, string newText) + { + // Reformat line when blocks are created + if (newText == "{" || newText == "}") { + IndentLine(document, line); + } + } } } diff --git a/ICSharpCode.AvalonEdit/Indentation/ILineChangedListener.cs b/ICSharpCode.AvalonEdit/Indentation/ILineChangedListener.cs new file mode 100644 index 00000000..8e894318 --- /dev/null +++ b/ICSharpCode.AvalonEdit/Indentation/ILineChangedListener.cs @@ -0,0 +1,33 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using ICSharpCode.AvalonEdit.Document; + +namespace ICSharpCode.AvalonEdit.Indentation +{ + /// + /// Allows the indentation strategy to listen to Line changes + /// + public interface ILineChangedListener + { + /// + /// Allows the indentation strategy to act based upon the user entering new text. + /// + void OnLineChanged(TextDocument document, DocumentLine line, string newText); + } +}