/** * Metaphase Editor - WYSIWYG HTML Editor Component * Copyright (C) 2010 Rudolf Visagie * Full text of license can be found in com/metaphaseeditor/LICENSE.txt * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * The author can be contacted at metaphase.editor@gmail.com. */ package com.metaphaseeditor.action; import java.awt.event.ActionEvent; import java.util.Enumeration; import java.util.Vector; import javax.swing.JTextPane; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyledEditorKit; import javax.swing.text.html.HTML; import com.metaphaseeditor.MetaphaseEditorPanel; public class ClearFormattingAction extends StyledEditorKit.StyledTextAction { private MetaphaseEditorPanel editorPanel; public ClearFormattingAction(MetaphaseEditorPanel editorPanel, String actionName) { super(actionName); this.editorPanel = editorPanel; } @Override public void actionPerformed(ActionEvent ae) { JTextPane textPane = editorPanel.getHtmlTextPane(); int internalTextLength; Vector skipAttributesList = new Vector(); skipAttributesList.add(HTML.Attribute.SRC.toString()); skipAttributesList.add(HTML.Attribute.BORDER.toString()); skipAttributesList.add(HTML.Attribute.WIDTH.toString()); skipAttributesList.add(HTML.Attribute.HEIGHT.toString()); skipAttributesList.add(HTML.Attribute.ALT.toString()); String selText = textPane.getSelectedText(); int caretOffset = textPane.getSelectionStart(); // clear all paragraph attributes in selection SimpleAttributeSet sasText = new SimpleAttributeSet(textPane.getParagraphAttributes()); for (Enumeration en = sasText.getAttributeNames(); en.hasMoreElements();) { Object elm = en.nextElement(); sasText.removeAttribute(sasText.getAttribute(elm)); } textPane.setParagraphAttributes(sasText, true); // clear all character attributes in selection sasText = null; if (selText != null) { internalTextLength = selText.length(); } else { internalTextLength = 0; } mainLoop: for (int i = caretOffset; i <= caretOffset + internalTextLength; i++) { textPane.setCaretPosition(i); sasText = new SimpleAttributeSet(textPane.getCharacterAttributes().copyAttributes()); Enumeration attributeNames = sasText.getAttributeNames(); while (attributeNames.hasMoreElements()) { Object entryKey = attributeNames.nextElement(); for (int j = 0; j < skipAttributesList.size(); j++) { if (entryKey.toString().equals(skipAttributesList.get(j))) { continue mainLoop; } } if (!entryKey.toString().equals(HTML.Attribute.NAME.toString())) { sasText.removeAttribute(entryKey); } } textPane.select(i, i + 1); textPane.setCharacterAttributes(sasText, true); } editorPanel.refreshAfterAction(); } }