Java Code Examples for javax.swing.text.Element#getAttributes()

The following examples show how to use javax.swing.text.Element#getAttributes() . 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: MWPaneFormatter.java    From wpcleaner with Apache License 2.0 6 votes vote down vote up
/**
 * @param pane Text pane.
 * @param element Element.
 * @return End of the last element having the same UUID as element.
 */
public static int getUUIDEndOffet(JTextPane pane, Element element) {
  if (element == null) {
    return Integer.MAX_VALUE;
  }
  if (pane == null) {
    return element.getEndOffset();
  }
  Object uuid = element.getAttributes().getAttribute(ATTRIBUTE_UUID);
  if (uuid == null) {
    return element.getEndOffset();
  }
  int endOffset = element.getEndOffset();
  int length = pane.getText().length();
  while (endOffset < length) {
    Element tmpElement = pane.getStyledDocument().getCharacterElement(endOffset);
    if ((tmpElement == null) || (tmpElement.getAttributes() == null)) {
      return endOffset;
    }
    if (!uuid.equals(tmpElement.getAttributes().getAttribute(ATTRIBUTE_UUID))) {
      return endOffset;
    }
    endOffset = tmpElement.getEndOffset();
  }
  return length;
}
 
Example 2
Source File: MWPaneFormatter.java    From wpcleaner with Apache License 2.0 6 votes vote down vote up
/**
 * @param pane Text pane.
 * @param element Element.
 * @return Start of the first element having the same UUID as element.
 */
public static int getUUIDStartOffset(JTextPane pane, Element element) {
  if (element == null) {
    return Integer.MIN_VALUE;
  }
  if (pane == null) {
    return element.getStartOffset();
  }
  Object uuid = element.getAttributes().getAttribute(ATTRIBUTE_UUID);
  if (uuid == null) {
    return element.getStartOffset();
  }
  int startOffset = element.getStartOffset();
  while (startOffset > 0) {
    Element tmpElement = pane.getStyledDocument().getCharacterElement(startOffset - 1);
    if ((tmpElement == null) || (tmpElement.getAttributes() == null)) {
      return startOffset;
    }
    if (!uuid.equals(tmpElement.getAttributes().getAttribute(ATTRIBUTE_UUID))) {
      return startOffset;
    }
    startOffset = tmpElement.getStartOffset();
  }
  return 0;
}
 
Example 3
Source File: MWPaneSelectionManager.java    From wpcleaner with Apache License 2.0 6 votes vote down vote up
/**
 * Select next occurrence of text. 
 */
public void selectNextOccurrence() {
  StyledDocument doc = textPane.getStyledDocument();
  int length = doc.getLength();
  int lastEnd = Integer.MAX_VALUE;
  for (int pos = textPane.getSelectionEnd() + 1; pos < length; pos = lastEnd) {
    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_OCCURRENCE) != Boolean.FALSE)) {
      select(run);
      return;
    }
  }
  selectFirstOccurrence();
}
 
Example 4
Source File: FSwingHtml.java    From pra with MIT License 6 votes vote down vote up
public static VectorX<Element> matchChild(Element e
			, Attribute ab, String regex){
    VectorX<Element> vE= new VectorX<Element>(Element.class);
    
    int count = e.getElementCount();
    for (int i = 0; i < count; i++) {
      Element c = e.getElement(i);
      AttributeSet mAb = c.getAttributes();
      String s = (String) mAb.getAttribute(ab);	      
      if (s==null)continue;
//    System.out.println(name+" "+ab+"="+s);
      if (s.matches(regex))
        	vE.add(c);

    }
		return vE;
	}
 
Example 5
Source File: HyperlinkSupport.java    From netbeans with Apache License 2.0 6 votes vote down vote up
@Override
public void mouseClicked(MouseEvent e) {
    try {
        if (SwingUtilities.isLeftMouseButton(e)) {
            JTextPane pane = (JTextPane)e.getSource();
            StyledDocument doc = pane.getStyledDocument();
            Element elem = doc.getCharacterElement(pane.viewToModel(e.getPoint()));
            AttributeSet as = elem.getAttributes();
            Link link = (Link)as.getAttribute(LINK_ATTRIBUTE);
            if (link != null) {
                link.onClick(elem.getDocument().getText(elem.getStartOffset(), elem.getEndOffset() - elem.getStartOffset()));
            }
        }
    } catch(Exception ex) {
        Support.LOG.log(Level.SEVERE, null, ex);
    }
}
 
Example 6
Source File: HTMLPanel.java    From littleluck with Apache License 2.0 5 votes vote down vote up
@Override
public View create(Element element) {
    AttributeSet attrs = element.getAttributes();
    Object elementName =
            attrs.getAttribute(AbstractDocument.ElementNameAttribute);
    Object o = (elementName != null) ?
            null : attrs.getAttribute(StyleConstants.NameAttribute);
    if (o instanceof HTML.Tag) {
        if (o == HTML.Tag.OBJECT) {
            return new ComponentView(element);
        }
    }
    return super.create(element);
}
 
Example 7
Source File: MWPaneCheckWikiPopupListener.java    From wpcleaner with Apache License 2.0 5 votes vote down vote up
/**
 * Construct popup menu.
 * 
 * @param textPane Text pane.
 * @param position Position in text.
 * @param pageAnalysis Page analysis.
 */
@Override
protected JPopupMenu createPopup(
    MWPane textPane, int position,
    PageAnalysis pageAnalysis) {
  if ((textPane == null) || (pageAnalysis == null)) {
    return null;
  }
  Element element = textPane.getStyledDocument().getCharacterElement(position);
  if (element == null) {
    return null;
  }

  // Check if it's for Check Wiki
  AttributeSet attributes = element.getAttributes();
  Object attrInfo = attributes.getAttribute(MWPaneFormatter.ATTRIBUTE_INFO);
  if (!(attrInfo instanceof CheckErrorResult)) {
    return null;
  }

  CheckErrorResult info = (CheckErrorResult) attrInfo;
  MWPaneCheckWikiMenuCreator menu = new MWPaneCheckWikiMenuCreator();
  JPopupMenu popup = menu.createPopupMenu(null);
  menu.addInfo(popup, element, textPane, info);
  menu.addItemCopyPaste(popup, textPane);
  return popup;
}
 
Example 8
Source File: FormattedTextHelper.java    From PolyGlot with MIT License 5 votes vote down vote up
/**
 * Recursing method implementing functionality of storageFormat()
 * @param e element to be cycled through
 * @param pane top parent JTextPane
 * @return string format value of current node and its children
 * @throws BadLocationException if unable to create string format
 */
private static String storeFormatRecurse(Element e, JTextPane pane) throws Exception {
    String ret = "";
    int ec = e.getElementCount();

    if (ec == 0) {
        // if more media addable in the future, this is where to process it...
        // hard coded values because they're hard coded in Java. Eh.
        if (e.getAttributes().getAttribute("$ename") != null
                && e.getAttributes().getAttribute("$ename").equals("icon")) {
            if (e.getAttributes().getAttribute(PGTUtil.IMAGE_ID_ATTRIBUTE) == null) {
                throw new Exception("ID For image not stored. Unable to store section.");
            }
            
            ret += "<img src=\"" + e.getAttributes().getAttribute(PGTUtil.IMAGE_ID_ATTRIBUTE) + "\">";
        } else {
            int start = e.getStartOffset();
            int len = e.getEndOffset() - start;
            if (start < pane.getDocument().getLength()) {
                AttributeSet a = e.getAttributes();
                String font = StyleConstants.getFontFamily(a);
                String fontColor = colorToText(StyleConstants.getForeground(a));
                int fontSize = StyleConstants.getFontSize(a);
                ret += "<font face=\"" + font + "\""
                        + "size=\"" + fontSize + "\""
                        + "color=\"" + fontColor + "\"" + ">";
                ret += pane.getDocument().getText(start, len);
                ret += "</font>";
            }
        }
    } else {
        for (int i = 0; i < ec; i++) {
            ret += storeFormatRecurse(e.getElement(i), pane);
        }
    }

    return ret;
}
 
Example 9
Source File: KTextEdit.java    From stendhal with GNU General Public License v2.0 5 votes vote down vote up
@Override
public void mouseClicked(MouseEvent e) {
	StyledDocument doc = (StyledDocument) textPane.getDocument();
	Element ele = doc.getCharacterElement(textPane.viewToModel(e.getPoint()));
	AttributeSet as = ele.getAttributes();
	Object fla = as.getAttribute("linkact");
	if (fla instanceof LinkListener) {
		try {
			((LinkListener) fla).linkClicked(doc.getText(ele.getStartOffset(), ele.getEndOffset() - ele.getStartOffset()));
		} catch (BadLocationException exc) {
			logger.error("Trying to extract link from invalid range", exc);
		}
	}
}
 
Example 10
Source File: MainPanel.java    From java-swing-tips with MIT License 5 votes vote down vote up
private void setElementColor(Element element, String color) {
  AttributeSet attrs = element.getAttributes();
  Object o = attrs.getAttribute(HTML.Tag.A);
  if (o instanceof MutableAttributeSet) {
    MutableAttributeSet a = (MutableAttributeSet) o;
    a.addAttribute(HTML.Attribute.COLOR, color);
  }
}
 
Example 11
Source File: SyntaxDocument.java    From binnavi with Apache License 2.0 5 votes vote down vote up
private void highlightLinesAfter(final String content, final int line) {
  final int offset = rootElement.getElement(line).getEndOffset();

  // Start/End delimiter not found, nothing to do

  int startDelimiter = indexOf(content, getStartDelimiter(), offset);
  int endDelimiter = indexOf(content, getEndDelimiter(), offset);

  if (startDelimiter < 0) {
    startDelimiter = content.length();
  }

  if (endDelimiter < 0) {
    endDelimiter = content.length();
  }

  final int delimiter = Math.min(startDelimiter, endDelimiter);

  if (delimiter < offset) {
    return;
  }

  // Start/End delimiter found, reapply highlighting

  final int endLine = rootElement.getElementIndex(delimiter);

  for (int i = line + 1; i < endLine; i++) {
    final Element branch = rootElement.getElement(i);
    final Element leaf = doc.getCharacterElement(branch.getStartOffset());
    final AttributeSet as = leaf.getAttributes();

    if (as.isEqual(comment)) {
      applyHighlighting(content, i);
    }
  }
}
 
Example 12
Source File: TextEditorGUI.java    From trygve with GNU General Public License v2.0 5 votes vote down vote up
public ArrayList<Integer> breakpointByteOffsets() {
	State state = State.LookingForField;
	ArrayList<Integer> retval = new ArrayList<Integer>();
	
	final StyledDocument doc = (StyledDocument)editPane.getDocument();
	final SimpleAttributeSet breakpointColored = new SimpleAttributeSet(); 
	StyleConstants.setBackground(breakpointColored, Color.cyan);
	
	for(int i = 0; i < doc.getLength(); i++) {
		final Element element = doc.getCharacterElement(i);
	    final AttributeSet set = element.getAttributes();
	    final Color backgroundColor = StyleConstants.getBackground(set);
	    switch (state) {
	    case LookingForField:
	    	if (true == backgroundColor.equals(Color.cyan)) {
	    		state = State.InField;
	    		retval.add(new Integer(i));
	    	}
	    	break;
	    case InField:
	    	if (false == backgroundColor.equals(Color.cyan)) {
	    		state = State.LookingForField;
	    	} else if (element.toString().equals("\n")) {
	    		state = State.LookingForField;
	    	}
	    	break;
	    default:
	    	assert (false);
	    	break;
	    }
	}
	
	return retval;
}
 
Example 13
Source File: MainPanel.java    From java-swing-tips with MIT License 5 votes vote down vote up
private Optional<String> getSpanTitleAttribute(HTMLDocument doc, int pos) {
  // HTMLDocument doc = (HTMLDocument) editor.getDocument();
  Element elem = doc.getCharacterElement(pos);
  // if (!doesElementContainLocation(editor, elem, pos, e.getX(), e.getY())) {
  //   elem = null;
  // }
  // if (elem != null) {
  AttributeSet a = elem.getAttributes();
  AttributeSet span = (AttributeSet) a.getAttribute(HTML.Tag.SPAN);
  return Optional.ofNullable(span).map(s -> Objects.toString(s.getAttribute(HTML.Attribute.TITLE)));
}
 
Example 14
Source File: FSwingHtml.java    From pra with MIT License 5 votes vote down vote up
public static boolean hasAttribute(Element e, Attribute ab){
	AttributeSet mAb=e.getAttributes();
   for (Enumeration it = mAb.getAttributeNames() ; it.hasMoreElements() ;) {
   	Object s= it.nextElement();
     if (s.equals(ab))
     	return true;
   }
	return false;		
}
 
Example 15
Source File: RTFParser.java    From birt with Eclipse Public License 1.0 5 votes vote down vote up
private static void parseElement( DefaultStyledDocument document,
		Element parent, RTFDocumentHandler handler, boolean lostLast )
{
	for ( int i = 0; i < parent.getElementCount( ); i++ )
	{
		if (lostLast && i==parent.getElementCount( )-1 && parent.getElementCount( ) != 1)
		{
			break;
		}
		Element element = parent.getElement( i );
		AttributeSet attributeset = element.getAttributes( );
		handler.startElement( element.getName( ), attributeset );
		if ( element.getName( ).equalsIgnoreCase( "content" ) )
		{
			try
			{
				int start = element.getStartOffset( );
				int end = element.getEndOffset( );
				String s = document.getText( start, end - start );
				handler.content( s );
			}
			catch ( BadLocationException e )
			{
			}
		}
		parseElement( document, element, handler, false );
		handler.endElement( element.getName( ) );
	}
}
 
Example 16
Source File: ButtonCapture.java    From SikuliX1 with MIT License 4 votes vote down vote up
private boolean replaceButton(Element src, String imgFullPath) {
  if (captureCancelled) {
    if (_codePane.showThumbs && PreferencesUser.get().getPrefMoreImageThumbs()
            || !_codePane.showThumbs) {
      return true;
    }
  }
  int start = src.getStartOffset();
  int end = src.getEndOffset();
  int old_sel_start = _codePane.getSelectionStart(),
          old_sel_end = _codePane.getSelectionEnd();
  try {
    StyledDocument doc = (StyledDocument) src.getDocument();
    String text = doc.getText(start, end - start);
    Debug.log(3, text);
    for (int i = start; i < end; i++) {
      Element elm = doc.getCharacterElement(i);
      if (elm.getName().equals(StyleConstants.ComponentElementName)) {
        AttributeSet attr = elm.getAttributes();
        Component com = StyleConstants.getComponent(attr);
        boolean isButton = com instanceof ButtonCapture;
        boolean isLabel = com instanceof EditorPatternLabel;
        if (isButton || isLabel && ((EditorPatternLabel) com).isCaptureButton()) {
          Debug.log(5, "button is at " + i);
          int oldCaretPos = _codePane.getCaretPosition();
          _codePane.select(i, i + 1);
          if (!_codePane.showThumbs) {
            _codePane.insertString((new EditorPatternLabel(_codePane, imgFullPath, true)).toString());
          } else {
            if (PreferencesUser.get().getPrefMoreImageThumbs()) {
              com = new EditorPatternButton(_codePane, imgFullPath);
            } else {
              if (captureCancelled) {
                com = new EditorPatternLabel(_codePane, "");
              } else {
                com = new EditorPatternLabel(_codePane, imgFullPath, true);
              }
            }
            _codePane.insertComponent(com);
          }
          _codePane.setCaretPosition(oldCaretPos);
          break;
        }
      }
    }
  } catch (BadLocationException ble) {
    Debug.error(me + "Problem inserting Button!\n%s", ble.getMessage());
  }
  _codePane.select(old_sel_start, old_sel_end);
  _codePane.requestFocus();
  return true;
}
 
Example 17
Source File: ImageView.java    From jdk8u_jdk with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Recreates and reloads the image.  This should
 * only be invoked from <code>refreshImage</code>.
 */
private void updateImageSize() {
    int newWidth = 0;
    int newHeight = 0;
    int newState = 0;
    Image newImage = getImage();

    if (newImage != null) {
        Element elem = getElement();
        AttributeSet attr = elem.getAttributes();

        // Get the width/height and set the state ivar before calling
        // anything that might cause the image to be loaded, and thus the
        // ImageHandler to be called.
        newWidth = getIntAttr(HTML.Attribute.WIDTH, -1);
        newHeight = getIntAttr(HTML.Attribute.HEIGHT, -1);

        if (newWidth > 0) {
            newState |= WIDTH_FLAG;
        }

        if (newHeight > 0) {
            newState |= HEIGHT_FLAG;
        }

        /*
        If synchronous loading flag is set, then make sure that the image is
        scaled appropriately.
        Otherwise, the ImageHandler::imageUpdate takes care of scaling the image
        appropriately.
        */
        if (getLoadsSynchronously()) {
            Image img;
            synchronized(this) {
                img = image;
            }
            int w = img.getWidth(imageObserver);
            int h = img.getHeight(imageObserver);
            if (w > 0 && h > 0) {
                Dimension d = adjustWidthHeight(w, h);
                newWidth = d.width;
                newHeight = d.height;
                newState |= (WIDTH_FLAG | HEIGHT_FLAG);
            }
        }

        // Make sure the image starts loading:
        if ((newState & (WIDTH_FLAG | HEIGHT_FLAG)) != 0) {
            Toolkit.getDefaultToolkit().prepareImage(newImage, newWidth,
                                                     newHeight,
                                                     imageObserver);
        }
        else {
            Toolkit.getDefaultToolkit().prepareImage(newImage, -1, -1,
                                                     imageObserver);
        }

        boolean createText = false;
        synchronized(this) {
            // If imageloading failed, other thread may have called
            // ImageLoader which will null out image, hence we check
            // for it.
            if (image != null) {
                if ((newState & WIDTH_FLAG) == WIDTH_FLAG || width == 0) {
                    width = newWidth;
                }
                if ((newState & HEIGHT_FLAG) == HEIGHT_FLAG ||
                    height == 0) {
                    height = newHeight;
                }
            }
            else {
                createText = true;
                if ((newState & WIDTH_FLAG) == WIDTH_FLAG) {
                    width = newWidth;
                }
                if ((newState & HEIGHT_FLAG) == HEIGHT_FLAG) {
                    height = newHeight;
                }
            }
            state = state | newState;
            state = (state | LOADING_FLAG) ^ LOADING_FLAG;
        }
        if (createText) {
            // Only reset if this thread determined image is null
            updateAltTextView();
        }
    }
    else {
        width = height = DEFAULT_HEIGHT;
        updateAltTextView();
    }
}
 
Example 18
Source File: BackgroundView.java    From SwingBox with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * 
 */
public BackgroundView(Element elem)
{
    super(elem);
    AttributeSet tmpAttr = elem.getAttributes();
    Object obj = tmpAttr.getAttribute(Constants.ATTRIBUTE_BOX_REFERENCE);
    anchor = (Anchor) tmpAttr.getAttribute(Constants.ATTRIBUTE_ANCHOR_REFERENCE);
    Integer i = (Integer) tmpAttr.getAttribute(Constants.ATTRIBUTE_DRAWING_ORDER);
    order = (i == null) ? -1 : i;

    if (obj instanceof ElementBox)
    {
        box = (ElementBox) obj;
    }
    else
    {
        throw new IllegalArgumentException("Box reference is not an instance of ElementBox");
    }
    
    if (box.toString().contains("\"btn\""))
        System.out.println("jo!");
    
    if (box.getElement() != null)
    {
        Map<String, String> elementAttributes = anchor.getProperties();
        org.w3c.dom.Element pelem = Anchor.findAnchorElement(box.getElement());
        if (pelem != null)
        {
            anchor.setActive(true);
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_HREF, pelem.getAttribute("href"));
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_NAME, pelem.getAttribute("name"));
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_TITLE, pelem.getAttribute("title"));
            String target = pelem.getAttribute("target");
            if ("".equals(target))
            {
                target = "_self";
            }
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_TARGET, target);
        }
        else
        {
            anchor.setActive(false);
            elementAttributes.clear();
        }
    }
    
}
 
Example 19
Source File: TextBoxView.java    From SwingBox with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Instantiates a new text based view, able to display rich text. This view
 * corresponds to TextBox in CSSBox. <br>
 * <a href="http://www.w3.org/TR/CSS21/box.html">Box Model</a>
 * 
 * @param elem
 *            the elem
 * 
 */

public TextBoxView(Element elem)
{
    super(elem);
    AttributeSet tmpAttr = elem.getAttributes();
    Object obj = tmpAttr.getAttribute(Constants.ATTRIBUTE_BOX_REFERENCE);
    anchor = (Anchor) tmpAttr.getAttribute(Constants.ATTRIBUTE_ANCHOR_REFERENCE);
    Integer i = (Integer) tmpAttr.getAttribute(Constants.ATTRIBUTE_DRAWING_ORDER);
    order = (i == null) ? -1 : i;

    if (obj instanceof TextBox)
    {
        box = (TextBox) obj;
    }
    else
    {
        throw new IllegalArgumentException("Box reference is not an instance of TextBox");
    }
    
    if (box.getNode() != null && box.getNode().getParentNode() instanceof org.w3c.dom.Element)
    {
        org.w3c.dom.Element pelem = Anchor.findAnchorElement((org.w3c.dom.Element) box.getNode().getParentNode());
        Map<String, String> elementAttributes = anchor.getProperties();

        if (pelem != null)
        {
            anchor.setActive(true);
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_HREF, pelem.getAttribute("href"));
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_NAME, pelem.getAttribute("name"));
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_TITLE, pelem.getAttribute("title"));
            String target = pelem.getAttribute("target");
            if ("".equals(target))
            {
                target = "_self";
            }
            elementAttributes.put(Constants.ELEMENT_A_ATTRIBUTE_TARGET, target);
            // System.err.println("## Anchor at : " + this + " attr: "+
            // elementAttributes);
        }
        else
        {
            anchor.setActive(false);
            elementAttributes.clear();
        }
    }

}
 
Example 20
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
    }
  }
}