@@ -14,8 +14,11 @@ namespace utf8
1414#include < cage-core/pointerRangeHolder.h>
1515#include < cage-core/utf.h>
1616
17- #define TRY_BEGIN try
17+ #define TRY_BEGIN \
18+ try \
19+ {
1820#define TRY_END \
21+ } \
1922 catch (const std::exception &e) \
2023 { \
2124 CAGE_LOG_THROW (e.what ()); \
@@ -27,9 +30,7 @@ namespace cage
2730 bool utfValid (PointerRange<const char > buffer)
2831 {
2932 TRY_BEGIN
30- {
31- return utf8::is_valid (buffer.begin (), buffer.end ());
32- }
33+ return utf8::is_valid (buffer.begin (), buffer.end ());
3334 TRY_END
3435 }
3536
@@ -43,111 +44,107 @@ namespace cage
4344 return utfValid ({ str, str + numeric_cast<uint32>(std::strlen (str)) });
4445 }
4546
46- uint32 utf32Length (PointerRange<const char > buffer){ TRY_BEGIN{ return numeric_cast<uint32>(utf8::distance (buffer.begin (), buffer.end ()));
47- }
48- TRY_END
49- }
47+ uint32 utf32Length (PointerRange<const char > buffer)
48+ {
49+ TRY_BEGIN
50+ return numeric_cast<uint32>(utf8::distance (buffer.begin (), buffer.end ()));
51+ TRY_END
52+ }
5053
51- uint32 utf32Length (const String &str)
52- {
53- return utf32Length ({ str.c_str (), str.c_str () + str.length () });
54- }
54+ uint32 utf32Length (const String &str)
55+ {
56+ return utf32Length ({ str.c_str (), str.c_str () + str.length () });
57+ }
5558
56- uint32 utf32Length (const char *str)
57- {
58- return utf32Length ({ str, str + numeric_cast<uint32>(std::strlen (str)) });
59- }
59+ uint32 utf32Length (const char *str)
60+ {
61+ return utf32Length ({ str, str + numeric_cast<uint32>(std::strlen (str)) });
62+ }
6063
61- uint32 utf8Length (PointerRange<const uint32> buffer){ TRY_BEGIN{ const uint32 *b = buffer.begin ();
62- const uint32 *e = buffer.end ();
63- char tmp[7 ];
64- uint32 result = 0 ;
65- while (b != e)
66- {
67- char *d = utf8::utf32to8 (b, b + 1 , tmp);
68- result += numeric_cast<uint32>(d - tmp);
69- b++;
70- }
71- return result;
72- }
73- TRY_END
74- }
64+ uint32 utf8Length (PointerRange<const uint32> buffer)
65+ {
66+ TRY_BEGIN
67+ const uint32 *b = buffer.begin ();
68+ const uint32 *e = buffer.end ();
69+ char tmp[7 ];
70+ uint32 result = 0 ;
71+ while (b != e)
72+ {
73+ char *d = utf8::utf32to8 (b, b + 1 , tmp);
74+ result += numeric_cast<uint32>(d - tmp);
75+ b++;
76+ }
77+ return result;
78+ TRY_END
79+ }
7580
76- Holder<PointerRange<uint32>> utf8to32 (PointerRange<const char > inBuffer)
77- {
78- PointerRangeHolder<uint32> result;
79- result.resize (utf32Length (inBuffer));
80- TRY_BEGIN
81+ Holder<PointerRange<uint32>> utf8to32 (PointerRange<const char > inBuffer)
8182 {
83+ PointerRangeHolder<uint32> result;
84+ result.resize (utf32Length (inBuffer));
85+ TRY_BEGIN
8286 uint32 *end = utf8::utf8to32 (inBuffer.begin (), inBuffer.end (), result.data ());
8387 CAGE_ASSERT (end == result.data () + result.size ());
8488 return result;
89+ TRY_END
8590 }
86- TRY_END
87- }
8891
89- Holder<PointerRange<uint32>> utf8to32 (const String &str)
90- {
91- return utf8to32 ({ str.c_str (), str.c_str () + str.length () });
92- }
92+ Holder<PointerRange<uint32>> utf8to32 (const String &str)
93+ {
94+ return utf8to32 ({ str.c_str (), str.c_str () + str.length () });
95+ }
9396
94- Holder<PointerRange<uint32>> utf8to32 (const char *str)
95- {
96- return utf8to32 ({ str, str + numeric_cast<uint32>(std::strlen (str)) });
97- }
97+ Holder<PointerRange<uint32>> utf8to32 (const char *str)
98+ {
99+ return utf8to32 ({ str, str + numeric_cast<uint32>(std::strlen (str)) });
100+ }
98101
99- void utf8to32 (PointerRange<uint32> &outBuffer, PointerRange<const char > inBuffer)
100- {
101- CAGE_ASSERT (outBuffer.size () >= utf32Length (inBuffer));
102- TRY_BEGIN
102+ void utf8to32 (PointerRange<uint32> &outBuffer, PointerRange<const char > inBuffer)
103103 {
104+ CAGE_ASSERT (outBuffer.size () >= utf32Length (inBuffer));
105+ TRY_BEGIN
104106 uint32 *end = utf8::utf8to32 (inBuffer.begin (), inBuffer.end (), outBuffer.begin ());
105107 outBuffer = { outBuffer.begin (), end };
108+ TRY_END
106109 }
107- TRY_END
108- }
109110
110- void utf8to32 (PointerRange<uint32> &outBuffer, const String &str)
111- {
112- utf8to32 (outBuffer, { str.c_str (), str.c_str () + str.length () });
113- }
111+ void utf8to32 (PointerRange<uint32> &outBuffer, const String &str)
112+ {
113+ utf8to32 (outBuffer, { str.c_str (), str.c_str () + str.length () });
114+ }
114115
115- void utf8to32 (PointerRange<uint32> &outBuffer, const char *str)
116- {
117- utf8to32 (outBuffer, { str, str + numeric_cast<uint32>(std::strlen (str)) });
118- }
116+ void utf8to32 (PointerRange<uint32> &outBuffer, const char *str)
117+ {
118+ utf8to32 (outBuffer, { str, str + numeric_cast<uint32>(std::strlen (str)) });
119+ }
119120
120- Holder<PointerRange<char >> utf32to8 (PointerRange<const uint32> buffer)
121- {
122- PointerRangeHolder<char > result;
123- result.resize (utf8Length (buffer));
124- TRY_BEGIN
121+ Holder<PointerRange<char >> utf32to8 (PointerRange<const uint32> buffer)
125122 {
123+ PointerRangeHolder<char > result;
124+ result.resize (utf8Length (buffer));
125+ TRY_BEGIN
126126 char *end = utf8::utf32to8 (buffer.begin (), buffer.end (), result.data ());
127127 CAGE_ASSERT (end == result.data () + result.size ());
128128 return result;
129+ TRY_END
129130 }
130- TRY_END
131- }
132131
133- void utf32to8 (PointerRange<char > &outBuffer, PointerRange<const uint32> inBuffer)
134- {
135- CAGE_ASSERT (outBuffer.size () >= utf8Length (inBuffer));
136- TRY_BEGIN
132+ void utf32to8 (PointerRange<char > &outBuffer, PointerRange<const uint32> inBuffer)
137133 {
134+ CAGE_ASSERT (outBuffer.size () >= utf8Length (inBuffer));
135+ TRY_BEGIN
138136 char *end = utf8::utf32to8 (inBuffer.begin (), inBuffer.end (), outBuffer.begin ());
139137 outBuffer = { outBuffer.begin (), end };
138+ TRY_END
140139 }
141- TRY_END
142- }
143140
144- String utf32to8string (PointerRange<const uint32> inBuffer)
145- {
146- if (utf8Length (inBuffer) > String::MaxLength)
147- CAGE_THROW_ERROR (Exception, " utf string too long" );
148- char buff[String::MaxLength];
149- PointerRange<char > pr = { buff, buff + String::MaxLength - 1 };
150- utf32to8 (pr, inBuffer);
151- return String (pr);
152- }
141+ String utf32to8string (PointerRange<const uint32> inBuffer)
142+ {
143+ if (utf8Length (inBuffer) > String::MaxLength)
144+ CAGE_THROW_ERROR (Exception, " utf string too long" );
145+ char buff[String::MaxLength];
146+ PointerRange<char > pr = { buff, buff + String::MaxLength - 1 };
147+ utf32to8 (pr, inBuffer);
148+ return String (pr);
149+ }
153150}
0 commit comments