You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qtermwidget-packaging/lib/konsole_wcwidth.cpp

45 lines
1.1 KiB

/* $XFree86: xc/programs/xterm/wcwidth.character,v 1.3 2001/07/29 22:08:16 tsi Exp $ */
/*
* This is an implementation of wcwidth() and wcswidth() as defined in
* "The Single UNIX Specification, Version 2, The Open Group, 1997"
* <http://www.UNIX-systems.org/online.html>
*
* Markus Kuhn -- 2001-01-12 -- public domain
*/
#include <QString>
#ifdef HAVE_UTF8PROC
#include <utf8proc.h>
#else
#include <cwchar>
#endif
#include "konsole_wcwidth.h"
int konsole_wcwidth(wchar_t ucs)
{
#ifdef HAVE_UTF8PROC
utf8proc_category_t cat = utf8proc_category( ucs );
if (cat == UTF8PROC_CATEGORY_CO) {
// Co: Private use area. libutf8proc makes them zero width, while tmux
// assumes them to be width 1, and glibc's default width is also 1
return 1;
}
return utf8proc_charwidth( ucs );
#else
return wcwidth( ucs );
#endif
}
// single byte char: +1, multi byte char: +2
int string_width( const QString & txt )
{
int w = 0;
std::wstring wstr = txt.toStdWString();
for ( size_t i = 0; i < wstr.length(); ++i ) {
w += konsole_wcwidth( wstr[ i ] );
}
return w;
}