aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Pankov <yuripv@FreeBSD.org>2020-12-23 12:49:25 +0000
committerYuri Pankov <yuripv@FreeBSD.org>2020-12-23 12:53:43 +0000
commitf952bdf1425d6a877f99b5c5ca59f25fc8bedabe (patch)
tree6e6184b6601bcd57754e16b1cd0e61a578adffaf
parent1c00efe98ed7d103b9684ff692ffd5e3b64d0237 (diff)
downloadsrc-f952bdf1425d6a877f99b5c5ca59f25fc8bedabe.tar.gz
src-f952bdf1425d6a877f99b5c5ca59f25fc8bedabe.zip
tools/tools/locale: skip control character widths
Do not explicitly encode control characters widths as 0 allowing wcwidth() to return the proper implicit value for non-printable characters (-1). Reported by: naddy
-rw-r--r--tools/tools/locale/etc/final-maps/widths.txt65
-rw-r--r--tools/tools/locale/tools/getwidths.c4
2 files changed, 4 insertions, 65 deletions
diff --git a/tools/tools/locale/etc/final-maps/widths.txt b/tools/tools/locale/etc/final-maps/widths.txt
index f01a4d5a0dd5..74c28ac58463 100644
--- a/tools/tools/locale/etc/final-maps/widths.txt
+++ b/tools/tools/locale/etc/final-maps/widths.txt
@@ -3,71 +3,6 @@
# utf8proc 2.5.0.
# -----------------------------------------------------------------------------
WIDTH
-<NULL> 0
-<START_OF_HEADING> 0
-<START_OF_TEXT> 0
-<END_OF_TEXT> 0
-<END_OF_TRANSMISSION> 0
-<ENQUIRY> 0
-<ACKNOWLEDGE> 0
-<ALERT> 0
-<BACKSPACE> 0
-<tab> 0
-<newline> 0
-<vertical-tab> 0
-<form-feed> 0
-<carriage-return> 0
-<SHIFT_OUT> 0
-<SHIFT_IN> 0
-<DATA_LINK_ESCAPE> 0
-<DEVICE_CONTROL_ONE> 0
-<DEVICE_CONTROL_TWO> 0
-<DEVICE_CONTROL_THREE> 0
-<DEVICE_CONTROL_FOUR> 0
-<NEGATIVE_ACKNOWLEDGE> 0
-<SYNCHRONOUS_IDLE> 0
-<END_OF_TRANSMISSION_BLOCK> 0
-<CANCEL> 0
-<END_OF_MEDIUM> 0
-<SUBSTITUTE> 0
-<ESCAPE> 0
-<INFORMATION_SEPARATOR_FOUR> 0
-<INFORMATION_SEPARATOR_THREE> 0
-<INFORMATION_SEPARATOR_TWO> 0
-<INFORMATION_SEPARATOR_ONE> 0
-<DELETE> 0
-<CONTROL-0080> 0
-<CONTROL-0081> 0
-<BREAK_PERMITTED_HERE> 0
-<NO_BREAK_HERE> 0
-<CONTROL-0084> 0
-<NEXT_LINE> 0
-<START_OF_SELECTED_AREA> 0
-<END_OF_SELECTED_AREA> 0
-<CHARACTER_TABULATION_SET> 0
-<CHARACTER_TABULATION_WITH_JUSTIFICATION> 0
-<LINE_TABULATION_SET> 0
-<PARTIAL_LINE_FORWARD> 0
-<PARTIAL_LINE_BACKWARD> 0
-<REVERSE_LINE_FEED> 0
-<SINGLE_SHIFT_TWO> 0
-<SINGLE_SHIFT_THREE> 0
-<DEVICE_CONTROL_STRING> 0
-<PRIVATE_USE_ONE> 0
-<PRIVATE_USE_TWO> 0
-<SET_TRANSMIT_STATE> 0
-<CANCEL_CHARACTER> 0
-<MESSAGE_WAITING> 0
-<START_OF_GUARDED_AREA> 0
-<END_OF_GUARDED_AREA> 0
-<START_OF_STRING> 0
-<CONTROL-0099> 0
-<SINGLE_CHARACTER_INTRODUCER> 0
-<CONTROL_SEQUENCE_INTRODUCER> 0
-<STRING_TERMINATOR> 0
-<OPERATING_SYSTEM_COMMAND> 0
-<PRIVACY_MESSAGE> 0
-<APPLICATION_PROGRAM_COMMAND> 0
<COMBINING_GRAVE_ACCENT> 0
<COMBINING_ACUTE_ACCENT> 0
<COMBINING_CIRCUMFLEX_ACCENT> 0
diff --git a/tools/tools/locale/tools/getwidths.c b/tools/tools/locale/tools/getwidths.c
index 670ebd957878..f1c7c6cc463d 100644
--- a/tools/tools/locale/tools/getwidths.c
+++ b/tools/tools/locale/tools/getwidths.c
@@ -35,12 +35,16 @@ main(void)
{
int32_t wc;
int i, wcw;
+ utf8proc_category_t wcc;
setlocale(LC_CTYPE, "C.UTF-8");
printf("%s\n", utf8proc_version());
for (wc = 0; wc < 0x110000; wc++) {
+ wcc = utf8proc_category(wc);
+ if (wcc == UTF8PROC_CATEGORY_CC)
+ continue;
wcw = utf8proc_charwidth(wc);
if (wcw == 1)
continue;