]> git.cameronkatri.com Git - mandoc.git/blobdiff - man_macro.c
Implement end-of-sentence spacing at the end of man(7) macro lines.
[mandoc.git] / man_macro.c
index 6631f14db46758e0922eae053bbbeadf68c99e4a..d89298e2af5e53f39fb7a2c29502151e4d1fe7b3 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: man_macro.c,v 1.75 2012/11/17 00:26:33 schwarze Exp $ */
+/*     $Id: man_macro.c,v 1.78 2013/12/22 13:25:17 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012, 2013 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -88,6 +88,8 @@ const struct man_macro __man_macros[MAN_MAX] = {
        { in_line_eoln, 0 }, /* OP */
        { in_line_eoln, MAN_BSCOPE }, /* EX */
        { in_line_eoln, MAN_BSCOPE }, /* EE */
+       { blk_exp, MAN_BSCOPE | MAN_EXPLICIT }, /* UR */
+       { blk_close, 0 }, /* UE */
 };
 
 const  struct man_macro * const man_macros = __man_macros;
@@ -284,6 +286,9 @@ blk_close(MACRO_PROT_ARGS)
        case (MAN_RE):
                ntok = MAN_RS;
                break;
+       case (MAN_UE):
+               ntok = MAN_UR;
+               break;
        default:
                abort();
                /* NOTREACHED */
@@ -293,10 +298,12 @@ blk_close(MACRO_PROT_ARGS)
                if (ntok == nn->tok && MAN_BLOCK == nn->type)
                        break;
 
-       if (NULL != nn)
-               man_unscope(man, nn, MANDOCERR_MAX);
-       else
+       if (NULL == nn) {
                man_pmsg(man, line, ppos, MANDOCERR_NOSCOPE);
+               if ( ! rew_scope(MAN_BLOCK, man, MAN_PP))
+                       return(0);
+       } else 
+               man_unscope(man, nn, MANDOCERR_MAX);
 
        return(1);
 }
@@ -424,6 +431,15 @@ in_line_eoln(MACRO_PROT_ARGS)
                        return(0);
        }
 
+       /*
+        * Append MAN_EOS in case the last snipped argument
+        * ends with a dot, e.g. `.IR syslog (3).'
+        */
+
+       if (n != man->last &&
+           mandoc_eos(man->last->string, strlen(man->last->string), 0))
+               man->last->flags |= MAN_EOS;
+
        /*
         * If no arguments are specified and this is MAN_SCOPED (i.e.,
         * next-line scoped), then set our mode to indicate that we're