| Index: components/spellcheck/renderer/spellcheck.cc
|
| diff --git a/components/spellcheck/renderer/spellcheck.cc b/components/spellcheck/renderer/spellcheck.cc
|
| index c34a181fe751b58f37622cce28d40b002db1dc86..477e3e2b9424bfbbcafa065dc5064d12a0a075cd 100644
|
| --- a/components/spellcheck/renderer/spellcheck.cc
|
| +++ b/components/spellcheck/renderer/spellcheck.cc
|
| @@ -113,6 +113,25 @@ void PreserveOriginalApostropheTypes(const base::string16& misspelled_word,
|
| }
|
| }
|
|
|
| +std::vector<WebString> FilterReplacementSuggestions(
|
| + const base::string16& misspelled_word,
|
| + const std::vector<base::string16>& replacements) {
|
| + std::vector<WebString> replacements_filtered;
|
| + for (base::string16 replacement : replacements) {
|
| + // Use the same types of apostrophes as in the mispelled word.
|
| + PreserveOriginalApostropheTypes(misspelled_word, &replacement);
|
| +
|
| + // Ignore suggestions that are just changing the apostrophe type
|
| + // (straight vs. typographical)
|
| + if (replacement == misspelled_word)
|
| + continue;
|
| +
|
| + replacements_filtered.push_back(WebString::FromUTF16(replacement));
|
| + }
|
| +
|
| + return replacements_filtered;
|
| +}
|
| +
|
| } // namespace
|
|
|
| class SpellCheck::SpellcheckRequest {
|
| @@ -473,7 +492,8 @@ void SpellCheck::CreateTextCheckingResults(
|
|
|
| const base::string16& misspelled_word =
|
| line_text.substr(spellcheck_result.location, spellcheck_result.length);
|
| - base::string16 replacement = spellcheck_result.replacement;
|
| + const std::vector<base::string16>& replacements =
|
| + spellcheck_result.replacements;
|
| SpellCheckResult::Decoration decoration = spellcheck_result.decoration;
|
|
|
| // Ignore words in custom dictionary.
|
| @@ -482,11 +502,13 @@ void SpellCheck::CreateTextCheckingResults(
|
| continue;
|
| }
|
|
|
| - // Use the same types of appostrophes as in the mispelled word.
|
| - PreserveOriginalApostropheTypes(misspelled_word, &replacement);
|
| + std::vector<WebString> replacements_filtered =
|
| + FilterReplacementSuggestions(misspelled_word, replacements);
|
|
|
| - // Ignore misspellings due the typographical apostrophe.
|
| - if (misspelled_word == replacement)
|
| + // If the spellchecker suggested replacements, but they were all just
|
| + // changing apostrophe styles, ignore this misspelling. If there were never
|
| + // any suggested replacements, keep the misspelling.
|
| + if (replacements_filtered.empty() && !replacements.empty())
|
| continue;
|
|
|
| if (filter == USE_NATIVE_CHECKER) {
|
| @@ -504,10 +526,10 @@ void SpellCheck::CreateTextCheckingResults(
|
| }
|
| }
|
|
|
| - results.push_back(WebTextCheckingResult(
|
| - static_cast<WebTextDecorationType>(decoration),
|
| - line_offset + spellcheck_result.location, spellcheck_result.length,
|
| - blink::WebString::FromUTF16(replacement)));
|
| + results.push_back(
|
| + WebTextCheckingResult(static_cast<WebTextDecorationType>(decoration),
|
| + line_offset + spellcheck_result.location,
|
| + spellcheck_result.length, replacements_filtered));
|
| }
|
|
|
| textcheck_results->Assign(results);
|
|
|