1 #include "llvm/ADT/SmallVector.h"
2 #include "llvm/ADT/SmallString.h"
3 #include "llvm/Support/ManagedStatic.h"
11 : l(newlocale(LC_CTYPE_MASK,"en_US.UTF-8",LC_GLOBAL_LOCALE))
19 int mbswidth(llvm::SmallString<16> s) const {
20 // this implementation assumes no '\0' in s
21 assert(s.size()==strlen(s.c_str()));
23 size_t size = mbstowcs_l(NULL,s.c_str(),0,l);
24 assert(size!=(size_t)-1);
27 llvm::SmallVector<wchar_t,200> ws(size);
28 size = mbstowcs_l(&ws[0],s.c_str(),ws.size(),l);
29 assert(ws.size()==size);
30 return wcswidth_l(&ws[0],ws.size(),l);
33 int isprint(int c) const {
34 return iswprint_l(c,l);
42 llvm::ManagedStatic<locale_holder> l;
49 int columnWidth(StringRef s) {
50 int width = l->mbswidth(s);