if (indexOfParent == -1) {
styleRanges.add(styleRange);
return;
}
StyleRange parentStyleRange = styleRanges.get(indexOfParent);
int parentStart = parentStyleRange.start;
int parentEnd = parentStyleRange.start + parentStyleRange.length;
int childStart = styleRange.start;
int childEnd = styleRange.start + styleRange.length;
//System.out.printf("parent %d-%d, child: %d-%d\n", parentStart, parentEnd, childStart, childEnd);
// *-----*
// *-----*
if (parentStart == childStart && parentEnd == childEnd) {
styleRangeCopyValues(parentStyleRange, styleRange);
return;
}
// *------*
// *--*
if (childStart == parentStart) {
parentStyleRange.start = childEnd;
parentStyleRange.length -= styleRange.length;
styleRanges.add(indexOfParent, styleRange);
return;
}
// *------*
// *---*
if (childEnd == parentEnd) {
parentStyleRange.length = childStart - parentStart;
styleRanges.add(indexOfParent + 1, styleRange);
return;
}
// *----------*
// *---*
parentStyleRange.length = childStart - parentStart;
styleRanges.add(indexOfParent + 1, styleRange);
StyleRange newStyleRange = new StyleRange();
newStyleRange.start = childEnd;
newStyleRange.length = parentEnd - childEnd;
styleRangeCopyValues(newStyleRange, parentStyleRange);
styleRanges.add(indexOfParent + 2, newStyleRange);
}