diff options
author | Kenichi Handa <handa@m17n.org> | 2009-02-04 01:35:16 +0000 |
---|---|---|
committer | Kenichi Handa <handa@m17n.org> | 2009-02-04 01:35:16 +0000 |
commit | d0984aff9503b9a685e67a50f0a16e8799131ede (patch) | |
tree | 7656f94ce69d082e62bd8a0581b79e2ca49a7765 /src/term.c | |
parent | ce65fe7a4e75b3d6e3a433a1e5e9a1a0ce1163bf (diff) | |
download | emacs-d0984aff9503b9a685e67a50f0a16e8799131ede.tar.gz emacs-d0984aff9503b9a685e67a50f0a16e8799131ede.tar.bz2 emacs-d0984aff9503b9a685e67a50f0a16e8799131ede.zip |
(encode_terminal_code): Fix handling of composition.
(produce_composite_glyph): For static composition, get pixel_width
from struct composition.
Diffstat (limited to 'src/term.c')
-rw-r--r-- | src/term.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/term.c b/src/term.c index 0cfc1ff3b95..c425337fe71 100644 --- a/src/term.c +++ b/src/term.c @@ -627,7 +627,7 @@ encode_terminal_code (src, src_len, coding) int c = LGLYPH_CHAR (g); if (! char_charset (c, charset_list, NULL)) - break; + c = '?'; buf += CHAR_STRING (c, buf); nchars++; } @@ -636,17 +636,23 @@ encode_terminal_code (src, src_len, coding) { int c = COMPOSITION_GLYPH (cmp, i); - if (! char_charset (c, charset_list, NULL)) - break; + if (c == '\t') + continue; + if (char_charset (c, charset_list, NULL)) + { + if (CHAR_WIDTH (c) == 0 + && i > 0 && COMPOSITION_GLYPH (cmp, i - 1) == '\t') + /* Should be left-padded */ + { + buf += CHAR_STRING (' ', buf); + nchars++; + } + } + else + c = '?'; buf += CHAR_STRING (c, buf); nchars++; } - if (i == 0) - { - /* The first character of the composition is not encodable. */ - *buf++ = '?'; - nchars++; - } } /* We must skip glyphs to be padded for a wide character. */ else if (! CHAR_GLYPH_PADDING_P (*src)) @@ -1811,8 +1817,7 @@ produce_composite_glyph (it) { struct composition *cmp = composition_table[it->cmp_it.id]; - c = COMPOSITION_GLYPH (cmp, 0); - it->pixel_width = CHAR_WIDTH (it->c); + it->pixel_width = cmp->width; } else { |