aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_validate.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-01-10 21:59:47 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-01-10 21:59:47 +0000
commitb8b4c05111a45cab71949b527a6060013e5fac66 (patch)
tree8f6d68f2e548b7c715c5dbae5d85ca8e8a3ca0c4 /mdoc_validate.c
parente5e6b19e8e4776c4e2703f500ffc8eb70f2285d4 (diff)
downloadmandoc-b8b4c05111a45cab71949b527a6060013e5fac66.tar.gz
mandoc-b8b4c05111a45cab71949b527a6060013e5fac66.tar.zst
mandoc-b8b4c05111a45cab71949b527a6060013e5fac66.zip
For the .Ux/.Ox family of macros, do text production at the validation
stage rather than in each and every individual formatter, using the new NODE_NOSRC flag. More rigorous and also ten lines less code.
Diffstat (limited to 'mdoc_validate.c')
-rw-r--r--mdoc_validate.c50
1 files changed, 43 insertions, 7 deletions
diff --git a/mdoc_validate.c b/mdoc_validate.c
index f6d68b2d..e58f6030 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_validate.c,v 1.314 2017/01/10 13:47:00 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.315 2017/01/10 21:59:47 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -104,6 +104,7 @@ static void post_sm(POST_ARGS);
static void post_st(POST_ARGS);
static void post_std(POST_ARGS);
static void post_xr(POST_ARGS);
+static void post_xx(POST_ARGS);
static v_post mdoc_valids[MDOC_MAX] = {
NULL, /* Ap */
@@ -166,7 +167,7 @@ static v_post mdoc_valids[MDOC_MAX] = {
post_bf, /* Bf */
NULL, /* Bo */
NULL, /* Bq */
- NULL, /* Bsx */
+ post_xx, /* Bsx */
post_bx, /* Bx */
post_obsolete, /* Db */
NULL, /* Dc */
@@ -176,12 +177,12 @@ static v_post mdoc_valids[MDOC_MAX] = {
NULL, /* Ef */
NULL, /* Em */
NULL, /* Eo */
- NULL, /* Fx */
+ post_xx, /* Fx */
NULL, /* Ms */
NULL, /* No */
post_ns, /* Ns */
- NULL, /* Nx */
- NULL, /* Ox */
+ post_xx, /* Nx */
+ post_xx, /* Ox */
NULL, /* Pc */
NULL, /* Pf */
NULL, /* Po */
@@ -199,7 +200,7 @@ static v_post mdoc_valids[MDOC_MAX] = {
post_hyph, /* Sx */
NULL, /* Sy */
NULL, /* Tn */
- NULL, /* Ux */
+ post_xx, /* Ux */
NULL, /* Xc */
NULL, /* Xo */
post_fo, /* Fo */
@@ -222,7 +223,7 @@ static v_post mdoc_valids[MDOC_MAX] = {
NULL, /* %C */
post_es, /* Es */
post_en, /* En */
- NULL, /* Dx */
+ post_xx, /* Dx */
NULL, /* %Q */
post_par, /* br */
post_par, /* sp */
@@ -1031,6 +1032,41 @@ post_es(POST_ARGS)
}
static void
+post_xx(POST_ARGS)
+{
+ struct roff_node *n;
+ const char *os;
+
+ n = mdoc->last;
+ switch (n->tok) {
+ case MDOC_Bsx:
+ os = "BSD/OS";
+ break;
+ case MDOC_Dx:
+ os = "DragonFly";
+ break;
+ case MDOC_Fx:
+ os = "FreeBSD";
+ break;
+ case MDOC_Nx:
+ os = "NetBSD";
+ break;
+ case MDOC_Ox:
+ os = "OpenBSD";
+ break;
+ case MDOC_Ux:
+ os = "UNIX";
+ break;
+ default:
+ abort();
+ }
+ mdoc->next = ROFF_NEXT_CHILD;
+ roff_word_alloc(mdoc, n->line, n->pos, os);
+ mdoc->last->flags |= NODE_NOSRC;
+ mdoc->last = n;
+}
+
+static void
post_it(POST_ARGS)
{
struct roff_node *nbl, *nit, *nch;