From: msw Date: Wed, 20 Oct 1999 20:33:38 +0000 (+0000) Subject: kanji wrap patch X-Git-Tag: r0-50~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f10952ecb5018d9c181434456570cbdc50720e9;p=thirdparty%2Fnewt.git kanji wrap patch --- diff --git a/newt.spec b/newt.spec index 73a9967..b2dc719 100644 --- a/newt.spec +++ b/newt.spec @@ -2,7 +2,7 @@ Summary: A development library for text mode user interfaces. Name: newt %define version 0.50 Version: %{version} -Release: 13 +Release: 14 Copyright: LGPL Group: System Environment/Libraries Source: ftp://ftp.redhat.com/pub/redhat/code/newt/newt-%{version}.tar.gz @@ -55,6 +55,9 @@ rm -rf $RPM_BUILD_ROOT %postun -p /sbin/ldconfig %changelog +* Wed Oct 20 1999 Matt Wilson +- added patch to correctly wrap euc kanji + * Wed Sep 01 1999 Erik Troan - added suspend/resume to snack diff --git a/textbox.c b/textbox.c index 331cb8f..2578738 100644 --- a/textbox.c +++ b/textbox.c @@ -147,12 +147,16 @@ static char * expandTabs(const char * text) { return buf; } +#define iseuckanji(c) (0xa1 <= (unsigned char)(c&0xff) && (unsigned char)(c&0xff) <= 0xfe) + static void doReflow(const char * text, char ** resultPtr, int width, int * badness, int * heightPtr) { char * result = NULL; const char * chptr, * end; + int i; int howbad = 0; int height = 0; + int kanji = 0; if (resultPtr) { /* XXX I think this will work */ @@ -161,6 +165,7 @@ static void doReflow(const char * text, char ** resultPtr, int width, } while (*text) { + kanji = 0; end = strchr(text, '\n'); if (!end) end = text + strlen(text); @@ -178,10 +183,23 @@ static void doReflow(const char * text, char ** resultPtr, int width, text = end; if (*text) text++; } else { - chptr = text + width - 1; - while (chptr > text && !isspace(*chptr)) chptr--; - while (chptr > text && isspace(*chptr)) chptr--; - chptr++; + chptr = text; + kanji = 0; + for ( i = 0; i < width - 1; i++ ) { + if ( !iseuckanji(*chptr)) { + kanji = 0; + } else if ( kanji == 1 ) { + kanji = 2; + } else { + kanji = 1; + } + chptr++; + } + if (kanji == 0) { + while (chptr > text && !isspace(*chptr)) chptr--; + while (chptr > text && isspace(*chptr)) chptr--; + chptr++; + } if (chptr-text == 1 && !isspace(*chptr)) chptr = text + width - 1; @@ -189,12 +207,18 @@ static void doReflow(const char * text, char ** resultPtr, int width, if (chptr > text) howbad += width - (chptr - text) + 1; if (result) { - strncat(result, text, chptr - text); + if (kanji == 1) { + strncat(result, text, chptr - text + 1 ); + chptr++; + kanji = 0; + } else { + strncat(result, text, chptr - text ); + } strcat(result, "\n"); height++; } - if (isspace(*chptr)) + if (isspace(*chptr)) text = chptr + 1; else text = chptr; diff --git a/windows.c b/windows.c index 4629fe6..1c62faf 100644 --- a/windows.c +++ b/windows.c @@ -104,6 +104,7 @@ void newtWinMessage(char * title, char * buttonText, char * text, ...) { va_start(args, text); newtvwindow(title, buttonText, NULL, NULL, text, args); + newtResizeScreen(1); va_end(args); }