include/sot/formats.hxx | 3 ++- include/svtools/strings.hrc | 1 + solenv/inc/mime.types | 1 + sot/source/base/exchange.cxx | 1 + sot/source/base/formats.cxx | 11 +++++++++++ svtools/source/dialogs/insdlg.cxx | 1 + sw/source/uibase/dochdl/swdtflvr.cxx | 26 ++++++++++++++++++++++++++ vcl/source/treelist/transfer.cxx | 4 ++++ vcl/win/dtrans/ftransl.cxx | 2 ++ 9 files changed, 49 insertions(+), 1 deletion(-)
New commits: commit 292bafa67dcfb6d77680dcd77ae8125167029050 Author: Ujjawal Kumar <randomfores...@gmail.com> AuthorDate: Sat Jul 19 18:43:50 2025 +0530 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Wed Aug 27 11:13:06 2025 +0200 tdf#162153 Introduce clipboard support for Markdown format. * Can be used under "Paste As" by manually registering markdown mime type "text/markdown" using cli tools like xclip and wl-paste. * Example - echo 'World of **Markdown**' | wl-copy --type text/markdown Change-Id: I2f4c7eacf201f65eab8361a50eb246988caf9f29 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190266 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> diff --git a/include/sot/formats.hxx b/include/sot/formats.hxx index fbfa3754bd82..a94fd34e746c 100644 --- a/include/sot/formats.hxx +++ b/include/sot/formats.hxx @@ -176,8 +176,9 @@ enum class SotClipboardFormatId : sal_uInt32 STRING_TSVC = 146, PDF = 147, SVG = 148, + MARKDOWN = 149, // the point at which we start allocating "runtime" format IDs - USER_END = SVG + USER_END = MARKDOWN }; /** Make it easier to iterate over format IDs */ diff --git a/include/svtools/strings.hrc b/include/svtools/strings.hrc index faa3e7cd4b2a..c422b58e89ea 100644 --- a/include/svtools/strings.hrc +++ b/include/svtools/strings.hrc @@ -68,6 +68,7 @@ #define STR_FORMAT_ID_STAROBJECT_PAINTDOC NC_("STR_FORMAT_ID_STAROBJECT_PAINTDOC", "StarObject Paint object") #define STR_FORMAT_ID_HTML NC_("STR_FORMAT_ID_HTML", "HyperText Markup Language (HTML)") #define STR_FORMAT_ID_HTML_SIMPLE NC_("STR_FORMAT_ID_HTML_SIMPLE", "Stripped HyperText Markup Language (Simple HTML)") +#define STR_FORMAT_ID_MARKDOWN NC_("STR_FORMAT_ID_MARKDOWN", "Markdown") #define STR_FORMAT_ID_BIFF_5 NC_("STR_FORMAT_ID_BIFF_5", "Microsoft Excel Binary Interchange Format 5.0/95 (Biff5)") #define STR_FORMAT_ID_BIFF_8 NC_("STR_FORMAT_ID_BIFF_8", "Microsoft Excel Binary Interchange Format 97/2000/XP/2003 (Biff8)") #define STR_FORMAT_ID_SYLK NC_("STR_FORMAT_ID_SYLK", "Sylk") diff --git a/solenv/inc/mime.types b/solenv/inc/mime.types index e5afd9376a93..ed0fba278054 100644 --- a/solenv/inc/mime.types +++ b/solenv/inc/mime.types @@ -159,6 +159,7 @@ text/html html htm text/plain asc txt c cc h hh cpp hpp text/richtext rtx text/rtf rtf +text/markdown md markdown text/sgml sgml sgm text/tab-separated-values tsv text/x-setext etx diff --git a/sot/source/base/exchange.cxx b/sot/source/base/exchange.cxx index c7048b166c6f..3e9855162e22 100644 --- a/sot/source/base/exchange.cxx +++ b/sot/source/base/exchange.cxx @@ -202,6 +202,7 @@ const DataFlavorRepresentation* FormatArray_Impl() /*146 SotClipboardFormatId::STRING_TSVC*/ { u"application/x-libreoffice-tsvc"_ustr, "Text TSV-Calc", &cppu::UnoType<OUString>::get() }, /*147 SotClipboardFormatId::PDF*/ { u"application/pdf"_ustr, "PDF Document", &cppu::UnoType<Sequence<sal_Int8>>::get() }, /*148 SotClipboardFormatId::SVG*/ { u"image/svg+xml;windows_formatname=\"image/svg+xml\""_ustr, "SVG", &cppu::UnoType<Sequence<sal_Int8>>::get() }, + /*149 SotClipboardFormatId::MARKDOWN*/ { u"text/markdown"_ustr, "Markdown", &cppu::UnoType<Sequence<sal_Int8>>::get() }, }; return &aInstance[0]; }; diff --git a/sot/source/base/formats.cxx b/sot/source/base/formats.cxx index de9c7616ff2f..c927a79366db 100644 --- a/sot/source/base/formats.cxx +++ b/sot/source/base/formats.cxx @@ -140,6 +140,7 @@ SotAction_Impl const aEXCHG_DEST_DOC_TEXTFRAME_Def[] = { SotClipboardFormatId::HTML, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_IN_ACTION_COPY }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::STRING, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::SONLK, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::INET_IMAGE, EXCHG_IN_ACTION_COPY }, @@ -170,6 +171,7 @@ SotAction_Impl const aEXCHG_DEST_DOC_TEXTFRAME_Move[] = { SotClipboardFormatId::HTML, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RICHTEXT, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::NETSCAPE_IMAGE, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, @@ -201,6 +203,7 @@ SotAction_Impl const aEXCHG_DEST_DOC_TEXTFRAME_Copy[] = { SotClipboardFormatId::HTML, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RICHTEXT, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::NETSCAPE_IMAGE, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, @@ -265,6 +268,7 @@ SotAction_Impl const aEXCHG_DEST_DOC_TEXTFRAME_WEB_Move[] = { SotClipboardFormatId::HTML, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RICHTEXT, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::NETSCAPE_IMAGE, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, @@ -290,6 +294,7 @@ SotAction_Impl const aEXCHG_DEST_DOC_TEXTFRAME_WEB_Copy[] = { SotClipboardFormatId::HTML, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RICHTEXT, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::NETSCAPE_IMAGE, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, @@ -770,6 +775,7 @@ SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_Def[] = { SotClipboardFormatId::HTML, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_IN_ACTION_COPY }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::RICHTEXT, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::SVIM, EXCHG_IN_ACTION_COPY }, @@ -807,6 +813,7 @@ SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_Move[] = { SotClipboardFormatId::HTML, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RICHTEXT, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::STRING, EXCHG_OUT_ACTION_INSERT_STRING }, @@ -839,6 +846,7 @@ SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_Copy[] = #ifndef MACOSX { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, #endif + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::PDF, EXCHG_OUT_ACTION_INSERT_GRAPH, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::PNG, EXCHG_OUT_ACTION_INSERT_BITMAP, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::JPEG, EXCHG_OUT_ACTION_INSERT_BITMAP, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, @@ -888,6 +896,7 @@ SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_WEB_Def[] = { SotClipboardFormatId::HTML, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_IN_ACTION_COPY }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::SVIM, EXCHG_IN_ACTION_COPY }, { SotClipboardFormatId::NETSCAPE_IMAGE, EXCHG_IN_ACTION_COPY }, @@ -912,6 +921,7 @@ SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_WEB_Move[] = { SotClipboardFormatId::HTML, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::STRING, EXCHG_OUT_ACTION_INSERT_STRING }, { SotClipboardFormatId::GDIMETAFILE, EXCHG_OUT_ACTION_INSERT_GDIMETAFILE, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, @@ -931,6 +941,7 @@ SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_WEB_Copy[] = { SotClipboardFormatId::HTML, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_NO_COMMENT, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::HTML_SIMPLE, EXCHG_OUT_ACTION_INSERT_HTML, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, + { SotClipboardFormatId::MARKDOWN, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertImageMap | SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::RTF, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::NETSCAPE_IMAGE, EXCHG_IN_ACTION_COPY, SotExchangeActionFlags::InsertTargetUrl, 0 }, { SotClipboardFormatId::STRING, EXCHG_OUT_ACTION_INSERT_STRING, SotExchangeActionFlags::InsertTargetUrl, 0 }, diff --git a/svtools/source/dialogs/insdlg.cxx b/svtools/source/dialogs/insdlg.cxx index ff33bea4b782..85f47709f54a 100644 --- a/svtools/source/dialogs/insdlg.cxx +++ b/svtools/source/dialogs/insdlg.cxx @@ -236,6 +236,7 @@ OUString SvPasteObjectHelper::GetSotFormatUIName( SotClipboardFormatId nId ) { SotClipboardFormatId::RICHTEXT, STR_FORMAT_ID_RICHTEXT }, { SotClipboardFormatId::STRING_TSVC, STR_FORMAT_ID_STRING_TSVC }, { SotClipboardFormatId::PNG, STR_FORMAT_ID_PNG_BITMAP }, + { SotClipboardFormatId::MARKDOWN, STR_FORMAT_ID_MARKDOWN}, }; TranslateId pResId; diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx b/sw/source/uibase/dochdl/swdtflvr.cxx index 86a841d71818..d4a22da1d9ac 100644 --- a/sw/source/uibase/dochdl/swdtflvr.cxx +++ b/sw/source/uibase/dochdl/swdtflvr.cxx @@ -60,6 +60,7 @@ #include <svx/clipfmtitem.hxx> #include <sfx2/mieclip.hxx> #include <svl/urlbmk.hxx> +#include <unicode/regex.h> #include <vcl/inetimg.hxx> #include <svx/fmview.hxx> #include <sfx2/docfilt.hxx> @@ -157,6 +158,7 @@ constexpr sal_uInt32 SWTRANSFER_OBJECTTYPE_STRING = 0x00000008; constexpr sal_uInt32 SWTRANSFER_OBJECTTYPE_SWOLE = 0x00000010; constexpr sal_uInt32 SWTRANSFER_OBJECTTYPE_DDE = 0x00000020; constexpr sal_uInt32 SWTRANSFER_OBJECTTYPE_RICHTEXT = 0x00000040; +constexpr sal_uInt32 SWTRANSFER_OBJECTTYPE_MARKDOWN = 0x00000080; using namespace ::svx; using namespace ::com::sun::star; @@ -634,6 +636,13 @@ bool SwTransferable::GetData( const DataFlavor& rFlavor, const OUString& rDestDo } break; + case SotClipboardFormatId::MARKDOWN: + { + SwDoc& rDoc = lcl_GetDoc(*m_pClpDocFac); + bOK = SetObject(&rDoc, SWTRANSFER_OBJECTTYPE_MARKDOWN, rFlavor); + break; + } + case SotClipboardFormatId::HTML: { SwDoc& rDoc = lcl_GetDoc(*m_pClpDocFac); @@ -801,6 +810,12 @@ bool SwTransferable::WriteObject( SvStream& rOStream, GetRTFWriter(std::u16string_view(), OUString(), xWrt); break; + case SWTRANSFER_OBJECTTYPE_MARKDOWN: + { + GetMDWriter(std::u16string_view(), OUString(), xWrt); + break; + } + case SWTRANSFER_OBJECTTYPE_STRING: GetASCWriter(std::u16string_view(), OUString(), xWrt); if( xWrt.is() ) @@ -953,6 +968,7 @@ void SwTransferable::PrepareForCopyTextRange(SwPaM & rPaM) #if HAVE_FEATURE_DESKTOP AddFormat( SotClipboardFormatId::RICHTEXT ); AddFormat( SotClipboardFormatId::HTML ); + AddFormat( SotClipboardFormatId::MARKDOWN ); #endif AddFormat( SotClipboardFormatId::STRING ); } @@ -1106,6 +1122,7 @@ int SwTransferable::PrepareForCopy( bool bIsCut, bool bDeleteRedlines ) #if HAVE_FEATURE_DESKTOP AddFormat( SotClipboardFormatId::RICHTEXT ); AddFormat( SotClipboardFormatId::HTML ); + AddFormat( SotClipboardFormatId::MARKDOWN ); #endif } if( m_pWrtShell->IsSelection() ) @@ -1262,6 +1279,7 @@ bool SwTransferable::CopyGlossary( SwTextBlocks& rGlossary, const OUString& rStr AddFormat( SotClipboardFormatId::RICHTEXT ); AddFormat( SotClipboardFormatId::HTML ); AddFormat( SotClipboardFormatId::STRING ); + AddFormat( SotClipboardFormatId::MARKDOWN ); //ObjectDescriptor was already filled from the old DocShell. //Now adjust it. Thus in GetData the first query can still @@ -1868,6 +1886,7 @@ bool SwTransferable::PasteData( const TransferableDataHelper& rData, case SotClipboardFormatId::RTF: case SotClipboardFormatId::RICHTEXT: case SotClipboardFormatId::STRING: + case SotClipboardFormatId::MARKDOWN: bRet = SwTransferable::PasteFileContent( rData, rSh, nFormat, bMsg, bIgnoreComments ); break; @@ -2238,6 +2257,10 @@ bool SwTransferable::PasteFileContent( const TransferableDataHelper& rData, pStream = xStrm.get(); if( SotClipboardFormatId::RTF == nFormat || SotClipboardFormatId::RICHTEXT == nFormat) pRead = SwReaderWriter::GetRtfReader(); + else if( SotClipboardFormatId::MARKDOWN == nFormat ) + { + pRead = ReadMarkdown; + } else if( !pRead ) { pRead = ReadHTML; @@ -2680,6 +2703,7 @@ bool SwTransferable::PasteDDE( const TransferableDataHelper& rData, !rData.HasFormat( SotClipboardFormatId::RICHTEXT ) && !rData.HasFormat( SotClipboardFormatId::HTML ) && !rData.HasFormat( SotClipboardFormatId::STRING ) && + !rData.HasFormat( SotClipboardFormatId::MARKDOWN ) && (rData.HasFormat( nFormat = SotClipboardFormatId::GDIMETAFILE ) || rData.HasFormat( nFormat = SotClipboardFormatId::BITMAP )) ) { @@ -3535,6 +3559,7 @@ const SotClipboardFormatId aPasteSpecialIds[] = SotClipboardFormatId::BITMAP, SotClipboardFormatId::SVIM, SotClipboardFormatId::FILEGRPDESCRIPTOR, + SotClipboardFormatId::MARKDOWN, SotClipboardFormatId::NONE }; @@ -3705,6 +3730,7 @@ void SwTransferable::SetDataForDragAndDrop( const Point& rSttPos ) AddFormat( SotClipboardFormatId::RTF ); AddFormat( SotClipboardFormatId::RICHTEXT ); AddFormat( SotClipboardFormatId::HTML ); + AddFormat( SotClipboardFormatId::MARKDOWN ); } if( m_pWrtShell->IsSelection() ) AddFormat( SotClipboardFormatId::STRING ); diff --git a/vcl/source/treelist/transfer.cxx b/vcl/source/treelist/transfer.cxx index 1818db05f766..7670848c4ba5 100644 --- a/vcl/source/treelist/transfer.cxx +++ b/vcl/source/treelist/transfer.cxx @@ -1310,6 +1310,10 @@ void TransferableDataHelper::FillDataFlavorExVector( const Sequence< DataFlavor { rDataFlavorExVector[ rDataFlavorExVector.size() - 1 ].mnSotId = SotClipboardFormatId::HTML; } + else if(xMimeType.is() && xMimeType->getFullMediaType().equalsIgnoreAsciiCase( "text/markdown ")) + { + rDataFlavorExVector[ rDataFlavorExVector.size() - 1 ].mnSotId = SotClipboardFormatId::MARKDOWN; + } else if( xMimeType.is() && xMimeType->getFullMediaType().equalsIgnoreAsciiCase( "text/uri-list" ) ) { rDataFlavorExVector[ rDataFlavorExVector.size() - 1 ].mnSotId = SotClipboardFormatId::FILE_LIST; diff --git a/vcl/win/dtrans/ftransl.cxx b/vcl/win/dtrans/ftransl.cxx index 45dbb66696b8..72636244e5e9 100644 --- a/vcl/win/dtrans/ftransl.cxx +++ b/vcl/win/dtrans/ftransl.cxx @@ -348,6 +348,8 @@ const std::vector< FormatEntry > g_TranslTable { FormatEntry("application/x-openoffice-dummy4;windows_formatname=\"SO_DUMMYFORMAT_4\"", "SO_DUMMYFORMAT_4", nullptr, CF_INVALID, CPPUTYPE_DEFAULT), // SotClipboardFormatId::RICHTEXT FormatEntry("text/richtext", "Richtext Format", nullptr, CF_INVALID, CPPUTYPE_DEFAULT), + // SotClipboardFormatId::MARKDOWN + FormatEntry("text/markdown", "Markdown", nullptr, CF_INVALID, CPPUTYPE_DEFAULT), }; namespace {