emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/lisp composite.el


From: Kenichi Handa
Subject: [Emacs-diffs] emacs/lisp composite.el
Date: Wed, 04 Feb 2009 02:00:37 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Kenichi Handa <handa>   09/02/04 02:00:37

Modified files:
        lisp           : composite.el 

Log message:
        (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.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/composite.el?cvsroot=emacs&r1=1.42&r2=1.43

Patches:
Index: composite.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/composite.el,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- composite.el        10 Jan 2009 21:55:01 -0000      1.42
+++ composite.el        4 Feb 2009 02:00:34 -0000       1.43
@@ -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 (not (char-charset (lglyph-char glyph) coding))
+         (progn
+           ;; 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))
+             (setq gstring (lgstring-insert-glyph gstring i
+                                                  (lglyph-copy glyph))
                  nglyphs (lgstring-glyph-len gstring))
-           (lglyph-set-char (lgstring-glyph gstring i) 32)
+             (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))))))
+             (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))))
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]