Ar an triochadú lá de mí Márta, scríobh Olivier Galibert:
+#if defined(USE_XFT) && defined(MULE)
static int
-separate_textual_runs (unsigned char *text_storage,
- struct textual_run *run_storage,
- const Ichar *str, Charcount len,
- struct face_cachel *cachel)
+separate_textual_runs_xft_mule (unsigned char *text_storage,
+ struct textual_run *run_storage,
+ const Ichar *str, Charcount len,
+ struct face_cachel *cachel)
+{
+ Lisp_Object prev_charset = Qnil;
+ int runs_so_far = 0, i;
+
+ run_storage[0].ptr = text_storage;
+ run_storage[0].len = len;
+ run_storage[0].dimension = 2;
+ run_storage[0].charset = Qnil;
+
+ for (i = 0; i < len; i++)
+ {
+ Ichar ch = str[i];
+ Lisp_Object charset = ichar_charset(ch);
+ int ucs = ichar_to_unicode(ch);
+
+ /* If UCS is less than zero or greater than 0xFFFF, set ucs2 to
+ REPLACMENT CHARACTER. */
+ /* That means we can't handle characters outside of the BMP for now */
+ ucs = (ucs & ~0xFFFF) ? 0xFFFD : ucs;
You’ve just done that Unicode conversion to throw away the result. That’s
not very constructive, since the XFT redisplay routines *require* that the
supplied strings are Unicode. I’m fighting with Cygwin right now to get it
to usefully install fontconfig so I can check this out for certain, but I
believe strongly that this will break redisplay with non-Latin-1 characters
under XFT and Mule.
+ if (prev_charset != charset)
+ {
+ if (runs_so_far)
+ run_storage[runs_so_far-1].len = (text_storage - run_storage[runs_so_far-1].ptr)
>> 1;
+ run_storage[runs_so_far].ptr = text_storage;
+ run_storage[runs_so_far].dimension = 2;
+ run_storage[runs_so_far].charset = charset;
+ prev_charset = charset;
+ runs_so_far++;
+ }
+
+ *(XftChar16 *)text_storage = str[i];
+ text_storage += sizeof(XftChar16);
+ }
+
+ if (runs_so_far)
+ run_storage[runs_so_far-1].len = (text_storage - run_storage[runs_so_far-1].ptr)
>> 1;
+ return runs_so_far;
+}
+#endif
--
On the quay of the little Black Sea port, where the rescued pair came once
more into contact with civilization, Dobrinton was bitten by a dog which was
assumed to be mad, though it may only have been indiscriminating. (Saki)
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches