]> git.cameronkatri.com Git - mandoc.git/commitdiff
preserve comments before .Dd when converting mdoc(7) to man(7)
authorIngo Schwarze <schwarze@openbsd.org>
Wed, 11 Apr 2018 17:11:13 +0000 (17:11 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Wed, 11 Apr 2018 17:11:13 +0000 (17:11 +0000)
with mandoc -Tman; suggested by Thomas Klausner <wiz at NetBSD>

man_html.c
man_term.c
man_validate.c
mdoc_html.c
mdoc_man.c
mdoc_markdown.c
mdoc_term.c
mdoc_validate.c
roff.c
roff.h
tree.c

index a304b3e4d240bf67a2902f3cab892e73f7d0c000..efcb87ee41d8ba5b0e24e1646f13567a185b1e55 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_html.c,v 1.145 2017/06/25 11:42:02 schwarze Exp $ */
+/*     $Id: man_html.c,v 1.146 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -262,6 +262,8 @@ print_man_node(MAN_ARGS)
                        break;
                print_paragraph(h);
                return;
                        break;
                print_paragraph(h);
                return;
+       case ROFFT_COMMENT:
+               return;
        default:
                break;
        }
        default:
                break;
        }
index 8946a05067a7df470a6ee165630073dfe19a29c6..1404602beb87e1b2f340086d62588cc3414d7c11 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: man_term.c,v 1.209 2017/07/31 15:19:06 schwarze Exp $ */
+/*     $Id: man_term.c,v 1.210 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2015, 2017, 2018 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
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -675,7 +675,8 @@ pre_SS(DECL_ARGS)
                        n = n->prev;
                } while (n != NULL && n->tok >= MAN_TH &&
                    termacts[n->tok].flags & MAN_NOTEXT);
                        n = n->prev;
                } while (n != NULL && n->tok >= MAN_TH &&
                    termacts[n->tok].flags & MAN_NOTEXT);
-               if (n == NULL || (n->tok == MAN_SS && n->body->child == NULL))
+               if (n == NULL || n->type == ROFFT_COMMENT ||
+                   (n->tok == MAN_SS && n->body->child == NULL))
                        break;
 
                for (i = 0; i < mt->pardist; i++)
                        break;
 
                for (i = 0; i < mt->pardist; i++)
@@ -737,7 +738,8 @@ pre_SH(DECL_ARGS)
                        n = n->prev;
                } while (n != NULL && n->tok >= MAN_TH &&
                    termacts[n->tok].flags & MAN_NOTEXT);
                        n = n->prev;
                } while (n != NULL && n->tok >= MAN_TH &&
                    termacts[n->tok].flags & MAN_NOTEXT);
-               if (n == NULL || (n->tok == MAN_SH && n->body->child == NULL))
+               if (n == NULL || n->type == ROFFT_COMMENT ||
+                   (n->tok == MAN_SH && n->body->child == NULL))
                        break;
 
                for (i = 0; i < mt->pardist; i++)
                        break;
 
                for (i = 0; i < mt->pardist; i++)
@@ -885,7 +887,8 @@ print_man_node(DECL_ARGS)
 
                term_word(p, n->string);
                goto out;
 
                term_word(p, n->string);
                goto out;
-
+       case ROFFT_COMMENT:
+               return;
        case ROFFT_EQN:
                if ( ! (n->flags & NODE_LINE))
                        p->flags |= TERMP_NOSPACE;
        case ROFFT_EQN:
                if ( ! (n->flags & NODE_LINE))
                        p->flags |= TERMP_NOSPACE;
index b3356ccb3d3f29decc53cb8ed1fac8edd8c578bd..d6c51af5255ce3370ac8f6514c3bfb8f75e5c8d7 100644 (file)
@@ -1,7 +1,7 @@
 /*     $OpenBSD$ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 /*     $OpenBSD$ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2012-2018 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
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -120,6 +120,7 @@ man_node_validate(struct roff_man *man)
        case ROFFT_ROOT:
                check_root(man, n);
                break;
        case ROFFT_ROOT:
                check_root(man, n);
                break;
+       case ROFFT_COMMENT:
        case ROFFT_EQN:
        case ROFFT_TBL:
                break;
        case ROFFT_EQN:
        case ROFFT_TBL:
                break;
@@ -149,10 +150,9 @@ man_node_validate(struct roff_man *man)
 static void
 check_root(CHKARGS)
 {
 static void
 check_root(CHKARGS)
 {
-
        assert((man->flags & (MAN_BLINE | MAN_ELINE)) == 0);
 
        assert((man->flags & (MAN_BLINE | MAN_ELINE)) == 0);
 
-       if (NULL == man->first->child)
+       if (n->last == NULL || n->last->type == ROFFT_COMMENT)
                mandoc_msg(MANDOCERR_DOC_EMPTY, man->parse,
                    n->line, n->pos, NULL);
        else
                mandoc_msg(MANDOCERR_DOC_EMPTY, man->parse,
                    n->line, n->pos, NULL);
        else
index 0b4b9adf34f286d045f8ddf32ca21e1abc910c1d..3a047007992ed7356e628f1c847a14799bc9155f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_html.c,v 1.294 2017/07/15 17:57:51 schwarze Exp $ */
+/*     $Id: mdoc_html.c,v 1.295 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -344,7 +344,7 @@ print_mdoc_node(MDOC_ARGS)
        int              child;
        struct tag      *t;
 
        int              child;
        struct tag      *t;
 
-       if (n->flags & NODE_NOPRT)
+       if (n->type == ROFFT_COMMENT || n->flags & NODE_NOPRT)
                return;
 
        child = 1;
                return;
 
        child = 1;
index 270b30424785f31577150101d49127593cb87265..bcf9207f79cc5a07cd707e58f8b257de418a02a0 100644 (file)
@@ -1,6 +1,6 @@
-/*     $Id: mdoc_man.c,v 1.125 2018/04/05 22:05:08 schwarze Exp $ */
+/*     $Id: mdoc_man.c,v 1.126 2018/04/11 17:11:13 schwarze Exp $ */
 /*
 /*
- * Copyright (c) 2011-2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2018 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
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -610,6 +610,14 @@ man_mdoc(void *arg, const struct roff_man *mdoc)
 {
        struct roff_node *n;
 
 {
        struct roff_node *n;
 
+       printf(".\\\" Automatically generated from an mdoc input file."
+           "  Do not edit.\n");
+       for (n = mdoc->first->child; n != NULL; n = n->next) {
+               if (n->type != ROFFT_COMMENT)
+                       break;
+               printf(".\\\"%s\n", n->string);
+       }
+
        printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n",
            mdoc->meta.title,
            (mdoc->meta.msec == NULL ? "" : mdoc->meta.msec),
        printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n",
            mdoc->meta.title,
            (mdoc->meta.msec == NULL ? "" : mdoc->meta.msec),
@@ -624,7 +632,7 @@ man_mdoc(void *arg, const struct roff_man *mdoc)
                fontqueue.head = fontqueue.tail = mandoc_malloc(8);
                *fontqueue.tail = 'R';
        }
                fontqueue.head = fontqueue.tail = mandoc_malloc(8);
                *fontqueue.tail = 'R';
        }
-       for (n = mdoc->first->child; n != NULL; n = n->next)
+       for (; n != NULL; n = n->next)
                print_node(&mdoc->meta, n);
        putchar('\n');
 }
                print_node(&mdoc->meta, n);
        putchar('\n');
 }
index 0b0f184821e5bf5990f1eb1a6f9d6a274f41764e..e73440a4e5cd5b757125c647412bd6dd1e2db998 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_markdown.c,v 1.23 2017/06/14 01:31:26 schwarze Exp $ */
+/*     $Id: mdoc_markdown.c,v 1.24 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
  *
 /*
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -294,7 +294,7 @@ md_node(struct roff_node *n)
        const struct md_act     *act;
        int                      cond, process_children;
 
        const struct md_act     *act;
        int                      cond, process_children;
 
-       if (n->flags & NODE_NOPRT)
+       if (n->type == ROFFT_COMMENT || n->flags & NODE_NOPRT)
                return;
 
        if (outflags & MD_nonl)
                return;
 
        if (outflags & MD_nonl)
index 4a163b620620f4c10c8f5e220343ece68be2e546..cf3e7ef3dd6499007c32c37c2e64d3f01c5c90e5 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: mdoc_term.c,v 1.366 2018/04/05 09:17:26 schwarze Exp $ */
+/*     $Id: mdoc_term.c,v 1.367 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2012-2018 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -283,7 +283,9 @@ terminal_mdoc(void *arg, const struct roff_man *mdoc)
                        p->defindent = 5;
                term_begin(p, print_mdoc_head, print_mdoc_foot,
                    &mdoc->meta);
                        p->defindent = 5;
                term_begin(p, print_mdoc_head, print_mdoc_foot,
                    &mdoc->meta);
-               while (n != NULL && n->flags & NODE_NOPRT)
+               while (n != NULL &&
+                   (n->type == ROFFT_COMMENT ||
+                    n->flags & NODE_NOPRT))
                        n = n->next;
                if (n != NULL) {
                        if (n->tok != MDOC_Sh)
                        n = n->next;
                if (n != NULL) {
                        if (n->tok != MDOC_Sh)
@@ -312,7 +314,7 @@ print_mdoc_node(DECL_ARGS)
        struct termpair  npair;
        size_t           offset, rmargin;
 
        struct termpair  npair;
        size_t           offset, rmargin;
 
-       if (n->flags & NODE_NOPRT)
+       if (n->type == ROFFT_COMMENT || n->flags & NODE_NOPRT)
                return;
 
        chld = 1;
                return;
 
        chld = 1;
@@ -567,7 +569,9 @@ print_bvspace(struct termp *p,
        /* Do not vspace directly after Ss/Sh. */
 
        nn = n;
        /* Do not vspace directly after Ss/Sh. */
 
        nn = n;
-       while (nn->prev != NULL && nn->prev->flags & NODE_NOPRT)
+       while (nn->prev != NULL &&
+           (nn->prev->type == ROFFT_COMMENT ||
+            nn->prev->flags & NODE_NOPRT))
                nn = nn->prev;
        while (nn->prev == NULL) {
                do {
                nn = nn->prev;
        while (nn->prev == NULL) {
                do {
@@ -1550,7 +1554,8 @@ termp_ss_pre(DECL_ARGS)
        case ROFFT_BLOCK:
                term_newln(p);
                for (nn = n->prev; nn != NULL; nn = nn->prev)
        case ROFFT_BLOCK:
                term_newln(p);
                for (nn = n->prev; nn != NULL; nn = nn->prev)
-                       if ((nn->flags & NODE_NOPRT) == 0)
+                       if (nn->type != ROFFT_COMMENT &&
+                           (nn->flags & NODE_NOPRT) == 0)
                                break;
                if (nn != NULL)
                        term_vspace(p);
                                break;
                if (nn != NULL)
                        term_vspace(p);
index a82368689cfbae5a1664f59221e05b5e9a6387e3..d455523e4785c27d79569e38ee5c24d6816fc668 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_validate.c,v 1.357 2018/04/05 09:17:26 schwarze Exp $ */
+/*     $Id: mdoc_validate.c,v 1.358 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2018 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -320,6 +320,7 @@ mdoc_node_validate(struct roff_man *mdoc)
                    (np->tok == MDOC_Sh || np->tok == MDOC_Ss)))
                        check_toptext(mdoc, n->line, n->pos, n->string);
                break;
                    (np->tok == MDOC_Sh || np->tok == MDOC_Ss)))
                        check_toptext(mdoc, n->line, n->pos, n->string);
                break;
+       case ROFFT_COMMENT:
        case ROFFT_EQN:
        case ROFFT_TBL:
                break;
        case ROFFT_EQN:
        case ROFFT_TBL:
                break;
@@ -1988,8 +1989,10 @@ post_root(POST_ARGS)
        /* Check that we begin with a proper `Sh'. */
 
        n = mdoc->first->child;
        /* Check that we begin with a proper `Sh'. */
 
        n = mdoc->first->child;
-       while (n != NULL && n->tok >= MDOC_Dd &&
-           mdoc_macros[n->tok].flags & MDOC_PROLOGUE)
+       while (n != NULL &&
+           (n->type == ROFFT_COMMENT ||
+            (n->tok >= MDOC_Dd &&
+             mdoc_macros[n->tok].flags & MDOC_PROLOGUE)))
                n = n->next;
 
        if (n == NULL)
                n = n->next;
 
        if (n == NULL)
diff --git a/roff.c b/roff.c
index d37a9fc718b948b19c6aabe0ec80fb457ce541a7..c0ccca87211b4f0f4302ed7de709364d4b871fb8 100644 (file)
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/*     $Id: roff.c,v 1.327 2018/04/10 00:52:30 schwarze Exp $ */
+/*     $Id: roff.c,v 1.328 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -762,7 +762,7 @@ roff_alloc(struct mparse *parse, int options)
 
        r = mandoc_calloc(1, sizeof(struct roff));
        r->parse = parse;
 
        r = mandoc_calloc(1, sizeof(struct roff));
        r->parse = parse;
-       r->reqtab = roffhash_alloc(0, ROFF_USERDEF);
+       r->reqtab = roffhash_alloc(0, ROFF_RENAMED);
        r->options = options;
        r->format = options & (MPARSE_MDOC | MPARSE_MAN);
        r->rstackpos = -1;
        r->options = options;
        r->format = options & (MPARSE_MDOC | MPARSE_MAN);
        r->rstackpos = -1;
@@ -1122,8 +1122,10 @@ static enum rofferr
 roff_res(struct roff *r, struct buf *buf, int ln, int pos)
 {
        char             ubuf[24]; /* buffer to print the number */
 roff_res(struct roff *r, struct buf *buf, int ln, int pos)
 {
        char             ubuf[24]; /* buffer to print the number */
+       struct roff_node *n;    /* used for header comments */
        const char      *start; /* start of the string to process */
        char            *stesc; /* start of an escape sequence ('\\') */
        const char      *start; /* start of the string to process */
        char            *stesc; /* start of an escape sequence ('\\') */
+       char            *ep;    /* end of comment string */
        const char      *stnam; /* start of the name, after "[(*" */
        const char      *cp;    /* end of the name, e.g. before ']' */
        const char      *res;   /* the string to be substituted */
        const char      *stnam; /* start of the name, after "[(*" */
        const char      *cp;    /* end of the name, e.g. before ']' */
        const char      *res;   /* the string to be substituted */
@@ -1173,14 +1175,35 @@ roff_res(struct roff *r, struct buf *buf, int ln, int pos)
 
                /* Handle trailing whitespace. */
 
 
                /* Handle trailing whitespace. */
 
-               cp = strchr(stesc--, '\0') - 1;
-               if (*cp == '\n') {
+               ep = strchr(stesc--, '\0') - 1;
+               if (*ep == '\n') {
                        done = 1;
                        done = 1;
-                       cp--;
+                       ep--;
                }
                }
-               if (*cp == ' ' || *cp == '\t')
+               if (*ep == ' ' || *ep == '\t')
                        mandoc_msg(MANDOCERR_SPACE_EOL, r->parse,
                        mandoc_msg(MANDOCERR_SPACE_EOL, r->parse,
-                           ln, cp - buf->buf, NULL);
+                           ln, ep - buf->buf, NULL);
+
+               /*
+                * Save comments preceding the title macro
+                * in the syntax tree.
+                */
+
+               if (r->format == 0) {
+                       while (*ep == ' ' || *ep == '\t')
+                               ep--;
+                       ep[1] = '\0';
+                       n = roff_node_alloc(r->man,
+                           ln, stesc + 1 - buf->buf,
+                           ROFFT_COMMENT, TOKEN_NONE);
+                       n->string = mandoc_strdup(stesc + 2);
+                       roff_node_append(r->man, n);
+                       n->flags |= NODE_VALID | NODE_ENDED;
+                       r->man->next = ROFF_NEXT_SIBLING;
+               }
+
+               /* Discard comments. */
+
                while (stesc > start && stesc[-1] == ' ')
                        stesc--;
                *stesc = '\0';
                while (stesc > start && stesc[-1] == ' ')
                        stesc--;
                *stesc = '\0';
diff --git a/roff.h b/roff.h
index 8b28d5960974a570226560e170423d099544115b..f0da74bd9ac66adab5fdf333ddbc2a2786c05e40 100644 (file)
--- a/roff.h
+++ b/roff.h
@@ -1,4 +1,4 @@
-/*     $Id: roff.h,v 1.58 2017/07/08 14:51:05 schwarze Exp $   */
+/*     $Id: roff.h,v 1.59 2018/04/11 17:11:13 schwarze Exp $   */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -61,6 +61,7 @@ enum  roff_type {
        ROFFT_TAIL,
        ROFFT_ELEM,
        ROFFT_TEXT,
        ROFFT_TAIL,
        ROFFT_ELEM,
        ROFFT_TEXT,
+       ROFFT_COMMENT,
        ROFFT_TBL,
        ROFFT_EQN
 };
        ROFFT_TBL,
        ROFFT_EQN
 };
diff --git a/tree.c b/tree.c
index 7d18b9d9e68625221313e478cc8d20145292e0d2..b9774e1cd8e1ac0d8655484e5cf65296a8cd0234 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -1,7 +1,7 @@
-/*     $Id: tree.c,v 1.77 2017/07/08 14:51:05 schwarze Exp $ */
+/*     $Id: tree.c,v 1.78 2018/04/11 17:11:13 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013,2014,2015,2017,2018 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
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -115,6 +115,9 @@ print_mdoc(const struct roff_node *n, int indent)
        case ROFFT_TEXT:
                t = "text";
                break;
        case ROFFT_TEXT:
                t = "text";
                break;
+       case ROFFT_COMMENT:
+               t = "comment";
+               break;
        case ROFFT_TBL:
                break;
        case ROFFT_EQN:
        case ROFFT_TBL:
                break;
        case ROFFT_EQN:
@@ -126,6 +129,7 @@ print_mdoc(const struct roff_node *n, int indent)
 
        switch (n->type) {
        case ROFFT_TEXT:
 
        switch (n->type) {
        case ROFFT_TEXT:
+       case ROFFT_COMMENT:
                p = n->string;
                break;
        case ROFFT_BODY:
                p = n->string;
                break;
        case ROFFT_BODY:
@@ -231,6 +235,9 @@ print_man(const struct roff_node *n, int indent)
        case ROFFT_TEXT:
                t = "text";
                break;
        case ROFFT_TEXT:
                t = "text";
                break;
+       case ROFFT_COMMENT:
+               t = "comment";
+               break;
        case ROFFT_BLOCK:
                t = "block";
                break;
        case ROFFT_BLOCK:
                t = "block";
                break;
@@ -251,6 +258,7 @@ print_man(const struct roff_node *n, int indent)
 
        switch (n->type) {
        case ROFFT_TEXT:
 
        switch (n->type) {
        case ROFFT_TEXT:
+       case ROFFT_COMMENT:
                p = n->string;
                break;
        case ROFFT_ELEM:
                p = n->string;
                break;
        case ROFFT_ELEM: