getBiDiSegmentsInRange method
Get BiDi segments within a character range
Implementation
List<BiDiSegment> getBiDiSegmentsInRange(int start, int end) {
if (start >= end || _root == null) return [];
final text = substring(start, end);
final segments = <BiDiSegment>[];
if (text.isEmpty) return segments;
TextDirection? currentDir;
int segmentStart = 0;
for (int i = 0; i < text.length; i++) {
final codeUnit = text.codeUnitAt(i);
TextDirection charDir;
if (BiDi.isRtlChar(codeUnit)) {
charDir = TextDirection.rtl;
} else if (BiDi.isLtrChar(codeUnit)) {
charDir = TextDirection.ltr;
} else {
continue;
}
if (currentDir == null) {
currentDir = charDir;
segmentStart = i;
} else if (charDir != currentDir) {
segments.add(BiDiSegment(start + segmentStart, start + i, currentDir));
currentDir = charDir;
segmentStart = i;
}
}
if (currentDir != null) {
segments.add(
BiDiSegment(start + segmentStart, start + text.length, currentDir),
);
}
return segments;
}