Browse Source

Fixed incorrect end position of comments in XmlFoldingStrategy.

pull/18/head
Daniel Grunwald 14 years ago
parent
commit
926f362d75
  1. 5
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingManager.cs
  2. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/XmlFoldingStrategy.cs
  3. 8
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs

5
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingManager.cs

@ -138,6 +138,8 @@ namespace ICSharpCode.AvalonEdit.Folding @@ -138,6 +138,8 @@ namespace ICSharpCode.AvalonEdit.Folding
{
if (startOffset >= endOffset)
throw new ArgumentException("startOffset must be less than endOffset");
if (startOffset < 0 || endOffset > document.TextLength)
throw new ArgumentException("Folding must be within document boundary");
FoldingSection fs = new FoldingSection(this, startOffset, endOffset);
foldings.Add(fs);
Redraw(fs);
@ -254,6 +256,9 @@ namespace ICSharpCode.AvalonEdit.Folding @@ -254,6 +256,9 @@ namespace ICSharpCode.AvalonEdit.Folding
throw new ArgumentException("newFoldings must be sorted by start offset");
previousStartOffset = newFolding.StartOffset;
int startOffset = newFolding.StartOffset.CoerceValue(0, document.TextLength);
int endOffset = newFolding.EndOffset.CoerceValue(0, document.TextLength);
if (newFolding.StartOffset == newFolding.EndOffset)
continue; // ignore zero-length foldings

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/XmlFoldingStrategy.cs

@ -110,7 +110,7 @@ namespace ICSharpCode.AvalonEdit.Folding @@ -110,7 +110,7 @@ namespace ICSharpCode.AvalonEdit.Folding
// into account the <!-- chars.
int startOffset = GetOffset(document, reader) - 4;
int endOffset = startOffset + comment.Length + 3;
int endOffset = startOffset + comment.Length + 7;
string foldText = String.Concat("<!--", comment.Substring(0, firstNewLine).TrimEnd('\r') , "-->");
foldMarkers.Add(new NewFolding(startOffset, endOffset) { Name = foldText } );

8
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs

@ -151,13 +151,13 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -151,13 +151,13 @@ namespace ICSharpCode.AvalonEdit.Rendering
offset += element.DocumentLength;
if (offset > currentLineEnd) {
DocumentLine newEndLine = document.GetLineByOffset(offset);
if (newEndLine == this.LastDocumentLine) {
currentLineEnd = newEndLine.Offset + newEndLine.Length;
this.LastDocumentLine = newEndLine;
if (currentLineEnd < offset) {
throw new InvalidOperationException(
"The VisualLineElementGenerator " + g.GetType().Name +
" produced an element which ends within the line delimiter");
}
currentLineEnd = newEndLine.Offset + newEndLine.Length;
this.LastDocumentLine = newEndLine;
}
break;
}
@ -179,7 +179,7 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -179,7 +179,7 @@ namespace ICSharpCode.AvalonEdit.Rendering
textOffset += element.DocumentLength;
}
VisualLength = visualOffset;
Debug.Assert(textOffset == LastDocumentLine.Offset + LastDocumentLine.Length - FirstDocumentLine.Offset);
Debug.Assert(textOffset == LastDocumentLine.EndOffset - FirstDocumentLine.Offset);
}
internal void RunTransformers(ITextRunConstructionContext context, IVisualLineTransformer[] transformers)

Loading…
Cancel
Save