Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.1
xterm
xterm-double_width_fonts.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xterm-double_width_fonts.patch of Package xterm
diff --git a/fontutils.c b/fontutils.c --- a/fontutils.c +++ b/fontutils.c @@ -752,77 +752,29 @@ is_double_width_font(XFontStruct *fs) { return ((2 * fs->min_bounds.width) == fs->max_bounds.width); } #else #define is_double_width_font(fs) 0 #endif #if OPT_WIDE_CHARS && OPT_RENDERFONT && defined(HAVE_TYPE_FCCHAR32) -#define HALF_WIDTH_TEST_STRING "1234567890" - -/* '1234567890' in Chinese characters in UTF-8 */ -#define FULL_WIDTH_TEST_STRING "\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89" \ - "\xe5\x9b\x9b\xe4\xba\x94" \ - "\xef\xa7\x91\xe4\xb8\x83\xe5\x85\xab" \ - "\xe4\xb9\x9d\xef\xa6\xb2" - -/* '1234567890' in Korean script in UTF-8 */ -#define FULL_WIDTH_TEST_STRING2 "\xec\x9d\xbc\xec\x9d\xb4\xec\x82\xbc" \ - "\xec\x82\xac\xec\x98\xa4" \ - "\xec\x9c\xa1\xec\xb9\xa0\xed\x8c\x94" \ - "\xea\xb5\xac\xec\x98\x81" - -#define HALF_WIDTH_CHAR1 0x0031 /* '1' */ -#define HALF_WIDTH_CHAR2 0x0057 /* 'W' */ + #define FULL_WIDTH_CHAR1 0x4E00 /* CJK Ideograph 'number one' */ #define FULL_WIDTH_CHAR2 0xAC00 /* Korean script syllable 'Ka' */ static Bool is_double_width_font_xft(Display *dpy, XftFont *font) { - XGlyphInfo gi1, gi2; - FcChar32 c1 = HALF_WIDTH_CHAR1, c2 = HALF_WIDTH_CHAR2; - String fwstr = FULL_WIDTH_TEST_STRING; - String hwstr = HALF_WIDTH_TEST_STRING; - - /* Some Korean fonts don't have Chinese characters at all. */ - if (!XftCharExists(dpy, font, FULL_WIDTH_CHAR1)) { - if (!XftCharExists(dpy, font, FULL_WIDTH_CHAR2)) - return False; /* Not a CJK font */ - else /* a Korean font without CJK Ideographs */ - fwstr = FULL_WIDTH_TEST_STRING2; - } - - XftTextExtents32(dpy, font, &c1, 1, &gi1); - XftTextExtents32(dpy, font, &c2, 1, &gi2); - if (gi1.xOff != gi2.xOff) /* Not a fixed-width font */ - return False; - - XftTextExtentsUtf8(dpy, - font, - (_Xconst FcChar8 *) hwstr, - (int) strlen(hwstr), - &gi1); - XftTextExtentsUtf8(dpy, - font, - (_Xconst FcChar8 *) fwstr, - (int) strlen(fwstr), - &gi2); - - /* - * fontconfig and Xft prior to 2.2(?) set the width of half-width - * characters identical to that of full-width character in CJK double-width - * (bi-width / monospace) font even though the former is half as wide as - * the latter. This was fixed sometime before the release of fontconfig - * 2.2 in early 2003. See - * http://bugzilla.mozilla.org/show_bug.cgi?id=196312 - * In the meantime, we have to check both possibilities. - */ - return ((2 * gi1.xOff == gi2.xOff) || (gi1.xOff == gi2.xOff)); + /* Some Korean fonts don't have Chinese characters at all. */ + if (XftCharExists(dpy, font, FULL_WIDTH_CHAR1) || + XftCharExists(dpy, font, FULL_WIDTH_CHAR2)) + return True; /* CJK font */ + else + return False; /* Not a CJK font */ } #else #define is_double_width_font_xft(dpy, xftfont) 0 #endif #define EmptyFont(fs) (fs != 0 \ && ((fs)->ascent + (fs)->descent == 0 \ || (fs)->max_bounds.width == 0))
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor