Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Dec 2000 17:38:19 +0900 (JST)
From:      Noriyuki Soda <soda@sra.co.jp>
To:        i18n@XFree86.Org
Cc:        xorg_i18n@x.org, bsd-locale@hauN.org, li18nux@li18nux.net, tech-x11@netbsd.org, i18n@freebsd.org, tech@openbsd.org
Subject:   Re: Restart: better XI18N future API
Message-ID:  <200012220838.RAA19423@srapc342.sra.co.jp>
In-Reply-To: <20001221.160155.125112926.hiura@Eng.Sun.COM>
References:  <20001221.160155.125112926.hiura@Eng.Sun.COM>

next in thread | previous in thread | raw e-mail | index | archive | help
>>>>> On Thu, 21 Dec 2000 16:01:55 -0800 (PST), hiura@unicode.org said:

> Here is the consideration.
> If XmbDrawString takes "encoding" parameter, such as
> XmbDrawString(....., encoding, string, ..), it perfoms
> the same as
>    Xutf8DrawString(....., string, ..)
> when the encoding parameter is set to UTF-8. 

> Let's call XmbDrawString(....., encoding, string, ..) as
> XembDrawString, stands for X encoded multi-byte DrawString for
> now for the sake of discussion.

I believe this is not good API as I posted previous mail.

Because Output Context is encoding dependent, thus, passing encoding
parameter to XmbDrawString breaks current abstraction about output
context. (What happens when a string which cannot be displayed by the
fontset parameter passed to the XembDrawString?)
And because of above reason, implementation is hard, and cannot be
right.

I think the right way to solve multi-thread/multi-locale problem
is to create three APIs which have locale parameter (not encoding
parameter).

- XLocaleNameOfEncoding(locale_name, encoding_name)
  This is generalized version of XFree86UTF8Locale() which I wrote
  before. This function returns locale name which correspond to
  locale_name parameter, but changes its encoding to encoding_name
  parameter. The first parameter locale_name is Operating System
  dependent. The second parameter encoding_name should be
  standardized by X Consortium. The return value is Operating System
  dependent.
  The implementation of this function should be Operating System
  dependent unless X_LOCALE is used.
  Note that this function may return NULL, when the encoding_name
  is not supported on the Operating System.
  e.g.
     XLocaleNameOfEncoding("en_US.ISO8859-1", "UTF-8") -> "en_US.UTF-8"
     XLocaleNameOfEncoding("C", "UTF-8") -> "en_US.UTF-8"
     XLocaleNameOfEncoding("C", "eucJP") -> "ja_JP.eucJP"
     XLocaleNameOfEncoding("zh_CN.eucCN", "UTF-8") -> "zh_CN.UTF-8"
     XLocaleNameOfEncoding("ja_JP.UTF-8", "eucJP") -> "ja_JP.eucJP"
- XOpenIMOfLocale(display, rdb, res_name, res_class, locale_name)
  This is a variant of XOpenIM() which has explicit locale_name 
  parameter.
- XOpenOMOfLocale(display, rdb, res_name, res_class, locale_name)
  This is a variant of XOpenOM() which has explicit locale_name 
  parameter.

Thus, a program which needs to display unicode string can use
XmbDrawString and its variants with UTF-8 Output Context created by
XOpenOMOfLocale(....., XLocaleNameOfEncoding(setlocale(LC_CTYPE,
NULL), "UTF-8"));

This only introduces three APIs, and the implementations of the three
APIs are trivial for anyone who have clue.
--
soda


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-i18n" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200012220838.RAA19423>