this.Markers = new MarkerCollection();
this.UndoManager = new UndoManager();
this._LayoutLines = new LineToIndexTable(this);
- this._LayoutLines.SpilitString = (s,e)=> {
- return this.CreateLineList(e.index, e.length, MaximumLineLength);
- };
this._LayoutLines.Clear();
this.MarkerPatternSet = new MarkerPatternSet(this._LayoutLines, this.Markers);
this.MarkerPatternSet.Updated += WacthDogPattern_Updated;
}
}
- /// <summary>
- /// レイアウト行を返す
- /// </summary>
- /// <param name="index">開始インデックス</param>
- /// <param name="length">長さ</param>
- /// <param name="lineLimitLength">1行当たりの最大文字数。-1で無制限</param>
- /// <returns>レイアウト行リスト</returns>
- internal IList<LineToIndexTableData> CreateLineList(int index, int length, int lineLimitLength = -1)
- {
- int startIndex = index;
- int endIndex = index + length - 1;
- List<LineToIndexTableData> output = new List<LineToIndexTableData>();
-
- foreach (Tuple<int, int> range in this.ForEachLines(startIndex, endIndex, lineLimitLength))
- {
- int lineHeadIndex = range.Item1;
- int lineLength = range.Item2;
- char c = this.buffer[lineHeadIndex + lineLength - 1];
- bool hasNewLine = c == Document.NewLine;
- output.Add(this.LayoutLines.CreateLineToIndexTableData(lineHeadIndex, lineLength, hasNewLine, null));
- }
-
- if (output.Count > 0)
- output.Last().LineEnd = true;
-
- return output;
- }
-
internal void FireUpdate(DocumentUpdateEventArgs e)
{
this.buffer_Update(this.buffer, e);
/// <returns>行イテレーターが返される</returns>
public IEnumerable<string> GetLines(int startIndex, int endIndex, int maxCharCount = -1)
{
- return this.buffer.GetLines(startIndex, endIndex, maxCharCount);
- }
-
- internal IEnumerable<Tuple<int, int>> ForEachLines(int startIndex, int endIndex, int maxCharCount = -1)
- {
- return this.buffer.ForEachLines(startIndex, endIndex, maxCharCount);
+ foreach (Tuple<int, int> range in this.LayoutLines.ForEachLines(startIndex, endIndex, maxCharCount))
+ {
+ StringBuilder temp = new StringBuilder();
+ temp.Clear();
+ int lineEndIndex = range.Item1;
+ if (range.Item2 > 0)
+ lineEndIndex += range.Item2 - 1;
+ for (int i = range.Item1; i <= lineEndIndex; i++)
+ temp.Append(this.buffer[i]);
+ yield return temp.ToString();
+ }
}
-
/// <summary>
/// 文字列を追加する
/// </summary>