123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // Copyright 2018 Nemanja Trifunovic
- /*
- Permission is hereby granted, free of charge, to any person or organization
- obtaining a copy of the software and accompanying documentation covered by
- this license (the "Software") to use, reproduce, display, distribute,
- execute, and transmit the Software, and to prepare derivative works of the
- Software, and to permit third-parties to whom the Software is furnished to
- do so, all subject to the following:
- The copyright notices in the Software and this entire statement, including
- the above license grant, this restriction and the following disclaimer,
- must be included in all copies of the Software, in whole or in part, and
- all derivative works of the Software, unless such copies or derivative
- works are solely in the form of machine-executable object code generated by
- a source language processor.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
- */
- #ifndef UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1
- #define UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1
- #include "checked.h"
- #include <string>
- namespace utf8
- {
- inline void append(char32_t cp, std::string& s)
- {
- append(uint32_t(cp), std::back_inserter(s));
- }
- inline std::string utf16to8(const std::u16string& s)
- {
- std::string result;
- utf16to8(s.begin(), s.end(), std::back_inserter(result));
- return result;
- }
- inline std::u16string utf8to16(const std::string& s)
- {
- std::u16string result;
- utf8to16(s.begin(), s.end(), std::back_inserter(result));
- return result;
- }
- inline std::string utf32to8(const std::u32string& s)
- {
- std::string result;
- utf32to8(s.begin(), s.end(), std::back_inserter(result));
- return result;
- }
- inline std::u32string utf8to32(const std::string& s)
- {
- std::u32string result;
- utf8to32(s.begin(), s.end(), std::back_inserter(result));
- return result;
- }
- inline std::size_t find_invalid(const std::string& s)
- {
- std::string::const_iterator invalid = find_invalid(s.begin(), s.end());
- return (invalid == s.end()) ? std::string::npos : static_cast<std::size_t>(invalid - s.begin());
- }
- inline bool is_valid(const std::string& s)
- {
- return is_valid(s.begin(), s.end());
- }
- inline std::string replace_invalid(const std::string& s, char32_t replacement)
- {
- std::string result;
- replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement);
- return result;
- }
- inline std::string replace_invalid(const std::string& s)
- {
- std::string result;
- replace_invalid(s.begin(), s.end(), std::back_inserter(result));
- return result;
- }
- inline bool starts_with_bom(const std::string& s)
- {
- return starts_with_bom(s.begin(), s.end());
- }
-
- } // namespace utf8
- #endif // header guard
|