=================================================================== RCS file: /cvs/mandoc/tree.c,v retrieving revision 1.85 retrieving revision 1.89 diff -u -p -r1.85 -r1.89 --- mandoc/tree.c 2020/01/11 16:03:42 1.85 +++ mandoc/tree.c 2020/04/08 11:56:04 1.89 @@ -1,7 +1,7 @@ -/* $Id: tree.c,v 1.85 2020/01/11 16:03:42 schwarze Exp $ */ +/* $Id: tree.c,v 1.89 2020/04/08 11:56:04 schwarze Exp $ */ /* - * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons * Copyright (c) 2013-2015, 2017-2020 Ingo Schwarze + * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,6 +14,9 @@ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Formatting module to let mandoc(1) show + * a human readable representation of the syntax tree. */ #include "config.h" @@ -33,6 +36,7 @@ #include "eqn.h" #include "main.h" +static void print_attr(const struct roff_node *); static void print_box(const struct eqn_box *, int); static void print_cellt(enum tbl_cellt); static void print_man(const struct roff_node *, int); @@ -188,28 +192,8 @@ print_mdoc(const struct roff_node *n, int indent) if (argv[i].sz > 0) printf(" ]"); } - - putchar(' '); - if (n->flags & NODE_DELIMO) - putchar('('); - if (n->flags & NODE_LINE) - putchar('*'); - printf("%d:%d", n->line, n->pos + 1); - if (n->flags & NODE_DELIMC) - putchar(')'); - if (n->flags & NODE_EOS) - putchar('.'); - if (n->flags & NODE_BROKEN) - printf(" BROKEN"); - if (n->flags & NODE_NOFILL) - printf(" NOFILL"); - if (n->flags & NODE_NOSRC) - printf(" NOSRC"); - if (n->flags & NODE_NOPRT) - printf(" NOPRT"); - putchar('\n'); + print_attr(n); } - if (n->eqn) print_box(n->eqn->first, indent + 4); if (n->child) @@ -290,19 +274,9 @@ print_man(const struct roff_node *n, int indent) } else { for (i = 0; i < indent; i++) putchar(' '); - printf("%s (%s) ", p, t); - if (n->flags & NODE_LINE) - putchar('*'); - printf("%d:%d", n->line, n->pos + 1); - if (n->flags & NODE_DELIMC) - putchar(')'); - if (n->flags & NODE_EOS) - putchar('.'); - if (n->flags & NODE_NOFILL) - printf(" NOFILL"); - putchar('\n'); + printf("%s (%s)", p, t); + print_attr(n); } - if (n->eqn) print_box(n->eqn->first, indent + 4); if (n->child) @@ -310,6 +284,40 @@ print_man(const struct roff_node *n, int indent) (n->type == ROFFT_BLOCK ? 2 : 4)); if (n->next) print_man(n->next, indent); +} + +static void +print_attr(const struct roff_node *n) +{ + putchar(' '); + if (n->flags & NODE_DELIMO) + putchar('('); + if (n->flags & NODE_LINE) + putchar('*'); + printf("%d:%d", n->line, n->pos + 1); + if (n->flags & NODE_DELIMC) + putchar(')'); + if (n->flags & NODE_EOS) + putchar('.'); + if (n->flags & NODE_ID) { + printf(" ID"); + if (n->flags & NODE_HREF) + printf("=HREF"); + } else if (n->flags & NODE_HREF) + printf(" HREF"); + else if (n->tag != NULL) + printf(" STRAYTAG"); + if (n->tag != NULL) + printf("=%s", n->tag); + if (n->flags & NODE_BROKEN) + printf(" BROKEN"); + if (n->flags & NODE_NOFILL) + printf(" NOFILL"); + if (n->flags & NODE_NOSRC) + printf(" NOSRC"); + if (n->flags & NODE_NOPRT) + printf(" NOPRT"); + putchar('\n'); } static void