aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--mandoc.114
-rw-r--r--tree.c32
2 files changed, 39 insertions, 7 deletions
diff --git a/mandoc.1 b/mandoc.1
index f99bb14b..a6738ef6 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.169 2017/01/10 12:53:07 schwarze Exp $
+.\" $Id: mandoc.1,v 1.170 2017/01/12 17:29:33 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 10 2017 $
+.Dd $Mdocdate: January 12 2017 $
.Dt MANDOC 1
.Os
.Sh NAME
@@ -498,7 +498,15 @@ Use
to show a human readable representation of the syntax tree.
It is useful for debugging the source code of manual pages.
The exact format is subject to change, so don't write parsers for it.
-Each output line shows one syntax tree node.
+.Pp
+The first paragraph shows meta data found in the
+.Xr mdoc 7
+prologue, on the
+.Xr man 7
+.Ic \&TH
+line, or the fallbacks used.
+.Pp
+In the tree dump, each output line shows one syntax tree node.
Child nodes are indented with respect to their parent node.
The columns are:
.Pp
diff --git a/tree.c b/tree.c
index ec8f6045..9e68b69e 100644
--- a/tree.c
+++ b/tree.c
@@ -1,7 +1,7 @@
-/* $Id: tree.c,v 1.71 2017/01/10 13:47:00 schwarze Exp $ */
+/* $Id: tree.c,v 1.72 2017/01/12 17:29:33 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015, 2017 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
@@ -33,6 +33,7 @@
static void print_box(const struct eqn_box *, int);
static void print_man(const struct roff_node *, int);
+static void print_meta(const struct roff_meta *);
static void print_mdoc(const struct roff_node *, int);
static void print_span(const struct tbl_span *, int);
@@ -40,18 +41,41 @@ static void print_span(const struct tbl_span *, int);
void
tree_mdoc(void *arg, const struct roff_man *mdoc)
{
-
+ print_meta(&mdoc->meta);
+ putchar('\n');
print_mdoc(mdoc->first->child, 0);
}
void
tree_man(void *arg, const struct roff_man *man)
{
-
+ print_meta(&man->meta);
+ if (man->meta.hasbody == 0)
+ puts("body = empty");
+ putchar('\n');
print_man(man->first->child, 0);
}
static void
+print_meta(const struct roff_meta *meta)
+{
+ if (meta->title != NULL)
+ printf("title = \"%s\"\n", meta->title);
+ if (meta->name != NULL)
+ printf("name = \"%s\"\n", meta->name);
+ if (meta->msec != NULL)
+ printf("sec = \"%s\"\n", meta->msec);
+ if (meta->vol != NULL)
+ printf("vol = \"%s\"\n", meta->vol);
+ if (meta->arch != NULL)
+ printf("arch = \"%s\"\n", meta->arch);
+ if (meta->os != NULL)
+ printf("os = \"%s\"\n", meta->os);
+ if (meta->date != NULL)
+ printf("date = \"%s\"\n", meta->date);
+}
+
+static void
print_mdoc(const struct roff_node *n, int indent)
{
const char *p, *t;