// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "config.h" #include #include "webkit/glue/glue_util.h" #include "base/string_util.h" #pragma warning(push, 0) #include "CString.h" #include "DeprecatedString.h" #include "PlatformString.h" #pragma warning(pop) #include "KURL.h" namespace webkit_glue { // String conversions ---------------------------------------------------------- std::string CStringToStdString(const WebCore::CString& str) { const char* chars = str.data(); return std::string(chars ? chars : "", str.length()); } WebCore::CString StdStringToCString(const std::string& str) { return WebCore::CString(str.data(), str.size()); } std::wstring StringToStdWString(const WebCore::String& str) { const UChar* chars = str.characters(); #if defined(WCHAR_T_IS_UTF16) return std::wstring(chars ? chars : L"", str.length()); #elif defined(WCHAR_T_IS_UTF32) std::string16 str16(chars ? chars : reinterpret_cast(L""), str.length()); return UTF16ToWide(str16); #endif } std::string16 StringToStdString16(const WebCore::String& str) { const UChar* chars = str.characters(); return std::string16(chars ? chars : (UChar *)L"", str.length()); } std::string StringToStdString(const WebCore::String& str) { if (str.length() == 0) return std::string(); std::string ret; UTF16ToUTF8(str.characters(), str.length(), &ret); return ret; } WebCore::String StdWStringToString(const std::wstring& str) { #if defined(WCHAR_T_IS_UTF16) return WebCore::String(str.data(), static_cast(str.length())); #elif defined(WCHAR_T_IS_UTF32) std::string16 str16 = WideToUTF16(str); return WebCore::String(str16.data(), static_cast(str16.length())); #endif } WebCore::String StdStringToString(const std::string& str) { return WebCore::String(str.data(), static_cast(str.length())); } WebCore::DeprecatedString StdWStringToDeprecatedString( const std::wstring& str) { #if defined(WCHAR_T_IS_UTF16) return WebCore::DeprecatedString( reinterpret_cast(str.c_str()), static_cast(str.size())); #elif defined(WCHAR_T_IS_UTF32) std::string16 str16 = WideToUTF16(str); return WebCore::DeprecatedString( reinterpret_cast(str16.c_str()), static_cast(str16.size())); #endif } std::wstring DeprecatedStringToStdWString( const WebCore::DeprecatedString& dep) { #if defined(WCHAR_T_IS_UTF16) return std::wstring(reinterpret_cast(dep.unicode()), dep.length()); #elif defined(WCHAR_T_IS_UTF32) std::string16 str16(reinterpret_cast(dep.unicode()), dep.length()); return UTF16ToWide(str16); #endif } // URL conversions ------------------------------------------------------------- GURL KURLToGURL(const WebCore::KURL& url) { #ifdef USE_GOOGLE_URL_LIBRARY const WebCore::CString& spec = url.utf8String(); if (spec.isNull()) return GURL(); return GURL(spec.data(), spec.length(), url.parsed(), url.isValid()); #else const WebCore::DeprecatedString& spec = url.deprecatedString(); return GURL(WideToUTF8(DeprecatedStringToStdWString(spec))); #endif } WebCore::KURL GURLToKURL(const GURL& url) { const std::string& spec = url.possibly_invalid_spec(); #ifdef USE_GOOGLE_URL_LIBRARY // Convert using the internal structures to avoid re-parsing. return WebCore::KURL(spec.c_str(), static_cast(spec.length()), url.parsed_for_possibly_invalid_spec(), url.is_valid()); #else return WebCore::KURL(StdWStringToDeprecatedString(UTF8ToWide(spec))); #endif } } // namespace webkit_glue