]> git.cameronkatri.com Git - mandoc.git/commitdiff
End-of-sentence spacing for -man -Tascii.
authorKristaps Dzonsons <kristaps@bsd.lv>
Wed, 12 May 2010 16:46:28 +0000 (16:46 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Wed, 12 May 2010 16:46:28 +0000 (16:46 +0000)
man.c
man.h
man_term.c

diff --git a/man.c b/man.c
index 7a41b1fbedd49c309649a41d4310416b8b925c6e..9980440612c08696e3b5d89eb76c2bd192f490da 100644 (file)
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/*     $Id: man.c,v 1.64 2010/05/08 10:25:27 kristaps Exp $ */
+/*     $Id: man.c,v 1.65 2010/05/12 16:46:28 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -420,6 +420,29 @@ man_ptext(struct man *m, int line, char *buf)
        if ( ! man_word_alloc(m, line, 0, buf))
                return(0);
 
+       /*
+        * End-of-sentence check.  If the last character is an unescaped
+        * EOS character, then flag the node as being the end of a
+        * sentence.  The front-end will know how to interpret this.
+        */
+
+       assert(i);
+
+       switch (buf[i - 1]) {
+       case ('.'):
+               if (i > 1 && '\\' == buf[i - 2])
+                       break;
+               /* FALLTHROUGH */
+       case ('!'):
+               /* FALLTHROUGH */
+       case ('?'):
+               m->last->flags |= MAN_EOS;
+               break;
+       default:
+               break;
+
+       }
+
 descope:
        /*
         * Co-ordinate what happens with having a next-line scope open:
diff --git a/man.h b/man.h
index 856e4192a43e951bfb8fa1df295b58ed55ee0d26..ca61fae2433d88213a3e190d2f6d0dba6eaf3856 100644 (file)
--- a/man.h
+++ b/man.h
@@ -1,4 +1,4 @@
-/*     $Id: man.h,v 1.28 2010/05/09 21:19:42 kristaps Exp $ */
+/*     $Id: man.h,v 1.29 2010/05/12 16:46:28 kristaps Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -93,6 +93,7 @@ struct        man_node {
        int              flags;
 #define        MAN_VALID       (1 << 0)
 #define        MAN_ACTED       (1 << 1)
+#define        MAN_EOS         (1 << 2)
        enum man_type    type;
        char            *string;
        struct man_node *head;
index 7223fab2ba1eed0e93f50ad3f6a7079969e58581..fd88e2df7d9f3a1f5988737173ba9bd4f2744d75 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_term.c,v 1.62 2010/05/10 08:31:41 kristaps Exp $ */
+/*     $Id: man_term.c,v 1.63 2010/05/12 16:46:28 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -842,6 +842,9 @@ print_man_node(DECL_ARGS)
                if ( ! (MAN_NOTEXT & termacts[n->tok].flags))
                        term_fontrepl(p, TERMFONT_NONE);
        }
+
+       if (MAN_EOS & n->flags)
+               p->flags |= TERMP_SENTENCE;
 }