summaryrefslogtreecommitdiff
path: root/libs/glibmm2/glibmm/convert.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/glibmm2/glibmm/convert.cc')
-rw-r--r--libs/glibmm2/glibmm/convert.cc323
1 files changed, 323 insertions, 0 deletions
diff --git a/libs/glibmm2/glibmm/convert.cc b/libs/glibmm2/glibmm/convert.cc
new file mode 100644
index 0000000000..1cd334bcd1
--- /dev/null
+++ b/libs/glibmm2/glibmm/convert.cc
@@ -0,0 +1,323 @@
+// Generated by gtkmmproc -- DO NOT MODIFY!
+
+#include <glibmm/convert.h>
+#include <glibmm/private/convert_p.h>
+
+// -*- c++ -*-
+/* $Id$ */
+
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glib/gconvert.h>
+#include <glib/gmessages.h>
+#include <glib/gunicode.h>
+#include <glibmm/utility.h>
+
+
+namespace Glib
+{
+
+/**** Glib::IConv **********************************************************/
+
+IConv::IConv(const std::string& to_codeset, const std::string& from_codeset)
+:
+ gobject_ (g_iconv_open(to_codeset.c_str(), from_codeset.c_str()))
+{
+ if(gobject_ == reinterpret_cast<GIConv>(-1))
+ {
+ GError* error = 0;
+
+ // Abuse g_convert() to create a GError object. This may seem a weird
+ // thing to do, but it gives us consistently translated error messages
+ // at no further cost.
+ g_convert("", 0, to_codeset.c_str(), from_codeset.c_str(), 0, 0, &error);
+
+ // If this should ever fail we're fucked.
+ g_assert(error != 0);
+
+ Error::throw_exception(error);
+ }
+}
+
+IConv::IConv(GIConv gobject)
+:
+ gobject_ (gobject)
+{}
+
+IConv::~IConv()
+{
+ g_iconv_close(gobject_);
+}
+
+size_t IConv::iconv(char** inbuf, gsize* inbytes_left, char** outbuf, gsize* outbytes_left)
+{
+ return g_iconv(gobject_, inbuf, inbytes_left, outbuf, outbytes_left);
+}
+
+void IConv::reset()
+{
+ // Apparently iconv() on Solaris <= 7 segfaults if you pass in
+ // NULL for anything but inbuf; work around that. (NULL outbuf
+ // or NULL *outbuf is allowed by Unix98.)
+
+ char* outbuf = 0;
+ gsize inbytes_left = 0;
+ gsize outbytes_left = 0;
+
+ g_iconv(gobject_, 0, &inbytes_left, &outbuf, &outbytes_left);
+}
+
+std::string IConv::convert(const std::string& str)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_convert_with_iconv(
+ str.data(), str.size(), gobject_, 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return std::string(ScopedPtr<char>(buf).get(), bytes_written);
+}
+
+
+/**** charset conversion functions *****************************************/
+
+bool get_charset()
+{
+ return g_get_charset(0);
+}
+
+bool get_charset(std::string& charset)
+{
+ const char* charset_cstr = 0;
+ const bool is_utf8 = g_get_charset(&charset_cstr);
+
+ charset = charset_cstr;
+ return is_utf8;
+}
+
+std::string convert(const std::string& str,
+ const std::string& to_codeset,
+ const std::string& from_codeset)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_convert(
+ str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(),
+ 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return std::string(ScopedPtr<char>(buf).get(), bytes_written);
+}
+
+std::string convert_with_fallback(const std::string& str,
+ const std::string& to_codeset,
+ const std::string& from_codeset)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_convert_with_fallback(
+ str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(), 0,
+ 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return std::string(ScopedPtr<char>(buf).get(), bytes_written);
+}
+
+std::string convert_with_fallback(const std::string& str,
+ const std::string& to_codeset,
+ const std::string& from_codeset,
+ const Glib::ustring& fallback)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_convert_with_fallback(
+ str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(),
+ const_cast<char*>(fallback.c_str()), 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return std::string(ScopedPtr<char>(buf).get(), bytes_written);
+}
+
+Glib::ustring locale_to_utf8(const std::string& opsys_string)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_locale_to_utf8(
+ opsys_string.data(), opsys_string.size(), 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ const ScopedPtr<char> scoped_buf (buf);
+ return Glib::ustring(scoped_buf.get(), scoped_buf.get() + bytes_written);
+}
+
+std::string locale_from_utf8(const Glib::ustring& utf8_string)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_locale_from_utf8(
+ utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return std::string(ScopedPtr<char>(buf).get(), bytes_written);
+}
+
+Glib::ustring filename_to_utf8(const std::string& opsys_string)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_filename_to_utf8(
+ opsys_string.data(), opsys_string.size(), 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ const ScopedPtr<char> scoped_buf (buf);
+ return Glib::ustring(scoped_buf.get(), scoped_buf.get() + bytes_written);
+}
+
+std::string filename_from_utf8(const Glib::ustring& utf8_string)
+{
+ gsize bytes_written = 0;
+ GError* error = 0;
+
+ char *const buf = g_filename_from_utf8(
+ utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return std::string(ScopedPtr<char>(buf).get(), bytes_written);
+}
+
+std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname)
+{
+ char* hostname_buf = 0;
+ GError* error = 0;
+
+ char *const buf = g_filename_from_uri(uri.c_str(), &hostname_buf, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ // Let's take ownership at this point.
+ const ScopedPtr<char> scoped_buf (buf);
+
+ if(hostname_buf)
+ hostname = ScopedPtr<char>(hostname_buf).get();
+ else
+ hostname.erase();
+
+ return std::string(scoped_buf.get());
+}
+
+std::string filename_from_uri(const Glib::ustring& uri)
+{
+ GError* error = 0;
+ char *const buf = g_filename_from_uri(uri.c_str(), 0, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return std::string(ScopedPtr<char>(buf).get());
+}
+
+Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring& hostname)
+{
+ GError* error = 0;
+ char *const buf = g_filename_to_uri(filename.c_str(), hostname.c_str(), &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return Glib::ustring(ScopedPtr<char>(buf).get());
+}
+
+Glib::ustring filename_to_uri(const std::string& filename)
+{
+ GError* error = 0;
+ char *const buf = g_filename_to_uri(filename.c_str(), 0, &error);
+
+ if(error)
+ Error::throw_exception(error);
+
+ return Glib::ustring(ScopedPtr<char>(buf).get());
+}
+
+Glib::ustring filename_display_basename(const std::string& filename)
+{
+ char *const buf = g_filename_display_basename(filename.c_str());
+
+ return Glib::ustring(ScopedPtr<char>(buf).get());
+}
+
+
+Glib::ustring filename_display_name(const std::string& filename)
+{
+ char *const buf = g_filename_display_name(filename.c_str());
+
+ return Glib::ustring(ScopedPtr<char>(buf).get());
+}
+
+} // namespace Glib
+
+
+namespace
+{
+} // anonymous namespace
+
+
+Glib::ConvertError::ConvertError(Glib::ConvertError::Code error_code, const Glib::ustring& error_message)
+:
+ Glib::Error (G_CONVERT_ERROR, error_code, error_message)
+{}
+
+Glib::ConvertError::ConvertError(GError* gobject)
+:
+ Glib::Error (gobject)
+{}
+
+Glib::ConvertError::Code Glib::ConvertError::code() const
+{
+ return static_cast<Code>(Glib::Error::code());
+}
+
+void Glib::ConvertError::throw_func(GError* gobject)
+{
+ throw Glib::ConvertError(gobject);
+}
+
+