diff options
-rw-r--r-- | Makefile | 20 | ||||
-rw-r--r-- | ascii.in | 3 | ||||
-rw-r--r-- | mdoc.7 | 6 | ||||
-rw-r--r-- | mdoc_macro.c | 34 | ||||
-rw-r--r-- | strings.c | 8 |
5 files changed, 44 insertions, 27 deletions
@@ -18,14 +18,14 @@ LINTFLAGS += $(VFLAGS) CFLAGS += $(VFLAGS) MDOCLNS = mdoc_macro.ln mdoc.ln mdoc_hash.ln strings.ln xstd.ln \ - argv.ln mdoc_validate.ln mdoc_action.ln lib.ln att.ln \ - arch.ln vol.ln msec.ln st.ln -MDOCOBJS = mdoc_macro.o mdoc.o mdoc_hash.o strings.o xstd.o argv.o \ - mdoc_validate.o mdoc_action.o lib.o att.o arch.o vol.o \ - msec.o st.o -MDOCSRCS = mdoc_macro.c mdoc.c mdoc_hash.c strings.c xstd.c argv.c \ - mdoc_validate.c mdoc_action.c lib.c att.c arch.c vol.c \ - msec.c st.c + mdoc_argv.ln mdoc_validate.ln mdoc_action.ln lib.ln \ + att.ln arch.ln vol.ln msec.ln st.ln +MDOCOBJS = mdoc_macro.o mdoc.o mdoc_hash.o strings.o xstd.o \ + mdoc_argv.o mdoc_validate.o mdoc_action.o lib.o att.o \ + arch.o vol.o msec.o st.o +MDOCSRCS = mdoc_macro.c mdoc.c mdoc_hash.c strings.c xstd.c \ + mdoc_argv.c mdoc_validate.c mdoc_action.c lib.c att.c \ + arch.c vol.c msec.c st.c MANLNS = man_macro.ln man.ln man_hash.ln man_validate.ln \ man_action.ln @@ -159,8 +159,8 @@ terminal.o: terminal.c term.h man.h mdoc.h xstd.ln: xstd.c libmdoc.h xstd.o: xstd.c libmdoc.h -argv.ln: argv.c libmdoc.h -argv.o: argv.c libmdoc.h +mdoc_argv.ln: mdoc_argv.c libmdoc.h +mdoc_argv.o: mdoc_argv.c libmdoc.h man_validate.ln: man_validate.c libman.h man_validate.o: man_validate.c libman.h @@ -1,4 +1,4 @@ -/* $Id: ascii.in,v 1.5 2009/03/21 13:47:02 kristaps Exp $ */ +/* $Id: ascii.in,v 1.6 2009/03/27 13:44:24 kristaps Exp $ */ /* * Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org> * @@ -32,6 +32,7 @@ LINE("`", 1, "`", 1) LINE("%", 1, "%", 1) LINE("-", 1, "-", 1) LINE(" ", 1, " ", 1) +LINE("0", 1, " ", 1) LINE(".", 1, ".", 1) LINE("&", 1, "", 0) LINE("e", 1, "\\", 1) @@ -1,4 +1,4 @@ -.\" $Id: mdoc.7,v 1.17 2009/03/26 23:01:26 kristaps Exp $ +.\" $Id: mdoc.7,v 1.18 2009/03/27 13:44:24 kristaps Exp $ .\" .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org> .\" @@ -16,7 +16,7 @@ .\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR .\" PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: March 26 2009 $ +.Dd $Mdocdate: March 27 2009 $ .Dt mdoc 7 .Os .\" SECTION @@ -506,6 +506,8 @@ Monetary: .Pp Special symbols: .Bl -tag -width 12n -offset "XXXX" -compact +.It \e0 +.Pq white-space .It \e(de .Pq degree .It \e(ps diff --git a/mdoc_macro.c b/mdoc_macro.c index c73d4312..d1597569 100644 --- a/mdoc_macro.c +++ b/mdoc_macro.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_macro.c,v 1.2 2009/03/23 15:41:09 kristaps Exp $ */ +/* $Id: mdoc_macro.c,v 1.3 2009/03/27 13:44:24 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org> * @@ -800,7 +800,7 @@ blk_exp_close(MACRO_PROT_ARGS) static int in_line(MACRO_PROT_ARGS) { - int la, lastpunct, c, w; + int la, lastpunct, c, w, cnt, d, call; struct mdoc_arg *arg; char *p; @@ -812,7 +812,6 @@ in_line(MACRO_PROT_ARGS) *pos = la; break; } - if (ARGV_EOLN == c) break; if (ARGV_ARG == c) @@ -822,11 +821,7 @@ in_line(MACRO_PROT_ARGS) return(0); } - if ( ! mdoc_elem_alloc(mdoc, line, ppos, tok, arg)) - return(0); - mdoc->next = MDOC_NEXT_CHILD; - - for (lastpunct = 0;; ) { + for (call = cnt = 0, lastpunct = 1;; ) { la = *pos; w = mdoc_args(mdoc, line, pos, buf, tok, &p); @@ -847,6 +842,14 @@ in_line(MACRO_PROT_ARGS) if (MDOC_MAX != c && -1 != c) { if (0 == lastpunct && ! rew_elem(mdoc, tok)) return(0); + if (0 == cnt) { + if ( ! mdoc_elem_alloc(mdoc, line, ppos, + tok, arg)) + return(0); + if ( ! rew_elem(mdoc, tok)) + return(0); + mdoc->next = MDOC_NEXT_SIBLING; + } c = mdoc_macro(mdoc, c, line, la, pos, buf); if (0 == c) return(0); @@ -858,20 +861,22 @@ in_line(MACRO_PROT_ARGS) /* Non-quote-enclosed punctuation. */ - if (ARGS_QWORD != w && mdoc_isdelim(p)) { + d = mdoc_isdelim(p); + + if (ARGS_QWORD != w && d) { if (0 == lastpunct && ! rew_elem(mdoc, tok)) return(0); lastpunct = 1; } else if (lastpunct) { c = mdoc_elem_alloc(mdoc, line, ppos, tok, arg); - if (0 == c) return(0); - mdoc->next = MDOC_NEXT_CHILD; lastpunct = 0; } + if ( ! d) + cnt++; if ( ! mdoc_word_alloc(mdoc, line, la, p)) return(0); mdoc->next = MDOC_NEXT_SIBLING; @@ -879,6 +884,13 @@ in_line(MACRO_PROT_ARGS) if (0 == lastpunct && ! rew_elem(mdoc, tok)) return(0); + if (0 == cnt) { + c = mdoc_elem_alloc(mdoc, line, ppos, tok, arg); + if (0 == c) + return(0); + if ( ! rew_elem(mdoc, tok)) + return(0); + } if (ppos > 1) return(1); return(append_delims(mdoc, line, pos, buf)); @@ -1,4 +1,4 @@ -/* $Id: strings.c,v 1.32 2009/03/23 14:22:11 kristaps Exp $ */ +/* $Id: strings.c,v 1.33 2009/03/27 13:44:24 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> * @@ -89,6 +89,8 @@ mdoc_isescape(const char *p) /* FALLTHROUGH */ case ('%'): /* FALLTHROUGH */ + case ('0'): + /* FALLTHROUGH */ case (' '): /* FALLTHROUGH */ case ('|'): @@ -210,9 +212,9 @@ mdoc_atotime(const char *p) (void)memset(&tm, 0, sizeof(struct tm)); - if (xstrcmp(p, "$Mdocdate: March 23 2009 $")) + if (xstrcmp(p, "$Mdocdate: March 27 2009 $")) return(time(NULL)); - if ((pp = strptime(p, "$Mdocdate: March 23 2009 $", &tm)) && 0 == *pp) + if ((pp = strptime(p, "$Mdocdate: March 27 2009 $", &tm)) && 0 == *pp) return(mktime(&tm)); /* XXX - this matches "June 1999", which is wrong. */ if ((pp = strptime(p, "%b %d %Y", &tm)) && 0 == *pp) |