]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_macro.c
Add a new term_flushln() flag TERMP_BRIND (if break, then indent)
[mandoc.git] / mdoc_macro.c
index 4a018eedcfd3b1121bfe10cb02062d9f34cb0b81..a9c3f063530c9c5149284336653cc3f342e384b8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_macro.c,v 1.123 2013/10/21 23:47:58 schwarze Exp $ */
+/*     $Id: mdoc_macro.c,v 1.130 2014/03/30 19:47:48 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org>
@@ -87,7 +87,7 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ad */
        { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* An */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ar */
-       { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Cd */
+       { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Cd */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Cm */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Dv */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Er */
@@ -98,7 +98,7 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Fl */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Fn */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ft */
-       { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ic */
+       { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ic */
        { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */
        { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Li */
        { blk_full, MDOC_JOIN }, /* Nd */
@@ -211,6 +211,7 @@ const       struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
        { in_line_eoln, 0 }, /* sp */
        { in_line_eoln, 0 }, /* %U */
        { phrase_ta, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ta */
+       { in_line_eoln, 0 }, /* ll */
 };
 
 const  struct mdoc_macro * const mdoc_macros = __mdoc_macros;
@@ -561,6 +562,9 @@ rew_sub(enum mdoc_type t, struct mdoc *mdoc,
                case (REWIND_NONE):
                        return(1);
                case (REWIND_THIS):
+                       n->lastline = line -
+                           (MDOC_NEWLINE & mdoc->flags &&
+                            ! (MDOC_EXPLICIT & mdoc_macros[tok].flags));
                        break;
                case (REWIND_FORCE):
                        mandoc_vmsg(MANDOCERR_SCOPEBROKEN, mdoc->parse, 
@@ -569,6 +573,8 @@ rew_sub(enum mdoc_type t, struct mdoc *mdoc,
                                        mdoc_macronames[n->tok]);
                        /* FALLTHROUGH */
                case (REWIND_MORE):
+                       n->lastline = line -
+                           (MDOC_NEWLINE & mdoc->flags ? 1 : 0);
                        n = n->parent;
                        continue;
                case (REWIND_LATER):
@@ -678,7 +684,7 @@ append_delims(struct mdoc *mdoc, int line, int *pos, char *buf)
                 * knowing which symbols break this behaviour, for
                 * example, `.  ;' shouldn't propagate the double-space.
                 */
-               if (mandoc_eos(p, strlen(p), 0))
+               if (mandoc_eos(p, strlen(p)))
                        mdoc->last->flags |= MDOC_EOS;
        }
 
@@ -708,8 +714,7 @@ blk_exp_close(MACRO_PROT_ARGS)
                maxargs = 1;
                break;
        case (MDOC_Ek):
-               if ( ! (MDOC_SYNOPSIS & mdoc->flags))
-                       mdoc->flags &= ~MDOC_KEEP;
+               mdoc->flags &= ~MDOC_KEEP;
        default:
                maxargs = 0;
                break;
@@ -1345,25 +1350,6 @@ blk_part_imp(MACRO_PROT_ARGS)
                body = mdoc->last;
        }
 
-       for (n = body->child; n && n->next; n = n->next)
-               /* Do nothing. */ ;
-       
-       /* 
-        * End of sentence spacing: if the last node is a text node and
-        * has a trailing period, then mark it as being end-of-sentence.
-        */
-
-       if (n && MDOC_TEXT == n->type && n->string)
-               if (mandoc_eos(n->string, strlen(n->string), 1))
-                       n->flags |= MDOC_EOS;
-
-       /* Up-propagate the end-of-space flag. */
-
-       if (n && (MDOC_EOS & n->flags)) {
-               body->flags |= MDOC_EOS;
-               body->parent->flags |= MDOC_EOS;
-       }
-
        /*
         * If there is an open sub-block requiring explicit close-out,
         * postpone closing out the current block