[PATCH] libX11: allow inclusion of system level compose files
Marko Myllynen
myllynen at redhat.com
Wed Oct 21 02:36:26 PDT 2009
Ping?
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