]> git.cameronkatri.com Git - mandoc.git/blobdiff - man_term.c
implement -h (synopsis only) for preformatted (cat) pages;
[mandoc.git] / man_term.c
index e308f6a381ae3f52f2cee8e95f215e024df42e4f..790d313598c9cc3585b0e32179ad294d5290828c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_term.c,v 1.148 2014/04/23 16:08:33 schwarze Exp $ */
+/*     $Id: man_term.c,v 1.155 2014/10/28 17:36:19 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,9 +15,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
 #include "config.h"
-#endif
 
 #include <sys/types.h>
 
 
 #include <sys/types.h>
 
@@ -143,38 +141,47 @@ void
 terminal_man(void *arg, const struct man *man)
 {
        struct termp            *p;
 terminal_man(void *arg, const struct man *man)
 {
        struct termp            *p;
-       const struct man_node   *n;
        const struct man_meta   *meta;
        const struct man_meta   *meta;
+       struct man_node         *n;
        struct mtermp            mt;
 
        p = (struct termp *)arg;
 
        struct mtermp            mt;
 
        p = (struct termp *)arg;
 
-       if (0 == p->defindent)
-               p->defindent = 7;
-
        p->overstep = 0;
        p->overstep = 0;
-       p->maxrmargin = p->defrmargin;
+       p->rmargin = p->maxrmargin = p->defrmargin;
        p->tabwidth = term_len(p, 5);
 
        p->tabwidth = term_len(p, 5);
 
-       if (NULL == p->symtab)
-               p->symtab = mchars_alloc();
-
-       n = man_node(man);
+       n = man_node(man)->child;
        meta = man_meta(man);
 
        meta = man_meta(man);
 
-       term_begin(p, print_man_head, print_man_foot, meta);
-       p->flags |= TERMP_NOSPACE;
-
        memset(&mt, 0, sizeof(struct mtermp));
 
        mt.lmargin[mt.lmargincur] = term_len(p, p->defindent);
        mt.offset = term_len(p, p->defindent);
        mt.pardist = 1;
 
        memset(&mt, 0, sizeof(struct mtermp));
 
        mt.lmargin[mt.lmargincur] = term_len(p, p->defindent);
        mt.offset = term_len(p, p->defindent);
        mt.pardist = 1;
 
-       if (n->child)
-               print_man_nodelist(p, &mt, n->child, meta);
-
-       term_end(p);
+       if (p->synopsisonly) {
+               while (n != NULL) {
+                       if (n->tok == MAN_SH &&
+                           n->child->child->type == MAN_TEXT &&
+                           !strcmp(n->child->child->string, "SYNOPSIS")) {
+                               if (n->child->next->child != NULL)
+                                       print_man_nodelist(p, &mt,
+                                           n->child->next->child, meta);
+                               term_newln(p);
+                               break;
+                       }
+                       n = n->next;
+               }
+       } else {
+               if (p->defindent == 0)
+                       p->defindent = 7;
+               term_begin(p, print_man_head, print_man_foot, meta);
+               p->flags |= TERMP_NOSPACE;
+               if (n != NULL)
+                       print_man_nodelist(p, &mt, n, meta);
+               term_end(p);
+       }
 }
 
 
 }
 
 
@@ -977,7 +984,11 @@ print_man_node(DECL_ARGS)
                goto out;
 
        case MAN_EQN:
                goto out;
 
        case MAN_EQN:
+               if ( ! (n->flags & MAN_LINE))
+                       p->flags |= TERMP_NOSPACE;
                term_eqn(p, n->eqn);
                term_eqn(p, n->eqn);
+               if (n->next != NULL && ! (n->next->flags & MAN_LINE))
+                       p->flags |= TERMP_NOSPACE;
                return;
        case MAN_TBL:
                /*
                return;
        case MAN_TBL:
                /*
@@ -1061,7 +1072,8 @@ print_man_foot(struct termp *p, const void *arg)
 
        term_fontrepl(p, TERMFONT_NONE);
 
 
        term_fontrepl(p, TERMFONT_NONE);
 
-       term_vspace(p);
+       if (meta->hasbody)
+               term_vspace(p);
 
        /*
         * Temporary, undocumented option to imitate mdoc(7) output.
 
        /*
         * Temporary, undocumented option to imitate mdoc(7) output.
@@ -1070,8 +1082,10 @@ print_man_foot(struct termp *p, const void *arg)
         */
 
        if ( ! p->mdocstyle) {
         */
 
        if ( ! p->mdocstyle) {
-               term_vspace(p);
-               term_vspace(p);
+               if (meta->hasbody) {
+                       term_vspace(p);
+                       term_vspace(p);
+               }
                mandoc_asprintf(&title, "%s(%s)",
                    meta->title, meta->msec);
        } else if (meta->source) {
                mandoc_asprintf(&title, "%s(%s)",
                    meta->title, meta->msec);
        } else if (meta->source) {