}
// Highlights all occurrences found of the specified pattern.
public void search(String pattern, boolean caseSensitive) throws PatternSyntaxException {
pos = -1;
Highlighter highlighter = comp.getHighlighter();
// Remove any existing highlights for last search
Highlighter.Highlight[] highlights = highlighter.getHighlights();
for (int i = 0; i < highlights.length; i++) {
Highlighter.Highlight h = highlights[i];
if (h.getPainter() == this.matchPainter ||
h.getPainter() == this.selectionPainter) {
highlighter.removeHighlight(h);
}
}
if (pattern == null || "".equals(pattern))
return;
// Look for the pattern we are given - insensitive search
String content = null;
try {
Document d = comp.getDocument();
content = d.getText(0, d.getLength());
} catch (BadLocationException e) {
// Cannot happen
return;
}
int flags = Pattern.DOTALL | Pattern.MULTILINE;
if (!caseSensitive) flags |= Pattern.CASE_INSENSITIVE;
Pattern p = Pattern.compile(pattern, flags);
Matcher m = p.matcher(content);
while (m.find()) {
for (int i=(m.groupCount()>0?1:0); i<=m.groupCount(); i++) {
try {
highlighter.addHighlight(m.start(i), m.end(i), matchPainter);
} catch (BadLocationException e) {}
}
}
}