Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 May 2006 03:06:55 +0800 (CST)
From:      Kuang-che Wu <kcwu@csie.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Cc:        thierry@FreeBSD.org
Subject:   ports/98166: [PATCH] x11/rxvt-unicode: imlocale fix for freebsd
Message-ID:  <200605301906.k4UJ6tGk041218@kcwu.csie.org>
Resent-Message-ID: <200605301910.k4UJAD3Q070431@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         98166
>Category:       ports
>Synopsis:       [PATCH] x11/rxvt-unicode: imlocale fix for freebsd
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue May 30 19:10:12 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Kuang-che Wu
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD kcwu.csie.org 7.0-CURRENT FreeBSD 7.0-CURRENT #5: Sat May 20 19:08:06 CST 2006
>Description:
rxvt-unicode assume wchar_t is unicode, but it's not true for freebsd.

This patch converts the IM input charater to unicode.

It requires additional patch dependancy and enlarge excutable size, 
so I provide a knob to disable. (2.5mb if WITH_ENCODING=all)


Added file(s):
- files/extra-patch-imlocale

Port maintainer (thierry@FreeBSD.org) is cc'd.

Generated with FreeBSD Port Tools 0.77
>How-To-Repeat:
>Fix:

--- rxvt-unicode-7.7_1.patch begins here ---
diff -ruN --exclude=CVS /usr/ports/x11/rxvt-unicode/Makefile /files/home/kcwu/work/ports/x/x11/rxvt-unicode/Makefile
--- /usr/ports/x11/rxvt-unicode/Makefile	Sun May 28 16:18:22 2006
+++ /files/home/kcwu/work/ports/x/x11/rxvt-unicode/Makefile	Wed May 31 00:38:49 2006
@@ -7,6 +7,7 @@
 
 PORTNAME=	rxvt-unicode
 PORTVERSION=	7.7
+PORTREVISION=	1
 CATEGORIES=	x11
 MASTER_SITES=	http://dist.schmorp.de/rxvt-unicode/%SUBDIR%/
 MASTER_SITE_SUBDIR=	. Attic
@@ -14,6 +15,10 @@
 MAINTAINER=	thierry@FreeBSD.org
 COMMENT=	A clone of the terminal emulator rxvt modified to support Unicode
 
+.if !defined(WITHOUT_IMLOCALE_FIX)
+PATCH_DEPENDS=	${SITE_PERL}/${PERL_ARCH}/Encode/HanExtra.pm:${PORTSDIR}/chinese/p5-Encode-HanExtra \
+		${SITE_PERL}/${PERL_ARCH}/Encode/JIS2K.pm:${PORTSDIR}/converters/p5-Encode-JIS2K
+.endif
 LIB_DEPENDS=	Xft.2:${PORTSDIR}/x11-fonts/libXft
 BUILD_DEPENDS=	pkg-config:${PORTSDIR}/devel/pkg-config
 
@@ -164,6 +169,7 @@
 	@${ECHO_MSG} "WITHOUT_LINESPACE	disable support for line-spacing"
 	@${ECHO_MSG} "WITHOUT_MOUSEWHEEL	disable support for scrolling via mouse wheel"
 	@${ECHO_MSG} "WITHOUT_SMART_RESIZE	disable smart growth/shrink behaviour"
+	@${ECHO_MSG} "WITHOUT_IMLOCALE_FIX	disable imlocale encoding conversion fix"
 	@${ECHO_MSG}
 .ifndef(WITH_ENCODING)
 	@${ECHO_MSG} "==> You can compile in support for additional codeset groups by setting the WITH_ENCODING variable"
@@ -175,6 +181,12 @@
 	@${ECHO_MSG} '                 "all"    all of the above;'
 	@${ECHO_MSG} '==> For example, "WITH_ENCODING=kr" for korean encodings.'
 	@${ECHO_MSG}
+.endif
+
+.if !defined(WITHOUT_IMLOCALE_FIX)
+post-patch:
+	@${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-imlocale
+	@cd ${WRKSRC}/src && ./gentables
 .endif
 
 pre-configure:
diff -ruN --exclude=CVS /usr/ports/x11/rxvt-unicode/files/extra-patch-imlocale /files/home/kcwu/work/ports/x/x11/rxvt-unicode/files/extra-patch-imlocale
--- /usr/ports/x11/rxvt-unicode/files/extra-patch-imlocale	Thu Jan  1 08:00:00 1970
+++ /files/home/kcwu/work/ports/x/x11/rxvt-unicode/files/extra-patch-imlocale	Wed May 31 00:36:34 2006
@@ -0,0 +1,74 @@
+diff -ur src/command.C.orig src/command.C
+--- src/command.C.orig	Mon Feb 20 22:41:16 2006
++++ src/command.C	Sun May 21 09:36:40 2006
+@@ -301,6 +301,26 @@
+ }
+ #endif
+ 
++void from_imlocale_to_locale(const char *imlocale, const char *locale, wchar_t *wkbuf, int len)
++{
++    if(!imlocale || !locale)
++	return;
++
++    if(!strchr(imlocale,'.') || !strchr(locale,'.'))
++	return;
++
++    codeset imcs = codeset_from_name(strchr(imlocale, '.'));
++    codeset cs = codeset_from_name(strchr(locale, '.'));
++
++    if (imcs == CS_UNKNOWN || cs == CS_UNKNOWN)
++	return;
++
++    for(int i=0; i<len; i++) {
++	wchar_t unicode = TO_UNICODE(imcs, wkbuf[i]);
++	wkbuf[i] = FROM_UNICODE(cs, unicode);
++    }
++}
++
+ void
+ rxvt_term::key_press (XKeyEvent &ev)
+ {
+@@ -361,6 +381,9 @@
+           if (rs[Rs_imLocale])
+             SET_LOCALE (locale);
+ 
++	  if (rs[Rs_imLocale])
++	      from_imlocale_to_locale(rs[Rs_imLocale], locale, wkbuf, len);
++	      
+           if (status_return == XLookupChars
+               || status_return == XLookupBoth)
+             {
+diff -ur src/encoding.C.orig src/encoding.C
+--- src/encoding.C.orig	Mon Feb 20 22:41:16 2006
++++ src/encoding.C	Sun May 21 09:36:40 2006
+@@ -151,6 +151,7 @@
+ static uint32_t cs_us_ascii_from_unicode (unicode_t unicode)   { return unicode <= 127 ? unicode : NOCHAR; }
+ 
+ #define cs_us_ascii_to_unicode_16 cs_unicode_to_unicode
++static unicode_t cs_unicode_16_to_unicode (uint32_t enc)       { return enc <= 65535 ? enc : NOCHAR; }
+ static uint32_t cs_unicode_16_from_unicode (unicode_t unicode) { return unicode <= 65535 ? unicode : NOCHAR; }
+ 
+ #define ENCODING_DEFAULT
+diff -ur src/encoding.h.orig src/encoding.h
+--- src/encoding.h.orig	Sun May 21 08:14:15 2006
++++ src/encoding.h	Sun May 21 08:16:54 2006
+@@ -2,6 +2,7 @@
+ #define ENCODING_H
+ 
+ #include <inttypes.h>
++#define ENCODING_TO_UNICODE 1
+ 
+ typedef uint32_t unicode_t;
+ 
+diff -ur src/gentables.orig src/gentables
+--- src/gentables	Sun May 21 08:14:15 2006
++++ src/gentables.orig	Sun May 21 08:15:08 2006
+@@ -13,7 +13,7 @@
+ 
+ my $gen;
+ 
+-$TO_UNICODE = 0; # also generate to_unicode tables
++$TO_UNICODE = 1; # also generate to_unicode tables
+ 
+ sub linear {
+    my ($a, $l, $h, $b) = @_;
--- rxvt-unicode-7.7_1.patch ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200605301906.k4UJ6tGk041218>