X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftty%2Ftty_update.c;h=b86dfe4eb9f8f414030177abee3ecad45723a60a;hp=b5151b94ed2763de2b548c3e410574f031dde3e4;hb=ade723c546e6559187580c695f7f4637eac13125;hpb=a4dac84af1b18fb24d56d6251deeb3c61c437158 diff --git a/ncurses/tty/tty_update.c b/ncurses/tty/tty_update.c index b5151b94..b86dfe4e 100644 --- a/ncurses/tty/tty_update.c +++ b/ncurses/tty/tty_update.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2016,2017 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 -MODULE_ID("$Id: tty_update.c,v 1.297 2017/09/02 21:45:44 Jeb.Rosen Exp $") +MODULE_ID("$Id: tty_update.c,v 1.300 2019/02/25 21:42:01 tom Exp $") /* * This define controls the line-breakout optimization. Every once in a @@ -344,7 +344,9 @@ PutAttrChar(NCURSES_SP_DCLx CARG_CH_T ch) || is_wacs_value(CharOfD(ch)) #endif )) { + int c8; my_ch = CHDEREF(ch); /* work around const param */ + c8 = CharOf(my_ch); #if USE_WIDEC_SUPPORT /* * This is crude & ugly, but works most of the time. It checks if the @@ -368,8 +370,23 @@ PutAttrChar(NCURSES_SP_DCLx CARG_CH_T ch) chlen = 1; } #endif /* !NCURSES_WCWIDTH_GRAPHICS */ - } + } else #endif + if (!SP_PARM->_screen_acs_map[c8]) { + /* + * If we found no mapping for a given alternate-character set item + * in the terminal description, attempt to use the ASCII fallback + * code which is populated in the _acs_map[] array. If that did + * not correspond to a line-drawing, etc., graphics character, the + * array entry would be empty. + */ + chtype temp = UChar(SP_PARM->_acs_map[c8]); + if (temp) { + RemAttr(attr, A_ALTCHARSET); + SetChar(my_ch, temp, AttrOf(attr)); + } + } + /* * If we (still) have alternate character set, it is the normal 8bit * flavor. The _screen_acs_map[] array tells if the character was @@ -669,8 +686,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;