summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/openapi/editor/richcopy
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/openapi/editor/richcopy')
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java13
-rw-r--r--platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/HtmlTransferableData.java14
2 files changed, 23 insertions, 4 deletions
diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java
index 7b47015394e3..54406106b976 100644
--- a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java
+++ b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java
@@ -27,6 +27,7 @@ import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.editor.ex.DisposableIterator;
import com.intellij.openapi.editor.ex.MarkupModelEx;
import com.intellij.openapi.editor.ex.RangeHighlighterEx;
+import com.intellij.openapi.editor.ex.util.EditorUtil;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry;
@@ -55,6 +56,12 @@ import java.awt.*;
import java.util.*;
import java.util.List;
+/**
+ * Generates text with markup (in RTF and HTML formats) for interaction via clipboard with third-party applications.
+ *
+ * Interoperability with the following applications was tested:
+ * MS Office 2010 (Word, PowerPoint, Outlook), OpenOffice (Writer, Impress), Gmail, Mac TextEdit, Mac Mail.
+ */
public class TextWithMarkupProcessor extends CopyPastePostProcessor<RawTextWithMarkup> {
private static final Logger LOG = Logger.getInstance("#" + TextWithMarkupProcessor.class.getName());
@@ -135,7 +142,7 @@ public class TextWithMarkupProcessor extends CopyPastePostProcessor<RawTextWithM
SyntaxInfo syntaxInfo = context.finish();
logSyntaxInfo(syntaxInfo);
- createResult(syntaxInfo);
+ createResult(syntaxInfo, editor);
return ObjectUtils.notNull(myResult, Collections.<RawTextWithMarkup>emptyList());
}
catch (Exception e) {
@@ -155,9 +162,9 @@ public class TextWithMarkupProcessor extends CopyPastePostProcessor<RawTextWithM
}
- void createResult(SyntaxInfo syntaxInfo) {
+ void createResult(SyntaxInfo syntaxInfo, Editor editor) {
myResult = new ArrayList<RawTextWithMarkup>(2);
- myResult.add(new HtmlTransferableData(syntaxInfo));
+ myResult.add(new HtmlTransferableData(syntaxInfo, EditorUtil.getTabSize(editor)));
myResult.add(new RtfTransferableData(syntaxInfo));
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/HtmlTransferableData.java b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/HtmlTransferableData.java
index de3d0c8311be..5a70b278b617 100644
--- a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/HtmlTransferableData.java
+++ b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/HtmlTransferableData.java
@@ -34,6 +34,7 @@ public class HtmlTransferableData extends AbstractSyntaxAwareReaderTransferableD
@NotNull public static final DataFlavor FLAVOR = new DataFlavor("text/html; class=java.io.Reader; charset=UTF-8", "HTML text");
+ private final int myTabSize;
private StringBuilder myResultBuffer;
private ColorRegistry myColorRegistry;
private FontNameRegistry myFontNameRegistry;
@@ -47,11 +48,13 @@ public class HtmlTransferableData extends AbstractSyntaxAwareReaderTransferableD
private int myFontFamily;
private boolean myBold;
private boolean myItalic;
+ private int myCurrentColumn;
private final TIntObjectHashMap<String> myColors = new TIntObjectHashMap<String>();
- public HtmlTransferableData(@NotNull SyntaxInfo syntaxInfo) {
+ public HtmlTransferableData(@NotNull SyntaxInfo syntaxInfo, int tabSize) {
super(syntaxInfo, FLAVOR);
+ myTabSize = tabSize;
}
@Override
@@ -61,6 +64,8 @@ public class HtmlTransferableData extends AbstractSyntaxAwareReaderTransferableD
myFontNameRegistry = mySyntaxInfo.getFontNameRegistry();
myDefaultForeground = myForeground = mySyntaxInfo.getDefaultForeground();
myDefaultBackground = myBackground = mySyntaxInfo.getDefaultBackground();
+ myBold = myItalic = false;
+ myCurrentColumn = 0;
myMaxLength = maxLength;
try {
buildColorMap();
@@ -164,8 +169,15 @@ public class HtmlTransferableData extends AbstractSyntaxAwareReaderTransferableD
case '<': myResultBuffer.append("&lt;"); break;
case '>': myResultBuffer.append("&gt;"); break;
case '&': myResultBuffer.append("&amp;"); break;
+ case ' ': myResultBuffer.append("&#32;"); break;
+ case '\n': myResultBuffer.append("<br>"); myCurrentColumn = 0; break;
+ case '\t':
+ int newColumn = (myCurrentColumn / myTabSize + 1) * myTabSize;
+ for (; myCurrentColumn < newColumn; myCurrentColumn++) myResultBuffer.append("&#32;");
+ break;
default: myResultBuffer.append(c);
}
+ myCurrentColumn++;
}
}