[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