changeset 101780:4c5660c5102c

(compose-gstring-for-terminal): If a character is not supported by the current terminal, don't make a multi-glyph grapheme cluster. (auto-compose-chars): Check font-object by fontp.
author Kenichi Handa <handa@m17n.org>
date Wed, 04 Feb 2009 02:00:34 +0000
parents d402dabe697d
children 7d00428842ae
files lisp/composite.el
diffstat 1 files changed, 36 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/composite.el	Wed Feb 04 01:58:13 2009 +0000
+++ b/lisp/composite.el	Wed Feb 04 02:00:34 2009 +0000
@@ -664,28 +664,45 @@
 	 (nchars (lgstring-char-len gstring))
 	 (nglyphs (lgstring-glyph-len gstring))
 	 (i 0)
+	 (coding (lgstring-font gstring))
 	 glyph)
     (while (and (< i nglyphs)
 		(setq glyph (lgstring-glyph gstring i)))
-      (if (= (lglyph-width glyph) 0)
+      (if (not (char-charset (lglyph-char glyph) coding))
 	  (progn
-	    ;; Compose by prepending a space.
-	    (setq gstring (lgstring-insert-glyph gstring i (lglyph-copy glyph))
-		  nglyphs (lgstring-glyph-len gstring))
-	    (lglyph-set-char (lgstring-glyph gstring i) 32)
-	    (setq i (+ 2)))
-	(let ((from (lglyph-from glyph))
-	      (to (lglyph-to glyph))
-	      (j (1+ i)))
-	  (while (and (< j nglyphs)
-		      (setq glyph (lgstring-glyph gstring j))
-		      (= (lglyph-width glyph) 0))
-	    (setq to (lglyph-to glyph)
-		  j (1+ j)))
-	  (while (< i j)
-	    (setq glyph (lgstring-glyph gstring i))
-	    (lglyph-set-from-to glyph from to)
-	    (setq i (1+ i))))))
+	    ;; As the terminal doesn't support this glyph, return a
+	    ;; gstring in which each glyph is its own graphme-cluster
+	    ;; of width 1..
+	    (setq i 0)
+	    (while (and (< i nglyphs)
+			(setq glyph (lgstring-glyph gstring i)))
+	      (if (< (lglyph-width glyph) 1)
+		  (lglyph-set-width glyph 1))
+	      (lglyph-set-from-to glyph i i)
+	      (setq i (1+ i))))
+	(if (= (lglyph-width glyph) 0)
+	    (progn
+	      ;; Compose by prepending a space.
+	      (setq gstring (lgstring-insert-glyph gstring i
+						   (lglyph-copy glyph))
+		    nglyphs (lgstring-glyph-len gstring))
+	      (setq glyph (lgstring-glyph gstring i))
+	      (lglyph-set-char glyph 32)
+	      (lglyph-set-width glyph 1)
+	      (setq i (+ 2)))
+	  (let ((from (lglyph-from glyph))
+		(to (lglyph-to glyph))
+		(j (1+ i)))
+	    (while (and (< j nglyphs)
+			(setq glyph (lgstring-glyph gstring j))
+			(char-charset (lglyph-char glyph) coding)
+			(= (lglyph-width glyph) 0))
+	      (setq to (lglyph-to glyph)
+		    j (1+ j)))
+	    (while (< i j)
+	      (setq glyph (lgstring-glyph gstring i))
+	      (lglyph-set-from-to glyph from to)
+	      (setq i (1+ i)))))))
     gstring))
 
 
@@ -709,7 +726,7 @@
   (let ((gstring (composition-get-gstring from to font-object string)))
     (if (lgstring-shaped-p gstring)
 	gstring
-      (or font-object
+      (or (fontp font-object 'font-object)
 	  (setq func 'compose-gstring-for-terminal))
       (funcall func gstring))))