diff options
author | Alex Zolotarev <alex@mapswithme.com> | 2013-05-29 17:32:16 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:55:31 +0300 |
commit | 9add6f84771e02bd8e60a1e7f86220ed2ced1a2c (patch) | |
tree | 27b7e2c23817c030829f974962e82a38046887d0 /3party/utfcpp | |
parent | f8acbd06c50d24326b9515290cff6d15533759e7 (diff) |
[3party] Updated utfcpp to 2.3.4
Diffstat (limited to '3party/utfcpp')
-rw-r--r--[-rwxr-xr-x] | 3party/utfcpp/doc/ReleaseNotes | 14 | ||||
-rw-r--r--[-rwxr-xr-x] | 3party/utfcpp/doc/utf8cpp.html | 30 | ||||
-rw-r--r-- | 3party/utfcpp/source/utf8/checked.h | 118 | ||||
-rw-r--r--[-rwxr-xr-x] | 3party/utfcpp/source/utf8/core.h | 209 | ||||
-rw-r--r--[-rwxr-xr-x] | 3party/utfcpp/source/utf8/unchecked.h | 46 |
5 files changed, 191 insertions, 226 deletions
diff --git a/3party/utfcpp/doc/ReleaseNotes b/3party/utfcpp/doc/ReleaseNotes index c0c01a3c61..364411a23d 100755..100644 --- a/3party/utfcpp/doc/ReleaseNotes +++ b/3party/utfcpp/doc/ReleaseNotes @@ -1,12 +1,12 @@ utf8 cpp library -Release 2.3.1 +Release 2.3.4 -A bug fix release. Special thanks to dalle and Ivan Sorokin who reported the bugs. +A minor bug fix release. Thanks to all who reported bugs. -Changes from version 2.3 -- Bug fix [3025042]: is_bom documentation issue. -- Bug fix [3083640]: is_code_point_valid incorrectly returns false. -- Bug fix [3167987]: prior moves it before start. -- Bug fix [3185087]: utf8::prior and utf8::previous documentation issue. +Note: Version 2.3.3 contained a regression, and therefore was removed. + +Changes from version 2.3.2 +- Bug fix [39]: checked.h Line 273 and unchecked.h Line 182 have an extra ';' +- Bug fix [36]: replace_invalid() only works with back_inserter Files included in the release: utf8.h, core.h, checked.h, unchecked.h, utf8cpp.html, ReleaseNotes diff --git a/3party/utfcpp/doc/utf8cpp.html b/3party/utfcpp/doc/utf8cpp.html index c0a89a27de..6f2aacbe7b 100755..100644 --- a/3party/utfcpp/doc/utf8cpp.html +++ b/3party/utfcpp/doc/utf8cpp.html @@ -89,9 +89,6 @@ <a href="#points">Points of Interest</a> </li> <li> - <a href="#conclusion">Conclusion</a> - </li> - <li> <a href="#links">Links</a> </li> </ul> @@ -101,10 +98,12 @@ </h2> <p> Many C++ developers miss an easy and portable way of handling Unicode encoded - strings. The original C++ Standard (known as C++98 or C++03) is Unicode agnostic, - and while some work is being done to introduce Unicode to the next incarnation - called C++0x, for the moment nothing of the sort is available. In the meantime, - developers use third party libraries like ICU, OS specific capabilities, or simply + strings. The original C++ Standard (known as C++98 or C++03) is Unicode agnostic. + C++11 provides some support for Unicode on core language and library level: + u8, u, and U character and string literals, char16_t and char32_t character types, + u16string and u32string library classes, and codecvt support for conversions + between Unicode encoding forms. + In the meantime, developers use third party libraries like ICU, OS specific capabilities, or simply roll out their own solutions. </p> <p> @@ -1730,7 +1729,7 @@ assert (*un_it == <span class="literal">0x10346</span>); for Windows (both 32 and 64 bit), and most 32 bit and 64 bit Unix derivatives. </li> <li> - Lightweight: follow the "pay only for what you use" guidline. + Lightweight: follow the "pay only for what you use" guideline. </li> <li> Unintrusive: avoid forcing any particular design or even programming style on the @@ -1752,6 +1751,10 @@ assert (*un_it == <span class="literal">0x10346</span>); recommend looking at ICU even if you don't plan to use it. </li> <li> + C++11 language and library features. Still far from complete, and not widely + supported by compiler vendors. + </li> + <li> <a href= "http://www.gtkmm.org/gtkmm2/docs/tutorial/html/ch03s04.html">Glib::ustring</a>. A class specifically made to work with UTF-8 strings, and also feel like @@ -1761,18 +1764,9 @@ assert (*un_it == <span class="literal">0x10346</span>); <li> Platform dependent solutions: Windows and POSIX have functions to convert strings from one encoding to another. That is only a subset of what my library offers, - but if that is all you need it may be good enough, especially given the fact that - these functions are mature and tested in production. + but if that is all you need it may be good enough. </li> </ol> - <h2 id="conclusion"> - Conclusion - </h2> - <p> - Until Unicode becomes officially recognized by the C++ Standard Library, we need to - use other means to work with UTF-8 strings. Template functions I describe in this - article may be a good step in this direction. - </p> <h2 id="links"> Links </h2> diff --git a/3party/utfcpp/source/utf8/checked.h b/3party/utfcpp/source/utf8/checked.h index 9cb8d2c7f2..1331155138 100644 --- a/3party/utfcpp/source/utf8/checked.h +++ b/3party/utfcpp/source/utf8/checked.h @@ -34,7 +34,7 @@ DEALINGS IN THE SOFTWARE. namespace utf8 { // Base for the exceptions that may be thrown from the library - class exception : public std::exception { + class exception : public ::std::exception { }; // Exceptions that may be thrown from the library functions. @@ -69,12 +69,38 @@ namespace utf8 /// The library API - functions intended to be called by the users + template <typename octet_iterator> + octet_iterator append(uint32_t cp, octet_iterator result) + { + if (!utf8::internal::is_code_point_valid(cp)) + throw invalid_code_point(cp); + + if (cp < 0x80) // one octet + *(result++) = static_cast<uint8_t>(cp); + else if (cp < 0x800) { // two octets + *(result++) = static_cast<uint8_t>((cp >> 6) | 0xc0); + *(result++) = static_cast<uint8_t>((cp & 0x3f) | 0x80); + } + else if (cp < 0x10000) { // three octets + *(result++) = static_cast<uint8_t>((cp >> 12) | 0xe0); + *(result++) = static_cast<uint8_t>(((cp >> 6) & 0x3f) | 0x80); + *(result++) = static_cast<uint8_t>((cp & 0x3f) | 0x80); + } + else { // four octets + *(result++) = static_cast<uint8_t>((cp >> 18) | 0xf0); + *(result++) = static_cast<uint8_t>(((cp >> 12) & 0x3f) | 0x80); + *(result++) = static_cast<uint8_t>(((cp >> 6) & 0x3f) | 0x80); + *(result++) = static_cast<uint8_t>((cp & 0x3f) | 0x80); + } + return result; + } + template <typename octet_iterator, typename output_iterator> output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, uint32_t replacement) { while (start != end) { octet_iterator sequence_start = start; - internal::utf_error err_code = internal::validate_next(start, end); + internal::utf_error err_code = utf8::internal::validate_next(start, end); switch (err_code) { case internal::UTF8_OK : for (octet_iterator it = sequence_start; it != start; ++it) @@ -83,16 +109,16 @@ namespace utf8 case internal::NOT_ENOUGH_ROOM: throw not_enough_room(); case internal::INVALID_LEAD: - append (replacement, out); + out = utf8::append (replacement, out); ++start; break; case internal::INCOMPLETE_SEQUENCE: case internal::OVERLONG_SEQUENCE: case internal::INVALID_CODE_POINT: - append (replacement, out); + out = utf8::append (replacement, out); ++start; // just one replacement mark for the sequence - while (internal::is_trail(*start) && start != end) + while (start != end && utf8::internal::is_trail(*start)) ++start; break; } @@ -103,41 +129,15 @@ namespace utf8 template <typename octet_iterator, typename output_iterator> inline output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out) { - static const uint32_t replacement_marker = internal::mask16(0xfffd); - return replace_invalid(start, end, out, replacement_marker); - } - - template <typename octet_iterator> - octet_iterator append(uint32_t cp, octet_iterator result) - { - if (!internal::is_code_point_valid(cp)) - throw invalid_code_point(cp); - - if (cp < 0x80) // one octet - *(result++) = static_cast<uint8_t>(cp); - else if (cp < 0x800) { // two octets - *(result++) = static_cast<uint8_t>((cp >> 6) | 0xc0); - *(result++) = static_cast<uint8_t>((cp & 0x3f) | 0x80); - } - else if (cp < 0x10000) { // three octets - *(result++) = static_cast<uint8_t>((cp >> 12) | 0xe0); - *(result++) = static_cast<uint8_t>(((cp >> 6) & 0x3f) | 0x80); - *(result++) = static_cast<uint8_t>((cp & 0x3f) | 0x80); - } - else { // four octets - *(result++) = static_cast<uint8_t>((cp >> 18) | 0xf0); - *(result++) = static_cast<uint8_t>(((cp >> 12) & 0x3f) | 0x80); - *(result++) = static_cast<uint8_t>(((cp >> 6) & 0x3f) | 0x80); - *(result++) = static_cast<uint8_t>((cp & 0x3f) | 0x80); - } - return result; + static const uint32_t replacement_marker = utf8::internal::mask16(0xfffd); + return utf8::replace_invalid(start, end, out, replacement_marker); } template <typename octet_iterator> uint32_t next(octet_iterator& it, octet_iterator end) { uint32_t cp = 0; - internal::utf_error err_code = internal::validate_next(it, end, &cp); + internal::utf_error err_code = utf8::internal::validate_next(it, end, cp); switch (err_code) { case internal::UTF8_OK : break; @@ -156,22 +156,22 @@ namespace utf8 template <typename octet_iterator> uint32_t peek_next(octet_iterator it, octet_iterator end) { - return next(it, end); + return utf8::next(it, end); } template <typename octet_iterator> uint32_t prior(octet_iterator& it, octet_iterator start) - {
+ { // can't do much if it == start - if (it == start)
+ if (it == start) throw not_enough_room(); - octet_iterator end = it;
+ octet_iterator end = it; // Go back until we hit either a lead octet or start - while (internal::is_trail(*(--it))) + while (utf8::internal::is_trail(*(--it))) if (it == start) throw invalid_utf8(*it); // error - no lead byte in the sequence - return peek_next(it, end); + return utf8::peek_next(it, end); } /// Deprecated in versions that include "prior" @@ -179,18 +179,18 @@ namespace utf8 uint32_t previous(octet_iterator& it, octet_iterator pass_start) { octet_iterator end = it; - while (internal::is_trail(*(--it))) + while (utf8::internal::is_trail(*(--it))) if (it == pass_start) throw invalid_utf8(*it); // error - no lead byte in the sequence octet_iterator temp = it; - return next(temp, end); + return utf8::next(temp, end); } template <typename octet_iterator, typename distance_type> void advance (octet_iterator& it, distance_type n, octet_iterator end) { for (distance_type i = 0; i < n; ++i) - next(it, end); + utf8::next(it, end); } template <typename octet_iterator> @@ -199,7 +199,7 @@ namespace utf8 { typename std::iterator_traits<octet_iterator>::difference_type dist; for (dist = 0; first < last; ++dist) - next(first, last); + utf8::next(first, last); return dist; } @@ -207,12 +207,12 @@ namespace utf8 octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) { while (start != end) { - uint32_t cp = internal::mask16(*start++); + uint32_t cp = utf8::internal::mask16(*start++); // Take care of surrogate pairs first - if (internal::is_lead_surrogate(cp)) { + if (utf8::internal::is_lead_surrogate(cp)) { if (start != end) { - uint32_t trail_surrogate = internal::mask16(*start++); - if (internal::is_trail_surrogate(trail_surrogate)) + uint32_t trail_surrogate = utf8::internal::mask16(*start++); + if (utf8::internal::is_trail_surrogate(trail_surrogate)) cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; else throw invalid_utf16(static_cast<uint16_t>(trail_surrogate)); @@ -222,10 +222,10 @@ namespace utf8 } // Lone trail surrogate - else if (internal::is_trail_surrogate(cp)) + else if (utf8::internal::is_trail_surrogate(cp)) throw invalid_utf16(static_cast<uint16_t>(cp)); - result = append(cp, result); + result = utf8::append(cp, result); } return result; } @@ -234,7 +234,7 @@ namespace utf8 u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) { while (start != end) { - uint32_t cp = next(start, end); + uint32_t cp = utf8::next(start, end); if (cp > 0xffff) { //make a surrogate pair *result++ = static_cast<uint16_t>((cp >> 10) + internal::LEAD_OFFSET); *result++ = static_cast<uint16_t>((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); @@ -249,7 +249,7 @@ namespace utf8 octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) { while (start != end) - result = append(*(start++), result); + result = utf8::append(*(start++), result); return result; } @@ -258,7 +258,7 @@ namespace utf8 u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) { while (start != end) - (*result++) = next(start, end); + (*result++) = utf8::next(start, end); return result; } @@ -270,7 +270,7 @@ namespace utf8 octet_iterator range_start; octet_iterator range_end; public: - iterator () {}; + iterator () {} explicit iterator (const octet_iterator& octet_it, const octet_iterator& range_start, const octet_iterator& range_end) : @@ -284,7 +284,7 @@ namespace utf8 uint32_t operator * () const { octet_iterator temp = it; - return next(temp, range_end); + return utf8::next(temp, range_end); } bool operator == (const iterator& rhs) const { @@ -298,24 +298,24 @@ namespace utf8 } iterator& operator ++ () { - next(it, range_end); + utf8::next(it, range_end); return *this; } iterator operator ++ (int) { iterator temp = *this; - next(it, range_end); + utf8::next(it, range_end); return temp; } iterator& operator -- () { - prior(it, range_start); + utf8::prior(it, range_start); return *this; } iterator operator -- (int) { iterator temp = *this; - prior(it, range_start); + utf8::prior(it, range_start); return temp; } }; // class iterator diff --git a/3party/utfcpp/source/utf8/core.h b/3party/utfcpp/source/utf8/core.h index 268cf7cd48..693d388c07 100755..100644 --- a/3party/utfcpp/source/utf8/core.h +++ b/3party/utfcpp/source/utf8/core.h @@ -68,7 +68,7 @@ namespace internal template<typename octet_type> inline bool is_trail(octet_type oc) { - return ((mask8(oc) >> 6) == 0x2); + return ((utf8::internal::mask8(oc) >> 6) == 0x2); } template <typename u16> @@ -92,14 +92,14 @@ namespace internal template <typename u32> inline bool is_code_point_valid(u32 cp) { - return (cp <= CODE_POINT_MAX && !is_surrogate(cp)); + return (cp <= CODE_POINT_MAX && !utf8::internal::is_surrogate(cp)); } template <typename octet_iterator> inline typename std::iterator_traits<octet_iterator>::difference_type sequence_length(octet_iterator lead_it) { - uint8_t lead = mask8(*lead_it); + uint8_t lead = utf8::internal::mask8(*lead_it); if (lead < 0x80) return 1; else if ((lead >> 5) == 0x6) @@ -133,123 +133,94 @@ namespace internal enum utf_error {UTF8_OK, NOT_ENOUGH_ROOM, INVALID_LEAD, INCOMPLETE_SEQUENCE, OVERLONG_SEQUENCE, INVALID_CODE_POINT}; - /// get_sequence_x functions decode utf-8 sequences of the length x + /// Helper for get_sequence_x + template <typename octet_iterator> + utf_error increase_safely(octet_iterator& it, octet_iterator end) + { + if (++it == end) + return NOT_ENOUGH_ROOM; + + if (!utf8::internal::is_trail(*it)) + return INCOMPLETE_SEQUENCE; + + return UTF8_OK; + } + #define UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(IT, END) {utf_error ret = increase_safely(IT, END); if (ret != UTF8_OK) return ret;} + + /// get_sequence_x functions decode utf-8 sequences of the length x template <typename octet_iterator> - utf_error get_sequence_1(octet_iterator& it, octet_iterator end, uint32_t* code_point) + utf_error get_sequence_1(octet_iterator& it, octet_iterator end, uint32_t& code_point) { - if (it != end) { - if (code_point) - *code_point = mask8(*it); - return UTF8_OK; - } - return NOT_ENOUGH_ROOM; + if (it == end) + return NOT_ENOUGH_ROOM; + + code_point = utf8::internal::mask8(*it); + + return UTF8_OK; } template <typename octet_iterator> - utf_error get_sequence_2(octet_iterator& it, octet_iterator end, uint32_t* code_point) + utf_error get_sequence_2(octet_iterator& it, octet_iterator end, uint32_t& code_point) { - utf_error ret_code = NOT_ENOUGH_ROOM; + if (it == end) + return NOT_ENOUGH_ROOM; + + code_point = utf8::internal::mask8(*it); - if (it != end) { - uint32_t cp = mask8(*it); - if (++it != end) { - if (is_trail(*it)) { - cp = ((cp << 6) & 0x7ff) + ((*it) & 0x3f); + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) - if (code_point) - *code_point = cp; - ret_code = UTF8_OK; - } - else - ret_code = INCOMPLETE_SEQUENCE; - } - else - ret_code = NOT_ENOUGH_ROOM; - } + code_point = ((code_point << 6) & 0x7ff) + ((*it) & 0x3f); - return ret_code; + return UTF8_OK; } template <typename octet_iterator> - utf_error get_sequence_3(octet_iterator& it, octet_iterator end, uint32_t* code_point) + utf_error get_sequence_3(octet_iterator& it, octet_iterator end, uint32_t& code_point) { - utf_error ret_code = NOT_ENOUGH_ROOM; - - if (it != end) { - uint32_t cp = mask8(*it); - if (++it != end) { - if (is_trail(*it)) { - cp = ((cp << 12) & 0xffff) + ((mask8(*it) << 6) & 0xfff); - if (++it != end) { - if (is_trail(*it)) { - cp += (*it) & 0x3f; - - if (code_point) - *code_point = cp; - ret_code = UTF8_OK; - } - else - ret_code = INCOMPLETE_SEQUENCE; - } - else - ret_code = NOT_ENOUGH_ROOM; - } - else - ret_code = INCOMPLETE_SEQUENCE; - } - else - ret_code = NOT_ENOUGH_ROOM; - } + if (it == end) + return NOT_ENOUGH_ROOM; + + code_point = utf8::internal::mask8(*it); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point = ((code_point << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) - return ret_code; + code_point += (*it) & 0x3f; + + return UTF8_OK; } template <typename octet_iterator> - utf_error get_sequence_4(octet_iterator& it, octet_iterator end, uint32_t* code_point) + utf_error get_sequence_4(octet_iterator& it, octet_iterator end, uint32_t& code_point) { - utf_error ret_code = NOT_ENOUGH_ROOM; - - if (it != end) { - uint32_t cp = mask8(*it); - if (++it != end) { - if (is_trail(*it)) { - cp = ((cp << 18) & 0x1fffff) + ((mask8(*it) << 12) & 0x3ffff); - if (++it != end) { - if (is_trail(*it)) { - cp += (mask8(*it) << 6) & 0xfff; - if (++it != end) { - if (is_trail(*it)) { - cp += (*it) & 0x3f; - - if (code_point) - *code_point = cp; - ret_code = UTF8_OK; - } - else - ret_code = INCOMPLETE_SEQUENCE; - } - else - ret_code = NOT_ENOUGH_ROOM; - } - else - ret_code = INCOMPLETE_SEQUENCE; - } - else - ret_code = NOT_ENOUGH_ROOM; - } - else - ret_code = INCOMPLETE_SEQUENCE; - } - else - ret_code = NOT_ENOUGH_ROOM; - } + if (it == end) + return NOT_ENOUGH_ROOM; - return ret_code; + code_point = utf8::internal::mask8(*it); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point = ((code_point << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point += (utf8::internal::mask8(*it) << 6) & 0xfff; + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point += (*it) & 0x3f; + + return UTF8_OK; } + #undef UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR + template <typename octet_iterator> - utf_error validate_next(octet_iterator& it, octet_iterator end, uint32_t* code_point) + utf_error validate_next(octet_iterator& it, octet_iterator end, uint32_t& code_point) { // Save the original value of it so we can go back in case of failure // Of course, it does not make much sense with i.e. stream iterators @@ -258,34 +229,33 @@ namespace internal uint32_t cp = 0; // Determine the sequence length based on the lead octet typedef typename std::iterator_traits<octet_iterator>::difference_type octet_difference_type; - octet_difference_type length = sequence_length(it); - if (length == 0) - return INVALID_LEAD; + const octet_difference_type length = utf8::internal::sequence_length(it); - // Now that we have a valid sequence length, get trail octets and calculate the code point + // Get trail octets and calculate the code point utf_error err = UTF8_OK; switch (length) { + case 0: + return INVALID_LEAD; case 1: - err = get_sequence_1(it, end, &cp); + err = utf8::internal::get_sequence_1(it, end, cp); break; case 2: - err = get_sequence_2(it, end, &cp); + err = utf8::internal::get_sequence_2(it, end, cp); break; case 3: - err = get_sequence_3(it, end, &cp); + err = utf8::internal::get_sequence_3(it, end, cp); break; case 4: - err = get_sequence_4(it, end, &cp); + err = utf8::internal::get_sequence_4(it, end, cp); break; } if (err == UTF8_OK) { // Decoding succeeded. Now, security checks... - if (is_code_point_valid(cp)) { - if (!is_overlong_sequence(cp, length)){ + if (utf8::internal::is_code_point_valid(cp)) { + if (!utf8::internal::is_overlong_sequence(cp, length)){ // Passed! Return here. - if (code_point) - *code_point = cp; + code_point = cp; ++it; return UTF8_OK; } @@ -303,7 +273,8 @@ namespace internal template <typename octet_iterator> inline utf_error validate_next(octet_iterator& it, octet_iterator end) { - return validate_next(it, end, 0); + uint32_t ignored; + return utf8::internal::validate_next(it, end, ignored); } } // namespace internal @@ -318,7 +289,7 @@ namespace internal { octet_iterator result = start; while (result != end) { - internal::utf_error err_code = internal::validate_next(result, end); + utf8::internal::utf_error err_code = utf8::internal::validate_next(result, end); if (err_code != internal::UTF8_OK) return result; } @@ -328,27 +299,27 @@ namespace internal template <typename octet_iterator> inline bool is_valid(octet_iterator start, octet_iterator end) { - return (find_invalid(start, end) == end); + return (utf8::find_invalid(start, end) == end); } template <typename octet_iterator> inline bool starts_with_bom (octet_iterator it, octet_iterator end) { return ( - ((it != end) && (internal::mask8(*it++)) == bom[0]) && - ((it != end) && (internal::mask8(*it++)) == bom[1]) && - ((it != end) && (internal::mask8(*it)) == bom[2]) + ((it != end) && (utf8::internal::mask8(*it++)) == bom[0]) && + ((it != end) && (utf8::internal::mask8(*it++)) == bom[1]) && + ((it != end) && (utf8::internal::mask8(*it)) == bom[2]) ); } - //Deprecated in release 2.3 + //Deprecated in release 2.3 template <typename octet_iterator> inline bool is_bom (octet_iterator it) { return ( - (internal::mask8(*it++)) == bom[0] && - (internal::mask8(*it++)) == bom[1] && - (internal::mask8(*it)) == bom[2] + (utf8::internal::mask8(*it++)) == bom[0] && + (utf8::internal::mask8(*it++)) == bom[1] && + (utf8::internal::mask8(*it)) == bom[2] ); } } // namespace utf8 diff --git a/3party/utfcpp/source/utf8/unchecked.h b/3party/utfcpp/source/utf8/unchecked.h index 2f3eb4d1d0..cb2427166b 100755..100644 --- a/3party/utfcpp/source/utf8/unchecked.h +++ b/3party/utfcpp/source/utf8/unchecked.h @@ -60,7 +60,7 @@ namespace utf8 template <typename octet_iterator> uint32_t next(octet_iterator& it) { - uint32_t cp = internal::mask8(*it); + uint32_t cp = utf8::internal::mask8(*it); typename std::iterator_traits<octet_iterator>::difference_type length = utf8::internal::sequence_length(it); switch (length) { case 1: @@ -71,15 +71,15 @@ namespace utf8 break; case 3: ++it; - cp = ((cp << 12) & 0xffff) + ((internal::mask8(*it) << 6) & 0xfff); + cp = ((cp << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); ++it; cp += (*it) & 0x3f; break; case 4: ++it; - cp = ((cp << 18) & 0x1fffff) + ((internal::mask8(*it) << 12) & 0x3ffff); + cp = ((cp << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); ++it; - cp += (internal::mask8(*it) << 6) & 0xfff; + cp += (utf8::internal::mask8(*it) << 6) & 0xfff; ++it; cp += (*it) & 0x3f; break; @@ -91,29 +91,29 @@ namespace utf8 template <typename octet_iterator> uint32_t peek_next(octet_iterator it) { - return next(it); + return utf8::unchecked::next(it); } template <typename octet_iterator> uint32_t prior(octet_iterator& it) { - while (internal::is_trail(*(--it))) ; + while (utf8::internal::is_trail(*(--it))) ; octet_iterator temp = it; - return next(temp); + return utf8::unchecked::next(temp); } // Deprecated in versions that include prior, but only for the sake of consistency (see utf8::previous) template <typename octet_iterator> inline uint32_t previous(octet_iterator& it) { - return prior(it); + return utf8::unchecked::prior(it); } template <typename octet_iterator, typename distance_type> void advance (octet_iterator& it, distance_type n) { for (distance_type i = 0; i < n; ++i) - next(it); + utf8::unchecked::next(it); } template <typename octet_iterator> @@ -122,7 +122,7 @@ namespace utf8 { typename std::iterator_traits<octet_iterator>::difference_type dist; for (dist = 0; first < last; ++dist) - next(first); + utf8::unchecked::next(first); return dist; } @@ -130,13 +130,13 @@ namespace utf8 octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) { while (start != end) { - uint32_t cp = internal::mask16(*start++); + uint32_t cp = utf8::internal::mask16(*start++); // Take care of surrogate pairs first - if (internal::is_lead_surrogate(cp)) { - uint32_t trail_surrogate = internal::mask16(*start++); + if (utf8::internal::is_lead_surrogate(cp)) { + uint32_t trail_surrogate = utf8::internal::mask16(*start++); cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; } - result = append(cp, result); + result = utf8::unchecked::append(cp, result); } return result; } @@ -145,7 +145,7 @@ namespace utf8 u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) { while (start < end) { - uint32_t cp = next(start); + uint32_t cp = utf8::unchecked::next(start); if (cp > 0xffff) { //make a surrogate pair *result++ = static_cast<uint16_t>((cp >> 10) + internal::LEAD_OFFSET); *result++ = static_cast<uint16_t>((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); @@ -160,7 +160,7 @@ namespace utf8 octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) { while (start != end) - result = append(*(start++), result); + result = utf8::unchecked::append(*(start++), result); return result; } @@ -169,7 +169,7 @@ namespace utf8 u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) { while (start < end) - (*result++) = next(start); + (*result++) = utf8::unchecked::next(start); return result; } @@ -179,14 +179,14 @@ namespace utf8 class iterator : public std::iterator <std::bidirectional_iterator_tag, uint32_t> { octet_iterator it; public: - iterator () {}; + iterator () {} explicit iterator (const octet_iterator& octet_it): it(octet_it) {} // the default "big three" are OK octet_iterator base () const { return it; } uint32_t operator * () const { octet_iterator temp = it; - return next(temp); + return utf8::unchecked::next(temp); } bool operator == (const iterator& rhs) const { @@ -198,24 +198,24 @@ namespace utf8 } iterator& operator ++ () { - std::advance(it, internal::sequence_length(it)); + ::std::advance(it, utf8::internal::sequence_length(it)); return *this; } iterator operator ++ (int) { iterator temp = *this; - std::advance(it, internal::sequence_length(it)); + ::std::advance(it, utf8::internal::sequence_length(it)); return temp; } iterator& operator -- () { - prior(it); + utf8::unchecked::prior(it); return *this; } iterator operator -- (int) { iterator temp = *this; - prior(it); + utf8::unchecked::prior(it); return temp; } }; // class iterator |