summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2009-07-18 15:34:28 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2009-07-18 15:34:28 +0000
commit2ccb626769ed1367c53922a0aeff7a83570fc305 (patch)
tree383b25b526447fb15fa09540e3ef44f8f57ec00b
parent3d16afce21fb9ee8da11ed78546f7bb036bafd8e (diff)
sync to 1.8.0: .Nd is now a BFI, was an ELEM,
and use \(en instead of \- for .Nd
-rw-r--r--usr.bin/mandoc/mdoc_macro.c45
-rw-r--r--usr.bin/mandoc/mdoc_term.c15
-rw-r--r--usr.bin/mandoc/mdoc_validate.c9
3 files changed, 54 insertions, 15 deletions
diff --git a/usr.bin/mandoc/mdoc_macro.c b/usr.bin/mandoc/mdoc_macro.c
index 0466f066d0e..09b446e168e 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.11 2009/07/12 23:19:48 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.12 2009/07/18 15:34:27 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -85,7 +85,7 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ic */
{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Li */
- { in_line_eoln, 0 }, /* Nd */
+ { blk_full, 0 }, /* Nd */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Nm */
{ blk_part_imp, MDOC_CALLABLE | MDOC_PARSED }, /* Op */
{ obsolete, 0 }, /* Ot */
@@ -386,6 +386,8 @@ rew_dohalt(int tok, enum mdoc_type type, const struct mdoc_node *p)
if (type == p->type && tok == p->tok)
return(REWIND_REWIND);
break;
+ case (MDOC_Nd):
+ /* FALLTHROUGH */
case (MDOC_Ss):
assert(MDOC_TAIL != type);
if (type == p->type && tok == p->tok)
@@ -491,9 +493,13 @@ rew_dobreak(int tok, const struct mdoc_node *p)
switch (tok) {
case (MDOC_It):
return(MDOC_It == p->tok);
+ case (MDOC_Nd):
+ return(MDOC_Nd == p->tok);
case (MDOC_Ss):
return(MDOC_Ss == p->tok);
case (MDOC_Sh):
+ if (MDOC_Nd == p->tok)
+ return(1);
if (MDOC_Ss == p->tok)
return(1);
return(MDOC_Sh == p->tok);
@@ -875,10 +881,26 @@ in_line(MACRO_PROT_ARGS)
static int
blk_full(MACRO_PROT_ARGS)
{
- int c, lastarg, reopen;
+ int c, lastarg, reopen, dohead;
struct mdoc_arg *arg;
char *p;
+ /*
+ * Whether to process a block-head section. If this is
+ * non-zero, then a head will be opened for all line arguments.
+ * If not, then the head will always be empty and only a body
+ * will be opened, which will stay open at the eoln.
+ */
+
+ switch (tok) {
+ case (MDOC_Nd):
+ dohead = 0;
+ break;
+ default:
+ dohead = 1;
+ break;
+ }
+
if ( ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)) {
if ( ! rew_subblock(MDOC_BODY, mdoc,
tok, line, ppos))
@@ -923,6 +945,16 @@ blk_full(MACRO_PROT_ARGS)
if ( ! mdoc_head_alloc(mdoc, line, ppos, tok))
return(0);
+
+ /* Immediately close out head and enter body, if applicable. */
+
+ if (0 == dohead) {
+ if ( ! rew_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
+ return(0);
+ if ( ! mdoc_body_alloc(mdoc, line, ppos, tok))
+ return(0);
+ }
+
mdoc->next = MDOC_NEXT_CHILD;
for (reopen = 0;; ) {
@@ -934,6 +966,7 @@ blk_full(MACRO_PROT_ARGS)
if (ARGS_EOLN == c)
break;
if (ARGS_PHRASE == c) {
+ assert(dohead);
if (reopen && ! mdoc_head_alloc
(mdoc, line, ppos, tok))
return(0);
@@ -970,9 +1003,13 @@ blk_full(MACRO_PROT_ARGS)
if (1 == ppos && ! append_delims(mdoc, line, pos, buf))
return(0);
+
+ /* If the body's already open, then just return. */
+ if (0 == dohead)
+ return(1);
+
if ( ! rew_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
return(0);
-
if ( ! mdoc_body_alloc(mdoc, line, ppos, tok))
return(0);
mdoc->next = MDOC_NEXT_CHILD;
diff --git a/usr.bin/mandoc/mdoc_term.c b/usr.bin/mandoc/mdoc_term.c
index 45b583f0a81..90a16ca3033 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.24 2009/07/13 00:26:24 schwarze Exp $ */
+/* $Id: mdoc_term.c,v 1.25 2009/07/18 15:34:27 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -1129,13 +1129,12 @@ termp_ex_pre(DECL_ARGS)
static int
termp_nd_pre(DECL_ARGS)
{
- /*
- * XXX: signed off by jmc@openbsd.org. This technically
- * produces a minus sign after the Nd, which is wrong, but is
- * consistent with the historic OpenBSD tmac file.
- */
-#ifdef __OpenBSD__
- term_word(p, "\\-");
+
+ if (MDOC_BODY != node->type)
+ return(1);
+
+#if defined(__OpenBSD__) || defined(__linux__)
+ term_word(p, "\\(en");
#else
term_word(p, "\\(em");
#endif
diff --git a/usr.bin/mandoc/mdoc_validate.c b/usr.bin/mandoc/mdoc_validate.c
index 106394929ce..2f8a930005a 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.24 2009/07/13 01:00:50 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.25 2009/07/18 15:34:27 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -85,6 +85,7 @@ static int eerr_le2(POST_ARGS);
static int eerr_eq1(POST_ARGS);
static int eerr_ge1(POST_ARGS);
static int ewarn_eq0(POST_ARGS);
+static int berr_ge1(POST_ARGS);
static int bwarn_ge1(POST_ARGS);
static int hwarn_eq1(POST_ARGS);
static int ewarn_ge1(POST_ARGS);
@@ -139,6 +140,7 @@ static v_post posts_rv[] = { eerr_eq0, post_args, NULL };
static v_post posts_an[] = { post_an, NULL };
static v_post posts_at[] = { post_at, NULL };
static v_post posts_xr[] = { eerr_ge1, eerr_le2, NULL };
+static v_post posts_nd[] = { berr_ge1, NULL };
static v_post posts_nm[] = { post_nm, NULL };
static v_post posts_bf[] = { hwarn_le1, post_bf, NULL };
static v_post posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL };
@@ -175,7 +177,7 @@ const struct valids mdoc_valids[MDOC_MAX] = {
{ NULL, posts_text }, /* Ic */
{ NULL, posts_in }, /* In */
{ NULL, NULL }, /* Li */
- { NULL, posts_wtext }, /* Nd */
+ { NULL, posts_nd }, /* Nd */
{ NULL, posts_nm }, /* Nm */
{ NULL, posts_wline }, /* Op */
{ NULL, NULL }, /* Ot */
@@ -402,6 +404,7 @@ CHECK_CHILD_DEFN(err, eq, ==) /* err_child_eq() */
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() */
@@ -1166,7 +1169,7 @@ post_sh_body(POST_ARGS)
return(0);
}
- if (MDOC_ELEM == n->type && MDOC_Nd == n->tok)
+ if (MDOC_BLOCK == n->type && MDOC_Nd == n->tok)
return(1);
return(mdoc_nwarn(mdoc, mdoc->last, ENAMESECINC));
}