changeset 66107:bfc846e38bba

Apply 2005-10-09 change for term/x-win.el. (x-get-selection, mac-select-convert-to-string): Convert from/to UTF-16 clipboard data as in native byte order, no BOM.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sun, 16 Oct 2005 02:21:16 +0000
parents 9b8e76617c8c
children f4ddfc71077d
files lisp/term/mac-win.el
diffstat 1 files changed, 34 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/term/mac-win.el	Sun Oct 16 02:10:39 2005 +0000
+++ b/lisp/term/mac-win.el	Sun Oct 16 02:21:16 2005 +0000
@@ -54,8 +54,6 @@
 ;; -font		*font
 ;; -foreground		*foreground
 ;; -geometry		.geometry
-;; -i			.iconType
-;; -itype		.iconType
 ;; -iconic		.iconic
 ;; -name		.name
 ;; -reverse		*reverseVideo
@@ -1198,15 +1196,21 @@
     (when (and (stringp data)
 	       (setq data-type (get-text-property 0 'foreign-selection data)))
       (cond ((eq data-type 'public.utf16-plain-text)
-	     (let ((encoded (and (fboundp 'mac-code-convert-string)
-				 (mac-code-convert-string data
-							  'utf-16 coding))))
-	       (if encoded
-		   (let ((coding-save last-coding-system-used))
-		     (setq data (decode-coding-string encoded coding))
-		     (setq last-coding-system-used coding-save))
-		 (setq data
-		       (decode-coding-string data 'utf-16)))))
+	     (if (fboundp 'mac-code-convert-string)
+		 (let ((s (mac-code-convert-string data nil coding)))
+		   (if s
+		       (setq data (decode-coding-string s coding))
+		     (setq data
+			   ;; (decode-coding-string data 'utf-16) is
+			   ;; not correct because
+			   ;; public.utf16-plain-text is defined as
+			   ;; native byte order, no BOM.
+			   (decode-coding-string
+			    (mac-code-convert-string data nil 'utf-8)
+			    'utf-8))))
+	       ;; No `mac-code-convert-string' means non-Carbon, which
+	       ;; implies big endian.
+	       (setq data (decode-coding-string data 'utf-16be))))
 	    ((eq data-type 'com.apple.traditional-mac-plain-text)
 	     (setq data (decode-coding-string data coding)))
 	    ((eq data-type 'public.file-url)
@@ -1323,14 +1327,25 @@
 	  (remove-text-properties 0 (length str) '(composition nil) str)
 	  (cond
 	   ((eq type 'public.utf16-plain-text)
-	    (let (s)
-	      (when (and (fboundp 'mac-code-convert-string)
-			 (memq coding (find-coding-systems-string str)))
-		(setq coding (coding-system-change-eol-conversion coding 'mac))
-		(setq s (mac-code-convert-string
-			 (encode-coding-string str coding)
-			 coding 'utf-16)))
-	      (setq str (or s (encode-coding-string str 'utf-16-mac)))))
+	    (if (fboundp 'mac-code-convert-string)
+		(let (s)
+		  (when (memq coding (find-coding-systems-string str))
+		    (setq coding
+			  (coding-system-change-eol-conversion coding 'mac))
+		    (setq s (mac-code-convert-string
+			     (encode-coding-string str coding)
+			     coding nil)))
+		  (setq str (or s
+				;; (encode-coding-string str
+				;; 'utf-16-mac) is not correct because
+				;; public.utf16-plain-text is defined
+				;; as native byte order, no BOM.
+				(mac-code-convert-string
+				 (encode-coding-string str 'utf-8-mac)
+				 'utf-8 nil))))
+	      ;; No `mac-code-convert-string' means non-Carbon, which
+	      ;; implies big endian.
+	      (setq str (encode-coding-string str 'utf-16be-mac))))
 	   ((eq type 'com.apple.traditional-mac-plain-text)
 	    (let ((encodables (find-coding-systems-string str))
 		  (rest mac-script-code-coding-systems))