ncurses 6.1 - patch 20190504
[ncurses.git] / ncurses / tty / tty_update.c
index 17f641136d8ac165c0e77df8021cfed92cbd4b68..69de9c2e13cc8d387376e43c80e8a41e7e1b15e1 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2018,2019 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            *
@@ -84,7 +84,7 @@
 
 #include <ctype.h>
 
-MODULE_ID("$Id: tty_update.c,v 1.299 2018/09/08 21:33:59 tom Exp $")
+MODULE_ID("$Id: tty_update.c,v 1.302 2019/05/04 22:43:40 tom Exp $")
 
 /*
  * This define controls the line-breakout optimization.  Every once in a
@@ -210,73 +210,8 @@ GoTo(NCURSES_SP_DCLx int const row, int const col)
 }
 
 #if !NCURSES_WCWIDTH_GRAPHICS
-static bool
-is_wacs_value(unsigned ch)
-{
-    bool result;
-    switch (ch) {
-    case 0x00a3:               /* FALLTHRU - ncurses pound-sterling symbol */
-    case 0x00b0:               /* FALLTHRU - VT100 degree symbol */
-    case 0x00b1:               /* FALLTHRU - VT100 plus/minus */
-    case 0x00b7:               /* FALLTHRU - VT100 bullet */
-    case 0x03c0:               /* FALLTHRU - ncurses greek pi */
-    case 0x2190:               /* FALLTHRU - Teletype arrow pointing left */
-    case 0x2191:               /* FALLTHRU - Teletype arrow pointing up */
-    case 0x2192:               /* FALLTHRU - Teletype arrow pointing right */
-    case 0x2193:               /* FALLTHRU - Teletype arrow pointing down */
-    case 0x2260:               /* FALLTHRU - ncurses not-equal */
-    case 0x2264:               /* FALLTHRU - ncurses less-than-or-equal-to */
-    case 0x2265:               /* FALLTHRU - ncurses greater-than-or-equal-to */
-    case 0x23ba:               /* FALLTHRU - VT100 scan line 1 */
-    case 0x23bb:               /* FALLTHRU - ncurses scan line 3 */
-    case 0x23bc:               /* FALLTHRU - ncurses scan line 7 */
-    case 0x23bd:               /* FALLTHRU - VT100 scan line 9 */
-    case 0x2500:               /* FALLTHRU - VT100 horizontal line */
-    case 0x2501:               /* FALLTHRU - thick horizontal line */
-    case 0x2502:               /* FALLTHRU - VT100 vertical line */
-    case 0x2503:               /* FALLTHRU - thick vertical line */
-    case 0x250c:               /* FALLTHRU - VT100 upper left corner */
-    case 0x250f:               /* FALLTHRU - thick upper left corner */
-    case 0x2510:               /* FALLTHRU - VT100 upper right corner */
-    case 0x2513:               /* FALLTHRU - thick upper right corner */
-    case 0x2514:               /* FALLTHRU - VT100 lower left corner */
-    case 0x2517:               /* FALLTHRU - thick lower left corner */
-    case 0x2518:               /* FALLTHRU - VT100 lower right corner */
-    case 0x251b:               /* FALLTHRU - thick lower right corner */
-    case 0x251c:               /* FALLTHRU - VT100 tee pointing left */
-    case 0x2523:               /* FALLTHRU - thick tee pointing left */
-    case 0x2524:               /* FALLTHRU - VT100 tee pointing right */
-    case 0x252b:               /* FALLTHRU - thick tee pointing right */
-    case 0x252c:               /* FALLTHRU - VT100 tee pointing down */
-    case 0x2533:               /* FALLTHRU - thick tee pointing down */
-    case 0x2534:               /* FALLTHRU - VT100 tee pointing up */
-    case 0x253b:               /* FALLTHRU - thick tee pointing up */
-    case 0x253c:               /* FALLTHRU - VT100 large plus or crossover */
-    case 0x254b:               /* FALLTHRU - thick large plus or crossover */
-    case 0x2550:               /* FALLTHRU - double horizontal line */
-    case 0x2551:               /* FALLTHRU - double vertical line */
-    case 0x2554:               /* FALLTHRU - double upper left corner */
-    case 0x2557:               /* FALLTHRU - double upper right corner */
-    case 0x255a:               /* FALLTHRU - double lower left corner */
-    case 0x255d:               /* FALLTHRU - double lower right corner */
-    case 0x2560:               /* FALLTHRU - double tee pointing right */
-    case 0x2563:               /* FALLTHRU - double tee pointing left */
-    case 0x2566:               /* FALLTHRU - double tee pointing down */
-    case 0x2569:               /* FALLTHRU - double tee pointing up */
-    case 0x256c:               /* FALLTHRU - double large plus or crossover */
-    case 0x2592:               /* FALLTHRU - VT100 checker board (stipple) */
-    case 0x25ae:               /* FALLTHRU - Teletype solid square block */
-    case 0x25c6:               /* FALLTHRU - VT100 diamond */
-    case 0x2603:               /* FALLTHRU - Teletype lantern symbol */
-       result = TRUE;
-       break;
-    default:
-       result = FALSE;
-       break;
-    }
-    return result;
-}
-#endif
+#define is_wacs_value(ch) (_nc_wacs_width(ch) == 1 && (wcwidth)(ch) > 1)
+#endif /* !NCURSES_WCWIDTH_GRAPHICS */
 
 static NCURSES_INLINE void
 PutAttrChar(NCURSES_SP_DCLx CARG_CH_T ch)
@@ -304,7 +239,7 @@ PutAttrChar(NCURSES_SP_DCLx CARG_CH_T ch)
      * Determine the number of character cells which the 'ch' value will use
      * on the screen.  It should be at least one.
      */
-    if ((chlen = wcwidth(CharOf(CHDEREF(ch)))) <= 0) {
+    if ((chlen = _nc_wacs_width(CharOf(CHDEREF(ch)))) <= 0) {
        static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
 
        /*
@@ -686,8 +621,9 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
            } else if (repeat_char != 0 &&
 #if USE_WIDEC_SUPPORT
                       (!SP_PARM->_screen_unicode &&
-                       ((AttrOf(ntext0) & A_ALTCHARSET) == 0 ||
-                        (CharOf(ntext0) < ACS_LEN))) &&
+                       (CharOf(ntext0) < ((AttrOf(ntext0) & A_ALTCHARSET)
+                                          ? ACS_LEN
+                                          : 256))) &&
 #endif
                       runcount > SP_PARM->_rep_cost) {
                NCURSES_CH_T temp;