diff options
author | Alexander Kornienko <alexfh@google.com> | 2013-09-04 16:00:12 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2013-09-04 16:00:12 +0000 |
commit | 280e5eef43ecf2279ab78f132922920ed7ce7952 (patch) | |
tree | 1bb943229dfe4665f53171bc73b7a6898d24f338 /lib/Support/Locale.cpp | |
parent | 9127334dade7fa36cb5cb999fc116ceaa4f52ac9 (diff) | |
download | external_llvm-280e5eef43ecf2279ab78f132922920ed7ce7952.tar.gz external_llvm-280e5eef43ecf2279ab78f132922920ed7ce7952.tar.bz2 external_llvm-280e5eef43ecf2279ab78f132922920ed7ce7952.zip |
Move generic isPrint and columnWidth implementations to a separate header/source to allow using both generic and system-dependent versions on win32.
Summary:
This is needed so we can use generic columnWidthUTF8 in clang-format on
win32 simultaneously with a separate system-dependent implementations of
isPrint/columnWidth in TextDiagnostic.cpp to avoid attempts to print Unicode
characters using narrow-character interfaces (which is not supported on Windows,
and we'll have to figure out how to handle this).
Reviewers: jordan_rose
Reviewed By: jordan_rose
CC: llvm-commits, klimek
Differential Revision: http://llvm-reviews.chandlerc.com/D1559
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189952 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/Locale.cpp')
-rw-r--r-- | lib/Support/Locale.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/lib/Support/Locale.cpp b/lib/Support/Locale.cpp index 17b9b6c47d..35ddf7f11b 100644 --- a/lib/Support/Locale.cpp +++ b/lib/Support/Locale.cpp @@ -1,10 +1,31 @@ #include "llvm/Support/Locale.h" -#include "llvm/Config/config.h" +#include "llvm/Support/Unicode.h" -#ifdef __APPLE__ -#include "LocaleXlocale.inc" -#elif LLVM_ON_WIN32 -#include "LocaleWindows.inc" +namespace llvm { +namespace sys { +namespace locale { + +int columnWidth(StringRef Text) { +#if LLVM_ON_WIN32 + return Text.size(); #else -#include "LocaleGeneric.inc" + return llvm::sys::unicode::columnWidthUTF8(Text); #endif +} + +bool isPrint(int UCS) { +#if LLVM_ON_WIN32 + // Restrict characters that we'll try to print to the the lower part of ASCII + // except for the control characters (0x20 - 0x7E). In general one can not + // reliably output code points U+0080 and higher using narrow character C/C++ + // output functions in Windows, because the meaning of the upper 128 codes is + // determined by the active code page in the console. + return ' ' <= UCS && UCS <= '~'; +#else + return llvm::sys::unicode::isPrintable(UCS); +#endif +} + +} // namespace locale +} // namespace sys +} // namespace llvm |