@Override public String convertValueToText( Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { String s = super.convertValueToText(value, selected, expanded, leaf, row, hasFocus); String newProp = jEdit.getProperty(HIGHLIGHT_PROP); if (newProp == null || newProp.isEmpty()) return s; DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; while (node != null && !(node.getUserObject() instanceof HyperSearchOperationNode)) { node = (DefaultMutableTreeNode) node.getParent(); } if (node == null) return s; if (!newProp.equals(prop)) { prop = newProp; Font f = (resultTree != null) ? resultTree.getFont() : UIManager.getFont("Tree.font"); styleTag = HtmlUtilities.style2html(prop, f); } SearchMatcher matcher = ((HyperSearchOperationNode) node.getUserObject()).getSearchMatcher(); int i = s.indexOf(": "); if (i > 0) i += 2; else i = 0; Match m; List<Integer> matches = new ArrayList<Integer>(); while ((m = matcher.nextMatch(s.substring(i), true, true, true, false)) != null) { matches.add(i + m.start); matches.add(i + m.end); i += m.end; } return HtmlUtilities.highlightString(s, styleTag, matches); }
@Override public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == highlight) { String prop = jEdit.getProperty(HIGHLIGHT_PROP); Font f = (resultTree != null) ? resultTree.getFont() : UIManager.getFont("Tree.font"); SyntaxStyle style = new StyleEditor( jEdit.getActiveView(), HtmlUtilities.parseHighlightStyle(prop, f), "hypersearch") .getStyle(); if (style != null) jEdit.setProperty(HIGHLIGHT_PROP, GUIUtilities.getStyleString(style)); updateHighlightStatus(); } else if (source == clear) { removeAllNodes(); } else if (source == multi) { multiStatus = !multiStatus; updateMultiStatus(); if (!multiStatus) { for (int i = resultTreeRoot.getChildCount() - 2; i >= 0; i--) { resultTreeModel.removeNodeFromParent((MutableTreeNode) resultTreeRoot.getChildAt(i)); } } } else if (source == stop) { jEdit.setTemporaryProperty("hyperSearch-stopButton", "true"); } }
HighlightingTree(DefaultTreeModel model) { super(model); prop = jEdit.getProperty(HIGHLIGHT_PROP); if (prop != null && !prop.isEmpty()) { Font f = (resultTree != null) ? resultTree.getFont() : UIManager.getFont("Tree.font"); styleTag = HtmlUtilities.style2html(prop, f); } }
// {{{ parseHighlightStyle() SyntaxStyle parseHighlightStyle(String style) { Font f = (resultTree != null) ? resultTree.getFont() : UIManager.getFont("Tree.font"); SyntaxStyle s; try { s = SyntaxUtilities.parseStyle(style, f.getFamily(), f.getSize(), true, null); } catch (Exception e) { style = "color:#000000"; s = SyntaxUtilities.parseStyle(style, f.getFamily(), f.getSize(), true); } return s; } // }}}
// {{{ ResultCellRenderer constructor ResultCellRenderer() { plainFont = UIManager.getFont("Tree.font"); if (plainFont == null) plainFont = jEdit.getFontProperty("metal.secondary.font"); boldFont = new Font(plainFont.getName(), Font.BOLD, plainFont.getSize()); } // }}}