[dali_2.3.19] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / markup-processor-helper-functions.h
1 #ifndef DALI_TOOLKIT_TEXT_MARKUP_PROCESSOR_HELPER_FUNCTIONS_H
2 #define DALI_TOOLKIT_TEXT_MARKUP_PROCESSOR_HELPER_FUNCTIONS_H
3
4 /*
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/common/dali-vector.h>
23 #include <string>
24
25 // INTERNAL INCLUDES
26 #include <dali-toolkit/internal/text/text-definitions.h>
27
28 namespace Dali
29 {
30 struct Vector2;
31 struct Vector4;
32
33 namespace Toolkit
34 {
35 namespace Text
36 {
37 /**
38  * @brief Stores an attribute pair: name, value.
39  */
40 struct Attribute
41 {
42   const char* nameBuffer;
43   const char* valueBuffer;
44   Length      nameLength;
45   Length      valueLength;
46 };
47
48 /**
49  * @brief Stores a tag and its attributes.
50  */
51 struct Tag
52 {
53   Vector<Attribute> attributes;
54   const char*       buffer;
55   Length            length;
56   bool              isEndTag;
57 };
58
59 /**
60  * @brief Compare if two tokens are equal.
61  *
62  * @pre @p string1 must be lower case. (The html-ish constant tokens)
63  * The @p stringBuffer2 parameter is transformed to lower case.
64  * This function is used in the mark-up parser.
65  * It has no sense to transform the constants html-ish tokens to lower case when
66  * it's known they already are.
67  *
68  * @param[in] string1 The html-ish constant token.
69  * @param[in] stringBuffer2 Pointer to the html-ish token buffer.
70  * @param[in] length The length of the html-ish token.
71  *
72  * @return @e true if both strings are equal.
73  */
74 bool TokenComparison(const std::string& string1, const char* const stringBuffer2, Length length);
75
76 /**
77  * @brief Skips any unnecessary white space.
78  *
79  * @param[in,out] stringBuffer The string buffer. It's a const iterator pointing the current character.
80  * @param[in] stringEndBuffer Pointer to one character after the end of the string buffer.
81  */
82 void SkipWhiteSpace(const char*&      stringBuffer,
83                     const char* const stringEndBuffer);
84
85 /**
86  * @Brief Jumps to the next white space.
87  *
88  * @param[in,out] stringBuffer The string buffer. It's a const iterator pointing the current character.
89  * @param[in] stringEndBuffer Pointer to one character after the end of the string buffer.
90  */
91 void JumpToWhiteSpace(const char*&      stringBuffer,
92                       const char* const stringEndBuffer);
93
94 /**
95 * @brief Converts a string into an unsigned int.
96 *
97 * @param[in] uintStr An unsigned int packed inside a string.
98 *
99 * @return The unsigned int value.
100 */
101 unsigned int StringToUint(const char* const uintStr);
102
103 /**
104  * @brief Converts a string into an hexadecimal unsigned int.
105  *
106  * @param[in] uintStr An hexadecimal unsigned int packed inside a string.
107  *
108  * @return The hexadecimal value.
109  */
110 unsigned int StringToHex(const char* const uintStr);
111
112 /**
113  * @brief Converts a string into a float value.
114  *
115  * @param[in] floatStr A float packed inside a string.
116  *
117  * @return The float value.
118  */
119 float StringToFloat(const char* const floatStr);
120
121 /**
122  * @brief Converts a float into a string.
123  *
124  * @param[in] value The float value.
125  * @param[out] floatStr The string.
126  */
127 void FloatToString(float value, std::string& floatStr);
128
129 /**
130  * @brief Converts an unsigned int into a string.
131  *
132  * @param[in] value The unsigned int value.
133  * @param[out] uIntStr The string.
134  */
135 void UintToString(unsigned int value, std::string& uIntStr);
136
137 /**
138  * @brief Converts an ARGB color packed in 4 byte unsigned int into a Vector4 color used in Dali.
139  *
140  * @param[in] color An ARGB color packed in an unsigned int.
141  * @param[out] retColor A Vector4 with the converted color.
142  */
143 void UintColorToVector4(unsigned int color, Vector4& retColor);
144
145 /**
146  * @brief Converts a color packed inside a string into an ARGB Vector4 color.
147  *
148  * The string color could be in hexadecimal ( 0xFF0000FF ), webcolor ( #0000FF or #00F ) or some constant values:
149  * black, white, red, green, blue, yellow, magenta, cyan or transparent.
150  *
151  * @param[in] colorStr A color packed inside a string.
152  * @param[in] length The length of the color string.
153  * @param[out] retColor A color packed inside a Vector4.
154  */
155 void ColorStringToVector4(const char* const colorStr, Length length, Vector4& retColor);
156
157 /**
158  * @brief Converts a color packed in a Vector4 into a string.
159  *
160  * Constant colors will be converted to the strings black, white, red, green, blue, yellow, magenta, cyan or transparent.
161  *
162  * If is not a constant color it will be converted to a string with hexadecimal ARGB content.
163  *
164  * @param[in] value The color value.
165  * @param[out] colorStr The string.
166  */
167 void Vector4ToColorString(const Vector4& value, std::string& vector2Str);
168
169 /**
170  * @brief Converts a two dimension vector packed inside a string into a Vector2.
171  *
172  * @param[in] vectorStr The two dimension vector packed inside a string.
173  * @param[in] length The length of the string.
174  * @param[out] vector2 The Vector2.
175  */
176 void StringToVector2(const char* const vectorStr, Length length, Vector2& vector2);
177
178 /**
179  * @brief Converts a Vector2 into a string.
180  *
181  * @param[in] value The vector2 value.
182  * @param[out] vector2Str The string.
183  */
184 void Vector2ToString(const Vector2& value, std::string& vector2Str);
185
186 } // namespace Text
187
188 } // namespace Toolkit
189
190 } // namespace Dali
191
192 #endif // DALI_TOOLKIT_TEXT_MARKUP_PROCESSOR_HELPER_FUNCTIONS_H