diff options
Diffstat (limited to 'usr.bin/mandoc')
-rw-r--r-- | usr.bin/mandoc/mdoc.c | 4 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc.h | 6 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_action.c | 4 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_argv.c | 4 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_macro.c | 4 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_term.c | 37 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_validate.c | 46 |
7 files changed, 91 insertions, 14 deletions
diff --git a/usr.bin/mandoc/mdoc.c b/usr.bin/mandoc/mdoc.c index a777f1c9e82..10b67297697 100644 --- a/usr.bin/mandoc/mdoc.c +++ b/usr.bin/mandoc/mdoc.c @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.19 2009/07/26 00:11:15 schwarze Exp $ */ +/* $Id: mdoc.c,v 1.20 2009/07/26 01:59:46 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -117,7 +117,7 @@ const char *const __mdoc_macronames[MDOC_MAX] = { /* LINTED */ "Brc", "\%C", "Es", "En", /* LINTED */ - "Dx", "\%Q" + "Dx", "\%Q", "br", "sp" }; const char *const __mdoc_argnames[MDOC_ARG_MAX] = { diff --git a/usr.bin/mandoc/mdoc.h b/usr.bin/mandoc/mdoc.h index 65287ac056c..ca599499f4b 100644 --- a/usr.bin/mandoc/mdoc.h +++ b/usr.bin/mandoc/mdoc.h @@ -1,4 +1,4 @@ -/* $Id: mdoc.h,v 1.10 2009/07/18 19:44:38 schwarze Exp $ */ +/* $Id: mdoc.h,v 1.11 2009/07/26 01:59:46 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -147,7 +147,9 @@ #define MDOC_En 115 #define MDOC_Dx 116 #define MDOC__Q 117 -#define MDOC_MAX 118 +#define MDOC_br 118 +#define MDOC_sp 119 +#define MDOC_MAX 120 /* What follows is a list of ALL possible macro arguments. */ diff --git a/usr.bin/mandoc/mdoc_action.c b/usr.bin/mandoc/mdoc_action.c index 08c392e69fc..8ea01b3300e 100644 --- a/usr.bin/mandoc/mdoc_action.c +++ b/usr.bin/mandoc/mdoc_action.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_action.c,v 1.15 2009/07/18 19:44:38 schwarze Exp $ */ +/* $Id: mdoc_action.c,v 1.16 2009/07/26 01:59:46 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -172,6 +172,8 @@ const struct actions mdoc_actions[MDOC_MAX] = { { NULL, NULL }, /* En */ { NULL, NULL }, /* Dx */ { NULL, NULL }, /* %Q */ + { NULL, NULL }, /* br */ + { NULL, NULL }, /* sp */ }; static int concat(struct mdoc *, const struct mdoc_node *, diff --git a/usr.bin/mandoc/mdoc_argv.c b/usr.bin/mandoc/mdoc_argv.c index 6bfec918cea..352460b5ede 100644 --- a/usr.bin/mandoc/mdoc_argv.c +++ b/usr.bin/mandoc/mdoc_argv.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_argv.c,v 1.9 2009/07/12 23:26:08 schwarze Exp $ */ +/* $Id: mdoc_argv.c,v 1.10 2009/07/26 01:59:46 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -208,6 +208,8 @@ static int mdoc_argflags[MDOC_MAX] = { 0, /* En */ 0, /* Dx */ ARGS_QUOTED, /* %Q */ + 0, /* br */ + 0, /* sp */ }; diff --git a/usr.bin/mandoc/mdoc_macro.c b/usr.bin/mandoc/mdoc_macro.c index 09b446e168e..efd1e0869ba 100644 --- a/usr.bin/mandoc/mdoc_macro.c +++ b/usr.bin/mandoc/mdoc_macro.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_macro.c,v 1.12 2009/07/18 15:34:27 schwarze Exp $ */ +/* $Id: mdoc_macro.c,v 1.13 2009/07/26 01:59:46 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -172,6 +172,8 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { obsolete, 0 }, /* En */ { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Dx */ { in_line_eoln, 0 }, /* %Q */ + { in_line_eoln, 0 }, /* br */ + { in_line_eoln, 0 }, /* sp */ }; const struct mdoc_macro * const mdoc_macros = __mdoc_macros; diff --git a/usr.bin/mandoc/mdoc_term.c b/usr.bin/mandoc/mdoc_term.c index 09bfda14ff9..ad8925d3d2f 100644 --- a/usr.bin/mandoc/mdoc_term.c +++ b/usr.bin/mandoc/mdoc_term.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.37 2009/07/26 00:49:19 schwarze Exp $ */ +/* $Id: mdoc_term.c,v 1.38 2009/07/26 01:59:46 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -130,6 +130,7 @@ static int termp_ar_pre(DECL_ARGS); static int termp_bd_pre(DECL_ARGS); static int termp_bf_pre(DECL_ARGS); static int termp_bq_pre(DECL_ARGS); +static int termp_br_pre(DECL_ARGS); static int termp_brq_pre(DECL_ARGS); static int termp_bt_pre(DECL_ARGS); static int termp_cd_pre(DECL_ARGS); @@ -163,6 +164,7 @@ static int termp_rs_pre(DECL_ARGS); static int termp_rv_pre(DECL_ARGS); static int termp_sh_pre(DECL_ARGS); static int termp_sm_pre(DECL_ARGS); +static int termp_sp_pre(DECL_ARGS); static int termp_sq_pre(DECL_ARGS); static int termp_ss_pre(DECL_ARGS); static int termp_sx_pre(DECL_ARGS); @@ -292,6 +294,8 @@ static const struct termact termacts[MDOC_MAX] = { { NULL, NULL }, /* En */ { termp_xx_pre, NULL }, /* Dx */ { NULL, NULL }, /* %Q */ + { termp_br_pre, NULL }, /* br */ + { termp_sp_pre, NULL }, /* sp */ }; static int arg_hasattr(int, const struct mdoc_node *); @@ -1826,6 +1830,37 @@ termp_in_post(DECL_ARGS) /* ARGSUSED */ static int +termp_sp_pre(DECL_ARGS) +{ + int i, len; + + if (NULL == node->child) { + term_vspace(p); + return(0); + } + + len = atoi(node->child->string); + if (0 == len) + term_newln(p); + for (i = 0; i < len; i++) + term_vspace(p); + + return(0); +} + + +/* ARGSUSED */ +static int +termp_br_pre(DECL_ARGS) +{ + + term_newln(p); + return(1); +} + + +/* ARGSUSED */ +static int termp_brq_pre(DECL_ARGS) { diff --git a/usr.bin/mandoc/mdoc_validate.c b/usr.bin/mandoc/mdoc_validate.c index a1ef3cb8687..cd0f3237df2 100644 --- a/usr.bin/mandoc/mdoc_validate.c +++ b/usr.bin/mandoc/mdoc_validate.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_validate.c,v 1.30 2009/07/19 12:26:57 schwarze Exp $ */ +/* $Id: mdoc_validate.c,v 1.31 2009/07/26 01:59:46 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -18,6 +18,8 @@ #include <assert.h> #include <ctype.h> +#include <errno.h> +#include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> @@ -68,7 +70,6 @@ static int eerr_eq0(POST_ARGS); static int eerr_eq1(POST_ARGS); static int eerr_ge1(POST_ARGS); static int eerr_le2(POST_ARGS); -static int ewarn_eq0(POST_ARGS); static int ewarn_ge1(POST_ARGS); static int herr_eq0(POST_ARGS); static int herr_ge1(POST_ARGS); @@ -88,6 +89,7 @@ static int post_root(POST_ARGS); static int post_sh(POST_ARGS); static int post_sh_body(POST_ARGS); static int post_sh_head(POST_ARGS); +static int post_sp(POST_ARGS); static int post_st(POST_ARGS); static int pre_an(PRE_ARGS); static int pre_bd(PRE_ARGS); @@ -121,9 +123,9 @@ static v_post posts_nd[] = { berr_ge1, NULL }; static v_post posts_nm[] = { post_nm, NULL }; static v_post posts_notext[] = { eerr_eq0, NULL }; static v_post posts_pf[] = { eerr_eq1, NULL }; -static v_post posts_pp[] = { ewarn_eq0, NULL }; static v_post posts_rv[] = { eerr_eq0, post_args, NULL }; static v_post posts_sh[] = { herr_ge1, bwarn_ge1, post_sh, NULL }; +static v_post posts_sp[] = { post_sp, NULL }; static v_post posts_ss[] = { herr_ge1, NULL }; static v_post posts_st[] = { eerr_eq1, post_st, NULL }; static v_post posts_text[] = { eerr_ge1, NULL }; @@ -154,7 +156,7 @@ const struct valids mdoc_valids[MDOC_MAX] = { { pres_os, NULL }, /* Os */ { pres_sh, posts_sh }, /* Sh */ { pres_ss, posts_ss }, /* Ss */ - { NULL, posts_pp }, /* Pp */ + { NULL, posts_notext }, /* Pp */ { pres_d1, posts_wline }, /* D1 */ { pres_d1, posts_wline }, /* Dl */ { pres_bd, posts_bd }, /* Bd */ @@ -255,7 +257,7 @@ const struct valids mdoc_valids[MDOC_MAX] = { { NULL, NULL }, /* Fr */ { NULL, posts_notext }, /* Ud */ { pres_lb, posts_lb }, /* Lb */ - { NULL, posts_pp }, /* Lp */ + { NULL, posts_notext }, /* Lp */ { NULL, NULL }, /* Lk */ { NULL, posts_text }, /* Mt */ { NULL, posts_wline }, /* Brq */ @@ -266,6 +268,8 @@ const struct valids mdoc_valids[MDOC_MAX] = { { NULL, NULL }, /* En */ { NULL, NULL }, /* Dx */ { NULL, posts_text }, /* %Q */ + { NULL, posts_notext }, /* br */ + { NULL, posts_sp }, /* sp */ }; @@ -398,7 +402,6 @@ CHECK_CHILD_DEFN(err, lt, <) /* err_child_lt() */ CHECK_CHILD_DEFN(warn, lt, <) /* warn_child_lt() */ CHECK_BODY_DEFN(ge1, warn, warn_child_gt, 0) /* bwarn_ge1() */ CHECK_BODY_DEFN(ge1, err, err_child_gt, 0) /* berr_ge1() */ -CHECK_ELEM_DEFN(eq0, warn, warn_child_eq, 0) /* ewarn_eq0() */ CHECK_ELEM_DEFN(ge1, warn, warn_child_gt, 0) /* ewarn_gt1() */ CHECK_ELEM_DEFN(eq1, err, err_child_eq, 1) /* eerr_eq1() */ CHECK_ELEM_DEFN(le2, err, err_child_lt, 3) /* eerr_le2() */ @@ -1124,6 +1127,37 @@ post_root(POST_ARGS) static int +post_sp(POST_ARGS) +{ + long lval; + char *ep, *buf; + + if (NULL == mdoc->last->child) + return(1); + else if ( ! eerr_eq1(mdoc)) + return(0); + + assert(MDOC_TEXT == mdoc->last->child->type); + buf = mdoc->last->child->string; + assert(buf); + + /* From OpenBSD's strtol(3). */ + errno = 0; + lval = strtol(buf, &ep, 10); + if (buf[0] == '\0' || *ep != '\0') + return(mdoc_nerr(mdoc, mdoc->last->child, ENUMFMT)); + + if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) || + (lval > INT_MAX || lval < 0)) + return(mdoc_nerr(mdoc, mdoc->last->child, ENUMFMT)); + + return(1); +} + + + + +static int post_st(POST_ARGS) { |