1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/app_list/search/tokenized_string.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/i18n/break_iterator.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/i18n/case_conversion.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/app_list/search/term_break_iterator.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::i18n::BreakIterator;
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace app_list {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TokenizedString::TokenizedString(const base::string16& text)
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : text_(text) {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Tokenize();
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TokenizedString::~TokenizedString() {}
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TokenizedString::Tokenize() {
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  BreakIterator break_iter(text_,  BreakIterator::BREAK_WORD);
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (!break_iter.Init()) {
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    NOTREACHED() << "BreakIterator init failed"
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                 << ", text=\"" << text_ << "\"";
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    return;
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  }
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  while (break_iter.Advance()) {
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (!break_iter.IsWord())
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      continue;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16 word(break_iter.GetString());
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const size_t word_start = break_iter.prev();
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    TermBreakIterator term_iter(word);
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    while (term_iter.Advance()) {
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      tokens_.push_back(base::i18n::ToLower(term_iter.GetCurrentTerm()));
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      mappings_.push_back(gfx::Range(word_start + term_iter.prev(),
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                    word_start + term_iter.pos()));
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace app_list
47