| Index: app/clipboard/clipboard_util_win.cc
|
| ===================================================================
|
| --- app/clipboard/clipboard_util_win.cc (revision 40346)
|
| +++ app/clipboard/clipboard_util_win.cc (working copy)
|
| @@ -488,14 +488,36 @@
|
| }
|
| }
|
|
|
| - // Find the markup between "<!--StartFragment -->" and "<!--EndFragment-->".
|
| + // Find the markup between "<!--StartFragment-->" and "<!--EndFragment-->".
|
| + // If the comments cannot be found, like copying from OpenOffice Writer,
|
| + // we simply fall back to using StartFragment/EndFragment bytecount values
|
| + // to get the markup.
|
| if (html) {
|
| + size_t fragment_start = std::string::npos;
|
| + size_t fragment_end = std::string::npos;
|
| +
|
| std::string cf_html_lower = StringToLowerASCII(cf_html);
|
| size_t markup_start = cf_html_lower.find("<html", 0);
|
| - size_t tag_start = cf_html.find("StartFragment", markup_start);
|
| - size_t fragment_start = cf_html.find('>', tag_start) + 1;
|
| - size_t tag_end = cf_html.rfind("EndFragment", std::string::npos);
|
| - size_t fragment_end = cf_html.rfind('<', tag_end);
|
| + size_t tag_start = cf_html.find("<!--StartFragment", markup_start);
|
| + if (tag_start == std::string::npos) {
|
| + static std::string start_fragment_str("StartFragment:");
|
| + size_t start_fragment_start = cf_html.find(start_fragment_str);
|
| + if (start_fragment_start != std::string::npos) {
|
| + fragment_start = static_cast<size_t>(atoi(cf_html.c_str() +
|
| + start_fragment_start + start_fragment_str.length()));
|
| + }
|
| +
|
| + static std::string end_fragment_str("EndFragment:");
|
| + size_t end_fragment_start = cf_html.find(end_fragment_str);
|
| + if (end_fragment_start != std::string::npos) {
|
| + fragment_end = static_cast<size_t>(atoi(cf_html.c_str() +
|
| + end_fragment_start + end_fragment_str.length()));
|
| + }
|
| + } else {
|
| + fragment_start = cf_html.find('>', tag_start) + 1;
|
| + size_t tag_end = cf_html.rfind("<!--EndFragment", std::string::npos);
|
| + fragment_end = cf_html.rfind('<', tag_end);
|
| + }
|
| if (fragment_start != std::string::npos &&
|
| fragment_end != std::string::npos) {
|
| *html = cf_html.substr(fragment_start, fragment_end - fragment_start);
|
|
|