in core/src/com/jediterm/terminal/model/TerminalLine.java [316:341]
private void processIntersection(int startTextOffset, int y, @NotNull TextEntry te, @NotNull StyledTextConsumer consumer,
int startRow, @NotNull TerminalLineIntervalHighlighting highlighting) {
CharBuffer text = te.getText();
int endTextOffset = startTextOffset + text.length();
int[] offsets = new int[] {startTextOffset, endTextOffset, highlighting.getStartOffset(), highlighting.getEndOffset()};
Arrays.sort(offsets);
int startTextOffsetInd = Arrays.binarySearch(offsets, startTextOffset);
int endTextOffsetInd = Arrays.binarySearch(offsets, endTextOffset);
if (startTextOffsetInd < 0 || endTextOffsetInd < 0) {
LOG.error("Cannot find " + Arrays.toString(new int[] {startTextOffset, endTextOffset})
+ " in " + Arrays.toString(offsets) + ": " + Arrays.toString(new int[] {startTextOffsetInd, endTextOffsetInd}));
consumer.consume(startTextOffset, y, te.getStyle(), text, startRow);
return;
}
for (int i = startTextOffsetInd; i < endTextOffsetInd; i++) {
int length = offsets[i + 1] - offsets[i];
if (length == 0) continue;
CharBuffer subText = new SubCharBuffer(text, offsets[i] - startTextOffset, length);
if (highlighting.intersectsWith(offsets[i], offsets[i + 1])) {
consumer.consume(offsets[i], y, highlighting.mergeWith(te.getStyle()), subText, startRow);
}
else {
consumer.consume(offsets[i], y, te.getStyle(), subText, startRow);
}
}
}