diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-07 02:10:20 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-07 02:10:20 +0000 |
commit | 047a03f4cefa75a67070f08b3f6b727f7ea702d5 (patch) | |
tree | d00ccbd9e59106de8fd904b06720be59219d61fe /base/utf_string_conversions.h | |
parent | 0511c153260e5d402d7552ff7b47a2acb17bdf2b (diff) | |
download | chromium_src-047a03f4cefa75a67070f08b3f6b727f7ea702d5.zip chromium_src-047a03f4cefa75a67070f08b3f6b727f7ea702d5.tar.gz chromium_src-047a03f4cefa75a67070f08b3f6b727f7ea702d5.tar.bz2 |
Copy the relevant parts of ICU to a new file base/third_party/icu/icu_utf.*
so we can do basic UTF8/16/32 conversions without linking all of ICU.
Change callers who used to call SysUTF8ToWide/SysWideToUTF8 in base to using
these new functions. I will remove the Sys versions of these functions in a
later patch.
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/243102
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28219 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/utf_string_conversions.h')
-rw-r--r-- | base/utf_string_conversions.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/base/utf_string_conversions.h b/base/utf_string_conversions.h new file mode 100644 index 0000000..89846ed --- /dev/null +++ b/base/utf_string_conversions.h @@ -0,0 +1,54 @@ +// Copyright (c) 2009 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. + +#ifndef BASE_UTF_STRING_CONVERSIONS_H_ +#define BASE_UTF_STRING_CONVERSIONS_H_ + +#include <string> + +#include "base/string16.h" +#include "base/string_piece.h" + +// These convert between UTF-8, -16, and -32 strings. They are potentially slow, +// so avoid unnecessary conversions. The low-level versions return a boolean +// indicating whether the conversion was 100% valid. In this case, it will still +// do the best it can and put the result in the output buffer. The versions that +// return strings ignore this error and just return the best conversion +// possible. +// +// Note that only the structural validity is checked and non-character +// codepoints and unassigned are regarded as valid. +// TODO(jungshik): Consider replacing an invalid input sequence with +// the Unicode replacement character or adding |replacement_char| parameter. +// Currently, it's skipped in the ouput, which could be problematic in +// some situations. +bool WideToUTF8(const wchar_t* src, size_t src_len, std::string* output); +std::string WideToUTF8(const std::wstring& wide); +bool UTF8ToWide(const char* src, size_t src_len, std::wstring* output); +std::wstring UTF8ToWide(const base::StringPiece& utf8); + +bool WideToUTF16(const wchar_t* src, size_t src_len, string16* output); +string16 WideToUTF16(const std::wstring& wide); +bool UTF16ToWide(const char16* src, size_t src_len, std::wstring* output); +std::wstring UTF16ToWide(const string16& utf16); + +bool UTF8ToUTF16(const char* src, size_t src_len, string16* output); +string16 UTF8ToUTF16(const std::string& utf8); +bool UTF16ToUTF8(const char16* src, size_t src_len, std::string* output); +std::string UTF16ToUTF8(const string16& utf16); + +// We are trying to get rid of wstring as much as possible, but it's too big +// a mess to do it all at once. These conversions should be used when we +// really should just be passing a string16 around, but we haven't finished +// porting whatever module uses wstring and the conversion is being used as a +// stopcock. This makes it easy to grep for the ones that should be removed. +#if defined(OS_WIN) +# define WideToUTF16Hack +# define UTF16ToWideHack +#else +# define WideToUTF16Hack WideToUTF16 +# define UTF16ToWideHack UTF16ToWide +#endif + +#endif // BASE_UTF_STRING_CONVERSIONS_H_ |