# HG changeset patch # User Aidan Kehoe # Date 1233423551 0 # Node ID dbe504bac1f4b8d48b078b83c3572baf57e6dd08 # Parent b25f081370e0ea07648c447823f1b97e3d45b33b# Parent c83cab5a4f04d9f2c7f94946c6fbbaa9749961f6 Merge. diff -r c83cab5a4f04 -r dbe504bac1f4 lisp/ChangeLog --- a/lisp/ChangeLog Sat Jan 31 17:38:07 2009 +0000 +++ b/lisp/ChangeLog Sat Jan 31 17:39:11 2009 +0000 @@ -5,6 +5,12 @@ invalid-sequence-coding-system handling, display them using the caret notation. +2009-01-31 Aidan Kehoe + + * frame.el (display-graphic-p): + Call #'display-device on the DISPLAY argument, ensuring that the + argument to #'device-on-window-system-p is correct. + 2009-01-18 Ville Skyttä * font.el (font-*-p): Docstring spelling fix. diff -r c83cab5a4f04 -r dbe504bac1f4 lisp/frame.el --- a/lisp/frame.el Sat Jan 31 17:38:07 2009 +0000 +++ b/lisp/frame.el Sat Jan 31 17:39:11 2009 +0000 @@ -1211,7 +1211,7 @@ that use a window system such as X, and false for text-only terminals. DISPLAY can be a frame, a device, a console, or nil (meaning the selected frame)." - (device-on-window-system-p display)) + (device-on-window-system-p (display-device display))) (defun display-images-p (&optional display) "Return non-nil if DISPLAY can display images. diff -r c83cab5a4f04 -r dbe504bac1f4 src/ChangeLog --- a/src/ChangeLog Sat Jan 31 17:38:07 2009 +0000 +++ b/src/ChangeLog Sat Jan 31 17:39:11 2009 +0000 @@ -1,3 +1,8 @@ +2009-01-31 Aidan Kehoe + + * unicode.c (unicode_convert): + Correct little-endian UTF-16 surrogate handling. + 2009-01-16 Aidan Kehoe * chartab.c (print_table_entry): diff -r c83cab5a4f04 -r dbe504bac1f4 src/unicode.c --- a/src/unicode.c Sat Jan 31 17:38:07 2009 +0000 +++ b/src/unicode.c Sat Jan 31 17:39:11 2009 +0000 @@ -2115,23 +2115,47 @@ { int tempch; - if (!valid_utf_16_last_surrogate(ch & 0xFFFF)) - { - DECODE_ERROR_OCTET ((ch >> 24) & 0xFF, dst, data, - ignore_bom); - DECODE_ERROR_OCTET ((ch >> 16) & 0xFF, dst, data, - ignore_bom); - DECODE_ERROR_OCTET ((ch >> 8) & 0xFF, dst, data, - ignore_bom); - DECODE_ERROR_OCTET (ch & 0xFF, dst, data, - ignore_bom); - } - else + if (little_endian) { - tempch = utf_16_surrogates_to_code((ch >> 16), - (ch & 0xffff)); - decode_unicode_char(tempch, dst, data, ignore_bom); + if (!valid_utf_16_last_surrogate(ch >> 16)) + { + DECODE_ERROR_OCTET (ch & 0xFF, dst, data, + ignore_bom); + DECODE_ERROR_OCTET ((ch >> 8) & 0xFF, dst, data, + ignore_bom); + DECODE_ERROR_OCTET ((ch >> 16) & 0xFF, dst, data, + ignore_bom); + DECODE_ERROR_OCTET ((ch >> 24) & 0xFF, dst, data, + ignore_bom); + } + else + { + tempch = utf_16_surrogates_to_code((ch & 0xffff), + (ch >> 16)); + decode_unicode_char(tempch, dst, data, ignore_bom); + } } + else + { + if (!valid_utf_16_last_surrogate(ch & 0xFFFF)) + { + DECODE_ERROR_OCTET ((ch >> 24) & 0xFF, dst, data, + ignore_bom); + DECODE_ERROR_OCTET ((ch >> 16) & 0xFF, dst, data, + ignore_bom); + DECODE_ERROR_OCTET ((ch >> 8) & 0xFF, dst, data, + ignore_bom); + DECODE_ERROR_OCTET (ch & 0xFF, dst, data, + ignore_bom); + } + else + { + tempch = utf_16_surrogates_to_code((ch >> 16), + (ch & 0xffff)); + decode_unicode_char(tempch, dst, data, ignore_bom); + } + } + ch = 0; counter = 0; } diff -r c83cab5a4f04 -r dbe504bac1f4 tests/ChangeLog --- a/tests/ChangeLog Sat Jan 31 17:38:07 2009 +0000 +++ b/tests/ChangeLog Sat Jan 31 17:39:11 2009 +0000 @@ -1,3 +1,8 @@ +2009-01-31 Aidan Kehoe + + * automated/mule-tests.el: + Test little-endian Unicode surrogates too. + 2009-01-18 Aidan Kehoe * automated/lisp-tests.el: (char-table-with-string): diff -r c83cab5a4f04 -r dbe504bac1f4 tests/automated/mule-tests.el --- a/tests/automated/mule-tests.el Sat Jan 31 17:38:07 2009 +0000 +++ b/tests/automated/mule-tests.el Sat Jan 31 17:39:11 2009 +0000 @@ -446,12 +446,17 @@ (encode-coding-string xemacs-character 'ctext)))))) (loop - for (code-point encoded) - in '((#x10000 "\xd8\x00\xdc\x00") - (#x10FFFD "\xdb\xff\xdf\xfd")) - do (Assert (equal (encode-coding-string - (decode-char 'ucs code-point) 'utf-16) - encoded))) + for (code-point utf-16-big-endian utf-16-little-endian) + in '((#x10000 "\xd8\x00\xdc\x00" "\x00\xd8\x00\xdc") + (#x10FFFD "\xdb\xff\xdf\xfd" "\xff\xdb\xfd\xdf")) + do + (Assert (equal (encode-coding-string + (decode-char 'ucs code-point) 'utf-16) + utf-16-big-endian)) + (Assert (equal (encode-coding-string + (decode-char 'ucs code-point) 'utf-16-le) + utf-16-little-endian)) + ;;--------------------------------------------------------------- ;; Regression test for a couple of CCL-related bugs.