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

Side by Side Diff: chrome/browser/history/query_parser.cc

Issue 5796003: Refactor WordIterator into base::BreakIterator.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 10 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #include "chrome/browser/history/query_parser.h" 5 #include "chrome/browser/history/query_parser.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "base/i18n/word_iterator.h" 10 #include "base/i18n/break_iterator.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/scoped_vector.h" 12 #include "base/scoped_vector.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "unicode/uscript.h" 15 #include "unicode/uscript.h"
16 16
17 namespace { 17 namespace {
18 18
19 // Returns true if |mp1.first| is less than |mp2.first|. This is used to 19 // Returns true if |mp1.first| is less than |mp2.first|. This is used to
20 // sort match positions. 20 // sort match positions.
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 match_positions->clear(); 315 match_positions->clear();
316 } else { 316 } else {
317 CoalseAndSortMatchPositions(&matches); 317 CoalseAndSortMatchPositions(&matches);
318 match_positions->swap(matches); 318 match_positions->swap(matches);
319 } 319 }
320 return true; 320 return true;
321 } 321 }
322 322
323 bool QueryParser::ParseQueryImpl(const string16& query, 323 bool QueryParser::ParseQueryImpl(const string16& query,
324 QueryNodeList* root) { 324 QueryNodeList* root) {
325 WordIterator iter(&query, WordIterator::BREAK_WORD); 325 base::BreakIterator iter(&query, base::BreakIterator::BREAK_WORD);
326 // TODO(evanm): support a locale here 326 // TODO(evanm): support a locale here
327 if (!iter.Init()) 327 if (!iter.Init())
328 return false; 328 return false;
329 329
330 // To handle nesting, we maintain a stack of QueryNodeLists. 330 // To handle nesting, we maintain a stack of QueryNodeLists.
331 // The last element (back) of the stack contains the current, deepest node. 331 // The last element (back) of the stack contains the current, deepest node.
332 std::vector<QueryNodeList*> query_stack; 332 std::vector<QueryNodeList*> query_stack;
333 query_stack.push_back(root); 333 query_stack.push_back(root);
334 334
335 bool in_quotes = false; // whether we're currently in a quoted phrase 335 bool in_quotes = false; // whether we're currently in a quoted phrase
(...skipping 22 matching lines...) Expand all
358 } 358 }
359 } 359 }
360 } 360 }
361 361
362 root->RemoveEmptySubnodes(); 362 root->RemoveEmptySubnodes();
363 return true; 363 return true;
364 } 364 }
365 365
366 void QueryParser::ExtractQueryWords(const string16& text, 366 void QueryParser::ExtractQueryWords(const string16& text,
367 std::vector<QueryWord>* words) { 367 std::vector<QueryWord>* words) {
368 WordIterator iter(&text, WordIterator::BREAK_WORD); 368 base::BreakIterator iter(&text, base::BreakIterator::BREAK_WORD);
369 // TODO(evanm): support a locale here 369 // TODO(evanm): support a locale here
370 if (!iter.Init()) 370 if (!iter.Init())
371 return; 371 return;
372 372
373 while (iter.Advance()) { 373 while (iter.Advance()) {
374 // Just found a span between 'prev' (inclusive) and 'pos' (exclusive). It 374 // Just found a span between 'prev' (inclusive) and 'pos' (exclusive). It
375 // is not necessarily a word, but could also be a sequence of punctuation 375 // is not necessarily a word, but could also be a sequence of punctuation
376 // or whitespace. 376 // or whitespace.
377 if (iter.IsWord()) { 377 if (iter.IsWord()) {
378 string16 word = iter.GetWord(); 378 string16 word = iter.GetWord();
379 if (!word.empty()) { 379 if (!word.empty()) {
380 words->push_back(QueryWord()); 380 words->push_back(QueryWord());
381 words->back().word = word; 381 words->back().word = word;
382 words->back().position = iter.prev(); 382 words->back().position = iter.prev();
383 } 383 }
384 } 384 }
385 } 385 }
386 } 386 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698