From b8b4c05111a45cab71949b527a6060013e5fac66 Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Tue, 10 Jan 2017 21:59:47 +0000 Subject: 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. --- mdoc_validate.c | 50 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) (limited to 'mdoc_validate.c') 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 * Copyright (c) 2010-2017 Ingo Schwarze @@ -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 */ @@ -1030,6 +1031,41 @@ post_es(POST_ARGS) mdoc->last_es = mdoc->last; } +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) { -- cgit v1.2.3