Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Side by Side Diff: components/spellcheck/renderer/spellcheck_worditerator.cc

Issue 2282403003: Fix build with system ICU (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/linux/unbundle/replace_gn_files.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Implements a custom word iterator used for our spellchecker. 5 // Implements a custom word iterator used for our spellchecker.
6 6
7 #include "components/spellcheck/renderer/spellcheck_worditerator.h" 7 #include "components/spellcheck/renderer/spellcheck_worditerator.h"
8 8
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
11 #include <string> 11 #include <string>
12 #include <utility> 12 #include <utility>
13 13
14 #include "base/i18n/break_iterator.h" 14 #include "base/i18n/break_iterator.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "base/strings/utf_string_conversions.h" 18 #include "base/strings/utf_string_conversions.h"
19 #include "components/spellcheck/renderer/spellcheck.h" 19 #include "components/spellcheck/renderer/spellcheck.h"
20 #include "third_party/icu/source/common/unicode/normlzr.h" 20 #include "third_party/icu/source/common/unicode/normlzr.h"
21 #include "third_party/icu/source/common/unicode/schriter.h" 21 #include "third_party/icu/source/common/unicode/schriter.h"
22 #include "third_party/icu/source/common/unicode/uscript.h" 22 #include "third_party/icu/source/common/unicode/uscript.h"
23 #include "third_party/icu/source/i18n/unicode/ulocdata.h" 23 #include "third_party/icu/source/i18n/unicode/ulocdata.h"
24 24
25 using base::i18n::BreakIterator;
26
27 // SpellcheckCharAttribute implementation: 25 // SpellcheckCharAttribute implementation:
28 26
29 SpellcheckCharAttribute::SpellcheckCharAttribute() 27 SpellcheckCharAttribute::SpellcheckCharAttribute()
30 : script_code_(USCRIPT_LATIN) { 28 : script_code_(USCRIPT_LATIN) {
31 } 29 }
32 30
33 SpellcheckCharAttribute::~SpellcheckCharAttribute() { 31 SpellcheckCharAttribute::~SpellcheckCharAttribute() {
34 } 32 }
35 33
36 void SpellcheckCharAttribute::SetDefaultLanguage(const std::string& language) { 34 void SpellcheckCharAttribute::SetDefaultLanguage(const std::string& language) {
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 bool allow_contraction) { 323 bool allow_contraction) {
326 // Create a custom ICU break iterator with empty text used in this object. (We 324 // Create a custom ICU break iterator with empty text used in this object. (We
327 // allow setting text later so we can re-use this iterator.) 325 // allow setting text later so we can re-use this iterator.)
328 DCHECK(attribute); 326 DCHECK(attribute);
329 const base::string16 rule(attribute->GetRuleSet(allow_contraction)); 327 const base::string16 rule(attribute->GetRuleSet(allow_contraction));
330 328
331 // If there is no rule set, the attributes were invalid. 329 // If there is no rule set, the attributes were invalid.
332 if (rule.empty()) 330 if (rule.empty())
333 return false; 331 return false;
334 332
335 std::unique_ptr<BreakIterator> iterator( 333 std::unique_ptr<base::i18n::BreakIterator> iterator(
groby-ooo-7-16 2016/08/29 17:37:12 Tiny nit: While you're here, would you mind switch
Paweł Hajdan Jr. 2016/08/30 08:29:17 Done.
336 new BreakIterator(base::string16(), rule)); 334 new base::i18n::BreakIterator(base::string16(), rule));
337 if (!iterator->Init()) { 335 if (!iterator->Init()) {
338 // Since we're not passing in any text, the only reason this could fail 336 // Since we're not passing in any text, the only reason this could fail
339 // is if we fail to parse the rules. Since the rules are hardcoded, 337 // is if we fail to parse the rules. Since the rules are hardcoded,
340 // that would be a bug in this class. 338 // that would be a bug in this class.
341 NOTREACHED() << "failed to open iterator (broken rules)"; 339 NOTREACHED() << "failed to open iterator (broken rules)";
342 return false; 340 return false;
343 } 341 }
344 iterator_ = std::move(iterator); 342 iterator_ = std::move(iterator);
345 343
346 // Set the character attributes so we can normalize the words extracted by 344 // Set the character attributes so we can normalize the words extracted by
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 return IS_END_OF_TEXT; 379 return IS_END_OF_TEXT;
382 } 380 }
383 381
384 // Find a word that can be checked for spelling or a character that can be 382 // Find a word that can be checked for spelling or a character that can be
385 // skipped over. Rather than moving past a skippable character this returns 383 // skipped over. Rather than moving past a skippable character this returns
386 // IS_SKIPPABLE and defers handling the character to the calling function. 384 // IS_SKIPPABLE and defers handling the character to the calling function.
387 while (iterator_->Advance()) { 385 while (iterator_->Advance()) {
388 const size_t start = iterator_->prev(); 386 const size_t start = iterator_->prev();
389 const size_t length = iterator_->pos() - start; 387 const size_t length = iterator_->pos() - start;
390 switch (iterator_->GetWordBreakStatus()) { 388 switch (iterator_->GetWordBreakStatus()) {
391 case BreakIterator::IS_WORD_BREAK: { 389 case base::i18n::BreakIterator::IS_WORD_BREAK: {
392 if (Normalize(start, length, word_string)) { 390 if (Normalize(start, length, word_string)) {
393 *word_start = start; 391 *word_start = start;
394 *word_length = length; 392 *word_length = length;
395 return IS_WORD; 393 return IS_WORD;
396 } 394 }
397 break; 395 break;
398 } 396 }
399 case BreakIterator::IS_SKIPPABLE_WORD: { 397 case base::i18n::BreakIterator::IS_SKIPPABLE_WORD: {
400 *word_string = iterator_->GetString(); 398 *word_string = iterator_->GetString();
401 *word_start = start; 399 *word_start = start;
402 *word_length = length; 400 *word_length = length;
403 return IS_SKIPPABLE; 401 return IS_SKIPPABLE;
404 } 402 }
405 // |iterator_| is RULE_BASED so the break status should never be 403 // |iterator_| is RULE_BASED so the break status should never be
406 // IS_LINE_OR_CHAR_BREAK. 404 // IS_LINE_OR_CHAR_BREAK.
407 case BreakIterator::IS_LINE_OR_CHAR_BREAK: { 405 case base::i18n::BreakIterator::IS_LINE_OR_CHAR_BREAK: {
408 NOTREACHED(); 406 NOTREACHED();
409 break; 407 break;
410 } 408 }
411 } 409 }
412 } 410 }
413 411
414 // There aren't any more words in the given text. 412 // There aren't any more words in the given text.
415 return IS_END_OF_TEXT; 413 return IS_END_OF_TEXT;
416 } 414 }
417 415
(...skipping 18 matching lines...) Expand all
436 if (status != U_ZERO_ERROR && status != U_STRING_NOT_TERMINATED_WARNING) 434 if (status != U_ZERO_ERROR && status != U_STRING_NOT_TERMINATED_WARNING)
437 return false; 435 return false;
438 436
439 // Copy the normalized text to the output. 437 // Copy the normalized text to the output.
440 icu::StringCharacterIterator it(output); 438 icu::StringCharacterIterator it(output);
441 for (UChar c = it.first(); c != icu::CharacterIterator::DONE; c = it.next()) 439 for (UChar c = it.first(); c != icu::CharacterIterator::DONE; c = it.next())
442 attribute_->OutputChar(c, output_string); 440 attribute_->OutputChar(c, output_string);
443 441
444 return !output_string->empty(); 442 return !output_string->empty();
445 } 443 }
OLDNEW
« no previous file with comments | « build/linux/unbundle/replace_gn_files.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698