| Avi Drissman | e4622aa | 2022-09-08 20:36:06 | [diff] [blame] | 1 | // Copyright 2012 The Chromium Authors |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. | ||||
| 4 | |||||
| 5 | #ifndef BASE_STRINGS_SYS_STRING_CONVERSIONS_H_ | ||||
| 6 | #define BASE_STRINGS_SYS_STRING_CONVERSIONS_H_ | ||||
| 7 | |||||
| 8 | // Provides system-dependent string type conversions for cases where it's | ||||
| 9 | // necessary to not use ICU. Generally, you should not need this in Chrome, | ||||
| 10 | // but it is used in some shared code. Dependencies should be minimal. | ||||
| 11 | |||||
| avi | 84f37e1 | 2015-12-25 09:31:42 | [diff] [blame] | 12 | #include <stdint.h> |
| 13 | |||||
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 14 | #include <string> |
| Helmut Januschka | 1dce9dc | 2024-06-11 13:05:35 | [diff] [blame] | 15 | #include <string_view> |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 16 | |
| 17 | #include "base/base_export.h" | ||||
| avi | 84f37e1 | 2015-12-25 09:31:42 | [diff] [blame] | 18 | #include "build/build_config.h" |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 19 | |
| Xiaohan Wang | 6700dcf1 | 2022-01-15 14:47:00 | [diff] [blame] | 20 | #if BUILDFLAG(IS_APPLE) |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 21 | #include <CoreFoundation/CoreFoundation.h> |
| Robert Sesek | 6c5a91025 | 2020-06-26 22:25:47 | [diff] [blame] | 22 | |
| Avi Drissman | a09d7dd | 2023-08-17 16:26:58 | [diff] [blame] | 23 | #include "base/apple/scoped_cftyperef.h" |
| Robert Sesek | 6c5a91025 | 2020-06-26 22:25:47 | [diff] [blame] | 24 | |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 25 | #ifdef __OBJC__ |
| 26 | @class NSString; | ||||
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 27 | #endif |
| Xiaohan Wang | 6700dcf1 | 2022-01-15 14:47:00 | [diff] [blame] | 28 | #endif // BUILDFLAG(IS_APPLE) |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 29 | |
| 30 | namespace base { | ||||
| 31 | |||||
| 32 | // Converts between wide and UTF-8 representations of a string. On error, the | ||||
| 33 | // result is system-dependent. | ||||
| Daniel Cheng | 4455c984 | 2022-01-13 23:26:37 | [diff] [blame] | 34 | [[nodiscard]] BASE_EXPORT std::string SysWideToUTF8(const std::wstring& wide); |
| Helmut Januschka | 1dce9dc | 2024-06-11 13:05:35 | [diff] [blame] | 35 | [[nodiscard]] BASE_EXPORT std::wstring SysUTF8ToWide(std::string_view utf8); |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 36 | |
| 37 | // Converts between wide and the system multi-byte representations of a string. | ||||
| 38 | // DANGER: This will lose information and can change (on Windows, this can | ||||
| 39 | // change between reboots). | ||||
| Daniel Cheng | 4455c984 | 2022-01-13 23:26:37 | [diff] [blame] | 40 | [[nodiscard]] BASE_EXPORT std::string SysWideToNativeMB( |
| 41 | const std::wstring& wide); | ||||
| Helmut Januschka | 1dce9dc | 2024-06-11 13:05:35 | [diff] [blame] | 42 | [[nodiscard]] BASE_EXPORT std::wstring SysNativeMBToWide( |
| 43 | std::string_view native_mb); | ||||
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 44 | |
| 45 | // Windows-specific ------------------------------------------------------------ | ||||
| 46 | |||||
| Xiaohan Wang | 6700dcf1 | 2022-01-15 14:47:00 | [diff] [blame] | 47 | #if BUILDFLAG(IS_WIN) |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 48 | |
| 49 | // Converts between 8-bit and wide strings, using the given code page. The | ||||
| 50 | // code page identifier is one accepted by the Windows function | ||||
| 51 | // MultiByteToWideChar(). | ||||
| Helmut Januschka | 1dce9dc | 2024-06-11 13:05:35 | [diff] [blame] | 52 | [[nodiscard]] BASE_EXPORT std::wstring SysMultiByteToWide(std::string_view mb, |
| Daniel Cheng | 4455c984 | 2022-01-13 23:26:37 | [diff] [blame] | 53 | uint32_t code_page); |
| 54 | [[nodiscard]] BASE_EXPORT std::string SysWideToMultiByte( | ||||
| 55 | const std::wstring& wide, | ||||
| 56 | uint32_t code_page); | ||||
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 57 | |
| Xiaohan Wang | 6700dcf1 | 2022-01-15 14:47:00 | [diff] [blame] | 58 | #endif // BUILDFLAG(IS_WIN) |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 59 | |
| 60 | // Mac-specific ---------------------------------------------------------------- | ||||
| 61 | |||||
| Xiaohan Wang | 6700dcf1 | 2022-01-15 14:47:00 | [diff] [blame] | 62 | #if BUILDFLAG(IS_APPLE) |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 63 | |
| Avi Drissman | 2b8673a | 2022-01-04 20:38:49 | [diff] [blame] | 64 | // Converts between strings and CFStringRefs/NSStrings. |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 65 | |
| Avi Drissman | 2b8673a | 2022-01-04 20:38:49 | [diff] [blame] | 66 | // Converts a string to a CFStringRef. Returns null on failure. |
| Avi Drissman | 28154a6 | 2023-08-22 04:06:45 | [diff] [blame] | 67 | [[nodiscard]] BASE_EXPORT apple::ScopedCFTypeRef<CFStringRef> |
| Helmut Januschka | 1dce9dc | 2024-06-11 13:05:35 | [diff] [blame] | 68 | SysUTF8ToCFStringRef(std::string_view utf8); |
| Avi Drissman | 28154a6 | 2023-08-22 04:06:45 | [diff] [blame] | 69 | [[nodiscard]] BASE_EXPORT apple::ScopedCFTypeRef<CFStringRef> |
| Helmut Januschka | 1dce9dc | 2024-06-11 13:05:35 | [diff] [blame] | 70 | SysUTF16ToCFStringRef(std::u16string_view utf16); |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 71 | |
| Avi Drissman | 2b8673a | 2022-01-04 20:38:49 | [diff] [blame] | 72 | // Converts a CFStringRef to a string. Returns an empty string on failure. It is |
| 73 | // not valid to call these with a null `ref`. | ||||
| Daniel Cheng | 4455c984 | 2022-01-13 23:26:37 | [diff] [blame] | 74 | [[nodiscard]] BASE_EXPORT std::string SysCFStringRefToUTF8(CFStringRef ref); |
| 75 | [[nodiscard]] BASE_EXPORT std::u16string SysCFStringRefToUTF16(CFStringRef ref); | ||||
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 76 | |
| Avi Drissman | 2b8673a | 2022-01-04 20:38:49 | [diff] [blame] | 77 | #ifdef __OBJC__ |
| 78 | |||||
| 79 | // Converts a string to an autoreleased NSString. Returns nil on failure. | ||||
| Helmut Januschka | 1dce9dc | 2024-06-11 13:05:35 | [diff] [blame] | 80 | [[nodiscard]] BASE_EXPORT NSString* SysUTF8ToNSString(std::string_view utf8); |
| 81 | [[nodiscard]] BASE_EXPORT NSString* SysUTF16ToNSString( | ||||
| 82 | std::u16string_view utf16); | ||||
| Avi Drissman | 2b8673a | 2022-01-04 20:38:49 | [diff] [blame] | 83 | |
| 84 | // Converts an NSString to a string. Returns an empty string on failure or if | ||||
| 85 | // `ref` is nil. | ||||
| Daniel Cheng | 4455c984 | 2022-01-13 23:26:37 | [diff] [blame] | 86 | [[nodiscard]] BASE_EXPORT std::string SysNSStringToUTF8(NSString* ref); |
| 87 | [[nodiscard]] BASE_EXPORT std::u16string SysNSStringToUTF16(NSString* ref); | ||||
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 88 | |
| Avi Drissman | 2b8673a | 2022-01-04 20:38:49 | [diff] [blame] | 89 | #endif // __OBJC__ |
| 90 | |||||
| Xiaohan Wang | 6700dcf1 | 2022-01-15 14:47:00 | [diff] [blame] | 91 | #endif // BUILDFLAG(IS_APPLE) |
| [email protected] | 9fe1a5b | 2013-02-07 19:18:03 | [diff] [blame] | 92 | |
| 93 | } // namespace base | ||||
| 94 | |||||
| 95 | #endif // BASE_STRINGS_SYS_STRING_CONVERSIONS_H_ | ||||