// 文本切行。
//
// 统一处理 LF / CRLF:按 `\n` 切分,并丢弃行尾的 `\r`。
// 末尾换行不会产生额外的空行,与 `diff` 的行为一致。
///|
fn split_lines(text : String) -> Array[String] {
let lines : Array[String] = []
if text.is_empty() {
return lines
}
let buffer = StringBuilder()
for c in text {
if c == '\n' {
lines.push(buffer.to_string())
buffer.reset()
} else if c != '\r' {
buffer.write_char(c)
}
}
if !text.has_suffix("\n") {
lines.push(buffer.to_string())
}
lines
}
///|
fn chars_to_string(chars : Array[Char], start : Int, end : Int) -> String {
let buffer = StringBuilder()
let mut i = start
while i < end && i < chars.length() {
buffer.write_char(chars[i])
i = i + 1
}
buffer.to_string()
}