diff options
author | Eli Zaretskii <eliz@gnu.org> | 2018-07-27 12:33:29 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2018-07-27 12:33:29 +0300 |
commit | 71a915153a5b4818f0a3cdebb7a1afb4fe6de374 (patch) | |
tree | b2818b16109e5eaefd0580eb13831f5656c31689 | |
parent | 0feb6733d4bea5f360abc3f64bfc5b9b29087c48 (diff) | |
download | emacs-71a915153a5b4818f0a3cdebb7a1afb4fe6de374.tar.gz |
* src/character.c (char_width): Support glyphs with faces. (Bug#32276)
-rw-r--r-- | src/character.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/character.c b/src/character.c index deac1fa22ec..48268e04947 100644 --- a/src/character.c +++ b/src/character.c @@ -34,6 +34,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ #include "lisp.h" #include "character.h" #include "buffer.h" +#include "dispextern.h" #include "composite.h" #include "disptab.h" @@ -288,13 +289,15 @@ char_width (int c, struct Lisp_Char_Table *dp) if (VECTORP (disp)) for (i = 0, width = 0; i < ASIZE (disp); i++) { + int c; ch = AREF (disp, i); - if (CHARACTERP (ch)) - { - int w = CHARACTER_WIDTH (XFASTINT (ch)); - if (INT_ADD_WRAPV (width, w, &width)) - string_overflow (); - } + if (GLYPH_CODE_P (ch)) + c = GLYPH_CODE_CHAR (ch); + else if (CHARACTERP (ch)) + c = XFASTINT (ch); + int w = CHARACTER_WIDTH (c); + if (INT_ADD_WRAPV (width, w, &width)) + string_overflow (); } } return width; |