예제 #1
0
  /**
   * Sets the output text.
   *
   * @param t output text
   * @param s text size
   */
  public final void setText(final byte[] t, final int s) {
    // remove invalid characters and compare old with new string
    int ns = 0;
    final int ts = text.size();
    final byte[] tt = text.text();
    boolean eq = true;
    for (int r = 0; r < s; ++r) {
      final byte b = t[r];
      // support characters, highlighting codes, tabs and newlines
      if (b >= ' ' || b <= TokenBuilder.MARK || b == 0x09 || b == 0x0A) {
        t[ns++] = t[r];
      }
      eq &= ns < ts && ns < s && t[ns] == tt[ns];
    }
    eq &= ns == ts;

    // new text is different...
    if (!eq) {
      text = new BaseXTextTokens(Arrays.copyOf(t, ns));
      rend.setText(text);
      scroll.pos(0);
    }
    if (undo != null) undo.store(t.length != ns ? Arrays.copyOf(t, ns) : t, 0);
    SwingUtilities.invokeLater(calc);
  }
예제 #2
0
 /** Deletes the selected text. */
 final void delete() {
   if (undo == null) return;
   text.pos(text.cursor());
   undo.cursor(text.cursor());
   text.delete();
   undo.store(text.text(), text.cursor());
   text.setCaret();
 }
예제 #3
0
 /**
  * Pastes the specified string.
  *
  * @param txt string to be pasted
  * @return success flag
  */
 final boolean paste(final String txt) {
   if (txt == null || undo == null) return false;
   text.pos(text.cursor());
   undo.cursor(text.cursor());
   if (text.marked()) text.delete();
   text.add(txt);
   undo.store(text.text(), text.cursor());
   return true;
 }
예제 #4
0
 @Override
 public void keyReleased(final KeyEvent e) {
   if (undo != null) undo.store(text.text(), text.cursor());
 }