18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Copyright 2013 The Chromium Authors. All rights reserved.
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// found in the LICENSE file.
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef UI_APP_LIST_SEARCH_TOKENIZED_STRING_H_
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define UI_APP_LIST_SEARCH_TOKENIZED_STRING_H_
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <vector>
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/basictypes.h"
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/strings/string16.h"
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ui/app_list/app_list_export.h"
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ui/gfx/range/range.h"
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectnamespace app_list {
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// TokenizedString takes a string and breaks it down into token words. It
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// first breaks using BreakIterator to get all the words. Then it breaks
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// the words again at camel case boundaries and alpha/number boundaries.
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectclass APP_LIST_EXPORT TokenizedString {
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project public:
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  typedef std::vector<base::string16> Tokens;
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  typedef std::vector<gfx::Range> Mappings;
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  explicit TokenizedString(const base::string16& text);
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ~TokenizedString();
27e1e03df288d5a44bfbffbd86588395c7cbbc27dfDavid 'Digit' Turner
2893e0d9cfb6d950b638ba93cf5318e5689e4ba64eDavid 'Digit' Turner  const base::string16& text() const { return text_; }
29031d655004e505a15e92580a16a181d1d247c4d5David 'Digit' Turner  const Tokens& tokens() const { return tokens_; }
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const Mappings& mappings() const { return mappings_; }
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project private:
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void Tokenize();
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  // Input text.
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  const base::string16 text_;
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  // Broken down tokens and the index mapping of tokens in original string.
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  Tokens tokens_;
405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  Mappings mappings_;
41dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner
425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  DISALLOW_COPY_AND_ASSIGN(TokenizedString);
435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}  // namespace app_list
465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif  // UI_APP_LIST_SEARCH_TOKENIZED_STRING_H_
485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner