diff options
author | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2009-07-18 15:34:28 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2009-07-18 15:34:28 +0000 |
commit | 2ccb626769ed1367c53922a0aeff7a83570fc305 (patch) | |
tree | 383b25b526447fb15fa09540e3ef44f8f57ec00b | |
parent | 3d16afce21fb9ee8da11ed78546f7bb036bafd8e (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.c | 45 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_term.c | 15 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_validate.c | 9 |
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)); } |