diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/openapi/editor/richcopy')
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("<"); break; case '>': myResultBuffer.append(">"); break; case '&': myResultBuffer.append("&"); break; + case ' ': myResultBuffer.append(" "); break; + case '\n': myResultBuffer.append("<br>"); myCurrentColumn = 0; break; + case '\t': + int newColumn = (myCurrentColumn / myTabSize + 1) * myTabSize; + for (; myCurrentColumn < newColumn; myCurrentColumn++) myResultBuffer.append(" "); + break; default: myResultBuffer.append(c); } + myCurrentColumn++; } } |