101 lines
2.8 KiB
Java
101 lines
2.8 KiB
Java
package net.sf.jasperreports.engine.util;
|
|
|
|
import java.text.AttributedCharacterIterator;
|
|
import java.text.AttributedString;
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class JRStyledText {
|
|
private StringBuffer sbuffer = new StringBuffer();
|
|
|
|
private List runs = new ArrayList();
|
|
|
|
private AttributedString attributedString = null;
|
|
|
|
private AttributedString awtAttributedString = null;
|
|
|
|
private Map globalAttributes;
|
|
|
|
public void append(String text) {
|
|
this.sbuffer.append(text);
|
|
this.attributedString = null;
|
|
this.awtAttributedString = null;
|
|
}
|
|
|
|
public void addRun(Run run) {
|
|
this.runs.add(run);
|
|
this.attributedString = null;
|
|
this.awtAttributedString = null;
|
|
}
|
|
|
|
public int length() {
|
|
return this.sbuffer.length();
|
|
}
|
|
|
|
public String getText() {
|
|
return this.sbuffer.toString();
|
|
}
|
|
|
|
public AttributedString getAttributedString() {
|
|
if (this.attributedString == null) {
|
|
this.attributedString = new AttributedString(this.sbuffer.toString());
|
|
for (int i = this.runs.size() - 1; i >= 0; i--) {
|
|
Run run = this.runs.get(i);
|
|
if (run.startIndex != run.endIndex && run.attributes != null)
|
|
this.attributedString.addAttributes(run.attributes, run.startIndex, run.endIndex);
|
|
}
|
|
}
|
|
return this.attributedString;
|
|
}
|
|
|
|
public AttributedString getAwtAttributedString() {
|
|
if (this.awtAttributedString == null) {
|
|
this.awtAttributedString = new AttributedString(this.sbuffer.toString());
|
|
for (int i = this.runs.size() - 1; i >= 0; i--) {
|
|
Run run = this.runs.get(i);
|
|
if (run.startIndex != run.endIndex && run.attributes != null && !run.attributes.isEmpty()) {
|
|
Iterator it = run.attributes.entrySet().iterator();
|
|
while (it.hasNext()) {
|
|
Map.Entry entry = it.next();
|
|
AttributedCharacterIterator.Attribute attribute = (AttributedCharacterIterator.Attribute)entry.getKey();
|
|
if (!(attribute instanceof JRTextAttribute)) {
|
|
Object value = entry.getValue();
|
|
this.awtAttributedString.addAttribute(attribute, value, run.startIndex, run.endIndex);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return this.awtAttributedString;
|
|
}
|
|
|
|
public List getRuns() {
|
|
return this.runs;
|
|
}
|
|
|
|
public static class Run {
|
|
public Map attributes = null;
|
|
|
|
public int startIndex = 0;
|
|
|
|
public int endIndex = 0;
|
|
|
|
public Run(Map attributes, int startIndex, int endIndex) {
|
|
this.attributes = attributes;
|
|
this.startIndex = startIndex;
|
|
this.endIndex = endIndex;
|
|
}
|
|
}
|
|
|
|
public void setGlobalAttributes(Map attributes) {
|
|
this.globalAttributes = attributes;
|
|
addRun(new Run(attributes, 0, length()));
|
|
}
|
|
|
|
public Map getGlobalAttributes() {
|
|
return this.globalAttributes;
|
|
}
|
|
}
|