summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-11-05 08:40:16 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-11-05 08:40:16 +0000
commitd80276536610615caffcc3d1d5ffc405bfc5cc26 (patch)
treebb51d17964d6cda2548ff51c7f0cf7ae818099a0
parentcb156f15852e81dc6e6cda189a91729f275f6c46 (diff)
downloadmandoc-d80276536610615caffcc3d1d5ffc405bfc5cc26.tar.gz
mandoc-d80276536610615caffcc3d1d5ffc405bfc5cc26.tar.zst
mandoc-d80276536610615caffcc3d1d5ffc405bfc5cc26.zip
Correct support for `\fX' font modes in -Tascii.
-rw-r--r--man.79
-rw-r--r--mdoc.712
-rw-r--r--term.c30
-rw-r--r--term.h6
4 files changed, 39 insertions, 18 deletions
diff --git a/man.7 b/man.7
index 4e86ad63..a7387f9c 100644
--- a/man.7
+++ b/man.7
@@ -1,4 +1,4 @@
-.\" $Id: man.7,v 1.46 2009/11/02 17:07:30 kristaps Exp $
+.\" $Id: man.7,v 1.47 2009/11/05 08:40:16 kristaps Exp $
.\"
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
.\"
@@ -14,7 +14,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: November 2 2009 $
+.Dd $Mdocdate: November 5 2009 $
.Dt MAN 7
.Os
.
@@ -109,8 +109,9 @@ and
.Ss Text Decoration
Terms may be text-decorated using the
.Sq \ef
-escape followed by an indicator: B (bold), I, (italic), or P and R
-(Roman, or reset).
+escape followed by an indicator: B (bold), I, (italic), R (Roman), or P
+(revert to previous mode). A numerical representation 3, 2, or 1
+(bold, italic, and Roman, respectively) may be used instead.
.
.
.Ss Whitespace
diff --git a/mdoc.7 b/mdoc.7
index c7e6f924..46e550d7 100644
--- a/mdoc.7
+++ b/mdoc.7
@@ -1,4 +1,4 @@
-.\" $Id: mdoc.7,v 1.73 2009/11/02 11:39:40 kristaps Exp $
+.\" $Id: mdoc.7,v 1.74 2009/11/05 08:40:16 kristaps Exp $
.\"
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
.\"
@@ -14,7 +14,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: November 2 2009 $
+.Dd $Mdocdate: November 5 2009 $
.Dt MDOC 7
.Os
.
@@ -131,10 +131,12 @@ and
.Ss Text Decoration
Terms may be text-decorated using the
.Sq \ef
-escape followed by an indicator: B (bold), I, (italic), or P and R
-(Roman, or reset). This form is not recommended for
+escape followed by an indicator: B (bold), I, (italic), R (Roman), or P
+(revert to previous mode). A numerical representation 3, 2, or 1
+(bold, italic, and Roman, respectively) may be used instead. This form
+is not recommended for
.Nm ,
-which encourages semantic, not presentation, annotation.
+which encourages semantic annotation.
.
.
.Ss Predefined Strings
diff --git a/term.c b/term.c
index 7afa1019..d7d7b5d3 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.121 2009/11/05 07:21:02 kristaps Exp $ */
+/* $Id: term.c,v 1.122 2009/11/05 08:40:16 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -15,6 +15,7 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <assert.h>
+#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -373,7 +374,7 @@ do_reserved(struct termp *p, const char *word, size_t len)
static void
do_escaped(struct termp *p, const char **word)
{
- int j, type;
+ int j, type, sv;
const char *wp;
wp = *word;
@@ -428,16 +429,29 @@ do_escaped(struct termp *p, const char **word)
}
switch (*wp) {
+ case ('3'):
+ /* FALLTHROUGH */
case ('B'):
- p->bold++;
+ p->metamask = p->metafont;
+ p->metafont |= METAF_BOLD;
break;
+ case ('2'):
+ /* FALLTHROUGH */
case ('I'):
- p->under++;
+ p->metamask = p->metafont;
+ p->metafont |= METAF_UNDER;
break;
case ('P'):
+ sv = p->metamask;
+ p->metamask = p->metafont;
+ p->metafont = sv;
+ break;
+ case ('1'):
/* FALLTHROUGH */
case ('R'):
- p->bold = p->under = 0;
+ p->metamask = p->metafont;
+ p->metafont &= ~METAF_UNDER;
+ p->metafont &= ~METAF_BOLD;
break;
default:
break;
@@ -563,12 +577,12 @@ static void
encode(struct termp *p, char c)
{
- if (' ' != c) {
- if (p->under) {
+ if (isgraph((u_char)c)) {
+ if (p->under || METAF_UNDER & p->metafont) {
buffer(p, '_');
buffer(p, 8);
}
- if (p->bold) {
+ if (p->bold || METAF_BOLD & p->metafont) {
buffer(p, c);
buffer(p, 8);
}
diff --git a/term.h b/term.h
index f0d82016..46c8b509 100644
--- a/term.h
+++ b/term.h
@@ -1,4 +1,4 @@
-/* $Id: term.h,v 1.49 2009/10/18 19:03:37 kristaps Exp $ */
+/* $Id: term.h,v 1.50 2009/11/05 08:40:16 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -43,6 +43,10 @@ struct termp {
#define TERMP_ANPREC (1 << 13) /* See termp_an_pre(). */
int bold;
int under;
+ int metafont; /* See do_escaped(). */
+#define METAF_BOLD (1 << 0)
+#define METAF_UNDER (1 << 1)
+ int metamask; /* See do_escaped(). */
char *buf; /* Output buffer. */
enum termenc enc; /* Type of encoding. */
void *symtab; /* Encoded-symbol table. */