///|
fn overlap_is_substantial(
overlap : Int32,
deleted : Int32,
inserted : Int32,
) -> Bool {
overlap > 0 && (overlap * 2 >= deleted || overlap * 2 >= inserted)
}
///|
/// Length of the longest suffix of `left` that is a prefix of `right`.
fn common_overlap(left : String, right : String) -> Int32 {
let limit = if left.length() < right.length() {
left.length()
} else {
right.length()
}
let mut candidate = limit
while candidate > 0 {
if left[left.length() - candidate:] == right[:candidate] &&
valid_utf16_cut(left, left.length() - candidate) &&
valid_utf16_cut(right, candidate) {
return candidate
}
candidate -= 1
}
0
}
///|
fn valid_utf16_cut(text : String, offset : Int32) -> Bool {
if offset <= 0 || offset >= text.length() {
return true
}
let before = text.at(offset - 1).to_int()
let after = text.at(offset).to_int()
!(before >= 0xD800 && before <= 0xDBFF && after >= 0xDC00 && after <= 0xDFFF)
}