summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2017-05-04 22:07:44 +0000
committerschwarze <schwarze@openbsd.org>2017-05-04 22:07:44 +0000
commit96a5de472ceddce830e148f3c839441f7b9343b2 (patch)
treefcc212399dcdae50546a59c41f02be08c9f1a3c5
parentenable brgphy, which appears in the edgerouter pro (diff)
downloadwireguard-openbsd-96a5de472ceddce830e148f3c839441f7b9343b2.tar.xz
wireguard-openbsd-96a5de472ceddce830e148f3c839441f7b9343b2.zip
Start roff formatter modules for HTML and termininal output,
used by both the mdoc and man formatters, with the ultimate goal of reducing code duplication between the two macro formatters. Made possible by the parser unification. Add the first formatting function (for the .br request).
-rw-r--r--usr.bin/mandoc/Makefile11
-rw-r--r--usr.bin/mandoc/html.h4
-rw-r--r--usr.bin/mandoc/man_html.c26
-rw-r--r--usr.bin/mandoc/man_term.c14
-rw-r--r--usr.bin/mandoc/mdoc_html.c26
-rw-r--r--usr.bin/mandoc/mdoc_term.c10
-rw-r--r--usr.bin/mandoc/roff_html.c48
-rw-r--r--usr.bin/mandoc/roff_term.c52
-rw-r--r--usr.bin/mandoc/term.h12
9 files changed, 137 insertions, 66 deletions
diff --git a/usr.bin/mandoc/Makefile b/usr.bin/mandoc/Makefile
index d5943c1e69f..08c555b9a6f 100644
--- a/usr.bin/mandoc/Makefile
+++ b/usr.bin/mandoc/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.106 2017/04/29 12:43:55 schwarze Exp $
+# $OpenBSD: Makefile,v 1.107 2017/05/04 22:07:44 schwarze Exp $
.include <bsd.own.mk>
@@ -6,16 +6,17 @@ CFLAGS += -W -Wall -Wstrict-prototypes -Wno-unused-parameter
DPADD += ${LIBUTIL}
LDADD += -lutil -lz
-SRCS= mandoc.c mandoc_aux.c mandoc_ohash.c preconv.c read.c \
+SRCS= mandoc_aux.c mandoc_ohash.c mandoc.c chars.c preconv.c read.c \
roff.c tbl.c tbl_opts.c tbl_layout.c tbl_data.c eqn.c
SRCS+= mdoc_macro.c mdoc.c \
mdoc_argv.c mdoc_state.c mdoc_validate.c att.c msec.c st.c
SRCS+= man_macro.c man.c man_validate.c
-SRCS+= main.c mdoc_term.c tag.c chars.c term.c tree.c man_term.c eqn_term.c
+SRCS+= main.c out.c tag.c tree.c
+SRCS+= term.c term_ascii.c term_ps.c
+SRCS+= roff_term.c mdoc_term.c man_term.c eqn_term.c tbl_term.c
SRCS+= mdoc_man.c
-SRCS+= html.c mdoc_html.c man_html.c out.c eqn_html.c
+SRCS+= html.c roff_html.c mdoc_html.c man_html.c eqn_html.c tbl_html.c
SRCS+= mdoc_markdown.c
-SRCS+= term_ps.c term_ascii.c tbl_term.c tbl_html.c
SRCS+= dbm_map.c dbm.c dba_write.c dba_array.c dba.c dba_read.c
SRCS+= manpath.c mandocdb.c mansearch.c
diff --git a/usr.bin/mandoc/html.h b/usr.bin/mandoc/html.h
index b4446f0d665..b4a4c35cb82 100644
--- a/usr.bin/mandoc/html.h
+++ b/usr.bin/mandoc/html.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: html.h,v 1.46 2017/03/15 11:29:50 schwarze Exp $ */
+/* $OpenBSD: html.h,v 1.47 2017/05/04 22:07:44 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -116,6 +116,8 @@ struct roff_node;
struct tbl_span;
struct eqn;
+void roff_html_pre(struct html *, const struct roff_node *);
+
void print_gen_decls(struct html *);
void print_gen_head(struct html *);
struct tag *print_otag(struct html *, enum htmltag, const char *, ...);
diff --git a/usr.bin/mandoc/man_html.c b/usr.bin/mandoc/man_html.c
index 30f90693618..0aa05cb62d3 100644
--- a/usr.bin/mandoc/man_html.c
+++ b/usr.bin/mandoc/man_html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: man_html.c,v 1.90 2017/05/04 17:48:24 schwarze Exp $ */
+/* $OpenBSD: man_html.c,v 1.91 2017/05/04 22:07:44 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -63,11 +63,11 @@ static int man_SM_pre(MAN_ARGS);
static int man_SS_pre(MAN_ARGS);
static int man_UR_pre(MAN_ARGS);
static int man_alt_pre(MAN_ARGS);
-static int man_br_pre(MAN_ARGS);
static int man_ign_pre(MAN_ARGS);
static int man_in_pre(MAN_ARGS);
static void man_root_post(MAN_ARGS);
static void man_root_pre(MAN_ARGS);
+static int man_sp_pre(MAN_ARGS);
static const struct htmlman __mans[MAN_MAX - MAN_TH] = {
{ NULL, NULL }, /* TH */
@@ -90,7 +90,7 @@ static const struct htmlman __mans[MAN_MAX - MAN_TH] = {
{ man_I_pre, NULL }, /* I */
{ man_alt_pre, NULL }, /* IR */
{ man_alt_pre, NULL }, /* RI */
- { man_br_pre, NULL }, /* sp */
+ { man_sp_pre, NULL }, /* sp */
{ NULL, NULL }, /* nf */
{ NULL, NULL }, /* fi */
{ NULL, NULL }, /* RE */
@@ -303,13 +303,7 @@ print_man_node(MAN_ARGS)
t = h->tag;
if (n->tok < ROFF_MAX) {
- switch(n->tok) {
- case ROFF_br:
- man_br_pre(man, n, h);
- break;
- default:
- abort();
- }
+ roff_html_pre(h, n);
break;
}
@@ -421,18 +415,14 @@ man_root_post(MAN_ARGS)
static int
-man_br_pre(MAN_ARGS)
+man_sp_pre(MAN_ARGS)
{
struct roffsu su;
SCALE_VS_INIT(&su, 1);
-
- if (MAN_sp == n->tok) {
- if (NULL != (n = n->child))
- if ( ! a2roffsu(n->string, &su, SCALE_VS))
- su.scale = 1.0;
- } else
- su.scale = 0.0;
+ if (NULL != (n = n->child))
+ if ( ! a2roffsu(n->string, &su, SCALE_VS))
+ su.scale = 1.0;
print_otag(h, TAG_DIV, "suh", &su);
diff --git a/usr.bin/mandoc/man_term.c b/usr.bin/mandoc/man_term.c
index 526606aacba..467d719c7e2 100644
--- a/usr.bin/mandoc/man_term.c
+++ b/usr.bin/mandoc/man_term.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: man_term.c,v 1.146 2017/05/04 17:48:24 schwarze Exp $ */
+/* $OpenBSD: man_term.c,v 1.147 2017/05/04 22:07:44 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -455,9 +455,7 @@ pre_sp(DECL_ARGS)
}
}
- if (n->tok == ROFF_br)
- len = 0;
- else if (n->child == NULL)
+ if (n->child == NULL)
len = 1;
else {
if ( ! a2roffsu(n->child->string, &su, SCALE_VS))
@@ -985,13 +983,7 @@ print_man_node(DECL_ARGS)
}
if (n->tok < ROFF_MAX) {
- switch (n->tok) {
- case ROFF_br:
- pre_sp(p, mt, n, meta);
- break;
- default:
- abort();
- }
+ roff_term_pre(p, n);
return;
}
diff --git a/usr.bin/mandoc/mdoc_html.c b/usr.bin/mandoc/mdoc_html.c
index 72afef4cf03..de61d94cfcb 100644
--- a/usr.bin/mandoc/mdoc_html.c
+++ b/usr.bin/mandoc/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mdoc_html.c,v 1.156 2017/05/04 17:48:24 schwarze Exp $ */
+/* $OpenBSD: mdoc_html.c,v 1.157 2017/05/04 22:07:44 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -392,13 +392,7 @@ print_mdoc_node(MDOC_ARGS)
}
assert(h->tblt == NULL);
if (n->tok < ROFF_MAX) {
- switch(n->tok) {
- case ROFF_br:
- mdoc_sp_pre(meta, n, h);
- break;
- default:
- abort();
- }
+ roff_html_pre(h, n);
break;
}
assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
@@ -1335,16 +1329,12 @@ mdoc_sp_pre(MDOC_ARGS)
struct roffsu su;
SCALE_VS_INIT(&su, 1);
-
- if (MDOC_sp == n->tok) {
- if (NULL != (n = n->child)) {
- if ( ! a2roffsu(n->string, &su, SCALE_VS))
- su.scale = 1.0;
- else if (su.scale < 0.0)
- su.scale = 0.0;
- }
- } else
- su.scale = 0.0;
+ if (NULL != (n = n->child)) {
+ if ( ! a2roffsu(n->string, &su, SCALE_VS))
+ su.scale = 1.0;
+ else if (su.scale < 0.0)
+ su.scale = 0.0;
+ }
print_otag(h, TAG_DIV, "suh", &su);
diff --git a/usr.bin/mandoc/mdoc_term.c b/usr.bin/mandoc/mdoc_term.c
index 7dd2f7e2447..4f33c5865a0 100644
--- a/usr.bin/mandoc/mdoc_term.c
+++ b/usr.bin/mandoc/mdoc_term.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mdoc_term.c,v 1.250 2017/05/04 17:48:24 schwarze Exp $ */
+/* $OpenBSD: mdoc_term.c,v 1.251 2017/05/04 22:07:44 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -363,13 +363,7 @@ print_mdoc_node(DECL_ARGS)
break;
default:
if (n->tok < ROFF_MAX) {
- switch (n->tok) {
- case ROFF_br:
- termp_sp_pre(p, &npair, meta, n);
- break;
- default:
- abort();
- }
+ roff_term_pre(p, n);
break;
}
assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
diff --git a/usr.bin/mandoc/roff_html.c b/usr.bin/mandoc/roff_html.c
new file mode 100644
index 00000000000..d6c460ac47d
--- /dev/null
+++ b/usr.bin/mandoc/roff_html.c
@@ -0,0 +1,48 @@
+/* $OpenBSD: roff_html.c,v 1.1 2017/05/04 22:07:44 schwarze Exp $ */
+/*
+ * Copyright (c) 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
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * 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.
+ */
+#include <sys/types.h>
+
+#include <assert.h>
+
+#include "roff.h"
+#include "out.h"
+#include "html.h"
+
+#define ROFF_HTML_ARGS struct html *h, const struct roff_node *n
+
+typedef void (*roff_html_pre_fp)(ROFF_HTML_ARGS);
+
+static void roff_html_pre_br(ROFF_HTML_ARGS);
+
+static const roff_html_pre_fp roff_html_pre_acts[ROFF_MAX] = {
+ roff_html_pre_br, /* br */
+};
+
+
+void
+roff_html_pre(struct html *h, const struct roff_node *n)
+{
+ assert(n->tok < ROFF_MAX);
+ (*roff_html_pre_acts[n->tok])(h, n);
+}
+
+static void
+roff_html_pre_br(ROFF_HTML_ARGS)
+{
+ print_otag(h, TAG_DIV, "");
+ print_text(h, "\\~"); /* So the div isn't empty. */
+}
diff --git a/usr.bin/mandoc/roff_term.c b/usr.bin/mandoc/roff_term.c
new file mode 100644
index 00000000000..c4e5b818cd4
--- /dev/null
+++ b/usr.bin/mandoc/roff_term.c
@@ -0,0 +1,52 @@
+/* $OpenBSD: roff_term.c,v 1.1 2017/05/04 22:07:44 schwarze Exp $ */
+/*
+ * Copyright (c) 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
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * 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.
+ */
+#include <sys/types.h>
+
+#include <assert.h>
+
+#include "roff.h"
+#include "out.h"
+#include "term.h"
+
+#define ROFF_TERM_ARGS struct termp *p, const struct roff_node *n
+
+typedef void (*roff_term_pre_fp)(ROFF_TERM_ARGS);
+
+static void roff_term_pre_br(ROFF_TERM_ARGS);
+
+static const roff_term_pre_fp roff_term_pre_acts[ROFF_MAX] = {
+ roff_term_pre_br, /* br */
+};
+
+
+void
+roff_term_pre(struct termp *p, const struct roff_node *n)
+{
+ assert(n->tok < ROFF_MAX);
+ (*roff_term_pre_acts[n->tok])(p, n);
+}
+
+static void
+roff_term_pre_br(ROFF_TERM_ARGS)
+{
+ term_newln(p);
+ if (p->flags & TERMP_BRIND) {
+ p->offset = p->rmargin;
+ p->rmargin = p->maxrmargin;
+ p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
+ }
+}
diff --git a/usr.bin/mandoc/term.h b/usr.bin/mandoc/term.h
index 770d24f3d29..4b688de65d5 100644
--- a/usr.bin/mandoc/term.h
+++ b/usr.bin/mandoc/term.h
@@ -1,7 +1,7 @@
-/* $OpenBSD: term.h,v 1.62 2015/11/07 13:57:55 schwarze Exp $ */
+/* $OpenBSD: term.h,v 1.63 2017/05/04 22:07:44 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-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
@@ -38,7 +38,10 @@ enum termfont {
#define TERM_MAXMARGIN 100000 /* FIXME */
+struct eqn;
struct roff_meta;
+struct roff_node;
+struct tbl_span;
struct termp;
typedef void (*term_margin)(struct termp *, const struct roff_meta *);
@@ -106,11 +109,10 @@ struct termp {
};
-struct tbl_span;
-struct eqn;
-
const char *ascii_uc2str(int);
+void roff_term_pre(struct termp *, const struct roff_node *);
+
void term_eqn(struct termp *, const struct eqn *);
void term_tbl(struct termp *, const struct tbl_span *);
void term_free(struct termp *);