]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_macro.c
The groff man-ext macros define fonts CB, CI, and CR,
[mandoc.git] / mdoc_macro.c
index af6ac5c668255bc048a76e6873f48f279e1ad96f..b463d03e225c1b0bf143b219f902ff30ba50afc3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_macro.c,v 1.220 2017/04/29 12:45:42 schwarze Exp $ */
+/*     $Id: mdoc_macro.c,v 1.224 2017/05/30 16:22:03 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -76,7 +76,8 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX - MDOC_Dd] = {
        { blk_full, MDOC_PARSED | MDOC_JOIN }, /* It */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ad */
        { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* An */
-       { in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ap */
+       { in_line_argn, MDOC_CALLABLE | MDOC_PARSED |
+                       MDOC_IGNDELIM | MDOC_JOIN }, /* Ap */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ar */
        { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Cd */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Cm */
@@ -197,11 +198,8 @@ const      struct mdoc_macro __mdoc_macros[MDOC_MAX - MDOC_Dd] = {
        { blk_part_imp, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* En */
        { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Dx */
        { in_line_eoln, MDOC_JOIN }, /* %Q */
-       { in_line_eoln, 0 }, /* br */
-       { in_line_eoln, 0 }, /* sp */
        { in_line_eoln, 0 }, /* %U */
        { phrase_ta, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ta */
-       { in_line_eoln, MDOC_PROLOGUE }, /* ll */
 };
 const  struct mdoc_macro *const mdoc_macros = __mdoc_macros - MDOC_Dd;
 
@@ -251,9 +249,8 @@ lookup(struct roff_man *mdoc, int from, int line, int ppos, const char *p)
                if (res != TOKEN_NONE) {
                        if (mdoc_macros[res].flags & MDOC_CALLABLE)
                                return res;
-                       if (res != MDOC_br && res != MDOC_sp && res != MDOC_ll)
-                               mandoc_msg(MANDOCERR_MACRO_CALL,
-                                   mdoc->parse, line, ppos, p);
+                       mandoc_msg(MANDOCERR_MACRO_CALL,
+                           mdoc->parse, line, ppos, p);
                }
        }
        return TOKEN_NONE;
@@ -682,8 +679,8 @@ blk_exp_close(MACRO_PROT_ARGS)
                         * Stray .Ec without previous .Eo:
                         * Break the output line, keep the arguments.
                         */
-                       roff_elem_alloc(mdoc, line, ppos, MDOC_br);
-                       rew_elem(mdoc, MDOC_br);
+                       roff_elem_alloc(mdoc, line, ppos, ROFF_br);
+                       rew_elem(mdoc, ROFF_br);
                }
        } else if (endbody == NULL) {
                rew_last(mdoc, body);
@@ -716,8 +713,7 @@ blk_exp_close(MACRO_PROT_ARGS)
                if (ac == ARGS_PUNCT || ac == ARGS_EOLN)
                        break;
 
-               ntok = ac == ARGS_QWORD ? TOKEN_NONE :
-                   lookup(mdoc, tok, line, lastarg, p);
+               ntok = lookup(mdoc, tok, line, lastarg, p);
 
                if (ntok == TOKEN_NONE) {
                        dword(mdoc, line, lastarg, p, DELIM_MAX,
@@ -813,7 +809,7 @@ in_line(MACRO_PROT_ARGS)
                        break;
                }
 
-               ntok = (ac == ARGS_QWORD || (tok == MDOC_Fn && !cnt)) ?
+               ntok = (tok == MDOC_Fn && !cnt) ?
                    TOKEN_NONE : lookup(mdoc, tok, line, la, p);
 
                /*
@@ -842,14 +838,11 @@ in_line(MACRO_PROT_ARGS)
                }
 
                /*
-                * Non-quote-enclosed punctuation.  Set up our scope, if
-                * a word; rewind the scope, if a delimiter; then append
-                * the word.
+                * Handle punctuation.  Set up our scope, if a word;
+                * rewind the scope, if a delimiter; then append the word.
                 */
 
-               d = ac == ARGS_QWORD ? DELIM_NONE : mdoc_isdelim(p);
-
-               if (DELIM_NONE != d) {
+               if ((d = mdoc_isdelim(p)) != DELIM_NONE) {
                        /*
                         * If we encounter closing punctuation, no word
                         * has been emitted, no scope is open, and we're
@@ -869,11 +862,12 @@ in_line(MACRO_PROT_ARGS)
                         * Close out our scope, if one is open, before
                         * any punctuation.
                         */
-                       if (scope)
+                       if (scope && tok != MDOC_Lk) {
                                rew_elem(mdoc, tok);
-                       scope = 0;
-                       if (tok == MDOC_Fn)
-                               mayopen = 0;
+                               scope = 0;
+                               if (tok == MDOC_Fn)
+                                       mayopen = 0;
+                       }
                } else if (mayopen && !scope) {
                        mdoc_elem_alloc(mdoc, line, ppos, tok, arg);
                        scope = 1;
@@ -1023,8 +1017,8 @@ blk_full(MACRO_PROT_ARGS)
                if (tok == MDOC_It && (n == NULL || n->tok != MDOC_Bl)) {
                        mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse,
                            line, ppos, "It %s", buf + *pos);
-                       roff_elem_alloc(mdoc, line, ppos, MDOC_br);
-                       rew_elem(mdoc, MDOC_br);
+                       roff_elem_alloc(mdoc, line, ppos, ROFF_br);
+                       rew_elem(mdoc, ROFF_br);
                        return;
                }
        }
@@ -1119,7 +1113,6 @@ blk_full(MACRO_PROT_ARGS)
 
                if (head == NULL &&
                    ac != ARGS_PHRASE &&
-                   ac != ARGS_QWORD &&
                    mdoc_isdelim(p) == DELIM_OPEN) {
                        dword(mdoc, line, la, p, DELIM_OPEN, 0);
                        continue;
@@ -1216,8 +1209,7 @@ blk_part_imp(MACRO_PROT_ARGS)
                if (ac == ARGS_EOLN || ac == ARGS_PUNCT)
                        break;
 
-               if (body == NULL && ac != ARGS_QWORD &&
-                   mdoc_isdelim(p) == DELIM_OPEN) {
+               if (body == NULL && mdoc_isdelim(p) == DELIM_OPEN) {
                        dword(mdoc, line, la, p, DELIM_OPEN, 0);
                        continue;
                }
@@ -1273,8 +1265,7 @@ blk_part_exp(MACRO_PROT_ARGS)
 
                /* Flush out leading punctuation. */
 
-               if (head == NULL && ac != ARGS_QWORD &&
-                   mdoc_isdelim(p) == DELIM_OPEN) {
+               if (head == NULL && mdoc_isdelim(p) == DELIM_OPEN) {
                        dword(mdoc, line, la, p, DELIM_OPEN, 0);
                        continue;
                }
@@ -1373,7 +1364,7 @@ in_line_argn(MACRO_PROT_ARGS)
                        state = -2;
                }
 
-               ntok = (ac == ARGS_QWORD || (tok == MDOC_Pf && state == 0)) ?
+               ntok = (tok == MDOC_Pf && state == 0) ?
                    TOKEN_NONE : lookup(mdoc, tok, line, la, p);
 
                if (ntok != TOKEN_NONE) {
@@ -1385,8 +1376,7 @@ in_line_argn(MACRO_PROT_ARGS)
                        break;
                }
 
-               if (ac == ARGS_QWORD ||
-                   mdoc_macros[tok].flags & MDOC_IGNDELIM ||
+               if (mdoc_macros[tok].flags & MDOC_IGNDELIM ||
                    mdoc_isdelim(p) == DELIM_NONE) {
                        if (state == -1) {
                                mdoc_elem_alloc(mdoc, line, ppos, tok, arg);