Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/nowide/convert.hpp')
-rw-r--r--src/boost/nowide/convert.hpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/boost/nowide/convert.hpp b/src/boost/nowide/convert.hpp
new file mode 100644
index 000000000..89b8871d0
--- /dev/null
+++ b/src/boost/nowide/convert.hpp
@@ -0,0 +1,154 @@
+//
+// Copyright (c) 2012 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#ifndef BOOST_NOWIDE_CONVERT_H_INCLUDED
+#define BOOST_NOWIDE_CONVERT_H_INCLUDED
+
+#include <string>
+#include <boost/locale/encoding_utf.hpp>
+
+namespace boost {
+namespace nowide {
+ ///
+ /// \brief Template function that converts a buffer of UTF sequences in range [source_begin,source_end)
+ /// to the output \a buffer of size \a buffer_size.
+ ///
+ /// In case of success a NULL terminated string is returned (buffer), otherwise 0 is returned.
+ ///
+ /// If there is not enough room in the buffer or the source sequence contains invalid UTF,
+ /// 0 is returned, and the contents of the buffer are undefined.
+ ///
+ template<typename CharOut,typename CharIn>
+ CharOut *basic_convert(CharOut *buffer,size_t buffer_size,CharIn const *source_begin,CharIn const *source_end)
+ {
+ CharOut *rv = buffer;
+ if(buffer_size == 0)
+ return 0;
+ buffer_size --;
+ while(source_begin!=source_end) {
+ using namespace boost::locale::utf;
+ code_point c = utf_traits<CharIn>::template decode<CharIn const *>(source_begin,source_end);
+ if(c==illegal || c==incomplete) {
+ rv = 0;
+ break;
+ }
+ size_t width = utf_traits<CharOut>::width(c);
+ if(buffer_size < width) {
+ rv=0;
+ break;
+ }
+ buffer = utf_traits<CharOut>::template encode<CharOut *>(c,buffer);
+ buffer_size -= width;
+ }
+ *buffer++ = 0;
+ return rv;
+ }
+
+ /// \cond INTERNAL
+ namespace details {
+ //
+ // wcslen defined only in C99... So we will not use it
+ //
+ template<typename Char>
+ Char const *basic_strend(Char const *s)
+ {
+ while(*s)
+ s++;
+ return s;
+ }
+ }
+ /// \endcond
+
+ ///
+ /// Convert NULL terminated UTF source string to NULL terminated \a output string of size at
+ /// most output_size (including NULL)
+ ///
+ /// In case of success output is returned, if the input sequence is illegal,
+ /// or there is not enough room NULL is returned
+ ///
+ inline char *narrow(char *output,size_t output_size,wchar_t const *source)
+ {
+ return basic_convert(output,output_size,source,details::basic_strend(source));
+ }
+ ///
+ /// Convert UTF text in range [begin,end) to NULL terminated \a output string of size at
+ /// most output_size (including NULL)
+ ///
+ /// In case of success output is returned, if the input sequence is illegal,
+ /// or there is not enough room NULL is returned
+ ///
+ inline char *narrow(char *output,size_t output_size,wchar_t const *begin,wchar_t const *end)
+ {
+ return basic_convert(output,output_size,begin,end);
+ }
+ ///
+ /// Convert NULL terminated UTF source string to NULL terminated \a output string of size at
+ /// most output_size (including NULL)
+ ///
+ /// In case of success output is returned, if the input sequence is illegal,
+ /// or there is not enough room NULL is returned
+ ///
+ inline wchar_t *widen(wchar_t *output,size_t output_size,char const *source)
+ {
+ return basic_convert(output,output_size,source,details::basic_strend(source));
+ }
+ ///
+ /// Convert UTF text in range [begin,end) to NULL terminated \a output string of size at
+ /// most output_size (including NULL)
+ ///
+ /// In case of success output is returned, if the input sequence is illegal,
+ /// or there is not enough room NULL is returned
+ ///
+ inline wchar_t *widen(wchar_t *output,size_t output_size,char const *begin,char const *end)
+ {
+ return basic_convert(output,output_size,begin,end);
+ }
+
+
+ ///
+ /// Convert between Wide - UTF-16/32 string and UTF-8 string.
+ ///
+ /// boost::locale::conv::conversion_error is thrown in a case of a error
+ ///
+ inline std::string narrow(wchar_t const *s)
+ {
+ return boost::locale::conv::utf_to_utf<char>(s);
+ }
+ ///
+ /// Convert between UTF-8 and UTF-16 string, implemented only on Windows platform
+ ///
+ /// boost::locale::conv::conversion_error is thrown in a case of a error
+ ///
+ inline std::wstring widen(char const *s)
+ {
+ return boost::locale::conv::utf_to_utf<wchar_t>(s);
+ }
+ ///
+ /// Convert between Wide - UTF-16/32 string and UTF-8 string
+ ///
+ /// boost::locale::conv::conversion_error is thrown in a case of a error
+ ///
+ inline std::string narrow(std::wstring const &s)
+ {
+ return boost::locale::conv::utf_to_utf<char>(s);
+ }
+ ///
+ /// Convert between UTF-8 and UTF-16 string, implemented only on Windows platform
+ ///
+ /// boost::locale::conv::conversion_error is thrown in a case of a error
+ ///
+ inline std::wstring widen(std::string const &s)
+ {
+ return boost::locale::conv::utf_to_utf<wchar_t>(s);
+ }
+
+} // nowide
+} // namespace boost
+
+#endif
+///
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4