From ab61bfec8cb0c26638ea53ceadcd17048ee02996 Mon Sep 17 00:00:00 2001 From: "Thomas E. Dickey" Date: Sun, 6 Jul 2014 01:43:07 +0000 Subject: [PATCH] ncurses 5.9 - patch 20140705 + add w/W toggle to ncurses.c 'B' test, to demonstrate permutation of video-attributes and colors with double-width character strings. --- NEWS | 6 +++- dist.mk | 4 +-- package/debian-mingw/changelog | 4 +-- package/debian-mingw64/changelog | 4 +-- package/debian/changelog | 4 +-- package/mingw-ncurses.nsi | 4 +-- package/mingw-ncurses.spec | 2 +- package/ncurses.spec | 2 +- test/ncurses.c | 62 +++++++++++++++++++++++++++++--- 9 files changed, 75 insertions(+), 17 deletions(-) diff --git a/NEWS b/NEWS index 2d53cee2..2f3c4787 100644 --- a/NEWS +++ b/NEWS @@ -25,7 +25,7 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- --- $Id: NEWS,v 1.2234 2014/06/29 23:43:38 tom Exp $ +-- $Id: NEWS,v 1.2236 2014/07/05 20:39:04 tom Exp $ ------------------------------------------------------------------------------- This is a log of changes that ncurses has gone through since Zeyd started @@ -45,6 +45,10 @@ See the AUTHORS file for the corresponding full names. Changes through 1.9.9e did not credit all contributions; it is not possible to add this information. +20140705 + + add w/W toggle to ncurses.c 'B' test, to demonstrate permutation of + video-attributes and colors with double-width character strings. + 20140629 + correct check in win_driver.c for saving screen contents, e.g., when NCURSES_CONSOLE2 is set (cf: 20140503). diff --git a/dist.mk b/dist.mk index f0986dea..7f28f32e 100644 --- a/dist.mk +++ b/dist.mk @@ -25,7 +25,7 @@ # use or other dealings in this Software without prior written # # authorization. # ############################################################################## -# $Id: dist.mk,v 1.994 2014/06/28 21:47:46 tom Exp $ +# $Id: dist.mk,v 1.995 2014/07/05 18:50:25 tom Exp $ # Makefile for creating ncurses distributions. # # This only needs to be used directly as a makefile by developers, but @@ -37,7 +37,7 @@ SHELL = /bin/sh # These define the major/minor/patch versions of ncurses. NCURSES_MAJOR = 5 NCURSES_MINOR = 9 -NCURSES_PATCH = 20140629 +NCURSES_PATCH = 20140705 # We don't append the patch to the version, since this only applies to releases VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR) diff --git a/package/debian-mingw/changelog b/package/debian-mingw/changelog index a4ae93bc..40583990 100644 --- a/package/debian-mingw/changelog +++ b/package/debian-mingw/changelog @@ -1,8 +1,8 @@ -ncurses6 (5.9-20140629) unstable; urgency=low +ncurses6 (5.9-20140705) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Jun 2014 17:47:47 -0400 + -- Thomas E. Dickey Sat, 05 Jul 2014 14:50:25 -0400 ncurses6 (5.9-20131005) unstable; urgency=low diff --git a/package/debian-mingw64/changelog b/package/debian-mingw64/changelog index a4ae93bc..40583990 100644 --- a/package/debian-mingw64/changelog +++ b/package/debian-mingw64/changelog @@ -1,8 +1,8 @@ -ncurses6 (5.9-20140629) unstable; urgency=low +ncurses6 (5.9-20140705) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Jun 2014 17:47:47 -0400 + -- Thomas E. Dickey Sat, 05 Jul 2014 14:50:25 -0400 ncurses6 (5.9-20131005) unstable; urgency=low diff --git a/package/debian/changelog b/package/debian/changelog index 473831fb..7263cf57 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,8 +1,8 @@ -ncurses6 (5.9-20140629) unstable; urgency=low +ncurses6 (5.9-20140705) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Jun 2014 17:47:47 -0400 + -- Thomas E. Dickey Sat, 05 Jul 2014 14:50:25 -0400 ncurses6 (5.9-20120608) unstable; urgency=low diff --git a/package/mingw-ncurses.nsi b/package/mingw-ncurses.nsi index 04a60bcb..a74dba28 100644 --- a/package/mingw-ncurses.nsi +++ b/package/mingw-ncurses.nsi @@ -1,4 +1,4 @@ -; $Id: mingw-ncurses.nsi,v 1.49 2014/06/28 21:47:47 tom Exp $ +; $Id: mingw-ncurses.nsi,v 1.50 2014/07/05 18:50:25 tom Exp $ ; TODO add examples ; TODO bump ABI to 6 @@ -10,7 +10,7 @@ !define VERSION_MAJOR "5" !define VERSION_MINOR "9" !define VERSION_YYYY "2014" -!define VERSION_MMDD "0629" +!define VERSION_MMDD "0705" !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD} !define MY_ABI "5" diff --git a/package/mingw-ncurses.spec b/package/mingw-ncurses.spec index 8d272fda..f6642410 100644 --- a/package/mingw-ncurses.spec +++ b/package/mingw-ncurses.spec @@ -3,7 +3,7 @@ Summary: shared libraries for terminal handling Name: mingw32-ncurses6 Version: 5.9 -Release: 20140629 +Release: 20140705 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/package/ncurses.spec b/package/ncurses.spec index ef3dc2fb..f782acaf 100644 --- a/package/ncurses.spec +++ b/package/ncurses.spec @@ -1,7 +1,7 @@ Summary: shared libraries for terminal handling Name: ncurses6 Version: 5.9 -Release: 20140629 +Release: 20140705 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/test/ncurses.c b/test/ncurses.c index bf874677..fce36630 100644 --- a/test/ncurses.c +++ b/test/ncurses.c @@ -40,7 +40,7 @@ AUTHOR Author: Eric S. Raymond 1993 Thomas E. Dickey (beginning revision 1.27 in 1996). -$Id: ncurses.c,v 1.408 2014/06/28 21:45:40 tom Exp $ +$Id: ncurses.c,v 1.410 2014/07/05 22:23:34 tom Exp $ ***************************************************************************/ @@ -1292,6 +1292,10 @@ attr_legend(WINDOW *helpwin) " a/A toggle ACS (alternate character set) mapping"); MvWPrintw(helpwin, row, col, " v/V toggle video attribute to combine with each line"); +#if USE_WIDEC_SUPPORT + MvWPrintw(helpwin, row, col, + " w/W toggle normal/wide (double-width) test-characters"); +#endif } static void @@ -1422,6 +1426,7 @@ show_attr(WINDOW *win, int row, int skip, bool arrow, chtype attr, const char *n * string operation for the other attributes. */ wmove(win, 0, 0); + werase(win); if (attr & A_ALTCHARSET) { const char *s; chtype ch; @@ -1673,20 +1678,59 @@ attr_test(void) } #if USE_WIDEC_SUPPORT +static bool use_fullwidth; static wchar_t wide_attr_test_string[MAX_ATTRSTRING + 1]; +#define FULL_LO 0xff00 +#define FULL_HI 0xff5e +#define HALF_LO 0x20 + +#define isFullWidth(ch) ((ch) >= FULL_LO && (ch) <= FULL_HI) +#define ToNormalWidth(ch) (((ch) - FULL_LO) + HALF_LO) +#define ToFullWidth(ch) (((ch) - HALF_LO) + FULL_LO) + +/* + * Returns an ASCII code in [32..126] + */ +static wchar_t +normal_wchar(int ch) +{ + wchar_t result = ch; + if (isFullWidth(ch)) + result = ToNormalWidth(ch); + return result; +} + +/* + * Returns either an ASCII code in in [32..126] or full-width in + * [0xff00..0xff5e], according to use_fullwidth setting. + */ +static wchar_t +target_wchar(int ch) +{ + wchar_t result = ch; + if (use_fullwidth) { + if (!isFullWidth(ch)) + result = ToFullWidth(ch); + } else { + if (isFullWidth(ch)) + result = ToNormalWidth(ch); + } + return result; +} + static void wide_adjust_attr_string(int adjust) { - char save = (char) wide_attr_test_string[0]; - int first = ((int) UChar(save)) + adjust; + wchar_t save = wide_attr_test_string[0]; + int first = ((int) normal_wchar(save)) + adjust; int j, k; if (first >= ATTRSTRING_1ST) { for (j = 0, k = first; j < MAX_ATTRSTRING; ++j, ++k) { if (k > ATTRSTRING_END) break; - wide_attr_test_string[j] = k; + wide_attr_test_string[j] = target_wchar(k); if (((k + 1 - first) % 5) == 0) { if (++j >= MAX_ATTRSTRING) break; @@ -1707,6 +1751,7 @@ wide_adjust_attr_string(int adjust) static void wide_init_attr_string(void) { + use_fullwidth = FALSE; wide_attr_test_string[0] = default_attr_string(); wide_adjust_attr_string(0); } @@ -1767,6 +1812,7 @@ wide_show_attr(WINDOW *win, * string operation for the other attributes. */ wmove(win, 0, 0); + werase(win); if (attr & WA_ALTCHARSET) { const wchar_t *s; cchar_t ch; @@ -1872,6 +1918,14 @@ wide_attr_getc(int *skip, if (*kc >= limit) *kc = 0; break; + case 'w': + use_fullwidth = FALSE; + wide_adjust_attr_string(0); + break; + case 'W': + use_fullwidth = TRUE; + wide_adjust_attr_string(0); + break; case '<': wide_adjust_attr_string(-1); break; -- 2.45.0