summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--regress/usr.bin/mandoc/roff/esc/f.in6
-rw-r--r--regress/usr.bin/mandoc/roff/esc/f.out_ascii6
-rw-r--r--share/man/man7/roff.715
-rw-r--r--usr.bin/mandoc/html.c45
-rw-r--r--usr.bin/mandoc/html.h3
-rw-r--r--usr.bin/mandoc/mandoc.c24
-rw-r--r--usr.bin/mandoc/mandoc.h3
-rw-r--r--usr.bin/mandoc/term.c52
-rw-r--r--usr.bin/mandoc/term.h3
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
};