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 {

Reply via email to