diff --git a/platform/platform-resources/src/META-INF/XmlPlugin.xml b/platform/platform-resources/src/META-INF/XmlPlugin.xml index 952c037da075..c85abc5e98c4 100644 --- a/platform/platform-resources/src/META-INF/XmlPlugin.xml +++ b/platform/platform-resources/src/META-INF/XmlPlugin.xml @@ -325,11 +325,6 @@ - - diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/HtmlCopyPastePreProcessor.java b/xml/impl/src/com/intellij/codeInsight/editorActions/HtmlCopyPastePreProcessor.java deleted file mode 100644 index 8fa4d0518e19..000000000000 --- a/xml/impl/src/com/intellij/codeInsight/editorActions/HtmlCopyPastePreProcessor.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.codeInsight.editorActions; - -import com.intellij.lang.html.HTMLLanguage; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.CaretStateTransferableData; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.RawText; -import com.intellij.openapi.ide.CopyPasteManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.PsiFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.text.BadLocationException; -import javax.swing.text.DefaultStyledDocument; -import javax.swing.text.html.HTMLEditorKit; -import javax.swing.text.rtf.RTFEditorKit; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; - -/** - * @author Dennis.Ushakov - */ -public class HtmlCopyPastePreProcessor implements CopyPastePreProcessor { - private static final Logger LOG = Logger.getInstance(HtmlCopyPastePreProcessor.class); - - private static final DataFlavor ourHtmlDataFlavor = buildDataFlavor("text/html;class=java.lang.String"); - private static final DataFlavor ourRtfDataFlavor = buildDataFlavor("text/rtf;class=java.io.InputStream"); - - private static DataFlavor buildDataFlavor(final String flavor) { - try { - return new DataFlavor(flavor); - } - catch (ClassNotFoundException e) { - return null; - } - } - - @Nullable - @Override - public String preprocessOnCopy(PsiFile file, int[] startOffsets, int[] endOffsets, String text) { - return null; - } - - @NotNull - @Override - public String preprocessOnPaste(Project project, PsiFile file, Editor editor, String text, RawText rawText) { - if (file.getLanguage() != HTMLLanguage.INSTANCE) return text; - - CopyPasteManager manager = CopyPasteManager.getInstance(); - if (manager.areDataFlavorsAvailable(ourHtmlDataFlavor, ourRtfDataFlavor)) { - Transferable content = manager.getContents(); - if (content != null && !content.isDataFlavorSupported(CaretStateTransferableData.FLAVOR)) { - try { - final String data = content.isDataFlavorSupported(ourHtmlDataFlavor) ? (String)content.getTransferData(ourHtmlDataFlavor) : - convertFromRtfStream((InputStream)content.getTransferData(ourRtfDataFlavor)); - if (!StringUtil.isEmpty(data)) return data; - } - catch (UnsupportedFlavorException | IOException e) { - LOG.error(e); - } - } - } - return text; - } - - private static String convertFromRtfStream(InputStream stream) { - final DefaultStyledDocument document = new DefaultStyledDocument(); - try { - new RTFEditorKit().read(stream, document, 0); - final StringWriter writer = new StringWriter(); - new HTMLEditorKit().write(writer, document, 0, document.getLength()); - return writer.toString(); - } - catch (IOException | BadLocationException e) { - LOG.error(e); - } - return null; - } -} diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlCopyPastePreProcessor.java b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlCopyPastePreProcessor.java deleted file mode 100644 index fa2f9c276a40..000000000000 --- a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlCopyPastePreProcessor.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.codeInsight.editorActions; - -import com.intellij.lang.ASTNode; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.RawText; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.impl.source.tree.TreeUtil; -import com.intellij.psi.impl.source.xml.behavior.EncodeEachSymbolPolicy; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtilCore; -import com.intellij.psi.xml.*; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @author Dmitry Avdeev - */ -public class XmlCopyPastePreProcessor implements CopyPastePreProcessor { - - private static final EncodeEachSymbolPolicy ENCODE_EACH_SYMBOL_POLICY = new EncodeEachSymbolPolicy(); - - @Override - @Nullable - public String preprocessOnCopy(PsiFile file, int[] startOffsets, int[] endOffsets, String text) { - return null; - } - - @Override - @NotNull - public String preprocessOnPaste(Project project, PsiFile file, Editor editor, String text, RawText rawText) { - final Document document = editor.getDocument(); - PsiDocumentManager.getInstance(project).commitDocument(document); - int caretOffset = editor.getCaretModel().getOffset(); - PsiElement element = PsiUtilCore.getElementAtOffset(file, caretOffset); - - ASTNode node = element.getNode(); - if (node != null) { - boolean hasMarkup = text.indexOf('>') >= 0 || text.indexOf('<') >= 0; - if (element.getTextOffset() == caretOffset && - node.getElementType() == XmlTokenType.XML_END_TAG_START && - node.getTreePrev().getElementType() == XmlTokenType.XML_TAG_END) { - - return hasMarkup ? text : encode(text, element); - } else { - XmlElement parent = PsiTreeUtil.getParentOfType(element, XmlText.class, XmlAttributeValue.class); - if (parent != null) { - if (parent instanceof XmlText && hasMarkup) { - return text; - } - - if (TreeUtil.findParent(node, XmlElementType.XML_CDATA) == null && - TreeUtil.findParent(node, XmlElementType.XML_COMMENT) == null) { - return encode(text, element); - } - } - } - } - return text; - } - - private static String encode(String text, PsiElement element) { - ASTNode astNode = ENCODE_EACH_SYMBOL_POLICY.encodeXmlTextContents(text, element); - return astNode.getTreeParent().getText(); - } -}