using System;
using System.Collections.Generic;
namespace DrillTools
{
///
/// 钻带文本行结构,保留原始文本和行尾换行符。
///
internal readonly record struct DrillTapeLine(string Text, string LineEnding);
///
/// 钻带行解析器,将钻带文本按行拆分,保留原始换行符。
///
internal static class DrillTapeLineParser
{
private static readonly char[] LineEndChars = { '\r', '\n' };
///
/// 将文本内容按行拆分,保留每行的换行符。
///
public static List SplitLines(string content)
{
var lines = new List();
int index = 0;
while (index < content.Length)
{
int lineEndIndex = content.IndexOfAny(LineEndChars, index);
if (lineEndIndex < 0)
{
lines.Add(new DrillTapeLine(content[index..], string.Empty));
return lines;
}
string text = content[index..lineEndIndex];
string lineEnding;
if (content[lineEndIndex] == '\r' && lineEndIndex + 1 < content.Length && content[lineEndIndex + 1] == '\n')
{
lineEnding = "\r\n";
index = lineEndIndex + 2;
}
else
{
lineEnding = content[lineEndIndex].ToString();
index = lineEndIndex + 1;
}
lines.Add(new DrillTapeLine(text, lineEnding));
}
if (content.Length == 0)
lines.Add(new DrillTapeLine(string.Empty, string.Empty));
return lines;
}
}
}