// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/app_list/search/tokenized_string.h" #include #include "base/i18n/break_iterator.h" #include "base/i18n/case_conversion.h" #include "base/logging.h" #include "ui/app_list/search/term_break_iterator.h" using base::i18n::BreakIterator; namespace app_list { TokenizedString::TokenizedString(const base::string16& text) : text_(text) { Tokenize(); } TokenizedString::~TokenizedString() {} void TokenizedString::Tokenize() { BreakIterator break_iter(text_, BreakIterator::BREAK_WORD); if (!break_iter.Init()) { NOTREACHED() << "BreakIterator init failed" << ", text=\"" << text_ << "\""; return; } while (break_iter.Advance()) { if (!break_iter.IsWord()) continue; const base::string16 word(break_iter.GetString()); const size_t word_start = break_iter.prev(); TermBreakIterator term_iter(word); while (term_iter.Advance()) { tokens_.push_back(base::i18n::ToLower(term_iter.GetCurrentTerm())); mappings_.push_back(gfx::Range(word_start + term_iter.prev(), word_start + term_iter.pos())); } } } } // namespace app_list