summaryrefslogtreecommitdiffstats
path: root/src/boost/tools/quickbook/src/native_text.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/tools/quickbook/src/native_text.cpp')
-rw-r--r--src/boost/tools/quickbook/src/native_text.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/boost/tools/quickbook/src/native_text.cpp b/src/boost/tools/quickbook/src/native_text.cpp
new file mode 100644
index 000000000..42fc0e13b
--- /dev/null
+++ b/src/boost/tools/quickbook/src/native_text.cpp
@@ -0,0 +1,67 @@
+/*=============================================================================
+ Copyright (c) 2009 Daniel James
+
+ Use, modification and distribution is subject to 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)
+=============================================================================*/
+
+#include "native_text.hpp"
+#include <iostream>
+#include <boost/program_options.hpp>
+#include "utils.hpp"
+
+#if QUICKBOOK_WIDE_PATHS || QUICKBOOK_WIDE_STREAMS
+#include <windows.h>
+#include <boost/scoped_array.hpp>
+#endif
+
+namespace quickbook
+{
+ namespace detail
+ {
+// This is used for converting paths to UTF-8 on cygin.
+// Might be better not to use a windows
+#if QUICKBOOK_WIDE_PATHS || QUICKBOOK_WIDE_STREAMS
+ std::string to_utf8(std::wstring const& x)
+ {
+ int buffer_count =
+ WideCharToMultiByte(CP_UTF8, 0, x.c_str(), -1, 0, 0, 0, 0);
+
+ if (!buffer_count)
+ throw conversion_error(
+ "Error converting wide string to utf-8.");
+
+ boost::scoped_array<char> buffer(new char[buffer_count]);
+
+ if (!WideCharToMultiByte(
+ CP_UTF8, 0, x.c_str(), -1, buffer.get(), buffer_count, 0,
+ 0))
+ throw conversion_error(
+ "Error converting wide string to utf-8.");
+
+ return std::string(buffer.get());
+ }
+
+ std::wstring from_utf8(quickbook::string_view text)
+ {
+ std::string x(text.begin(), text.end());
+ int buffer_count =
+ MultiByteToWideChar(CP_UTF8, 0, x.c_str(), -1, 0, 0);
+
+ if (!buffer_count)
+ throw conversion_error(
+ "Error converting utf-8 to wide string.");
+
+ boost::scoped_array<wchar_t> buffer(new wchar_t[buffer_count]);
+
+ if (!MultiByteToWideChar(
+ CP_UTF8, 0, x.c_str(), -1, buffer.get(), buffer_count))
+ throw conversion_error(
+ "Error converting utf-8 to wide string.");
+
+ return std::wstring(buffer.get());
+ }
+#endif
+ }
+}