Exemplo n.º 1
0
static
FlocaleCharset *FiconvSetupConversion(Display *dpy, FlocaleCharset *fc)
{
	FlocaleCharset *my_fc = NULL;

	if (!FiconvSupport)
	{
		return NULL;
	}

	if (!FiconvInitialized)
	{
		FiconvInit(dpy, "fvwm");
	}

	if (FLCIconvUtf8Charset == NULL)
	{
		return NULL;
	}

	if (fc == NULL)
	{
		my_fc = FLCIconvDefaultCharset;
		if (my_fc == NULL)
		{
			return NULL;
		}
	}
	else
	{
		my_fc = fc;
	}

	if (!FLC_DO_ICONV_CHARSET_INITIALIZED(my_fc))
	{
		set_iconv_charset_index(my_fc);
#if FLOCALE_DEBUG_CHARSET
		fprintf(stderr, "[Flocale] set up iconv charset: "
			"x: %s, iconv: %s\n",
			FLC_DEBUG_GET_X_CHARSET(my_fc),
			FLC_DEBUG_GET_ICONV_CHARSET(my_fc));
#endif
		if (!FLC_HAVE_ICONV_CHARSET(my_fc))
		{
			fprintf(
				stderr,
				"[fvwmlibs] cannot get iconv converter "
				"for charset %s\n",
				FLC_DEBUG_GET_X_CHARSET(my_fc));
			return NULL;
		}
	}
	if (!FLC_HAVE_ICONV_CHARSET(my_fc))
	{
		return NULL;
	}

	return my_fc;
}
Exemplo n.º 2
0
static
void FiconvInit(Display *dpy, const char *module)
{
	int suc = False;

	if (!FiconvSupport || FiconvInitialized)
		return;

	FiconvInitialized = True;
	FlocaleCharsetInit(dpy, module);
	FLCIconvUtf8Charset = FlocaleCharsetGetUtf8Charset();
	FLCIconvDefaultCharset = FlocaleCharsetGetFLCXOMCharset();

	suc = set_default_iconv_charsets(FLCIconvDefaultCharset);
	if (!suc)
	{
		FLCIconvDefaultCharset = FlocaleCharsetGetLocaleCharset();
		suc = set_default_iconv_charsets(FLCIconvDefaultCharset);
	}
	if (!suc)
	{
		fprintf(stderr,
		       "[%s][FiconvInit]: WARN -- Cannot get default "
		       "iconv charset for default charsets '%s' and '%s'\n",
		       module,
		       FLC_DEBUG_GET_X_CHARSET(
			       FlocaleCharsetGetFLCXOMCharset()),
		       FLC_DEBUG_GET_X_CHARSET(FLCIconvDefaultCharset));
		FLCIconvUtf8Charset = NULL;
		FLCIconvDefaultCharset = NULL;
	}

#if FLOCALE_DEBUG_CHARSET
	fprintf(stderr,"[FiconvInit] iconv charset: x:%s, iconv:%s\n",
		FLC_DEBUG_GET_X_CHARSET(FLCIconvDefaultCharset),
		FLC_DEBUG_GET_ICONV_CHARSET(FLCIconvDefaultCharset));
	fprintf(stderr,"[FiconvInit] UTF-8 charset: x:%s, iconv:%s\n",
		FLC_DEBUG_GET_X_CHARSET(FLCIconvUtf8Charset),
		FLC_DEBUG_GET_ICONV_CHARSET(FLCIconvUtf8Charset));
#endif

}
Exemplo n.º 3
0
void FlocaleCharsetPrintXOMInfo(void)
{
#ifdef HAVE_XOUTPUT_METHOD
	int i;

	fprintf(stderr,"  XOM Charsets: ");
	if (FLCXOMCharsetList_num > 0)
	{
		for(i = 0; i <  FLCXOMCharsetList_num; i++)
		{
			fprintf(
				stderr, "%s ",
				FLC_DEBUG_GET_X_CHARSET(FLCXOMCharsetList[i]));
		}
	}
	fprintf(stderr,"\n");
#endif
}
Exemplo n.º 4
0
Bool FlocaleCharsetIsCharsetXLocale(Display *dpy, char *charset, char *module)
{
#ifdef HAVE_XOUTPUT_METHOD
	int i;

	FlocaleCharsetInit(dpy, module);
	if (FLCXOMCharsetList_num > 0)
	{
		for(i = 0; i <  FLCXOMCharsetList_num; i++)
		{
			if (StrEquals(
				    FLC_DEBUG_GET_X_CHARSET(
					    FLCXOMCharsetList[i]),
				    charset))
			{
				return True;
			}
		}
	}
	return False;
#else
	return True; /* Hum */
#endif
}
Exemplo n.º 5
0
void FlocaleCharsetInit(Display *dpy, const char *module)
{
	static Bool initialized = False;
	char *charset;

	if (initialized == True)
	{
		return;
	}
	initialized = True;

	/* try to find the regular charset */
	charset = getenv("CHARSET");
#if FLOCALE_DEBUG_CHARSET
	fprintf(stderr,
		"[FlocaleInitCharset] CHARSET: %s\n", (!charset)? "null":charset);
#endif
	if ((!charset || strlen(charset) < 3) && FlocaleLibcharsetSupport)
	{
		charset = (char *)Flocale_charset();
#if FLOCALE_DEBUG_CHARSET
		fprintf(
			stderr,
			"[FlocaleInitCharset] FlocaleLibcharsetSupport: %s\n",
			(!charset)? "null":charset);
#endif
	}
	if ((!charset || strlen(charset) < 3) && FlocaleCodesetSupport)
	{
		charset = Fnl_langinfo(FCODESET);
#if FLOCALE_DEBUG_CHARSET
		fprintf(
			stderr,
			"[FlocaleInitCharset] Fnl_langinfo: %s\n",
			(!charset)? "null":charset);
#endif
	}
	if (charset != NULL && strlen(charset) > 2)
	{
		FLCLocaleCharset =
			FlocaleCharsetOfLocaleCharset(charset);
#if FLOCALE_DEBUG_CHARSET
		fprintf(
			stderr,
			"[FlocaleInitCharset] FLCLocaleCharset: %s\n", charset);
#endif
	}

	/* set the defaults X locale charsets */
	FlocaleInit_X_Charset(dpy, module);

	/* never null */
	FLCUtf8Charset = FlocaleCharsetOfXCharset(FLOCALE_UTF8_XCHARSET);

#if FLOCALE_DEBUG_CHARSET
	fprintf(stderr,"[FlocaleCharsetInit] locale charset: x:%s, bidi:%s\n",
		FLC_DEBUG_GET_X_CHARSET(FLCXOMCharset),
		FLC_DEBUG_GET_BIDI_CHARSET (FLCXOMCharset));
	fprintf(stderr,"[FlocaleCharsetInit] locale charset: x:%s, bidi:%s\n",
		FLC_DEBUG_GET_X_CHARSET(FLCLocaleCharset),
		FLC_DEBUG_GET_BIDI_CHARSET (FLCLocaleCharset));
#endif

	return;
}
Exemplo n.º 6
0
static
void FlocaleInit_X_Charset(Display *dpy, const char *module)
{
#ifdef HAVE_XOUTPUT_METHOD
	XOM om;
	XOMCharSetList cs;
	int i;

	om = XOpenOM(dpy, NULL, NULL, NULL);
	if (om && XGetOMValues(om, XNRequiredCharSet, &cs, NULL) == NULL)
	{
		if (cs.charset_count > 0)
		{
			if (FLCXOMCharsetList != NULL)
			{
				free(FLCXOMCharsetList);
			}
			FLCXOMCharsetList_num = cs.charset_count;
			FLCXOMCharsetList = (FlocaleCharset **)safemalloc(
				sizeof(FlocaleCharset) * cs.charset_count);
			for (i = 0; i <  FLCXOMCharsetList_num; i++)
			{
				FLCXOMCharsetList[i] =
					FlocaleCharsetOfXCharset(
						cs.charset_list[i]);
#if FLOCALE_DEBUG_CHARSET
				fprintf(stderr,
					"[FlocaleInitCharset] XOM charset "
					"%i: %s, bidi:%s\n",
					i,
					FLC_DEBUG_GET_X_CHARSET(
						FLCXOMCharsetList[i]),
					FLC_DEBUG_GET_BIDI_CHARSET (
						FLCXOMCharsetList[i]));
#endif
			}
		}
	}
	if (om)
	{
		XCloseOM(om);
	}
	if (FLCXOMCharsetList_num > 0 && FLCXOMCharsetList[0])
	{
		char *best_charset;

		if (FLCLocaleCharset != NULL)
		{
			best_charset = FLCLocaleCharset->x;
#if FLOCALE_DEBUG_CHARSET
			fprintf(stderr,
				"[FlocaleInitCharset] FLCLocaleCharset: %s\n",
				best_charset);
#endif
		}
		else
		{
			best_charset = FLOCALE_FALLBACK_XCHARSET;
#if FLOCALE_DEBUG_CHARSET
			fprintf(stderr,
				"[FlocaleInitCharset] FALLBACK: %s\n",
				best_charset);
#endif
		}

		FLCXOMCharset = FLCXOMCharsetList[0];
		if (best_charset == NULL)
		{
			/* should not happen */
		}
		else
		{
			for(i = 0; i <  FLCXOMCharsetList_num; i++)
			{
				if (StrEquals(
					best_charset,
					FLC_DEBUG_GET_X_CHARSET(
						FLCXOMCharsetList[i])))
				{
					FLCXOMCharset = FLCXOMCharsetList[i];
					break;
				}
			}
		}
#if FLOCALE_DEBUG_CHARSET
		fprintf(stderr,
			"[FlocaleInitCharset] XOM charset "
			"%i: %s\n",
			i,
			FLC_DEBUG_GET_X_CHARSET(FLCXOMCharset));
#endif
	}
#endif
}