Paul Davis
449aab3c46
git-svn-id: svn://localhost/ardour2/branches/3.0@3435 d708f5d6-7413-0410-9779-e7cbd77b26cf
437 lines
13 KiB
C++
437 lines
13 KiB
C++
// Generated by gtkmmproc -- DO NOT MODIFY!
|
|
|
|
|
|
#include <glibmm/convert.h>
|
|
#include <glibmm/private/convert_p.h>
|
|
|
|
// -*- c++ -*-
|
|
/* $Id: convert.ccg,v 1.4 2006/06/05 17:32:14 murrayc Exp $ */
|
|
|
|
/* 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.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* gerror = 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, &gerror);
|
|
|
|
// If this should ever fail we're fucked.
|
|
g_assert(gerror != 0);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string IConv::convert(const std::string& str)
|
|
#else
|
|
std::string IConv::convert(const std::string& str, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_convert_with_iconv(
|
|
str.data(), str.size(), gobject_, 0, &bytes_written, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string convert(const std::string& str,
|
|
const std::string& to_codeset,
|
|
const std::string& from_codeset)
|
|
#else
|
|
std::string convert(const std::string& str,
|
|
const std::string& to_codeset,
|
|
const std::string& from_codeset, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_convert(
|
|
str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(),
|
|
0, &bytes_written, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
return std::string(ScopedPtr<char>(buf).get(), bytes_written);
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string convert_with_fallback(const std::string& str,
|
|
const std::string& to_codeset,
|
|
const std::string& from_codeset)
|
|
#else
|
|
std::string convert_with_fallback(const std::string& str,
|
|
const std::string& to_codeset,
|
|
const std::string& from_codeset, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_convert_with_fallback(
|
|
str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(), 0,
|
|
0, &bytes_written, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
return std::string(ScopedPtr<char>(buf).get(), bytes_written);
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string convert_with_fallback(const std::string& str,
|
|
const std::string& to_codeset,
|
|
const std::string& from_codeset,
|
|
const Glib::ustring& fallback)
|
|
#else
|
|
std::string convert_with_fallback(const std::string& str,
|
|
const std::string& to_codeset,
|
|
const std::string& from_codeset,
|
|
const Glib::ustring& fallback, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 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, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
return std::string(ScopedPtr<char>(buf).get(), bytes_written);
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
Glib::ustring locale_to_utf8(const std::string& opsys_string)
|
|
#else
|
|
Glib::ustring locale_to_utf8(const std::string& opsys_string, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_locale_to_utf8(
|
|
opsys_string.data(), opsys_string.size(), 0, &bytes_written, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
const ScopedPtr<char> scoped_buf (buf);
|
|
return Glib::ustring(scoped_buf.get(), scoped_buf.get() + bytes_written);
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string locale_from_utf8(const Glib::ustring& utf8_string)
|
|
#else
|
|
std::string locale_from_utf8(const Glib::ustring& utf8_string, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_locale_from_utf8(
|
|
utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
return std::string(ScopedPtr<char>(buf).get(), bytes_written);
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
Glib::ustring filename_to_utf8(const std::string& opsys_string)
|
|
#else
|
|
Glib::ustring filename_to_utf8(const std::string& opsys_string, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_filename_to_utf8(
|
|
opsys_string.data(), opsys_string.size(), 0, &bytes_written, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
const ScopedPtr<char> scoped_buf (buf);
|
|
return Glib::ustring(scoped_buf.get(), scoped_buf.get() + bytes_written);
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string filename_from_utf8(const Glib::ustring& utf8_string)
|
|
#else
|
|
std::string filename_from_utf8(const Glib::ustring& utf8_string, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
gsize bytes_written = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_filename_from_utf8(
|
|
utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
return std::string(ScopedPtr<char>(buf).get(), bytes_written);
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname)
|
|
#else
|
|
std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
char* hostname_buf = 0;
|
|
GError* gerror = 0;
|
|
|
|
char *const buf = g_filename_from_uri(uri.c_str(), &hostname_buf, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
// 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());
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
std::string filename_from_uri(const Glib::ustring& uri)
|
|
#else
|
|
std::string filename_from_uri(const Glib::ustring& uri, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
GError* gerror = 0;
|
|
char *const buf = g_filename_from_uri(uri.c_str(), 0, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
return std::string(ScopedPtr<char>(buf).get());
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring& hostname)
|
|
#else
|
|
Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring& hostname, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
GError* gerror = 0;
|
|
char *const buf = g_filename_to_uri(filename.c_str(), hostname.c_str(), &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
return Glib::ustring(ScopedPtr<char>(buf).get());
|
|
}
|
|
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
Glib::ustring filename_to_uri(const std::string& filename)
|
|
#else
|
|
Glib::ustring filename_to_uri(const std::string& filename, std::auto_ptr<Glib::Error>& error)
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
{
|
|
GError* gerror = 0;
|
|
char *const buf = g_filename_to_uri(filename.c_str(), 0, &gerror);
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
if(gerror) ::Glib::Error::throw_exception(gerror);
|
|
#else
|
|
if(gerror) error = ::Glib::Error::throw_exception(gerror);
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
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());
|
|
}
|
|
|
|
#ifdef GLIBMM_EXCEPTIONS_ENABLED
|
|
void Glib::ConvertError::throw_func(GError* gobject)
|
|
{
|
|
throw Glib::ConvertError(gobject);
|
|
}
|
|
#else
|
|
//When not using exceptions, we just pass the Exception object around without throwing it:
|
|
std::auto_ptr<Glib::Error> Glib::ConvertError::throw_func(GError* gobject)
|
|
{
|
|
return std::auto_ptr<Glib::Error>(new Glib::ConvertError(gobject));
|
|
}
|
|
#endif //GLIBMM_EXCEPTIONS_ENABLED
|
|
|
|
|