void COleClipSource::PlainTextFilter(CClip &clip) { bool foundText = false; INT_PTR hDropIndex = -1; INT_PTR count = clip.m_Formats.GetCount(); for (INT_PTR i = 0; i < count; i++) { CClipFormat *pCF = &clip.m_Formats.ElementAt(i); if (pCF->m_cfType == CF_TEXT || pCF->m_cfType == CF_UNICODETEXT) { foundText = true; } else if (pCF->m_cfType == CF_HDROP) { hDropIndex = i; } } if (foundText && hDropIndex > -1) { clip.m_Formats.RemoveAt(hDropIndex); } else if (foundText == false && hDropIndex > -1) { CCF_HDropAggregator HDrop; if (m_ClipIDs.AggregateData(HDrop, CF_HDROP, g_Opt.m_bMultiPasteReverse)) { clip.m_Formats.RemoveAt(hDropIndex); CClipFormat format(CF_UNICODETEXT, HDrop.GetHGlobalAsString()); clip.m_Formats.Add(format); format.m_autoDeleteData = false; //owned by m_DelayRenderedFormats } } }
//##ModelId=474D3058036E BOOL COleClipSource::DoImmediateRender() { if(m_bLoadedFormats) return TRUE; m_bLoadedFormats = true; int count = m_ClipIDs.GetSize(); if(count <= 0) return 0; BOOL bProcessedMult = FALSE; if(count > 1) { CStringA SepA = CTextConvert::ConvertToChar(g_Opt.GetMultiPasteSeparator()); CCF_TextAggregator CFText(SepA); if(m_ClipIDs.AggregateData(CFText, CF_TEXT, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(CF_TEXT, CFText.GetHGlobal()); bProcessedMult = TRUE; } CStringW SepW = CTextConvert::ConvertToUnicode(g_Opt.GetMultiPasteSeparator()); CCF_UnicodeTextAggregator CFUnicodeText(SepW); if(m_ClipIDs.AggregateData(CFUnicodeText, CF_UNICODETEXT, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(CF_UNICODETEXT, CFUnicodeText.GetHGlobal()); bProcessedMult = TRUE; } if(m_bOnlyPaste_CF_TEXT == false) { CCF_HDropAggregator HDrop; if(m_ClipIDs.AggregateData(HDrop, CF_HDROP, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(CF_HDROP, HDrop.GetHGlobal()); bProcessedMult = TRUE; } CRichTextAggregator RichText(SepA); if(m_ClipIDs.AggregateData(RichText, theApp.m_RTFFormat, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(theApp.m_RTFFormat, RichText.GetHGlobal()); bProcessedMult = TRUE; } CHTMLFormatAggregator Html(SepA); if(m_ClipIDs.AggregateData(Html, theApp.m_HTML_Format, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(theApp.m_HTML_Format, Html.GetHGlobal()); bProcessedMult = TRUE; } } } if(count >= 1 && bProcessedMult == FALSE) { CClip clip; CClipFormats formats; clip.LoadFormats(m_ClipIDs[0], m_bOnlyPaste_CF_TEXT); return PutFormatOnClipboard(&clip.m_Formats, m_bPasteHTMLFormatAs_CF_TEXT); } return bProcessedMult; }
BOOL COleClipSource::DoImmediateRender() { if(m_bLoadedFormats) return TRUE; m_bLoadedFormats = true; if(m_pasteOptions.m_pPasteFormats != NULL) { return PutFormatOnClipboard(m_pasteOptions.m_pPasteFormats) > 0; } INT_PTR count = m_ClipIDs.GetSize(); if(count <= 0) return 0; CClip clip; if(count > 1) { CStringA SepA = CTextConvert::ConvertToChar(g_Opt.GetMultiPasteSeparator()); CCF_TextAggregator CFText(SepA); if(m_ClipIDs.AggregateData(CFText, CF_TEXT, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_TEXT, CFText.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } CStringW SepW = CTextConvert::ConvertToUnicode(g_Opt.GetMultiPasteSeparator()); CCF_UnicodeTextAggregator CFUnicodeText(SepW); if(m_ClipIDs.AggregateData(CFUnicodeText, CF_UNICODETEXT, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_UNICODETEXT, CFUnicodeText.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } if ((m_pasteOptions.LimitFormatsToText()) && clip.m_Formats.GetCount() == 0) { CCF_HDropAggregator HDrop; if (m_ClipIDs.AggregateData(HDrop, CF_HDROP, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_UNICODETEXT, HDrop.GetHGlobalAsString()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } } else if (m_pasteOptions.LimitFormatsToText() == false) { CCF_HDropAggregator HDrop; if(m_ClipIDs.AggregateData(HDrop, CF_HDROP, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_HDROP, HDrop.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } CRichTextAggregator RichText(SepA); if(m_ClipIDs.AggregateData(RichText, theApp.m_RTFFormat, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(theApp.m_RTFFormat, RichText.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } CHTMLFormatAggregator Html(SepA); if(m_ClipIDs.AggregateData(Html, theApp.m_HTML_Format, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(theApp.m_HTML_Format, Html.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } } } if (count >= 1 && clip.m_Formats.GetCount() == 0) { clip.LoadFormats(m_ClipIDs[0], m_pasteOptions.LimitFormatsToText(), m_pasteOptions.IncludeRTFForTextOnly()); } if (m_pasteOptions.LimitFormatsToText()) { PlainTextFilter(clip); } if(m_pasteOptions.m_pasteUpperCase || m_pasteOptions.m_pasteLowerCase) { DoUpperLowerCase(clip, m_pasteOptions.m_pasteUpperCase); } else if(m_pasteOptions.m_pasteCapitalize) { Capitalize(clip); } else if(m_pasteOptions.m_pasteSentenceCase) { SentenceCase(clip); } else if(m_pasteOptions.m_pasteRemoveLineFeeds) { RemoveLineFeeds(clip); } else if(m_pasteOptions.m_pasteAddOneLineFeed) { AddLineFeeds(clip, 1); } else if (m_pasteOptions.m_pasteAddTwoLineFeeds) { AddLineFeeds(clip, 2); } else if (m_pasteOptions.m_pasteTypoglycemia) { Typoglycemia(clip); } return PutFormatOnClipboard(&clip.m_Formats) > 0; }