/// <remarks> /// Executes this edit action /// </remarks> /// <param name="textArea">The <see cref="ItextArea"/> which is used for callback purposes</param> public override void Execute(TextArea textArea) { if (textArea.Document.ReadOnly) { return; } string commentStart = null; if (textArea.Document.HighlightingStrategy.Properties.ContainsKey("BlockCommentBegin")) { commentStart = textArea.Document.HighlightingStrategy.Properties["BlockCommentBegin"].ToString(); } string commentEnd = null; if (textArea.Document.HighlightingStrategy.Properties.ContainsKey("BlockCommentEnd")) { commentEnd = textArea.Document.HighlightingStrategy.Properties["BlockCommentEnd"].ToString(); } if (commentStart == null || commentStart.Length == 0 || commentEnd == null || commentEnd.Length == 0) { return; } int selectionStartOffset; int selectionEndOffset; if (textArea.SelectionManager.HasSomethingSelected) { selectionStartOffset = textArea.SelectionManager.SelectionCollection[0].Offset; selectionEndOffset = textArea.SelectionManager.SelectionCollection[textArea.SelectionManager.SelectionCollection.Count - 1].EndOffset; } else { selectionStartOffset = textArea.Caret.Offset; selectionEndOffset = selectionStartOffset; } BlockCommentRegion commentRegion = FindSelectedCommentRegion(textArea.Document, commentStart, commentEnd, selectionStartOffset, selectionEndOffset); textArea.Document.UndoStack.StartUndoGroup(); if (commentRegion != null) { RemoveComment(textArea.Document, commentRegion); } else if (textArea.SelectionManager.HasSomethingSelected) { SetCommentAt(textArea.Document, selectionStartOffset, selectionEndOffset, commentStart, commentEnd); } textArea.Document.UndoStack.EndUndoGroup(); textArea.Document.CommitUpdate(); textArea.AutoClearSelection = false; }
public override bool Equals(object obj) { BlockCommentRegion other = obj as BlockCommentRegion; if (other == null) { return(false); } return(this.commentStart == other.commentStart && this.commentEnd == other.commentEnd && this.startOffset == other.startOffset && this.endOffset == other.endOffset); }
void RemoveComment(IDocument document, BlockCommentRegion commentRegion) { document.Remove(commentRegion.EndOffset, commentRegion.CommentEnd.Length); document.Remove(commentRegion.StartOffset, commentRegion.CommentStart.Length); }