diff options
-rw-r--r-- | regress/usr.bin/mandoc/roff/esc/f.in | 6 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/roff/esc/f.out_ascii | 6 | ||||
-rw-r--r-- | share/man/man7/roff.7 | 15 | ||||
-rw-r--r-- | usr.bin/mandoc/html.c | 45 | ||||
-rw-r--r-- | usr.bin/mandoc/html.h | 3 | ||||
-rw-r--r-- | usr.bin/mandoc/mandoc.c | 24 | ||||
-rw-r--r-- | usr.bin/mandoc/mandoc.h | 3 | ||||
-rw-r--r-- | usr.bin/mandoc/term.c | 52 | ||||
-rw-r--r-- | usr.bin/mandoc/term.h | 3 |
9 files changed, 96 insertions, 61 deletions
diff --git a/regress/usr.bin/mandoc/roff/esc/f.in b/regress/usr.bin/mandoc/roff/esc/f.in index c6de2c297a8..a909ac8aebf 100644 --- a/regress/usr.bin/mandoc/roff/esc/f.in +++ b/regress/usr.bin/mandoc/roff/esc/f.in @@ -1,4 +1,4 @@ -.Dd May 28, 2012 +.Dd August 7, 2013 .Dt ESC-F 1 .Os OpenBSD .Sh NAME @@ -7,6 +7,6 @@ .Sh DESCRIPTION numbers: \f3bold\f2italic\f1roman .br -letters: \fBbold\fIitalic\fPback\fRroman +letters: \fBbold\fIitalic\fPback\f(BIbolditalic\fRroman .br -multiletter: \f[B]bold\f[I]italic\f[P]back\f[R]roman +multiletter: \f[B]bold\f[I]italic\f[P]back\f[BI]bolditalic\f[R]roman diff --git a/regress/usr.bin/mandoc/roff/esc/f.out_ascii b/regress/usr.bin/mandoc/roff/esc/f.out_ascii index 594c3a17625..5fa18ef306a 100644 --- a/regress/usr.bin/mandoc/roff/esc/f.out_ascii +++ b/regress/usr.bin/mandoc/roff/esc/f.out_ascii @@ -5,7 +5,7 @@ NNAAMMEE DDEESSCCRRIIPPTTIIOONN numbers: bboolldd_i_t_a_l_i_croman - letters: bboolldd_i_t_a_l_i_cbbaacckkroman - multiletter: bboolldd_i_t_a_l_i_cbbaacckkroman + letters: bboolldd_i_t_a_l_i_cbbaacckk_bb_oo_ll_dd_ii_tt_aa_ll_ii_ccroman + multiletter: bboolldd_i_t_a_l_i_cbbaacckk_bb_oo_ll_dd_ii_tt_aa_ll_ii_ccroman -OpenBSD May 28, 2012 OpenBSD +OpenBSD August 7, 2013 OpenBSD diff --git a/share/man/man7/roff.7 b/share/man/man7/roff.7 index 2351ff62e2c..13b6304563f 100644 --- a/share/man/man7/roff.7 +++ b/share/man/man7/roff.7 @@ -1,4 +1,4 @@ -.\" $OpenBSD: roff.7,v 1.21 2013/07/13 19:44:14 schwarze Exp $ +.\" $OpenBSD: roff.7,v 1.22 2013/08/08 20:07:24 schwarze Exp $ .\" .\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> .\" Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org> @@ -15,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: July 13 2013 $ +.Dd $Mdocdate: August 8 2013 $ .Dt ROFF 7 .Os .Sh NAME @@ -144,12 +144,19 @@ escape followed by an indicator: B (bold), I (italic), R (regular), or P A numerical representation 3, 2, or 1 (bold, italic, and regular, respectively) may be used instead. .Pp +The two-character indicator +.Sq BI +requests a font that is both bold and italic. +It may not be portable to old roff implementations. +.Pp Examples: .Bl -tag -width Ds -offset indent -compact .It Li \efBbold\efR -Write in bold, then switch to regular font mode. +Write in \fBbold\fP, then switch to regular font mode. .It Li \efIitalic\efP -Write in italic, then return to previous font mode. +Write in \fIitalic\fP, then return to previous font mode. +.It Li \ef(BIbold italic\efP +Write in \f(BIbold italic\fP, then return to previous font mode. .El .Pp Text decoration is diff --git a/usr.bin/mandoc/html.c b/usr.bin/mandoc/html.c index 41e9814955f..f35df3032d1 100644 --- a/usr.bin/mandoc/html.c +++ b/usr.bin/mandoc/html.c @@ -1,7 +1,7 @@ -/* $Id: html.c,v 1.30 2012/05/28 13:00:51 schwarze Exp $ */ +/* $Id: html.c,v 1.31 2013/08/08 20:07:24 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -231,6 +231,9 @@ print_metaf(struct html *h, enum mandoc_esc deco) case (ESCAPE_FONTBOLD): font = HTMLFONT_BOLD; break; + case (ESCAPE_FONTBI): + font = HTMLFONT_BI; + break; case (ESCAPE_FONT): /* FALLTHROUGH */ case (ESCAPE_FONTROMAN): @@ -249,10 +252,20 @@ print_metaf(struct html *h, enum mandoc_esc deco) h->metal = h->metac; h->metac = font; - if (HTMLFONT_NONE != font) - h->metaf = HTMLFONT_BOLD == font ? - print_otag(h, TAG_B, 0, NULL) : - print_otag(h, TAG_I, 0, NULL); + switch (font) { + case (HTMLFONT_ITALIC): + h->metaf = print_otag(h, TAG_I, 0, NULL); + break; + case (HTMLFONT_BOLD): + h->metaf = print_otag(h, TAG_B, 0, NULL); + break; + case (HTMLFONT_BI): + h->metaf = print_otag(h, TAG_B, 0, NULL); + print_otag(h, TAG_I, 0, NULL); + break; + default: + break; + } } int @@ -363,6 +376,8 @@ print_encode(struct html *h, const char *p, int norecurse) /* FALLTHROUGH */ case (ESCAPE_FONTITALIC): /* FALLTHROUGH */ + case (ESCAPE_FONTBI): + /* FALLTHROUGH */ case (ESCAPE_FONTROMAN): if (0 == norecurse) print_metaf(h, esc); @@ -540,10 +555,20 @@ print_text(struct html *h, const char *word) } assert(NULL == h->metaf); - if (HTMLFONT_NONE != h->metac) - h->metaf = HTMLFONT_BOLD == h->metac ? - print_otag(h, TAG_B, 0, NULL) : - print_otag(h, TAG_I, 0, NULL); + switch (h->metac) { + case (HTMLFONT_ITALIC): + h->metaf = print_otag(h, TAG_I, 0, NULL); + break; + case (HTMLFONT_BOLD): + h->metaf = print_otag(h, TAG_B, 0, NULL); + break; + case (HTMLFONT_BI): + h->metaf = print_otag(h, TAG_B, 0, NULL); + print_otag(h, TAG_I, 0, NULL); + break; + default: + break; + } assert(word); if ( ! print_encode(h, word, 0)) { diff --git a/usr.bin/mandoc/html.h b/usr.bin/mandoc/html.h index d3a4307c4c7..b796a384fdf 100644 --- a/usr.bin/mandoc/html.h +++ b/usr.bin/mandoc/html.h @@ -1,4 +1,4 @@ -/* $Id: html.h,v 1.19 2012/05/28 13:00:51 schwarze Exp $ */ +/* $Id: html.h,v 1.20 2013/08/08 20:07:24 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * @@ -75,6 +75,7 @@ enum htmlfont { HTMLFONT_NONE = 0, HTMLFONT_BOLD, HTMLFONT_ITALIC, + HTMLFONT_BI, HTMLFONT_MAX }; diff --git a/usr.bin/mandoc/mandoc.c b/usr.bin/mandoc/mandoc.c index e4903aa7b18..829561afbe2 100644 --- a/usr.bin/mandoc/mandoc.c +++ b/usr.bin/mandoc/mandoc.c @@ -1,7 +1,7 @@ -/* $Id: mandoc.c,v 1.36 2013/06/20 22:29:38 schwarze Exp $ */ +/* $Id: mandoc.c,v 1.37 2013/08/08 20:07:24 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -292,13 +292,19 @@ mandoc_escape(const char **end, const char **start, int *sz) switch (gly) { case (ESCAPE_FONT): - /* - * Pretend that the constant-width font modes are the - * same as the regular font modes. - */ - if (2 == *sz && 'C' == **start) { - (*start)++; - (*sz)--; + if (2 == *sz) { + if ('C' == **start) { + /* + * Treat constant-width font modes + * just like regular font modes. + */ + (*start)++; + (*sz)--; + } else { + if ('B' == (*start)[0] && 'I' == (*start)[1]) + gly = ESCAPE_FONTBI; + break; + } } else if (1 != *sz) break; diff --git a/usr.bin/mandoc/mandoc.h b/usr.bin/mandoc/mandoc.h index f1e8ef80c0e..0e2187d6f24 100644 --- a/usr.bin/mandoc/mandoc.h +++ b/usr.bin/mandoc/mandoc.h @@ -1,4 +1,4 @@ -/* $Id: mandoc.h,v 1.52 2013/07/13 12:51:37 schwarze Exp $ */ +/* $Id: mandoc.h,v 1.53 2013/08/08 20:07:24 schwarze Exp $ */ /* * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2012, 2013 Ingo Schwarze <schwarze@openbsd.org> @@ -380,6 +380,7 @@ enum mandoc_esc { ESCAPE_FONT, /* a generic font mode */ ESCAPE_FONTBOLD, /* bold font mode */ ESCAPE_FONTITALIC, /* italic font mode */ + ESCAPE_FONTBI, /* bold italic font mode */ ESCAPE_FONTROMAN, /* roman font mode */ ESCAPE_FONTPREV, /* previous font mode */ ESCAPE_NUMBERED, /* a numbered glyph */ diff --git a/usr.bin/mandoc/term.c b/usr.bin/mandoc/term.c index 369a3583f73..34fbf7de543 100644 --- a/usr.bin/mandoc/term.c +++ b/usr.bin/mandoc/term.c @@ -1,7 +1,7 @@ -/* $Id: term.c,v 1.69 2013/08/05 23:35:02 schwarze Exp $ */ +/* $Id: term.c,v 1.70 2013/08/08 20:07:24 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2010, 2011, 2012 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2010, 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -476,6 +476,9 @@ term_word(struct termp *p, const char *word) case (ESCAPE_FONTITALIC): term_fontrepl(p, TERMFONT_UNDER); break; + case (ESCAPE_FONTBI): + term_fontrepl(p, TERMFONT_BI); + break; case (ESCAPE_FONT): /* FALLTHROUGH */ case (ESCAPE_FONTROMAN): @@ -537,27 +540,28 @@ encode1(struct termp *p, int c) return; } - if (p->col + 4 >= p->maxcols) - adjbuf(p, p->col + 4); + if (p->col + 6 >= p->maxcols) + adjbuf(p, p->col + 6); f = term_fonttop(p); - if (TERMFONT_NONE == f) { - p->buf[p->col++] = c; - return; - } else if (TERMFONT_UNDER == f) { + if (TERMFONT_UNDER == f || TERMFONT_BI == f) { p->buf[p->col++] = '_'; - } else - p->buf[p->col++] = c; - - p->buf[p->col++] = 8; + p->buf[p->col++] = 8; + } + if (TERMFONT_BOLD == f || TERMFONT_BI == f) { + if (ASCII_HYPH == c) + p->buf[p->col++] = '-'; + else + p->buf[p->col++] = c; + p->buf[p->col++] = 8; + } p->buf[p->col++] = c; } static void encode(struct termp *p, const char *word, size_t sz) { - enum termfont f; int i, len; if (TERMP_SKIPCHAR & p->flags) { @@ -574,7 +578,7 @@ encode(struct termp *p, const char *word, size_t sz) * character by character. */ - if (TERMFONT_NONE == (f = term_fonttop(p))) { + if (TERMFONT_NONE == term_fonttop(p)) { if (p->col + len >= p->maxcols) adjbuf(p, p->col + len); for (i = 0; i < len; i++) @@ -584,25 +588,15 @@ encode(struct termp *p, const char *word, size_t sz) /* Pre-buffer, assuming worst-case. */ - if (p->col + 1 + (len * 3) >= p->maxcols) - adjbuf(p, p->col + 1 + (len * 3)); + if (p->col + 1 + (len * 5) >= p->maxcols) + adjbuf(p, p->col + 1 + (len * 5)); for (i = 0; i < len; i++) { - if (ASCII_HYPH != word[i] && - ! isgraph((unsigned char)word[i])) { - p->buf[p->col++] = word[i]; - continue; - } - - if (TERMFONT_UNDER == f) - p->buf[p->col++] = '_'; - else if (ASCII_HYPH == word[i]) - p->buf[p->col++] = '-'; + if (ASCII_HYPH == word[i] || + isgraph((unsigned char)word[i])) + encode1(p, word[i]); else p->buf[p->col++] = word[i]; - - p->buf[p->col++] = 8; - p->buf[p->col++] = word[i]; } } diff --git a/usr.bin/mandoc/term.h b/usr.bin/mandoc/term.h index 7317725e56f..7670c2a7147 100644 --- a/usr.bin/mandoc/term.h +++ b/usr.bin/mandoc/term.h @@ -1,4 +1,4 @@ -/* $Id: term.h,v 1.36 2012/05/28 13:00:51 schwarze Exp $ */ +/* $Id: term.h,v 1.37 2013/08/08 20:07:24 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * @@ -37,6 +37,7 @@ enum termfont { TERMFONT_NONE = 0, TERMFONT_BOLD, TERMFONT_UNDER, + TERMFONT_BI, TERMFONT__MAX }; |