import com.intellij.util.ui.UIUtil; //导入方法依赖的package包/类
private String setup(String text,
Function escapeFunction,
int highlightStartOffset,
int highlightEndOffset,
boolean isDisabled,
boolean strikeout,
boolean isDisabledBeforeHighlight,
Color background) {
StringBuilder buf = new StringBuilder();
removeAll();
String[] lines = UIUtil.splitText(text, getFontMetrics(BOLD_FONT), myWidthLimit, ',');
myOneLineComponents = new OneLineComponent[lines.length];
int lineOffset = 0;
boolean hasHighlighting = highlightStartOffset >= 0 && highlightEndOffset > highlightStartOffset;
TextRange highlightingRange = hasHighlighting ? new TextRange(highlightStartOffset, highlightEndOffset) : null;
for (int i = 0; i < lines.length; i++) {
String line = lines[i];
myOneLineComponents[i] = new OneLineComponent();
TextRange lRange = new TextRange(lineOffset, lineOffset + line.length());
TextRange hr = highlightingRange == null ? null : lRange.intersection(highlightingRange);
hr = hr == null ? null : hr.shiftRight(-lineOffset);
String before = escapeString(hr == null ? line : line.substring(0, hr.getStartOffset()), escapeFunction);
String in = hr == null ? "" : escapeString(hr.substring(line), escapeFunction);
String after = hr == null ? "" : escapeString(line.substring(hr.getEndOffset(), line.length()), escapeFunction);
TextRange escapedHighlightingRange = in.isEmpty() ? null : TextRange.create(before.length(), before.length() + in.length());
buf.append(myOneLineComponents[i].setup(before + in + after, isDisabled, strikeout, background, escapedHighlightingRange));
if (isDisabledBeforeHighlight) {
if (highlightStartOffset < 0 || highlightEndOffset > lineOffset) {
myOneLineComponents[i].setDisabledBeforeHighlight();
}
}
add(myOneLineComponents[i], new GridBagConstraints(0,i,1,1,1,0,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(0,0,0,0),0,0));
lineOffset += line.length();
}
return buf.toString();
}