summaryrefslogtreecommitdiffstats
path: root/sys/teken/teken_subr.h
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2013-12-20 21:31:50 +0000
committered <ed@FreeBSD.org>2013-12-20 21:31:50 +0000
commit4d1897863f30817d3e8beb6e3be1f1115402f8b5 (patch)
tree6b12de7f6b54baecfd56db911a6a2b9c8852b2d2 /sys/teken/teken_subr.h
parentae34685b8eb7435f5c01115fa64955dffffb03be (diff)
downloadFreeBSD-src-4d1897863f30817d3e8beb6e3be1f1115402f8b5.zip
FreeBSD-src-4d1897863f30817d3e8beb6e3be1f1115402f8b5.tar.gz
Extend libteken to support CJK fullwidth characters.
Introduce a new formatting bit (TF_CJK_RIGHT) that is set when putting a cell that is the right part of a CJK fullwidth character. This will allow drivers like vt(9) to support fullwidth characters properly. emaste@ has a patch to extend vt(9)'s font handling to increase the number of Unicode -> glyph maps from 2 ({normal,bold)} to 4 ({normal,bold} x {left,right}). This will need to use this formatting bit to determine whether to draw the left or right glyph. Reviewed by: emaste
Diffstat (limited to 'sys/teken/teken_subr.h')
-rw-r--r--sys/teken/teken_subr.h16
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/teken/teken_subr.h b/sys/teken/teken_subr.h
index f25ab6a..be3ce8a 100644
--- a/sys/teken/teken_subr.h
+++ b/sys/teken/teken_subr.h
@@ -791,21 +791,19 @@ teken_subr_do_putchar(teken_t *t, const teken_pos_t *tp, teken_char_t c,
teken_funcs_copy(t, &ctr, &ctp);
}
+ teken_funcs_putchar(t, tp, c, &t->t_curattr);
+
if (width == 2 && tp->tp_col + 1 < t->t_winsize.tp_col) {
teken_pos_t tp2;
+ teken_attr_t attr;
- /*
- * Store a space behind double width characters before
- * actually printing them. This prevents artifacts when
- * the consumer doesn't render it using double width
- * glyphs.
- */
+ /* Print second half of CJK fullwidth character. */
tp2.tp_row = tp->tp_row;
tp2.tp_col = tp->tp_col + 1;
- teken_funcs_putchar(t, &tp2, BLANK, &t->t_curattr);
+ attr = t->t_curattr;
+ attr.ta_format |= TF_CJK_RIGHT;
+ teken_funcs_putchar(t, &tp2, c, &attr);
}
-
- teken_funcs_putchar(t, tp, c, &t->t_curattr);
}
static void
OpenPOWER on IntegriCloud