| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROMEOS_DBUS_IBUS_IBUS_TEXT_H_ | |
| 6 #define CHROMEOS_DBUS_IBUS_IBUS_TEXT_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 #include <vector> | |
| 10 #include "base/basictypes.h" | |
| 11 #include "chromeos/chromeos_export.h" | |
| 12 | |
| 13 namespace dbus { | |
| 14 class MessageWriter; | |
| 15 class MessageReader; | |
| 16 } // dbus | |
| 17 | |
| 18 namespace chromeos { | |
| 19 | |
| 20 // The IBusText is one of IBusObjects and it contains IBusAttrList object which | |
| 21 // contains array of IBusAttribute object. The overview of each data structure | |
| 22 // is as follows: | |
| 23 // | |
| 24 // DATA STRUCTURE OVERVIEW: | |
| 25 // | |
| 26 // IBusAttribute: (signature is "uuuu") | |
| 27 // variant struct { | |
| 28 // string "IBusAttribute" | |
| 29 // array[] | |
| 30 // uint32 1 // Type of attribute. | |
| 31 // uint32 1 // The value of attribute. | |
| 32 // uint32 0 // The start index of the text. | |
| 33 // uint32 1 // The end index of the text. | |
| 34 // } | |
| 35 // | |
| 36 // IBusAttrList: (signature is "av") | |
| 37 // variant struct { | |
| 38 // string "IBusAttrList" | |
| 39 // array[] | |
| 40 // array[ // The array of IBusAttribute. | |
| 41 // variant struct{ | |
| 42 // string "IBusAttribute" | |
| 43 // ... | |
| 44 // } | |
| 45 // variant struct{ | |
| 46 // string "IBusAttribute" | |
| 47 // ... | |
| 48 // } | |
| 49 // variant struct{ | |
| 50 // string "IBusAttribute" | |
| 51 // ... | |
| 52 // } | |
| 53 // ] | |
| 54 // } | |
| 55 // | |
| 56 // IBusText: (signature is "sv") | |
| 57 // variant struct { | |
| 58 // string "IBusText" | |
| 59 // array[] | |
| 60 // string "A" | |
| 61 // variant struct { | |
| 62 // string "IBusAttrList" | |
| 63 // array[] | |
| 64 // array[ | |
| 65 // variant struct{ | |
| 66 // string "IBusAttribute" | |
| 67 // ... | |
| 68 // } | |
| 69 // variant struct{ | |
| 70 // string "IBusAttribute" | |
| 71 // ... | |
| 72 // } | |
| 73 // ] | |
| 74 // } | |
| 75 // } | |
| 76 // | |
| 77 class IBusText; | |
| 78 | |
| 79 // Pops a IBusText from |reader|. | |
| 80 // Returns false if an error occurs. | |
| 81 bool CHROMEOS_EXPORT PopIBusText(dbus::MessageReader* reader, | |
| 82 IBusText* ibus_text); | |
| 83 // Pops a IBusText from |reader| and stores it's text field into text. Use | |
| 84 // PopIBusText instead in the case of using any attribute entries in IBusText. | |
| 85 // Returns true on success. | |
| 86 bool CHROMEOS_EXPORT PopStringFromIBusText(dbus::MessageReader* reader, | |
| 87 std::string* text); | |
| 88 // Appends a IBusText to |writer|. Annotation and description field is not | |
| 89 // filled with AppendIBusText. | |
| 90 // TODO(nona): Support annotation/description appending if necessary. | |
| 91 void CHROMEOS_EXPORT AppendIBusText(const IBusText& ibus_text, | |
| 92 dbus::MessageWriter* writer); | |
| 93 | |
| 94 // Appends a string to |writer| as IBusText without any attributes. Use | |
| 95 // AppendIBusText instead in the case of using any attribute entries. | |
| 96 // TODO(nona): Support annotation/description appending if necessary. | |
| 97 void CHROMEOS_EXPORT AppendStringAsIBusText(const std::string& text, | |
| 98 dbus::MessageWriter* writer); | |
| 99 | |
| 100 // Handles IBusText object which is used in dbus communication with ibus-daemon. | |
| 101 // The IBusAttribute has four uint32 variables and the IBusAttributes represents | |
| 102 // three type of decoration based on it's values. | |
| 103 // 1. Underline decoration (corresponds to UnderlineAttribute structure) | |
| 104 // 1st value: indicates underline attribute. | |
| 105 // 2nd value: type of decoration. Chrome only support single and double | |
| 106 // underline and error line. | |
| 107 // 3rd value: the start index of this attribute in multibyte. | |
| 108 // 4th value: the end index of this attribute in multibyte. | |
| 109 // | |
| 110 // 2. Background decoration (corresponds to SelectionAttribute structure) | |
| 111 // NOTE: Background decoration is treated as selection in Chrome. | |
| 112 // 1st value: indicates background attribute. | |
| 113 // 2nd value: Represents color but not supported in Chrome. | |
| 114 // 3rd value: the start index of this attribute in multibyte. | |
| 115 // 4th value: the end index of this attribute in multibyte. | |
| 116 // | |
| 117 // 3. Forward decoration | |
| 118 // Not supported in Chrome. | |
| 119 class CHROMEOS_EXPORT IBusText { | |
| 120 public: | |
| 121 enum IBusTextUnderlineType { | |
| 122 IBUS_TEXT_UNDERLINE_SINGLE = 1, | |
| 123 IBUS_TEXT_UNDERLINE_DOUBLE = 2, | |
| 124 IBUS_TEXT_UNDERLINE_ERROR = 4, | |
| 125 }; | |
| 126 | |
| 127 struct UnderlineAttribute { | |
| 128 IBusTextUnderlineType type; | |
| 129 uint32 start_index; // The inclusive start index. | |
| 130 uint32 end_index; // The exclusive end index. | |
| 131 }; | |
| 132 | |
| 133 struct SelectionAttribute { | |
| 134 uint32 start_index; // The inclusive start index. | |
| 135 uint32 end_index; // The exclusive end index. | |
| 136 }; | |
| 137 | |
| 138 // Accessors | |
| 139 IBusText(); | |
| 140 virtual ~IBusText(); | |
| 141 | |
| 142 const std::string& text() const { return text_; } | |
| 143 void set_text(const std::string& text) { text_ = text; } | |
| 144 | |
| 145 const std::string& annotation() const { return annotation_; } | |
| 146 void set_annotation(const std::string& annotation) { | |
| 147 annotation_ = annotation; | |
| 148 } | |
| 149 | |
| 150 const std::string& description_title() const { return description_title_; } | |
| 151 void set_description_title(const std::string& title) { | |
| 152 description_title_ = title; | |
| 153 } | |
| 154 | |
| 155 const std::string& description_body() const { return description_body_; } | |
| 156 void set_description_body(const std::string& body) { | |
| 157 description_body_ = body; | |
| 158 } | |
| 159 | |
| 160 const std::vector<UnderlineAttribute>& underline_attributes() const { | |
| 161 return underline_attributes_; | |
| 162 } | |
| 163 | |
| 164 std::vector<UnderlineAttribute>* mutable_underline_attributes() { | |
| 165 return &underline_attributes_; | |
| 166 } | |
| 167 | |
| 168 const std::vector<SelectionAttribute>& selection_attributes() const { | |
| 169 return selection_attributes_; | |
| 170 } | |
| 171 std::vector<SelectionAttribute>* mutable_selection_attributes() { | |
| 172 return &selection_attributes_; | |
| 173 } | |
| 174 | |
| 175 void CopyFrom(const IBusText& obj); | |
| 176 | |
| 177 private: | |
| 178 std::string text_; | |
| 179 std::string annotation_; | |
| 180 std::string description_title_; | |
| 181 std::string description_body_; | |
| 182 std::vector<UnderlineAttribute> underline_attributes_; | |
| 183 std::vector<SelectionAttribute> selection_attributes_; | |
| 184 | |
| 185 DISALLOW_COPY_AND_ASSIGN(IBusText); | |
| 186 }; | |
| 187 | |
| 188 } // namespace chromeos | |
| 189 | |
| 190 #endif // CHROMEOS_DBUS_IBUS_IBUS_TEXT_H_ | |
| OLD | NEW |