15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CHROMEOS_IME_COMPOSITION_TEXT_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CHROMEOS_IME_COMPOSITION_TEXT_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string>
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector>
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string16.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chromeos/chromeos_export.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace chromeos {
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CHROMEOS_EXPORT CompositionText {
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  enum UnderlineType {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    COMPOSITION_TEXT_UNDERLINE_SINGLE = 1,
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    COMPOSITION_TEXT_UNDERLINE_DOUBLE = 2,
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    COMPOSITION_TEXT_UNDERLINE_ERROR  = 4,
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  };
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  struct UnderlineAttribute {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    UnderlineType type;
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    uint32 start_index;  // The inclusive start index.
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    uint32 end_index;  // The exclusive end index.
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  };
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CompositionText();
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~CompositionText();
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Accessors
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16& text() const { return text_; }
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void set_text(const base::string16& text) { text_ = text; }
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const std::vector<UnderlineAttribute>& underline_attributes() const {
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return underline_attributes_;
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::vector<UnderlineAttribute>* mutable_underline_attributes() {
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return &underline_attributes_;
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  uint32 selection_start() const { return selection_start_; }
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void set_selection_start(uint32 selection_start) {
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    selection_start_ = selection_start;
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  uint32 selection_end() const { return selection_end_; }
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void set_selection_end(uint32 selection_end) {
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    selection_end_ = selection_end;
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void CopyFrom(const CompositionText& obj);
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 text_;
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::vector<UnderlineAttribute> underline_attributes_;
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  uint32 selection_start_;
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  uint32 selection_end_;
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CompositionText);
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace chromeos
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CHROMEOS_IME_COMPOSITION_TEXT_H_
70