void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame) { clear(); // Put CF_HTML format on the pasteboard if (::OpenClipboard(m_owner)) { ExceptionCode ec = 0; Vector<char> data; markupToCF_HTML(createMarkup(selectedRange, 0, AnnotateForInterchange), selectedRange->startContainer(ec)->document()->url(), data); HGLOBAL cbData = createGlobalData(data); if (!::SetClipboardData(HTMLClipboardFormat, cbData)) ::GlobalFree(cbData); ::CloseClipboard(); } // Put plain string on the pasteboard. CF_UNICODETEXT covers CF_TEXT as well String str = frame->selectedText(); replaceNewlinesWithWindowsStyleNewlines(str); replaceNBSPWithSpace(str); if (::OpenClipboard(m_owner)) { HGLOBAL cbData = createGlobalData(str); if (!::SetClipboardData(CF_UNICODETEXT, cbData)) ::GlobalFree(cbData); ::CloseClipboard(); } // enable smart-replacing later on by putting dummy data on the pasteboard if (canSmartCopyOrDelete) { if (::OpenClipboard(m_owner)) { ::SetClipboardData(WebSmartPasteFormat, 0); ::CloseClipboard(); } } }
WebString WebLocalFrameImpl::selectionAsText() const { RefPtr<Range> range = frame()->selection().toNormalizedRange(); if (!range) return WebString(); String text = range->text(); replaceNBSPWithSpace(text); return text; }
void Pasteboard::writeHTML(const String& markup, const KURL& documentURL, const String& plainText, bool canSmartCopyOrDelete) { String text = plainText; #if OS(WIN) replaceNewlinesWithWindowsStyleNewlines(text); #endif replaceNBSPWithSpace(text); blink::Platform::current()->clipboard()->writeHTML(markup, documentURL, text, canSmartCopyOrDelete); }
void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame) { String html = createMarkup(selectedRange, 0, AnnotateForInterchange); ExceptionCode ec = 0; KURL url = selectedRange->startContainer(ec)->document()->url(); String plainText = frame->selectedText(); #if PLATFORM(WIN_OS) replaceNewlinesWithWindowsStyleNewlines(plainText); #endif replaceNBSPWithSpace(plainText); ChromiumBridge::clipboardWriteSelection(html, url, plainText, canSmartCopyOrDelete); }
void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame) { String html = createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs); ExceptionCode ec = 0; KURL url = selectedRange->startContainer(ec)->document()->url(); String plainText = frame->editor()->selectedText(); #if OS(WINDOWS) replaceNewlinesWithWindowsStyleNewlines(plainText); #endif replaceNBSPWithSpace(plainText); PlatformSupport::clipboardWriteSelection(html, url, plainText, canSmartCopyOrDelete); }
void Clipboard::writePlainText(const String& text) { if (!m_dataObject) return; String str = text; #if OS(WIN) replaceNewlinesWithWindowsStyleNewlines(str); #endif replaceNBSPWithSpace(str); m_dataObject->setData(mimeTypeTextPlain, str); }
void Clipboard::writeRange(Range* selectedRange, LocalFrame* frame) { ASSERT(selectedRange); if (!m_dataObject) return; m_dataObject->setHTMLAndBaseURL(createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs), frame->document()->url()); String str = frame->selectedTextForClipboard(); #if OS(WIN) replaceNewlinesWithWindowsStyleNewlines(str); #endif replaceNBSPWithSpace(str); m_dataObject->setData(mimeTypeTextPlain, str); }
void DataTransfer::writeSelection(const FrameSelection& selection) { if (!m_dataObject) return; if (!enclosingTextFormControl(selection.start())) { m_dataObject->setHTMLAndBaseURL(selection.selectedHTMLForClipboard(), selection.frame()->document()->url()); } String str = selection.selectedTextForClipboard(); #if OS(WIN) replaceNewlinesWithWindowsStyleNewlines(str); #endif replaceNBSPWithSpace(str); m_dataObject->setData(mimeTypeTextPlain, str); }
// Convert a String containing CF_HTML formatted text to a DocumentFragment PassRefPtr<DocumentFragment> fragmentFromCFHTML(Document* doc, const String& cfhtml) { // obtain baseURL if present String srcURLStr("sourceURL:"); String srcURL; unsigned lineStart = cfhtml.find(srcURLStr, 0, false); if (lineStart != -1) { unsigned srcEnd = cfhtml.find("\n", lineStart, false); unsigned srcStart = lineStart+srcURLStr.length(); String rawSrcURL = cfhtml.substring(srcStart, srcEnd-srcStart); replaceNBSPWithSpace(rawSrcURL); srcURL = rawSrcURL.stripWhiteSpace(); } String markup = extractMarkupFromCFHTML(cfhtml); return createFragmentFromMarkup(doc, markup, srcURL, FragmentScriptingNotAllowed); }
//Convert a String containing CF_HTML formatted text to a DocumentFragment PassRefPtr<DocumentFragment> fragmentFromCF_HTML(Document* doc, const String& cf_html) { // obtain baseURL if present String srcURLStr("sourceURL:"); String srcURL; unsigned lineStart = cf_html.find(srcURLStr, 0, false); if (lineStart != -1) { unsigned srcEnd = cf_html.find("\n", lineStart, false); unsigned srcStart = lineStart+srcURLStr.length(); String rawSrcURL = cf_html.substring(srcStart, srcEnd-srcStart); replaceNBSPWithSpace(rawSrcURL); srcURL = rawSrcURL.stripWhiteSpace(); } // find the markup between "<!--StartFragment -->" and "<!--EndFragment -->", accounting for browser quirks unsigned markupStart = cf_html.find("<html", 0, false); unsigned tagStart = cf_html.find("startfragment", markupStart, false); unsigned fragmentStart = cf_html.find('>', tagStart) + 1; unsigned tagEnd = cf_html.find("endfragment", fragmentStart, false); unsigned fragmentEnd = cf_html.reverseFind('<', tagEnd); String markup = cf_html.substring(fragmentStart, fragmentEnd - fragmentStart).stripWhiteSpace(); return createFragmentFromMarkup(doc, markup, srcURL); }