protected virtual SnapshotSpan CommentLines(SnapshotSpan span, ITextEdit edit, LineCommentFormat format) { Contract.Requires<ArgumentNullException>(edit != null, "edit"); Contract.Requires<ArgumentNullException>(format != null, "format"); /* * Rules for line comments: * Make sure line comments are indented as far as possible, skipping empty lines as necessary * Don't comment N+1 lines when only N lines were selected my clicking in the left margin */ if (span.End.GetContainingLine().LineNumber > span.Start.GetContainingLine().LineNumber && span.End.GetContainingLine().Start == span.End) { SnapshotPoint start = span.Start; SnapshotPoint end = span.Snapshot.GetLineFromLineNumber(span.End.GetContainingLine().LineNumber - 1).Start; if (end < start) start = end; span = new SnapshotSpan(start, end); } int minindex = (from i in Enumerable.Range(span.Start.GetContainingLine().LineNumber, span.End.GetContainingLine().LineNumber - span.Start.GetContainingLine().LineNumber + 1) where span.Snapshot.GetLineFromLineNumber(i).GetText().Trim().Length > 0 select ScanToNonWhitespaceChar(span.Snapshot.GetLineFromLineNumber(i))) .Min(); //comment each line for (int line = span.Start.GetContainingLine().LineNumber; line <= span.End.GetContainingLine().LineNumber; line++) { if (span.Snapshot.GetLineFromLineNumber(line).GetText().Trim().Length > 0) edit.Insert(span.Snapshot.GetLineFromLineNumber(line).Start + minindex, format.StartText); } span = new SnapshotSpan(span.Start.GetContainingLine().Start, span.End.GetContainingLine().End); return span; }
protected virtual SnapshotSpan CommentLines(SnapshotSpan span, ITextEdit edit, LineCommentFormat format) { Contract.Requires <ArgumentNullException>(edit != null, "edit"); Contract.Requires <ArgumentNullException>(format != null, "format"); /* * Rules for line comments: * Make sure line comments are indented as far as possible, skipping empty lines as necessary * Don't comment N+1 lines when only N lines were selected my clicking in the left margin */ if (span.End.GetContainingLine().LineNumber > span.Start.GetContainingLine().LineNumber&& span.End.GetContainingLine().Start == span.End) { SnapshotPoint start = span.Start; SnapshotPoint end = span.Snapshot.GetLineFromLineNumber(span.End.GetContainingLine().LineNumber - 1).Start; if (end < start) { start = end; } span = new SnapshotSpan(start, end); } int minindex = (from i in Enumerable.Range(span.Start.GetContainingLine().LineNumber, span.End.GetContainingLine().LineNumber - span.Start.GetContainingLine().LineNumber + 1) where span.Snapshot.GetLineFromLineNumber(i).GetText().Trim().Length > 0 select ScanToNonWhitespaceChar(span.Snapshot.GetLineFromLineNumber(i))) .Min(); //comment each line for (int line = span.Start.GetContainingLine().LineNumber; line <= span.End.GetContainingLine().LineNumber; line++) { if (span.Snapshot.GetLineFromLineNumber(line).GetText().Trim().Length > 0) { edit.Insert(span.Snapshot.GetLineFromLineNumber(line).Start + minindex, format.StartText); } } span = new SnapshotSpan(span.Start.GetContainingLine().Start, span.End.GetContainingLine().End); return(span); }