Java Code Examples for javax.swing.text.StyledDocument#remove()

The following examples show how to use javax.swing.text.StyledDocument#remove() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: GuardedSectionImpl.java    From netbeans with Apache License 2.0 7 votes vote down vote up
/** Deletes the text in the section.
 * @exception BadLocationException
 */
final void deleteText() throws BadLocationException {
    if (valid) {
        final StyledDocument doc = guards.getDocument();
        final BadLocationException[] blex = new BadLocationException[1];
        Runnable r = new Runnable() {
            public void run() {
                try {
                    int start = getStartPosition().getOffset();
                    if (start > 0 && "\n".equals(doc.getText(start - 1, 1))) { // NOI18N
                        start--;
                    }
                    doc.remove(start, getEndPosition().getOffset() - start + 1);
                } catch (BadLocationException ex) {
                    blex[0] = ex;
                }
            }
        };
        
        GuardedSectionsImpl.doRunAtomic(doc, r);
        
        if (blex[0] != null) {
            throw blex[0];
        }
    }
}
 
Example 2
Source File: DTDActionsTest.java    From netbeans with Apache License 2.0 6 votes vote down vote up
public void testCheckCSS() throws Exception{
    final String err1 = "\nNEW {";
    final String err2 = "{font-size: 12px; \n _color:black}";
    Node node = WebPagesNode.getInstance(projectName).getChild(cssFileName, Node.class);
    StyledDocument doc = openFile(projectName, cssFileName);
    checkCSS(node);
    doc.insertString(doc.getLength()-1, err1, null);
    checkCSS(node);
    doc.insertString(doc.getLength()-1, err2, null);
    checkCSS(node);
    int errPos = doc.getText(0, doc.getLength()).indexOf("{{");
    doc.remove(errPos, 1);
    checkCSS(node);
    errPos = doc.getText(0, doc.getLength()).indexOf("_");
    doc.remove(errPos, 1);
    checkCSS(node);
    ending();
}
 
Example 3
Source File: SwingLogPanel.java    From org.alloytools.alloy with Apache License 2.0 6 votes vote down vote up
/**
 * Truncate the log to the given length; if the log is shorter than the number
 * given, then nothing happens.
 */
void setLength(int newLength) {
    if (log == null)
        return;
    clearError();
    StyledDocument doc = log.getStyledDocument();
    int n = doc.getLength();
    if (n <= newLength)
        return;
    try {
        doc.remove(newLength, n - newLength);
    } catch (BadLocationException e) {
        // Harmless
    }
    if (lastSize > doc.getLength()) {
        lastSize = doc.getLength();
    }
}
 
Example 4
Source File: BaseTypeTableCellRenderer.java    From binnavi with Apache License 2.0 6 votes vote down vote up
private static void renderArray(
    final TypeInstance instance, final StyledDocument document, final boolean renderData) {
  final Style arrayStyle = createDeclarationStyle(document);
  try {
    document.remove(0, document.getLength());
    final BaseType baseType = instance.getBaseType();
    appendString(document, baseType.getName(), arrayStyle);
    if (renderData) {
      appendString(document,
          renderInstanceData(baseType, instance.getAddress().getOffset(), instance.getSection()),
          createDataStyle(document));
    }
  } catch (final BadLocationException exception) {
    CUtilityFunctions.logException(exception);
  }
}
 
Example 5
Source File: MemoryTest.java    From netbeans with Apache License 2.0 6 votes vote down vote up
private void processTest(String testName, String insertionText) throws Exception {
    File testFile = new File(getDataDir(), testName);
    FileObject testObject = FileUtil.createData(testFile);
    DataObject dataObj = DataObject.find(testObject);
    EditorCookie.Observable ed = dataObj.getCookie(Observable.class);
    handler.params.clear();
    handler.latest = null;
    StyledDocument doc = ed.openDocument();
    ed.open();
    Thread.sleep(TIMEOUT);
    handler.params.clear();

    for (int i = 0; i < ITERATIONS_COUNT; i++) {
        doc.insertString(0, insertionText, null);
        Thread.sleep(TIMEOUT);
    }
    for (int i = 0; i < ITERATIONS_COUNT; i++) {
        doc.remove(0, insertionText.length());
        Thread.sleep(TIMEOUT);
    }

    ed.saveDocument();
    ed.close();

    assertClean();
}
 
Example 6
Source File: CasAnnotationViewer.java    From uima-uimaj with Apache License 2.0 5 votes vote down vote up
/**
 * Creates the annotation display.
 */
private void displayAnnotationView() {
  // for speed, detach document from text pane before updating
  StyledDocument doc = (StyledDocument) this.textPane.getDocument();
  Document blank = new DefaultStyledDocument();
  this.textPane.setDocument(blank);

  // make sure annotationCheckboxPanel is showing
  this.typeCheckBoxVerticalScrollPanel.removeAll();

  // add text from CAS
  try {
    doc.remove(0, doc.getLength());
    doc.insertString(0, this.cas.getDocumentText(), new SimpleAttributeSet());
  } catch (BadLocationException e) {
    throw new RuntimeException(e);
  }

  // Iterate over annotations
  AnnotationIndex<AnnotationFS> annotationIndex = this.cas.getAnnotationIndex();
  if (annotationIndex == null) {
    return;
  }
  FSIterator<AnnotationFS> annotationIterator = annotationIndex.iterator();
  if (annotationIterator == null || !annotationIterator.hasNext()) {
    return;
  }
  while (annotationIterator.hasNext()) {
    this.processOneAnnotationInAnnotationView(doc, annotationIterator.next());
  }
  // now populate panel with checkboxes in order specified in user file. JMP
  this.addTypeCheckBoxes();
  // reattach document to text pane
  this.textPane.setDocument(doc);
}
 
Example 7
Source File: MagicTextPane.java    From MtgDesktopCompanion with GNU General Public License v3.0 5 votes vote down vote up
public void updateTextWithIcons() {

		textPane.setText(textPane.getText().replaceAll("(?m)^[ \t]*\r?\n", ""));
		Pattern p = Pattern.compile(CardsPatterns.MANA_PATTERN.getPattern());
		Matcher m = p.matcher(textPane.getText());

		String text = textPane.getText();
		StyleContext context = new StyleContext();
		StyledDocument document = new DefaultStyledDocument(context);

		Style labelStyle = context.getStyle(StyleContext.DEFAULT_STYLE);

		Style italic = context.addStyle("italicStyle", labelStyle);
		StyleConstants.setItalic(italic, true);

		int cumule = 0;
		try {
			document.insertString(0, text, null);
			while (m.find()) {
				Image ic = manaPanel.getManaSymbol(m.group());

				int width = 15;
				if (m.group().equals("{100}"))
					width = 30;

				JLabel label = new JLabel(new ImageIcon(ic.getScaledInstance(width, 15, Image.SCALE_DEFAULT)));
				label.setAlignmentY(SwingConstants.TOP);

				StyleConstants.setComponent(labelStyle, label);

				document.remove(m.start() + cumule, (m.end() - m.start()));
				document.insertString(m.start() + cumule, m.group(), labelStyle);
			}

			textPane.setDocument(document);
		} catch (BadLocationException e) {
			textPane.setText(text);
		}
	}
 
Example 8
Source File: KeyCompletionItem.java    From nb-springboot with Apache License 2.0 5 votes vote down vote up
@Override
public void defaultAction(JTextComponent jtc) {
    logger.log(Level.FINER, "Accepted key value hint: {0}", hint.toString());
    try {
        StyledDocument doc = (StyledDocument) jtc.getDocument();
        // calculate the amount of chars to remove (by default from dot up to caret position)
        int lenToRemove = caretOffset - dotOffset;
        int equalSignIndex = -1;
        int colonIndex = -1;
        if (overwrite) {
            // NOTE: the editor removes by itself the word at caret when ctrl + enter is pressed
            // the document state here is different from when the completion was invoked thus we have to
            // find again the offset of the equal sign in the line
            Element lineElement = doc.getParagraphElement(caretOffset);
            String line = doc.getText(lineElement.getStartOffset(), lineElement.getEndOffset() - lineElement.getStartOffset());
            equalSignIndex = line.indexOf('=');
            colonIndex = line.indexOf(':');
            if (equalSignIndex >= 0) {
                // from dot to equal sign
                lenToRemove = lineElement.getStartOffset() + equalSignIndex - dotOffset;
            } else if (colonIndex >= 0) {
                // from dot to colon
                lenToRemove = lineElement.getStartOffset() + colonIndex - dotOffset;
            }
        }
        // remove characters from dot then insert new text
        doc.remove(dotOffset, lenToRemove);
        if (equalSignIndex < 0 && colonIndex < 0) {
            logger.log(Level.FINER, "Adding equal sign and continuing completion");
            doc.insertString(dotOffset, hint.getValue().toString().concat("="), null);
        } else {
            logger.log(Level.FINER, "Finish completion with no added chars");
            doc.insertString(dotOffset, hint.getValue().toString(), null);
            Completion.get().hideAll();
        }
    } catch (BadLocationException ex) {
        Exceptions.printStackTrace(ex);
    }
}
 
Example 9
Source File: XMLActionsTest.java    From netbeans with Apache License 2.0 5 votes vote down vote up
public void testXMLWellFormed() throws Exception{
    System.out.println("running testXMLWellFormed");
    String fileName = "well.xml";
    Node node = WebPagesNode.getInstance(projectName).getChild(fileName, Node.class);
    StyledDocument doc = openFile(projectName, fileName);
    checkXML(node);
    int error = doc.getText(0, doc.getLength()).indexOf("notes")+4;
    doc.remove(error, 1);
    checkXML(node);
    validateXML(node);
    error = doc.getText(0, doc.getLength()).indexOf("a=");
    doc.remove(error, 5);
    validateXML(node);
    ending();
}
 
Example 10
Source File: SummaryCellRenderer.java    From netbeans with Apache License 2.0 5 votes vote down vote up
private void clearSD (JTextPane pane, StyledDocument sd) {
    try {
        Style noindentStyle = createNoindentStyle(pane);
        sd.remove(0, sd.getLength());
        sd.setParagraphAttributes(0, sd.getLength(), noindentStyle, false);
    } catch (BadLocationException ex) {
        Exceptions.printStackTrace(ex);
    }
}
 
Example 11
Source File: ReportRequirementsPanel.java    From freecol with GNU General Public License v2.0 5 votes vote down vote up
private void insertColonyButtons(StyledDocument doc, List<Colony> colonies) throws Exception {
    for (Colony colony : colonies) {
        StyleConstants.setComponent(doc.getStyle("button"), createColonyButton(colony, false));
        doc.insertString(doc.getLength(), " ", doc.getStyle("button"));
        doc.insertString(doc.getLength(), ", ", doc.getStyle("regular"));
    }
    doc.remove(doc.getLength() - 2, 2);
}
 
Example 12
Source File: MWPaneReplaceAllAction.java    From wpcleaner with Apache License 2.0 4 votes vote down vote up
/**
 * @param e Event.
 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
 */
@Override
public void actionPerformed(ActionEvent e) {
  MWPane textPane = getMWPane(e);
  if (textPane == null) {
    return;
  }
  StyledDocument doc = textPane.getStyledDocument();
  if (doc == null) {
    return;
  }
  int length = doc.getLength();
  int lastEnd = Integer.MAX_VALUE;
  for (int pos = 0; pos < length; pos = lastEnd) {
    try {
      Element run = doc.getCharacterElement(pos);
      lastEnd = run.getEndOffset();
      if (pos == lastEnd) {
        // offset + length beyond length of document, bail.
        break;
      }
      MutableAttributeSet attr = (MutableAttributeSet) run.getAttributes();
      if ((attr != null) &&
          (attr.getAttribute(MWPaneFormatter.ATTRIBUTE_TYPE) != null) &&
          (attr.getAttribute(MWPaneFormatter.ATTRIBUTE_INFO) != null)) {
        Object attrInfo = attr.getAttribute(MWPaneFormatter.ATTRIBUTE_INFO);
        if (attrInfo instanceof CheckErrorResult) {
          int startOffset = MWPaneFormatter.getUUIDStartOffset(textPane, run);
          int endOffset = MWPaneFormatter.getUUIDEndOffet(textPane, run);
          if (originalText.equals(textPane.getText(startOffset, endOffset - startOffset))) {
            boolean possible = false;
            CheckErrorResult info = (CheckErrorResult) attrInfo;
            List<Actionnable> actionnables = info.getPossibleActions();
            if (actionnables != null) {
              for (Actionnable actionnable : actionnables) {
                possible |= actionnable.isPossibleReplacement(newText);
              }
            }
            if (possible) {
              doc.remove(startOffset, endOffset - startOffset);
              doc.insertString(startOffset, newText, attr);
              lastEnd = startOffset + newText.length();
            }
          }
        }
      }
    } catch (BadLocationException exception) {
      // Nothing to do
    }
  }
}
 
Example 13
Source File: SwappingStyledDocument.java    From dungeon with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
private void clear(StyledDocument document) {
  try {
    document.remove(0, document.getLength());
  } catch (BadLocationException ignored) { // Never happens.
  }
}
 
Example 14
Source File: JavaTypeCompletionItem.java    From nb-springboot with Apache License 2.0 4 votes vote down vote up
@Override
public void defaultAction(JTextComponent jtc) {
    logger.log(Level.FINER, "Accepted java type completion: {0} {1}", new Object[]{elementKind.toString(), name});
    try {
        StyledDocument doc = (StyledDocument) jtc.getDocument();
        // calculate the amount of chars to remove (by default from dot up to caret position)
        int lenToRemove = caretOffset - dotOffset;
        if (overwrite) {
            // NOTE: the editor removes by itself the word at caret when ctrl + enter is pressed
            // the document state here is different from when the completion was invoked thus we have to
            // find again the offset of the equal sign in the line
            Element lineElement = doc.getParagraphElement(caretOffset);
            String line = doc.getText(lineElement.getStartOffset(), lineElement.getEndOffset() - lineElement.getStartOffset());
            int equalSignIndex = line.indexOf('=');
            int colonIndex = line.indexOf(':');
            int commaIndex = line.indexOf(',', dotOffset - lineElement.getStartOffset());
            if (equalSignIndex >= 0 && dotOffset < equalSignIndex) {
                // from dot to equal sign
                lenToRemove = lineElement.getStartOffset() + equalSignIndex - dotOffset;
            } else if (colonIndex >= 0 && dotOffset < colonIndex) {
                // from dot to colon
                lenToRemove = lineElement.getStartOffset() + colonIndex - dotOffset;
            } else if (commaIndex >= 0) {
                // from dot to comma
                lenToRemove = lineElement.getStartOffset() + commaIndex - dotOffset;
            } else {
                // from dot to end of line (except line terminator)
                lenToRemove = lineElement.getEndOffset() - 1 - dotOffset;
            }
        }
        // remove characters from dot then insert new text
        doc.remove(dotOffset, lenToRemove);
        if (isKeyCompletion) {
            // insert and continue completion
            doc.insertString(dotOffset, name.concat("="), null);
        } else {
            // insert and close the code completion box
            doc.insertString(dotOffset, name, null);
            Completion.get().hideAll();
        }
    } catch (BadLocationException ex) {
        Exceptions.printStackTrace(ex);
    }
}
 
Example 15
Source File: CfgPropCompletionItem.java    From nb-springboot with Apache License 2.0 4 votes vote down vote up
@Override
public void defaultAction(JTextComponent jtc) {
    logger.log(Level.FINER, "Accepted name completion: {0}", configurationMeta.getId());
    try {
        StyledDocument doc = (StyledDocument) jtc.getDocument();
        // calculate the amount of chars to remove (by default from property start up to caret position)
        int lenToRemove = caretOffset - propStartOffset;
        int equalSignIndex = -1;
        if (overwrite) {
            // NOTE: the editor removes by itself the word at caret when ctrl + enter is pressed
            // the document state here is different from when the completion was invoked thus we have to
            // find again the offset of the equal sign in the line
            Element lineElement = doc.getParagraphElement(caretOffset);
            String line = doc.getText(lineElement.getStartOffset(), lineElement.getEndOffset() - lineElement.getStartOffset());
            equalSignIndex = line.indexOf('=');
            int colonIndex = line.indexOf(':');
            if (equalSignIndex >= 0) {
                // from property start to equal sign
                lenToRemove = lineElement.getStartOffset() + equalSignIndex - propStartOffset;
            } else if (colonIndex >= 0) {
                // from property start to colon
                lenToRemove = lineElement.getStartOffset() + colonIndex - propStartOffset;
            } else {
                // from property start to end of line (except line terminator)
                lenToRemove = lineElement.getEndOffset() - 1 - propStartOffset;
            }
        }
        // remove characters from the property name start offset
        doc.remove(propStartOffset, lenToRemove);
        // add some useful chars depending on data type and presence of successive equal signs
        final String dataType = configurationMeta.getType();
        final boolean isSequence = dataType.contains("List") || dataType.contains("Set") || dataType.contains("[]");
        final boolean preferArray = NbPreferences.forModule(PrefConstants.class)
                .getBoolean(PrefConstants.PREF_ARRAY_NOTATION, false);
        final boolean needEqualSign = !(overwrite && equalSignIndex >= 0);
        StringBuilder sb = new StringBuilder(getText());
        boolean continueCompletion = false;
        int goBack = 0;
        if (dataType.contains("Map")) {
            sb.append(".");
            continueCompletion = canCompleteKey();
        } else if (isSequence) {
            if (preferArray) {
                sb.append("[]");
                goBack = 1;
                if (needEqualSign) {
                    sb.append("=");
                    goBack++;
                }
            } else {
                if (needEqualSign) {
                    sb.append("=");
                    continueCompletion = canCompleteValue();
                }
            }
        } else if (needEqualSign) {
            sb.append("=");
            continueCompletion = canCompleteValue();
        }
        doc.insertString(propStartOffset, sb.toString(), null);
        if (goBack != 0) {
            jtc.setCaretPosition(jtc.getCaretPosition() - goBack);
        }
        // optinally close the code completion box
        if (!continueCompletion) {
            Completion.get().hideAll();
        }
    } catch (BadLocationException ex) {
        Exceptions.printStackTrace(ex);
    }
}
 
Example 16
Source File: XMLJ2eeEditorSupport.java    From netbeans with Apache License 2.0 4 votes vote down vote up
public void saveDocument () throws IOException {
        final StyledDocument doc = getDocument();
        // dependency on xml/core
        String enc = EncodingUtil.detectEncoding(doc);
        if (enc == null) enc = "UTF8"; //!!! // NOI18N
        
        try {
            //test encoding on dummy stream
            new OutputStreamWriter(new ByteArrayOutputStream(1), enc);
            if (!checkCharsetConversion(enc)) {
                return;
            }
            super.saveDocument();
            //moved from Env.save()
// DataObject.setModified() already called as part of super.saveDocument(). The save action is now asynchronous
// in the IDE and super.saveDocument() checks for possible extra document modifications performed during save
// and sets the DO.modified flag accordingly.
//            getDataObject().setModified (false);
        } catch (UnsupportedEncodingException ex) {
            // ask user what next?
            String message = NbBundle.getMessage(XMLJ2eeEditorSupport.class,"TEXT_SAVE_AS_UTF", enc);
            NotifyDescriptor descriptor = new NotifyDescriptor.Confirmation(message);
            Object res = DialogDisplayer.getDefault().notify(descriptor);

            if (res.equals(NotifyDescriptor.YES_OPTION)) {

                // update prolog to new valid encoding                

                try {
                    final int MAX_PROLOG = 1000;                
                    int maxPrologLen = Math.min(MAX_PROLOG, doc.getLength());                
                    final char prolog[] = doc.getText(0, maxPrologLen).toCharArray();
                    int prologLen = 0;  // actual prolog length

                    //parse prolog and get prolog end                
                    if (prolog[0] == '<' && prolog[1] == '?' && prolog[2] == 'x') {

                        // look for delimitting ?>
                        for (int i = 3; i<maxPrologLen; i++) {
                            if (prolog[i] == '?' && prolog[i+1] == '>') {
                                prologLen = i + 1;
                                break;
                            }
                        }                                        
                    }

                    final int passPrologLen = prologLen;

                    Runnable edit = new Runnable() {
                         public void run() {
                             try {

                                doc.remove(0, passPrologLen + 1); // +1 it removes exclusive
                                doc.insertString(0, "<?xml version='1.0' encoding='UTF-8' ?> \n<!-- was: " + new String(prolog, 0, passPrologLen + 1) + " -->", null); // NOI18N

                             } catch (BadLocationException e) {
                                 if (System.getProperty("netbeans.debug.exceptions") != null) // NOI18N
                                     e.printStackTrace();
                             }
                         }
                    };

                    NbDocument.runAtomic(doc, edit);

                    super.saveDocument();
                    //moved from Env.save()
// DataObject.setModified() already called as part of super.saveDocument(). The save action is now asynchronous
// and super.saveDocument() checks for possible extra document modifications performed during save
// and sets the DO.modified flag accordingly.
//                    getDataObject().setModified (false);

                } catch (BadLocationException lex) {
                    Exceptions.printStackTrace(lex);
                }

            } else { // NotifyDescriptor != YES_OPTION
                return;
            }
        }
    }
 
Example 17
Source File: UndoRedoWrappingExampleTest.java    From netbeans with Apache License 2.0 4 votes vote down vote up
public void testDeleteEachTenthCharOnModifiedDocument() throws Exception {
    
    StyledDocument doc = support.openDocument();
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < 20; i++) {
        for (int j = 0; j < 10; j++) {
            sb.append((char)('0' + j));
        }
    }
    assertEquals("empty", 0, doc.getLength());
    doc.insertString(0, sb.toString(), null);
    assertEquals("200 chars there", 200, doc.getLength());
    
    CompoundEdit bigEdit = new CompoundEdit();
    support.getUndoRedo().undoableEditHappened(new UndoableEditEvent(doc, bigEdit));
    
    assertTrue("Big edit will consume other edits", bigEdit.isInProgress());
    
    for (int i = 199; i >= 0; i -= 10) {
        doc.remove(i, 1);
    }
    
    assertTrue("Big edit was still in consume mode", bigEdit.isInProgress());
    bigEdit.end();
    assertFalse("Big edit is over", bigEdit.isInProgress());
    assertTrue("Document is modified", modified);
    assertTrue("We can undo", support.getUndoRedo().canUndo());
    
    if (doc.getText(0, doc.getLength()).indexOf('9') != -1) {
        fail("There should be no 9 in the doc:\n" + doc.getText(0, doc.getLength()));
    }
    
    support.getUndoRedo().undo();
    
    assertEquals("Again 200", 200, doc.getLength());
    assertTrue("Still modified", modified);

    
    assertTrue("We can redo", support.getUndoRedo().canRedo());
    support.getUndoRedo().redo();
    
    assertTrue("Document is modified", modified);
    assertTrue("We can undo", support.getUndoRedo().canUndo());
    
    if (doc.getText(0, doc.getLength()).indexOf('9') != -1) {
        fail("There should be no 9 in the doc:\n" + doc.getText(0, doc.getLength()));
    }
    
}
 
Example 18
Source File: UndoRedoWrappingExampleTest.java    From netbeans with Apache License 2.0 4 votes vote down vote up
public void testDeleteEachTenthCharFromDocument() throws Exception {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < 20; i++) {
        for (int j = 0; j < 10; j++) {
            sb.append((char)('0' + j));
        }
    }
    
    content = sb.toString();
    
    StyledDocument doc = support.openDocument();
    assertEquals("200 chars there", 200, doc.getLength());
    
    CompoundEdit bigEdit = new CompoundEdit();
    support.getUndoRedo().undoableEditHappened(new UndoableEditEvent(doc, bigEdit));
    
    assertTrue("Big edit will consume other edits", bigEdit.isInProgress());
    
    for (int i = 199; i >= 0; i -= 10) {
        doc.remove(i, 1);
    }
    
    assertTrue("Big edit was still in consume mode", bigEdit.isInProgress());
    bigEdit.end();
    assertFalse("Big edit is over", bigEdit.isInProgress());
    assertTrue("Document is modified", modified);
    assertTrue("We can undo", support.getUndoRedo().canUndo());
    
    if (doc.getText(0, doc.getLength()).indexOf('9') != -1) {
        fail("There should be no 9 in the doc:\n" + doc.getText(0, doc.getLength()));
    }
    
    support.getUndoRedo().undo();
    
    assertEquals("Again 200", 200, doc.getLength());
    assertFalse("Not modified anymore", modified);

    
    assertTrue("We can redo", support.getUndoRedo().canRedo());
    support.getUndoRedo().redo();
    
    assertTrue("Document is modified", modified);
    assertTrue("We can undo", support.getUndoRedo().canUndo());
    
    if (doc.getText(0, doc.getLength()).indexOf('9') != -1) {
        fail("There should be no 9 in the doc:\n" + doc.getText(0, doc.getLength()));
    }
    
}
 
Example 19
Source File: PositionBounds.java    From netbeans with Apache License 2.0 4 votes vote down vote up
/** Replaces the text contained in this range.
* This replacement is done atomically, and so is preferable to manual inserts & removes.
* <p>If you are running this from user-oriented code, you may want to wrap it in {@link NbDocument#runAtomicAsUser}.
* @param text new text to insert over existing text
* @exception IOException if any problem occurred during document loading (if that was necessary)
* @exception BadLocationException if the positions are out of the bounds of the document
*/
public void setText(final String text) throws IOException, BadLocationException {
    final CloneableEditorSupport editor = begin.getCloneableEditorSupport();
    final StyledDocument doc = editor.openDocument();
    final BadLocationException[] hold = new BadLocationException[] { null };
    Runnable run = new Runnable() {
            public void run() {
                try {
                    int p1 = begin.getOffset();
                    int p2 = end.getOffset();
                    int len = text.length();

                    if (len == 0) { // 1) set empty string

                        if (p2 > p1) {
                            doc.remove(p1, p2 - p1);
                        }
                    } else { // 2) set non empty string

                        int docLen = doc.getLength();

                        if ((p2 - p1) >= 2) {
                            doc.insertString(p1 + 1, text, null);

                            // [MaM] compute length of inserted string
                            len = doc.getLength() - docLen;
                            doc.remove(p1 + 1 + len, p2 - p1 - 1);
                            doc.remove(p1, 1);
                        } else {
                            // zero or exactly one character:
                            // adjust the positions if they are
                            // biased to not absorb the text inserted at the start/end
                            // it would be ridiculous not to have text set by setText
                            // be part of the bounds.
                            doc.insertString(p1, text, null);

                            // [MaM] compute length of inserted string
                            len = doc.getLength() - docLen;

                            if (p2 > p1) {
                                doc.remove(p1 + len, p2 - p1);
                            }

                            if (begin.getOffset() != p1) {
                                begin = editor.createPositionRef(p1, begin.getPositionBias());
                            }

                            if ((end.getOffset() - p1) != len) {
                                end = editor.createPositionRef(p1 + len, end.getPositionBias());
                            }
                        }
                    }
                } catch (BadLocationException e) {
                    hold[0] = e;
                }
            }
        };

    NbDocument.runAtomic(doc, run);

    if (hold[0] != null) {
        throw hold[0];
    }
}
 
Example 20
Source File: PositionBounds.java    From netbeans with Apache License 2.0 4 votes vote down vote up
/** Replaces the text contained in this range.
* This replacement is done atomically, and so is preferable to manual inserts & removes.
* <p>If you are running this from user-oriented code, you may want to wrap it in {@link NbDocument#runAtomicAsUser}.
* @param text new text to insert over existing text
* @exception BadLocationException if the positions are out of the bounds of the document
*/
public void setText(final String text) throws BadLocationException  {
    final StyledDocument doc = guards.getDocument();
    final BadLocationException[] hold = new BadLocationException[] { null };
    Runnable run = new Runnable() {
            public void run() {
                try {
                    int p1 = begin.getOffset();
                    int p2 = end.getOffset();
                    int len = text.length();

                    if (len == 0) { // 1) set empty string

                        if (p2 > p1) {
                            doc.remove(p1, p2 - p1);
                        }
                    } else { // 2) set non empty string

                        int docLen = doc.getLength();

                        if ((p2 - p1) >= 1) {
                            doc.insertString(p1 + 1, text, null);

                            // [MaM] compute length of inserted string
                            len = doc.getLength() - docLen;
                            doc.remove(p1 + 1 + len, p2 - p1 - 1);
                            doc.remove(p1, 1);
                        } else {
                            // zero or exactly one character:
                            // adjust the positions if they are
                            // biased to not absorb the text inserted at the start/end
                            // it would be ridiculous not to have text set by setText
                            // be part of the bounds.
                            doc.insertString(p1, text, null);

                            // [MaM] compute length of inserted string
                            len = doc.getLength() - docLen;

                            if (p2 > p1) {
                                doc.remove(p1 + len, p2 - p1);
                            }

                            if (begin.getOffset() != p1) {
                                begin = doc.createPosition(p1);
                            }

                            if ((end.getOffset() - p1) != len) {
                                end = doc.createPosition(p1 + len);
                            }
                            assertPositionBounds();
                        }
                    }
                } catch (BadLocationException e) {
                    hold[0] = e;
                }
            }
        };

    GuardedSectionsImpl.doRunAtomic(doc, run);

    if (hold[0] != null) {
        throw hold[0];
    }
}