147 lines
3.8 KiB
Diff
147 lines
3.8 KiB
Diff
Description: Use wcwdith instead of a hardcoded list of wide characters
|
|
Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=1027733;filename=screen.wcwidth.v2.patch;msg=80
|
|
Author: Aurelien Jarno <aurelien@aurel32.net>
|
|
Reviewed-By: Axel Beckert <abe@debian.org>
|
|
Bug-Debian: https://bugs.debian.org/1027733
|
|
Forwarded: no
|
|
(It is currently unclear if this patch is suitable for upstream usage.)
|
|
|
|
--- a/encoding.c
|
|
+++ b/encoding.c
|
|
@@ -22,6 +22,7 @@
|
|
*/
|
|
|
|
#include <sys/types.h>
|
|
+#include <wchar.h>
|
|
|
|
#include "config.h"
|
|
#include "screen.h"
|
|
@@ -1142,127 +1143,10 @@
|
|
{0xF0000, 0xFFFFD},
|
|
{0x100000, 0x10FFFD},
|
|
};
|
|
- /* A sorted list of intervals of double width characters generated by
|
|
- * https://github.com/GNOME/glib/blob/glib-2-50/glib/gen-unicode-tables.pl */
|
|
- static const struct interval wide[] = {
|
|
- {0x1100, 0x115F},
|
|
- {0x231A, 0x231B},
|
|
- {0x2329, 0x232A},
|
|
- {0x23E9, 0x23EC},
|
|
- {0x23F0, 0x23F0},
|
|
- {0x23F3, 0x23F3},
|
|
- {0x25FD, 0x25FE},
|
|
- {0x2614, 0x2615},
|
|
- {0x2648, 0x2653},
|
|
- {0x267F, 0x267F},
|
|
- {0x2693, 0x2693},
|
|
- {0x26A1, 0x26A1},
|
|
- {0x26AA, 0x26AB},
|
|
- {0x26BD, 0x26BE},
|
|
- {0x26C4, 0x26C5},
|
|
- {0x26CE, 0x26CE},
|
|
- {0x26D4, 0x26D4},
|
|
- {0x26EA, 0x26EA},
|
|
- {0x26F2, 0x26F3},
|
|
- {0x26F5, 0x26F5},
|
|
- {0x26FA, 0x26FA},
|
|
- {0x26FD, 0x26FD},
|
|
- {0x2705, 0x2705},
|
|
- {0x270A, 0x270B},
|
|
- {0x2728, 0x2728},
|
|
- {0x274C, 0x274C},
|
|
- {0x274E, 0x274E},
|
|
- {0x2753, 0x2755},
|
|
- {0x2757, 0x2757},
|
|
- {0x2795, 0x2797},
|
|
- {0x27B0, 0x27B0},
|
|
- {0x27BF, 0x27BF},
|
|
- {0x2B1B, 0x2B1C},
|
|
- {0x2B50, 0x2B50},
|
|
- {0x2B55, 0x2B55},
|
|
- {0x2E80, 0x2E99},
|
|
- {0x2E9B, 0x2EF3},
|
|
- {0x2F00, 0x2FD5},
|
|
- {0x2FF0, 0x2FFB},
|
|
- {0x3000, 0x303E},
|
|
- {0x3041, 0x3096},
|
|
- {0x3099, 0x30FF},
|
|
- {0x3105, 0x312F},
|
|
- {0x3131, 0x318E},
|
|
- {0x3190, 0x31BA},
|
|
- {0x31C0, 0x31E3},
|
|
- {0x31F0, 0x321E},
|
|
- {0x3220, 0x3247},
|
|
- {0x3250, 0x4DBF},
|
|
- {0x4E00, 0xA48C},
|
|
- {0xA490, 0xA4C6},
|
|
- {0xA960, 0xA97C},
|
|
- {0xAC00, 0xD7A3},
|
|
- {0xF900, 0xFAFF},
|
|
- {0xFE10, 0xFE19},
|
|
- {0xFE30, 0xFE52},
|
|
- {0xFE54, 0xFE66},
|
|
- {0xFE68, 0xFE6B},
|
|
- {0xFF01, 0xFF60},
|
|
- {0xFFE0, 0xFFE6},
|
|
- {0x16FE0, 0x16FE3},
|
|
- {0x17000, 0x187F7},
|
|
- {0x18800, 0x18AF2},
|
|
- {0x1B000, 0x1B11E},
|
|
- {0x1B150, 0x1B152},
|
|
- {0x1B164, 0x1B167},
|
|
- {0x1B170, 0x1B2FB},
|
|
- {0x1F004, 0x1F004},
|
|
- {0x1F0CF, 0x1F0CF},
|
|
- {0x1F18E, 0x1F18E},
|
|
- {0x1F191, 0x1F19A},
|
|
- {0x1F200, 0x1F202},
|
|
- {0x1F210, 0x1F23B},
|
|
- {0x1F240, 0x1F248},
|
|
- {0x1F250, 0x1F251},
|
|
- {0x1F260, 0x1F265},
|
|
- {0x1F300, 0x1F320},
|
|
- {0x1F32D, 0x1F335},
|
|
- {0x1F337, 0x1F37C},
|
|
- {0x1F37E, 0x1F393},
|
|
- {0x1F3A0, 0x1F3CA},
|
|
- {0x1F3CF, 0x1F3D3},
|
|
- {0x1F3E0, 0x1F3F0},
|
|
- {0x1F3F4, 0x1F3F4},
|
|
- {0x1F3F8, 0x1F43E},
|
|
- {0x1F440, 0x1F440},
|
|
- {0x1F442, 0x1F4FC},
|
|
- {0x1F4FF, 0x1F53D},
|
|
- {0x1F54B, 0x1F54E},
|
|
- {0x1F550, 0x1F567},
|
|
- {0x1F57A, 0x1F57A},
|
|
- {0x1F595, 0x1F596},
|
|
- {0x1F5A4, 0x1F5A4},
|
|
- {0x1F5FB, 0x1F64F},
|
|
- {0x1F680, 0x1F6C5},
|
|
- {0x1F6CC, 0x1F6CC},
|
|
- {0x1F6D0, 0x1F6D2},
|
|
- {0x1F6D5, 0x1F6D5},
|
|
- {0x1F6EB, 0x1F6EC},
|
|
- {0x1F6F4, 0x1F6FA},
|
|
- {0x1F7E0, 0x1F7EB},
|
|
- {0x1F90D, 0x1F971},
|
|
- {0x1F973, 0x1F976},
|
|
- {0x1F97A, 0x1F9A2},
|
|
- {0x1F9A5, 0x1F9AA},
|
|
- {0x1F9AE, 0x1F9CA},
|
|
- {0x1F9CD, 0x1F9FF},
|
|
- {0x1FA70, 0x1FA73},
|
|
- {0x1FA78, 0x1FA7A},
|
|
- {0x1FA80, 0x1FA82},
|
|
- {0x1FA90, 0x1FA95},
|
|
- {0x20000, 0x2FFFD},
|
|
- {0x30000, 0x3FFFD},
|
|
- };
|
|
|
|
if (c >= 0xdf00 && c <= 0xdfff)
|
|
return 1; /* dw combining sequence */
|
|
- return ((bisearch(c, wide, sizeof(wide) / sizeof(struct interval) - 1)) ||
|
|
+ return ((wcwidth(c) == 2) ||
|
|
(cjkwidth &&
|
|
bisearch(c, ambiguous,
|
|
sizeof(ambiguous) / sizeof(struct interval) - 1)));
|