diff --git a/atom/common/api/atom_api_clipboard.cc b/atom/common/api/atom_api_clipboard.cc index 0837a3dc93..5186e22c8d 100644 --- a/atom/common/api/atom_api_clipboard.cc +++ b/atom/common/api/atom_api_clipboard.cc @@ -60,6 +60,11 @@ void Write(const mate::Dictionary& data, if (data.Get("text", &text)) writer.WriteText(text); + if (data.Get("rtf", &text)) { + std::string rtf = base::UTF16ToUTF8(text); + writer.WriteRTF(rtf); + } + if (data.Get("html", &html)) writer.WriteHTML(html, std::string()); @@ -88,6 +93,18 @@ void WriteText(const base::string16& text, mate::Arguments* args) { writer.WriteText(text); } +base::string16 ReadRtf(mate::Arguments* args) { + std::string data; + ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); + clipboard->ReadRTF(GetClipboardType(args), &data); + return base::UTF8ToUTF16(data); +} + +void WriteRtf(const std::string& text, mate::Arguments* args) { + ui::ScopedClipboardWriter writer(GetClipboardType(args)); + writer.WriteRTF(text); +} + base::string16 ReadHtml(mate::Arguments* args) { base::string16 data; base::string16 html; @@ -129,6 +146,8 @@ void Initialize(v8::Local exports, v8::Local unused, dict.SetMethod("write", &Write); dict.SetMethod("readText", &ReadText); dict.SetMethod("writeText", &WriteText); + dict.SetMethod("readRtf", &ReadRtf); + dict.SetMethod("writeRtf", &WriteRtf); dict.SetMethod("readHtml", &ReadHtml); dict.SetMethod("writeHtml", &WriteHtml); dict.SetMethod("readImage", &ReadImage); diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index 7cb5b840bc..dcb9fa398a 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -61,6 +61,20 @@ Returns the content in the clipboard as a [NativeImage](native-image.md). Writes `image` to the clipboard. +### `clipboard.readRtf([type])` + +* `type` String (optional) + +Returns the content in the clipboard as RTF. + + +### `clipboard.writeRtf(text[, type])` + +* `text` String +* `type` String (optional) + +Writes the `text` into the clipboard in RTF. + ### `clipboard.clear([type])` * `type` String (optional) diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index 6154181f09..fe94e330d4 100644 --- a/spec/api-clipboard-spec.js +++ b/spec/api-clipboard-spec.js @@ -35,20 +35,30 @@ describe('clipboard module', function() { return assert.equal(clipboard.readHtml(), markup); }); }); + describe('clipboard.readRtf', function() { + return it('returns rtf text correctly', function() { + var rtf = "{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\pard\nThis is some {\\b bold} text.\\par\n}"; + clipboard.writeRtf(rtf); + return assert.equal(clipboard.readRtf(), rtf); + }); + }); return describe('clipboard.write()', function() { return it('returns data correctly', function() { - var i, markup, p, text; + var i, markup, p, text, rtf; text = 'test'; + rtf = '{\\rtf1\\utf8 text}'; p = path.join(fixtures, 'assets', 'logo.png'); i = nativeImage.createFromPath(p); markup = process.platform === 'darwin' ? 'Hi' : process.platform === 'linux' ? 'Hi' : 'Hi'; clipboard.write({ text: "test", html: 'Hi', + rtf: '{\\rtf1\\utf8 text}', image: p }); assert.equal(clipboard.readText(), text); assert.equal(clipboard.readHtml(), markup); + assert.equal(clipboard.readRtf(), rtf); return assert.equal(clipboard.readImage().toDataURL(), i.toDataURL()); }); });