package org.jabref.gui;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JEditorPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Document;
import javax.swing.text.Highlighter;
import javax.swing.text.LayeredHighlighter.LayerPainter;
import org.jabref.gui.fieldeditors.JTextAreaWithHighlighting;
import org.jabref.logic.search.SearchQueryHighlightListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class JEditorPaneWithHighlighting extends JEditorPane implements SearchQueryHighlightListener {
private static final Log LOGGER = LogFactory.getLog(JTextAreaWithHighlighting.class);
public void highlightPattern(Optional<Pattern> highlightPattern) {
Highlighter highlighter = getHighlighter();
highlighter.removeAllHighlights();
if ((highlightPattern == null) || !highlightPattern.isPresent()) {
return;
}
String text = getDocumentText();
Matcher matcher = highlightPattern.get().matcher(text);
LayerPainter painter = DefaultHighlighter.DefaultPainter;
while (matcher.find()) {
try {
highlighter.addHighlight(matcher.start(), matcher.end(), painter);
} catch (BadLocationException ble) {
// should not occur if matcher works right
LOGGER.warn("Highlighting not possible, bad location", ble);
}
}
}
private String getDocumentText() {
Document doc = getDocument();
String text;
try {
text = doc.getText(0, doc.getLength());
} catch (Exception e) {
LOGGER.error("Error while getting document text");
text = "";
}
return text;
}
}