summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cloos <cloos@jhcloos.com>2010-01-13 11:04:38 -0500
committerJames Cloos <cloos@jhcloos.com>2010-01-13 11:04:38 -0500
commit9df349a7894725f9469b106af645f57f7f3f9af3 (patch)
tree6caf14ab859172564c2cc507ee76931335a662a4
parentccf21a8877f40136e25f2f62d0668b0c76b3cfbd (diff)
Allow inclusion of system level compose files.
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¹. 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² but it is almost identical with en_US.UTF-8 except for perhaps half a dozen compositions. This commit allows 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@redhat.com> Signed-off-by: James Cloos <cloos@jhcloos.com>
-rw-r--r--modules/im/ximcp/imLcPrs.c16
-rw-r--r--src/xlibi18n/lcFile.c2
2 files changed, 17 insertions, 1 deletions
diff --git a/modules/im/ximcp/imLcPrs.c b/modules/im/ximcp/imLcPrs.c
index aa52c20e..8c716721 100644
--- 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 {
diff --git a/src/xlibi18n/lcFile.c b/src/xlibi18n/lcFile.c
index 778e2690..2c15b27c 100644
--- 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)