# HG changeset patch # User Kenichi Handa # Date 1233712834 0 # Node ID 4c5660c5102cab90ff0c1e649fab06a555ac2683 # Parent d402dabe697d7a2c7b3241003fa2573481c78fb0 (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. diff -r d402dabe697d -r 4c5660c5102c lisp/composite.el --- 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))))