public void doReplacement() {
    EditWindow currentWindow = editor.getActiveWindow();

    if (currentWindow == null || getFindTextField().getText().length() == 0) {
      // launch error dialog?
      return;
    }
    JEditorPane editorPane = currentWindow.getEditorPane();
    String text = editorPane.getSelectedText();

    if (text == null) {
      // no selection
      return;
    }
    Matcher m = getCurrentPattern().matcher(text);

    if (m.matches()) {
      String replacement = getReplaceTextField().getText();

      if (getRegexButton().isSelected()) {
        replacement = m.replaceFirst(replacement);
      }
      editorPane.replaceSelection(replacement);
    }
  }
  public void doReplaceAll() {
    EditWindow currentWindow = editor.getActiveWindow();

    if (currentWindow == null || getFindTextField().getText().length() == 0) {
      // launch error dialog?
      return;
    }
    JEditorPane editorPane = currentWindow.getEditorPane();
    String text = editorPane.getText();

    String replacement = getReplaceTextField().getText();

    editorPane.setText(getCurrentPattern().matcher(text).replaceAll(replacement));
  }
  public void findNext() {
    EditWindow currentWindow = editor.getActiveWindow();

    if (currentWindow == null || getFindTextField().getText().length() == 0) {
      // launch error dialog?
      return;
    }
    Pattern p = getCurrentPattern();
    JEditorPane editorPane = currentWindow.getEditorPane();

    // for some reason, getText() trims off \r but the indexes in
    // the editor pane don't.
    String text = editorPane.getText().replaceAll("\\r", "");
    Matcher m = p.matcher(text);
    int index = editorPane.getSelectionEnd();

    if (!(m.find(index) || m.find())) {
      return;
    }
    editorPane.setSelectionStart(m.start());
    editorPane.setSelectionEnd(m.end());
  }