From 2b61f99bf2ba76a47538698f550c82f40a531253 Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Mon, 13 Oct 2014 23:31:46 +0000 Subject: implement font modifiers in table layouts --- tbl.7 | 49 +++++++++++++++++++++++++------------------------ tbl_term.c | 22 +++++++++++++++++++--- 2 files changed, 44 insertions(+), 27 deletions(-) diff --git a/tbl.7 b/tbl.7 index d4c829bf..49ccecde 100644 --- a/tbl.7 +++ b/tbl.7 @@ -1,6 +1,7 @@ -.\" $Id: tbl.7,v 1.18 2013/09/16 22:39:19 schwarze Exp $ +.\" $Id: tbl.7,v 1.19 2014/10/13 23:31:46 schwarze Exp $ .\" .\" Copyright (c) 2010, 2011 Kristaps Dzonsons +.\" Copyright (c) 2014 Ingo Schwarze .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -14,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: September 16 2013 $ +.Dd $Mdocdate: October 13 2014 $ .Dt TBL 7 .Os .Sh NAME @@ -195,7 +196,7 @@ Each layout line corresponds to a line of data; the last layout line applies to all remaining data lines. Layout lines may also be separated by a comma. Each layout cell consists of one of the following case-insensitive keys: -.Bl -tag -width Ds +.Bl -tag -width 2n .It Cm c Centre a literal string within its column. .It Cm r @@ -244,35 +245,35 @@ Keys may be followed by a set of modifiers. A modifier is either a modifier key or a natural number for specifying the minimum width of a column. The following case-insensitive modifier keys are available: -.Cm z , -.Cm u , -.Cm e , -.Cm t , +.Bl -tag -width 2n +.It Cm b +Use a bold font for the contents of this column. +.It Cm f +The next character selects the font to use for this column. +See the +.Xr roff 7 +manual for supported one-character font names. +.It Cm i +Use an italic font for the contents of this column. +.El +.Pp +The modifiers .Cm d , -.Cm b , -.Cm i , +.Cm e , .Cm r , +.Cm t , +.Cm u , and -.Cm f -.Po -followed by -.Cm b , -.Cm i , -.Cm r , -.Cm 3 , -.Cm 2 , -or -.Cm 1 -.Pc . -All of these are ignored by +.Cm z +are ignored by .Xr mandoc 1 . .Pp For example, the following layout specifies a centre-justified column of minimum width 10, followed by vertical bar, followed by a left-justified -column of minimum width 10, another vertical bar, then a column -justified about the decimal point in numbers: +column of minimum width 10, another vertical bar, then a column using +bold font justified about the decimal point in numbers: .Pp -.Dl c10 | l10 | n +.Dl c10 | l10 | nfB .Ss Data The data section follows the last layout row. By default, cells in a data section are delimited by a tab. diff --git a/tbl_term.c b/tbl_term.c index e2b247b8..32fd1a78 100644 --- a/tbl_term.c +++ b/tbl_term.c @@ -1,4 +1,4 @@ -/* $Id: tbl_term.c,v 1.28 2014/08/10 23:54:41 schwarze Exp $ */ +/* $Id: tbl_term.c,v 1.29 2014/10/13 23:31:46 schwarze Exp $ */ /* * Copyright (c) 2009, 2011 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2014 Ingo Schwarze @@ -43,6 +43,7 @@ static void tbl_number(struct termp *, const struct tbl_opts *, const struct roffcol *); static void tbl_hrule(struct termp *, const struct tbl_span *); static void tbl_vrule(struct termp *, const struct tbl_head *); +static void tbl_word(struct termp *, const struct tbl_dat *); static size_t @@ -378,7 +379,7 @@ tbl_literal(struct termp *tp, const struct tbl_dat *dp, } tbl_char(tp, ASCII_NBRSP, padl); - term_word(tp, dp->string); + tbl_word(tp, dp); tbl_char(tp, ASCII_NBRSP, padr); } @@ -419,8 +420,23 @@ tbl_number(struct termp *tp, const struct tbl_opts *opts, padl = col->decimal - d; tbl_char(tp, ASCII_NBRSP, padl); - term_word(tp, dp->string); + tbl_word(tp, dp); if (col->width > sz + padl) tbl_char(tp, ASCII_NBRSP, col->width - sz - padl); } +static void +tbl_word(struct termp *tp, const struct tbl_dat *dp) +{ + const void *prev_font; + + prev_font = term_fontq(tp); + if (dp->layout->flags & TBL_CELL_BOLD) + term_fontpush(tp, TERMFONT_BOLD); + else if (dp->layout->flags & TBL_CELL_ITALIC) + term_fontpush(tp, TERMFONT_UNDER); + + term_word(tp, dp->string); + + term_fontpopq(tp, prev_font); +} -- cgit v1.2.3