[PATCH] libX11: allow inclusion of system level compose files
Marko Myllynen
myllynen at redhat.com
Mon Jan 11 23:54:42 PST 2010
Hi,
ping - I sent this patch few months ago but after some "looks
interesting" comments no conclusions were made. Would anyone happen to
have time to review and either reject or apply?
Thanks,
Marko Myllynen wrote:
> Hi,
>
> with the release of XFree86 4.4 an inclusion system of compose files was
> added to Xlib to allow inclusion of the default compose file (with %L),
> any compose files from user's home directory (with %H), or a compose
> file with a hard coded path [1]. However, even today including system
> level compose files is not possible in a platform independent manner
> although the machinery for including compose files and overriding
> previously defined compositions is already in place.
>
> With the ability to include system level compose files one could greatly
> reduce the need for compose file rule duplication and the work needed to
> propagate changes in one compose file to others. For example, currently
> the Finnish compose file fi_FI.UTF-8 weights over 5000 lines [2] but it
> is almost identical with en_US.UTF-8 except for perhaps half a dozen
> compositions.
>
> Please consider something like the patch below to allow one to include
> system level compose files with the following kind of syntax:
>
> include "%S/en_US.UTF-8/Compose"
>
> 1) http://www.xfree86.org/4.4.0/RELNOTES5.html#42
> 2)
> http://cgit.freedesktop.org/xorg/lib/libX11/tree/nls/fi_FI.UTF-8/Compose.pre
>
>
> Signed-off-by: Marko Myllynen <myllynen at redhat.com>
>
>
> --- a/modules/im/ximcp/imLcPrs.c
> +++ b/modules/im/ximcp/imLcPrs.c
> @@ -44,6 +44,13 @@ OR PERFORMANCE OF THIS SOFTWARE.
> #include <sys/stat.h>
> #include <stdio.h>
>
> +#define XLC_BUFSIZE 256
> +
> +extern void xlocaledir(
> + char *buf,
> + int buf_len
> +);
> +
> extern int _Xmbstowcs(
> wchar_t *wstr,
> char *str,
> @@ -304,6 +311,7 @@ static char*
> TransFileName(Xim im, char *name)
> {
> char *home = NULL, *lcCompose = NULL;
> + char dir[XLC_BUFSIZE];
> char *i = name, *ret, *j;
> int l = 0;
>
> @@ -324,6 +332,10 @@ TransFileName(Xim im, char *name)
> if (lcCompose)
> l += strlen(lcCompose);
> break;
> + case 'S':
> + xlocaledir(dir, XLC_BUFSIZE);
> + l += strlen(dir);
> + break;
> }
> } else {
> l++;
> @@ -355,6 +367,10 @@ TransFileName(Xim im, char *name)
> Xfree(lcCompose);
> }
> break;
> + case 'S':
> + strcpy(j, dir);
> + j += strlen(dir);
> + break;
> }
> i++;
> } else {
>
> --- a/src/xlibi18n/lcFile.c
> +++ b/src/xlibi18n/lcFile.c
> @@ -219,7 +219,7 @@ _XlcParsePath(
> #define XLOCALEDIR "/usr/lib/X11/locale"
> #endif
>
> -static void
> +void
> xlocaledir(
> char *buf,
> int buf_len)
>
>
--
Marko Myllynen
More information about the xorg-devel
mailing list