aboutsummaryrefslogtreecommitdiff
path: root/libX11/src/xlibi18n/lcTxtPr.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2009-06-28 22:07:26 +0000
committermarha <marha@users.sourceforge.net>2009-06-28 22:07:26 +0000
commit3562e78743202e43aec8727005182a2558117eca (patch)
tree8f9113a77d12470c5c851a2a8e4cb02e89df7d43 /libX11/src/xlibi18n/lcTxtPr.c
downloadvcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.gz
vcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.bz2
vcxsrv-3562e78743202e43aec8727005182a2558117eca.zip
Checked in the following released items:
xkeyboard-config-1.4.tar.gz ttf-bitstream-vera-1.10.tar.gz font-alias-1.0.1.tar.gz font-sun-misc-1.0.0.tar.gz font-sun-misc-1.0.0.tar.gz font-sony-misc-1.0.0.tar.gz font-schumacher-misc-1.0.0.tar.gz font-mutt-misc-1.0.0.tar.gz font-misc-misc-1.0.0.tar.gz font-misc-meltho-1.0.0.tar.gz font-micro-misc-1.0.0.tar.gz font-jis-misc-1.0.0.tar.gz font-isas-misc-1.0.0.tar.gz font-dec-misc-1.0.0.tar.gz font-daewoo-misc-1.0.0.tar.gz font-cursor-misc-1.0.0.tar.gz font-arabic-misc-1.0.0.tar.gz font-winitzki-cyrillic-1.0.0.tar.gz font-misc-cyrillic-1.0.0.tar.gz font-cronyx-cyrillic-1.0.0.tar.gz font-screen-cyrillic-1.0.1.tar.gz font-xfree86-type1-1.0.1.tar.gz font-adobe-utopia-type1-1.0.1.tar.gz font-ibm-type1-1.0.0.tar.gz font-bitstream-type1-1.0.0.tar.gz font-bitstream-speedo-1.0.0.tar.gz font-bh-ttf-1.0.0.tar.gz font-bh-type1-1.0.0.tar.gz font-bitstream-100dpi-1.0.0.tar.gz font-bh-lucidatypewriter-100dpi-1.0.0.tar.gz font-bh-100dpi-1.0.0.tar.gz font-adobe-utopia-100dpi-1.0.1.tar.gz font-adobe-100dpi-1.0.0.tar.gz font-util-1.0.1.tar.gz font-bitstream-75dpi-1.0.0.tar.gz font-bh-lucidatypewriter-75dpi-1.0.0.tar.gz font-adobe-utopia-75dpi-1.0.1.tar.gz font-bh-75dpi-1.0.0.tar.gz bdftopcf-1.0.1.tar.gz font-adobe-75dpi-1.0.0.tar.gz mkfontscale-1.0.6.tar.gz openssl-0.9.8k.tar.gz bigreqsproto-1.0.2.tar.gz xtrans-1.2.2.tar.gz resourceproto-1.0.2.tar.gz inputproto-1.4.4.tar.gz compositeproto-0.4.tar.gz damageproto-1.1.0.tar.gz zlib-1.2.3.tar.gz xkbcomp-1.0.5.tar.gz freetype-2.3.9.tar.gz pthreads-w32-2-8-0-release.tar.gz pixman-0.12.0.tar.gz kbproto-1.0.3.tar.gz evieext-1.0.2.tar.gz fixesproto-4.0.tar.gz recordproto-1.13.2.tar.gz randrproto-1.2.2.tar.gz scrnsaverproto-1.1.0.tar.gz renderproto-0.9.3.tar.gz xcmiscproto-1.1.2.tar.gz fontsproto-2.0.2.tar.gz xextproto-7.0.3.tar.gz xproto-7.0.14.tar.gz libXdmcp-1.0.2.tar.gz libxkbfile-1.0.5.tar.gz libfontenc-1.0.4.tar.gz libXfont-1.3.4.tar.gz libX11-1.1.5.tar.gz libXau-1.0.4.tar.gz libxcb-1.1.tar.gz xorg-server-1.5.3.tar.gz
Diffstat (limited to 'libX11/src/xlibi18n/lcTxtPr.c')
-rw-r--r--libX11/src/xlibi18n/lcTxtPr.c256
1 files changed, 256 insertions, 0 deletions
diff --git a/libX11/src/xlibi18n/lcTxtPr.c b/libX11/src/xlibi18n/lcTxtPr.c
new file mode 100644
index 000000000..1f9765f6e
--- /dev/null
+++ b/libX11/src/xlibi18n/lcTxtPr.c
@@ -0,0 +1,256 @@
+/* $Xorg: lcTxtPr.c,v 1.3 2000/08/17 19:45:20 cpqbld Exp $ */
+/*
+ * Copyright 1992, 1993 by TOSHIBA Corp.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of TOSHIBA not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission. TOSHIBA make no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Author: Katsuhisa Yano TOSHIBA Corp.
+ * mopi@osa.ilab.toshiba.co.jp
+ */
+/* $XFree86: xc/lib/X11/lcTxtPr.c,v 3.3 2001/01/17 19:41:55 dawes Exp $ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xlibint.h"
+#include "XlcPubI.h"
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+#include <stdio.h>
+
+static int
+get_buf_size(
+ Bool is_wide_char,
+ XPointer list,
+ int count)
+{
+ int length = 0;
+ char **mb_list;
+ wchar_t **wc_list;
+
+ if (list == NULL)
+ return 0;
+
+ if (is_wide_char) {
+ wc_list = (wchar_t **) list;
+ for ( ; count-- > 0; wc_list++) {
+ if (*wc_list)
+ length += _Xwcslen(*wc_list) + 1;
+ }
+ length *= 5; /* XXX */
+ } else {
+ mb_list = (char **) list;
+ for ( ; count-- > 0; mb_list++) {
+ if (*mb_list)
+ length += strlen(*mb_list) + 1;
+ }
+ length *= 3; /* XXX */
+ }
+ length = (length / BUFSIZ + 1) * BUFSIZ; /* XXX */
+
+ return length;
+}
+
+static int
+_XTextListToTextProperty(
+ XLCd lcd,
+ Display *dpy,
+ const char *from_type,
+ XPointer list,
+ int count,
+ XICCEncodingStyle style,
+ XTextProperty *text_prop)
+{
+ Atom encoding;
+ XlcConv conv;
+ const char *to_type;
+ char **mb_list = NULL;
+ wchar_t **wc_list = NULL;
+ XPointer from;
+ char *to, *buf, *value;
+ int from_left, to_left, buf_len, nitems, unconv_num = 0, ret, i;
+ Bool is_wide_char = False;
+
+ if (strcmp(XlcNWideChar, from_type) == 0)
+ is_wide_char = True;
+
+ buf_len = get_buf_size(is_wide_char, list, count);
+ if ((buf = (char *) Xmalloc(buf_len)) == NULL)
+ return XNoMemory;
+
+ switch (style) {
+ case XStringStyle:
+ case XStdICCTextStyle:
+ encoding = XA_STRING;
+ to_type = XlcNString;
+ break;
+ case XUTF8StringStyle:
+ encoding = XInternAtom(dpy, "UTF8_STRING", False);
+ to_type = XlcNUtf8String;
+ break;
+ case XCompoundTextStyle:
+ encoding = XInternAtom(dpy, "COMPOUND_TEXT", False);
+ to_type = XlcNCompoundText;
+ break;
+ case XTextStyle:
+ encoding = XInternAtom(dpy, XLC_PUBLIC(lcd, encoding_name), False);
+ to_type = XlcNMultiByte;
+ if (is_wide_char == False) {
+ nitems = 0;
+ mb_list = (char **) list;
+ to = buf;
+ for (i = 0; i < count && buf_len > 0; i++) {
+ if (*mb_list)
+ strcpy(to, *mb_list);
+ else
+ *to = '\0';
+ from_left = (*mb_list ? strlen(*mb_list) : 0) + 1;
+ nitems += from_left;
+ to += from_left;
+ mb_list++;
+ }
+ unconv_num = 0;
+ goto done;
+ }
+ break;
+ default:
+ Xfree(buf);
+ return XConverterNotFound;
+ }
+
+ if (count < 1) {
+ nitems = 0;
+ goto done;
+ }
+
+retry:
+ conv = _XlcOpenConverter(lcd, from_type, lcd, to_type);
+ if (conv == NULL) {
+ Xfree(buf);
+ return XConverterNotFound;
+ }
+
+ if (is_wide_char)
+ wc_list = (wchar_t **) list;
+ else
+ mb_list = (char **) list;
+
+ to = buf;
+ to_left = buf_len;
+
+ unconv_num = 0;
+
+ for (i = 1; to_left > 0; i++) {
+ if (is_wide_char) {
+ from = (XPointer) *wc_list;
+ from_left = _Xwcslen(*wc_list);
+ wc_list++;
+ } else {
+ from = (XPointer) *mb_list;
+ from_left = (*mb_list ? strlen(*mb_list) : 0);
+ mb_list++;
+ }
+
+ ret = _XlcConvert(conv, &from, &from_left, (XPointer *) &to, &to_left,
+ NULL, 0);
+
+ if (ret < 0)
+ continue;
+
+ if (ret > 0 && style == XStdICCTextStyle && encoding == XA_STRING) {
+ _XlcCloseConverter(conv);
+ encoding = XInternAtom(dpy, "COMPOUND_TEXT", False);
+ to_type = XlcNCompoundText;
+ goto retry;
+ }
+
+ unconv_num += ret;
+ *to++ = '\0';
+ to_left--;
+
+ if (i >= count)
+ break;
+
+ _XlcResetConverter(conv);
+ }
+
+ _XlcCloseConverter(conv);
+
+ nitems = to - buf;
+done:
+ if (nitems <= 0)
+ nitems = 1;
+ value = (char *) Xmalloc(nitems);
+ if (value == NULL) {
+ Xfree(buf);
+ return XNoMemory;
+ }
+ if (nitems == 1)
+ *value = 0;
+ else
+ memcpy(value, buf, nitems);
+ nitems--;
+ Xfree(buf);
+
+ text_prop->value = (unsigned char *) value;
+ text_prop->encoding = encoding;
+ text_prop->format = 8;
+ text_prop->nitems = nitems;
+
+ return unconv_num;
+}
+
+int
+_XmbTextListToTextProperty(
+ XLCd lcd,
+ Display *dpy,
+ char **list,
+ int count,
+ XICCEncodingStyle style,
+ XTextProperty *text_prop)
+{
+ return _XTextListToTextProperty(lcd, dpy, XlcNMultiByte, (XPointer) list,
+ count, style, text_prop);
+}
+
+int
+_XwcTextListToTextProperty(
+ XLCd lcd,
+ Display *dpy,
+ wchar_t **list,
+ int count,
+ XICCEncodingStyle style,
+ XTextProperty *text_prop)
+{
+ return _XTextListToTextProperty(lcd, dpy, XlcNWideChar, (XPointer) list,
+ count, style, text_prop);
+}
+
+int
+_Xutf8TextListToTextProperty(
+ XLCd lcd,
+ Display *dpy,
+ char **list,
+ int count,
+ XICCEncodingStyle style,
+ XTextProperty *text_prop)
+{
+ return _XTextListToTextProperty(lcd, dpy, XlcNUtf8String, (XPointer) list,
+ count, style, text_prop);
+}