[dali_1.4.21] 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) 2019 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
31 struct Vector2;
32 struct Vector4;
33
34 namespace Toolkit
35 {
36
37 namespace Text
38 {
39
40 /**
41  * @brief Stores an attribute pair: name, value.
42  */
43 struct Attribute
44 {
45   const char* nameBuffer;
46   const char* valueBuffer;
47   Length nameLength;
48   Length valueLength;
49 };
50
51 /**
52  * @brief Stores a tag and its attributes.
53  */
54  struct Tag
55  {
56    Vector<Attribute> attributes;
57    const char* buffer;
58    Length length;
59    bool isEndTag;
60  };
61
62 /**
63  * @brief Compare if two tokens are equal.
64  *
65  * @pre @p string1 must be lower case. (The html-ish constant tokens)
66  * The @p stringBuffer2 parameter is transformed to lower case.
67  * This function is used in the mark-up parser.
68  * It has no sense to transform the constants html-ish tokens to lower case when
69  * it's known they already are.
70  *
71  * @param[in] string1 The html-ish constant token.
72  * @param[in] stringBuffer2 Pointer to the html-ish token buffer.
73  * @param[in] length The length of the html-ish token.
74  *
75  * @return @e true if both strings are equal.
76  */
77 bool TokenComparison( const std::string& string1, const char* const stringBuffer2, Length length );
78
79 /**
80  * @brief Skips any unnecessary white space.
81  *
82  * @param[in,out] stringBuffer The string buffer. It's a const iterator pointing the current character.
83  * @param[in] stringEndBuffer Pointer to one character after the end of the string buffer.
84  */
85 void SkipWhiteSpace( const char*& stringBuffer,
86                      const char* const stringEndBuffer );
87
88 /**
89  * @Brief Jumps to the next white space.
90  *
91  * @param[in,out] stringBuffer The string buffer. It's a const iterator pointing the current character.
92  * @param[in] stringEndBuffer Pointer to one character after the end of the string buffer.
93  */
94 void JumpToWhiteSpace( const char*& stringBuffer,
95                        const char* const stringEndBuffer );
96
97 /**
98 * @brief Converts a string into an unsigned int.
99 *
100 * @param[in] uintStr An unsigned int packed inside a string.
101 *
102 * @return The unsigned int value.
103 */
104 unsigned int StringToUint( const char* const uintStr );
105
106 /**
107  * @brief Converts a string into an hexadecimal unsigned int.
108  *
109  * @param[in] uintStr An hexadecimal unsigned int packed inside a string.
110  *
111  * @return The hexadecimal value.
112  */
113 unsigned int StringToHex( const char* const uintStr );
114
115 /**
116  * @brief Converts a string into a float value.
117  *
118  * @param[in] floatStr A float packed inside a string.
119  *
120  * @return The float value.
121  */
122 float StringToFloat( const char* const floatStr );
123
124 /**
125  * @brief Converts a float into a string.
126  *
127  * @param[in] value The float value.
128  * @param[out] floatStr The string.
129  */
130 void FloatToString( float value, std::string& floatStr );
131
132 /**
133  * @brief Converts an unsigned int into a string.
134  *
135  * @param[in] value The unsigned int value.
136  * @param[out] uIntStr The string.
137  */
138 void UintToString( unsigned int value, std::string& uIntStr );
139
140 /**
141  * @brief Converts an ARGB color packed in 4 byte unsigned int into a Vector4 color used in Dali.
142  *
143  * @param[in] color An ARGB color packed in an unsigned int.
144  * @param[out] retColor A Vector4 with the converted color.
145  */
146 void UintColorToVector4( unsigned int color, Vector4& retColor );
147
148 /**
149  * @brief Converts a color packed inside a string into an ARGB Vector4 color.
150  *
151  * The string color could be in hexadecimal ( 0xFF0000FF ), webcolor ( #0000FF or #00F ) or some constant values:
152  * black, white, red, green, blue, yellow, magenta, cyan or transparent.
153  *
154  * @param[in] colorStr A color packed inside a string.
155  * @param[in] length The length of the color string.
156  * @param[out] retColor A color packed inside a Vector4.
157  */
158 void ColorStringToVector4( const char* const colorStr, Length length, Vector4& retColor );
159
160 /**
161  * @brief Converts a color packed in a Vector4 into a string.
162  *
163  * Constant colors will be converted to the strings black, white, red, green, blue, yellow, magenta, cyan or transparent.
164  *
165  * If is not a constant color it will be converted to a string with hexadecimal ARGB content.
166  *
167  * @param[in] value The color value.
168  * @param[out] colorStr The string.
169  */
170 void Vector4ToColorString( const Vector4& value, std::string& vector2Str );
171
172 /**
173  * @brief Converts a two dimension vector packed inside a string into a Vector2.
174  *
175  * @param[in] vectorStr The two dimension vector packed inside a string.
176  * @param[in] length The length of the string.
177  * @param[out] vector2 The Vector2.
178  */
179 void StringToVector2( const char* const vectorStr, Length length, Vector2& vector2 );
180
181 /**
182  * @brief Converts a Vector2 into a string.
183  *
184  * @param[in] value The vector2 value.
185  * @param[out] vector2Str The string.
186  */
187 void Vector2ToString( const Vector2& value, std::string& vector2Str );
188
189 } // namespace Text
190
191 } // namespace Toolkit
192
193 } // namespace Dali
194
195 #endif // DALI_TOOLKIT_TEXT_MARKUP_PROCESSOR_HELPER_FUNCTIONS_H