summaryrefslogtreecommitdiff
path: root/usr.bin/mandoc
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/mandoc')
-rw-r--r--usr.bin/mandoc/mdoc.c4
-rw-r--r--usr.bin/mandoc/mdoc.h6
-rw-r--r--usr.bin/mandoc/mdoc_action.c4
-rw-r--r--usr.bin/mandoc/mdoc_argv.c4
-rw-r--r--usr.bin/mandoc/mdoc_macro.c4
-rw-r--r--usr.bin/mandoc/mdoc_term.c37
-rw-r--r--usr.bin/mandoc/mdoc_validate.c46
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)
{