-/* $Id: mdoc_man.c,v 1.6 2011/10/08 11:37:27 kristaps Exp $ */
+/* $Id: mdoc_man.c,v 1.9 2011/10/24 21:47:59 schwarze Exp $ */
/*
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
*
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <string.h>
static int pre_ap(DECL_ARGS);
static int pre_bd(DECL_ARGS);
static int pre_br(DECL_ARGS);
+static int pre_bx(DECL_ARGS);
static int pre_dl(DECL_ARGS);
static int pre_enc(DECL_ARGS);
static int pre_it(DECL_ARGS);
static int pre_pp(DECL_ARGS);
static int pre_sp(DECL_ARGS);
static int pre_sect(DECL_ARGS);
+static int pre_ux(DECL_ARGS);
static int pre_xr(DECL_ARGS);
static void print_word(struct mman *, const char *);
static void print_node(DECL_ARGS);
{ NULL, pre_ap, NULL, NULL, NULL }, /* Ap */
{ NULL, NULL, NULL, NULL, NULL }, /* Dd */
{ NULL, NULL, NULL, NULL, NULL }, /* Dt */
- { NULL, NULL, NULL, NULL, NULL }, /* _Os */
+ { NULL, NULL, NULL, NULL, NULL }, /* Os */
{ NULL, pre_sect, post_sect, ".SH", NULL }, /* Sh */
{ NULL, pre_sect, post_sect, ".SS", NULL }, /* Ss */
{ NULL, pre_pp, NULL, NULL, NULL }, /* Pp */
{ NULL, NULL, NULL, NULL, NULL }, /* Bl */
{ NULL, NULL, NULL, NULL, NULL }, /* El */
{ NULL, pre_it, NULL, NULL, NULL }, /* _It */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ad */
+ { NULL, pre_enc, post_enc, "\\fI", "\\fP" }, /* Ad */
{ NULL, NULL, NULL, NULL, NULL }, /* _An */
{ NULL, pre_enc, post_enc, "\\fI", "\\fP" }, /* Ar */
- { NULL, NULL, NULL, NULL, NULL }, /* _Cd */
+ { NULL, pre_enc, post_enc, "\\fB", "\\fP" }, /* Cd */
{ NULL, pre_enc, post_enc, "\\fB", "\\fP" }, /* Cm */
- { NULL, NULL, NULL, NULL, NULL }, /* _Dv */
- { NULL, NULL, NULL, NULL, NULL }, /* _Er */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ev */
+ { NULL, pre_enc, post_enc, "\\fR", "\\fP" }, /* Dv */
+ { NULL, pre_enc, post_enc, "\\fR", "\\fP" }, /* Er */
+ { NULL, pre_enc, post_enc, "\\fR", "\\fP" }, /* Ev */
{ NULL, pre_enc, post_enc, "The \\fB",
"\\fP\nutility exits 0 on success, and >0 if an error occurs."
}, /* Ex */
{ NULL, NULL, NULL, NULL, NULL }, /* _Ft */
{ NULL, pre_enc, post_enc, "\\fB", "\\fP" }, /* Ic */
{ NULL, NULL, NULL, NULL, NULL }, /* _In */
- { NULL, NULL, NULL, NULL, NULL }, /* _Li */
+ { NULL, pre_enc, post_enc, "\\fR", "\\fP" }, /* Li */
{ cond_head, pre_enc, NULL, "\\- ", NULL }, /* Nd */
{ NULL, pre_nm, post_nm, NULL, NULL }, /* Nm */
{ cond_body, pre_enc, post_enc, "[", "]" }, /* Op */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ot */
- { NULL, pre_enc, post_enc, "\\fI", "\\fP" }, /* _Pa */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ot */
+ { NULL, pre_enc, post_enc, "\\fI", "\\fP" }, /* Pa */
{ NULL, pre_enc, post_enc, "The \\fB",
"\\fP\nfunction returns the value 0 if successful;\n"
"otherwise the value -1 is returned and the global\n"
"variable \\fIerrno\\fP is set to indicate the error."
}, /* Rv */
- { NULL, NULL, NULL, NULL, NULL }, /* _St */
+ { NULL, NULL, NULL, NULL, NULL }, /* St */
{ NULL, NULL, NULL, NULL, NULL }, /* _Va */
{ NULL, NULL, NULL, NULL, NULL }, /* _Vt */
- { NULL, pre_xr, NULL, NULL, NULL }, /* _Xr */
+ { NULL, pre_xr, NULL, NULL, NULL }, /* Xr */
{ NULL, NULL, post_percent, NULL, NULL }, /* _%A */
{ NULL, NULL, NULL, NULL, NULL }, /* _%B */
{ NULL, NULL, post_percent, NULL, NULL }, /* _%D */
{ NULL, NULL, NULL, NULL, NULL }, /* _%R */
{ NULL, pre_enc, post_percent, "\"", "\"" }, /* %T */
{ NULL, NULL, NULL, NULL, NULL }, /* _%V */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ac */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ao */
+ { NULL, NULL, NULL, NULL, NULL }, /* Ac */
+ { cond_body, pre_enc, post_enc, "<", ">" }, /* Ao */
{ cond_body, pre_enc, post_enc, "<", ">" }, /* Aq */
- { NULL, NULL, NULL, NULL, NULL }, /* _At */
+ { NULL, NULL, NULL, NULL, NULL }, /* At */
{ NULL, NULL, NULL, NULL, NULL }, /* Bc */
{ NULL, NULL, NULL, NULL, NULL }, /* _Bf */
{ cond_body, pre_enc, post_enc, "[", "]" }, /* Bo */
{ cond_body, pre_enc, post_enc, "[", "]" }, /* Bq */
- { NULL, NULL, NULL, NULL, NULL }, /* _Bsx */
- { NULL, NULL, NULL, NULL, NULL }, /* _Bx */
- { NULL, NULL, NULL, NULL, NULL }, /* _Db */
- { NULL, NULL, NULL, NULL, NULL }, /* _Dc */
- { NULL, NULL, NULL, NULL, NULL }, /* _Do */
+ { NULL, pre_ux, NULL, "BSD/OS", NULL }, /* Bsx */
+ { NULL, pre_bx, NULL, NULL, NULL }, /* Bx */
+ { NULL, NULL, NULL, NULL, NULL }, /* Db */
+ { NULL, NULL, NULL, NULL, NULL }, /* Dc */
+ { cond_body, pre_enc, post_enc, "``", "''" }, /* Do */
{ cond_body, pre_enc, post_enc, "``", "''" }, /* Dq */
{ NULL, NULL, NULL, NULL, NULL }, /* _Ec */
{ NULL, NULL, NULL, NULL, NULL }, /* _Ef */
{ NULL, pre_enc, post_enc, "\\fI", "\\fP" }, /* Em */
{ NULL, NULL, NULL, NULL, NULL }, /* _Eo */
- { NULL, NULL, NULL, NULL, NULL }, /* _Fx */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ms */
- { NULL, NULL, NULL, NULL, NULL }, /* _No */
+ { NULL, pre_ux, NULL, "FreeBSD", NULL }, /* Fx */
+ { NULL, pre_enc, post_enc, "\\fB", "\\fP" }, /* Ms */
+ { NULL, NULL, NULL, NULL, NULL }, /* No */
{ NULL, pre_ns, NULL, NULL, NULL }, /* Ns */
- { NULL, NULL, NULL, NULL, NULL }, /* _Nx */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ox */
+ { NULL, pre_ux, NULL, "NetBSD", NULL }, /* Nx */
+ { NULL, pre_ux, NULL, "OpenBSD", NULL }, /* Ox */
{ NULL, NULL, NULL, NULL, NULL }, /* Pc */
{ NULL, NULL, post_pf, NULL, NULL }, /* Pf */
{ cond_body, pre_enc, post_enc, "(", ")" }, /* Po */
{ cond_body, pre_enc, post_enc, "(", ")" }, /* Pq */
- { NULL, NULL, NULL, NULL, NULL }, /* _Qc */
+ { NULL, NULL, NULL, NULL, NULL }, /* Qc */
{ cond_body, pre_enc, post_enc, "`", "'" }, /* Ql */
- { NULL, NULL, NULL, NULL, NULL }, /* _Qo */
- { NULL, NULL, NULL, NULL, NULL }, /* _Qq */
- { NULL, NULL, NULL, NULL, NULL }, /* _Re */
+ { cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qo */
+ { cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qq */
+ { NULL, NULL, NULL, NULL, NULL }, /* Re */
{ cond_body, pre_pp, NULL, NULL, NULL }, /* Rs */
- { NULL, NULL, NULL, NULL, NULL }, /* _Sc */
- { NULL, NULL, NULL, NULL, NULL }, /* _So */
+ { NULL, NULL, NULL, NULL, NULL }, /* Sc */
+ { cond_body, pre_enc, post_enc, "`", "'" }, /* So */
{ cond_body, pre_enc, post_enc, "`", "'" }, /* Sq */
{ NULL, NULL, NULL, NULL, NULL }, /* _Sm */
{ NULL, pre_enc, post_enc, "\\fI", "\\fP" }, /* Sx */
{ NULL, pre_enc, post_enc, "\\fB", "\\fP" }, /* Sy */
- { NULL, NULL, NULL, NULL, NULL }, /* _Tn */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ux */
+ { NULL, pre_enc, post_enc, "\\fR", "\\fP" }, /* Tn */
+ { NULL, pre_ux, NULL, "UNIX", NULL }, /* Ux */
{ NULL, NULL, NULL, NULL, NULL }, /* _Xc */
{ NULL, NULL, NULL, NULL, NULL }, /* _Xo */
{ NULL, NULL, NULL, NULL, NULL }, /* _Fo */
{ NULL, NULL, NULL, NULL, NULL }, /* _Fc */
{ cond_body, pre_enc, post_enc, "[", "]" }, /* Oo */
- { NULL, NULL, NULL, NULL, NULL }, /* _Oc */
+ { NULL, NULL, NULL, NULL, NULL }, /* Oc */
{ NULL, NULL, NULL, NULL, NULL }, /* _Bk */
{ NULL, NULL, NULL, NULL, NULL }, /* _Ek */
- { NULL, NULL, NULL, NULL, NULL }, /* _Bt */
- { NULL, NULL, NULL, NULL, NULL }, /* _Hf */
- { NULL, NULL, NULL, NULL, NULL }, /* _Fr */
- { NULL, NULL, NULL, NULL, NULL }, /* _Ud */
+ { NULL, pre_ux, NULL, "is currently in beta test.", NULL }, /* Bt */
+ { NULL, NULL, NULL, NULL, NULL }, /* Hf */
+ { NULL, NULL, NULL, NULL, NULL }, /* Fr */
+ { NULL, pre_ux, NULL, "currently under development.", NULL }, /* Ud */
{ NULL, NULL, NULL, NULL, NULL }, /* _Lb */
{ NULL, pre_pp, NULL, NULL, NULL }, /* Lp */
{ NULL, NULL, NULL, NULL, NULL }, /* _Lk */
{ NULL, NULL, NULL, NULL, NULL }, /* _Mt */
- { NULL, NULL, NULL, NULL, NULL }, /* _Brq */
- { NULL, NULL, NULL, NULL, NULL }, /* _Bro */
- { NULL, NULL, NULL, NULL, NULL }, /* _Brc */
+ { cond_body, pre_enc, post_enc, "{", "}" }, /* Brq */
+ { cond_body, pre_enc, post_enc, "{", "}" }, /* Bro */
+ { NULL, NULL, NULL, NULL, NULL }, /* Brc */
{ NULL, NULL, NULL, NULL, NULL }, /* _%C */
{ NULL, NULL, NULL, NULL, NULL }, /* _Es */
{ NULL, NULL, NULL, NULL, NULL }, /* _En */
- { NULL, NULL, NULL, NULL, NULL }, /* _Dx */
+ { NULL, pre_ux, NULL, "DragonFly", NULL }, /* Dx */
{ NULL, NULL, NULL, NULL, NULL }, /* _%Q */
{ NULL, pre_br, NULL, NULL, NULL }, /* br */
{ NULL, pre_sp, post_sp, NULL, NULL }, /* sp */
return(0);
}
+static int
+pre_bx(DECL_ARGS)
+{
+
+ n = n->child;
+ if (n) {
+ print_word(mm, n->string);
+ mm->need_space = 0;
+ n = n->next;
+ }
+ print_word(mm, "BSD");
+ if (NULL == n)
+ return(0);
+ mm->need_space = 0;
+ print_word(mm, "-");
+ mm->need_space = 0;
+ print_word(mm, n->string);
+ return(0);
+}
+
static int
pre_dl(DECL_ARGS)
{
print_word(mm, ")");
return(0);
}
+
+static int
+pre_ux(DECL_ARGS)
+{
+
+ print_word(mm, manacts[n->tok].prefix);
+ if (NULL == n->child)
+ return(0);
+ mm->need_space = 0;
+ print_word(mm, "\\~");
+ mm->need_space = 0;
+ return(1);
+}