private void processIntersection()

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);
      }
    }
  }