]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/trace/lib_traceatr.c
ncurses 6.4 - patch 20240420
[ncurses.git] / ncurses / trace / lib_traceatr.c
index a4144ab5c4caa10cb815f8cc27d89e8834f3c4c8..b36286253d6d7fd6c8ac04e51fe6b2406dc448ce 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.              *
+ * Copyright 2018-2022,2024 Thomas E. Dickey                                *
+ * Copyright 1998-2017,2018 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -43,7 +44,7 @@
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_traceatr.c,v 1.92 2018/05/05 17:49:17 tom Exp $")
+MODULE_ID("$Id: lib_traceatr.c,v 1.96 2024/02/04 00:11:35 tom Exp $")
 
 #define COLOR_OF(c) ((c < 0) ? "default" : (c > 7 ? color_of(c) : colors[c].name))
 
@@ -342,6 +343,7 @@ _tracecchar_t2(int bufnum, const cchar_t *ch)
            } else {
                PUTC_DATA;
                int n;
+               int assume_unicode = _nc_unicode_locale()? 128 : 255;
 
                (void) _nc_trace_bufcat(bufnum, "{ ");
                for (PUTC_i = 0; PUTC_i < CCHARW_MAX; ++PUTC_i) {
@@ -361,21 +363,22 @@ _tracecchar_t2(int bufnum, const cchar_t *ch)
                                                                  UChar(ch->chars[PUTC_i])));
                        }
                        break;
-                   } else if (ch->chars[PUTC_i] > 255) {
+                   } else if (ch->chars[PUTC_i] > assume_unicode) {
                        char temp[80];
                        _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp))
-                                   "{%d:\\u%lx}",
-                                   wcwidth(ch->chars[PUTC_i]),
+                                   "{%d:\\u%04lx}",
+                                   _nc_wacs_width(ch->chars[PUTC_i]),
                                    (unsigned long) ch->chars[PUTC_i]);
                        (void) _nc_trace_bufcat(bufnum, temp);
-                       break;
-                   }
-                   for (n = 0; n < PUTC_n; n++) {
-                       if (n)
-                           (void) _nc_trace_bufcat(bufnum, ", ");
-                       (void) _nc_trace_bufcat(bufnum,
-                                               _nc_tracechar(CURRENT_SCREEN,
-                                                             UChar(PUTC_buf[n])));
+                       attr &= ~A_CHARTEXT;    /* ignore WidecExt(ch) */
+                   } else {
+                       for (n = 0; n < PUTC_n; n++) {
+                           if (n)
+                               (void) _nc_trace_bufcat(bufnum, ", ");
+                           (void) _nc_trace_bufcat(bufnum,
+                                                   _nc_tracechar(CURRENT_SCREEN,
+                                                                 UChar(PUTC_buf[n])));
+                       }
                    }
                }
                (void) _nc_trace_bufcat(bufnum, " }");