From owner-svn-src-all@FreeBSD.ORG Wed Jun 17 14:47:08 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1D23A1065679; Wed, 17 Jun 2009 14:47:07 +0000 (UTC) (envelope-from ume@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0BCA68FC12; Wed, 17 Jun 2009 14:47:07 +0000 (UTC) (envelope-from ume@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5HEl636078848; Wed, 17 Jun 2009 14:47:06 GMT (envelope-from ume@svn.freebsd.org) Received: (from ume@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5HEl6Qg078846; Wed, 17 Jun 2009 14:47:06 GMT (envelope-from ume@svn.freebsd.org) Message-Id: <200906171447.n5HEl6Qg078846@svn.freebsd.org> From: Hajimu UMEMOTO Date: Wed, 17 Jun 2009 14:47:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r194366 - head/usr.bin/ncal X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2009 14:47:08 -0000 Author: ume Date: Wed Jun 17 14:47:06 2009 New Revision: 194366 URL: http://svn.freebsd.org/changeset/base/194366 Log: Fix column width of weekday names for multibyte locales. Noticed by: nyan Discussed with: matusita, takawata MFC after: 1 week Modified: head/usr.bin/ncal/ncal.c Modified: head/usr.bin/ncal/ncal.c ============================================================================== --- head/usr.bin/ncal/ncal.c Wed Jun 17 14:45:58 2009 (r194365) +++ head/usr.bin/ncal/ncal.c Wed Jun 17 14:47:06 2009 (r194366) @@ -446,13 +446,18 @@ printmonth(int y, int m, int jd_flag) { struct monthlines month; struct weekdays wds; - int i; + int i, len; mkmonth(y, m - 1, jd_flag, &month); mkweekdays(&wds); printf(" %ls %d\n", month.name, y); - for (i = 0; i != 7; i++) - wprintf(L"%.2ls%s\n", wds.names[i], month.lines[i]); + for (i = 0; i != 7; i++) { + len = wcslen(wds.names[i]); + if (wcswidth(wds.names[i], len) == len) + wprintf(L"%.2ls%s\n", wds.names[i], month.lines[i]); + else + wprintf(L"%.1ls%s\n", wds.names[i], month.lines[i]); + } if (flag_weeks) printf(" %s\n", month.weeks); } @@ -830,7 +835,7 @@ mkmonthb(int y, int m, int jd_flag, stru void mkweekdays(struct weekdays *wds) { - int i, len; + int i, len, width = 0; struct tm tm; wchar_t buf[20]; @@ -839,11 +844,15 @@ mkweekdays(struct weekdays *wds) for (i = 0; i != 7; i++) { tm.tm_wday = (i+1) % 7; wcsftime(buf, sizeof(buf), L"%a", &tm); - len = wcslen(buf); - if (len > 2) - len = 2; - wcscpy(wds->names[i], L" "); - wcsncpy(wds->names[i] + 2 - len, buf, len); + for (len = wcslen(buf); len > 0; --len) { + if ((width = wcswidth(buf, len)) <= 2) + break; + } + wmemset(wds->names[i], L'\0', 4); + if (width == 1) + wds->names[i][0] = L' '; + wcsncat(wds->names[i], buf, len); + wcsncat(wds->names[i], L" ", 3 - wcswidth(wds->names[i], 2)); } }